diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json
index e02fb0938c..6491d09d56 100644
--- a/api/jsonschema/schema.json
+++ b/api/jsonschema/schema.json
@@ -1669,6 +1669,14 @@
"type": "array",
"x-kubernetes-patch-merge-key": "type",
"x-kubernetes-patch-strategy": "merge"
+ },
+ "lastUpdated": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"
+ },
+ "observedGeneration": {
+ "description": "The generation observed by the controller.",
+ "format": "int64",
+ "type": "integer"
}
},
"type": "object"
@@ -3913,6 +3921,14 @@
"type": "array",
"x-kubernetes-patch-merge-key": "type",
"x-kubernetes-patch-strategy": "merge"
+ },
+ "lastUpdated": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"
+ },
+ "observedGeneration": {
+ "description": "The generation observed by the controller.",
+ "format": "int64",
+ "type": "integer"
}
},
"type": "object"
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index 4a6ebe91cd..2ddfb035aa 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -1656,6 +1656,14 @@
},
"x-kubernetes-patch-merge-key": "type",
"x-kubernetes-patch-strategy": "merge"
+ },
+ "lastUpdated": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"
+ },
+ "observedGeneration": {
+ "description": "The generation observed by the controller.",
+ "type": "integer",
+ "format": "int64"
}
}
},
@@ -3888,6 +3896,14 @@
},
"x-kubernetes-patch-merge-key": "type",
"x-kubernetes-patch-strategy": "merge"
+ },
+ "lastUpdated": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"
+ },
+ "observedGeneration": {
+ "description": "The generation observed by the controller.",
+ "type": "integer",
+ "format": "int64"
}
}
},
diff --git a/docs/APIs.md b/docs/APIs.md
index 04e0fc61ba..59fe34a1d0 100644
--- a/docs/APIs.md
+++ b/docs/APIs.md
@@ -8252,6 +8252,41 @@ Status
+
+
+
+
+lastUpdated
+
+Kubernetes meta/v1.Time
+ |
+
+
+
+(Optional)
+ |
+
+
+
+
+
+
+
+observedGeneration int64
+ |
+
+
+
+(Optional)
+
+
+The generation observed by the controller.
+
+
+ |
+
+
+
@@ -18461,6 +18496,41 @@ Status
+
+
+
+
+lastUpdated
+
+Kubernetes meta/v1.Time
+ |
+
+
+
+(Optional)
+ |
+
+
+
+
+
+
+
+observedGeneration int64
+ |
+
+
+
+(Optional)
+
+
+The generation observed by the controller.
+
+
+ |
+
+
+
diff --git a/pkg/apis/events/v1alpha1/const.go b/pkg/apis/events/v1alpha1/const.go
index 2df5b93130..7739df3e93 100644
--- a/pkg/apis/events/v1alpha1/const.go
+++ b/pkg/apis/events/v1alpha1/const.go
@@ -7,6 +7,28 @@ import (
corev1 "k8s.io/api/core/v1"
)
+const (
+ Project = "argo-events"
+
+ KeyComponent = "app.kubernetes.io/component"
+ KeyPartOf = "app.kubernetes.io/part-of"
+ KeyManagedBy = "app.kubernetes.io/managed-by"
+ KeyAppName = "app.kubernetes.io/name"
+ KeyHash = "events.argoproj.io/hash" // hash of the object
+ KeyEventSourceName = "events.argoproj.io/eventsource-name"
+ KeySensorName = "events.argoproj.io/sensor-name"
+
+ // controllers
+ ControllerEventBus = "eventbus-controller"
+ ControllerEventSource = "eventsource-controller"
+ ControllerSensor = "sensor-controller"
+
+ // components
+ ComponentEventBus = "eventbus"
+ ComponentEventSource = "eventsourcd"
+ ComponentSensor = "sensor"
+)
+
// EventSourceType is the type of event source
type EventSourceType string
diff --git a/pkg/apis/events/v1alpha1/eventsource_types.go b/pkg/apis/events/v1alpha1/eventsource_types.go
index 84dbbf2e06..f382146ff5 100644
--- a/pkg/apis/events/v1alpha1/eventsource_types.go
+++ b/pkg/apis/events/v1alpha1/eventsource_types.go
@@ -1,6 +1,8 @@
package v1alpha1
import (
+ "fmt"
+
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
@@ -122,6 +124,14 @@ func (e EventSourceSpec) GetReplicas() int32 {
return replicas
}
+func (es EventSource) GetDeploymentName() string {
+ return fmt.Sprintf("%s-es", es.Name)
+}
+
+func (es EventSource) GetServiceName() string {
+ return fmt.Sprintf("%s-es-svc", es.Name)
+}
+
// Service holds the service information eventsource exposes
type Service struct {
// Metadata sets the pods's metadata, i.e. annotations and labels
@@ -1497,6 +1507,11 @@ const (
// EventSourceStatus holds the status of the event-source resource
type EventSourceStatus struct {
Status `json:",inline" protobuf:"bytes,1,opt,name=status"`
+ // +optional
+ LastUpdated metav1.Time `json:"lastUpdated,omitempty" protobuf:"bytes,2,opt,name=lastUpdated"`
+ // The generation observed by the controller.
+ // +optional
+ ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,3,opt,name=observedGeneration"`
}
// InitConditions sets conditions to Unknown state.
@@ -1523,3 +1538,8 @@ func (es *EventSourceStatus) MarkDeployed() {
func (es *EventSourceStatus) MarkDeployFailed(reason, message string) {
es.MarkFalse(EventSourceConditionDeployed, reason, message)
}
+
+// SetObservedGeneration sets the Status ObservedGeneration
+func (pls *EventSourceStatus) SetObservedGeneration(value int64) {
+ pls.ObservedGeneration = value
+}
diff --git a/pkg/apis/events/v1alpha1/generated.pb.go b/pkg/apis/events/v1alpha1/generated.pb.go
index cbebb4c13c..4f7d1f32b1 100644
--- a/pkg/apis/events/v1alpha1/generated.pb.go
+++ b/pkg/apis/events/v1alpha1/generated.pb.go
@@ -3929,818 +3929,823 @@ func init() {
}
var fileDescriptor_e864cc3344a263b9 = []byte{
- // 12961 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc9,
- 0x75, 0xd8, 0xcd, 0x27, 0x39, 0x8f, 0x9f, 0x5b, 0xfb, 0x71, 0xbc, 0xf5, 0xdd, 0x72, 0x3d, 0x07,
- 0x5d, 0xee, 0xec, 0x13, 0x29, 0x9d, 0x24, 0x7b, 0x7d, 0x8a, 0xcf, 0x1a, 0x7e, 0xed, 0x72, 0x97,
- 0xe4, 0x72, 0xdf, 0x70, 0x77, 0xf5, 0xe5, 0xbb, 0x6b, 0xce, 0x14, 0x87, 0x7d, 0x9c, 0xe9, 0x9e,
- 0xed, 0xee, 0xe1, 0x2e, 0x2f, 0x90, 0x7c, 0xb6, 0xa4, 0xb3, 0x24, 0x2b, 0x92, 0x2c, 0x08, 0x86,
- 0x12, 0x38, 0x46, 0x0c, 0x23, 0xb1, 0x9d, 0xc4, 0x41, 0x10, 0x03, 0xce, 0xdf, 0x20, 0x41, 0x12,
- 0x21, 0x70, 0x00, 0x1b, 0xb0, 0x63, 0x23, 0x09, 0x16, 0xd1, 0xca, 0x49, 0x80, 0x00, 0xca, 0xc7,
- 0xaf, 0x24, 0x9b, 0x3f, 0x41, 0x7d, 0x76, 0x75, 0x4f, 0x0f, 0xc9, 0x61, 0xcf, 0x70, 0x6f, 0x11,
- 0xff, 0x22, 0xa7, 0xde, 0xab, 0xf7, 0xaa, 0xeb, 0xe3, 0xd5, 0xab, 0x57, 0xef, 0xbd, 0x82, 0x6b,
- 0x0d, 0x3b, 0xd8, 0xed, 0x6c, 0xcf, 0xd5, 0xdc, 0xd6, 0xbc, 0xe5, 0x35, 0xdc, 0xb6, 0xe7, 0xbe,
- 0xc3, 0xff, 0xf9, 0x30, 0xdd, 0xa7, 0x4e, 0xe0, 0xcf, 0xb7, 0xf7, 0x1a, 0xf3, 0x56, 0xdb, 0xf6,
- 0xe7, 0xe5, 0xef, 0xfd, 0x8f, 0x5a, 0xcd, 0xf6, 0xae, 0xf5, 0xd1, 0xf9, 0x06, 0x75, 0xa8, 0x67,
- 0x05, 0xb4, 0x3e, 0xd7, 0xf6, 0xdc, 0xc0, 0x25, 0x57, 0x42, 0x4a, 0x73, 0x8a, 0x12, 0xff, 0xe7,
- 0x2d, 0x51, 0x73, 0xae, 0xbd, 0xd7, 0x98, 0x63, 0x94, 0xe6, 0xe4, 0x6f, 0x45, 0xe9, 0xe2, 0x87,
- 0x8d, 0x36, 0x34, 0xdc, 0x86, 0x3b, 0xcf, 0x09, 0x6e, 0x77, 0x76, 0xf8, 0x2f, 0xfe, 0x83, 0xff,
- 0x27, 0x18, 0x5d, 0x2c, 0xef, 0x5d, 0xf1, 0xe7, 0x6c, 0x97, 0xb5, 0x6a, 0xbe, 0xe6, 0x7a, 0x74,
- 0x7e, 0xbf, 0xab, 0x31, 0x17, 0x3f, 0x1e, 0xe2, 0xb4, 0xac, 0xda, 0xae, 0xed, 0x50, 0xef, 0x40,
- 0x7d, 0xca, 0xbc, 0x47, 0x7d, 0xb7, 0xe3, 0xd5, 0x68, 0x5f, 0xb5, 0xfc, 0xf9, 0x16, 0x0d, 0xac,
- 0x24, 0x5e, 0xf3, 0xbd, 0x6a, 0x79, 0x1d, 0x27, 0xb0, 0x5b, 0xdd, 0x6c, 0x7e, 0xea, 0xa8, 0x0a,
- 0x7e, 0x6d, 0x97, 0xb6, 0xac, 0x78, 0xbd, 0xf2, 0xff, 0xc9, 0xc0, 0x99, 0xca, 0xfa, 0xad, 0xcd,
- 0x45, 0xd7, 0xf1, 0x3b, 0x2d, 0xba, 0xe8, 0x3a, 0x3b, 0x76, 0x83, 0x7c, 0x02, 0xc6, 0x6a, 0xa2,
- 0xc0, 0xdb, 0xb2, 0x1a, 0x33, 0x99, 0xcb, 0x99, 0x97, 0x4b, 0x0b, 0x67, 0xbf, 0xff, 0x70, 0xf6,
- 0x99, 0x47, 0x0f, 0x67, 0xc7, 0x16, 0x43, 0x10, 0x9a, 0x78, 0xe4, 0x15, 0x18, 0xb1, 0x3a, 0x81,
- 0x5b, 0xa9, 0xed, 0xcd, 0x64, 0x2f, 0x67, 0x5e, 0x1e, 0x5d, 0x98, 0x92, 0x55, 0x46, 0x2a, 0xa2,
- 0x18, 0x15, 0x9c, 0xcc, 0x43, 0x89, 0x3e, 0xa8, 0x35, 0x3b, 0xbe, 0xbd, 0x4f, 0x67, 0x72, 0x1c,
- 0xf9, 0x8c, 0x44, 0x2e, 0x2d, 0x2b, 0x00, 0x86, 0x38, 0x8c, 0xb6, 0xe3, 0xae, 0xb9, 0x35, 0xab,
- 0x39, 0x93, 0x8f, 0xd2, 0xde, 0x10, 0xc5, 0xa8, 0xe0, 0xe4, 0x25, 0x28, 0x3a, 0xee, 0x5d, 0xcb,
- 0x0e, 0x66, 0x0a, 0x1c, 0x73, 0x52, 0x62, 0x16, 0x37, 0x78, 0x29, 0x4a, 0x68, 0xf9, 0xbf, 0x8e,
- 0xc1, 0x14, 0xfb, 0xf6, 0x65, 0x36, 0x77, 0xaa, 0x7c, 0xf8, 0xc8, 0x0b, 0x90, 0xeb, 0x78, 0x4d,
- 0xf9, 0xc5, 0x63, 0xb2, 0x62, 0xee, 0x36, 0xae, 0x21, 0x2b, 0x27, 0x57, 0x60, 0x9c, 0x3e, 0xa8,
- 0xed, 0x5a, 0x4e, 0x83, 0x6e, 0x58, 0x2d, 0xca, 0x3f, 0xb3, 0xb4, 0x70, 0x4e, 0xe2, 0x8d, 0x2f,
- 0x1b, 0x30, 0x8c, 0x60, 0x9a, 0x35, 0xb7, 0x0e, 0xda, 0xe2, 0x9b, 0x13, 0x6a, 0x32, 0x18, 0x46,
- 0x30, 0xc9, 0x6b, 0x00, 0x9e, 0xdb, 0x09, 0x6c, 0xa7, 0x71, 0x83, 0x1e, 0xf0, 0x8f, 0x2f, 0x2d,
- 0x10, 0x59, 0x0f, 0x50, 0x43, 0xd0, 0xc0, 0x22, 0xef, 0x67, 0xe0, 0x4c, 0xcd, 0x75, 0x1c, 0x5a,
- 0x0b, 0x6c, 0xd7, 0x59, 0xb0, 0x6a, 0x7b, 0xee, 0xce, 0x0e, 0xef, 0x8e, 0xb1, 0xd7, 0x2a, 0x73,
- 0x27, 0x5d, 0x55, 0x73, 0x92, 0xd0, 0xc2, 0xf9, 0x47, 0x0f, 0x67, 0xcf, 0x2c, 0xc6, 0xe9, 0x63,
- 0x37, 0x4b, 0xf2, 0x2a, 0x8c, 0xbe, 0xe3, 0xbb, 0xce, 0x82, 0x5b, 0x3f, 0x98, 0x29, 0xf2, 0xd1,
- 0x98, 0x96, 0x4d, 0x1f, 0xbd, 0x5e, 0xbd, 0xb9, 0xc1, 0xca, 0x51, 0x63, 0x90, 0x37, 0x21, 0x17,
- 0x34, 0xfd, 0x99, 0x11, 0xde, 0xce, 0xc5, 0x93, 0xb7, 0x73, 0x6b, 0xad, 0x2a, 0x66, 0xf2, 0xc2,
- 0x08, 0x1b, 0xbe, 0xad, 0xb5, 0x2a, 0x32, 0xc2, 0xe4, 0x2b, 0x19, 0x18, 0x65, 0x4b, 0xae, 0x6e,
- 0x05, 0xd6, 0xcc, 0xe8, 0xe5, 0xdc, 0xcb, 0x63, 0xaf, 0xdd, 0x3d, 0x39, 0x97, 0xd8, 0xdc, 0x99,
- 0x5b, 0x97, 0x94, 0x97, 0x9d, 0xc0, 0x3b, 0x08, 0xbf, 0x53, 0x15, 0xa3, 0x66, 0x4d, 0xbe, 0x93,
- 0x81, 0x29, 0x35, 0xc6, 0x4b, 0xb4, 0xd6, 0xb4, 0x3c, 0x3a, 0x53, 0xe2, 0x1f, 0x5d, 0x4d, 0xd9,
- 0x9c, 0x28, 0x51, 0xd9, 0x09, 0x67, 0x1f, 0x3d, 0x9c, 0x9d, 0x8a, 0x81, 0x30, 0xde, 0x00, 0x36,
- 0x67, 0xc6, 0xef, 0x75, 0x68, 0x47, 0xb7, 0x08, 0x78, 0x8b, 0x36, 0xd3, 0xb5, 0xe8, 0x96, 0x41,
- 0x51, 0x36, 0x67, 0x9a, 0x4d, 0x78, 0xb3, 0x1c, 0x23, 0x7c, 0xc9, 0xbb, 0x50, 0xe2, 0xbf, 0x17,
- 0x6c, 0xa7, 0x3e, 0x33, 0xc6, 0x1b, 0xb1, 0x3e, 0x80, 0x46, 0x30, 0x72, 0xb2, 0x05, 0x13, 0x4c,
- 0xcc, 0xe8, 0x42, 0x0c, 0xd9, 0x11, 0x0f, 0x46, 0xa4, 0x44, 0x9b, 0x19, 0xe7, 0x9c, 0x6f, 0xa4,
- 0xe3, 0x1c, 0x91, 0xab, 0x0b, 0x63, 0x4c, 0x5e, 0xc9, 0x22, 0x54, 0x8c, 0x88, 0x05, 0x79, 0xab,
- 0x13, 0xec, 0xce, 0x4c, 0xa4, 0x9d, 0xf6, 0x0b, 0x96, 0x6f, 0xd7, 0x2a, 0x9d, 0x60, 0x77, 0x61,
- 0xf4, 0xd1, 0xc3, 0xd9, 0x3c, 0xfb, 0x0f, 0x39, 0x69, 0x82, 0x50, 0xea, 0x78, 0xcd, 0x2a, 0xad,
- 0x79, 0x34, 0x98, 0x99, 0xe4, 0x7c, 0x3e, 0x34, 0x27, 0xb6, 0x0c, 0x46, 0x6a, 0x8e, 0xed, 0x79,
- 0x73, 0xfb, 0x1f, 0x9d, 0x13, 0x18, 0x37, 0xe8, 0x41, 0x95, 0x36, 0x69, 0x2d, 0x70, 0x3d, 0xd1,
- 0x55, 0xb7, 0x71, 0x4d, 0x40, 0x30, 0x24, 0x43, 0x5c, 0x28, 0xee, 0xd8, 0xcd, 0x80, 0x7a, 0x33,
- 0x53, 0x69, 0x7b, 0xca, 0x58, 0x45, 0x2b, 0x9c, 0xe4, 0x02, 0x30, 0x79, 0x2d, 0xfe, 0x47, 0xc9,
- 0xe6, 0xe2, 0x27, 0x61, 0x22, 0xb2, 0xc4, 0xc8, 0x34, 0xe4, 0xf6, 0xe8, 0x81, 0x10, 0xd6, 0xc8,
- 0xfe, 0x25, 0xe7, 0xa0, 0xb0, 0x6f, 0x35, 0x3b, 0x52, 0x30, 0xa3, 0xf8, 0xf1, 0x7a, 0xf6, 0x4a,
- 0xa6, 0xfc, 0x47, 0x19, 0x78, 0xae, 0xe7, 0x0a, 0x61, 0xbb, 0x4b, 0xbd, 0xe3, 0x59, 0xdb, 0x4d,
- 0xca, 0xa9, 0x19, 0xbb, 0xcb, 0x92, 0x28, 0x46, 0x05, 0x67, 0xe2, 0x98, 0x6d, 0x62, 0x4b, 0xb4,
- 0x49, 0x03, 0x2a, 0xf7, 0x39, 0x2d, 0x8e, 0x2b, 0x1a, 0x82, 0x06, 0x16, 0x93, 0x82, 0xb6, 0x13,
- 0x50, 0xcf, 0xb1, 0x9a, 0x72, 0xb3, 0xd3, 0xd2, 0x61, 0x55, 0x96, 0xa3, 0xc6, 0x30, 0xf6, 0xaf,
- 0xfc, 0xa1, 0xfb, 0xd7, 0xcf, 0xc2, 0xd9, 0x84, 0xc9, 0x6d, 0x54, 0xcf, 0x1c, 0x5a, 0xfd, 0xb7,
- 0xb2, 0x70, 0x21, 0x79, 0x85, 0x92, 0xcb, 0x90, 0x77, 0xd8, 0xf6, 0x26, 0xb6, 0xc1, 0x71, 0x49,
- 0x20, 0xcf, 0xb7, 0x35, 0x0e, 0x31, 0x3b, 0x2c, 0xdb, 0x57, 0x87, 0xe5, 0x8e, 0xd5, 0x61, 0x11,
- 0xf5, 0x20, 0x7f, 0x0c, 0xf5, 0xe0, 0x98, 0x7b, 0x3e, 0x23, 0x6c, 0x79, 0x8d, 0x4e, 0x8b, 0xcd,
- 0x3f, 0xbe, 0x21, 0x95, 0x42, 0xc2, 0x15, 0x05, 0xc0, 0x10, 0xa7, 0xfc, 0x38, 0x0f, 0xd3, 0x95,
- 0xbb, 0xd5, 0x35, 0xab, 0xb5, 0x5d, 0xb7, 0xb6, 0x3c, 0xbb, 0xd1, 0xa0, 0x1e, 0xdb, 0xcc, 0x77,
- 0x3a, 0x0e, 0xdf, 0xe8, 0x36, 0xc2, 0x7e, 0xd2, 0x9b, 0xf9, 0x8a, 0x01, 0xc3, 0x08, 0x26, 0x5b,
- 0x88, 0x56, 0xad, 0x46, 0x7d, 0x9f, 0xed, 0xe5, 0xd9, 0xbe, 0x17, 0x62, 0x45, 0xd5, 0xc5, 0x90,
- 0x0c, 0xa3, 0xe9, 0x2b, 0x74, 0xde, 0xbf, 0xfd, 0xd1, 0xd4, 0xc5, 0x18, 0x92, 0x61, 0xfd, 0xe9,
- 0xd1, 0x86, 0xed, 0x3a, 0x52, 0xe1, 0xd0, 0xfd, 0x89, 0xbc, 0x14, 0x25, 0x94, 0x74, 0x60, 0xa4,
- 0x6d, 0x1d, 0x34, 0x5d, 0xab, 0x3e, 0x53, 0xe0, 0xfb, 0xe9, 0xf5, 0x14, 0xbb, 0xb6, 0xe8, 0xdd,
- 0x4d, 0xcb, 0xb3, 0x5a, 0x94, 0x09, 0x01, 0x3d, 0xa7, 0x36, 0x05, 0x0b, 0x54, 0xbc, 0xc8, 0x17,
- 0x01, 0xda, 0x0a, 0x8d, 0x8d, 0xe3, 0xa0, 0x39, 0xeb, 0xf9, 0xa9, 0x8b, 0x7c, 0x34, 0x38, 0x92,
- 0xd7, 0x61, 0xd2, 0x76, 0xf6, 0xdd, 0x9a, 0xc5, 0x06, 0x96, 0xeb, 0x73, 0x23, 0x42, 0x2f, 0x7b,
- 0xf4, 0x70, 0x76, 0x72, 0x35, 0x02, 0xc1, 0x18, 0x26, 0x5b, 0x3a, 0x9e, 0xdb, 0xa4, 0x15, 0xdc,
- 0x98, 0x19, 0xe5, 0x95, 0xf4, 0x67, 0xa2, 0x28, 0x46, 0x05, 0x2f, 0xbf, 0x02, 0xc5, 0x4a, 0xcb,
- 0xed, 0x38, 0x01, 0x99, 0x55, 0x82, 0x8d, 0x4d, 0xb5, 0xf1, 0x85, 0xd2, 0xa3, 0x87, 0xb3, 0x85,
- 0x3b, 0xac, 0x40, 0xca, 0xb8, 0xf2, 0x8f, 0xb2, 0x70, 0xb6, 0xe2, 0x35, 0xdc, 0xbb, 0xae, 0xb7,
- 0xb7, 0xd3, 0x74, 0xef, 0xab, 0xa9, 0xea, 0x40, 0x51, 0x9c, 0x4c, 0x78, 0xcd, 0x54, 0xbd, 0x54,
- 0xf1, 0x02, 0x7b, 0xc7, 0xaa, 0x05, 0x6b, 0xf2, 0x6b, 0x84, 0x90, 0x16, 0x62, 0x1b, 0x25, 0x17,
- 0x72, 0x0d, 0x4a, 0x6e, 0x9b, 0x1d, 0x31, 0xd8, 0xdc, 0x11, 0xea, 0xf1, 0x4f, 0xa8, 0x05, 0x76,
- 0x53, 0x01, 0x1e, 0x3f, 0x9c, 0x3d, 0x6f, 0x36, 0x56, 0x03, 0x30, 0xac, 0x1c, 0x1b, 0xe3, 0xdc,
- 0xa9, 0x8f, 0xf1, 0xf3, 0x90, 0xb7, 0xbc, 0x86, 0x3f, 0x93, 0xbf, 0x9c, 0x7b, 0xb9, 0x24, 0x77,
- 0x54, 0xaf, 0xe1, 0x23, 0x2f, 0x2d, 0xbf, 0x5f, 0x80, 0xe9, 0x78, 0x87, 0x90, 0xcf, 0x43, 0xd6,
- 0xff, 0x98, 0xec, 0xe8, 0xa5, 0x93, 0x37, 0xb5, 0xfa, 0x31, 0x45, 0x79, 0xa1, 0xf8, 0xe8, 0xe1,
- 0x6c, 0xb6, 0xfa, 0x31, 0xcc, 0xfa, 0x1f, 0x23, 0x65, 0x28, 0xda, 0x4e, 0xd3, 0x76, 0xd4, 0xb1,
- 0x83, 0x77, 0xff, 0x2a, 0x2f, 0x41, 0x09, 0x21, 0x75, 0xc8, 0xef, 0xd8, 0x4d, 0x2a, 0xc5, 0xc0,
- 0xca, 0xc9, 0xdb, 0xb0, 0x62, 0x37, 0xa9, 0x6e, 0x05, 0xff, 0x78, 0x56, 0x82, 0x9c, 0x3a, 0x79,
- 0x5b, 0x9c, 0x92, 0xf2, 0x9c, 0xc9, 0xf2, 0xc9, 0x99, 0xdc, 0xc6, 0x35, 0xcd, 0x63, 0x24, 0x72,
- 0xd0, 0xba, 0x0d, 0xa5, 0x1a, 0xdf, 0x8b, 0x5a, 0x56, 0x5b, 0x9e, 0x5b, 0x5e, 0x4e, 0x92, 0x69,
- 0x62, 0xc3, 0x5a, 0xb7, 0xda, 0x5d, 0x62, 0x6d, 0x51, 0x55, 0xc7, 0x90, 0x12, 0x6b, 0x78, 0xc3,
- 0x0e, 0xb8, 0xe0, 0x4f, 0xd5, 0xf0, 0xab, 0x76, 0x10, 0x6d, 0xf8, 0x55, 0x3b, 0x40, 0x46, 0x9a,
- 0xb8, 0x30, 0xaa, 0x6c, 0x01, 0xf2, 0x1c, 0x93, 0x82, 0xcd, 0x8d, 0x2b, 0x55, 0x94, 0xc4, 0x16,
- 0xc6, 0x99, 0xb6, 0xa0, 0x7e, 0xa1, 0x66, 0x52, 0xfe, 0xfd, 0x3c, 0x9c, 0xaf, 0xbc, 0xdb, 0xf1,
- 0x28, 0x57, 0xa2, 0xae, 0x75, 0xb6, 0x7d, 0xb5, 0xf4, 0x2f, 0x43, 0x7e, 0xe7, 0x5e, 0xdd, 0x89,
- 0xef, 0xe2, 0x2b, 0xb7, 0x96, 0x36, 0x90, 0x43, 0x98, 0x28, 0xda, 0xed, 0x6c, 0x1b, 0x27, 0x59,
- 0x2d, 0x8a, 0xae, 0x89, 0x62, 0x54, 0x70, 0xd2, 0x86, 0xb3, 0xfe, 0xae, 0xe5, 0xd1, 0xba, 0xde,
- 0x82, 0x78, 0xb5, 0xbe, 0xb6, 0x9b, 0x67, 0x1f, 0x3d, 0x9c, 0x3d, 0x5b, 0xed, 0xa6, 0x82, 0x49,
- 0xa4, 0x49, 0x1d, 0xa6, 0x62, 0xc5, 0x72, 0xc2, 0x1d, 0x93, 0x1b, 0x3f, 0xf5, 0xc4, 0xb8, 0x61,
- 0x9c, 0xe4, 0xff, 0xa7, 0x1b, 0x58, 0xf9, 0xbd, 0x02, 0x3c, 0x17, 0xce, 0x1a, 0xff, 0x5a, 0x67,
- 0xdb, 0xb4, 0x82, 0x1c, 0x3d, 0x73, 0x7a, 0x4c, 0x87, 0xec, 0xa9, 0x4e, 0x87, 0xdc, 0xe0, 0xa7,
- 0x83, 0xb1, 0x22, 0xf2, 0x47, 0xac, 0x88, 0x6f, 0x99, 0xc6, 0x04, 0x31, 0x77, 0xac, 0x14, 0x9b,
- 0x6b, 0xaf, 0xc1, 0xe8, 0xc3, 0xac, 0x10, 0x9e, 0xc8, 0x8a, 0x4f, 0xc1, 0x89, 0xec, 0xd7, 0x8a,
- 0xf0, 0x3c, 0xff, 0x6a, 0x7e, 0x00, 0xa9, 0x06, 0xae, 0x67, 0x35, 0xa8, 0x39, 0x0b, 0xaf, 0x03,
- 0xf1, 0x45, 0x69, 0xa5, 0x56, 0x63, 0x5a, 0x90, 0xa1, 0x6b, 0x5f, 0x94, 0xdd, 0x40, 0xaa, 0x5d,
- 0x18, 0x98, 0x50, 0x8b, 0x34, 0x60, 0x3a, 0x34, 0x4e, 0x55, 0x03, 0xcf, 0x76, 0x1a, 0xfd, 0x4d,
- 0xd6, 0x73, 0x8f, 0x1e, 0xce, 0x4e, 0x2f, 0xc6, 0x48, 0x60, 0x17, 0x51, 0x76, 0xc0, 0xe0, 0xd6,
- 0x04, 0x2d, 0x1d, 0x8d, 0x03, 0xc6, 0x2d, 0x05, 0xc0, 0x10, 0x27, 0x62, 0x21, 0xcb, 0x1f, 0x69,
- 0x21, 0x7b, 0x01, 0x72, 0xf5, 0xe6, 0x3d, 0x79, 0xc8, 0xd1, 0xf6, 0xc9, 0xa5, 0xb5, 0x5b, 0xc8,
- 0xca, 0xc9, 0x77, 0xcc, 0x39, 0x29, 0xa4, 0x4a, 0x3d, 0xe5, 0x9c, 0xec, 0x31, 0x3a, 0x27, 0x9a,
- 0x96, 0x23, 0xa7, 0x32, 0x2d, 0xc9, 0x27, 0x61, 0xa2, 0x4e, 0x6b, 0x6e, 0x9d, 0xae, 0x53, 0xdf,
- 0xb7, 0x1a, 0x94, 0xeb, 0xd9, 0xa3, 0x0b, 0xe7, 0x65, 0x1b, 0x27, 0x96, 0x4c, 0x20, 0x46, 0x71,
- 0xc9, 0x22, 0x9c, 0xb9, 0x6f, 0xd9, 0xc1, 0x96, 0xdd, 0xa2, 0xab, 0x4e, 0x95, 0xd6, 0x5c, 0xa7,
- 0xee, 0x73, 0xe3, 0x5c, 0x41, 0x98, 0x3d, 0xef, 0xc6, 0x81, 0xd8, 0x8d, 0x9f, 0x6e, 0x61, 0xfc,
- 0x59, 0x11, 0x2e, 0xf2, 0xae, 0xaf, 0x52, 0x6f, 0xdf, 0xae, 0xd1, 0x85, 0x8e, 0x6f, 0x2e, 0x8b,
- 0xa4, 0xa9, 0x9c, 0x19, 0xfa, 0x54, 0xce, 0x1e, 0x63, 0x2a, 0xcf, 0x43, 0x29, 0x70, 0xdb, 0x76,
- 0x2d, 0x69, 0xee, 0x6f, 0x29, 0x00, 0x86, 0x38, 0x64, 0x09, 0xa6, 0xfd, 0xce, 0xb6, 0x5f, 0xf3,
- 0xec, 0xb6, 0x3e, 0x4b, 0x0b, 0xb1, 0x3b, 0x23, 0xeb, 0x4d, 0x57, 0x63, 0x70, 0xec, 0xaa, 0xa1,
- 0xac, 0xc6, 0x85, 0x61, 0x59, 0x8d, 0xfb, 0xb3, 0x61, 0x7f, 0xdb, 0x5c, 0x82, 0x23, 0x7c, 0x09,
- 0x6e, 0xa7, 0x5c, 0x82, 0x89, 0xf3, 0xe0, 0x44, 0x0b, 0x70, 0xf4, 0x74, 0x16, 0xe0, 0x67, 0xe0,
- 0xd9, 0x9d, 0x4e, 0xb3, 0x79, 0x70, 0xab, 0x63, 0x35, 0xed, 0x1d, 0x9b, 0xd6, 0xd9, 0x38, 0xf9,
- 0x6d, 0xab, 0x26, 0xcc, 0xdc, 0xa5, 0x85, 0x59, 0xd9, 0xda, 0x67, 0x57, 0x92, 0xd1, 0xb0, 0x57,
- 0xfd, 0x74, 0x2b, 0xeb, 0xbd, 0x02, 0x5c, 0x88, 0xf5, 0xa8, 0x52, 0x96, 0xff, 0x72, 0x55, 0x9d,
- 0xf2, 0xaa, 0x32, 0x14, 0xef, 0xe2, 0x13, 0x53, 0xbc, 0x47, 0x4e, 0x5d, 0xf1, 0xfe, 0x51, 0x16,
- 0x46, 0xd4, 0xe5, 0xd8, 0x3d, 0x18, 0xad, 0x77, 0xa4, 0xa9, 0x44, 0xcc, 0xb5, 0xab, 0x27, 0x6f,
- 0xc9, 0xaa, 0x13, 0xfc, 0xd4, 0xc7, 0x6f, 0x7a, 0x62, 0x96, 0x89, 0xd3, 0xe2, 0x92, 0x24, 0x8e,
- 0x9a, 0x0d, 0xa9, 0x43, 0x91, 0x1d, 0x5a, 0x5d, 0x4f, 0x6a, 0x3f, 0x9f, 0x4a, 0x21, 0x9a, 0xb8,
- 0x65, 0x4a, 0xae, 0x7f, 0x4e, 0x13, 0x25, 0x6d, 0xc6, 0xe5, 0x1d, 0x3b, 0x60, 0x02, 0x27, 0x37,
- 0x48, 0x2e, 0xd7, 0x39, 0x4d, 0x94, 0xb4, 0xc9, 0x8b, 0x50, 0xf0, 0x03, 0xda, 0xf6, 0xf9, 0xe4,
- 0x2e, 0x2c, 0x4c, 0xc8, 0x9e, 0x2f, 0x54, 0x59, 0x21, 0x0a, 0x58, 0xf9, 0xf7, 0x32, 0x50, 0xd2,
- 0xf7, 0x22, 0xe4, 0x26, 0x8c, 0x76, 0x7c, 0xea, 0x69, 0xe3, 0xf6, 0xb1, 0x57, 0x37, 0xef, 0xcf,
- 0xdb, 0xb2, 0x2a, 0x6a, 0x22, 0x8c, 0x60, 0xdb, 0xf2, 0xfd, 0xfb, 0xae, 0x57, 0xef, 0x4f, 0x9f,
- 0xe4, 0x04, 0x37, 0x65, 0x55, 0xd4, 0x44, 0xca, 0x7f, 0x9a, 0x81, 0x89, 0x05, 0x3b, 0xd8, 0xee,
- 0xd4, 0xf6, 0x68, 0xc0, 0xdb, 0xdc, 0x82, 0xc2, 0x36, 0xfb, 0x00, 0xd9, 0xe0, 0xb5, 0x14, 0xf7,
- 0x43, 0x8a, 0x6e, 0x78, 0x51, 0xc4, 0x0d, 0x89, 0xfc, 0x27, 0x0a, 0x2e, 0xe4, 0x36, 0x80, 0x6b,
- 0x75, 0x82, 0xdd, 0x2d, 0x77, 0x8f, 0x3a, 0xfd, 0x7d, 0xd3, 0x24, 0x9b, 0xf7, 0x37, 0x2b, 0xaa,
- 0x32, 0x1a, 0x84, 0xca, 0x7f, 0x90, 0x01, 0xd2, 0xcd, 0xff, 0x29, 0x18, 0x90, 0x7f, 0x37, 0x02,
- 0xe7, 0x74, 0xc3, 0x63, 0xc7, 0x93, 0x3a, 0xbf, 0xad, 0xb8, 0xe6, 0xba, 0x7b, 0x37, 0x9d, 0x15,
- 0xdb, 0xb1, 0xfd, 0x5d, 0x79, 0xe7, 0xa2, 0x8f, 0x27, 0x4b, 0x5d, 0x18, 0x98, 0x50, 0x8b, 0x7c,
- 0xdd, 0x54, 0x1a, 0xb2, 0x5c, 0x28, 0x7d, 0x7e, 0x00, 0xe3, 0x7c, 0x52, 0x75, 0x61, 0xe4, 0x3e,
- 0xdd, 0xde, 0x75, 0xdd, 0x3d, 0xb9, 0x7c, 0xaf, 0x9d, 0xbc, 0x29, 0x77, 0x05, 0xa1, 0x45, 0xd7,
- 0x09, 0xe8, 0x83, 0x40, 0x5c, 0x80, 0xca, 0x32, 0x54, 0x5c, 0x08, 0x95, 0x17, 0xa0, 0xf9, 0xb4,
- 0x32, 0x30, 0xb2, 0x70, 0xba, 0x2e, 0x41, 0xcb, 0x50, 0x14, 0x15, 0xf8, 0x69, 0x5d, 0xda, 0x4f,
- 0xc5, 0x91, 0x1b, 0x25, 0x84, 0x7c, 0x18, 0x0a, 0xee, 0x7d, 0x47, 0x9e, 0xa0, 0x4b, 0x0b, 0xcf,
- 0xca, 0x6e, 0x9a, 0x5a, 0xa2, 0x6d, 0x8f, 0xd6, 0xac, 0x80, 0xd6, 0x6f, 0x32, 0x30, 0x0a, 0x2c,
- 0xf2, 0x57, 0x01, 0x58, 0xeb, 0x68, 0x8d, 0xdf, 0xbd, 0x88, 0x3b, 0x80, 0xe7, 0x65, 0x9d, 0x73,
- 0x61, 0x9d, 0x4d, 0x8d, 0x83, 0x06, 0x3e, 0xb9, 0x06, 0x93, 0x1e, 0x6d, 0xbb, 0xbe, 0x1d, 0xb8,
- 0xde, 0x41, 0xb5, 0xd9, 0x69, 0xc8, 0x0b, 0x81, 0xcb, 0x92, 0xc2, 0x4c, 0x48, 0x01, 0x23, 0x78,
- 0x18, 0xab, 0x47, 0x7e, 0x39, 0x03, 0xe3, 0xba, 0xc8, 0xa6, 0xec, 0xc0, 0x92, 0x4b, 0x77, 0x6d,
- 0xae, 0xbb, 0x32, 0xe4, 0x1c, 0x5e, 0x70, 0xa1, 0xc1, 0x0a, 0x23, 0x8c, 0x0d, 0x5d, 0x13, 0x9e,
- 0x02, 0x1b, 0xc4, 0xbb, 0x70, 0x36, 0xe1, 0x43, 0xd9, 0xce, 0x22, 0x66, 0x81, 0x30, 0x36, 0xe8,
- 0x9d, 0x25, 0x32, 0xf6, 0x6f, 0x74, 0x8d, 0x9e, 0xd0, 0xe6, 0x2e, 0x48, 0xec, 0xc9, 0xc3, 0xc7,
- 0xac, 0xfc, 0x9f, 0xc6, 0xe0, 0xa2, 0x66, 0xce, 0x14, 0x52, 0xea, 0x99, 0xe2, 0xc5, 0x58, 0x85,
- 0x99, 0x53, 0x59, 0x85, 0xd1, 0xb9, 0x9c, 0x4d, 0x3d, 0x97, 0x73, 0x27, 0x9c, 0xcb, 0x2f, 0xc3,
- 0xa8, 0xa4, 0xab, 0xee, 0x5e, 0x84, 0x68, 0x96, 0x65, 0xa8, 0xa1, 0xe4, 0xaf, 0xc7, 0x67, 0xbd,
- 0xb0, 0xc2, 0x55, 0x07, 0x30, 0xeb, 0xc5, 0x78, 0xf4, 0x39, 0xf7, 0x43, 0x01, 0x53, 0xec, 0x29,
- 0x60, 0xf6, 0xe0, 0x05, 0x7f, 0xcf, 0x6e, 0x2f, 0x78, 0x96, 0x53, 0xdb, 0x45, 0xba, 0xe3, 0x2f,
- 0x72, 0x77, 0x84, 0xfa, 0x4d, 0xe7, 0x66, 0x9b, 0x3a, 0x9b, 0xc8, 0x85, 0xc8, 0xe8, 0xc2, 0x87,
- 0x24, 0xbb, 0x17, 0xaa, 0x87, 0x21, 0xe3, 0xe1, 0xb4, 0xc8, 0x55, 0x38, 0xe3, 0x3a, 0xc2, 0x6a,
- 0xb3, 0x49, 0x3d, 0x01, 0x95, 0xc6, 0x90, 0xe7, 0x24, 0x83, 0x33, 0x37, 0xe3, 0x08, 0xd8, 0x5d,
- 0x87, 0x7c, 0x1a, 0xc6, 0xc4, 0x7d, 0xb3, 0xd0, 0x0a, 0x4a, 0xfd, 0x6c, 0xac, 0x53, 0x8f, 0x1e,
- 0xce, 0x8e, 0x55, 0xc2, 0xda, 0x68, 0x92, 0x22, 0x6f, 0xc2, 0x84, 0x9c, 0x80, 0xd2, 0x3b, 0x05,
- 0xfa, 0xa1, 0x7d, 0xe6, 0xd1, 0xc3, 0xd9, 0x89, 0xbb, 0x66, 0x7d, 0x8c, 0x92, 0x23, 0x77, 0xe0,
- 0xc2, 0xb6, 0x1a, 0x54, 0x9f, 0x0f, 0xea, 0x82, 0xe5, 0xd3, 0xdb, 0xb8, 0xc6, 0x3d, 0x8b, 0x4a,
- 0x0b, 0x97, 0x64, 0x3f, 0x5c, 0x88, 0x0d, 0xbd, 0xc4, 0xc2, 0x1e, 0xb5, 0x7b, 0xec, 0xfe, 0xe3,
- 0x27, 0xda, 0xfd, 0x23, 0x26, 0x83, 0x89, 0xb4, 0x26, 0x83, 0xde, 0x32, 0xe5, 0x44, 0x26, 0x83,
- 0xc9, 0xd3, 0x31, 0x19, 0xc8, 0xe3, 0xe6, 0xd4, 0xb0, 0x8e, 0x9b, 0x9f, 0x84, 0x89, 0xda, 0x2e,
- 0xad, 0xed, 0x71, 0x7f, 0x9b, 0x7d, 0xab, 0x39, 0x33, 0xcd, 0x87, 0x5f, 0xdb, 0x04, 0x17, 0x4d,
- 0x20, 0x46, 0x71, 0xd3, 0xed, 0x31, 0xdf, 0xca, 0xc0, 0x73, 0x3d, 0xe5, 0x0a, 0x79, 0x2d, 0x22,
- 0x75, 0x33, 0x51, 0xef, 0xce, 0x1e, 0xb2, 0x36, 0xed, 0xce, 0xf3, 0x87, 0x59, 0x28, 0x2d, 0x74,
- 0x7c, 0xe9, 0xec, 0xb3, 0x0d, 0x79, 0xc7, 0x0a, 0xfc, 0xf4, 0xd7, 0xd6, 0x1b, 0x95, 0x2d, 0xd5,
- 0xf7, 0x5c, 0xf5, 0x62, 0xbf, 0x91, 0xd3, 0x26, 0xfb, 0x50, 0x7a, 0x87, 0x06, 0x7e, 0xe0, 0x51,
- 0xab, 0x25, 0xd5, 0xf2, 0xd5, 0x93, 0x33, 0xba, 0x4e, 0x83, 0x2a, 0x27, 0x65, 0xba, 0xf3, 0xe9,
- 0x42, 0x0c, 0x59, 0x91, 0x1a, 0x14, 0xf6, 0xac, 0x9d, 0x3d, 0x4b, 0x2a, 0xb2, 0x0b, 0x29, 0xae,
- 0x62, 0x19, 0x99, 0x85, 0x8e, 0x2f, 0x4e, 0x4c, 0xfc, 0x17, 0x0a, 0xda, 0xe5, 0xef, 0x16, 0xe0,
- 0xec, 0xa2, 0xd5, 0xa4, 0x4e, 0xdd, 0x8a, 0xec, 0xe0, 0xaf, 0xc2, 0xa8, 0x5f, 0xdb, 0xa5, 0xf5,
- 0x4e, 0x53, 0xdd, 0x5a, 0xe8, 0x15, 0x57, 0x95, 0xe5, 0xa8, 0x31, 0xb4, 0x8f, 0x18, 0x9b, 0x9b,
- 0xd9, 0x28, 0xb6, 0x9e, 0x96, 0x1a, 0x83, 0xbc, 0x0e, 0x93, 0xd2, 0xf9, 0xc9, 0x75, 0x96, 0xac,
- 0x80, 0x0a, 0x07, 0x09, 0xe9, 0x80, 0xb2, 0x1c, 0x81, 0x60, 0x0c, 0x93, 0x71, 0x0a, 0xec, 0x16,
- 0x7d, 0xd7, 0x75, 0x94, 0x5d, 0x48, 0x73, 0xda, 0x92, 0xe5, 0xa8, 0x31, 0xc8, 0xd7, 0xba, 0xaf,
- 0xb9, 0x3e, 0x77, 0xf2, 0x6e, 0x4c, 0xe8, 0xa7, 0x3e, 0xa4, 0xd2, 0x17, 0x60, 0xac, 0x4d, 0x3d,
- 0xdf, 0xf6, 0x03, 0xea, 0xd4, 0xa8, 0xbc, 0xe5, 0xba, 0x9e, 0x52, 0x34, 0x6d, 0x86, 0x14, 0xc5,
- 0x5e, 0x65, 0x14, 0xa0, 0xc9, 0xef, 0xd4, 0xed, 0xa8, 0xe9, 0xe4, 0xce, 0x03, 0x38, 0xb7, 0x68,
- 0x05, 0xb5, 0xdd, 0x4e, 0x5b, 0x2c, 0x13, 0x65, 0x02, 0x7a, 0x05, 0x46, 0xa8, 0x63, 0x6d, 0x37,
- 0x69, 0x3d, 0xee, 0xeb, 0xb8, 0x2c, 0x8a, 0x51, 0xc1, 0xc9, 0x27, 0x60, 0xac, 0x65, 0x3d, 0x50,
- 0x66, 0x24, 0x39, 0x2d, 0x75, 0x1c, 0xc0, 0x7a, 0x08, 0x42, 0x13, 0xaf, 0xfc, 0x67, 0x59, 0x28,
- 0x2d, 0xba, 0x4e, 0xdd, 0xe6, 0xfc, 0x3e, 0x0a, 0xf9, 0xe0, 0xa0, 0xad, 0x96, 0xc0, 0x0b, 0xea,
- 0x32, 0x79, 0xeb, 0xa0, 0x4d, 0x1f, 0x33, 0xc1, 0xab, 0x10, 0xb9, 0xb3, 0x14, 0x47, 0x25, 0x6b,
- 0x50, 0xf4, 0x03, 0x2b, 0xe8, 0xf8, 0x92, 0xe5, 0xc7, 0x95, 0xf7, 0x59, 0x95, 0x97, 0x3e, 0x7e,
- 0x38, 0x9b, 0x10, 0xb0, 0x31, 0xa7, 0x29, 0x09, 0x2c, 0x94, 0x34, 0xc8, 0x3e, 0x90, 0xa6, 0xe5,
- 0x07, 0x5b, 0x9e, 0xe5, 0xf8, 0x82, 0x93, 0xad, 0x3d, 0x17, 0x7e, 0xc2, 0xd0, 0x33, 0x74, 0xe0,
- 0x44, 0x38, 0x6c, 0x6c, 0xe6, 0x31, 0xcd, 0x83, 0xd5, 0x08, 0xb7, 0xf5, 0xb5, 0x2e, 0x6a, 0x98,
- 0xc0, 0x41, 0xf8, 0xd0, 0x59, 0x7e, 0x92, 0x0f, 0x1d, 0x2b, 0x45, 0x09, 0x65, 0x03, 0xd2, 0x92,
- 0x17, 0x55, 0x85, 0xe8, 0x9d, 0xb3, 0xba, 0xa2, 0x52, 0xf0, 0x72, 0x03, 0xce, 0xeb, 0xaf, 0xf4,
- 0x91, 0xfa, 0x34, 0x58, 0x38, 0xe0, 0xbc, 0x2e, 0x43, 0xbe, 0xe6, 0xb9, 0x5d, 0x37, 0xf6, 0x8b,
- 0x9e, 0xeb, 0x20, 0x87, 0x44, 0x56, 0x7d, 0xf6, 0xa8, 0x55, 0x5f, 0xfe, 0x66, 0x06, 0x9e, 0x8d,
- 0x71, 0x5a, 0xf4, 0xec, 0x80, 0x7a, 0xb6, 0x45, 0x7c, 0x28, 0x6e, 0x73, 0xae, 0x72, 0xcb, 0xb8,
- 0x99, 0x42, 0x1c, 0x24, 0x7d, 0x8c, 0x58, 0x0a, 0xe2, 0x7f, 0x94, 0xac, 0xca, 0x5f, 0x84, 0x73,
- 0xda, 0xd7, 0xc7, 0x58, 0xa0, 0xc7, 0x70, 0x55, 0x5d, 0x82, 0xe9, 0x9a, 0x47, 0xad, 0x80, 0xae,
- 0xee, 0x6c, 0xb8, 0xc1, 0xf2, 0x03, 0xdb, 0x0f, 0xa4, 0xcf, 0xaa, 0x36, 0x87, 0x2f, 0xc6, 0xe0,
- 0xd8, 0x55, 0xa3, 0xfc, 0x07, 0x59, 0x38, 0xc3, 0xce, 0x4f, 0x16, 0x9b, 0x21, 0x5b, 0xb4, 0xd5,
- 0x6e, 0x5a, 0x01, 0x25, 0x9f, 0x81, 0x92, 0x72, 0xc4, 0x51, 0x1b, 0x68, 0xa2, 0x9b, 0x92, 0xf6,
- 0xdb, 0xa1, 0xf7, 0x3a, 0xb6, 0x47, 0xb9, 0x6b, 0x69, 0x68, 0xc5, 0x57, 0x50, 0x1f, 0x43, 0x6a,
- 0x64, 0x1b, 0xa6, 0xec, 0x96, 0xd5, 0xa0, 0x9b, 0x9d, 0x66, 0x73, 0xd3, 0x6d, 0xda, 0x35, 0x75,
- 0x26, 0xbb, 0xa2, 0x6c, 0x12, 0xab, 0x51, 0xf0, 0xe3, 0x87, 0xb3, 0x2f, 0x24, 0xac, 0x8a, 0x10,
- 0x01, 0xe3, 0x04, 0x19, 0x0f, 0x9f, 0xd6, 0x3a, 0x9e, 0x1d, 0x1c, 0xc8, 0xb3, 0xa1, 0x5c, 0x16,
- 0x2f, 0xf6, 0x50, 0xbf, 0x4d, 0x54, 0xe9, 0x51, 0x11, 0x2d, 0xc4, 0x38, 0xc1, 0xf2, 0x3f, 0x2a,
- 0xc0, 0xc4, 0x62, 0xc7, 0x0f, 0xdc, 0x96, 0xba, 0x6a, 0x99, 0x87, 0x92, 0xd0, 0xa5, 0x99, 0x16,
- 0x9e, 0x89, 0x5e, 0x68, 0x54, 0x15, 0x00, 0x43, 0x1c, 0xb6, 0x90, 0x38, 0x55, 0xe5, 0x6b, 0xac,
- 0x17, 0x12, 0x67, 0x4e, 0x51, 0x42, 0xc9, 0x6d, 0x80, 0x1a, 0xf5, 0x02, 0x79, 0x90, 0xc8, 0xf5,
- 0x6d, 0xba, 0x5c, 0xd4, 0x95, 0xd1, 0x20, 0xc4, 0xfd, 0x10, 0x78, 0x5b, 0xd8, 0xa4, 0xba, 0xb9,
- 0x4f, 0x3d, 0xcf, 0xae, 0xab, 0x9d, 0x33, 0xf4, 0x43, 0xe8, 0xc2, 0xc0, 0x84, 0x5a, 0xc4, 0x87,
- 0xbc, 0xdf, 0xa6, 0x35, 0xb9, 0x91, 0xde, 0x4a, 0xb1, 0x72, 0xcc, 0x2e, 0x9d, 0xab, 0xb6, 0x69,
- 0x4d, 0x6c, 0x9f, 0x7a, 0x05, 0xb0, 0x22, 0xe4, 0xcc, 0x9e, 0xb8, 0xb7, 0xac, 0x71, 0xd5, 0x33,
- 0x72, 0x7a, 0x57, 0x3d, 0x17, 0x7f, 0x1a, 0x4a, 0xba, 0x5f, 0xfa, 0xda, 0x39, 0x7f, 0x94, 0x01,
- 0x58, 0xb2, 0x02, 0x4b, 0xec, 0xc6, 0x4c, 0xc4, 0xb4, 0xad, 0x60, 0x37, 0x2e, 0x62, 0x36, 0xad,
- 0x60, 0x17, 0x39, 0x84, 0xbc, 0x2a, 0xb7, 0xb8, 0x6c, 0xe4, 0x96, 0x4d, 0x6d, 0x71, 0xfc, 0x96,
- 0xd8, 0xd8, 0xdd, 0xb4, 0x2f, 0xaf, 0x50, 0xd9, 0xba, 0x7c, 0x79, 0xc9, 0xa7, 0x00, 0x6a, 0x6e,
- 0x8b, 0x75, 0x60, 0xe0, 0x7a, 0x72, 0xa2, 0x29, 0x3b, 0x0a, 0x2c, 0x6a, 0xc8, 0xe3, 0xc8, 0x2f,
- 0x34, 0xea, 0x70, 0x61, 0x2f, 0x65, 0x94, 0xdc, 0x53, 0x42, 0x61, 0x2f, 0xcb, 0x51, 0x63, 0x94,
- 0xff, 0x22, 0x07, 0xe3, 0xcb, 0x2d, 0xcb, 0x6e, 0xaa, 0x15, 0x1a, 0x9d, 0x30, 0x99, 0x53, 0x9f,
- 0x30, 0xaf, 0x1a, 0xb7, 0x02, 0xb1, 0xbd, 0x2a, 0xc1, 0xe4, 0xff, 0x39, 0x18, 0xf7, 0x5b, 0x41,
- 0x5b, 0xd9, 0xee, 0xfb, 0x5b, 0xf8, 0x3c, 0x18, 0xa9, 0xba, 0xbe, 0xb5, 0xa9, 0x4d, 0xff, 0x11,
- 0x62, 0x6c, 0xf0, 0x77, 0x5d, 0x3f, 0x90, 0xa3, 0xa0, 0x07, 0xff, 0x9a, 0xeb, 0x07, 0xc8, 0x21,
- 0x7c, 0x7a, 0xb8, 0x9e, 0x08, 0x3c, 0x28, 0x18, 0xd3, 0xc3, 0xf5, 0x02, 0xe4, 0x10, 0x72, 0x01,
- 0xb2, 0x81, 0x2b, 0x6d, 0x42, 0xdc, 0xa1, 0x77, 0xcb, 0xc5, 0x6c, 0xe0, 0x72, 0x37, 0x3b, 0xcf,
- 0x6d, 0x49, 0xbb, 0x71, 0xe8, 0x66, 0xe7, 0xb9, 0x2d, 0xe4, 0x10, 0xa6, 0x1a, 0xf8, 0x9d, 0x6d,
- 0x76, 0xee, 0x8b, 0xfb, 0x8a, 0x57, 0x45, 0x31, 0x2a, 0x38, 0x23, 0xb6, 0xed, 0xd6, 0x0f, 0xe4,
- 0x05, 0xbb, 0x26, 0xc6, 0xbd, 0x13, 0x38, 0xa4, 0xfc, 0x37, 0x46, 0x80, 0x2c, 0xb7, 0xf8, 0xdd,
- 0x99, 0x79, 0x4c, 0x79, 0x09, 0x8a, 0xdb, 0x9e, 0xbb, 0xa7, 0xad, 0x9d, 0x5a, 0xba, 0x2e, 0xf0,
- 0x52, 0x94, 0x50, 0x76, 0x52, 0xad, 0xed, 0x5a, 0x8e, 0x43, 0x9b, 0xa1, 0x7d, 0x50, 0x0f, 0xe4,
- 0xa2, 0x86, 0xa0, 0x81, 0xc5, 0x03, 0x49, 0xc5, 0x2f, 0xe3, 0xf6, 0x3a, 0x0c, 0x24, 0x0d, 0x41,
- 0x68, 0xe2, 0x45, 0x6e, 0x85, 0xf2, 0x83, 0xbe, 0x15, 0x2a, 0x0c, 0xe0, 0x56, 0xa8, 0x47, 0x80,
- 0x65, 0xf1, 0xc9, 0x06, 0x58, 0x8e, 0x1c, 0x37, 0xc0, 0x72, 0x74, 0x58, 0x56, 0x96, 0xaf, 0x9a,
- 0x87, 0x45, 0x71, 0x07, 0xf1, 0xd9, 0x14, 0x87, 0xa4, 0xae, 0xc9, 0x7a, 0x22, 0x0b, 0xd6, 0xd3,
- 0x70, 0x11, 0xf1, 0x1b, 0x19, 0x28, 0x70, 0x36, 0xa4, 0xc5, 0x23, 0x10, 0xb9, 0x2e, 0x96, 0x49,
- 0xeb, 0xc4, 0xcf, 0x29, 0x46, 0xac, 0xfe, 0x4a, 0x4d, 0x53, 0x3c, 0xc8, 0xf3, 0x90, 0x97, 0x97,
- 0x8e, 0x99, 0x97, 0xc7, 0x85, 0xdd, 0x86, 0x6d, 0x7d, 0xc8, 0x4b, 0x5f, 0x1f, 0xfd, 0xde, 0xdf,
- 0x9e, 0x7d, 0xe6, 0xbd, 0xff, 0x70, 0xf9, 0x99, 0xf2, 0xf7, 0xb3, 0x30, 0xca, 0xc9, 0x2d, 0x74,
- 0x7c, 0xf2, 0xb6, 0x31, 0xca, 0xa2, 0x91, 0x1f, 0x39, 0xde, 0x39, 0xea, 0x26, 0x97, 0x55, 0xac,
- 0x9b, 0x42, 0xd1, 0x11, 0x96, 0x19, 0xa3, 0xb7, 0x2b, 0xf5, 0xa4, 0xec, 0x40, 0xba, 0x60, 0xa1,
- 0xe3, 0x33, 0x4d, 0x20, 0x51, 0x39, 0x6a, 0xeb, 0xb3, 0x66, 0xea, 0xcb, 0x4e, 0xcd, 0x8b, 0xd3,
- 0x33, 0xd4, 0xd4, 0xc8, 0x79, 0xb4, 0xfc, 0xa7, 0x19, 0x18, 0x57, 0xa8, 0x6b, 0xb6, 0x1f, 0x90,
- 0xcf, 0x77, 0x75, 0xe7, 0xdc, 0xf1, 0xba, 0x93, 0xd5, 0xe6, 0x9d, 0xa9, 0x17, 0x82, 0x2a, 0x31,
- 0xba, 0xb2, 0x01, 0x05, 0x3b, 0xa0, 0x2d, 0x5f, 0xde, 0x2b, 0x2f, 0xa4, 0xff, 0xbe, 0xf0, 0x42,
- 0x6c, 0x95, 0x11, 0x46, 0x41, 0xbf, 0xfc, 0x27, 0xb9, 0xf0, 0xbb, 0x58, 0x07, 0x93, 0xb7, 0x22,
- 0x96, 0xc5, 0x4a, 0x3a, 0xcb, 0x22, 0xe3, 0x1b, 0x37, 0x2b, 0xfa, 0xdd, 0x66, 0xc5, 0x95, 0x01,
- 0x98, 0x15, 0xf9, 0x27, 0x3e, 0x51, 0x9b, 0x22, 0x13, 0xa4, 0x53, 0x9a, 0xe5, 0xf2, 0x03, 0x37,
- 0xb0, 0x6b, 0x72, 0x27, 0x1c, 0xa0, 0xdd, 0x94, 0x1f, 0xe0, 0x74, 0xa1, 0xe0, 0x82, 0x71, 0xb6,
- 0xe5, 0xff, 0x92, 0x81, 0xc9, 0xe8, 0xcc, 0x26, 0xbb, 0x7a, 0xcd, 0x64, 0xd2, 0xfa, 0xf7, 0x1c,
- 0xbe, 0x56, 0xc8, 0x1e, 0x14, 0x45, 0xf4, 0x8e, 0x1c, 0xde, 0x34, 0xd1, 0xd1, 0xca, 0xe2, 0x1d,
- 0x32, 0x13, 0xbf, 0x51, 0xb2, 0x28, 0xff, 0xcf, 0xac, 0x9c, 0xc0, 0x52, 0x4a, 0x92, 0x8b, 0x90,
- 0xb5, 0xeb, 0x52, 0x2d, 0x02, 0x59, 0x29, 0xbb, 0xba, 0x84, 0x59, 0xbb, 0xce, 0x0f, 0xa5, 0x22,
- 0xcc, 0x27, 0x1b, 0x55, 0x9b, 0x62, 0x01, 0x71, 0x9f, 0x80, 0x31, 0x26, 0x67, 0xf6, 0xa9, 0xe7,
- 0xdb, 0xae, 0x13, 0x57, 0x81, 0xd8, 0x3a, 0xb9, 0x23, 0x40, 0x68, 0xe2, 0x31, 0x75, 0x8e, 0x1f,
- 0x29, 0x62, 0x7a, 0xa7, 0x71, 0x8c, 0xa8, 0xc0, 0x14, 0x5b, 0xdf, 0x5c, 0x90, 0x3b, 0x01, 0x47,
- 0x2e, 0xc4, 0x9c, 0x16, 0xac, 0xc0, 0x5a, 0x14, 0x60, 0x5e, 0x2f, 0x8e, 0x6f, 0xaa, 0x97, 0xc5,
- 0x23, 0xd4, 0xcb, 0x35, 0xc8, 0x07, 0x76, 0x4b, 0xc5, 0x34, 0xf5, 0x63, 0x36, 0x0b, 0xdb, 0x6e,
- 0xb7, 0x58, 0xdb, 0xed, 0x16, 0x35, 0xf6, 0x95, 0x6f, 0xe6, 0x61, 0x8a, 0xf7, 0xf9, 0x12, 0x6d,
- 0x53, 0xa7, 0x4e, 0x9d, 0xda, 0xc1, 0x31, 0x6c, 0x3a, 0x15, 0x98, 0xa2, 0xe1, 0xa6, 0x6c, 0xb8,
- 0x52, 0xea, 0x6f, 0x5f, 0x8e, 0x82, 0x31, 0x8e, 0xcf, 0x43, 0x8c, 0x59, 0x51, 0x92, 0x5b, 0xe5,
- 0xb2, 0x02, 0x60, 0x88, 0x43, 0xf6, 0x61, 0x44, 0xec, 0xf4, 0xbe, 0x5c, 0x89, 0x37, 0x53, 0x4a,
- 0xd2, 0xf0, 0x8b, 0xa5, 0x56, 0xc1, 0x77, 0x68, 0xf1, 0xbf, 0x8f, 0x8a, 0x19, 0xf9, 0xc5, 0x0c,
- 0x94, 0x02, 0xcf, 0x72, 0xfc, 0x1d, 0xd7, 0x6b, 0x49, 0xed, 0x75, 0x6b, 0x60, 0xac, 0xb7, 0x14,
- 0x65, 0x2a, 0xe3, 0xe6, 0x74, 0x01, 0x86, 0x5c, 0x89, 0x0d, 0x17, 0x64, 0x73, 0xd6, 0xdc, 0x86,
- 0x5d, 0xb3, 0x9a, 0x22, 0x62, 0xd3, 0x55, 0x7e, 0x32, 0x1f, 0x55, 0xb7, 0xa8, 0x2b, 0x89, 0x58,
- 0x8f, 0x1f, 0xce, 0x4e, 0xc5, 0x8a, 0xb0, 0x07, 0xc1, 0xf2, 0xef, 0x16, 0xe0, 0x7c, 0x62, 0xf7,
- 0x90, 0x6d, 0x39, 0x05, 0x53, 0x5f, 0x54, 0xb1, 0x89, 0x28, 0xbb, 0x7c, 0x34, 0x3a, 0x31, 0x4d,
- 0xed, 0x2b, 0x7b, 0x0a, 0xda, 0xd7, 0x8e, 0xd4, 0xbe, 0x44, 0x74, 0x6b, 0x8a, 0x4f, 0x0a, 0xcd,
- 0x15, 0xe1, 0x7a, 0x09, 0xf5, 0x38, 0x62, 0x43, 0x81, 0x3e, 0x68, 0x7b, 0xc2, 0xa1, 0x22, 0x15,
- 0xa3, 0xe5, 0x07, 0x6d, 0x4f, 0x32, 0xd2, 0x5a, 0x00, 0x2b, 0xf3, 0x51, 0x70, 0x20, 0x6f, 0xc3,
- 0x59, 0xc6, 0x32, 0x3e, 0x4f, 0x84, 0x68, 0x9a, 0x93, 0x55, 0xce, 0x2e, 0x75, 0xa3, 0x24, 0x4d,
- 0x92, 0x24, 0x52, 0x8c, 0x03, 0x63, 0x95, 0x3c, 0x13, 0x35, 0x87, 0xe5, 0x6e, 0x94, 0x44, 0x0e,
- 0x09, 0xa4, 0xb8, 0x6c, 0xe7, 0xce, 0xd0, 0xf2, 0x68, 0x1e, 0xca, 0x76, 0x5e, 0x8a, 0x12, 0x5a,
- 0x7e, 0x1b, 0x2e, 0xf6, 0x5e, 0x4e, 0x6c, 0xf7, 0x78, 0xe7, 0x5e, 0x7c, 0xf7, 0xb8, 0x7e, 0x0b,
- 0xb3, 0xef, 0xdc, 0x33, 0x38, 0x64, 0x0f, 0xe5, 0xf0, 0x7e, 0x16, 0xa6, 0xe3, 0xb7, 0x54, 0xa4,
- 0x03, 0x23, 0x35, 0x71, 0xb3, 0x23, 0xd7, 0xc2, 0x46, 0x9a, 0x0b, 0xb9, 0xee, 0x2b, 0x22, 0x39,
- 0x59, 0x05, 0x04, 0x15, 0x2f, 0xf2, 0xd7, 0x54, 0x4c, 0xee, 0xba, 0xd5, 0x96, 0xab, 0x63, 0x23,
- 0x95, 0xe9, 0xbf, 0xcb, 0x9a, 0x6f, 0x46, 0xee, 0xae, 0x87, 0x91, 0xbb, 0xeb, 0x56, 0xbb, 0xfc,
- 0xc7, 0x59, 0x18, 0x33, 0xad, 0x16, 0xc3, 0x3f, 0x82, 0xec, 0x45, 0x8e, 0x20, 0xab, 0x03, 0x39,
- 0x3e, 0xf6, 0x3c, 0x85, 0xf8, 0xb1, 0x53, 0xc8, 0x60, 0x4e, 0xab, 0x47, 0x1c, 0x44, 0xae, 0xc2,
- 0x99, 0xae, 0xa3, 0x2d, 0x79, 0x0d, 0x80, 0x2d, 0x09, 0xea, 0xfb, 0xb6, 0xbe, 0x4f, 0xd2, 0x1d,
- 0xb5, 0xac, 0x21, 0x68, 0x60, 0x95, 0xff, 0x7d, 0x06, 0xcc, 0x0d, 0xf7, 0x14, 0x0e, 0x35, 0xef,
- 0x44, 0x0f, 0x35, 0xcb, 0x03, 0xe9, 0xae, 0x1e, 0xe7, 0x9a, 0x5f, 0x59, 0x8a, 0x7c, 0x1d, 0x3f,
- 0xda, 0x5c, 0x81, 0x71, 0x2a, 0x75, 0xe2, 0xa4, 0x0c, 0x20, 0xcb, 0x06, 0x0c, 0x23, 0x98, 0xa4,
- 0x69, 0x98, 0x66, 0xb3, 0x69, 0x4f, 0x10, 0xca, 0x98, 0x2b, 0xec, 0x54, 0xdd, 0xa6, 0x5d, 0xb2,
- 0x0b, 0x23, 0xbe, 0x88, 0x75, 0x91, 0x13, 0x2b, 0xc5, 0x29, 0x4c, 0x05, 0xcd, 0x70, 0xe9, 0x20,
- 0x7f, 0xa0, 0x22, 0x4f, 0x0e, 0xa0, 0xd0, 0xb2, 0x1d, 0xdb, 0x95, 0x5b, 0xcc, 0xd6, 0xc0, 0xd6,
- 0xcb, 0xdc, 0x3a, 0x23, 0x2b, 0x0c, 0x3e, 0x7a, 0x80, 0x78, 0x19, 0x0a, 0x8e, 0x3c, 0xad, 0x57,
- 0x4d, 0x3a, 0x16, 0xc8, 0x9b, 0x95, 0xbb, 0x83, 0x63, 0xaf, 0x5d, 0x16, 0xa2, 0x26, 0x27, 0x55,
- 0x8c, 0x9a, 0x35, 0xe9, 0xc8, 0xe4, 0x0b, 0xc5, 0xb4, 0x6e, 0x88, 0xf1, 0x26, 0xac, 0xd8, 0x4d,
- 0x1a, 0xbb, 0xde, 0x31, 0xb2, 0x31, 0xb0, 0xcf, 0x37, 0x72, 0x0e, 0x0c, 0xf8, 0xf3, 0xd5, 0xe5,
- 0x64, 0xec, 0xf3, 0xbb, 0x33, 0x11, 0x30, 0x45, 0x55, 0xbb, 0xac, 0x8a, 0xe4, 0x6a, 0x77, 0x06,
- 0xd7, 0x0c, 0xe9, 0xe4, 0x27, 0x5a, 0xa1, 0x8f, 0x29, 0x5d, 0x4e, 0xac, 0x1d, 0xc8, 0x5b, 0xad,
- 0x7b, 0x6d, 0x69, 0x7b, 0x1c, 0xe0, 0x10, 0x54, 0x5a, 0xf7, 0xda, 0xb1, 0x21, 0xa8, 0xac, 0xdf,
- 0xda, 0x44, 0xce, 0x8e, 0x4d, 0x7e, 0x61, 0x13, 0x80, 0x41, 0x4f, 0x7e, 0x6e, 0x15, 0x88, 0x4d,
- 0xfe, 0x88, 0xa5, 0xa0, 0x03, 0xf9, 0xd6, 0xbd, 0x20, 0x98, 0x19, 0x1b, 0xf4, 0x17, 0xaf, 0xdf,
- 0x0b, 0x82, 0xd8, 0x17, 0xaf, 0xdf, 0xda, 0xda, 0x42, 0xce, 0x8e, 0xb1, 0xe5, 0xb6, 0x9d, 0xf1,
- 0x41, 0xb3, 0xdd, 0xb0, 0x02, 0x3f, 0xc6, 0xd6, 0xb0, 0xf8, 0xdc, 0x83, 0x9c, 0xef, 0xf8, 0xd2,
- 0x49, 0x12, 0x07, 0xc7, 0xb5, 0xea, 0x48, 0xa6, 0x3a, 0xa6, 0xba, 0xba, 0x51, 0x45, 0xc6, 0x8b,
- 0xb3, 0xbc, 0xe7, 0xcf, 0x4c, 0x0e, 0x9c, 0xe5, 0xbd, 0x2e, 0x96, 0xb7, 0x18, 0xcb, 0x7b, 0x3e,
- 0xf9, 0x02, 0x14, 0xdb, 0x9d, 0xed, 0x6a, 0x67, 0x7b, 0x66, 0x8a, 0x73, 0xbd, 0x3d, 0x38, 0xae,
- 0x9b, 0x9c, 0xae, 0x60, 0xac, 0xf5, 0x02, 0x51, 0x88, 0x92, 0x29, 0x63, 0x2f, 0xf8, 0xcd, 0x4c,
- 0x0f, 0x9a, 0xfd, 0x55, 0x4e, 0x28, 0xc6, 0x5e, 0x14, 0xa2, 0x64, 0x2a, 0xd9, 0x37, 0xad, 0xed,
- 0x99, 0x33, 0x43, 0x60, 0xdf, 0xb4, 0x12, 0xd8, 0x37, 0x2d, 0xc1, 0xbe, 0x69, 0x6d, 0xb3, 0x99,
- 0xbd, 0x5b, 0xdf, 0xf1, 0x67, 0xc8, 0xa0, 0x67, 0xf6, 0xb5, 0xfa, 0x4e, 0x7c, 0x66, 0x5f, 0x5b,
- 0x5a, 0xa9, 0x22, 0x67, 0xc7, 0x44, 0x88, 0xdf, 0xb4, 0x6a, 0x7b, 0x33, 0x67, 0x07, 0x2d, 0x42,
- 0xaa, 0x8c, 0x6c, 0x4c, 0x84, 0xf0, 0x32, 0x14, 0x1c, 0xc9, 0xaf, 0x66, 0x60, 0x4c, 0xe6, 0x4c,
- 0xb8, 0xea, 0xd9, 0xf5, 0x99, 0x73, 0xa9, 0x2f, 0x6e, 0xe2, 0x2d, 0x08, 0x89, 0x8b, 0x76, 0x84,
- 0xf6, 0xaf, 0x10, 0x82, 0x66, 0x1b, 0xc8, 0xdf, 0xca, 0xc0, 0xa4, 0x15, 0xc9, 0x89, 0x31, 0x73,
- 0x9e, 0x37, 0xeb, 0xe7, 0x07, 0x28, 0xd3, 0xa3, 0x39, 0x37, 0x78, 0xcb, 0xb4, 0x0f, 0x6d, 0x14,
- 0x88, 0xb1, 0xc6, 0xb0, 0x49, 0xea, 0x07, 0x9e, 0xdd, 0xa6, 0x33, 0x17, 0x06, 0x3d, 0x49, 0xab,
- 0x9c, 0x6e, 0x6c, 0x92, 0x8a, 0x42, 0x94, 0x4c, 0xf9, 0x5e, 0x4b, 0xc5, 0xf5, 0xd8, 0xcc, 0xb3,
- 0x83, 0xde, 0x6b, 0xd5, 0xbd, 0x5b, 0x74, 0xaf, 0x95, 0xa5, 0xa8, 0xf8, 0xb2, 0x19, 0xeb, 0xd1,
- 0xba, 0xed, 0xcf, 0xcc, 0x0c, 0x7a, 0xc6, 0x22, 0x23, 0x1b, 0x9b, 0xb1, 0xbc, 0x0c, 0x05, 0x47,
- 0x26, 0x93, 0x1d, 0xff, 0xde, 0xcc, 0x73, 0x83, 0x96, 0xc9, 0x1b, 0xfe, 0xbd, 0x98, 0x4c, 0xde,
- 0xa8, 0xde, 0x42, 0xc6, 0x4b, 0xc8, 0xe4, 0xa6, 0x6f, 0x79, 0x33, 0x17, 0x07, 0x2f, 0x93, 0x19,
- 0xdd, 0x2e, 0x99, 0xcc, 0x0a, 0x51, 0x32, 0xe5, 0x03, 0xce, 0x93, 0x37, 0xdb, 0xb5, 0x99, 0x1f,
- 0x1b, 0xf4, 0x80, 0x5f, 0x15, 0x84, 0x63, 0x03, 0x2e, 0x4b, 0x51, 0xf1, 0x25, 0x2f, 0x33, 0x3d,
- 0xb3, 0xdd, 0xb4, 0x6b, 0x96, 0x3f, 0xf3, 0xbc, 0xf0, 0x76, 0x10, 0xaa, 0xa0, 0x28, 0x43, 0x0d,
- 0x25, 0xbf, 0x99, 0x81, 0xa9, 0x58, 0xe0, 0xc4, 0xcc, 0x0b, 0xbc, 0xd5, 0x6f, 0x0e, 0xae, 0xd5,
- 0x0b, 0x51, 0x06, 0xa2, 0xf5, 0xda, 0x00, 0x1c, 0x77, 0xb9, 0x8f, 0xb7, 0x87, 0x7c, 0x2d, 0x03,
- 0x25, 0x5d, 0x36, 0x73, 0x89, 0xb7, 0xee, 0xd3, 0x43, 0x68, 0x9d, 0x68, 0x97, 0xb6, 0x2d, 0x87,
- 0xf1, 0x66, 0x21, 0x77, 0x2e, 0x81, 0xf9, 0xcc, 0x16, 0x57, 0x31, 0x33, 0xb3, 0x83, 0x96, 0xc0,
- 0x18, 0x12, 0x8f, 0x49, 0x60, 0x03, 0x82, 0x66, 0x1b, 0xf8, 0x18, 0x5a, 0xd1, 0x64, 0x09, 0x33,
- 0x97, 0x07, 0x3d, 0x86, 0xf1, 0xfc, 0x16, 0xd1, 0x31, 0x8c, 0x41, 0x31, 0xde, 0x1e, 0xf2, 0xbb,
- 0x19, 0x38, 0x63, 0xc5, 0xb3, 0xd4, 0xcc, 0xfc, 0x38, 0x6f, 0xe5, 0xdb, 0x03, 0x6e, 0x65, 0x24,
- 0x11, 0x0e, 0x6f, 0xa7, 0x8e, 0xa1, 0xea, 0x82, 0x63, 0x77, 0xab, 0x98, 0x5e, 0xe1, 0xef, 0x04,
- 0xed, 0x99, 0xf2, 0xa0, 0xf5, 0x8a, 0xea, 0x4e, 0x10, 0x3f, 0x9a, 0x54, 0x57, 0xb6, 0x36, 0x91,
- 0xb3, 0xe3, 0xda, 0x14, 0xf5, 0x3c, 0x3b, 0x98, 0x79, 0x71, 0xe0, 0xda, 0x14, 0xa7, 0x1b, 0xd7,
- 0xa6, 0x78, 0x21, 0x4a, 0xa6, 0x17, 0xbf, 0x08, 0x10, 0x9e, 0xdf, 0x13, 0x5c, 0x22, 0x3e, 0x6b,
- 0xba, 0x44, 0x0c, 0x28, 0x6b, 0xa2, 0xe1, 0x58, 0x71, 0xf1, 0xeb, 0x19, 0x98, 0x88, 0x9c, 0xe0,
- 0x13, 0xda, 0x50, 0x8b, 0xb6, 0x61, 0x7d, 0xa0, 0xe1, 0x0d, 0x66, 0x63, 0x7e, 0x29, 0x03, 0x25,
- 0x7d, 0x96, 0x4f, 0x68, 0xc8, 0x5b, 0xd1, 0x86, 0xac, 0xa6, 0x4b, 0xdf, 0xd8, 0xa3, 0x11, 0xac,
- 0x47, 0x22, 0x87, 0xfa, 0xa1, 0xf6, 0x88, 0xe6, 0x94, 0xdc, 0x98, 0xaf, 0x66, 0x60, 0xdc, 0x3c,
- 0xda, 0x27, 0xb4, 0x65, 0x3b, 0xda, 0x96, 0xb5, 0xd4, 0x61, 0xb0, 0x87, 0x0c, 0x8e, 0x3e, 0xe5,
- 0x0f, 0x75, 0x70, 0x62, 0x89, 0xe3, 0xcd, 0x46, 0x7c, 0x39, 0x03, 0x10, 0x1e, 0xf9, 0x13, 0x5a,
- 0xf1, 0x76, 0xb4, 0x15, 0xd7, 0x53, 0x7a, 0x1f, 0x1c, 0xd2, 0x17, 0xfa, 0xfc, 0x3f, 0xd4, 0xbe,
- 0x58, 0xbf, 0xb5, 0xb5, 0xd5, 0xa3, 0x11, 0x5f, 0xca, 0x40, 0x49, 0x5b, 0x03, 0x86, 0xda, 0x15,
- 0x1b, 0x95, 0xad, 0xaa, 0x50, 0xed, 0xbb, 0x5b, 0xf1, 0x5e, 0x06, 0x46, 0x95, 0x75, 0x20, 0xa1,
- 0x11, 0x6f, 0x46, 0x1b, 0x91, 0xc2, 0x7b, 0xa8, 0xba, 0x51, 0xed, 0xd1, 0x11, 0xbc, 0x09, 0xf7,
- 0x4e, 0xa3, 0x09, 0xb7, 0x7a, 0x35, 0xe1, 0xfd, 0x0c, 0x8c, 0x19, 0xa6, 0x83, 0x84, 0x56, 0x58,
- 0xd1, 0x56, 0xa4, 0xb8, 0xc0, 0x90, 0x7c, 0x7a, 0x37, 0xc4, 0x30, 0x22, 0x0c, 0xb5, 0x21, 0x92,
- 0xcf, 0xa1, 0x0d, 0x51, 0xe6, 0x84, 0x61, 0x37, 0x84, 0xf1, 0xe9, 0xbd, 0x56, 0xb5, 0x69, 0x61,
- 0xa8, 0x6b, 0xf5, 0xda, 0xd2, 0x4a, 0xf5, 0x10, 0xb9, 0x15, 0xda, 0x19, 0x86, 0xba, 0x58, 0x05,
- 0x9b, 0xe4, 0x66, 0x7c, 0x3b, 0x03, 0xd3, 0x71, 0x63, 0x43, 0x42, 0x63, 0x76, 0xa2, 0x8d, 0xd9,
- 0x4c, 0xe3, 0xbe, 0x14, 0x32, 0x4b, 0x6e, 0xd2, 0xaf, 0x65, 0xe0, 0x6c, 0x82, 0xa1, 0x21, 0xa1,
- 0x55, 0x76, 0xb4, 0x55, 0xd5, 0x21, 0x24, 0x13, 0x8d, 0x4f, 0x60, 0xc3, 0xd4, 0x30, 0xd4, 0x09,
- 0x2c, 0xf9, 0xf4, 0xd6, 0x01, 0x4c, 0x93, 0xc3, 0x50, 0x75, 0x80, 0x6e, 0x9f, 0xe2, 0xf8, 0x34,
- 0x0e, 0x8d, 0x0f, 0x43, 0x9d, 0xc6, 0x82, 0x4d, 0x6f, 0x81, 0xaf, 0x4c, 0x11, 0x43, 0x15, 0xf8,
- 0x1b, 0xd5, 0x5b, 0x87, 0x0a, 0x7c, 0x6d, 0x97, 0x18, 0xb2, 0xc0, 0xe7, 0x7c, 0x7a, 0xcf, 0x0e,
- 0xd3, 0x3e, 0x31, 0xd4, 0xd9, 0xa1, 0x18, 0x25, 0x37, 0xe5, 0x7b, 0x19, 0x23, 0x15, 0x94, 0x61,
- 0x74, 0x48, 0x68, 0xd2, 0x3b, 0xd1, 0x26, 0x6d, 0x0d, 0x23, 0x9d, 0x83, 0xd9, 0xb4, 0x6f, 0x64,
- 0x60, 0x32, 0x6a, 0x71, 0x48, 0x68, 0x54, 0x3d, 0xda, 0xa8, 0x8d, 0xc1, 0x66, 0x98, 0x8a, 0xcb,
- 0xe1, 0xb8, 0xc9, 0x61, 0xa8, 0x72, 0xd8, 0x64, 0xd6, 0x7b, 0xf0, 0x92, 0xac, 0x0d, 0x43, 0x1d,
- 0xbc, 0xde, 0xe9, 0x3b, 0xcd, 0xa6, 0xfd, 0x7a, 0x46, 0xa6, 0xa5, 0xec, 0x32, 0x31, 0x24, 0x34,
- 0xae, 0x19, 0x6d, 0xdc, 0x9d, 0xe1, 0xa4, 0xf7, 0x8d, 0x2b, 0x18, 0xda, 0xc6, 0x30, 0x54, 0x05,
- 0xa3, 0xba, 0xb2, 0xb5, 0x79, 0x98, 0xba, 0x15, 0xda, 0x1b, 0x86, 0xab, 0x6e, 0x09, 0x3e, 0x89,
- 0x0d, 0x29, 0x7f, 0x21, 0xe2, 0x34, 0x73, 0xda, 0x0e, 0xd1, 0xe5, 0xdf, 0xc8, 0x00, 0x84, 0x3e,
- 0x78, 0xe4, 0x32, 0xe4, 0xe9, 0x83, 0xb6, 0x17, 0x77, 0x95, 0x65, 0x18, 0xc8, 0x21, 0xc4, 0x81,
- 0xe2, 0x8e, 0x4d, 0x9b, 0x75, 0xe5, 0x2a, 0x93, 0xc2, 0xa1, 0x51, 0x46, 0x58, 0xae, 0x30, 0x72,
- 0x61, 0x03, 0xf9, 0x4f, 0x1f, 0x25, 0x97, 0xf2, 0x47, 0x60, 0xdc, 0x7c, 0x3b, 0xe2, 0xe8, 0xe8,
- 0xc9, 0xf2, 0x3f, 0xce, 0xc3, 0x54, 0xcc, 0x5e, 0xa1, 0xbd, 0x73, 0xb7, 0xc2, 0xcc, 0x01, 0x51,
- 0xef, 0x5c, 0xee, 0xd0, 0x1c, 0xe2, 0x90, 0x6f, 0x64, 0x60, 0xea, 0xbe, 0x15, 0xd4, 0x76, 0x19,
- 0xe1, 0x45, 0xd3, 0x65, 0x3c, 0xc5, 0x7c, 0xbc, 0x1b, 0x25, 0x18, 0x1a, 0x26, 0x63, 0x00, 0x8c,
- 0xb3, 0x26, 0xaf, 0xc0, 0x48, 0xdb, 0x6d, 0x36, 0x6d, 0xa7, 0x21, 0x5f, 0x3c, 0x0a, 0xc3, 0x54,
- 0x45, 0x31, 0x2a, 0x78, 0xf4, 0x51, 0xba, 0x7c, 0x5a, 0xf7, 0x8d, 0x58, 0x47, 0x9e, 0x28, 0x60,
- 0xaa, 0xf0, 0x14, 0x04, 0x4c, 0xfd, 0xab, 0x3c, 0x90, 0xee, 0xdd, 0xfa, 0xa8, 0xf7, 0x1b, 0x5f,
- 0x8a, 0x84, 0x13, 0x94, 0x7a, 0x45, 0x02, 0x88, 0x64, 0x2c, 0x32, 0xe6, 0xbc, 0xeb, 0xc1, 0x2e,
- 0x51, 0x8e, 0x1a, 0xa3, 0xcf, 0x14, 0xee, 0x5f, 0xed, 0x4e, 0xa8, 0xf2, 0xd9, 0x41, 0x6a, 0x2c,
- 0x7d, 0x0c, 0xf9, 0x6d, 0xfe, 0x34, 0xd7, 0xae, 0x0c, 0x98, 0x2f, 0xf6, 0x1d, 0x30, 0x5f, 0xd1,
- 0x95, 0xd1, 0x20, 0x74, 0xea, 0x09, 0xdf, 0xd3, 0xcd, 0xa4, 0x3f, 0x2d, 0xc2, 0x99, 0x2e, 0x89,
- 0x7f, 0xfa, 0xe9, 0xf7, 0x5e, 0x85, 0x51, 0xf6, 0x77, 0x23, 0x21, 0xe6, 0xf9, 0x9a, 0x2c, 0x47,
- 0x8d, 0x61, 0xa4, 0x9a, 0xcb, 0xf5, 0x4c, 0x35, 0x67, 0x45, 0xd2, 0x6a, 0x0e, 0xe5, 0x5d, 0xc1,
- 0x4f, 0xc2, 0x84, 0xb0, 0xf3, 0xab, 0xa4, 0x6a, 0x85, 0x68, 0x56, 0xad, 0xab, 0x26, 0x10, 0xa3,
- 0xb8, 0x3d, 0x52, 0xa8, 0x15, 0x4f, 0x94, 0x42, 0xed, 0x97, 0xbb, 0xb3, 0xae, 0x7f, 0x66, 0x80,
- 0x0a, 0x40, 0x1f, 0x6b, 0xca, 0x4c, 0x5f, 0x38, 0x7a, 0x68, 0xfa, 0xc2, 0x79, 0x28, 0xf9, 0x7e,
- 0xf3, 0x0e, 0xf5, 0xec, 0x1d, 0x11, 0xb6, 0x6d, 0x3c, 0x72, 0x57, 0x55, 0x00, 0x0c, 0x71, 0x9e,
- 0xb2, 0x90, 0xd6, 0xf7, 0x0b, 0xdc, 0x40, 0xa6, 0x15, 0x81, 0x23, 0x44, 0xf3, 0x1b, 0x30, 0x59,
- 0x6b, 0xba, 0x0e, 0x5d, 0xb2, 0x3d, 0x2e, 0x61, 0x0e, 0xe2, 0x49, 0xcd, 0x16, 0x23, 0x50, 0x8c,
- 0x61, 0x93, 0x1a, 0x14, 0x6a, 0x1e, 0xad, 0xfb, 0xe9, 0xc3, 0xf2, 0xae, 0xda, 0xc1, 0x22, 0xa3,
- 0x24, 0xc2, 0xf2, 0xf8, 0xbf, 0x28, 0x68, 0xf3, 0x54, 0x03, 0xfe, 0x2e, 0x97, 0x83, 0x5c, 0x64,
- 0xe6, 0xfb, 0x4f, 0x35, 0x50, 0xbd, 0xa6, 0xab, 0x63, 0x84, 0x18, 0x93, 0x00, 0x3b, 0x76, 0x93,
- 0x32, 0x2d, 0x22, 0x9e, 0xb4, 0x61, 0x45, 0x96, 0xa3, 0xc6, 0x10, 0x61, 0xfb, 0x96, 0x53, 0xdb,
- 0x95, 0x81, 0x0f, 0x46, 0xd8, 0x3e, 0x4f, 0x07, 0x29, 0xa1, 0xac, 0xdb, 0x03, 0xab, 0x21, 0x03,
- 0x19, 0x74, 0xb7, 0x6f, 0x59, 0x0d, 0x64, 0xe5, 0x0c, 0xec, 0xd1, 0x1d, 0x99, 0x5d, 0x40, 0x83,
- 0x91, 0xee, 0x20, 0x2b, 0x27, 0x2d, 0x28, 0x7a, 0xb4, 0xe5, 0x06, 0xea, 0x7d, 0xda, 0xd5, 0x54,
- 0xdd, 0x8a, 0x9c, 0x94, 0x54, 0xa6, 0x40, 0xa4, 0x42, 0x62, 0x25, 0x28, 0x99, 0x90, 0x2a, 0x9c,
- 0x57, 0xbb, 0xea, 0x6a, 0xc3, 0x71, 0x3d, 0x7a, 0xcd, 0xf5, 0x79, 0x62, 0x3c, 0xe0, 0xcb, 0x43,
- 0x25, 0x8f, 0x3a, 0xbf, 0x9a, 0x84, 0x84, 0xc9, 0x75, 0xcb, 0xff, 0x20, 0x03, 0xa3, 0x6a, 0x4c,
- 0x9f, 0x82, 0x84, 0xd3, 0xb7, 0x60, 0x2a, 0xd6, 0x55, 0xc7, 0x08, 0x88, 0x7b, 0x1e, 0xf2, 0x1d,
- 0xaf, 0x29, 0x74, 0x7c, 0xf9, 0x58, 0xdd, 0x6d, 0x5c, 0xab, 0x22, 0x2f, 0x2d, 0xff, 0x61, 0x06,
- 0x26, 0x85, 0x31, 0xbb, 0xd2, 0x6e, 0x8b, 0x7e, 0xb8, 0x0d, 0xd0, 0xf6, 0xec, 0x7d, 0x2b, 0xa0,
- 0x2a, 0xef, 0x60, 0x7f, 0x5b, 0xff, 0xa6, 0xae, 0x8c, 0x06, 0x21, 0xf2, 0x22, 0x14, 0xac, 0x76,
- 0x7b, 0x75, 0x89, 0x77, 0x45, 0x2e, 0xf4, 0xde, 0xa9, 0xb0, 0x42, 0x14, 0x30, 0xb6, 0xd4, 0x6d,
- 0xc7, 0x0f, 0xac, 0x66, 0x93, 0x87, 0x9b, 0xac, 0x2e, 0xf1, 0x35, 0x9b, 0x0b, 0x97, 0xfa, 0x6a,
- 0x04, 0x8a, 0x31, 0xec, 0xf2, 0xdf, 0x1f, 0x83, 0x33, 0x5d, 0xb6, 0x79, 0x23, 0x58, 0x33, 0xd7,
- 0x15, 0xac, 0x69, 0xec, 0xe6, 0xd9, 0x53, 0xd9, 0xcd, 0x75, 0x1e, 0xe9, 0xdc, 0x71, 0xf3, 0x48,
- 0x87, 0x39, 0x1a, 0x65, 0xcc, 0x67, 0x42, 0xee, 0xdd, 0x30, 0xaf, 0x23, 0x1a, 0xf8, 0xc7, 0x4a,
- 0x6c, 0x7d, 0x13, 0x46, 0xad, 0xb6, 0x2d, 0xd2, 0xb7, 0x16, 0xfb, 0x9e, 0xa6, 0x95, 0xcd, 0x55,
- 0x91, 0xbb, 0x55, 0x13, 0xe9, 0x4e, 0xdc, 0x3a, 0x32, 0xd8, 0xc4, 0xad, 0xa6, 0x0a, 0x3e, 0x7a,
- 0xa4, 0x0a, 0xfe, 0x12, 0x14, 0xad, 0x5a, 0x60, 0xef, 0x53, 0xb9, 0x91, 0x6a, 0x69, 0x58, 0xe1,
- 0xa5, 0x28, 0xa1, 0xf2, 0x65, 0x7b, 0x15, 0x11, 0xcb, 0xc5, 0x4a, 0xf4, 0x65, 0x7b, 0x1d, 0x2c,
- 0x6b, 0xe2, 0x71, 0x3d, 0x87, 0xcf, 0x97, 0x68, 0xf2, 0xd8, 0x50, 0xcf, 0x31, 0x81, 0x18, 0xc5,
- 0x25, 0x15, 0x98, 0x12, 0x05, 0xb7, 0xdb, 0xec, 0xf8, 0xcc, 0xaa, 0x8f, 0x47, 0x67, 0xc5, 0xd5,
- 0x28, 0x18, 0xe3, 0xf8, 0x3d, 0x54, 0xa5, 0x89, 0xf4, 0xaa, 0xd2, 0x64, 0x6a, 0x55, 0x29, 0xbe,
- 0x0e, 0xfb, 0x50, 0x95, 0xbe, 0x12, 0xcf, 0xdf, 0x2c, 0xbc, 0x9d, 0x53, 0xa8, 0x35, 0x6c, 0x51,
- 0xd5, 0xcd, 0x0c, 0xcd, 0xc7, 0xca, 0xdb, 0xfc, 0xd3, 0x30, 0xe1, 0x7a, 0x0d, 0xcb, 0xb1, 0xdf,
- 0xe5, 0x12, 0xc6, 0xe7, 0x6e, 0xcf, 0x25, 0x31, 0x47, 0x6f, 0x9a, 0x00, 0x8c, 0xe2, 0x91, 0x0e,
- 0x94, 0x1a, 0x4a, 0xac, 0xce, 0x9c, 0x49, 0x2b, 0x58, 0xa2, 0x12, 0x5a, 0xc4, 0xc2, 0xe9, 0x32,
- 0x0c, 0x39, 0x19, 0x7a, 0x20, 0x79, 0x0a, 0xf4, 0xc0, 0xff, 0x3b, 0xc2, 0xa5, 0x75, 0xf4, 0x02,
- 0xf3, 0xf4, 0xcf, 0x57, 0x3f, 0x03, 0x25, 0xa9, 0x79, 0xcb, 0xdd, 0xa9, 0xb4, 0xf0, 0x63, 0x3a,
- 0x1a, 0x35, 0x9e, 0xdd, 0x7c, 0x75, 0x09, 0x43, 0xec, 0x63, 0x1d, 0xb6, 0x62, 0x19, 0xb2, 0xf3,
- 0x83, 0xcb, 0x90, 0x5d, 0x85, 0xf3, 0x22, 0x1f, 0x67, 0xb5, 0xba, 0xc6, 0x0f, 0x02, 0xb6, 0x78,
- 0x6d, 0x56, 0x3e, 0x02, 0xa7, 0x75, 0xa2, 0xe5, 0x24, 0x24, 0x4c, 0xae, 0x2b, 0x05, 0x5a, 0xd3,
- 0xd2, 0x02, 0xad, 0xd8, 0x25, 0xd0, 0x42, 0x20, 0x46, 0x71, 0x7b, 0x48, 0xa3, 0xd1, 0xf4, 0xd2,
- 0xa8, 0x34, 0x00, 0x69, 0x14, 0x9d, 0x67, 0x27, 0x3c, 0xb8, 0xc1, 0xa1, 0x07, 0xb7, 0x4f, 0xc3,
- 0x98, 0x78, 0x29, 0x5b, 0x8c, 0xf5, 0x58, 0xdf, 0x63, 0x5d, 0x0d, 0x6b, 0xa3, 0x49, 0xca, 0x58,
- 0xd9, 0xe3, 0xa7, 0x93, 0x76, 0xbb, 0x0c, 0xc5, 0x86, 0xe7, 0x76, 0xda, 0x22, 0xa4, 0x46, 0x4e,
- 0xed, 0xab, 0xbc, 0x04, 0x25, 0x24, 0xdd, 0xea, 0xff, 0x66, 0x09, 0xa6, 0x62, 0x7e, 0x03, 0x89,
- 0xb6, 0xda, 0xcc, 0x93, 0xb3, 0xd5, 0x5e, 0x8e, 0x64, 0xef, 0x4b, 0x4a, 0xb5, 0xd1, 0x95, 0x3c,
- 0x3c, 0x77, 0xfc, 0xe4, 0xe1, 0xe4, 0x27, 0xa1, 0x64, 0xd5, 0xeb, 0x1e, 0xf5, 0x7d, 0xaa, 0x1e,
- 0x34, 0x10, 0x6f, 0xb9, 0xab, 0x42, 0x0c, 0xe1, 0xdc, 0x0a, 0x54, 0xdf, 0xf1, 0xd9, 0x39, 0x23,
- 0x7e, 0x06, 0x64, 0xbd, 0xc8, 0xca, 0x51, 0x63, 0x90, 0x3a, 0x4c, 0xed, 0x79, 0xdb, 0x8b, 0x8b,
- 0x56, 0x6d, 0x97, 0x9e, 0xc4, 0x88, 0xc7, 0x13, 0xc0, 0xdc, 0x88, 0x52, 0xc0, 0x38, 0x49, 0xc9,
- 0xe5, 0x06, 0x3d, 0x08, 0xac, 0xed, 0x93, 0xe8, 0x7a, 0x8a, 0x8b, 0x49, 0x01, 0xe3, 0x24, 0x99,
- 0x66, 0xb6, 0xe7, 0x6d, 0xab, 0x03, 0x96, 0x3c, 0x90, 0x6a, 0xcd, 0xec, 0x46, 0x08, 0x42, 0x13,
- 0x8f, 0x75, 0xd8, 0x9e, 0xb7, 0x8d, 0xd4, 0x6a, 0xb6, 0x64, 0xea, 0x3b, 0xdd, 0x61, 0x37, 0x64,
- 0x39, 0x6a, 0x0c, 0xd2, 0x06, 0xc2, 0xbe, 0x8e, 0x8f, 0xbb, 0x0e, 0x33, 0x97, 0xd6, 0x94, 0xe3,
- 0xbf, 0x2f, 0x7d, 0x81, 0xc9, 0xb7, 0x1b, 0x5d, 0x74, 0x30, 0x81, 0x36, 0xf9, 0x0c, 0x3c, 0xbb,
- 0xe7, 0x6d, 0xcb, 0x2b, 0xc0, 0x4d, 0xcf, 0x76, 0x6a, 0x76, 0xdb, 0x12, 0xd9, 0xf0, 0xc6, 0xa2,
- 0x4f, 0xe1, 0xdd, 0x48, 0x46, 0xc3, 0x5e, 0xf5, 0xa3, 0x17, 0x07, 0xe3, 0x69, 0x2f, 0x0e, 0x62,
- 0x8b, 0xf4, 0x44, 0x17, 0x07, 0x13, 0x4f, 0x81, 0x3a, 0xf2, 0xe5, 0x11, 0x18, 0xbb, 0xb6, 0xb5,
- 0xb5, 0xa9, 0x72, 0x5d, 0x1e, 0x61, 0x96, 0x32, 0x72, 0x97, 0x66, 0x4f, 0xf1, 0x99, 0x3a, 0x99,
- 0xa8, 0x2f, 0x37, 0xac, 0x44, 0x7d, 0x2f, 0x41, 0xb1, 0x45, 0x83, 0x5d, 0xb7, 0x1e, 0xcf, 0x4d,
- 0xbd, 0xce, 0x4b, 0x51, 0x42, 0x63, 0x99, 0x40, 0x0b, 0xa7, 0x9e, 0x09, 0xf4, 0x15, 0x18, 0x09,
- 0xec, 0x16, 0x75, 0x3b, 0x42, 0xb2, 0xe5, 0xc2, 0x2e, 0xdb, 0x12, 0xc5, 0xa8, 0xe0, 0xa4, 0x0d,
- 0xa5, 0x6d, 0x65, 0xa8, 0x96, 0x02, 0x6a, 0x20, 0x36, 0x6f, 0x2e, 0xac, 0xf5, 0x4f, 0x0c, 0x99,
- 0x90, 0x2f, 0xc0, 0xc8, 0x2e, 0xb5, 0xea, 0xac, 0x67, 0x46, 0xd3, 0x46, 0x22, 0x19, 0x53, 0x72,
- 0xee, 0x9a, 0x20, 0x1a, 0x0b, 0xc7, 0x91, 0xa5, 0xa8, 0x78, 0x92, 0x5f, 0x80, 0x09, 0x71, 0xfa,
- 0x95, 0x10, 0xa9, 0x3e, 0xad, 0xa4, 0x89, 0xf0, 0x0f, 0xc9, 0x89, 0xe3, 0x8f, 0x59, 0xe2, 0x63,
- 0x94, 0xdf, 0xc5, 0xd7, 0x61, 0xdc, 0x6c, 0x6a, 0xbf, 0xaf, 0x62, 0x4c, 0x44, 0x9e, 0x2c, 0x24,
- 0x2f, 0x1b, 0x79, 0xe2, 0x73, 0xfa, 0xdc, 0xa6, 0x92, 0xe8, 0x9a, 0xdb, 0xb1, 0x78, 0x2a, 0xe1,
- 0xa7, 0x3e, 0x7e, 0x47, 0x3e, 0x95, 0x90, 0x8b, 0x3c, 0x95, 0xc0, 0xcb, 0x51, 0x63, 0xf0, 0x54,
- 0x2b, 0x81, 0x77, 0x47, 0xef, 0xda, 0x66, 0x48, 0x1d, 0xc3, 0x94, 0xd0, 0xf2, 0x2f, 0x4d, 0xc2,
- 0xb8, 0x99, 0x02, 0x8e, 0xcd, 0x3d, 0x95, 0xb5, 0x2b, 0x13, 0xcd, 0x8e, 0xa5, 0x32, 0x76, 0x29,
- 0x78, 0x24, 0x32, 0x2a, 0x7b, 0x68, 0x64, 0xd4, 0xb7, 0x45, 0xe2, 0xd0, 0x68, 0x1e, 0xf1, 0xf4,
- 0x49, 0x3f, 0xba, 0x52, 0x93, 0xeb, 0x14, 0xa2, 0xd1, 0x62, 0xec, 0x66, 0x4e, 0x7e, 0x27, 0x03,
- 0xcf, 0x79, 0x94, 0x89, 0x1d, 0xea, 0x75, 0x55, 0x90, 0x27, 0x99, 0x81, 0x36, 0xed, 0x85, 0x47,
- 0x0f, 0x67, 0x9f, 0xc3, 0x5e, 0x1c, 0xb1, 0x77, 0x63, 0xc8, 0xdf, 0xc9, 0xc0, 0x4c, 0x8b, 0x06,
- 0x9e, 0x5d, 0xf3, 0xbb, 0x5b, 0x5a, 0x18, 0x7c, 0x4b, 0x9f, 0x7f, 0xf4, 0x70, 0x76, 0x66, 0xbd,
- 0x07, 0x43, 0xec, 0xd9, 0x14, 0xf2, 0x5e, 0x26, 0xe9, 0xa5, 0x8a, 0x14, 0x61, 0x14, 0x46, 0x92,
- 0x9c, 0x6a, 0xe0, 0x59, 0x01, 0x6d, 0x1c, 0x1c, 0xf1, 0x58, 0x45, 0x33, 0x72, 0x21, 0x96, 0xf2,
- 0x4a, 0x44, 0x6d, 0xb7, 0x62, 0x5a, 0x27, 0xe8, 0x00, 0xdf, 0xc9, 0xc0, 0xb8, 0xe3, 0xd6, 0xa9,
- 0xd2, 0x91, 0xa4, 0x40, 0xfc, 0xf4, 0x60, 0xb2, 0x31, 0xce, 0x6d, 0x18, 0xa4, 0x85, 0x58, 0xd4,
- 0x76, 0x1d, 0x13, 0x84, 0x91, 0x36, 0x90, 0xdb, 0x30, 0x16, 0xb8, 0x4d, 0xea, 0x49, 0xab, 0x8e,
- 0x10, 0x8f, 0x97, 0x92, 0xd4, 0xbc, 0x2d, 0x8d, 0x16, 0xaa, 0x9c, 0x61, 0x99, 0x8f, 0x26, 0x1d,
- 0x42, 0xbb, 0xb3, 0xe6, 0x0b, 0x0d, 0xf2, 0xa5, 0x24, 0xd2, 0x9b, 0x6e, 0xfd, 0x44, 0x89, 0xf3,
- 0x89, 0x03, 0xd3, 0x3a, 0x5f, 0xbf, 0xd0, 0x91, 0x7d, 0x99, 0xe4, 0x21, 0x51, 0x53, 0x5d, 0x73,
- 0x6b, 0x56, 0x53, 0x24, 0x32, 0x42, 0xba, 0x43, 0x3d, 0x9e, 0x4f, 0x49, 0xbf, 0x70, 0xb0, 0x1a,
- 0xa3, 0x84, 0x5d, 0xb4, 0xc9, 0x55, 0x38, 0xd3, 0xf6, 0x6c, 0x97, 0x37, 0xa1, 0x69, 0xf9, 0x22,
- 0xaf, 0x8d, 0x30, 0x54, 0xea, 0x40, 0xb7, 0xcd, 0x38, 0x02, 0x76, 0xd7, 0x11, 0x07, 0x69, 0x51,
- 0xc8, 0x35, 0xc2, 0x82, 0x3a, 0x48, 0x8b, 0x32, 0xd4, 0x50, 0xb2, 0x02, 0xa3, 0xd6, 0xce, 0x8e,
- 0xed, 0x30, 0x4c, 0xf1, 0xce, 0xd4, 0xf3, 0x49, 0x9f, 0x56, 0x91, 0x38, 0xd2, 0x16, 0x2d, 0x7f,
- 0xa1, 0xae, 0xab, 0x32, 0xf4, 0xdb, 0x35, 0xf3, 0xcd, 0x7f, 0xfe, 0x96, 0x54, 0x2c, 0x43, 0x7f,
- 0x14, 0x03, 0x13, 0x6a, 0xb1, 0xd6, 0xfb, 0x34, 0x08, 0x6c, 0xa7, 0xe1, 0xcb, 0x37, 0xa2, 0x38,
- 0xd7, 0xaa, 0x2c, 0x43, 0x0d, 0x65, 0x07, 0x3b, 0x3f, 0xb0, 0xbc, 0xa0, 0xe2, 0x35, 0x7c, 0x9e,
- 0xaa, 0x40, 0x1e, 0xec, 0xaa, 0xaa, 0x10, 0x43, 0x38, 0xf9, 0x38, 0x8c, 0xfb, 0x46, 0xee, 0x4d,
- 0x6e, 0xb9, 0x2b, 0xc9, 0x2b, 0x41, 0xa3, 0x1c, 0x23, 0x58, 0x64, 0x0e, 0xa0, 0x65, 0x3d, 0x90,
- 0xda, 0xe1, 0xcc, 0x59, 0xb1, 0x7f, 0x31, 0x75, 0x69, 0x5d, 0x97, 0xa2, 0x81, 0x71, 0xf1, 0xe7,
- 0xe0, 0x4c, 0xd7, 0x52, 0xe9, 0x6b, 0x5b, 0xfe, 0xed, 0x2c, 0x4c, 0xc5, 0xd2, 0x84, 0x1e, 0xa5,
- 0x21, 0x7f, 0x0e, 0xc6, 0x85, 0xb9, 0x4a, 0x9e, 0x0d, 0xb3, 0x7d, 0xdf, 0x89, 0x56, 0x8c, 0xea,
- 0x18, 0x21, 0x46, 0xae, 0xc4, 0xba, 0x2d, 0x17, 0xcd, 0xb3, 0x74, 0x48, 0xd7, 0x49, 0x0d, 0x3a,
- 0x3f, 0x24, 0x0d, 0xba, 0x3c, 0x07, 0x63, 0x37, 0xae, 0x54, 0x55, 0x78, 0x5b, 0x98, 0xd4, 0x3f,
- 0xc3, 0x13, 0x29, 0x77, 0x25, 0xf5, 0x2f, 0x7f, 0x33, 0x07, 0x67, 0x8c, 0x0a, 0xf2, 0x05, 0x8e,
- 0x5f, 0x80, 0x62, 0xd3, 0xda, 0xa6, 0x4d, 0x95, 0x65, 0x3f, 0xc5, 0x01, 0xae, 0x8b, 0xf8, 0xdc,
- 0x1a, 0xa7, 0x1c, 0x8b, 0xcf, 0x14, 0x85, 0x28, 0xd9, 0x92, 0x5d, 0x18, 0xd9, 0x96, 0xd9, 0xcb,
- 0xb3, 0x83, 0xca, 0x5e, 0xce, 0x0d, 0xb0, 0x2a, 0x67, 0xb9, 0x22, 0xcf, 0xed, 0x98, 0x9e, 0xe7,
- 0x7a, 0x37, 0x55, 0xee, 0x72, 0xa9, 0xc1, 0x4b, 0x07, 0xab, 0xd0, 0x8e, 0x99, 0x84, 0x84, 0xc9,
- 0x75, 0x2f, 0xfe, 0x0c, 0x8c, 0x19, 0x5f, 0xd9, 0xd7, 0x54, 0xff, 0x17, 0x39, 0x18, 0x55, 0x19,
- 0x78, 0x8f, 0x9a, 0xe3, 0x2f, 0x42, 0x81, 0xbf, 0xaf, 0x2e, 0x6d, 0x44, 0xfa, 0x5a, 0x93, 0xbf,
- 0xbf, 0x8e, 0x02, 0x66, 0xea, 0x8b, 0xb9, 0x23, 0xf4, 0xc5, 0x21, 0x4f, 0x4e, 0xb2, 0x0d, 0x79,
- 0xdf, 0xf2, 0x9b, 0x52, 0x25, 0x4a, 0x13, 0x54, 0x5b, 0xa9, 0xae, 0x99, 0x6f, 0xba, 0xb1, 0xdf,
- 0xc8, 0x69, 0x93, 0xaf, 0x64, 0x60, 0xa2, 0xe6, 0x3a, 0x7e, 0xa7, 0x45, 0x3d, 0x6e, 0x31, 0x94,
- 0x5a, 0xce, 0x5a, 0xca, 0x90, 0xc4, 0x45, 0x93, 0xa6, 0x38, 0x85, 0x44, 0x8a, 0x30, 0xca, 0x95,
- 0xbf, 0x2c, 0xdd, 0x5d, 0x91, 0xcc, 0x43, 0x89, 0xdb, 0x2f, 0x8d, 0xf4, 0x6c, 0xda, 0xbb, 0xe6,
- 0xaa, 0x02, 0x60, 0x88, 0xc3, 0xce, 0x09, 0x6e, 0xb3, 0x4e, 0xf5, 0xeb, 0x40, 0x7a, 0xc5, 0xdc,
- 0xe4, 0xa5, 0x28, 0xa1, 0x6c, 0x9f, 0xf4, 0xe8, 0xb6, 0xd5, 0xb4, 0x0c, 0x5d, 0x4c, 0x0e, 0xb8,
- 0xde, 0x27, 0x31, 0x8e, 0x80, 0xdd, 0x75, 0xca, 0xff, 0x79, 0x14, 0xa6, 0xe3, 0x41, 0x98, 0x47,
- 0x4d, 0xc4, 0x79, 0x28, 0xb5, 0x2d, 0x2f, 0xb0, 0x8d, 0xf7, 0xb8, 0xf4, 0x57, 0x6d, 0x2a, 0x00,
- 0x86, 0x38, 0xe1, 0xcc, 0xcd, 0x1d, 0x32, 0x73, 0x93, 0x5f, 0x33, 0xc8, 0x9f, 0xfe, 0x6b, 0x06,
- 0x72, 0x5d, 0x14, 0x86, 0xb5, 0x2e, 0x4c, 0x4f, 0xcd, 0xe2, 0x91, 0x9e, 0x9a, 0xef, 0x77, 0x3b,
- 0x95, 0x7d, 0x7a, 0x70, 0xf1, 0xb6, 0xfd, 0x5d, 0x94, 0xc6, 0x96, 0xda, 0xe8, 0x93, 0x58, 0x6a,
- 0x64, 0x13, 0xce, 0x35, 0xed, 0x96, 0xf4, 0x8c, 0xf3, 0x37, 0xa9, 0x57, 0xa5, 0x35, 0xd7, 0xa9,
- 0x73, 0xc3, 0x6b, 0x2e, 0x74, 0x58, 0x58, 0x4b, 0xc0, 0xc1, 0xc4, 0x9a, 0xa6, 0xcc, 0x84, 0x23,
- 0x64, 0xa6, 0x92, 0x69, 0x63, 0x43, 0x94, 0x69, 0xa7, 0x7e, 0xff, 0x12, 0x3a, 0x24, 0x4f, 0x1c,
- 0xe6, 0x90, 0x9c, 0xce, 0xe4, 0xf9, 0x37, 0x01, 0xc6, 0xf9, 0x78, 0x1f, 0xd3, 0xe6, 0x79, 0xac,
- 0xdd, 0x2e, 0x22, 0x89, 0x72, 0x5c, 0xcd, 0x3f, 0x5c, 0x12, 0x45, 0x4d, 0x89, 0xf9, 0x53, 0x37,
- 0x25, 0x5e, 0x81, 0x71, 0x4f, 0x3c, 0xbf, 0x56, 0xaf, 0xd4, 0xf6, 0x7c, 0xf9, 0x5e, 0x8f, 0xe1,
- 0x1f, 0x10, 0xc2, 0x30, 0x82, 0xc9, 0xa4, 0x46, 0xcd, 0x6d, 0xf1, 0x6c, 0xa7, 0x71, 0xa9, 0xb1,
- 0x28, 0xcb, 0x51, 0x63, 0x90, 0x37, 0x60, 0x72, 0xa7, 0xd9, 0xf1, 0x77, 0x57, 0x18, 0x0d, 0xea,
- 0xd4, 0xc4, 0xbb, 0x2c, 0x85, 0xd0, 0xbb, 0x69, 0x25, 0x02, 0xc5, 0x18, 0xf6, 0xd0, 0xdf, 0x68,
- 0x31, 0x2c, 0xda, 0xa5, 0x53, 0xb4, 0x68, 0xff, 0x2c, 0x4c, 0xe9, 0xb9, 0x60, 0x3b, 0x0d, 0xe5,
- 0xd4, 0x57, 0x12, 0xa7, 0xe1, 0xcd, 0x28, 0x08, 0xe3, 0xb8, 0xa6, 0xa0, 0x18, 0x3b, 0xa6, 0xa0,
- 0x18, 0x1f, 0xa2, 0xa0, 0xf8, 0x7a, 0x06, 0x26, 0xfd, 0xda, 0x2e, 0x6d, 0x59, 0x48, 0x1b, 0xb6,
- 0x1f, 0x78, 0x07, 0xf2, 0xf2, 0x23, 0x45, 0x50, 0x5d, 0x35, 0x42, 0x4f, 0x32, 0xe6, 0x0f, 0xba,
- 0x46, 0x21, 0x18, 0xe3, 0x4c, 0xbe, 0x18, 0xda, 0xa1, 0x27, 0xd3, 0x26, 0x97, 0x31, 0xe5, 0xc4,
- 0x89, 0x0d, 0xd1, 0x53, 0x4f, 0x91, 0x21, 0xfa, 0x26, 0xc0, 0x9a, 0xdb, 0x50, 0x92, 0xb1, 0x02,
- 0x53, 0xea, 0x8d, 0x5d, 0xb1, 0x43, 0x89, 0x88, 0xae, 0x7c, 0x78, 0x9d, 0xbc, 0x1a, 0x05, 0x63,
- 0x1c, 0xbf, 0xfc, 0xfb, 0x45, 0x98, 0x8a, 0x65, 0xb5, 0x18, 0x88, 0xc0, 0x65, 0x52, 0xa8, 0x69,
- 0x53, 0x27, 0x58, 0xad, 0x4b, 0x65, 0x2e, 0x94, 0x42, 0xa2, 0x7c, 0x09, 0x35, 0xc6, 0x07, 0x47,
- 0xa5, 0x33, 0x55, 0xae, 0xc2, 0x71, 0x1f, 0xa8, 0x2a, 0x0e, 0x4b, 0xf8, 0x7d, 0xa5, 0x5b, 0xa5,
- 0xbb, 0x3b, 0xb0, 0xe4, 0x25, 0x27, 0xba, 0x33, 0x3d, 0x9d, 0xa7, 0x84, 0x75, 0x30, 0x48, 0x69,
- 0x68, 0xc1, 0x20, 0xe9, 0x74, 0x94, 0xaf, 0xe7, 0x40, 0xf7, 0x13, 0x93, 0xae, 0x63, 0x96, 0xe3,
- 0xb8, 0x81, 0xb4, 0xdc, 0x66, 0xd2, 0x4a, 0x35, 0x45, 0x79, 0xae, 0x12, 0x52, 0x8d, 0xe5, 0x41,
- 0x33, 0x20, 0x68, 0x32, 0x27, 0xfb, 0xda, 0x44, 0x23, 0x2e, 0x80, 0x37, 0x06, 0xd0, 0x8c, 0x63,
- 0x58, 0x66, 0x2e, 0xbe, 0x01, 0xd3, 0xf1, 0xd6, 0xf6, 0xd3, 0xa3, 0x69, 0x4c, 0x23, 0x7f, 0x92,
- 0x85, 0xd1, 0x8d, 0xca, 0x56, 0x95, 0xdf, 0x72, 0xd6, 0xa1, 0xc0, 0xaf, 0x3c, 0xa5, 0x8b, 0xce,
- 0x40, 0xa6, 0x0e, 0x37, 0x8f, 0xf1, 0x9f, 0x28, 0x88, 0x93, 0x15, 0x26, 0x02, 0xf7, 0xa8, 0xd3,
- 0x9f, 0xf9, 0xb0, 0x24, 0xa4, 0xe4, 0x1e, 0x75, 0x50, 0x54, 0x27, 0x8b, 0x90, 0x77, 0xd8, 0x77,
- 0xf6, 0xf5, 0x08, 0xa4, 0x78, 0x57, 0x8a, 0xe9, 0x1d, 0xbc, 0x32, 0x7f, 0x48, 0xd6, 0xa3, 0x75,
- 0xea, 0x04, 0xb6, 0xd5, 0xec, 0xcf, 0x97, 0x4f, 0x3c, 0x24, 0xab, 0x2b, 0xa3, 0x41, 0xa8, 0xfc,
- 0x83, 0x0c, 0x8c, 0xc8, 0xa7, 0xac, 0x48, 0x13, 0x8a, 0x8e, 0xc5, 0x1d, 0x96, 0x53, 0xbb, 0x3f,
- 0x6e, 0x70, 0x3a, 0xfa, 0x5a, 0x88, 0xaf, 0x7e, 0x51, 0x86, 0x92, 0x07, 0xd9, 0x85, 0x22, 0x15,
- 0x8f, 0x48, 0x65, 0x07, 0xf8, 0xca, 0xbf, 0xf0, 0x83, 0x14, 0xcf, 0x46, 0x49, 0xfa, 0xe5, 0x1f,
- 0x66, 0x00, 0x42, 0x94, 0xa3, 0x36, 0xbe, 0x9f, 0x84, 0x52, 0xad, 0xd9, 0xf1, 0x03, 0xea, 0x69,
- 0xa7, 0x4c, 0xf1, 0x04, 0x84, 0x2a, 0xc4, 0x10, 0x4e, 0x5e, 0x95, 0x22, 0x4c, 0x6c, 0x7e, 0x33,
- 0x4a, 0xfa, 0x3c, 0x7e, 0x38, 0x3b, 0xce, 0x03, 0x11, 0x95, 0xa9, 0x45, 0x84, 0xa6, 0xc5, 0xcd,
- 0xd2, 0xf9, 0x01, 0x9a, 0xa5, 0xcb, 0xbf, 0x57, 0x84, 0xe9, 0x78, 0xd2, 0xa8, 0xa3, 0xbe, 0xd5,
- 0x78, 0x6c, 0x29, 0x7b, 0xc4, 0x63, 0x4b, 0xc9, 0x9b, 0x77, 0xee, 0xc9, 0x6e, 0xde, 0xf9, 0xe3,
- 0x6e, 0xde, 0x43, 0xb3, 0xde, 0x44, 0xec, 0x31, 0xc5, 0xb4, 0xf6, 0x98, 0xf8, 0xf8, 0xf5, 0xb1,
- 0x7b, 0xbf, 0x2d, 0x67, 0x62, 0xea, 0x7b, 0x55, 0x25, 0x64, 0xbb, 0x02, 0x2b, 0x4f, 0x5d, 0x3f,
- 0x98, 0x85, 0xc2, 0xbd, 0x0e, 0xed, 0x50, 0xe9, 0x44, 0xc7, 0x05, 0x2b, 0xcf, 0x0d, 0x81, 0xa2,
- 0x3c, 0xdd, 0xee, 0xfe, 0x0f, 0x73, 0x30, 0xc6, 0xbe, 0xf5, 0x98, 0x06, 0x88, 0x3e, 0x96, 0x8a,
- 0x71, 0x9a, 0xcd, 0x9d, 0xe2, 0x69, 0xf6, 0x49, 0x1b, 0x33, 0x86, 0xbc, 0xd4, 0xca, 0x3f, 0x2c,
- 0xc0, 0x64, 0x34, 0x39, 0x10, 0xf9, 0x04, 0x8c, 0xed, 0xba, 0x7e, 0x20, 0xdd, 0x56, 0xe5, 0xd8,
- 0x69, 0xf5, 0xe9, 0x5a, 0x08, 0x42, 0x13, 0xef, 0xd8, 0x57, 0x27, 0xf2, 0xfd, 0xdf, 0xf8, 0xd5,
- 0x89, 0x7c, 0x23, 0x18, 0x15, 0xfc, 0x2f, 0x0f, 0x36, 0xc9, 0xb2, 0xf1, 0xcb, 0xdd, 0x07, 0x9b,
- 0x3b, 0x83, 0xca, 0x0b, 0xf5, 0x01, 0x3e, 0xd7, 0xa4, 0x13, 0x4b, 0xbf, 0x3a, 0x05, 0x93, 0x51,
- 0xed, 0x89, 0x8d, 0xaa, 0xf6, 0xe4, 0xca, 0x70, 0xbb, 0x9d, 0xf1, 0xe4, 0x49, 0x97, 0x37, 0x97,
- 0x52, 0x49, 0xb2, 0xc7, 0x52, 0x49, 0xe2, 0x5e, 0x41, 0xb9, 0xd3, 0xf7, 0x0a, 0x4a, 0x76, 0x3f,
- 0xcb, 0x3f, 0x49, 0xf7, 0xb3, 0xa7, 0xc5, 0xa7, 0xeb, 0xbb, 0x71, 0x17, 0xa7, 0x62, 0xda, 0xdc,
- 0x1d, 0xd1, 0xa9, 0x37, 0x18, 0x27, 0xa7, 0x91, 0x01, 0x39, 0x39, 0x99, 0xee, 0x63, 0xa3, 0x43,
- 0x77, 0x1f, 0x4b, 0x70, 0xa9, 0x2a, 0x0d, 0xc1, 0xa5, 0xaa, 0x0c, 0xc5, 0x96, 0xf5, 0xa0, 0xd2,
- 0x50, 0x81, 0x9f, 0x5c, 0xa0, 0xac, 0xf3, 0x12, 0x94, 0x90, 0x53, 0x77, 0xbb, 0x4a, 0xf6, 0x5d,
- 0x1a, 0x3f, 0x91, 0xef, 0x52, 0xa2, 0x0b, 0xd7, 0x44, 0x4a, 0x17, 0xae, 0xc9, 0x63, 0xbb, 0x70,
- 0x4d, 0xa5, 0x70, 0xe1, 0xfa, 0x10, 0x8c, 0xb4, 0xac, 0x07, 0xeb, 0xbe, 0xf4, 0xba, 0xca, 0x0b,
- 0x27, 0x92, 0x75, 0x51, 0x84, 0x0a, 0xc6, 0x1a, 0xd6, 0xb2, 0x1e, 0x2c, 0x1c, 0x04, 0xd4, 0xe7,
- 0x01, 0x97, 0xd2, 0x3b, 0x6b, 0x5d, 0x96, 0xa1, 0x86, 0x4a, 0x82, 0xd5, 0xce, 0xb6, 0xcf, 0x7d,
- 0xad, 0x42, 0x82, 0xac, 0x08, 0x15, 0xac, 0x5f, 0x0f, 0x2b, 0xb2, 0x06, 0xe7, 0x3c, 0x6b, 0x27,
- 0xb8, 0x46, 0x2d, 0x2f, 0xd8, 0xa6, 0x56, 0xa0, 0x9c, 0x58, 0xce, 0xe9, 0x1d, 0xe0, 0x1c, 0x26,
- 0xc0, 0x31, 0xb1, 0x16, 0x59, 0x85, 0xb3, 0xac, 0x7c, 0xb9, 0x29, 0x54, 0x0b, 0x45, 0xec, 0xbc,
- 0x08, 0x0f, 0x7e, 0xf4, 0x70, 0xf6, 0x2c, 0x76, 0x83, 0x31, 0xa9, 0x0e, 0xf9, 0x14, 0x4c, 0xb3,
- 0xe2, 0x35, 0x6a, 0xf9, 0x54, 0xd1, 0xb9, 0x20, 0xbc, 0xa5, 0xd8, 0x4c, 0xc4, 0x18, 0x0c, 0xbb,
- 0xb0, 0xc9, 0x22, 0x9c, 0x61, 0x65, 0x8b, 0x6e, 0xab, 0x65, 0xeb, 0xef, 0x7a, 0x56, 0x44, 0x3a,
- 0x71, 0xa7, 0x86, 0x38, 0x10, 0xbb, 0xf1, 0xd3, 0x7b, 0xa0, 0x7d, 0x2b, 0x0f, 0xd3, 0x37, 0xdb,
- 0xd4, 0xb9, 0xbb, 0x6b, 0xfb, 0x7b, 0xea, 0xbc, 0x70, 0x19, 0xf2, 0x4c, 0xa7, 0x8c, 0x27, 0x40,
- 0x60, 0x4a, 0x27, 0x72, 0x88, 0x79, 0x3f, 0x94, 0x3d, 0xe2, 0x7e, 0x68, 0x1e, 0x4a, 0x8e, 0xd5,
- 0xa2, 0x7e, 0xdb, 0xaa, 0x75, 0xbd, 0xfc, 0xbb, 0xa1, 0x00, 0x18, 0xe2, 0x10, 0x84, 0x12, 0xdb,
- 0xbf, 0x4f, 0x10, 0xd9, 0x29, 0x02, 0xbd, 0x54, 0x5d, 0x0c, 0xc9, 0x90, 0xd7, 0x00, 0x2c, 0x3e,
- 0x7e, 0x7c, 0x8d, 0x16, 0xa2, 0xcf, 0x2c, 0x56, 0x34, 0x04, 0x0d, 0x2c, 0xf3, 0xac, 0x53, 0x7c,
- 0x62, 0x67, 0x9d, 0x91, 0xd3, 0x3e, 0xeb, 0x94, 0x3f, 0x03, 0x67, 0xba, 0xe2, 0xba, 0xd9, 0xb1,
- 0x42, 0x24, 0x58, 0xc8, 0x44, 0x8f, 0x15, 0x91, 0xb4, 0x0a, 0xb3, 0x50, 0xe0, 0xa3, 0x28, 0xd3,
- 0x62, 0xf0, 0x43, 0x2d, 0x1f, 0x61, 0x14, 0xe5, 0x65, 0x84, 0x71, 0x33, 0xa9, 0xdd, 0xd1, 0xc9,
- 0xea, 0x74, 0x2a, 0x8e, 0x6c, 0xaf, 0x54, 0x1c, 0xe5, 0xef, 0x65, 0xe1, 0x6c, 0x82, 0x62, 0xc6,
- 0x16, 0xa8, 0x7c, 0xe0, 0x28, 0x94, 0xcd, 0x99, 0x70, 0x81, 0x56, 0x63, 0x30, 0xec, 0xc2, 0x26,
- 0x6f, 0xb1, 0x39, 0x53, 0xa3, 0xbe, 0xbf, 0xee, 0xd6, 0x55, 0x0b, 0x7e, 0x4e, 0xcc, 0x17, 0x55,
- 0xfa, 0xf8, 0xe1, 0xec, 0x87, 0xc5, 0xcc, 0x9c, 0xb7, 0xda, 0xf6, 0x3c, 0x9b, 0x99, 0xf3, 0xfb,
- 0x86, 0xa2, 0x18, 0xdc, 0x71, 0x9b, 0x9d, 0x16, 0x0d, 0x2b, 0xa0, 0x41, 0x92, 0xbc, 0x09, 0xb0,
- 0xcf, 0xe1, 0x55, 0xfb, 0x5d, 0xa5, 0x9e, 0x1e, 0xfa, 0x6a, 0xe7, 0x9c, 0x7a, 0xfc, 0x6f, 0xee,
- 0x56, 0xc7, 0x72, 0x02, 0x26, 0xe0, 0xb9, 0xf0, 0xbc, 0xa3, 0xa9, 0xa0, 0x41, 0xb1, 0xfc, 0xeb,
- 0x45, 0x38, 0xd3, 0x95, 0xdd, 0x9b, 0x7b, 0x12, 0xe8, 0xc8, 0xec, 0x98, 0xa7, 0x56, 0x62, 0x3c,
- 0xf6, 0x1b, 0x30, 0xc9, 0x8f, 0x8d, 0x9b, 0xb1, 0x78, 0x6e, 0x7d, 0xc3, 0xbe, 0x15, 0x81, 0x62,
- 0x0c, 0xfb, 0x78, 0x3e, 0x51, 0x6f, 0xc0, 0xa4, 0xdf, 0xd9, 0x16, 0xcf, 0xf0, 0x8a, 0x24, 0x25,
- 0xf9, 0x28, 0x93, 0x6a, 0x04, 0x8a, 0x31, 0x6c, 0xd2, 0x80, 0xe9, 0xd0, 0xf4, 0x2b, 0x6d, 0x90,
- 0x85, 0x7e, 0x64, 0x07, 0x9f, 0x15, 0x8b, 0x31, 0x12, 0xd8, 0x45, 0x94, 0x6c, 0xc3, 0x45, 0x11,
- 0x57, 0x6d, 0x36, 0x28, 0x96, 0x4e, 0xab, 0x2c, 0x1b, 0x7d, 0x71, 0xa9, 0x27, 0x26, 0x1e, 0x42,
- 0x25, 0x72, 0xd6, 0x1d, 0x39, 0xf2, 0xac, 0x1b, 0x89, 0xe9, 0x1e, 0x4d, 0x1b, 0xd3, 0xdd, 0x35,
- 0x61, 0x4e, 0x74, 0x1c, 0x2d, 0x3d, 0x05, 0xc7, 0xd1, 0xbf, 0x37, 0xc6, 0x96, 0x47, 0x2c, 0x17,
- 0x32, 0x53, 0x5a, 0xf9, 0x8c, 0x14, 0xd7, 0x60, 0x52, 0x69, 0xe5, 0x53, 0xd5, 0x47, 0x09, 0x39,
- 0x46, 0x08, 0xb3, 0xb4, 0xb8, 0xe5, 0x7a, 0x58, 0xdc, 0xda, 0x70, 0x36, 0x68, 0xfa, 0x5b, 0x5e,
- 0xc7, 0x0f, 0x16, 0xa9, 0x17, 0x9c, 0xc8, 0x68, 0xce, 0xf5, 0x95, 0xad, 0xb5, 0x6a, 0x9c, 0x0a,
- 0x26, 0x91, 0x66, 0xd3, 0x36, 0x68, 0xfa, 0x95, 0x66, 0xd3, 0xbd, 0xaf, 0xf2, 0xb9, 0x84, 0x66,
- 0x17, 0x69, 0x50, 0xd1, 0xd3, 0x76, 0x6b, 0xad, 0xda, 0x03, 0x13, 0x0f, 0xa1, 0x42, 0xd6, 0xf9,
- 0x57, 0xdd, 0xb1, 0x9a, 0x76, 0xdd, 0x0a, 0x78, 0x3e, 0x28, 0x2e, 0xbb, 0xc5, 0x9a, 0xd0, 0xd9,
- 0x1f, 0xb6, 0xd6, 0xaa, 0x71, 0x14, 0x4c, 0xaa, 0xa7, 0x6c, 0x38, 0x23, 0x43, 0xb4, 0x6f, 0x27,
- 0x98, 0xb6, 0x46, 0x9f, 0xac, 0x69, 0xab, 0xd4, 0xdf, 0x72, 0x87, 0xf4, 0xcb, 0x3d, 0xb6, 0x00,
- 0xfa, 0x58, 0xee, 0x75, 0x98, 0xd2, 0x1a, 0x96, 0x9c, 0xc1, 0x63, 0x7d, 0x47, 0xaa, 0x57, 0xa2,
- 0x14, 0x30, 0x4e, 0xf2, 0xf4, 0x9d, 0x04, 0x7f, 0x3b, 0x03, 0xd3, 0xac, 0x11, 0x95, 0x60, 0x97,
- 0x3a, 0xef, 0x72, 0x2d, 0x49, 0x3d, 0x81, 0x6a, 0x0d, 0xb2, 0xa3, 0x2b, 0x31, 0x1e, 0xa2, 0xc3,
- 0xf5, 0x61, 0x36, 0x0e, 0xc6, 0xae, 0x46, 0xb1, 0x4d, 0x2f, 0x2c, 0x93, 0x23, 0x30, 0xd9, 0xf7,
- 0xa6, 0x57, 0x89, 0x91, 0xc0, 0x2e, 0xa2, 0xa9, 0xe4, 0xec, 0xc5, 0x45, 0x38, 0x9f, 0xf8, 0xa9,
- 0x7d, 0x09, 0xeb, 0xef, 0x00, 0x4c, 0x88, 0x2e, 0x1c, 0xa4, 0x57, 0x65, 0x54, 0xd7, 0xce, 0x9d,
- 0xfa, 0xbd, 0x82, 0x71, 0xc4, 0xc8, 0x9f, 0xe2, 0x11, 0xa3, 0xc7, 0xf6, 0x53, 0x78, 0x52, 0xdb,
- 0x4f, 0x71, 0x98, 0xdb, 0xcf, 0x48, 0xba, 0xed, 0x67, 0x68, 0x8e, 0xa1, 0x09, 0xd2, 0xb3, 0x34,
- 0x78, 0xe9, 0x99, 0xbc, 0xc9, 0xc1, 0xe9, 0x6f, 0x72, 0xbf, 0x95, 0x24, 0x55, 0xc7, 0xd2, 0xbe,
- 0x31, 0x1b, 0x11, 0x09, 0x43, 0x92, 0xa8, 0xe3, 0xc3, 0x90, 0xa8, 0x03, 0x11, 0x8a, 0xbf, 0x94,
- 0x81, 0x12, 0x5a, 0x01, 0xe5, 0x11, 0x00, 0xe4, 0x35, 0xc8, 0x77, 0x1c, 0x5b, 0x59, 0x6d, 0x2e,
- 0x29, 0xad, 0xf4, 0xb6, 0x63, 0x07, 0x8f, 0x1f, 0xce, 0x4e, 0x6a, 0x44, 0xca, 0x4a, 0x90, 0xe3,
- 0x92, 0x0a, 0x4c, 0x71, 0x4f, 0x68, 0x9f, 0x47, 0x09, 0x30, 0x80, 0x0c, 0xa8, 0xd7, 0x0e, 0x98,
- 0x18, 0x05, 0x63, 0x1c, 0xbf, 0xfc, 0xe5, 0xa2, 0x7c, 0x7c, 0x62, 0x00, 0xb7, 0x97, 0x83, 0xce,
- 0xee, 0xd9, 0xbf, 0xf1, 0xe9, 0x22, 0x64, 0xeb, 0xdb, 0x5c, 0x11, 0x2f, 0x84, 0x69, 0x2d, 0x97,
- 0x16, 0x30, 0x5b, 0xdf, 0x26, 0x2f, 0xc3, 0xa8, 0xbc, 0x16, 0x55, 0xa9, 0x1f, 0x39, 0x5b, 0x79,
- 0x67, 0xea, 0xa3, 0x86, 0x0e, 0xfd, 0xfa, 0x71, 0xb0, 0xa1, 0x32, 0xf1, 0xd1, 0xfb, 0x20, 0x3b,
- 0x56, 0xf6, 0xa7, 0x2b, 0xbf, 0x6a, 0xa4, 0x9f, 0x85, 0xa8, 0x13, 0x6f, 0x77, 0x6e, 0xd9, 0x74,
- 0xa7, 0xc9, 0x7f, 0x52, 0x84, 0x0b, 0xc9, 0xcf, 0xa2, 0x7c, 0x60, 0x16, 0x83, 0x98, 0xdb, 0xb9,
- 0xc4, 0xb9, 0xfd, 0x21, 0x18, 0x11, 0xf1, 0xbc, 0x2a, 0x69, 0x16, 0xb7, 0xdf, 0x8b, 0x6f, 0xf1,
- 0x51, 0xc1, 0xc8, 0x75, 0x20, 0xe2, 0x6e, 0x60, 0xd1, 0xed, 0x38, 0xc1, 0x26, 0xf5, 0x90, 0x5a,
- 0x75, 0x19, 0xdb, 0xa1, 0xaf, 0x4f, 0xd6, 0xbb, 0x30, 0x30, 0xa1, 0x16, 0x4f, 0xf3, 0xd5, 0x15,
- 0xd0, 0x68, 0xa6, 0xf9, 0x3a, 0x2c, 0x36, 0x6a, 0xd8, 0x87, 0xc3, 0x6f, 0x74, 0x1b, 0x55, 0xde,
- 0x1c, 0xf4, 0x7b, 0x39, 0x1f, 0x60, 0xcb, 0xca, 0x69, 0xae, 0x9c, 0x3f, 0xce, 0xc3, 0xd9, 0x84,
- 0x77, 0x4b, 0xa3, 0xb2, 0x3b, 0x73, 0x0c, 0xd9, 0xdd, 0xd4, 0x9d, 0x94, 0x3a, 0xeb, 0xb0, 0x6a,
- 0xcf, 0x21, 0x3d, 0xf4, 0x8d, 0x0c, 0x9c, 0xe3, 0xe1, 0xac, 0xea, 0xc6, 0x43, 0x56, 0x91, 0x86,
- 0xdc, 0xd7, 0x0f, 0x33, 0xe4, 0xfa, 0x73, 0x6c, 0x64, 0xd9, 0xea, 0xbd, 0x9a, 0x40, 0x21, 0x0c,
- 0xed, 0x4b, 0x82, 0x62, 0x22, 0x57, 0xb2, 0x08, 0xa0, 0x9f, 0x67, 0x51, 0x6b, 0xf8, 0x45, 0x76,
- 0xf4, 0xd0, 0xef, 0xb7, 0xf8, 0x8f, 0x79, 0xa8, 0xac, 0xd1, 0xd1, 0xdc, 0x60, 0x65, 0x54, 0x23,
- 0x5f, 0xeb, 0x7e, 0x2c, 0xe3, 0x73, 0x03, 0x7d, 0x8c, 0xf6, 0xf8, 0x53, 0x3e, 0xdd, 0x9c, 0xfa,
- 0xcd, 0x1c, 0x4c, 0x46, 0xc7, 0x90, 0xbc, 0x04, 0xc5, 0xb6, 0x47, 0x77, 0xec, 0x07, 0x72, 0x2e,
- 0x85, 0x4f, 0xbf, 0xf3, 0x52, 0x94, 0x50, 0xf2, 0x4e, 0xcc, 0x01, 0x7d, 0x21, 0x4d, 0x5c, 0x8d,
- 0x72, 0x53, 0xee, 0x91, 0x0e, 0xe0, 0x1d, 0xfd, 0x5a, 0x50, 0x6e, 0xf0, 0xbc, 0xa2, 0x2f, 0x05,
- 0x91, 0xcf, 0x41, 0xa9, 0xe6, 0x51, 0x2b, 0xa0, 0xf5, 0x85, 0x03, 0x69, 0x69, 0xfc, 0x89, 0xe3,
- 0xcd, 0xd1, 0x2d, 0xbb, 0x45, 0xc3, 0xa5, 0xb7, 0xa8, 0x88, 0x60, 0x48, 0x8f, 0xdf, 0xaf, 0xed,
- 0x04, 0xd4, 0xe3, 0xc9, 0x38, 0xa4, 0x39, 0x31, 0xbc, 0x5f, 0xd3, 0x10, 0x34, 0xb0, 0xca, 0x7f,
- 0x58, 0x04, 0x08, 0x5f, 0x91, 0x66, 0x12, 0x87, 0x3a, 0xf5, 0xb6, 0x6b, 0x3b, 0x4a, 0x85, 0xd5,
- 0xb3, 0x63, 0x59, 0x96, 0xa3, 0xc6, 0x20, 0x3b, 0x50, 0x94, 0x4f, 0xc9, 0x67, 0xd3, 0xba, 0x4b,
- 0x54, 0x3f, 0xb6, 0xc0, 0x29, 0x89, 0x55, 0x2e, 0xfe, 0x47, 0x49, 0x9d, 0xcd, 0x1a, 0x8f, 0x36,
- 0xc2, 0x24, 0x03, 0xba, 0x77, 0x91, 0x97, 0xa2, 0x84, 0x46, 0xf2, 0x67, 0xe7, 0x8f, 0xcc, 0x9f,
- 0x8d, 0x50, 0x12, 0xf7, 0x40, 0x37, 0xe8, 0x41, 0x7f, 0xc7, 0x6e, 0x71, 0xc5, 0xa9, 0xea, 0x62,
- 0x48, 0x86, 0xd1, 0xf4, 0x15, 0x7a, 0x7f, 0x79, 0x29, 0x45, 0x1a, 0x15, 0x55, 0x8c, 0x21, 0x19,
- 0x23, 0x15, 0xef, 0x48, 0xcf, 0x54, 0xbc, 0x3b, 0x31, 0x15, 0x30, 0xd5, 0x48, 0x1c, 0x22, 0x6f,
- 0xdf, 0xeb, 0x4e, 0x5d, 0x8b, 0x83, 0x78, 0xbe, 0xbc, 0x8f, 0x5d, 0xf8, 0x4d, 0x98, 0xa8, 0x59,
- 0x8b, 0x94, 0x55, 0xb4, 0x6b, 0x56, 0x40, 0xe5, 0x39, 0xba, 0x9f, 0x24, 0xec, 0x8b, 0x15, 0xa3,
- 0x3e, 0x46, 0xc9, 0xa5, 0x13, 0x79, 0x37, 0x60, 0x54, 0xcd, 0x64, 0xf2, 0x82, 0x51, 0x2f, 0xb4,
- 0x8d, 0xb1, 0xc1, 0xe5, 0x44, 0x8e, 0xbe, 0x55, 0xfd, 0x2c, 0x23, 0xd6, 0xa7, 0xe0, 0x7c, 0x09,
- 0x8a, 0x7e, 0x67, 0x87, 0xe1, 0xc5, 0x5e, 0x7b, 0xaa, 0xf2, 0x52, 0x94, 0xd0, 0xf2, 0xff, 0xca,
- 0x00, 0x84, 0xb1, 0x9e, 0x6c, 0x9b, 0x6f, 0x51, 0x76, 0x72, 0xb2, 0xfd, 0x56, 0x7c, 0x9b, 0x5f,
- 0x57, 0x00, 0x0c, 0x71, 0xc8, 0x6d, 0x00, 0xa6, 0x78, 0x9c, 0x24, 0xff, 0x0d, 0xbf, 0x2d, 0xbd,
- 0xad, 0x2b, 0xa3, 0x41, 0x88, 0x58, 0x30, 0xa9, 0x34, 0x65, 0x49, 0xba, 0xaf, 0xa0, 0x16, 0x1e,
- 0x39, 0xba, 0x19, 0x21, 0x80, 0x31, 0x82, 0xe5, 0xbf, 0x3b, 0x02, 0x53, 0xb1, 0x47, 0xf7, 0x9e,
- 0xfa, 0xa7, 0xd7, 0xcc, 0x17, 0x3e, 0x72, 0x83, 0x7e, 0xe1, 0x23, 0x3f, 0x88, 0x63, 0x4f, 0xfc,
- 0x15, 0x99, 0xc2, 0x20, 0x5f, 0x91, 0x59, 0x83, 0x11, 0x99, 0x4e, 0xb8, 0x3f, 0x99, 0xcb, 0x8f,
- 0x57, 0xea, 0xd8, 0xa7, 0x48, 0x0c, 0x38, 0x5e, 0x32, 0x36, 0xd5, 0x3e, 0xc8, 0xc7, 0xfa, 0x4d,
- 0x38, 0xd7, 0x76, 0x9b, 0x4d, 0x15, 0xed, 0xbb, 0xd4, 0x11, 0x8e, 0x91, 0x32, 0x3c, 0x42, 0xeb,
- 0xc3, 0x9b, 0x09, 0x38, 0x98, 0x58, 0x33, 0x9d, 0x2c, 0xfd, 0xb7, 0x45, 0x98, 0x8c, 0x3e, 0x10,
- 0xff, 0x44, 0x5e, 0x28, 0xe3, 0x97, 0x14, 0x15, 0xcf, 0x89, 0xbf, 0x50, 0xb6, 0x25, 0xcb, 0x51,
- 0x63, 0x44, 0x35, 0x8a, 0xdc, 0x10, 0x34, 0x8a, 0xfc, 0x60, 0x34, 0x8a, 0x50, 0x9f, 0x2a, 0x1c,
- 0xaa, 0x4f, 0xbd, 0x02, 0x23, 0x9e, 0xdb, 0xa4, 0x15, 0xdc, 0x90, 0x66, 0x01, 0x7d, 0x9b, 0x81,
- 0xa2, 0x18, 0x15, 0x7c, 0xc0, 0xbe, 0xf8, 0xd1, 0x61, 0xef, 0x63, 0xcd, 0x5c, 0x85, 0x33, 0xfb,
- 0xf2, 0x0e, 0xa1, 0x6a, 0x37, 0x1c, 0x2b, 0x08, 0x9f, 0x52, 0xd1, 0xde, 0xa0, 0x77, 0xe2, 0x08,
- 0xd8, 0x5d, 0xe7, 0x89, 0x9c, 0xf5, 0xb5, 0xe6, 0x0d, 0x47, 0x69, 0xde, 0xe9, 0x16, 0xd6, 0x3f,
- 0x1d, 0x81, 0xc9, 0xea, 0xad, 0xc8, 0xc2, 0x8a, 0xcc, 0xdc, 0xcc, 0x10, 0x66, 0x6e, 0x76, 0xd0,
- 0x33, 0xf7, 0xf0, 0x93, 0xc0, 0x8b, 0x2a, 0xb4, 0x2b, 0x1f, 0xbd, 0x78, 0x34, 0xc3, 0xbb, 0x48,
- 0x85, 0xed, 0xe1, 0xc2, 0x8d, 0x53, 0x25, 0x3e, 0x28, 0xf0, 0xac, 0x3e, 0xc6, 0xc6, 0x1b, 0x01,
- 0x63, 0x1c, 0xbf, 0x9f, 0x15, 0xd2, 0x9f, 0x3f, 0xd1, 0x1b, 0x30, 0xc9, 0x1b, 0x29, 0x5d, 0x9d,
- 0x57, 0xeb, 0x32, 0x3b, 0xbc, 0x76, 0xc5, 0xba, 0x65, 0x42, 0x97, 0x30, 0x86, 0x1d, 0x5d, 0x8f,
- 0xa5, 0xd4, 0xeb, 0xf1, 0xd6, 0x09, 0xd7, 0xe3, 0x0b, 0x90, 0xab, 0x37, 0xef, 0xc9, 0xa7, 0xcc,
- 0xb4, 0x0e, 0xbc, 0xb4, 0x76, 0x0b, 0x59, 0xb9, 0xb1, 0xca, 0xc6, 0x4e, 0x7f, 0x95, 0x8d, 0x1f,
- 0x79, 0xbe, 0x65, 0x4a, 0x0b, 0xf5, 0x7d, 0xdb, 0x75, 0x84, 0x1f, 0xec, 0x44, 0xff, 0x4a, 0x8b,
- 0x51, 0x1d, 0x23, 0xc4, 0xd2, 0x2d, 0xe1, 0x7f, 0x9d, 0x81, 0x73, 0x49, 0xb9, 0x53, 0x8e, 0xba,
- 0x90, 0x7f, 0x15, 0x46, 0x45, 0x22, 0x95, 0xd5, 0xba, 0xbc, 0x63, 0xd2, 0xdf, 0x2f, 0xc8, 0xad,
- 0x2e, 0xa1, 0xc6, 0x20, 0xd4, 0x88, 0x3e, 0x1e, 0x50, 0x14, 0xbc, 0x3e, 0xe7, 0x84, 0x81, 0x9f,
- 0xe5, 0xdf, 0xc9, 0xc0, 0xb8, 0x99, 0xeb, 0xe4, 0x18, 0x6f, 0xbf, 0xed, 0x43, 0x89, 0x77, 0xc6,
- 0x8a, 0xe7, 0xb6, 0xd2, 0x2b, 0xde, 0x77, 0x14, 0x29, 0x31, 0x7f, 0x84, 0xfc, 0xd1, 0x85, 0x18,
- 0xb2, 0x2a, 0xff, 0x02, 0x8c, 0xea, 0x28, 0x94, 0x23, 0xce, 0x77, 0xf3, 0x50, 0x72, 0xdb, 0x32,
- 0xb6, 0x24, 0x9e, 0xb6, 0xee, 0xa6, 0x02, 0x60, 0x88, 0xc3, 0x64, 0x96, 0x18, 0xed, 0x98, 0x8b,
- 0x66, 0x24, 0xa5, 0xe6, 0x3f, 0xcb, 0x42, 0xb1, 0x4a, 0x1d, 0xdf, 0xf5, 0xc8, 0xdb, 0xc6, 0x0a,
- 0x17, 0x22, 0xfb, 0x23, 0xc7, 0x33, 0x25, 0x89, 0xd0, 0x0d, 0x36, 0xf9, 0x42, 0xf3, 0x50, 0x58,
- 0x66, 0xac, 0xde, 0x1d, 0xc8, 0xfb, 0x6d, 0x3a, 0x80, 0x00, 0x7a, 0xd1, 0xe2, 0x6a, 0x9b, 0xd6,
- 0xc2, 0xd1, 0x64, 0xbf, 0x90, 0xd3, 0x27, 0x8e, 0x7e, 0x4a, 0x5c, 0xcc, 0xb4, 0x95, 0xd4, 0x9c,
- 0x0e, 0x7f, 0x50, 0xfc, 0x8f, 0xd9, 0xe1, 0x97, 0x23, 0xae, 0xd9, 0x7e, 0x40, 0x3e, 0xdf, 0xd5,
- 0x91, 0x73, 0xc7, 0xeb, 0x48, 0x56, 0x9b, 0x77, 0xa3, 0x5e, 0x44, 0xaa, 0x24, 0x12, 0xe7, 0x53,
- 0xb0, 0x03, 0xda, 0x52, 0x96, 0xcc, 0x4f, 0xa5, 0xfd, 0xb6, 0x70, 0x62, 0xac, 0x32, 0xb2, 0x28,
- 0xa8, 0x97, 0xbf, 0x5f, 0x54, 0xdf, 0xc4, 0x3a, 0x96, 0x7c, 0x29, 0x03, 0xe3, 0x75, 0xda, 0xa6,
- 0x4e, 0x9d, 0x3a, 0x35, 0x9b, 0xaa, 0x7c, 0x22, 0xab, 0x29, 0x05, 0xec, 0x92, 0x22, 0x69, 0x04,
- 0x6a, 0x2d, 0x19, 0x6c, 0x30, 0xc2, 0x94, 0xb8, 0x30, 0x1a, 0x08, 0xb7, 0x00, 0xf5, 0xf9, 0x95,
- 0xd4, 0xbe, 0x35, 0x86, 0x06, 0x2e, 0x49, 0xa3, 0x66, 0x42, 0x9a, 0x30, 0x1a, 0x44, 0x13, 0xcc,
- 0xa7, 0xb0, 0x84, 0xe9, 0xf0, 0x39, 0x7e, 0xa8, 0xd5, 0xe1, 0x72, 0x9a, 0x03, 0xb9, 0x0e, 0x44,
- 0xa6, 0x68, 0x5d, 0xb1, 0xec, 0x26, 0xad, 0xa3, 0xdb, 0x71, 0xea, 0xd2, 0xf2, 0xa8, 0x2f, 0xe2,
- 0x96, 0xbb, 0x30, 0x30, 0xa1, 0x16, 0xb9, 0x02, 0xe3, 0x9c, 0xff, 0x42, 0xc7, 0x37, 0xc2, 0x23,
- 0x74, 0x27, 0x2f, 0x1b, 0x30, 0x8c, 0x60, 0x46, 0x12, 0xf1, 0x17, 0x0f, 0x4d, 0xc4, 0xbf, 0x06,
- 0xe7, 0x3c, 0xba, 0x6f, 0xb3, 0x3d, 0xe8, 0x9a, 0xed, 0x07, 0xae, 0x77, 0xc0, 0x7d, 0x11, 0x64,
- 0xb2, 0x36, 0x11, 0xc8, 0x93, 0x00, 0xc7, 0xc4, 0x5a, 0xe4, 0xbb, 0x19, 0x98, 0x68, 0xba, 0x8d,
- 0x86, 0xed, 0x34, 0x84, 0x95, 0x5b, 0x5e, 0xd1, 0xdd, 0x1d, 0x84, 0x9c, 0x98, 0x5b, 0x33, 0x29,
- 0x0b, 0x45, 0x43, 0x5f, 0x4a, 0x46, 0x60, 0x18, 0x6d, 0xc4, 0xc5, 0x4f, 0x01, 0xe9, 0xae, 0xdb,
- 0xd7, 0xe6, 0xfa, 0x80, 0x6d, 0x47, 0xa1, 0x18, 0x21, 0xbb, 0x5a, 0x3c, 0x09, 0xe9, 0x90, 0x66,
- 0x09, 0x1f, 0x2e, 0x98, 0xfe, 0x5b, 0x06, 0x46, 0x64, 0xdc, 0x5b, 0x24, 0x1a, 0x31, 0x33, 0xf4,
- 0x68, 0xc4, 0x25, 0x28, 0xb4, 0x5d, 0x2f, 0x50, 0xcb, 0x74, 0x36, 0x59, 0xc7, 0x11, 0x2f, 0xf2,
- 0xb8, 0x5e, 0x10, 0x0a, 0x21, 0xf6, 0xcb, 0x47, 0x51, 0x99, 0xed, 0x79, 0x2a, 0x77, 0xc9, 0x66,
- 0xdc, 0xd3, 0x43, 0xe5, 0x37, 0xd9, 0x0c, 0xf3, 0x9b, 0x6c, 0x96, 0x1f, 0xe5, 0x61, 0xba, 0xda,
- 0xb4, 0x6a, 0x7b, 0xe6, 0x61, 0xe4, 0x4d, 0x98, 0xf0, 0xed, 0x86, 0x63, 0x3b, 0x0d, 0x69, 0x2c,
- 0xca, 0xf4, 0x6d, 0xe1, 0xad, 0x9a, 0xf5, 0x31, 0x4a, 0x6e, 0x60, 0x79, 0x77, 0x0c, 0x6b, 0x44,
- 0xee, 0x54, 0xac, 0x11, 0x11, 0x8f, 0x93, 0x7c, 0x5a, 0x8f, 0x93, 0x78, 0xbf, 0x9f, 0xc8, 0x34,
- 0x55, 0x78, 0x0a, 0x62, 0x0c, 0x7e, 0x1e, 0xc6, 0xf8, 0xb7, 0x56, 0xd9, 0xc6, 0x14, 0xbd, 0x55,
- 0xcf, 0x1c, 0x75, 0xab, 0xce, 0x74, 0x51, 0xbb, 0xa6, 0x35, 0x38, 0xad, 0xbd, 0xac, 0xd6, 0x5c,
- 0x07, 0x39, 0xa4, 0xfc, 0xcf, 0x33, 0x92, 0xfe, 0xd6, 0xae, 0x47, 0xad, 0x3a, 0xa9, 0xc2, 0xf9,
- 0x16, 0xf5, 0x7d, 0xab, 0x41, 0x2b, 0x8d, 0x86, 0x47, 0x1b, 0x5c, 0xbb, 0xbb, 0xa1, 0x35, 0x45,
- 0x9d, 0xf4, 0x7b, 0x3d, 0x09, 0x09, 0x93, 0xeb, 0x92, 0xb7, 0xe0, 0xb9, 0x6d, 0xcf, 0xb5, 0xea,
- 0x35, 0x8b, 0x29, 0x18, 0x1c, 0x63, 0xcb, 0x95, 0x4e, 0x4f, 0x32, 0x79, 0xf3, 0x8f, 0x4b, 0xc2,
- 0xcf, 0x2d, 0xf4, 0x42, 0xc4, 0xde, 0x34, 0xca, 0xff, 0x3b, 0x0f, 0xe3, 0xe2, 0x2b, 0xa4, 0x6b,
- 0x6f, 0xd4, 0x2d, 0x37, 0x73, 0xea, 0x6e, 0xb9, 0xb7, 0x01, 0x7c, 0xde, 0x9e, 0xfe, 0x97, 0x2a,
- 0xbf, 0x61, 0xa8, 0xea, 0xca, 0x68, 0x10, 0xea, 0x27, 0xed, 0xc6, 0x2b, 0x30, 0x22, 0x07, 0x43,
- 0x9a, 0x11, 0x34, 0xaa, 0xec, 0x3d, 0x54, 0x70, 0xf2, 0x09, 0x18, 0xb3, 0x82, 0xc0, 0xaa, 0xed,
- 0xb6, 0xe4, 0x9b, 0xc4, 0x11, 0xef, 0xa2, 0x4a, 0x08, 0x42, 0x13, 0x8f, 0x3f, 0x68, 0xde, 0x74,
- 0x6b, 0x7b, 0x7e, 0xd7, 0x83, 0xe6, 0xbc, 0x14, 0x25, 0x94, 0xb4, 0xa0, 0x18, 0xf0, 0xc9, 0x25,
- 0x7d, 0x6d, 0x96, 0x53, 0xae, 0x7a, 0x31, 0x53, 0x43, 0x76, 0xe2, 0x37, 0x4a, 0x26, 0x8c, 0x9d,
- 0xcf, 0xd7, 0x8a, 0xb4, 0x3c, 0xa7, 0x65, 0x27, 0x16, 0x9e, 0xb1, 0xeb, 0xf1, 0xdf, 0x28, 0x99,
- 0x94, 0xff, 0x47, 0x0e, 0x48, 0x35, 0xb0, 0x9c, 0xba, 0xe5, 0xd5, 0x6f, 0x5c, 0xd1, 0x09, 0x73,
- 0xd8, 0xa9, 0x40, 0x38, 0x73, 0x08, 0xf9, 0x9f, 0x62, 0xf2, 0xa9, 0x6b, 0xc6, 0x35, 0x57, 0xbc,
- 0x05, 0x2a, 0x64, 0x8c, 0x90, 0x3a, 0x28, 0xb9, 0x90, 0x8d, 0xee, 0x03, 0xdb, 0x47, 0xba, 0x0e,
- 0x6c, 0x8f, 0x1f, 0xce, 0xfe, 0xd8, 0x8d, 0xce, 0x36, 0xf5, 0x1c, 0x1a, 0x50, 0x5f, 0x79, 0x37,
- 0x24, 0x9e, 0xe7, 0x9e, 0xb4, 0x5f, 0xfb, 0x0e, 0x4c, 0xb4, 0xad, 0xa0, 0xa6, 0x33, 0x72, 0xc8,
- 0x49, 0xfc, 0x29, 0xa5, 0x45, 0x6d, 0x9a, 0xc0, 0xc7, 0x0f, 0x67, 0xff, 0x4a, 0x18, 0x44, 0xa9,
- 0xcf, 0x3c, 0xf3, 0xed, 0xbd, 0xc6, 0x7c, 0x70, 0xd0, 0xa6, 0xfe, 0x1c, 0x47, 0xe7, 0xf7, 0x60,
- 0x51, 0xb2, 0xe4, 0x35, 0x80, 0xa6, 0xbd, 0x4f, 0xc5, 0x09, 0x32, 0xee, 0x76, 0xb0, 0xa6, 0x21,
- 0x68, 0x60, 0x95, 0x7f, 0x31, 0x03, 0x52, 0xf7, 0x21, 0xf7, 0x01, 0x6a, 0xae, 0x53, 0xb7, 0xcd,
- 0xb4, 0x87, 0x8b, 0xa9, 0x92, 0x5f, 0x08, 0x5a, 0x61, 0x1b, 0x74, 0x91, 0x8f, 0x06, 0xab, 0xf2,
- 0x3c, 0x8c, 0x8b, 0x26, 0xc8, 0x77, 0x29, 0x66, 0xa1, 0x60, 0x35, 0x9b, 0xee, 0x7d, 0xde, 0x86,
- 0x82, 0xd8, 0xef, 0xb9, 0x9b, 0x3b, 0x8a, 0xf2, 0xf2, 0x5f, 0x14, 0xe0, 0x82, 0x0c, 0x59, 0xbd,
- 0xea, 0xd9, 0xf5, 0x27, 0x7a, 0x31, 0x11, 0x3a, 0x05, 0x64, 0x7b, 0x3a, 0x05, 0x84, 0xbb, 0x74,
- 0xea, 0xb7, 0xb6, 0x8c, 0xcf, 0x3e, 0xdc, 0xba, 0xa6, 0x6f, 0x4b, 0xf2, 0x47, 0xde, 0x96, 0xbc,
- 0xa4, 0xbd, 0x47, 0x62, 0xb7, 0x10, 0x3d, 0xbd, 0x3f, 0x8a, 0x87, 0xda, 0x7c, 0x23, 0x21, 0xeb,
- 0x23, 0x83, 0x09, 0x59, 0x7f, 0x09, 0x8a, 0x56, 0xdb, 0xbe, 0x8d, 0x6b, 0xd2, 0xfc, 0x1a, 0xbe,
- 0xb1, 0xbe, 0xb9, 0x7a, 0x1b, 0xd7, 0x50, 0x42, 0xa3, 0x9e, 0x8a, 0xa5, 0xb4, 0x9e, 0x8a, 0xc9,
- 0x93, 0xec, 0xb4, 0xdc, 0xb6, 0x6a, 0x70, 0xa6, 0x6b, 0xb8, 0x07, 0xee, 0x7f, 0xf0, 0x7e, 0x9e,
- 0x71, 0xf1, 0xec, 0x36, 0x7d, 0xa2, 0xcb, 0xe8, 0x93, 0x30, 0x21, 0xfc, 0xa7, 0x24, 0x44, 0xaa,
- 0x52, 0xa1, 0xfb, 0xab, 0x09, 0xc4, 0x28, 0x2e, 0x59, 0xe5, 0x93, 0xa3, 0xef, 0xbb, 0x3e, 0x90,
- 0xf3, 0x87, 0x69, 0x7b, 0x92, 0x00, 0xf9, 0x28, 0x8c, 0xf1, 0xf6, 0x8b, 0xde, 0x96, 0x9e, 0x83,
- 0x3c, 0xad, 0xd1, 0x72, 0x58, 0x8c, 0x26, 0x4e, 0x34, 0x04, 0xb1, 0x90, 0x36, 0x04, 0xb1, 0x6b,
- 0x2c, 0x4e, 0x6b, 0xb6, 0x7d, 0x29, 0x07, 0x25, 0xed, 0xff, 0x4b, 0x3e, 0x07, 0xe3, 0xc2, 0x1b,
- 0xe7, 0x24, 0x27, 0x3f, 0x6e, 0x71, 0x17, 0xbe, 0x3d, 0xca, 0x4d, 0xc0, 0x24, 0xc6, 0xc3, 0xd3,
- 0x79, 0xae, 0x68, 0x83, 0x41, 0xb6, 0xff, 0xf0, 0xf4, 0x18, 0x09, 0xec, 0x22, 0x4a, 0xea, 0x30,
- 0x25, 0xca, 0x42, 0x7f, 0x87, 0x5c, 0xdf, 0x51, 0x45, 0x8b, 0x51, 0x0a, 0x18, 0x27, 0x49, 0xae,
- 0x03, 0x51, 0xbe, 0x6c, 0xd5, 0x3d, 0xbb, 0xcd, 0xdf, 0x3a, 0x3f, 0x88, 0x5b, 0x9f, 0x56, 0xbb,
- 0x30, 0x30, 0xa1, 0x56, 0xf9, 0x3b, 0xa3, 0xa0, 0x0d, 0x5c, 0xa7, 0x6c, 0x79, 0x48, 0x4e, 0x06,
- 0x94, 0x3d, 0x51, 0x32, 0xa0, 0xeb, 0x50, 0xd2, 0xc9, 0xb6, 0x64, 0x97, 0xbf, 0xd0, 0xe3, 0x89,
- 0x63, 0x81, 0x24, 0x53, 0xaf, 0xaa, 0x9f, 0x18, 0x56, 0x27, 0xcb, 0x30, 0x22, 0xd2, 0x38, 0xa8,
- 0x5c, 0x87, 0x17, 0x93, 0x28, 0x89, 0xac, 0x0f, 0x46, 0xe6, 0x15, 0x51, 0x05, 0x55, 0xdd, 0xa4,
- 0x34, 0x4f, 0x85, 0x21, 0xa4, 0x79, 0xfa, 0x66, 0x72, 0xa6, 0xae, 0xad, 0xf4, 0xd6, 0xcf, 0x0f,
- 0x56, 0x8e, 0xae, 0xa4, 0x54, 0x55, 0xa3, 0xa7, 0xfd, 0x42, 0x60, 0x29, 0x65, 0x7a, 0x29, 0x38,
- 0x76, 0x7a, 0xa9, 0xb1, 0x93, 0xa7, 0x97, 0x4a, 0x9f, 0x96, 0xa8, 0x0a, 0xb0, 0x65, 0xb7, 0x94,
- 0xeb, 0xf6, 0x8b, 0x50, 0xe0, 0x4f, 0xfb, 0xc5, 0xb3, 0xcf, 0x08, 0x9f, 0x62, 0x01, 0x23, 0x97,
- 0x21, 0xef, 0x07, 0x6e, 0x3b, 0x6e, 0x2d, 0xa9, 0x06, 0x6e, 0x1b, 0x39, 0xa4, 0xfc, 0xa5, 0x22,
- 0x8c, 0xa8, 0x13, 0x9e, 0x6f, 0x58, 0xeb, 0x53, 0x3f, 0x86, 0x2f, 0x89, 0x1e, 0x69, 0xb4, 0x8f,
- 0x1e, 0xcb, 0xb2, 0xa7, 0x7e, 0x2c, 0xdb, 0x83, 0x62, 0x9b, 0x1f, 0x38, 0xa4, 0x80, 0xba, 0x9a,
- 0x9e, 0x37, 0x27, 0x27, 0xf4, 0x0a, 0xf1, 0x3f, 0x4a, 0x16, 0xe4, 0x5d, 0x98, 0xf0, 0x68, 0xe0,
- 0x1d, 0x44, 0xce, 0x80, 0x03, 0x09, 0x3a, 0xe5, 0x66, 0x56, 0x34, 0x69, 0x63, 0x94, 0x15, 0x69,
- 0x43, 0xc9, 0x53, 0xe1, 0x8e, 0xe9, 0xb3, 0xb6, 0xea, 0xc8, 0x49, 0x21, 0xb2, 0xf5, 0x4f, 0x0c,
- 0x99, 0x08, 0x2b, 0xcc, 0x1a, 0xb5, 0xfc, 0xe0, 0xa6, 0x7a, 0x81, 0x76, 0xd4, 0xb4, 0xc2, 0x68,
- 0x10, 0x9a, 0x78, 0xe4, 0x1e, 0x40, 0xbd, 0x79, 0x4f, 0x76, 0xa6, 0x3c, 0x39, 0x0c, 0xe0, 0x9e,
- 0x8a, 0x5b, 0xa1, 0x96, 0x34, 0x61, 0x34, 0x98, 0x94, 0xff, 0x7b, 0x06, 0xa6, 0xe3, 0x33, 0x87,
- 0xec, 0x41, 0xce, 0xf7, 0x54, 0xce, 0xf9, 0xcd, 0xc1, 0x4d, 0x49, 0x79, 0xab, 0xcd, 0x63, 0xab,
- 0xaa, 0x5e, 0x0d, 0x19, 0x17, 0xb6, 0x52, 0xf5, 0xc3, 0x6f, 0xc6, 0x4a, 0x5d, 0xa2, 0x7e, 0x80,
- 0x1c, 0x42, 0xd6, 0x4c, 0x7b, 0x88, 0xb0, 0x95, 0xcd, 0x25, 0xd9, 0x43, 0x9e, 0x8b, 0xf3, 0x4b,
- 0xb2, 0x86, 0x94, 0xbf, 0x96, 0x83, 0x0b, 0xc9, 0x0d, 0x23, 0x6f, 0xc0, 0xa4, 0xbe, 0x35, 0x3c,
- 0x30, 0x72, 0x44, 0x69, 0x5f, 0x97, 0xa5, 0x08, 0x14, 0x63, 0xd8, 0xe4, 0x35, 0x6e, 0x41, 0x60,
- 0xdb, 0xa0, 0xf2, 0x34, 0x2a, 0x45, 0x0e, 0xff, 0x12, 0x82, 0x06, 0x16, 0xa9, 0xc0, 0x94, 0xfc,
- 0x15, 0x79, 0x90, 0xba, 0x14, 0xfa, 0xfe, 0x2c, 0x46, 0xc1, 0x18, 0xc7, 0x27, 0xaf, 0xc0, 0x08,
- 0x53, 0x60, 0x94, 0x5f, 0x9e, 0x61, 0x1e, 0x5c, 0x12, 0xc5, 0xa8, 0xe0, 0xe4, 0x0a, 0x8c, 0xb3,
- 0x7f, 0x23, 0x29, 0x3e, 0x8d, 0xcb, 0xbd, 0x25, 0x03, 0x86, 0x11, 0xcc, 0xf0, 0x8d, 0xcd, 0x62,
- 0x98, 0xa3, 0xda, 0x74, 0x08, 0x60, 0x1f, 0xdf, 0xf1, 0x29, 0x5a, 0xf7, 0x97, 0xd4, 0xab, 0xc7,
- 0x86, 0xf5, 0xe5, 0xb6, 0x86, 0xa0, 0x81, 0x55, 0xfe, 0x61, 0x06, 0x26, 0x22, 0xb2, 0x83, 0xec,
- 0x40, 0x6e, 0xef, 0x8a, 0xba, 0xdf, 0xba, 0x31, 0xc0, 0x07, 0x39, 0xc5, 0xac, 0xbb, 0x71, 0xc5,
- 0x47, 0xc6, 0x80, 0xbc, 0xa3, 0xaf, 0xd2, 0xb2, 0xa9, 0x6f, 0xfa, 0x0d, 0xdb, 0x8d, 0xb4, 0xe7,
- 0x45, 0x2f, 0xd3, 0xfe, 0xe5, 0x24, 0x4c, 0xc5, 0x36, 0x85, 0x63, 0x78, 0x96, 0xbc, 0x16, 0x31,
- 0x47, 0x75, 0x4f, 0xa6, 0x04, 0x4b, 0x12, 0x69, 0x88, 0xde, 0xcb, 0xa5, 0x7d, 0xa0, 0xae, 0xdb,
- 0x08, 0x1a, 0xeb, 0xbe, 0x2f, 0x65, 0x60, 0x9c, 0x51, 0xba, 0xeb, 0x7a, 0x7b, 0x3b, 0x4d, 0xf7,
- 0xbe, 0x14, 0xe7, 0xeb, 0x69, 0x2c, 0xa3, 0x21, 0x35, 0x7d, 0xc1, 0xce, 0x5f, 0x02, 0x30, 0x00,
- 0x18, 0x61, 0x4a, 0x6a, 0x90, 0xdf, 0x0d, 0x82, 0xb6, 0x94, 0xe9, 0x29, 0x8c, 0xc3, 0xd7, 0xb6,
- 0xb6, 0x36, 0x15, 0x53, 0x9e, 0x0d, 0x9e, 0x15, 0x20, 0x27, 0x4e, 0xee, 0x43, 0xc9, 0xba, 0xef,
- 0xaf, 0x59, 0xad, 0xed, 0xba, 0x25, 0xbd, 0xba, 0xd3, 0x18, 0x80, 0xef, 0x56, 0x05, 0x29, 0xc5,
- 0x4e, 0x98, 0x7c, 0x54, 0x29, 0x86, 0xbc, 0x88, 0x07, 0xc5, 0x5a, 0xc7, 0x0f, 0xdc, 0x96, 0xdc,
- 0x09, 0x52, 0xec, 0xcf, 0x8b, 0x9c, 0x8e, 0x62, 0x29, 0x42, 0x4f, 0xcc, 0x22, 0x94, 0x9c, 0x48,
- 0x03, 0x0a, 0x7b, 0xd6, 0xce, 0x9e, 0x4a, 0x3b, 0xbb, 0x32, 0x98, 0xb7, 0xac, 0x84, 0xb4, 0xe0,
- 0x25, 0x28, 0xe8, 0xb3, 0xa1, 0x73, 0xac, 0xc0, 0x97, 0x4e, 0xad, 0xcb, 0xe9, 0xb2, 0xf8, 0x47,
- 0x86, 0x8e, 0x15, 0x20, 0x27, 0xce, 0xbe, 0x86, 0x5f, 0xb8, 0xc8, 0xc8, 0x9c, 0x95, 0xb4, 0x97,
- 0x15, 0xe6, 0xd7, 0xf0, 0x12, 0x14, 0xf4, 0xd9, 0x1c, 0x71, 0x55, 0xda, 0x4c, 0xa9, 0x2a, 0xa7,
- 0x98, 0x23, 0xf1, 0x0c, 0x9c, 0x62, 0x8e, 0xe8, 0x52, 0x0c, 0x79, 0x91, 0xb7, 0x20, 0xd7, 0x74,
- 0x1b, 0xe9, 0x5f, 0x5b, 0x0b, 0x5f, 0xe1, 0x12, 0x0b, 0x7d, 0xcd, 0x6d, 0x20, 0xa3, 0x4c, 0x7e,
- 0x25, 0x03, 0x93, 0xd6, 0xbb, 0x1d, 0x4f, 0x58, 0x64, 0xae, 0x75, 0xb6, 0x7d, 0xe9, 0x7c, 0x78,
- 0x33, 0xc5, 0x1a, 0x88, 0xd0, 0x53, 0x7c, 0x79, 0xc8, 0x4c, 0x14, 0x84, 0x31, 0xd6, 0x5c, 0x65,
- 0xe5, 0x39, 0x3e, 0x64, 0x62, 0xa3, 0xab, 0x03, 0xca, 0x15, 0x22, 0x55, 0x56, 0x5e, 0x84, 0x92,
- 0x05, 0xf9, 0x6e, 0x86, 0x6f, 0xcd, 0x4a, 0xce, 0x52, 0x9f, 0x06, 0xf2, 0x71, 0xb5, 0x5b, 0x03,
- 0xb8, 0x15, 0x10, 0x04, 0x17, 0x3d, 0x3b, 0xa0, 0x9e, 0x6d, 0x45, 0x76, 0x7b, 0x13, 0x01, 0xe3,
- 0x4d, 0x20, 0xdf, 0xca, 0xc0, 0x14, 0xef, 0x16, 0x69, 0x8a, 0x58, 0xe8, 0x88, 0xac, 0xbd, 0xa9,
- 0x34, 0xb5, 0x4a, 0x94, 0xa0, 0xea, 0x16, 0x91, 0x55, 0x26, 0x0a, 0xc3, 0x38, 0x77, 0xb6, 0xcc,
- 0x68, 0xcb, 0xb2, 0x9b, 0x3c, 0x29, 0x70, 0xaa, 0x65, 0xb6, 0xcc, 0xc8, 0x44, 0x96, 0x19, 0x2f,
- 0x41, 0x41, 0xbf, 0x5c, 0x83, 0xb1, 0xdb, 0xb8, 0xa6, 0x63, 0x44, 0x8f, 0x4e, 0x18, 0xfa, 0x1a,
- 0xc0, 0x3e, 0xb7, 0x2b, 0x2d, 0x52, 0x4f, 0x3d, 0x2d, 0xac, 0xf7, 0xd0, 0x3b, 0x1a, 0x82, 0x06,
- 0x56, 0xf9, 0xcf, 0x32, 0x30, 0x15, 0xf3, 0xc3, 0x14, 0xfe, 0xb7, 0xca, 0x0b, 0x9c, 0xee, 0x9c,
- 0xc0, 0x1a, 0x58, 0x35, 0xaa, 0x63, 0x84, 0x18, 0x69, 0xf0, 0x69, 0xb6, 0x63, 0x37, 0xd6, 0xad,
- 0xb6, 0xa4, 0x2f, 0x74, 0x92, 0x97, 0x7b, 0x58, 0x8c, 0x34, 0x6a, 0xcc, 0x4e, 0x17, 0x25, 0x82,
- 0x71, 0xaa, 0xe5, 0xef, 0x65, 0x20, 0x1e, 0xc1, 0x45, 0xe6, 0xa1, 0x54, 0xb7, 0x3d, 0x4e, 0xe5,
- 0x20, 0x1e, 0x70, 0xb6, 0xa4, 0x00, 0x18, 0xe2, 0xe8, 0x4e, 0xcf, 0x1e, 0xd6, 0xe9, 0xec, 0x2f,
- 0xd2, 0x06, 0x7d, 0xd0, 0x96, 0xca, 0xac, 0x71, 0x16, 0x55, 0x10, 0x34, 0xb0, 0xca, 0xff, 0xa6,
- 0x00, 0x93, 0x51, 0x3b, 0x79, 0x9f, 0x11, 0xc0, 0x2f, 0x41, 0xb1, 0x45, 0x83, 0x5d, 0xb7, 0x1e,
- 0x37, 0xf7, 0xaf, 0xf3, 0x52, 0x94, 0x50, 0xde, 0x7c, 0xd7, 0x0b, 0x64, 0xb3, 0xc2, 0xe6, 0xbb,
- 0x5e, 0x80, 0x1c, 0xa2, 0x1c, 0x97, 0xf3, 0x3d, 0x1c, 0x97, 0x1b, 0x30, 0xed, 0x53, 0x6f, 0x9f,
- 0x7a, 0x86, 0xed, 0xb6, 0xff, 0xd4, 0xa2, 0xd5, 0x18, 0x09, 0xec, 0x22, 0x4a, 0xea, 0x30, 0x25,
- 0xca, 0x42, 0xdb, 0x6d, 0xb1, 0x6f, 0xdb, 0x6d, 0x35, 0x4a, 0x01, 0xe3, 0x24, 0x07, 0x1c, 0x2e,
- 0x13, 0x1d, 0xc2, 0x3e, 0xfc, 0x78, 0x6e, 0x03, 0x58, 0x9d, 0x60, 0x57, 0x7e, 0xe7, 0x68, 0xdf,
- 0x3e, 0x16, 0x15, 0x5d, 0x19, 0x0d, 0x42, 0xe4, 0x75, 0x98, 0x0c, 0xd3, 0x87, 0xf3, 0xbc, 0xba,
- 0xe2, 0xb5, 0x64, 0xbe, 0xd7, 0xac, 0x47, 0x20, 0x18, 0xc3, 0x4c, 0x77, 0x99, 0xf0, 0xed, 0x2c,
- 0x10, 0xd9, 0x19, 0xe6, 0xb5, 0xd2, 0x57, 0x33, 0x30, 0x79, 0x3f, 0xd2, 0x47, 0x03, 0xbf, 0x5e,
- 0xd2, 0x67, 0xd5, 0x68, 0x39, 0xc6, 0xf8, 0x1a, 0x77, 0xb2, 0xd9, 0x53, 0xf1, 0x9c, 0x5a, 0x78,
- 0xf3, 0xfb, 0x3f, 0xb8, 0xf4, 0xcc, 0x1f, 0xfd, 0xe0, 0xd2, 0x33, 0x7f, 0xfe, 0x83, 0x4b, 0xcf,
- 0xbc, 0xf7, 0xe8, 0x52, 0xe6, 0xfb, 0x8f, 0x2e, 0x65, 0xfe, 0xe8, 0xd1, 0xa5, 0xcc, 0x9f, 0x3f,
- 0xba, 0x94, 0xf9, 0x8f, 0x8f, 0x2e, 0x65, 0xbe, 0xfd, 0xc3, 0x4b, 0xcf, 0x7c, 0xf6, 0x4a, 0xd8,
- 0x8a, 0x79, 0xd5, 0x0a, 0xfe, 0xcf, 0x87, 0x05, 0x57, 0xee, 0x07, 0xc0, 0x5a, 0x31, 0x2f, 0x7f,
- 0xab, 0x56, 0xfc, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x2c, 0xff, 0x37, 0xfa, 0x1a, 0x01,
- 0x00,
+ // 13052 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x6c, 0x24, 0xd9,
+ 0x75, 0x18, 0xbc, 0xfd, 0x24, 0xfb, 0xf0, 0x35, 0x73, 0x67, 0x76, 0x96, 0x3b, 0xde, 0x1d, 0x8e,
+ 0x7b, 0xa1, 0xfd, 0x76, 0xed, 0x15, 0x29, 0xad, 0x24, 0x7b, 0xbc, 0xfa, 0xbc, 0x56, 0xf3, 0x35,
+ 0xc3, 0x19, 0xbe, 0xe6, 0x34, 0x39, 0xa3, 0x97, 0x57, 0x5b, 0xec, 0xbe, 0x6c, 0xd6, 0xb2, 0xbb,
+ 0xaa, 0xa7, 0xaa, 0x9a, 0x33, 0xdc, 0xc0, 0xf2, 0xda, 0x92, 0xd6, 0x92, 0xac, 0x48, 0xb2, 0x20,
+ 0x18, 0x4a, 0xe0, 0x18, 0x31, 0x8c, 0xc4, 0x76, 0x62, 0x07, 0x41, 0x0c, 0x38, 0x7f, 0x83, 0x04,
+ 0x49, 0x84, 0xc0, 0x01, 0x6c, 0xc0, 0x8e, 0x8d, 0x24, 0x18, 0x44, 0x23, 0x27, 0x01, 0x02, 0x38,
+ 0x8f, 0x5f, 0x49, 0x26, 0x7f, 0x82, 0xfb, 0xac, 0x5b, 0xd5, 0xd5, 0x24, 0x9b, 0xd5, 0xcd, 0xd9,
+ 0x41, 0xfc, 0x8b, 0xec, 0x7b, 0xce, 0x3d, 0xe7, 0xd6, 0x7d, 0x9c, 0x7b, 0xee, 0xb9, 0xe7, 0x9c,
+ 0x0b, 0x37, 0x1a, 0x76, 0xb0, 0xd7, 0xd9, 0x99, 0xad, 0xb9, 0xad, 0x39, 0xcb, 0x6b, 0xb8, 0x6d,
+ 0xcf, 0x7d, 0x87, 0xff, 0xf3, 0x61, 0x7a, 0x40, 0x9d, 0xc0, 0x9f, 0x6b, 0xef, 0x37, 0xe6, 0xac,
+ 0xb6, 0xed, 0xcf, 0xc9, 0xdf, 0x07, 0x1f, 0xb5, 0x9a, 0xed, 0x3d, 0xeb, 0xa3, 0x73, 0x0d, 0xea,
+ 0x50, 0xcf, 0x0a, 0x68, 0x7d, 0xb6, 0xed, 0xb9, 0x81, 0x4b, 0xae, 0x85, 0x94, 0x66, 0x15, 0x25,
+ 0xfe, 0xcf, 0x17, 0x44, 0xcd, 0xd9, 0xf6, 0x7e, 0x63, 0x96, 0x51, 0x9a, 0x95, 0xbf, 0x15, 0xa5,
+ 0xcb, 0x1f, 0x36, 0xda, 0xd0, 0x70, 0x1b, 0xee, 0x1c, 0x27, 0xb8, 0xd3, 0xd9, 0xe5, 0xbf, 0xf8,
+ 0x0f, 0xfe, 0x9f, 0x60, 0x74, 0xb9, 0xbc, 0x7f, 0xcd, 0x9f, 0xb5, 0x5d, 0xd6, 0xaa, 0xb9, 0x9a,
+ 0xeb, 0xd1, 0xb9, 0x83, 0xae, 0xc6, 0x5c, 0xfe, 0x78, 0x88, 0xd3, 0xb2, 0x6a, 0x7b, 0xb6, 0x43,
+ 0xbd, 0x43, 0xf5, 0x29, 0x73, 0x1e, 0xf5, 0xdd, 0x8e, 0x57, 0xa3, 0x7d, 0xd5, 0xf2, 0xe7, 0x5a,
+ 0x34, 0xb0, 0x92, 0x78, 0xcd, 0xf5, 0xaa, 0xe5, 0x75, 0x9c, 0xc0, 0x6e, 0x75, 0xb3, 0xf9, 0x89,
+ 0xe3, 0x2a, 0xf8, 0xb5, 0x3d, 0xda, 0xb2, 0xe2, 0xf5, 0xca, 0xff, 0x3b, 0x03, 0xe7, 0x2b, 0x6b,
+ 0xb7, 0x37, 0x17, 0x5c, 0xc7, 0xef, 0xb4, 0xe8, 0x82, 0xeb, 0xec, 0xda, 0x0d, 0xf2, 0x09, 0x18,
+ 0xab, 0x89, 0x02, 0x6f, 0xcb, 0x6a, 0x4c, 0x67, 0xae, 0x66, 0x5e, 0x29, 0xcd, 0x5f, 0xf8, 0xfe,
+ 0xc3, 0x99, 0x67, 0x1e, 0x3d, 0x9c, 0x19, 0x5b, 0x08, 0x41, 0x68, 0xe2, 0x91, 0x57, 0x61, 0xc4,
+ 0xea, 0x04, 0x6e, 0xa5, 0xb6, 0x3f, 0x9d, 0xbd, 0x9a, 0x79, 0x65, 0x74, 0x7e, 0x4a, 0x56, 0x19,
+ 0xa9, 0x88, 0x62, 0x54, 0x70, 0x32, 0x07, 0x25, 0xfa, 0xa0, 0xd6, 0xec, 0xf8, 0xf6, 0x01, 0x9d,
+ 0xce, 0x71, 0xe4, 0xf3, 0x12, 0xb9, 0xb4, 0xa4, 0x00, 0x18, 0xe2, 0x30, 0xda, 0x8e, 0xbb, 0xea,
+ 0xd6, 0xac, 0xe6, 0x74, 0x3e, 0x4a, 0x7b, 0x5d, 0x14, 0xa3, 0x82, 0x93, 0x97, 0xa1, 0xe8, 0xb8,
+ 0x77, 0x2d, 0x3b, 0x98, 0x2e, 0x70, 0xcc, 0x49, 0x89, 0x59, 0x5c, 0xe7, 0xa5, 0x28, 0xa1, 0xe5,
+ 0xff, 0x32, 0x06, 0x53, 0xec, 0xdb, 0x97, 0xd8, 0xdc, 0xa9, 0xf2, 0xe1, 0x23, 0x2f, 0x42, 0xae,
+ 0xe3, 0x35, 0xe5, 0x17, 0x8f, 0xc9, 0x8a, 0xb9, 0x6d, 0x5c, 0x45, 0x56, 0x4e, 0xae, 0xc1, 0x38,
+ 0x7d, 0x50, 0xdb, 0xb3, 0x9c, 0x06, 0x5d, 0xb7, 0x5a, 0x94, 0x7f, 0x66, 0x69, 0xfe, 0xa2, 0xc4,
+ 0x1b, 0x5f, 0x32, 0x60, 0x18, 0xc1, 0x34, 0x6b, 0x6e, 0x1d, 0xb6, 0xc5, 0x37, 0x27, 0xd4, 0x64,
+ 0x30, 0x8c, 0x60, 0x92, 0xd7, 0x01, 0x3c, 0xb7, 0x13, 0xd8, 0x4e, 0xe3, 0x16, 0x3d, 0xe4, 0x1f,
+ 0x5f, 0x9a, 0x27, 0xb2, 0x1e, 0xa0, 0x86, 0xa0, 0x81, 0x45, 0xde, 0xcf, 0xc0, 0xf9, 0x9a, 0xeb,
+ 0x38, 0xb4, 0x16, 0xd8, 0xae, 0x33, 0x6f, 0xd5, 0xf6, 0xdd, 0xdd, 0x5d, 0xde, 0x1d, 0x63, 0xaf,
+ 0x57, 0x66, 0x4f, 0xbb, 0xaa, 0x66, 0x25, 0xa1, 0xf9, 0x67, 0x1f, 0x3d, 0x9c, 0x39, 0xbf, 0x10,
+ 0xa7, 0x8f, 0xdd, 0x2c, 0xc9, 0x6b, 0x30, 0xfa, 0x8e, 0xef, 0x3a, 0xf3, 0x6e, 0xfd, 0x70, 0xba,
+ 0xc8, 0x47, 0xe3, 0x9c, 0x6c, 0xfa, 0xe8, 0xcd, 0xea, 0xc6, 0x3a, 0x2b, 0x47, 0x8d, 0x41, 0xde,
+ 0x82, 0x5c, 0xd0, 0xf4, 0xa7, 0x47, 0x78, 0x3b, 0x17, 0x4e, 0xdf, 0xce, 0xad, 0xd5, 0xaa, 0x98,
+ 0xc9, 0xf3, 0x23, 0x6c, 0xf8, 0xb6, 0x56, 0xab, 0xc8, 0x08, 0x93, 0xaf, 0x64, 0x60, 0x94, 0x2d,
+ 0xb9, 0xba, 0x15, 0x58, 0xd3, 0xa3, 0x57, 0x73, 0xaf, 0x8c, 0xbd, 0x7e, 0xf7, 0xf4, 0x5c, 0x62,
+ 0x73, 0x67, 0x76, 0x4d, 0x52, 0x5e, 0x72, 0x02, 0xef, 0x30, 0xfc, 0x4e, 0x55, 0x8c, 0x9a, 0x35,
+ 0xf9, 0x4e, 0x06, 0xa6, 0xd4, 0x18, 0x2f, 0xd2, 0x5a, 0xd3, 0xf2, 0xe8, 0x74, 0x89, 0x7f, 0x74,
+ 0x35, 0x65, 0x73, 0xa2, 0x44, 0x65, 0x27, 0x5c, 0x78, 0xf4, 0x70, 0x66, 0x2a, 0x06, 0xc2, 0x78,
+ 0x03, 0xd8, 0x9c, 0x19, 0xbf, 0xd7, 0xa1, 0x1d, 0xdd, 0x22, 0xe0, 0x2d, 0xda, 0x4c, 0xd7, 0xa2,
+ 0xdb, 0x06, 0x45, 0xd9, 0x9c, 0x73, 0x6c, 0xc2, 0x9b, 0xe5, 0x18, 0xe1, 0x4b, 0xde, 0x85, 0x12,
+ 0xff, 0x3d, 0x6f, 0x3b, 0xf5, 0xe9, 0x31, 0xde, 0x88, 0xb5, 0x01, 0x34, 0x82, 0x91, 0x93, 0x2d,
+ 0x98, 0x60, 0x62, 0x46, 0x17, 0x62, 0xc8, 0x8e, 0x78, 0x30, 0x22, 0x25, 0xda, 0xf4, 0x38, 0xe7,
+ 0x7c, 0x2b, 0x1d, 0xe7, 0x88, 0x5c, 0x9d, 0x1f, 0x63, 0xf2, 0x4a, 0x16, 0xa1, 0x62, 0x44, 0x2c,
+ 0xc8, 0x5b, 0x9d, 0x60, 0x6f, 0x7a, 0x22, 0xed, 0xb4, 0x9f, 0xb7, 0x7c, 0xbb, 0x56, 0xe9, 0x04,
+ 0x7b, 0xf3, 0xa3, 0x8f, 0x1e, 0xce, 0xe4, 0xd9, 0x7f, 0xc8, 0x49, 0x13, 0x84, 0x52, 0xc7, 0x6b,
+ 0x56, 0x69, 0xcd, 0xa3, 0xc1, 0xf4, 0x24, 0xe7, 0xf3, 0xa1, 0x59, 0xb1, 0x65, 0x30, 0x52, 0xb3,
+ 0x6c, 0xcf, 0x9b, 0x3d, 0xf8, 0xe8, 0xac, 0xc0, 0xb8, 0x45, 0x0f, 0xab, 0xb4, 0x49, 0x6b, 0x81,
+ 0xeb, 0x89, 0xae, 0xda, 0xc6, 0x55, 0x01, 0xc1, 0x90, 0x0c, 0x71, 0xa1, 0xb8, 0x6b, 0x37, 0x03,
+ 0xea, 0x4d, 0x4f, 0xa5, 0xed, 0x29, 0x63, 0x15, 0x2d, 0x73, 0x92, 0xf3, 0xc0, 0xe4, 0xb5, 0xf8,
+ 0x1f, 0x25, 0x9b, 0xcb, 0x9f, 0x84, 0x89, 0xc8, 0x12, 0x23, 0xe7, 0x20, 0xb7, 0x4f, 0x0f, 0x85,
+ 0xb0, 0x46, 0xf6, 0x2f, 0xb9, 0x08, 0x85, 0x03, 0xab, 0xd9, 0x91, 0x82, 0x19, 0xc5, 0x8f, 0x37,
+ 0xb2, 0xd7, 0x32, 0xe5, 0x3f, 0xca, 0xc0, 0xf3, 0x3d, 0x57, 0x08, 0xdb, 0x5d, 0xea, 0x1d, 0xcf,
+ 0xda, 0x69, 0x52, 0x4e, 0xcd, 0xd8, 0x5d, 0x16, 0x45, 0x31, 0x2a, 0x38, 0x13, 0xc7, 0x6c, 0x13,
+ 0x5b, 0xa4, 0x4d, 0x1a, 0x50, 0xb9, 0xcf, 0x69, 0x71, 0x5c, 0xd1, 0x10, 0x34, 0xb0, 0x98, 0x14,
+ 0xb4, 0x9d, 0x80, 0x7a, 0x8e, 0xd5, 0x94, 0x9b, 0x9d, 0x96, 0x0e, 0x2b, 0xb2, 0x1c, 0x35, 0x86,
+ 0xb1, 0x7f, 0xe5, 0x8f, 0xdc, 0xbf, 0x7e, 0x1a, 0x2e, 0x24, 0x4c, 0x6e, 0xa3, 0x7a, 0xe6, 0xc8,
+ 0xea, 0xbf, 0x99, 0x85, 0x4b, 0xc9, 0x2b, 0x94, 0x5c, 0x85, 0xbc, 0xc3, 0xb6, 0x37, 0xb1, 0x0d,
+ 0x8e, 0x4b, 0x02, 0x79, 0xbe, 0xad, 0x71, 0x88, 0xd9, 0x61, 0xd9, 0xbe, 0x3a, 0x2c, 0x77, 0xa2,
+ 0x0e, 0x8b, 0xa8, 0x07, 0xf9, 0x13, 0xa8, 0x07, 0x27, 0xdc, 0xf3, 0x19, 0x61, 0xcb, 0x6b, 0x74,
+ 0x5a, 0x6c, 0xfe, 0xf1, 0x0d, 0xa9, 0x14, 0x12, 0xae, 0x28, 0x00, 0x86, 0x38, 0xe5, 0xc7, 0x79,
+ 0x38, 0x57, 0xb9, 0x5b, 0x5d, 0xb5, 0x5a, 0x3b, 0x75, 0x6b, 0xcb, 0xb3, 0x1b, 0x0d, 0xea, 0xb1,
+ 0xcd, 0x7c, 0xb7, 0xe3, 0xf0, 0x8d, 0x6e, 0x3d, 0xec, 0x27, 0xbd, 0x99, 0x2f, 0x1b, 0x30, 0x8c,
+ 0x60, 0xb2, 0x85, 0x68, 0xd5, 0x6a, 0xd4, 0xf7, 0xd9, 0x5e, 0x9e, 0xed, 0x7b, 0x21, 0x56, 0x54,
+ 0x5d, 0x0c, 0xc9, 0x30, 0x9a, 0xbe, 0x42, 0xe7, 0xfd, 0xdb, 0x1f, 0x4d, 0x5d, 0x8c, 0x21, 0x19,
+ 0xd6, 0x9f, 0x1e, 0x6d, 0xd8, 0xae, 0x23, 0x15, 0x0e, 0xdd, 0x9f, 0xc8, 0x4b, 0x51, 0x42, 0x49,
+ 0x07, 0x46, 0xda, 0xd6, 0x61, 0xd3, 0xb5, 0xea, 0xd3, 0x05, 0xbe, 0x9f, 0xde, 0x4c, 0xb1, 0x6b,
+ 0x8b, 0xde, 0xdd, 0xb4, 0x3c, 0xab, 0x45, 0x99, 0x10, 0xd0, 0x73, 0x6a, 0x53, 0xb0, 0x40, 0xc5,
+ 0x8b, 0x7c, 0x11, 0xa0, 0xad, 0xd0, 0xd8, 0x38, 0x0e, 0x9a, 0xb3, 0x9e, 0x9f, 0xba, 0xc8, 0x47,
+ 0x83, 0x23, 0x79, 0x03, 0x26, 0x6d, 0xe7, 0xc0, 0xad, 0x59, 0x6c, 0x60, 0xb9, 0x3e, 0x37, 0x22,
+ 0xf4, 0xb2, 0x47, 0x0f, 0x67, 0x26, 0x57, 0x22, 0x10, 0x8c, 0x61, 0xb2, 0xa5, 0xe3, 0xb9, 0x4d,
+ 0x5a, 0xc1, 0xf5, 0xe9, 0x51, 0x5e, 0x49, 0x7f, 0x26, 0x8a, 0x62, 0x54, 0xf0, 0xf2, 0xab, 0x50,
+ 0xac, 0xb4, 0xdc, 0x8e, 0x13, 0x90, 0x19, 0x25, 0xd8, 0xd8, 0x54, 0x1b, 0x9f, 0x2f, 0x3d, 0x7a,
+ 0x38, 0x53, 0xb8, 0xc3, 0x0a, 0xa4, 0x8c, 0x2b, 0xff, 0x65, 0x16, 0x2e, 0x54, 0xbc, 0x86, 0x7b,
+ 0xd7, 0xf5, 0xf6, 0x77, 0x9b, 0xee, 0x7d, 0x35, 0x55, 0x1d, 0x28, 0x8a, 0x93, 0x09, 0xaf, 0x99,
+ 0xaa, 0x97, 0x2a, 0x5e, 0x60, 0xef, 0x5a, 0xb5, 0x60, 0x55, 0x7e, 0x8d, 0x10, 0xd2, 0x42, 0x6c,
+ 0xa3, 0xe4, 0x42, 0x6e, 0x40, 0xc9, 0x6d, 0xb3, 0x23, 0x06, 0x9b, 0x3b, 0x42, 0x3d, 0xfe, 0x31,
+ 0xb5, 0xc0, 0x36, 0x14, 0xe0, 0xf1, 0xc3, 0x99, 0x67, 0xcd, 0xc6, 0x6a, 0x00, 0x86, 0x95, 0x63,
+ 0x63, 0x9c, 0x3b, 0xf3, 0x31, 0x7e, 0x01, 0xf2, 0x96, 0xd7, 0xf0, 0xa7, 0xf3, 0x57, 0x73, 0xaf,
+ 0x94, 0xe4, 0x8e, 0xea, 0x35, 0x7c, 0xe4, 0xa5, 0xe5, 0xf7, 0x0b, 0x70, 0x2e, 0xde, 0x21, 0xe4,
+ 0xf3, 0x90, 0xf5, 0x3f, 0x26, 0x3b, 0x7a, 0xf1, 0xf4, 0x4d, 0xad, 0x7e, 0x4c, 0x51, 0x9e, 0x2f,
+ 0x3e, 0x7a, 0x38, 0x93, 0xad, 0x7e, 0x0c, 0xb3, 0xfe, 0xc7, 0x48, 0x19, 0x8a, 0xb6, 0xd3, 0xb4,
+ 0x1d, 0x75, 0xec, 0xe0, 0xdd, 0xbf, 0xc2, 0x4b, 0x50, 0x42, 0x48, 0x1d, 0xf2, 0xbb, 0x76, 0x93,
+ 0x4a, 0x31, 0xb0, 0x7c, 0xfa, 0x36, 0x2c, 0xdb, 0x4d, 0xaa, 0x5b, 0xc1, 0x3f, 0x9e, 0x95, 0x20,
+ 0xa7, 0x4e, 0xde, 0x16, 0xa7, 0xa4, 0x3c, 0x67, 0xb2, 0x74, 0x7a, 0x26, 0xdb, 0xb8, 0xaa, 0x79,
+ 0x8c, 0x44, 0x0e, 0x5a, 0xdb, 0x50, 0xaa, 0xf1, 0xbd, 0xa8, 0x65, 0xb5, 0xe5, 0xb9, 0xe5, 0x95,
+ 0x24, 0x99, 0x26, 0x36, 0xac, 0x35, 0xab, 0xdd, 0x25, 0xd6, 0x16, 0x54, 0x75, 0x0c, 0x29, 0xb1,
+ 0x86, 0x37, 0xec, 0x80, 0x0b, 0xfe, 0x54, 0x0d, 0xbf, 0x6e, 0x07, 0xd1, 0x86, 0x5f, 0xb7, 0x03,
+ 0x64, 0xa4, 0x89, 0x0b, 0xa3, 0xca, 0x16, 0x20, 0xcf, 0x31, 0x29, 0xd8, 0xdc, 0xba, 0x56, 0x45,
+ 0x49, 0x6c, 0x7e, 0x9c, 0x69, 0x0b, 0xea, 0x17, 0x6a, 0x26, 0xe5, 0xdf, 0xcf, 0xc3, 0xb3, 0x95,
+ 0x77, 0x3b, 0x1e, 0xe5, 0x4a, 0xd4, 0x8d, 0xce, 0x8e, 0xaf, 0x96, 0xfe, 0x55, 0xc8, 0xef, 0xde,
+ 0xab, 0x3b, 0xf1, 0x5d, 0x7c, 0xf9, 0xf6, 0xe2, 0x3a, 0x72, 0x08, 0x13, 0x45, 0x7b, 0x9d, 0x1d,
+ 0xe3, 0x24, 0xab, 0x45, 0xd1, 0x0d, 0x51, 0x8c, 0x0a, 0x4e, 0xda, 0x70, 0xc1, 0xdf, 0xb3, 0x3c,
+ 0x5a, 0xd7, 0x5b, 0x10, 0xaf, 0xd6, 0xd7, 0x76, 0xf3, 0xdc, 0xa3, 0x87, 0x33, 0x17, 0xaa, 0xdd,
+ 0x54, 0x30, 0x89, 0x34, 0xa9, 0xc3, 0x54, 0xac, 0x58, 0x4e, 0xb8, 0x13, 0x72, 0xe3, 0xa7, 0x9e,
+ 0x18, 0x37, 0x8c, 0x93, 0xfc, 0x7f, 0x74, 0x03, 0x2b, 0xbf, 0x57, 0x80, 0xe7, 0xc3, 0x59, 0xe3,
+ 0xdf, 0xe8, 0xec, 0x98, 0x56, 0x90, 0xe3, 0x67, 0x4e, 0x8f, 0xe9, 0x90, 0x3d, 0xd3, 0xe9, 0x90,
+ 0x1b, 0xfc, 0x74, 0x30, 0x56, 0x44, 0xfe, 0x98, 0x15, 0xf1, 0x2d, 0xd3, 0x98, 0x20, 0xe6, 0x8e,
+ 0x95, 0x62, 0x73, 0xed, 0x35, 0x18, 0x7d, 0x98, 0x15, 0xc2, 0x13, 0x59, 0xf1, 0x29, 0x38, 0x91,
+ 0xfd, 0x6a, 0x11, 0x5e, 0xe0, 0x5f, 0xcd, 0x0f, 0x20, 0xd5, 0xc0, 0xf5, 0xac, 0x06, 0x35, 0x67,
+ 0xe1, 0x4d, 0x20, 0xbe, 0x28, 0xad, 0xd4, 0x6a, 0x4c, 0x0b, 0x32, 0x74, 0xed, 0xcb, 0xb2, 0x1b,
+ 0x48, 0xb5, 0x0b, 0x03, 0x13, 0x6a, 0x91, 0x06, 0x9c, 0x0b, 0x8d, 0x53, 0xd5, 0xc0, 0xb3, 0x9d,
+ 0x46, 0x7f, 0x93, 0xf5, 0xe2, 0xa3, 0x87, 0x33, 0xe7, 0x16, 0x62, 0x24, 0xb0, 0x8b, 0x28, 0x3b,
+ 0x60, 0x70, 0x6b, 0x82, 0x96, 0x8e, 0xc6, 0x01, 0xe3, 0xb6, 0x02, 0x60, 0x88, 0x13, 0xb1, 0x90,
+ 0xe5, 0x8f, 0xb5, 0x90, 0xbd, 0x08, 0xb9, 0x7a, 0xf3, 0x9e, 0x3c, 0xe4, 0x68, 0xfb, 0xe4, 0xe2,
+ 0xea, 0x6d, 0x64, 0xe5, 0xe4, 0x3b, 0xe6, 0x9c, 0x14, 0x52, 0xa5, 0x9e, 0x72, 0x4e, 0xf6, 0x18,
+ 0x9d, 0x53, 0x4d, 0xcb, 0x91, 0x33, 0x99, 0x96, 0xe4, 0x93, 0x30, 0x51, 0xa7, 0x35, 0xb7, 0x4e,
+ 0xd7, 0xa8, 0xef, 0x5b, 0x0d, 0xca, 0xf5, 0xec, 0xd1, 0xf9, 0x67, 0x65, 0x1b, 0x27, 0x16, 0x4d,
+ 0x20, 0x46, 0x71, 0xc9, 0x02, 0x9c, 0xbf, 0x6f, 0xd9, 0xc1, 0x96, 0xdd, 0xa2, 0x2b, 0x4e, 0x95,
+ 0xd6, 0x5c, 0xa7, 0xee, 0x73, 0xe3, 0x5c, 0x41, 0x98, 0x3d, 0xef, 0xc6, 0x81, 0xd8, 0x8d, 0x9f,
+ 0x6e, 0x61, 0xfc, 0x59, 0x11, 0x2e, 0xf3, 0xae, 0xaf, 0x52, 0xef, 0xc0, 0xae, 0xd1, 0xf9, 0x8e,
+ 0x6f, 0x2e, 0x8b, 0xa4, 0xa9, 0x9c, 0x19, 0xfa, 0x54, 0xce, 0x9e, 0x60, 0x2a, 0xcf, 0x41, 0x29,
+ 0x70, 0xdb, 0x76, 0x2d, 0x69, 0xee, 0x6f, 0x29, 0x00, 0x86, 0x38, 0x64, 0x11, 0xce, 0xf9, 0x9d,
+ 0x1d, 0xbf, 0xe6, 0xd9, 0x6d, 0x7d, 0x96, 0x16, 0x62, 0x77, 0x5a, 0xd6, 0x3b, 0x57, 0x8d, 0xc1,
+ 0xb1, 0xab, 0x86, 0xb2, 0x1a, 0x17, 0x86, 0x65, 0x35, 0xee, 0xcf, 0x86, 0xfd, 0x6d, 0x73, 0x09,
+ 0x8e, 0xf0, 0x25, 0xb8, 0x93, 0x72, 0x09, 0x26, 0xce, 0x83, 0x53, 0x2d, 0xc0, 0xd1, 0xb3, 0x59,
+ 0x80, 0x9f, 0x81, 0xe7, 0x76, 0x3b, 0xcd, 0xe6, 0xe1, 0xed, 0x8e, 0xd5, 0xb4, 0x77, 0x6d, 0x5a,
+ 0x67, 0xe3, 0xe4, 0xb7, 0xad, 0x9a, 0x30, 0x73, 0x97, 0xe6, 0x67, 0x64, 0x6b, 0x9f, 0x5b, 0x4e,
+ 0x46, 0xc3, 0x5e, 0xf5, 0xd3, 0xad, 0xac, 0xf7, 0x0a, 0x70, 0x29, 0xd6, 0xa3, 0x4a, 0x59, 0xfe,
+ 0xab, 0x55, 0x75, 0xc6, 0xab, 0xca, 0x50, 0xbc, 0x8b, 0x4f, 0x4c, 0xf1, 0x1e, 0x39, 0x73, 0xc5,
+ 0xfb, 0x2f, 0xb3, 0x30, 0xa2, 0x2e, 0xc7, 0xee, 0xc1, 0x68, 0xbd, 0x23, 0x4d, 0x25, 0x62, 0xae,
+ 0x5d, 0x3f, 0x7d, 0x4b, 0x56, 0x9c, 0xe0, 0x27, 0x3e, 0xbe, 0xe1, 0x89, 0x59, 0x26, 0x4e, 0x8b,
+ 0x8b, 0x92, 0x38, 0x6a, 0x36, 0xa4, 0x0e, 0x45, 0x76, 0x68, 0x75, 0x3d, 0xa9, 0xfd, 0x7c, 0x2a,
+ 0x85, 0x68, 0xe2, 0x96, 0x29, 0xb9, 0xfe, 0x39, 0x4d, 0x94, 0xb4, 0x19, 0x97, 0x77, 0xec, 0x80,
+ 0x09, 0x9c, 0xdc, 0x20, 0xb9, 0xdc, 0xe4, 0x34, 0x51, 0xd2, 0x26, 0x2f, 0x41, 0xc1, 0x0f, 0x68,
+ 0xdb, 0xe7, 0x93, 0xbb, 0x30, 0x3f, 0x21, 0x7b, 0xbe, 0x50, 0x65, 0x85, 0x28, 0x60, 0xe5, 0xdf,
+ 0xcb, 0x40, 0x49, 0xdf, 0x8b, 0x90, 0x0d, 0x18, 0xed, 0xf8, 0xd4, 0xd3, 0xc6, 0xed, 0x13, 0xaf,
+ 0x6e, 0xde, 0x9f, 0xdb, 0xb2, 0x2a, 0x6a, 0x22, 0x8c, 0x60, 0xdb, 0xf2, 0xfd, 0xfb, 0xae, 0x57,
+ 0xef, 0x4f, 0x9f, 0xe4, 0x04, 0x37, 0x65, 0x55, 0xd4, 0x44, 0xca, 0x7f, 0x9a, 0x81, 0x89, 0x79,
+ 0x3b, 0xd8, 0xe9, 0xd4, 0xf6, 0x69, 0xc0, 0xdb, 0xdc, 0x82, 0xc2, 0x0e, 0xfb, 0x00, 0xd9, 0xe0,
+ 0xd5, 0x14, 0xf7, 0x43, 0x8a, 0x6e, 0x78, 0x51, 0xc4, 0x0d, 0x89, 0xfc, 0x27, 0x0a, 0x2e, 0x64,
+ 0x1b, 0xc0, 0xb5, 0x3a, 0xc1, 0xde, 0x96, 0xbb, 0x4f, 0x9d, 0xfe, 0xbe, 0x69, 0x92, 0xcd, 0xfb,
+ 0x8d, 0x8a, 0xaa, 0x8c, 0x06, 0xa1, 0xf2, 0x1f, 0x64, 0x80, 0x74, 0xf3, 0x7f, 0x0a, 0x06, 0xe4,
+ 0xdf, 0x8e, 0xc0, 0x45, 0xdd, 0xf0, 0xd8, 0xf1, 0xa4, 0xce, 0x6f, 0x2b, 0x6e, 0xb8, 0xee, 0xfe,
+ 0x86, 0xb3, 0x6c, 0x3b, 0xb6, 0xbf, 0x27, 0xef, 0x5c, 0xf4, 0xf1, 0x64, 0xb1, 0x0b, 0x03, 0x13,
+ 0x6a, 0x91, 0xaf, 0x9b, 0x4a, 0x43, 0x96, 0x0b, 0xa5, 0xcf, 0x0f, 0x60, 0x9c, 0x4f, 0xab, 0x2e,
+ 0x8c, 0xdc, 0xa7, 0x3b, 0x7b, 0xae, 0xbb, 0x2f, 0x97, 0xef, 0x8d, 0xd3, 0x37, 0xe5, 0xae, 0x20,
+ 0xb4, 0xe0, 0x3a, 0x01, 0x7d, 0x10, 0x88, 0x0b, 0x50, 0x59, 0x86, 0x8a, 0x0b, 0xa1, 0xf2, 0x02,
+ 0x34, 0x9f, 0x56, 0x06, 0x46, 0x16, 0x4e, 0xd7, 0x25, 0x68, 0x19, 0x8a, 0xa2, 0x02, 0x3f, 0xad,
+ 0x4b, 0xfb, 0xa9, 0x38, 0x72, 0xa3, 0x84, 0x90, 0x0f, 0x43, 0xc1, 0xbd, 0xef, 0xc8, 0x13, 0x74,
+ 0x69, 0xfe, 0x39, 0xd9, 0x4d, 0x53, 0x8b, 0xb4, 0xed, 0xd1, 0x9a, 0x15, 0xd0, 0xfa, 0x06, 0x03,
+ 0xa3, 0xc0, 0x22, 0xff, 0x3f, 0x00, 0x6b, 0x1d, 0xad, 0xf1, 0xbb, 0x17, 0x71, 0x07, 0xf0, 0x82,
+ 0xac, 0x73, 0x31, 0xac, 0xb3, 0xa9, 0x71, 0xd0, 0xc0, 0x27, 0x37, 0x60, 0xd2, 0xa3, 0x6d, 0xd7,
+ 0xb7, 0x03, 0xd7, 0x3b, 0xac, 0x36, 0x3b, 0x0d, 0x79, 0x21, 0x70, 0x55, 0x52, 0x98, 0x0e, 0x29,
+ 0x60, 0x04, 0x0f, 0x63, 0xf5, 0xc8, 0x2f, 0x65, 0x60, 0x5c, 0x17, 0xd9, 0x94, 0x1d, 0x58, 0x72,
+ 0xe9, 0xae, 0xcd, 0x75, 0x57, 0x86, 0x9c, 0xc3, 0x0b, 0x2e, 0x34, 0x58, 0x61, 0x84, 0xb1, 0xa1,
+ 0x6b, 0xc2, 0x53, 0x60, 0x83, 0x78, 0x17, 0x2e, 0x24, 0x7c, 0x28, 0xdb, 0x59, 0xc4, 0x2c, 0x10,
+ 0xc6, 0x06, 0xbd, 0xb3, 0x44, 0xc6, 0xfe, 0xcd, 0xae, 0xd1, 0x13, 0xda, 0xdc, 0x25, 0x89, 0x3d,
+ 0x79, 0xf4, 0x98, 0x95, 0xff, 0xe3, 0x18, 0x5c, 0xd6, 0xcc, 0x99, 0x42, 0x4a, 0x3d, 0x53, 0xbc,
+ 0x18, 0xab, 0x30, 0x73, 0x26, 0xab, 0x30, 0x3a, 0x97, 0xb3, 0xa9, 0xe7, 0x72, 0xee, 0x94, 0x73,
+ 0xf9, 0x15, 0x18, 0x95, 0x74, 0xd5, 0xdd, 0x8b, 0x10, 0xcd, 0xb2, 0x0c, 0x35, 0x94, 0xfc, 0xf5,
+ 0xf8, 0xac, 0x17, 0x56, 0xb8, 0xea, 0x00, 0x66, 0xbd, 0x18, 0x8f, 0x3e, 0xe7, 0x7e, 0x28, 0x60,
+ 0x8a, 0x3d, 0x05, 0xcc, 0x3e, 0xbc, 0xe8, 0xef, 0xdb, 0xed, 0x79, 0xcf, 0x72, 0x6a, 0x7b, 0x48,
+ 0x77, 0xfd, 0x05, 0xee, 0x8e, 0x50, 0xdf, 0x70, 0x36, 0xda, 0xd4, 0xd9, 0x44, 0x2e, 0x44, 0x46,
+ 0xe7, 0x3f, 0x24, 0xd9, 0xbd, 0x58, 0x3d, 0x0a, 0x19, 0x8f, 0xa6, 0x45, 0xae, 0xc3, 0x79, 0xd7,
+ 0x11, 0x56, 0x9b, 0x4d, 0xea, 0x09, 0xa8, 0x34, 0x86, 0x3c, 0x2f, 0x19, 0x9c, 0xdf, 0x88, 0x23,
+ 0x60, 0x77, 0x1d, 0xf2, 0x69, 0x18, 0x13, 0xf7, 0xcd, 0x42, 0x2b, 0x28, 0xf5, 0xb3, 0xb1, 0x4e,
+ 0x3d, 0x7a, 0x38, 0x33, 0x56, 0x09, 0x6b, 0xa3, 0x49, 0x8a, 0xbc, 0x05, 0x13, 0x72, 0x02, 0x4a,
+ 0xef, 0x14, 0xe8, 0x87, 0xf6, 0xf9, 0x47, 0x0f, 0x67, 0x26, 0xee, 0x9a, 0xf5, 0x31, 0x4a, 0x8e,
+ 0xdc, 0x81, 0x4b, 0x3b, 0x6a, 0x50, 0x7d, 0x3e, 0xa8, 0xf3, 0x96, 0x4f, 0xb7, 0x71, 0x95, 0x7b,
+ 0x16, 0x95, 0xe6, 0xaf, 0xc8, 0x7e, 0xb8, 0x14, 0x1b, 0x7a, 0x89, 0x85, 0x3d, 0x6a, 0xf7, 0xd8,
+ 0xfd, 0xc7, 0x4f, 0xb5, 0xfb, 0x47, 0x4c, 0x06, 0x13, 0x69, 0x4d, 0x06, 0xbd, 0x65, 0xca, 0xa9,
+ 0x4c, 0x06, 0x93, 0x67, 0x63, 0x32, 0x90, 0xc7, 0xcd, 0xa9, 0x61, 0x1d, 0x37, 0x3f, 0x09, 0x13,
+ 0xb5, 0x3d, 0x5a, 0xdb, 0xe7, 0xfe, 0x36, 0x07, 0x56, 0x73, 0xfa, 0x1c, 0x1f, 0x7e, 0x6d, 0x13,
+ 0x5c, 0x30, 0x81, 0x18, 0xc5, 0x4d, 0xb7, 0xc7, 0x7c, 0x2b, 0x03, 0xcf, 0xf7, 0x94, 0x2b, 0xe4,
+ 0xf5, 0x88, 0xd4, 0xcd, 0x44, 0xbd, 0x3b, 0x7b, 0xc8, 0xda, 0xb4, 0x3b, 0xcf, 0x1f, 0x66, 0xa1,
+ 0x34, 0xdf, 0xf1, 0xa5, 0xb3, 0xcf, 0x0e, 0xe4, 0x1d, 0x2b, 0xf0, 0xd3, 0x5f, 0x5b, 0xaf, 0x57,
+ 0xb6, 0x54, 0xdf, 0x73, 0xd5, 0x8b, 0xfd, 0x46, 0x4e, 0x9b, 0x1c, 0x40, 0xe9, 0x1d, 0x1a, 0xf8,
+ 0x81, 0x47, 0xad, 0x96, 0x54, 0xcb, 0x57, 0x4e, 0xcf, 0xe8, 0x26, 0x0d, 0xaa, 0x9c, 0x94, 0xe9,
+ 0xce, 0xa7, 0x0b, 0x31, 0x64, 0x45, 0x6a, 0x50, 0xd8, 0xb7, 0x76, 0xf7, 0x2d, 0xa9, 0xc8, 0xce,
+ 0xa7, 0xb8, 0x8a, 0x65, 0x64, 0xe6, 0x3b, 0xbe, 0x38, 0x31, 0xf1, 0x5f, 0x28, 0x68, 0x97, 0xbf,
+ 0x5b, 0x80, 0x0b, 0x0b, 0x56, 0x93, 0x3a, 0x75, 0x2b, 0xb2, 0x83, 0xbf, 0x06, 0xa3, 0x7e, 0x6d,
+ 0x8f, 0xd6, 0x3b, 0x4d, 0x75, 0x6b, 0xa1, 0x57, 0x5c, 0x55, 0x96, 0xa3, 0xc6, 0xd0, 0x3e, 0x62,
+ 0x6c, 0x6e, 0x66, 0xa3, 0xd8, 0x7a, 0x5a, 0x6a, 0x0c, 0xf2, 0x06, 0x4c, 0x4a, 0xe7, 0x27, 0xd7,
+ 0x59, 0xb4, 0x02, 0x2a, 0x1c, 0x24, 0xa4, 0x03, 0xca, 0x52, 0x04, 0x82, 0x31, 0x4c, 0xc6, 0x29,
+ 0xb0, 0x5b, 0xf4, 0x5d, 0xd7, 0x51, 0x76, 0x21, 0xcd, 0x69, 0x4b, 0x96, 0xa3, 0xc6, 0x20, 0x5f,
+ 0xeb, 0xbe, 0xe6, 0xfa, 0xdc, 0xe9, 0xbb, 0x31, 0xa1, 0x9f, 0xfa, 0x90, 0x4a, 0x3f, 0x07, 0x63,
+ 0x6d, 0xea, 0xf9, 0xb6, 0x1f, 0x50, 0xa7, 0x46, 0xe5, 0x2d, 0xd7, 0xcd, 0x94, 0xa2, 0x69, 0x33,
+ 0xa4, 0x28, 0xf6, 0x2a, 0xa3, 0x00, 0x4d, 0x7e, 0x67, 0x6e, 0x47, 0x4d, 0x27, 0x77, 0x1e, 0xc0,
+ 0xc5, 0x05, 0x2b, 0xa8, 0xed, 0x75, 0xda, 0x62, 0x99, 0x28, 0x13, 0xd0, 0xab, 0x30, 0x42, 0x1d,
+ 0x6b, 0xa7, 0x49, 0xeb, 0x71, 0x5f, 0xc7, 0x25, 0x51, 0x8c, 0x0a, 0x4e, 0x3e, 0x01, 0x63, 0x2d,
+ 0xeb, 0x81, 0x32, 0x23, 0xc9, 0x69, 0xa9, 0xe3, 0x00, 0xd6, 0x42, 0x10, 0x9a, 0x78, 0xe5, 0x3f,
+ 0xcb, 0x42, 0x69, 0xc1, 0x75, 0xea, 0x36, 0xe7, 0xf7, 0x51, 0xc8, 0x07, 0x87, 0x6d, 0xb5, 0x04,
+ 0x5e, 0x54, 0x97, 0xc9, 0x5b, 0x87, 0x6d, 0xfa, 0x98, 0x09, 0x5e, 0x85, 0xc8, 0x9d, 0xa5, 0x38,
+ 0x2a, 0x59, 0x85, 0xa2, 0x1f, 0x58, 0x41, 0xc7, 0x97, 0x2c, 0x3f, 0xae, 0xbc, 0xcf, 0xaa, 0xbc,
+ 0xf4, 0xf1, 0xc3, 0x99, 0x84, 0x80, 0x8d, 0x59, 0x4d, 0x49, 0x60, 0xa1, 0xa4, 0x41, 0x0e, 0x80,
+ 0x34, 0x2d, 0x3f, 0xd8, 0xf2, 0x2c, 0xc7, 0x17, 0x9c, 0x6c, 0xed, 0xb9, 0xf0, 0x63, 0x86, 0x9e,
+ 0xa1, 0x03, 0x27, 0xc2, 0x61, 0x63, 0x33, 0x8f, 0x69, 0x1e, 0xac, 0x46, 0xb8, 0xad, 0xaf, 0x76,
+ 0x51, 0xc3, 0x04, 0x0e, 0xc2, 0x87, 0xce, 0xf2, 0x93, 0x7c, 0xe8, 0x58, 0x29, 0x4a, 0x28, 0x1b,
+ 0x90, 0x96, 0xbc, 0xa8, 0x2a, 0x44, 0xef, 0x9c, 0xd5, 0x15, 0x95, 0x82, 0x97, 0x1b, 0xf0, 0xac,
+ 0xfe, 0x4a, 0x1f, 0xa9, 0x4f, 0x83, 0xf9, 0x43, 0xce, 0xeb, 0x2a, 0xe4, 0x6b, 0x9e, 0xdb, 0x75,
+ 0x63, 0xbf, 0xe0, 0xb9, 0x0e, 0x72, 0x48, 0x64, 0xd5, 0x67, 0x8f, 0x5b, 0xf5, 0xe5, 0x6f, 0x66,
+ 0xe0, 0xb9, 0x18, 0xa7, 0x05, 0xcf, 0x0e, 0xa8, 0x67, 0x5b, 0xc4, 0x87, 0xe2, 0x0e, 0xe7, 0x2a,
+ 0xb7, 0x8c, 0x8d, 0x14, 0xe2, 0x20, 0xe9, 0x63, 0xc4, 0x52, 0x10, 0xff, 0xa3, 0x64, 0x55, 0xfe,
+ 0x22, 0x5c, 0xd4, 0xbe, 0x3e, 0xc6, 0x02, 0x3d, 0x81, 0xab, 0xea, 0x22, 0x9c, 0xab, 0x79, 0xd4,
+ 0x0a, 0xe8, 0xca, 0xee, 0xba, 0x1b, 0x2c, 0x3d, 0xb0, 0xfd, 0x40, 0xfa, 0xac, 0x6a, 0x73, 0xf8,
+ 0x42, 0x0c, 0x8e, 0x5d, 0x35, 0xca, 0x7f, 0x90, 0x85, 0xf3, 0xec, 0xfc, 0x64, 0xb1, 0x19, 0xb2,
+ 0x45, 0x5b, 0xed, 0xa6, 0x15, 0x50, 0xf2, 0x19, 0x28, 0x29, 0x47, 0x1c, 0xb5, 0x81, 0x26, 0xba,
+ 0x29, 0x69, 0xbf, 0x1d, 0x7a, 0xaf, 0x63, 0x7b, 0x94, 0xbb, 0x96, 0x86, 0x56, 0x7c, 0x05, 0xf5,
+ 0x31, 0xa4, 0x46, 0x76, 0x60, 0xca, 0x6e, 0x59, 0x0d, 0xba, 0xd9, 0x69, 0x36, 0x37, 0xdd, 0xa6,
+ 0x5d, 0x53, 0x67, 0xb2, 0x6b, 0xca, 0x26, 0xb1, 0x12, 0x05, 0x3f, 0x7e, 0x38, 0xf3, 0x62, 0xc2,
+ 0xaa, 0x08, 0x11, 0x30, 0x4e, 0x90, 0xf1, 0xf0, 0x69, 0xad, 0xe3, 0xd9, 0xc1, 0xa1, 0x3c, 0x1b,
+ 0xca, 0x65, 0xf1, 0x52, 0x0f, 0xf5, 0xdb, 0x44, 0x95, 0x1e, 0x15, 0xd1, 0x42, 0x8c, 0x13, 0x2c,
+ 0xff, 0xc3, 0x02, 0x4c, 0x2c, 0x74, 0xfc, 0xc0, 0x6d, 0xa9, 0xab, 0x96, 0x39, 0x28, 0x09, 0x5d,
+ 0x9a, 0x69, 0xe1, 0x99, 0xe8, 0x85, 0x46, 0x55, 0x01, 0x30, 0xc4, 0x61, 0x0b, 0x89, 0x53, 0x55,
+ 0xbe, 0xc6, 0x7a, 0x21, 0x71, 0xe6, 0x14, 0x25, 0x94, 0x6c, 0x03, 0xd4, 0xa8, 0x17, 0xc8, 0x83,
+ 0x44, 0xae, 0x6f, 0xd3, 0xe5, 0x82, 0xae, 0x8c, 0x06, 0x21, 0xee, 0x87, 0xc0, 0xdb, 0xc2, 0x26,
+ 0xd5, 0xc6, 0x01, 0xf5, 0x3c, 0xbb, 0xae, 0x76, 0xce, 0xd0, 0x0f, 0xa1, 0x0b, 0x03, 0x13, 0x6a,
+ 0x11, 0x1f, 0xf2, 0x7e, 0x9b, 0xd6, 0xe4, 0x46, 0x7a, 0x3b, 0xc5, 0xca, 0x31, 0xbb, 0x74, 0xb6,
+ 0xda, 0xa6, 0x35, 0xb1, 0x7d, 0xea, 0x15, 0xc0, 0x8a, 0x90, 0x33, 0x7b, 0xe2, 0xde, 0xb2, 0xc6,
+ 0x55, 0xcf, 0xc8, 0xd9, 0x5d, 0xf5, 0x5c, 0xfe, 0x49, 0x28, 0xe9, 0x7e, 0xe9, 0x6b, 0xe7, 0xfc,
+ 0xcb, 0x0c, 0xc0, 0xa2, 0x15, 0x58, 0x62, 0x37, 0x66, 0x22, 0xa6, 0x6d, 0x05, 0x7b, 0x71, 0x11,
+ 0xb3, 0x69, 0x05, 0x7b, 0xc8, 0x21, 0xe4, 0x35, 0xb9, 0xc5, 0x65, 0x23, 0xb7, 0x6c, 0x6a, 0x8b,
+ 0xe3, 0xb7, 0xc4, 0xc6, 0xee, 0xa6, 0x7d, 0x79, 0x85, 0xca, 0xd6, 0xe5, 0xcb, 0x4b, 0x3e, 0x05,
+ 0x50, 0x73, 0x5b, 0xac, 0x03, 0x03, 0xd7, 0x93, 0x13, 0x4d, 0xd9, 0x51, 0x60, 0x41, 0x43, 0x1e,
+ 0x47, 0x7e, 0xa1, 0x51, 0x87, 0x0b, 0x7b, 0x29, 0xa3, 0xe4, 0x9e, 0x12, 0x0a, 0x7b, 0x59, 0x8e,
+ 0x1a, 0xa3, 0xfc, 0x17, 0x39, 0x18, 0x5f, 0x6a, 0x59, 0x76, 0x53, 0xad, 0xd0, 0xe8, 0x84, 0xc9,
+ 0x9c, 0xf9, 0x84, 0x79, 0xcd, 0xb8, 0x15, 0x88, 0xed, 0x55, 0x09, 0x26, 0xff, 0xcf, 0xc1, 0xb8,
+ 0xdf, 0x0a, 0xda, 0xca, 0x76, 0xdf, 0xdf, 0xc2, 0xe7, 0xc1, 0x48, 0xd5, 0xb5, 0xad, 0x4d, 0x6d,
+ 0xfa, 0x8f, 0x10, 0x63, 0x83, 0xbf, 0xe7, 0xfa, 0x81, 0x1c, 0x05, 0x3d, 0xf8, 0x37, 0x5c, 0x3f,
+ 0x40, 0x0e, 0xe1, 0xd3, 0xc3, 0xf5, 0x44, 0xe0, 0x41, 0xc1, 0x98, 0x1e, 0xae, 0x17, 0x20, 0x87,
+ 0x90, 0x4b, 0x90, 0x0d, 0x5c, 0x69, 0x13, 0xe2, 0x0e, 0xbd, 0x5b, 0x2e, 0x66, 0x03, 0x97, 0xbb,
+ 0xd9, 0x79, 0x6e, 0x4b, 0xda, 0x8d, 0x43, 0x37, 0x3b, 0xcf, 0x6d, 0x21, 0x87, 0x30, 0xd5, 0xc0,
+ 0xef, 0xec, 0xb0, 0x73, 0x5f, 0xdc, 0x57, 0xbc, 0x2a, 0x8a, 0x51, 0xc1, 0x19, 0xb1, 0x1d, 0xb7,
+ 0x7e, 0x28, 0x2f, 0xd8, 0x35, 0x31, 0xee, 0x9d, 0xc0, 0x21, 0xe5, 0xbf, 0x31, 0x02, 0x64, 0xa9,
+ 0xc5, 0xef, 0xce, 0xcc, 0x63, 0xca, 0xcb, 0x50, 0xdc, 0xf1, 0xdc, 0x7d, 0x6d, 0xed, 0xd4, 0xd2,
+ 0x75, 0x9e, 0x97, 0xa2, 0x84, 0xb2, 0x93, 0x6a, 0x6d, 0xcf, 0x72, 0x1c, 0xda, 0x0c, 0xed, 0x83,
+ 0x7a, 0x20, 0x17, 0x34, 0x04, 0x0d, 0x2c, 0x1e, 0x48, 0x2a, 0x7e, 0x19, 0xb7, 0xd7, 0x61, 0x20,
+ 0x69, 0x08, 0x42, 0x13, 0x2f, 0x72, 0x2b, 0x94, 0x1f, 0xf4, 0xad, 0x50, 0x61, 0x00, 0xb7, 0x42,
+ 0x3d, 0x02, 0x2c, 0x8b, 0x4f, 0x36, 0xc0, 0x72, 0xe4, 0xa4, 0x01, 0x96, 0xa3, 0xc3, 0xb2, 0xb2,
+ 0x7c, 0xd5, 0x3c, 0x2c, 0x8a, 0x3b, 0x88, 0xcf, 0xa6, 0x38, 0x24, 0x75, 0x4d, 0xd6, 0x53, 0x59,
+ 0xb0, 0x9e, 0x86, 0x8b, 0x88, 0x5f, 0xcf, 0x40, 0x81, 0xb3, 0x21, 0x2d, 0x1e, 0x81, 0xc8, 0x75,
+ 0xb1, 0x4c, 0x5a, 0x27, 0x7e, 0x4e, 0x31, 0x62, 0xf5, 0x57, 0x6a, 0x9a, 0xe2, 0x41, 0x5e, 0x80,
+ 0xbc, 0xbc, 0x74, 0xcc, 0xbc, 0x32, 0x2e, 0xec, 0x36, 0x6c, 0xeb, 0x43, 0x5e, 0xfa, 0xc6, 0xe8,
+ 0xf7, 0xfe, 0xf6, 0xcc, 0x33, 0xef, 0xfd, 0xfb, 0xab, 0xcf, 0x94, 0xbf, 0x9f, 0x85, 0x51, 0x4e,
+ 0x6e, 0xbe, 0xe3, 0x93, 0xb7, 0x8d, 0x51, 0x16, 0x8d, 0xfc, 0xc8, 0xc9, 0xce, 0x51, 0x1b, 0x5c,
+ 0x56, 0xb1, 0x6e, 0x0a, 0x45, 0x47, 0x58, 0x66, 0x8c, 0xde, 0x9e, 0xd4, 0x93, 0xb2, 0x03, 0xe9,
+ 0x82, 0xf9, 0x8e, 0xcf, 0x34, 0x81, 0x44, 0xe5, 0xa8, 0xad, 0xcf, 0x9a, 0xa9, 0x2f, 0x3b, 0x35,
+ 0x2f, 0x4e, 0xcf, 0x50, 0x53, 0x23, 0xe7, 0xd1, 0xf2, 0x9f, 0x66, 0x60, 0x5c, 0xa1, 0xae, 0xda,
+ 0x7e, 0x40, 0x3e, 0xdf, 0xd5, 0x9d, 0xb3, 0x27, 0xeb, 0x4e, 0x56, 0x9b, 0x77, 0xa6, 0x5e, 0x08,
+ 0xaa, 0xc4, 0xe8, 0xca, 0x06, 0x14, 0xec, 0x80, 0xb6, 0x7c, 0x79, 0xaf, 0x3c, 0x9f, 0xfe, 0xfb,
+ 0xc2, 0x0b, 0xb1, 0x15, 0x46, 0x18, 0x05, 0xfd, 0xf2, 0x9f, 0xe4, 0xc2, 0xef, 0x62, 0x1d, 0x4c,
+ 0xbe, 0x10, 0xb1, 0x2c, 0x56, 0xd2, 0x59, 0x16, 0x19, 0xdf, 0xb8, 0x59, 0xd1, 0xef, 0x36, 0x2b,
+ 0x2e, 0x0f, 0xc0, 0xac, 0xc8, 0x3f, 0xf1, 0x89, 0xda, 0x14, 0x99, 0x20, 0x9d, 0xd2, 0x2c, 0x97,
+ 0x1e, 0xb8, 0x81, 0x5d, 0x93, 0x3b, 0xe1, 0x00, 0xed, 0xa6, 0xfc, 0x00, 0xa7, 0x0b, 0x05, 0x17,
+ 0x8c, 0xb3, 0x2d, 0xff, 0xe7, 0x0c, 0x4c, 0x46, 0x67, 0x36, 0xd9, 0xd3, 0x6b, 0x26, 0x93, 0xd6,
+ 0xbf, 0xe7, 0xe8, 0xb5, 0x42, 0xf6, 0xa1, 0x28, 0xa2, 0x77, 0xe4, 0xf0, 0xa6, 0x89, 0x8e, 0x56,
+ 0x16, 0xef, 0x90, 0x99, 0xf8, 0x8d, 0x92, 0x45, 0xf9, 0x7f, 0x64, 0xe5, 0x04, 0x96, 0x52, 0x92,
+ 0x5c, 0x86, 0xac, 0x5d, 0x97, 0x6a, 0x11, 0xc8, 0x4a, 0xd9, 0x95, 0x45, 0xcc, 0xda, 0x75, 0x7e,
+ 0x28, 0x15, 0x61, 0x3e, 0xd9, 0xa8, 0xda, 0x14, 0x0b, 0x88, 0xfb, 0x04, 0x8c, 0x31, 0x39, 0x73,
+ 0x40, 0x3d, 0xdf, 0x76, 0x9d, 0xb8, 0x0a, 0xc4, 0xd6, 0xc9, 0x1d, 0x01, 0x42, 0x13, 0x8f, 0xa9,
+ 0x73, 0xfc, 0x48, 0x11, 0xd3, 0x3b, 0x8d, 0x63, 0x44, 0x05, 0xa6, 0xd8, 0xfa, 0xe6, 0x82, 0xdc,
+ 0x09, 0x38, 0x72, 0x21, 0xe6, 0xb4, 0x60, 0x05, 0xd6, 0x82, 0x00, 0xf3, 0x7a, 0x71, 0x7c, 0x53,
+ 0xbd, 0x2c, 0x1e, 0xa3, 0x5e, 0xae, 0x42, 0x3e, 0xb0, 0x5b, 0x2a, 0xa6, 0xa9, 0x1f, 0xb3, 0x59,
+ 0xd8, 0x76, 0xbb, 0xc5, 0xda, 0x6e, 0xb7, 0xa8, 0xb1, 0xaf, 0x7c, 0x33, 0x0f, 0x53, 0xbc, 0xcf,
+ 0x17, 0x69, 0x9b, 0x3a, 0x75, 0xea, 0xd4, 0x0e, 0x4f, 0x60, 0xd3, 0xa9, 0xc0, 0x14, 0x0d, 0x37,
+ 0x65, 0xc3, 0x95, 0x52, 0x7f, 0xfb, 0x52, 0x14, 0x8c, 0x71, 0x7c, 0x1e, 0x62, 0xcc, 0x8a, 0x92,
+ 0xdc, 0x2a, 0x97, 0x14, 0x00, 0x43, 0x1c, 0x72, 0x00, 0x23, 0x62, 0xa7, 0xf7, 0xe5, 0x4a, 0xdc,
+ 0x48, 0x29, 0x49, 0xc3, 0x2f, 0x96, 0x5a, 0x05, 0xdf, 0xa1, 0xc5, 0xff, 0x3e, 0x2a, 0x66, 0xe4,
+ 0x17, 0x32, 0x50, 0x0a, 0x3c, 0xcb, 0xf1, 0x77, 0x5d, 0xaf, 0x25, 0xb5, 0xd7, 0xad, 0x81, 0xb1,
+ 0xde, 0x52, 0x94, 0xa9, 0x8c, 0x9b, 0xd3, 0x05, 0x18, 0x72, 0x25, 0x36, 0x5c, 0x92, 0xcd, 0x59,
+ 0x75, 0x1b, 0x76, 0xcd, 0x6a, 0x8a, 0x88, 0x4d, 0x57, 0xf9, 0xc9, 0x7c, 0x54, 0xdd, 0xa2, 0x2e,
+ 0x27, 0x62, 0x3d, 0x7e, 0x38, 0x33, 0x15, 0x2b, 0xc2, 0x1e, 0x04, 0xcb, 0xbf, 0x53, 0x80, 0x67,
+ 0x13, 0xbb, 0x87, 0xec, 0xc8, 0x29, 0x98, 0xfa, 0xa2, 0x8a, 0x4d, 0x44, 0xd9, 0xe5, 0xa3, 0xd1,
+ 0x89, 0x69, 0x6a, 0x5f, 0xd9, 0x33, 0xd0, 0xbe, 0x76, 0xa5, 0xf6, 0x25, 0xa2, 0x5b, 0x53, 0x7c,
+ 0x52, 0x68, 0xae, 0x08, 0xd7, 0x4b, 0xa8, 0xc7, 0x11, 0x1b, 0x0a, 0xf4, 0x41, 0xdb, 0x13, 0x0e,
+ 0x15, 0xa9, 0x18, 0x2d, 0x3d, 0x68, 0x7b, 0x92, 0x91, 0xd6, 0x02, 0x58, 0x99, 0x8f, 0x82, 0x03,
+ 0x79, 0x1b, 0x2e, 0x30, 0x96, 0xf1, 0x79, 0x22, 0x44, 0xd3, 0xac, 0xac, 0x72, 0x61, 0xb1, 0x1b,
+ 0x25, 0x69, 0x92, 0x24, 0x91, 0x62, 0x1c, 0x18, 0xab, 0xe4, 0x99, 0xa8, 0x39, 0x2c, 0x75, 0xa3,
+ 0x24, 0x72, 0x48, 0x20, 0xc5, 0x65, 0x3b, 0x77, 0x86, 0x96, 0x47, 0xf3, 0x50, 0xb6, 0xf3, 0x52,
+ 0x94, 0xd0, 0xf2, 0xdb, 0x70, 0xb9, 0xf7, 0x72, 0x62, 0xbb, 0xc7, 0x3b, 0xf7, 0xe2, 0xbb, 0xc7,
+ 0xcd, 0xdb, 0x98, 0x7d, 0xe7, 0x9e, 0xc1, 0x21, 0x7b, 0x24, 0x87, 0xf7, 0xb3, 0x70, 0x2e, 0x7e,
+ 0x4b, 0x45, 0x3a, 0x30, 0x52, 0x13, 0x37, 0x3b, 0x72, 0x2d, 0xac, 0xa7, 0xb9, 0x90, 0xeb, 0xbe,
+ 0x22, 0x92, 0x93, 0x55, 0x40, 0x50, 0xf1, 0x22, 0x7f, 0x4d, 0xc5, 0xe4, 0xae, 0x59, 0x6d, 0xb9,
+ 0x3a, 0xd6, 0x53, 0x99, 0xfe, 0xbb, 0xac, 0xf9, 0x66, 0xe4, 0xee, 0x5a, 0x18, 0xb9, 0xbb, 0x66,
+ 0xb5, 0xcb, 0x7f, 0x9c, 0x85, 0x31, 0xd3, 0x6a, 0x31, 0xfc, 0x23, 0xc8, 0x7e, 0xe4, 0x08, 0xb2,
+ 0x32, 0x90, 0xe3, 0x63, 0xcf, 0x53, 0x88, 0x1f, 0x3b, 0x85, 0x0c, 0xe6, 0xb4, 0x7a, 0xcc, 0x41,
+ 0xe4, 0x3a, 0x9c, 0xef, 0x3a, 0xda, 0x92, 0xd7, 0x01, 0xd8, 0x92, 0xa0, 0xbe, 0x6f, 0xeb, 0xfb,
+ 0x24, 0xdd, 0x51, 0x4b, 0x1a, 0x82, 0x06, 0x56, 0xf9, 0xdf, 0x65, 0xc0, 0xdc, 0x70, 0xcf, 0xe0,
+ 0x50, 0xf3, 0x4e, 0xf4, 0x50, 0xb3, 0x34, 0x90, 0xee, 0xea, 0x71, 0xae, 0xf9, 0xe5, 0xc5, 0xc8,
+ 0xd7, 0xf1, 0xa3, 0xcd, 0x35, 0x18, 0xa7, 0x52, 0x27, 0x4e, 0xca, 0x00, 0xb2, 0x64, 0xc0, 0x30,
+ 0x82, 0x49, 0x9a, 0x86, 0x69, 0x36, 0x9b, 0xf6, 0x04, 0xa1, 0x8c, 0xb9, 0xc2, 0x4e, 0xd5, 0x6d,
+ 0xda, 0x25, 0x7b, 0x30, 0xe2, 0x8b, 0x58, 0x17, 0x39, 0xb1, 0x52, 0x9c, 0xc2, 0x54, 0xd0, 0x0c,
+ 0x97, 0x0e, 0xf2, 0x07, 0x2a, 0xf2, 0xe4, 0x10, 0x0a, 0x2d, 0xdb, 0xb1, 0x5d, 0xb9, 0xc5, 0x6c,
+ 0x0d, 0x6c, 0xbd, 0xcc, 0xae, 0x31, 0xb2, 0xc2, 0xe0, 0xa3, 0x07, 0x88, 0x97, 0xa1, 0xe0, 0xc8,
+ 0xd3, 0x7a, 0xd5, 0xa4, 0x63, 0x81, 0xbc, 0x59, 0xb9, 0x3b, 0x38, 0xf6, 0xda, 0x65, 0x21, 0x6a,
+ 0x72, 0x52, 0xc5, 0xa8, 0x59, 0x93, 0x8e, 0x4c, 0xbe, 0x50, 0x4c, 0xeb, 0x86, 0x18, 0x6f, 0xc2,
+ 0xb2, 0xdd, 0xa4, 0xb1, 0xeb, 0x1d, 0x23, 0x1b, 0x03, 0xfb, 0x7c, 0x23, 0xe7, 0xc0, 0x80, 0x3f,
+ 0x5f, 0x5d, 0x4e, 0xc6, 0x3e, 0xbf, 0x3b, 0x13, 0x01, 0x53, 0x54, 0xb5, 0xcb, 0xaa, 0x48, 0xae,
+ 0x76, 0x67, 0x70, 0xcd, 0x90, 0x4e, 0x7e, 0xa2, 0x15, 0xfa, 0x98, 0xd2, 0xe5, 0xc4, 0xda, 0x81,
+ 0xbc, 0xd5, 0xba, 0xd7, 0x96, 0xb6, 0xc7, 0x01, 0x0e, 0x41, 0xa5, 0x75, 0xaf, 0x1d, 0x1b, 0x82,
+ 0xca, 0xda, 0xed, 0x4d, 0xe4, 0xec, 0xd8, 0xe4, 0x17, 0x36, 0x01, 0x18, 0xf4, 0xe4, 0xe7, 0x56,
+ 0x81, 0xd8, 0xe4, 0x8f, 0x58, 0x0a, 0x3a, 0x90, 0x6f, 0xdd, 0x0b, 0x82, 0xe9, 0xb1, 0x41, 0x7f,
+ 0xf1, 0xda, 0xbd, 0x20, 0x88, 0x7d, 0xf1, 0xda, 0xed, 0xad, 0x2d, 0xe4, 0xec, 0x18, 0x5b, 0x6e,
+ 0xdb, 0x19, 0x1f, 0x34, 0xdb, 0x75, 0x2b, 0xf0, 0x63, 0x6c, 0x0d, 0x8b, 0xcf, 0x3d, 0xc8, 0xf9,
+ 0x8e, 0x2f, 0x9d, 0x24, 0x71, 0x70, 0x5c, 0xab, 0x8e, 0x64, 0xaa, 0x63, 0xaa, 0xab, 0xeb, 0x55,
+ 0x64, 0xbc, 0x38, 0xcb, 0x7b, 0xfe, 0xf4, 0xe4, 0xc0, 0x59, 0xde, 0xeb, 0x62, 0x79, 0x9b, 0xb1,
+ 0xbc, 0xe7, 0x93, 0x9f, 0x83, 0x62, 0xbb, 0xb3, 0x53, 0xed, 0xec, 0x4c, 0x4f, 0x71, 0xae, 0xdb,
+ 0x83, 0xe3, 0xba, 0xc9, 0xe9, 0x0a, 0xc6, 0x5a, 0x2f, 0x10, 0x85, 0x28, 0x99, 0x32, 0xf6, 0x82,
+ 0xdf, 0xf4, 0xb9, 0x41, 0xb3, 0xbf, 0xce, 0x09, 0xc5, 0xd8, 0x8b, 0x42, 0x94, 0x4c, 0x25, 0xfb,
+ 0xa6, 0xb5, 0x33, 0x7d, 0x7e, 0x08, 0xec, 0x9b, 0x56, 0x02, 0xfb, 0xa6, 0x25, 0xd8, 0x37, 0xad,
+ 0x1d, 0x36, 0xb3, 0xf7, 0xea, 0xbb, 0xfe, 0x34, 0x19, 0xf4, 0xcc, 0xbe, 0x51, 0xdf, 0x8d, 0xcf,
+ 0xec, 0x1b, 0x8b, 0xcb, 0x55, 0xe4, 0xec, 0x98, 0x08, 0xf1, 0x9b, 0x56, 0x6d, 0x7f, 0xfa, 0xc2,
+ 0xa0, 0x45, 0x48, 0x95, 0x91, 0x8d, 0x89, 0x10, 0x5e, 0x86, 0x82, 0x23, 0xf9, 0x95, 0x0c, 0x8c,
+ 0xc9, 0x9c, 0x09, 0xd7, 0x3d, 0xbb, 0x3e, 0x7d, 0x31, 0xf5, 0xc5, 0x4d, 0xbc, 0x05, 0x21, 0x71,
+ 0xd1, 0x8e, 0xd0, 0xfe, 0x15, 0x42, 0xd0, 0x6c, 0x03, 0xf9, 0x5b, 0x19, 0x98, 0xb4, 0x22, 0x39,
+ 0x31, 0xa6, 0x9f, 0xe5, 0xcd, 0xfa, 0xd9, 0x01, 0xca, 0xf4, 0x68, 0xce, 0x0d, 0xde, 0x32, 0xed,
+ 0x43, 0x1b, 0x05, 0x62, 0xac, 0x31, 0x6c, 0x92, 0xfa, 0x81, 0x67, 0xb7, 0xe9, 0xf4, 0xa5, 0x41,
+ 0x4f, 0xd2, 0x2a, 0xa7, 0x1b, 0x9b, 0xa4, 0xa2, 0x10, 0x25, 0x53, 0xbe, 0xd7, 0x52, 0x71, 0x3d,
+ 0x36, 0xfd, 0xdc, 0xa0, 0xf7, 0x5a, 0x75, 0xef, 0x16, 0xdd, 0x6b, 0x65, 0x29, 0x2a, 0xbe, 0x6c,
+ 0xc6, 0x7a, 0xb4, 0x6e, 0xfb, 0xd3, 0xd3, 0x83, 0x9e, 0xb1, 0xc8, 0xc8, 0xc6, 0x66, 0x2c, 0x2f,
+ 0x43, 0xc1, 0x91, 0xc9, 0x64, 0xc7, 0xbf, 0x37, 0xfd, 0xfc, 0xa0, 0x65, 0xf2, 0xba, 0x7f, 0x2f,
+ 0x26, 0x93, 0xd7, 0xab, 0xb7, 0x91, 0xf1, 0x12, 0x32, 0xb9, 0xe9, 0x5b, 0xde, 0xf4, 0xe5, 0xc1,
+ 0xcb, 0x64, 0x46, 0xb7, 0x4b, 0x26, 0xb3, 0x42, 0x94, 0x4c, 0xf9, 0x80, 0xf3, 0xe4, 0xcd, 0x76,
+ 0x6d, 0xfa, 0x47, 0x06, 0x3d, 0xe0, 0xd7, 0x05, 0xe1, 0xd8, 0x80, 0xcb, 0x52, 0x54, 0x7c, 0xc9,
+ 0x2b, 0x4c, 0xcf, 0x6c, 0x37, 0xed, 0x9a, 0xe5, 0x4f, 0xbf, 0x20, 0xbc, 0x1d, 0x84, 0x2a, 0x28,
+ 0xca, 0x50, 0x43, 0xc9, 0x6f, 0x64, 0x60, 0x2a, 0x16, 0x38, 0x31, 0xfd, 0x22, 0x6f, 0xf5, 0x5b,
+ 0x83, 0x6b, 0xf5, 0x7c, 0x94, 0x81, 0x68, 0xbd, 0x36, 0x00, 0xc7, 0x5d, 0xee, 0xe3, 0xed, 0x21,
+ 0x5f, 0xcb, 0x40, 0x49, 0x97, 0x4d, 0x5f, 0xe1, 0xad, 0xfb, 0xf4, 0x10, 0x5a, 0x27, 0xda, 0xa5,
+ 0x6d, 0xcb, 0x61, 0xbc, 0x59, 0xc8, 0x9d, 0x4b, 0x60, 0x3e, 0xb3, 0xc5, 0x55, 0xcc, 0xf4, 0xcc,
+ 0xa0, 0x25, 0x30, 0x86, 0xc4, 0x63, 0x12, 0xd8, 0x80, 0xa0, 0xd9, 0x06, 0x3e, 0x86, 0x56, 0x34,
+ 0x59, 0xc2, 0xf4, 0xd5, 0x41, 0x8f, 0x61, 0x3c, 0xbf, 0x45, 0x74, 0x0c, 0x63, 0x50, 0x8c, 0xb7,
+ 0x87, 0xfc, 0x4e, 0x06, 0xce, 0x5b, 0xf1, 0x2c, 0x35, 0xd3, 0x3f, 0xca, 0x5b, 0xf9, 0xf6, 0x80,
+ 0x5b, 0x19, 0x49, 0x84, 0xc3, 0xdb, 0xa9, 0x63, 0xa8, 0xba, 0xe0, 0xd8, 0xdd, 0x2a, 0xa6, 0x57,
+ 0xf8, 0xbb, 0x41, 0x7b, 0xba, 0x3c, 0x68, 0xbd, 0xa2, 0xba, 0x1b, 0xc4, 0x8f, 0x26, 0xd5, 0xe5,
+ 0xad, 0x4d, 0xe4, 0xec, 0xb8, 0x36, 0x45, 0x3d, 0xcf, 0x0e, 0xa6, 0x5f, 0x1a, 0xb8, 0x36, 0xc5,
+ 0xe9, 0xc6, 0xb5, 0x29, 0x5e, 0x88, 0x92, 0xe9, 0xe5, 0x2f, 0x02, 0x84, 0xe7, 0xf7, 0x04, 0x97,
+ 0x88, 0xcf, 0x9a, 0x2e, 0x11, 0x03, 0xca, 0x9a, 0x68, 0x38, 0x56, 0x5c, 0xfe, 0x7a, 0x06, 0x26,
+ 0x22, 0x27, 0xf8, 0x84, 0x36, 0xd4, 0xa2, 0x6d, 0x58, 0x1b, 0x68, 0x78, 0x83, 0xd9, 0x98, 0x5f,
+ 0xcc, 0x40, 0x49, 0x9f, 0xe5, 0x13, 0x1a, 0xf2, 0x85, 0x68, 0x43, 0x56, 0xd2, 0xa5, 0x6f, 0xec,
+ 0xd1, 0x08, 0xd6, 0x23, 0x91, 0x43, 0xfd, 0x50, 0x7b, 0x44, 0x73, 0x4a, 0x6e, 0xcc, 0x57, 0x33,
+ 0x30, 0x6e, 0x1e, 0xed, 0x13, 0xda, 0xb2, 0x13, 0x6d, 0xcb, 0x6a, 0xea, 0x30, 0xd8, 0x23, 0x06,
+ 0x47, 0x9f, 0xf2, 0x87, 0x3a, 0x38, 0xb1, 0xc4, 0xf1, 0x66, 0x23, 0xbe, 0x9c, 0x01, 0x08, 0x8f,
+ 0xfc, 0x09, 0xad, 0x78, 0x3b, 0xda, 0x8a, 0x9b, 0x29, 0xbd, 0x0f, 0x8e, 0xe8, 0x0b, 0x7d, 0xfe,
+ 0x1f, 0x6a, 0x5f, 0xac, 0xdd, 0xde, 0xda, 0xea, 0xd1, 0x88, 0x2f, 0x65, 0xa0, 0xa4, 0xad, 0x01,
+ 0x43, 0xed, 0x8a, 0xf5, 0xca, 0x56, 0x55, 0xa8, 0xf6, 0xdd, 0xad, 0x78, 0x2f, 0x03, 0xa3, 0xca,
+ 0x3a, 0x90, 0xd0, 0x88, 0xb7, 0xa2, 0x8d, 0x48, 0xe1, 0x3d, 0x54, 0x5d, 0xaf, 0xf6, 0xe8, 0x08,
+ 0xde, 0x84, 0x7b, 0x67, 0xd1, 0x84, 0xdb, 0xbd, 0x9a, 0xf0, 0x7e, 0x06, 0xc6, 0x0c, 0xd3, 0x41,
+ 0x42, 0x2b, 0xac, 0x68, 0x2b, 0x52, 0x5c, 0x60, 0x48, 0x3e, 0xbd, 0x1b, 0x62, 0x18, 0x11, 0x86,
+ 0xda, 0x10, 0xc9, 0xe7, 0xc8, 0x86, 0x28, 0x73, 0xc2, 0xb0, 0x1b, 0xc2, 0xf8, 0xf4, 0x5e, 0xab,
+ 0xda, 0xb4, 0x30, 0xd4, 0xb5, 0x7a, 0x63, 0x71, 0xb9, 0x7a, 0x84, 0xdc, 0x0a, 0xed, 0x0c, 0x43,
+ 0x5d, 0xac, 0x82, 0x4d, 0x72, 0x33, 0xbe, 0x9d, 0x81, 0x73, 0x71, 0x63, 0x43, 0x42, 0x63, 0x76,
+ 0xa3, 0x8d, 0xd9, 0x4c, 0xe3, 0xbe, 0x14, 0x32, 0x4b, 0x6e, 0xd2, 0xaf, 0x66, 0xe0, 0x42, 0x82,
+ 0xa1, 0x21, 0xa1, 0x55, 0x76, 0xb4, 0x55, 0xd5, 0x21, 0x24, 0x13, 0x8d, 0x4f, 0x60, 0xc3, 0xd4,
+ 0x30, 0xd4, 0x09, 0x2c, 0xf9, 0xf4, 0xd6, 0x01, 0x4c, 0x93, 0xc3, 0x50, 0x75, 0x80, 0x6e, 0x9f,
+ 0xe2, 0xf8, 0x34, 0x0e, 0x8d, 0x0f, 0x43, 0x9d, 0xc6, 0x82, 0x4d, 0x6f, 0x81, 0xaf, 0x4c, 0x11,
+ 0x43, 0x15, 0xf8, 0xeb, 0xd5, 0xdb, 0x47, 0x0a, 0x7c, 0x6d, 0x97, 0x18, 0xb2, 0xc0, 0xe7, 0x7c,
+ 0x7a, 0xcf, 0x0e, 0xd3, 0x3e, 0x31, 0xd4, 0xd9, 0xa1, 0x18, 0x25, 0x37, 0xe5, 0x7b, 0x19, 0x23,
+ 0x15, 0x94, 0x61, 0x74, 0x48, 0x68, 0xd2, 0x3b, 0xd1, 0x26, 0x6d, 0x0d, 0x23, 0x9d, 0x83, 0xd9,
+ 0xb4, 0x6f, 0x64, 0x60, 0x32, 0x6a, 0x71, 0x48, 0x68, 0x54, 0x3d, 0xda, 0xa8, 0xf5, 0xc1, 0x66,
+ 0x98, 0x8a, 0xcb, 0xe1, 0xb8, 0xc9, 0x61, 0xa8, 0x72, 0xd8, 0x64, 0xd6, 0x7b, 0xf0, 0x92, 0xac,
+ 0x0d, 0x43, 0x1d, 0xbc, 0xde, 0xe9, 0x3b, 0xcd, 0xa6, 0xfd, 0x5a, 0x46, 0xa6, 0xa5, 0xec, 0x32,
+ 0x31, 0x24, 0x34, 0xae, 0x19, 0x6d, 0xdc, 0x9d, 0xe1, 0xa4, 0xf7, 0x8d, 0x2b, 0x18, 0xda, 0xc6,
+ 0x30, 0x54, 0x05, 0xa3, 0xba, 0xbc, 0xb5, 0x79, 0x94, 0xba, 0x15, 0xda, 0x1b, 0x86, 0xab, 0x6e,
+ 0x09, 0x3e, 0x89, 0x0d, 0x29, 0xff, 0x6e, 0x36, 0xe2, 0x35, 0x73, 0xe6, 0x1e, 0xd1, 0x16, 0x8c,
+ 0x35, 0x2d, 0x3f, 0xd8, 0x6e, 0xd7, 0xad, 0x80, 0xaa, 0x1c, 0x77, 0xfd, 0xf8, 0xe3, 0x6a, 0xcb,
+ 0xdf, 0x6a, 0x48, 0x06, 0x4d, 0x9a, 0xe4, 0x26, 0x10, 0x77, 0x87, 0xcb, 0xb7, 0xfa, 0x75, 0xf1,
+ 0x5e, 0xa0, 0xf2, 0x5c, 0xce, 0x85, 0x01, 0xaf, 0x1b, 0x5d, 0x18, 0x98, 0x50, 0xab, 0xfc, 0xeb,
+ 0x19, 0x80, 0xd0, 0x67, 0x90, 0x5c, 0x85, 0x3c, 0x7d, 0xd0, 0xf6, 0xe2, 0xae, 0xbd, 0x0c, 0x03,
+ 0x39, 0x84, 0x38, 0x50, 0xdc, 0xb5, 0x69, 0xb3, 0xae, 0x5c, 0x7b, 0x52, 0x38, 0x60, 0xca, 0x88,
+ 0xd0, 0x65, 0x46, 0x2e, 0xec, 0x4f, 0xfe, 0xd3, 0x47, 0xc9, 0xa5, 0xfc, 0x11, 0x18, 0x37, 0xdf,
+ 0xba, 0x38, 0x3e, 0xda, 0xb3, 0xfc, 0x8f, 0xf2, 0x30, 0x15, 0xb3, 0xaf, 0x68, 0x6f, 0xe2, 0xad,
+ 0x30, 0xd3, 0x41, 0xd4, 0x9b, 0x98, 0x3b, 0x60, 0x87, 0x38, 0xe4, 0x1b, 0x19, 0x98, 0xba, 0x6f,
+ 0x05, 0xb5, 0x3d, 0x46, 0x78, 0xc1, 0x74, 0x71, 0x4f, 0xb1, 0x7e, 0xee, 0x46, 0x09, 0x86, 0x86,
+ 0xd4, 0x18, 0x00, 0xe3, 0xac, 0xc9, 0xab, 0x30, 0xd2, 0x76, 0x9b, 0x4d, 0xdb, 0x69, 0xc8, 0x17,
+ 0x9a, 0xc2, 0xb0, 0x5a, 0x51, 0x8c, 0x0a, 0x1e, 0x7d, 0x44, 0x2f, 0x9f, 0xd6, 0xdd, 0x24, 0xd6,
+ 0x91, 0xa7, 0x0a, 0xf0, 0x2a, 0x3c, 0x05, 0x01, 0x5e, 0xff, 0x32, 0x0f, 0xa4, 0x5b, 0xbb, 0x38,
+ 0xee, 0xbd, 0xc9, 0x97, 0x23, 0xe1, 0x0f, 0xa5, 0x5e, 0x91, 0x0b, 0x22, 0x79, 0x8c, 0x8c, 0x91,
+ 0xef, 0x7a, 0x60, 0x4c, 0x94, 0xa3, 0xc6, 0xe8, 0x33, 0xe5, 0xfc, 0x57, 0xbb, 0x13, 0xc0, 0x7c,
+ 0x76, 0x90, 0x1a, 0x56, 0x1f, 0x43, 0xbe, 0xcd, 0x9f, 0x12, 0xdb, 0x93, 0x01, 0xfe, 0xc5, 0xbe,
+ 0x03, 0xfc, 0x2b, 0xba, 0x32, 0x1a, 0x84, 0xce, 0x3c, 0x41, 0x7d, 0xba, 0x99, 0xf4, 0xa7, 0x45,
+ 0x38, 0xdf, 0xb5, 0x43, 0x9d, 0x7d, 0xba, 0xc0, 0xd7, 0x60, 0x94, 0xfd, 0x5d, 0x4f, 0x88, 0xd1,
+ 0xbe, 0x21, 0xcb, 0x51, 0x63, 0x18, 0xa9, 0xf1, 0x72, 0x3d, 0x53, 0xe3, 0x59, 0x91, 0x34, 0xa0,
+ 0x43, 0x79, 0x07, 0xf1, 0x93, 0x30, 0x21, 0xee, 0x25, 0x54, 0x12, 0xb8, 0x42, 0x34, 0x0b, 0xd8,
+ 0x75, 0x13, 0x88, 0x51, 0xdc, 0x1e, 0x29, 0xdf, 0x8a, 0xa7, 0x4a, 0xf9, 0xf6, 0x4b, 0xdd, 0x59,
+ 0xe2, 0x3f, 0x33, 0x40, 0x85, 0xa5, 0x8f, 0x35, 0x65, 0xa6, 0x5b, 0x1c, 0x3d, 0x32, 0xdd, 0xe2,
+ 0x1c, 0x94, 0x7c, 0xbf, 0x79, 0x87, 0x7a, 0xf6, 0xae, 0x08, 0x33, 0x37, 0x1e, 0xe5, 0xab, 0x2a,
+ 0x00, 0x86, 0x38, 0x4f, 0x59, 0x08, 0xee, 0xfb, 0x05, 0x6e, 0xd0, 0xd3, 0x8a, 0xc0, 0x31, 0xa2,
+ 0xf9, 0x4d, 0x98, 0xac, 0x35, 0x5d, 0x87, 0x2e, 0xda, 0x1e, 0x97, 0x30, 0x87, 0xf1, 0x24, 0x6c,
+ 0x0b, 0x11, 0x28, 0xc6, 0xb0, 0x49, 0x0d, 0x0a, 0x35, 0x8f, 0xd6, 0xfd, 0xf4, 0x61, 0x84, 0xd7,
+ 0xed, 0x60, 0x81, 0x51, 0x12, 0x61, 0x84, 0xfc, 0x5f, 0x14, 0xb4, 0x79, 0x6a, 0x04, 0x7f, 0x8f,
+ 0xcb, 0x41, 0x2e, 0x32, 0xf3, 0xfd, 0xa7, 0x46, 0xa8, 0xde, 0xd0, 0xd5, 0x31, 0x42, 0x8c, 0x49,
+ 0x80, 0x5d, 0xbb, 0x49, 0x99, 0x16, 0x11, 0x4f, 0x32, 0xb1, 0x2c, 0xcb, 0x51, 0x63, 0x88, 0x34,
+ 0x03, 0x96, 0x53, 0xdb, 0x93, 0x81, 0x1a, 0x46, 0x9a, 0x01, 0x9e, 0xbe, 0x52, 0x42, 0x59, 0xb7,
+ 0x07, 0x56, 0x43, 0x06, 0x5e, 0xe8, 0x6e, 0xdf, 0xb2, 0x1a, 0xc8, 0xca, 0x19, 0xd8, 0xa3, 0xbb,
+ 0x32, 0x1b, 0x82, 0x06, 0x23, 0xdd, 0x45, 0x56, 0x4e, 0x5a, 0x50, 0xf4, 0x68, 0xcb, 0x0d, 0xd4,
+ 0x7b, 0xba, 0x2b, 0xa9, 0xba, 0x15, 0x39, 0x29, 0xa9, 0x4c, 0x81, 0x48, 0xdd, 0xc4, 0x4a, 0x50,
+ 0x32, 0x21, 0x55, 0x78, 0x56, 0xed, 0xaa, 0x2b, 0x0d, 0xc7, 0xf5, 0xe8, 0x0d, 0xd7, 0xe7, 0x89,
+ 0xfc, 0x80, 0x2f, 0x0f, 0x95, 0xec, 0xea, 0xd9, 0x95, 0x24, 0x24, 0x4c, 0xae, 0x5b, 0xfe, 0xdd,
+ 0x0c, 0x8c, 0xaa, 0x31, 0x7d, 0x0a, 0x12, 0x64, 0xdf, 0x86, 0xa9, 0x58, 0x57, 0x9d, 0x20, 0x80,
+ 0xef, 0x05, 0xc8, 0x77, 0xbc, 0xa6, 0xd0, 0xf1, 0xe5, 0xe3, 0x7a, 0xdb, 0xb8, 0x5a, 0x45, 0x5e,
+ 0x5a, 0xfe, 0xc3, 0x0c, 0x4c, 0x0a, 0xe3, 0x7b, 0xa5, 0xdd, 0x16, 0xfd, 0xb0, 0x0d, 0xd0, 0xf6,
+ 0xec, 0x03, 0x2b, 0xa0, 0x2a, 0x4f, 0x62, 0x7f, 0x5b, 0xff, 0xa6, 0xae, 0x8c, 0x06, 0x21, 0xf2,
+ 0x12, 0x14, 0xac, 0x76, 0x7b, 0x65, 0x91, 0x77, 0x45, 0x2e, 0xf4, 0x36, 0xaa, 0xb0, 0x42, 0x14,
+ 0x30, 0xb6, 0xd4, 0x6d, 0xc7, 0x0f, 0xac, 0x66, 0x93, 0x9f, 0x69, 0x56, 0x16, 0xe5, 0x59, 0x48,
+ 0x2f, 0xf5, 0x95, 0x08, 0x14, 0x63, 0xd8, 0xe5, 0xbf, 0x3f, 0x06, 0xe7, 0xbb, 0xee, 0x12, 0x8c,
+ 0xe0, 0xd2, 0x5c, 0x57, 0x70, 0xa9, 0xb1, 0x9b, 0x67, 0xcf, 0x64, 0x37, 0xd7, 0x79, 0xaf, 0x73,
+ 0x27, 0xcd, 0x7b, 0x1d, 0xe6, 0x94, 0x94, 0x31, 0xaa, 0x09, 0xb9, 0x82, 0xc3, 0x3c, 0x94, 0x68,
+ 0xe0, 0x9f, 0x28, 0x11, 0xf7, 0x06, 0x8c, 0x5a, 0x6d, 0x5b, 0xa4, 0x9b, 0x2d, 0xf6, 0x3d, 0x4d,
+ 0x2b, 0x9b, 0x2b, 0x22, 0xd7, 0xac, 0x26, 0xd2, 0x9d, 0x68, 0x76, 0x64, 0xb0, 0x89, 0x66, 0x4d,
+ 0x15, 0x7c, 0xf4, 0x58, 0x15, 0xfc, 0x65, 0x28, 0x5a, 0xb5, 0xc0, 0x3e, 0xa0, 0x72, 0x23, 0xd5,
+ 0xd2, 0xb0, 0xc2, 0x4b, 0x51, 0x42, 0xe5, 0x4b, 0xfc, 0x2a, 0x82, 0x97, 0x8b, 0x95, 0xe8, 0x4b,
+ 0xfc, 0x3a, 0xb8, 0xd7, 0xc4, 0xe3, 0x7a, 0x0e, 0x9f, 0x2f, 0xd1, 0x64, 0xb7, 0xa1, 0x9e, 0x63,
+ 0x02, 0x31, 0x8a, 0x4b, 0x2a, 0x30, 0x25, 0x0a, 0xb6, 0xdb, 0xec, 0xf8, 0xcc, 0xaa, 0x8f, 0x47,
+ 0x67, 0xc5, 0xf5, 0x28, 0x18, 0xe3, 0xf8, 0x3d, 0x54, 0xa5, 0x89, 0xf4, 0xaa, 0xd2, 0x64, 0x6a,
+ 0x55, 0x29, 0xbe, 0x0e, 0xfb, 0x50, 0x95, 0xbe, 0x12, 0xcf, 0x37, 0x2d, 0xbc, 0xb3, 0x53, 0xa8,
+ 0x35, 0x6c, 0x51, 0xd5, 0xcd, 0x8c, 0xd2, 0x27, 0xca, 0x33, 0xfd, 0x93, 0x30, 0xe1, 0x7a, 0x0d,
+ 0xcb, 0xb1, 0xdf, 0xe5, 0x12, 0xc6, 0xe7, 0x6e, 0xda, 0x25, 0x31, 0x47, 0x37, 0x4c, 0x00, 0x46,
+ 0xf1, 0x48, 0x07, 0x4a, 0x0d, 0x25, 0x56, 0xa7, 0xcf, 0xa7, 0x15, 0x2c, 0x51, 0x09, 0x2d, 0x62,
+ 0xf7, 0x74, 0x19, 0x86, 0x9c, 0x0c, 0x3d, 0x90, 0x3c, 0x05, 0x7a, 0xe0, 0xff, 0x19, 0xe1, 0xd2,
+ 0x3a, 0x7a, 0xe1, 0x7a, 0xf6, 0xe7, 0xab, 0x9f, 0x82, 0x92, 0xd4, 0xbc, 0xe5, 0xee, 0x54, 0x9a,
+ 0xff, 0x11, 0x1d, 0x3d, 0x1b, 0xcf, 0xc6, 0xbe, 0xb2, 0x88, 0x21, 0xf6, 0x89, 0x0e, 0x5b, 0xb1,
+ 0x8c, 0xde, 0xf9, 0xc1, 0x65, 0xf4, 0xae, 0xc2, 0xb3, 0x22, 0x7f, 0x68, 0xb5, 0xba, 0xca, 0x0f,
+ 0x02, 0xb6, 0x78, 0x1d, 0x57, 0x3e, 0x5a, 0xa7, 0x75, 0xa2, 0xa5, 0x24, 0x24, 0x4c, 0xae, 0x2b,
+ 0x05, 0x5a, 0xd3, 0xd2, 0x02, 0xad, 0xd8, 0x25, 0xd0, 0x42, 0x20, 0x46, 0x71, 0x7b, 0x48, 0xa3,
+ 0xd1, 0xf4, 0xd2, 0xa8, 0x34, 0x00, 0x69, 0x14, 0x9d, 0x67, 0xa7, 0x3c, 0xb8, 0xc1, 0x91, 0x07,
+ 0xb7, 0x4f, 0xc3, 0x98, 0x78, 0xd9, 0x5b, 0x8c, 0xf5, 0x58, 0xdf, 0x63, 0x5d, 0x0d, 0x6b, 0xa3,
+ 0x49, 0xca, 0x58, 0xd9, 0xe3, 0x67, 0x93, 0x26, 0xbc, 0x0c, 0xc5, 0x86, 0xe7, 0x76, 0xda, 0x22,
+ 0x04, 0x48, 0x4e, 0xed, 0xeb, 0xbc, 0x04, 0x25, 0x24, 0xdd, 0xea, 0xff, 0x66, 0x09, 0xa6, 0x62,
+ 0x7e, 0x0e, 0x89, 0xb6, 0xda, 0xcc, 0x93, 0xb3, 0xd5, 0x5e, 0x8d, 0x64, 0x1b, 0x4c, 0x4a, 0x0d,
+ 0xd2, 0x95, 0xec, 0x3c, 0x77, 0xf2, 0x64, 0xe7, 0xe4, 0xc7, 0xa1, 0x64, 0xd5, 0xeb, 0x1e, 0xf5,
+ 0x7d, 0xaa, 0x1e, 0x60, 0x10, 0x6f, 0xcf, 0xab, 0x42, 0x0c, 0xe1, 0xdc, 0x0a, 0x54, 0xdf, 0xf5,
+ 0xd9, 0x39, 0x23, 0x7e, 0x06, 0x64, 0xbd, 0xc8, 0xca, 0x51, 0x63, 0x90, 0x3a, 0x4c, 0xed, 0x7b,
+ 0x3b, 0x0b, 0x0b, 0x56, 0x6d, 0x8f, 0x9e, 0xc6, 0x88, 0xc7, 0x13, 0xd6, 0xdc, 0x8a, 0x52, 0xc0,
+ 0x38, 0x49, 0xc9, 0xe5, 0x16, 0x3d, 0x0c, 0xac, 0x9d, 0xd3, 0xe8, 0x7a, 0x8a, 0x8b, 0x49, 0x01,
+ 0xe3, 0x24, 0x99, 0x66, 0xb6, 0xef, 0xed, 0xa8, 0x03, 0x96, 0x3c, 0x90, 0x6a, 0xcd, 0xec, 0x56,
+ 0x08, 0x42, 0x13, 0x8f, 0x75, 0xd8, 0xbe, 0xb7, 0x83, 0xd4, 0x6a, 0xb6, 0x64, 0xaa, 0x3e, 0xdd,
+ 0x61, 0xb7, 0x64, 0x39, 0x6a, 0x0c, 0xd2, 0x06, 0xc2, 0xbe, 0x8e, 0x8f, 0xbb, 0x0e, 0x8b, 0x97,
+ 0xd6, 0x94, 0x93, 0xbf, 0x87, 0x7d, 0x89, 0xc9, 0xb7, 0x5b, 0x5d, 0x74, 0x30, 0x81, 0x36, 0xf9,
+ 0x0c, 0x3c, 0xb7, 0xef, 0xed, 0xc8, 0x2b, 0xcb, 0x4d, 0xcf, 0x76, 0x6a, 0x76, 0xdb, 0x12, 0xd9,
+ 0xfb, 0xc6, 0xa2, 0x4f, 0xf7, 0xdd, 0x4a, 0x46, 0xc3, 0x5e, 0xf5, 0xa3, 0x17, 0x07, 0xe3, 0x69,
+ 0x2f, 0x0e, 0x62, 0x8b, 0xf4, 0x54, 0x17, 0x07, 0x13, 0x4f, 0x81, 0x3a, 0xf2, 0xe5, 0x11, 0x18,
+ 0xbb, 0xb1, 0xb5, 0xb5, 0xa9, 0x72, 0x73, 0x1e, 0x63, 0x96, 0x32, 0x72, 0xad, 0x66, 0xcf, 0xf0,
+ 0x59, 0x3d, 0x99, 0x58, 0x30, 0x37, 0xac, 0xc4, 0x82, 0x2f, 0x43, 0xb1, 0x45, 0x83, 0x3d, 0xb7,
+ 0x1e, 0xcf, 0xa5, 0xbd, 0xc6, 0x4b, 0x51, 0x42, 0x63, 0x99, 0x4b, 0x0b, 0x67, 0x9e, 0xb9, 0xf4,
+ 0x55, 0x18, 0x09, 0xec, 0x16, 0x75, 0x3b, 0x42, 0xb2, 0xe5, 0xc2, 0x2e, 0xdb, 0x12, 0xc5, 0xa8,
+ 0xe0, 0xa4, 0x0d, 0xa5, 0x1d, 0x65, 0xa8, 0x96, 0x02, 0x6a, 0x20, 0x36, 0x6f, 0x2e, 0xac, 0xf5,
+ 0x4f, 0x0c, 0x99, 0x90, 0x9f, 0x83, 0x91, 0x3d, 0x6a, 0xd5, 0x59, 0xcf, 0x8c, 0xa6, 0x8d, 0x9c,
+ 0x32, 0xa6, 0xe4, 0xec, 0x0d, 0x41, 0x34, 0x16, 0x3e, 0x24, 0x4b, 0x51, 0xf1, 0x24, 0x3f, 0x0f,
+ 0x13, 0xe2, 0xf4, 0x2b, 0x21, 0x52, 0x7d, 0x5a, 0x4e, 0x93, 0x91, 0x20, 0x24, 0x27, 0x8e, 0x3f,
+ 0x66, 0x89, 0x8f, 0x51, 0x7e, 0x97, 0xdf, 0x80, 0x71, 0xb3, 0xa9, 0xfd, 0xbe, 0xe2, 0x31, 0x11,
+ 0x79, 0x62, 0x91, 0xbc, 0x62, 0xe4, 0xb5, 0xcf, 0xe9, 0x73, 0x9b, 0x4a, 0xfa, 0x6b, 0x6e, 0xc7,
+ 0xe2, 0x69, 0x87, 0x9f, 0xf8, 0xf8, 0x1d, 0xf9, 0xb4, 0x43, 0x2e, 0xf2, 0xb4, 0x03, 0x2f, 0x47,
+ 0x8d, 0xc1, 0x53, 0xc3, 0x04, 0xde, 0x1d, 0xbd, 0x6b, 0x9b, 0x21, 0x80, 0x0c, 0x53, 0x42, 0xcb,
+ 0xbf, 0x38, 0x09, 0xe3, 0x66, 0xca, 0x3a, 0x36, 0xf7, 0x54, 0x96, 0xb1, 0x4c, 0x34, 0x9b, 0x97,
+ 0xca, 0x30, 0xa6, 0xe0, 0x91, 0x48, 0xae, 0xec, 0x91, 0x91, 0x5c, 0xdf, 0x16, 0x89, 0x4e, 0xa3,
+ 0x79, 0xcf, 0xd3, 0x27, 0x29, 0xe9, 0x4a, 0xa5, 0xae, 0x53, 0x9e, 0x46, 0x8b, 0xb1, 0x9b, 0x39,
+ 0xf9, 0xed, 0x0c, 0x3c, 0xef, 0x51, 0x26, 0x76, 0xa8, 0xd7, 0x55, 0x41, 0x9e, 0x64, 0x06, 0xda,
+ 0xb4, 0x17, 0x1f, 0x3d, 0x9c, 0x79, 0x1e, 0x7b, 0x71, 0xc4, 0xde, 0x8d, 0x21, 0x7f, 0x27, 0x03,
+ 0xd3, 0x2d, 0x1a, 0x78, 0x76, 0xcd, 0xef, 0x6e, 0x69, 0x61, 0xf0, 0x2d, 0x7d, 0xe1, 0xd1, 0xc3,
+ 0x99, 0xe9, 0xb5, 0x1e, 0x0c, 0xb1, 0x67, 0x53, 0xc8, 0x7b, 0x99, 0xa4, 0x97, 0x35, 0x52, 0x84,
+ 0x7d, 0x18, 0x49, 0x7d, 0xaa, 0x81, 0x67, 0x05, 0xb4, 0x71, 0x78, 0xcc, 0xe3, 0x1a, 0xcd, 0xc8,
+ 0x85, 0x58, 0xca, 0x2b, 0x11, 0xb5, 0xdd, 0x8a, 0x69, 0x9d, 0xa0, 0x03, 0x7c, 0x27, 0x03, 0xe3,
+ 0x8e, 0x5b, 0xa7, 0x4a, 0x47, 0x92, 0x02, 0xf1, 0xd3, 0x83, 0xc9, 0x1e, 0x39, 0xbb, 0x6e, 0x90,
+ 0x16, 0x62, 0x51, 0xdb, 0x75, 0x4c, 0x10, 0x46, 0xda, 0x40, 0xb6, 0x61, 0x2c, 0x70, 0x9b, 0xd2,
+ 0x73, 0x46, 0x89, 0xc7, 0x2b, 0x49, 0x6a, 0xde, 0x96, 0x46, 0x0b, 0x55, 0xce, 0xb0, 0xcc, 0x47,
+ 0x93, 0x0e, 0xa1, 0xdd, 0x59, 0xfe, 0x85, 0x06, 0xf9, 0x72, 0x12, 0xe9, 0x4d, 0xb7, 0x7e, 0xaa,
+ 0x44, 0xff, 0xc4, 0x81, 0x73, 0xfa, 0x7d, 0x01, 0xa1, 0x23, 0xfb, 0x32, 0x29, 0x45, 0xa2, 0xa6,
+ 0xba, 0xea, 0xd6, 0xac, 0xa6, 0x48, 0xbc, 0x84, 0x74, 0x97, 0x7a, 0x3c, 0xff, 0x93, 0x7e, 0x91,
+ 0x61, 0x25, 0x46, 0x09, 0xbb, 0x68, 0x93, 0xeb, 0x70, 0xbe, 0xed, 0xd9, 0x2e, 0x6f, 0x42, 0xd3,
+ 0xf2, 0x45, 0x1e, 0x1e, 0x61, 0xa8, 0xd4, 0x81, 0x79, 0x9b, 0x71, 0x04, 0xec, 0xae, 0x23, 0x0e,
+ 0xd2, 0xa2, 0x90, 0x6b, 0x84, 0x05, 0x75, 0x90, 0x16, 0x65, 0xa8, 0xa1, 0x64, 0x19, 0x46, 0xad,
+ 0xdd, 0x5d, 0xdb, 0x61, 0x98, 0xe2, 0x5d, 0xac, 0x17, 0x92, 0x3e, 0xad, 0x22, 0x71, 0xa4, 0x2d,
+ 0x5a, 0xfe, 0x42, 0x5d, 0x57, 0xbd, 0x28, 0x60, 0xd7, 0x68, 0xa5, 0x56, 0x73, 0x3b, 0x32, 0x09,
+ 0xe1, 0x54, 0xf7, 0x8b, 0x02, 0x51, 0x0c, 0x4c, 0xa8, 0xc5, 0x5a, 0xef, 0xd3, 0x20, 0xb0, 0x9d,
+ 0x86, 0x2f, 0xdf, 0xb4, 0xe2, 0x5c, 0xab, 0xb2, 0x0c, 0x35, 0x94, 0x1d, 0xec, 0xfc, 0xc0, 0xf2,
+ 0x82, 0x8a, 0xd7, 0xf0, 0x79, 0x6a, 0x05, 0x79, 0xb0, 0xab, 0xaa, 0x42, 0x0c, 0xe1, 0xe4, 0xe3,
+ 0x30, 0xee, 0x1b, 0xb9, 0x42, 0xb9, 0xe5, 0xae, 0x24, 0xaf, 0x04, 0x8d, 0x72, 0x8c, 0x60, 0x91,
+ 0x59, 0x80, 0x96, 0xf5, 0x40, 0x6a, 0x87, 0xd3, 0x17, 0xc4, 0xfe, 0xc5, 0xd4, 0xa5, 0x35, 0x5d,
+ 0x8a, 0x06, 0xc6, 0xe5, 0x9f, 0x81, 0xf3, 0x5d, 0x4b, 0xa5, 0xaf, 0x6d, 0xf9, 0xb7, 0xb2, 0x30,
+ 0x15, 0x4b, 0x6b, 0x7a, 0x9c, 0x86, 0xfc, 0x39, 0x18, 0x17, 0xe6, 0x2a, 0x79, 0x36, 0xcc, 0xf6,
+ 0x7d, 0x27, 0x5a, 0x31, 0xaa, 0x63, 0x84, 0x18, 0xb9, 0x16, 0xeb, 0xb6, 0x5c, 0x34, 0x2f, 0xd4,
+ 0x11, 0x5d, 0x27, 0x35, 0xe8, 0xfc, 0x90, 0x34, 0xe8, 0xf2, 0x2c, 0x8c, 0xdd, 0xba, 0x56, 0x55,
+ 0xe1, 0x78, 0xe1, 0x23, 0x04, 0x19, 0x9e, 0xf8, 0xb9, 0xeb, 0x11, 0x82, 0xf2, 0x37, 0x73, 0x70,
+ 0xde, 0xa8, 0x20, 0x5f, 0x0c, 0xf9, 0x79, 0x28, 0x36, 0xad, 0x1d, 0xda, 0x54, 0xaf, 0x02, 0xa4,
+ 0x38, 0xc0, 0x75, 0x11, 0x9f, 0x5d, 0xe5, 0x94, 0x63, 0xf1, 0xa4, 0xa2, 0x10, 0x25, 0x5b, 0xb2,
+ 0x07, 0x23, 0x3b, 0x32, 0xdb, 0x7a, 0x76, 0x50, 0xd9, 0xd6, 0xb9, 0x01, 0x56, 0xe5, 0x58, 0x57,
+ 0xe4, 0xb9, 0x1d, 0xd3, 0xf3, 0x5c, 0x6f, 0x43, 0xe5, 0x5a, 0x97, 0x1a, 0xbc, 0x74, 0xb0, 0x0a,
+ 0xed, 0x98, 0x49, 0x48, 0x98, 0x5c, 0xf7, 0xf2, 0x4f, 0xc1, 0x98, 0xf1, 0x95, 0x7d, 0x4d, 0xf5,
+ 0x7f, 0x9e, 0x83, 0x51, 0x95, 0x31, 0xf8, 0xb8, 0x39, 0xfe, 0x12, 0x14, 0xf8, 0x7b, 0xf0, 0xd2,
+ 0x46, 0xa4, 0xaf, 0x35, 0xf9, 0x7b, 0xf1, 0x28, 0x60, 0xa6, 0xbe, 0x98, 0x3b, 0x46, 0x5f, 0x1c,
+ 0xf2, 0xe4, 0x24, 0x3b, 0x90, 0xf7, 0x2d, 0xbf, 0x29, 0x55, 0xa2, 0x34, 0x41, 0xc0, 0x95, 0xea,
+ 0xaa, 0xf9, 0x06, 0x1d, 0xfb, 0x8d, 0x9c, 0x36, 0xf9, 0x4a, 0x06, 0x26, 0x6a, 0xae, 0xe3, 0x77,
+ 0x5a, 0xd4, 0xe3, 0x16, 0x43, 0xa9, 0xe5, 0xac, 0xa6, 0x0c, 0xa1, 0x5c, 0x30, 0x69, 0x8a, 0x53,
+ 0x48, 0xa4, 0x08, 0xa3, 0x5c, 0xf9, 0x4b, 0xd8, 0xdd, 0x15, 0xc9, 0x1c, 0x94, 0xb8, 0xfd, 0xd2,
+ 0x48, 0x27, 0xa7, 0xbd, 0x6b, 0xae, 0x2b, 0x00, 0x86, 0x38, 0xec, 0x9c, 0xe0, 0x36, 0xeb, 0x54,
+ 0xbf, 0x66, 0xa4, 0x57, 0xcc, 0x06, 0x2f, 0x45, 0x09, 0x65, 0xfb, 0xa4, 0x47, 0x77, 0xac, 0xa6,
+ 0x65, 0xe8, 0x62, 0x72, 0xc0, 0xf5, 0x3e, 0x89, 0x71, 0x04, 0xec, 0xae, 0x53, 0xfe, 0x4f, 0xa3,
+ 0x70, 0x2e, 0x1e, 0x34, 0x7a, 0xdc, 0x44, 0x9c, 0x83, 0x52, 0xdb, 0xf2, 0x02, 0xdb, 0x78, 0x3f,
+ 0x4c, 0x7f, 0xd5, 0xa6, 0x02, 0x60, 0x88, 0x13, 0xce, 0xdc, 0xdc, 0x11, 0x33, 0x37, 0xf9, 0xf5,
+ 0x85, 0xfc, 0xd9, 0xbf, 0xbe, 0x20, 0xd7, 0x45, 0x61, 0x58, 0xeb, 0xc2, 0xf4, 0xd4, 0x2c, 0x1e,
+ 0xeb, 0xa9, 0xf9, 0x7e, 0xb7, 0x53, 0xd9, 0xa7, 0x07, 0x17, 0x1f, 0xdc, 0xdf, 0x45, 0x69, 0x6c,
+ 0xa9, 0x8d, 0x3e, 0x89, 0xa5, 0x46, 0x36, 0xe1, 0x62, 0xd3, 0x6e, 0x49, 0xcf, 0x38, 0x7f, 0x93,
+ 0x7a, 0x55, 0x5a, 0x73, 0x9d, 0x3a, 0x37, 0xbc, 0xe6, 0x42, 0x87, 0x85, 0xd5, 0x04, 0x1c, 0x4c,
+ 0xac, 0x69, 0xca, 0x4c, 0x38, 0x46, 0x66, 0x2a, 0x99, 0x36, 0x36, 0x44, 0x99, 0x76, 0xe6, 0xf7,
+ 0x2f, 0xa1, 0x43, 0xf2, 0xc4, 0x51, 0x0e, 0xc9, 0xe9, 0x4c, 0x9e, 0x7f, 0x13, 0x60, 0x9c, 0x8f,
+ 0xf7, 0x09, 0x6d, 0x9e, 0x27, 0xda, 0xed, 0x22, 0x92, 0x28, 0xc7, 0xd5, 0xfc, 0xa3, 0x25, 0x51,
+ 0xd4, 0x94, 0x98, 0x3f, 0x73, 0x53, 0xe2, 0x35, 0x18, 0xf7, 0xc4, 0x73, 0x71, 0xf5, 0x4a, 0x6d,
+ 0xdf, 0x97, 0xef, 0x0b, 0x19, 0xfe, 0x01, 0x21, 0x0c, 0x23, 0x98, 0x4c, 0x6a, 0xd4, 0xdc, 0x16,
+ 0xcf, 0xce, 0x1a, 0x97, 0x1a, 0x0b, 0xb2, 0x1c, 0x35, 0x06, 0x79, 0x13, 0x26, 0x77, 0x9b, 0x1d,
+ 0x7f, 0x6f, 0x99, 0xd1, 0xa0, 0x4e, 0x4d, 0xbc, 0x23, 0x53, 0x08, 0xbd, 0x9b, 0x96, 0x23, 0x50,
+ 0x8c, 0x61, 0x0f, 0xfd, 0x4d, 0x19, 0xc3, 0xa2, 0x5d, 0x3a, 0x43, 0x8b, 0xf6, 0x4f, 0xc3, 0x94,
+ 0x9e, 0x0b, 0xb6, 0xd3, 0x50, 0x4e, 0x7d, 0x25, 0x71, 0x1a, 0xde, 0x8c, 0x82, 0x30, 0x8e, 0x6b,
+ 0x0a, 0x8a, 0xb1, 0x13, 0x0a, 0x8a, 0xf1, 0x21, 0x0a, 0x8a, 0xaf, 0x67, 0x60, 0xd2, 0xaf, 0xed,
+ 0xd1, 0x96, 0x85, 0xb4, 0x61, 0xfb, 0x81, 0x77, 0x28, 0x2f, 0x3f, 0x52, 0x04, 0x01, 0x56, 0x23,
+ 0xf4, 0x24, 0x63, 0xfe, 0x00, 0x6d, 0x14, 0x82, 0x31, 0xce, 0xe4, 0x8b, 0xa1, 0x1d, 0x7a, 0x32,
+ 0x6d, 0x32, 0x1c, 0x53, 0x4e, 0x9c, 0xda, 0x10, 0x3d, 0xf5, 0x14, 0x19, 0xa2, 0x37, 0x00, 0x56,
+ 0xdd, 0x86, 0x92, 0x8c, 0x15, 0x98, 0x52, 0x6f, 0x02, 0x8b, 0x1d, 0x4a, 0x04, 0xa0, 0xe5, 0xc3,
+ 0xeb, 0xe4, 0x95, 0x28, 0x18, 0xe3, 0xf8, 0xe5, 0xdf, 0x2f, 0xc2, 0x54, 0x2c, 0x0b, 0xc7, 0x40,
+ 0x04, 0x2e, 0x93, 0x42, 0x4d, 0x9b, 0x3a, 0xc1, 0x4a, 0x5d, 0x2a, 0x73, 0xa1, 0x14, 0x12, 0xe5,
+ 0x8b, 0xa8, 0x31, 0x3e, 0x38, 0x2a, 0x9d, 0xa9, 0x72, 0x15, 0x4e, 0xfa, 0xa0, 0x56, 0x71, 0x58,
+ 0xc2, 0xef, 0x2b, 0xdd, 0x2a, 0xdd, 0xdd, 0x81, 0x25, 0x5b, 0x39, 0xd5, 0x9d, 0xe9, 0xd9, 0x3c,
+ 0x7d, 0xac, 0x83, 0x41, 0x4a, 0x43, 0x0b, 0x06, 0x49, 0xa7, 0xa3, 0x7c, 0x3d, 0x07, 0xba, 0x9f,
+ 0x98, 0x74, 0x1d, 0xb3, 0x1c, 0xc7, 0x0d, 0xa4, 0xe5, 0x36, 0x93, 0x56, 0xaa, 0x29, 0xca, 0xb3,
+ 0x95, 0x90, 0x6a, 0x2c, 0x6f, 0x9b, 0x01, 0x41, 0x93, 0x39, 0x39, 0xd0, 0x26, 0x1a, 0x71, 0x01,
+ 0xbc, 0x3e, 0x80, 0x66, 0x9c, 0xc0, 0x32, 0x73, 0xf9, 0x4d, 0x38, 0x17, 0x6f, 0x6d, 0x3f, 0x3d,
+ 0x9a, 0xc6, 0x34, 0xf2, 0x27, 0x59, 0x18, 0x5d, 0xaf, 0x6c, 0x55, 0xf9, 0x2d, 0x67, 0x1d, 0x0a,
+ 0xfc, 0xca, 0x53, 0xba, 0xe8, 0x0c, 0x64, 0xea, 0x70, 0xf3, 0x18, 0xff, 0x89, 0x82, 0x38, 0x59,
+ 0x66, 0x22, 0x70, 0x9f, 0x3a, 0xfd, 0x99, 0x0f, 0x4b, 0x42, 0x4a, 0xee, 0x53, 0x07, 0x45, 0x75,
+ 0xb2, 0x00, 0x79, 0x87, 0x7d, 0x67, 0x5f, 0x8f, 0x56, 0x8a, 0x77, 0xb0, 0x98, 0xde, 0xc1, 0x2b,
+ 0xf3, 0x87, 0x6f, 0x3d, 0x5a, 0xa7, 0x4e, 0x60, 0x5b, 0xcd, 0xfe, 0x7c, 0xf9, 0xc4, 0xc3, 0xb7,
+ 0xba, 0x32, 0x1a, 0x84, 0xca, 0x3f, 0xc8, 0xc0, 0x88, 0x7c, 0x7a, 0x8b, 0x34, 0xa1, 0xe8, 0x58,
+ 0xdc, 0x61, 0x39, 0xb5, 0xfb, 0xe3, 0x3a, 0xa7, 0xa3, 0xaf, 0x85, 0xf8, 0xea, 0x17, 0x65, 0x28,
+ 0x79, 0x90, 0x3d, 0x28, 0x52, 0xf1, 0xe8, 0x55, 0xea, 0xb4, 0x70, 0xec, 0x03, 0xcc, 0x08, 0x0e,
+ 0xf9, 0xcc, 0x95, 0xa4, 0x5f, 0xfe, 0x61, 0x06, 0x20, 0x44, 0x39, 0x6e, 0xe3, 0xfb, 0x71, 0x28,
+ 0xd5, 0x9a, 0x1d, 0x3f, 0xa0, 0x9e, 0x76, 0xca, 0x14, 0x4f, 0x56, 0xa8, 0x42, 0x0c, 0xe1, 0xe4,
+ 0x35, 0x29, 0xc2, 0xc4, 0xe6, 0x37, 0xad, 0xa4, 0xcf, 0xe3, 0x87, 0x33, 0xe3, 0x3c, 0x10, 0x51,
+ 0x99, 0x5a, 0x44, 0x68, 0x5a, 0xdc, 0x2c, 0x9d, 0x1f, 0xa0, 0x59, 0xba, 0xfc, 0x7b, 0x45, 0x38,
+ 0x17, 0x4f, 0x72, 0x75, 0xdc, 0xb7, 0x1a, 0x8f, 0x43, 0x65, 0x8f, 0x79, 0x1c, 0x2a, 0x79, 0xf3,
+ 0xce, 0x3d, 0xd9, 0xcd, 0x3b, 0x7f, 0xd2, 0xcd, 0x7b, 0x68, 0xd6, 0x9b, 0x88, 0x3d, 0xa6, 0x98,
+ 0xd6, 0x1e, 0x13, 0x1f, 0xbf, 0x3e, 0x76, 0xef, 0xb7, 0xe5, 0x4c, 0x4c, 0x7d, 0xaf, 0xaa, 0x84,
+ 0x6c, 0x57, 0x60, 0xe5, 0x99, 0xeb, 0x07, 0x33, 0x50, 0xb8, 0xd7, 0xa1, 0x1d, 0x2a, 0x9d, 0xe8,
+ 0xb8, 0x60, 0xe5, 0xb9, 0x2c, 0x50, 0x94, 0xa7, 0xdb, 0xdd, 0xff, 0x41, 0x0e, 0xc6, 0xd8, 0xb7,
+ 0x9e, 0xd0, 0x00, 0xd1, 0xc7, 0x52, 0x31, 0x4e, 0xb3, 0xb9, 0x33, 0x3c, 0xcd, 0x3e, 0x69, 0x63,
+ 0xc6, 0x90, 0x97, 0x5a, 0xf9, 0x87, 0x05, 0x98, 0x8c, 0x26, 0x33, 0x22, 0x9f, 0x80, 0xb1, 0x3d,
+ 0xd7, 0x0f, 0xa4, 0xdb, 0xaa, 0x1c, 0x3b, 0xad, 0x3e, 0xdd, 0x08, 0x41, 0x68, 0xe2, 0x9d, 0xf8,
+ 0xea, 0x44, 0xbe, 0x57, 0x1c, 0xbf, 0x3a, 0x91, 0x6f, 0x1a, 0xa3, 0x82, 0xff, 0xd5, 0xc1, 0x26,
+ 0x59, 0x36, 0x7e, 0xb9, 0xfb, 0x60, 0x73, 0x67, 0x50, 0x79, 0xac, 0x3e, 0xc0, 0xe7, 0x9a, 0x74,
+ 0x62, 0xe9, 0x57, 0xa6, 0x60, 0x32, 0xaa, 0x3d, 0xb1, 0x51, 0xd5, 0x9e, 0x5c, 0x19, 0x6e, 0xb7,
+ 0x33, 0x9e, 0x68, 0xe9, 0xf2, 0xe6, 0x52, 0x2a, 0x49, 0xf6, 0x44, 0x2a, 0x49, 0xdc, 0x2b, 0x28,
+ 0x77, 0xf6, 0x5e, 0x41, 0xc9, 0xee, 0x67, 0xf9, 0x27, 0xe9, 0x7e, 0xf6, 0xb4, 0xf8, 0x74, 0x7d,
+ 0x37, 0xee, 0xe2, 0x54, 0x4c, 0x9b, 0xbb, 0x23, 0x3a, 0xf5, 0x06, 0xe3, 0xe4, 0x34, 0x32, 0x20,
+ 0x27, 0x27, 0xd3, 0x7d, 0x6c, 0x74, 0xe8, 0xee, 0x63, 0x09, 0x2e, 0x55, 0xa5, 0x21, 0xb8, 0x54,
+ 0x95, 0xa1, 0xd8, 0xb2, 0x1e, 0x54, 0x1a, 0x2a, 0xf0, 0x93, 0x0b, 0x94, 0x35, 0x5e, 0x82, 0x12,
+ 0x72, 0xe6, 0x6e, 0x57, 0xc9, 0xbe, 0x4b, 0xe3, 0xa7, 0xf2, 0x5d, 0x4a, 0x74, 0xe1, 0x9a, 0x48,
+ 0xe9, 0xc2, 0x35, 0x79, 0x62, 0x17, 0xae, 0xa9, 0x14, 0x2e, 0x5c, 0x1f, 0x82, 0x91, 0x96, 0xf5,
+ 0x60, 0xcd, 0x97, 0x5e, 0x57, 0x79, 0xe1, 0x44, 0xb2, 0x26, 0x8a, 0x50, 0xc1, 0x58, 0xc3, 0x5a,
+ 0xd6, 0x83, 0xf9, 0xc3, 0x80, 0xfa, 0x3c, 0xe0, 0x52, 0x7a, 0x67, 0xad, 0xc9, 0x32, 0xd4, 0x50,
+ 0x49, 0xb0, 0xda, 0xd9, 0xf1, 0xb9, 0xaf, 0x55, 0x48, 0x90, 0x15, 0xa1, 0x82, 0xf5, 0xeb, 0x61,
+ 0x45, 0x56, 0xe1, 0xa2, 0x67, 0xed, 0x06, 0x37, 0xa8, 0xe5, 0x05, 0x3b, 0xd4, 0x0a, 0x94, 0x13,
+ 0xcb, 0x45, 0xbd, 0x03, 0x5c, 0xc4, 0x04, 0x38, 0x26, 0xd6, 0x22, 0x2b, 0x70, 0x81, 0x95, 0x2f,
+ 0x35, 0x85, 0x6a, 0xa1, 0x88, 0x3d, 0x2b, 0xc2, 0x83, 0x1f, 0x3d, 0x9c, 0xb9, 0x80, 0xdd, 0x60,
+ 0x4c, 0xaa, 0x43, 0x3e, 0x05, 0xe7, 0x58, 0xf1, 0x2a, 0xb5, 0x7c, 0xaa, 0xe8, 0x5c, 0x12, 0xde,
+ 0x52, 0x6c, 0x26, 0x62, 0x0c, 0x86, 0x5d, 0xd8, 0x64, 0x01, 0xce, 0xb3, 0xb2, 0x05, 0xb7, 0xd5,
+ 0xb2, 0xf5, 0x77, 0x3d, 0x27, 0x22, 0x9d, 0xb8, 0x53, 0x43, 0x1c, 0x88, 0xdd, 0xf8, 0xe9, 0x3d,
+ 0xd0, 0xbe, 0x95, 0x87, 0x73, 0x1b, 0x6d, 0xea, 0xdc, 0xdd, 0xb3, 0xfd, 0x7d, 0x75, 0x5e, 0xb8,
+ 0x0a, 0x79, 0xa6, 0x53, 0xc6, 0x13, 0x20, 0x30, 0xa5, 0x13, 0x39, 0xc4, 0xbc, 0x1f, 0xca, 0x1e,
+ 0x73, 0x3f, 0x34, 0x07, 0x25, 0xc7, 0x6a, 0x51, 0xbf, 0x6d, 0xd5, 0xba, 0x5e, 0x2a, 0x5e, 0x57,
+ 0x00, 0x0c, 0x71, 0x08, 0x42, 0x89, 0xed, 0xdf, 0xa7, 0x88, 0xec, 0x14, 0x81, 0x5e, 0xaa, 0x2e,
+ 0x86, 0x64, 0xc8, 0xeb, 0x00, 0x16, 0x1f, 0x3f, 0xbe, 0x46, 0x0b, 0xd1, 0x67, 0x21, 0x2b, 0x1a,
+ 0x82, 0x06, 0x96, 0x79, 0xd6, 0x29, 0x3e, 0xb1, 0xb3, 0xce, 0xc8, 0x59, 0x9f, 0x75, 0xca, 0x9f,
+ 0x81, 0xf3, 0x5d, 0x71, 0xdd, 0xec, 0x58, 0x21, 0x12, 0x2c, 0x64, 0xa2, 0xc7, 0x8a, 0x48, 0x5a,
+ 0x85, 0x19, 0x28, 0xf0, 0x51, 0x94, 0x69, 0x31, 0xf8, 0xa1, 0x96, 0x8f, 0x30, 0x8a, 0xf2, 0x32,
+ 0xc2, 0xb8, 0x99, 0xd4, 0xee, 0xf8, 0x64, 0x75, 0x3a, 0x15, 0x47, 0xb6, 0x57, 0x2a, 0x8e, 0xf2,
+ 0xf7, 0xb2, 0x70, 0x21, 0x41, 0x31, 0x63, 0x0b, 0x54, 0x3e, 0xc8, 0x14, 0xca, 0xe6, 0x4c, 0xb8,
+ 0x40, 0xab, 0x31, 0x18, 0x76, 0x61, 0x93, 0x2f, 0xb0, 0x39, 0x53, 0xa3, 0xbe, 0xbf, 0xe6, 0xd6,
+ 0x55, 0x0b, 0x7e, 0x46, 0xcc, 0x17, 0x55, 0xfa, 0xf8, 0xe1, 0xcc, 0x87, 0xc5, 0xcc, 0x9c, 0xb3,
+ 0xda, 0xf6, 0x1c, 0x9b, 0x99, 0x73, 0x07, 0x86, 0xa2, 0x18, 0xdc, 0x71, 0x9b, 0x9d, 0x16, 0x0d,
+ 0x2b, 0xa0, 0x41, 0x92, 0xbc, 0x05, 0x70, 0xc0, 0xe1, 0x55, 0xfb, 0x5d, 0xa5, 0x9e, 0x1e, 0xf9,
+ 0xca, 0xe8, 0xac, 0x7a, 0xac, 0x70, 0xf6, 0x76, 0xc7, 0x72, 0x02, 0x26, 0xe0, 0xb9, 0xf0, 0xbc,
+ 0xa3, 0xa9, 0xa0, 0x41, 0xb1, 0xfc, 0x6b, 0x45, 0x38, 0xdf, 0x95, 0x8d, 0x9c, 0x7b, 0x12, 0xe8,
+ 0xc8, 0xec, 0x98, 0xa7, 0x56, 0x62, 0x3c, 0xf6, 0x9b, 0x30, 0xc9, 0x8f, 0x8d, 0x9b, 0xb1, 0x78,
+ 0x6e, 0x7d, 0xc3, 0xbe, 0x15, 0x81, 0x62, 0x0c, 0xfb, 0x64, 0x3e, 0x51, 0x6f, 0xc2, 0xa4, 0xdf,
+ 0xd9, 0x11, 0xcf, 0x06, 0x8b, 0x24, 0x25, 0xf9, 0x28, 0x93, 0x6a, 0x04, 0x8a, 0x31, 0x6c, 0xd2,
+ 0x80, 0x73, 0xa1, 0xe9, 0x57, 0xda, 0x20, 0x0b, 0xfd, 0xc8, 0x0e, 0x3e, 0x2b, 0x16, 0x62, 0x24,
+ 0xb0, 0x8b, 0x28, 0xd9, 0x81, 0xcb, 0x22, 0xae, 0xda, 0x6c, 0x50, 0x2c, 0x9d, 0x56, 0x59, 0x36,
+ 0xfa, 0xf2, 0x62, 0x4f, 0x4c, 0x3c, 0x82, 0x4a, 0xe4, 0xac, 0x3b, 0x72, 0xec, 0x59, 0x37, 0x12,
+ 0xd3, 0x3d, 0x9a, 0x36, 0xa6, 0xbb, 0x6b, 0xc2, 0x9c, 0xea, 0x38, 0x5a, 0x7a, 0x0a, 0x8e, 0xa3,
+ 0x7f, 0x6f, 0x8c, 0x2d, 0x8f, 0x58, 0xee, 0x66, 0xa6, 0xb4, 0xf2, 0x19, 0x29, 0xae, 0xc1, 0xa4,
+ 0xd2, 0xca, 0xa7, 0xaa, 0x8f, 0x12, 0x72, 0x82, 0x10, 0x66, 0x69, 0x71, 0xcb, 0xf5, 0xb0, 0xb8,
+ 0xb5, 0xe1, 0x42, 0xd0, 0xf4, 0xb7, 0xbc, 0x8e, 0x1f, 0x2c, 0x50, 0x2f, 0x38, 0x95, 0xd1, 0x9c,
+ 0xeb, 0x2b, 0x5b, 0xab, 0xd5, 0x38, 0x15, 0x4c, 0x22, 0xcd, 0xa6, 0x6d, 0xd0, 0xf4, 0x2b, 0xcd,
+ 0xa6, 0x7b, 0x5f, 0xe5, 0x73, 0x09, 0xcd, 0x2e, 0xd2, 0xa0, 0xa2, 0xa7, 0xed, 0xd6, 0x6a, 0xb5,
+ 0x07, 0x26, 0x1e, 0x41, 0x85, 0xac, 0xf1, 0xaf, 0xba, 0x63, 0x35, 0xed, 0xba, 0x15, 0xf0, 0x7c,
+ 0x50, 0x5c, 0x76, 0x8b, 0x35, 0xa1, 0xb3, 0x3f, 0x6c, 0xad, 0x56, 0xe3, 0x28, 0x98, 0x54, 0x4f,
+ 0xd9, 0x70, 0x46, 0x86, 0x68, 0xdf, 0x4e, 0x30, 0x6d, 0x8d, 0x3e, 0x59, 0xd3, 0x56, 0xa9, 0xbf,
+ 0xe5, 0x0e, 0xe9, 0x97, 0x7b, 0x6c, 0x01, 0xf4, 0xb1, 0xdc, 0xeb, 0x30, 0xa5, 0x35, 0x2c, 0x39,
+ 0x83, 0xc7, 0xfa, 0x8e, 0x54, 0xaf, 0x44, 0x29, 0x60, 0x9c, 0xe4, 0xd9, 0x3b, 0x09, 0xfe, 0x56,
+ 0x06, 0xce, 0xb1, 0x46, 0x54, 0x82, 0x3d, 0xea, 0xbc, 0xcb, 0xb5, 0x24, 0xf5, 0x64, 0xab, 0x35,
+ 0xc8, 0x8e, 0xae, 0xc4, 0x78, 0x88, 0x0e, 0xd7, 0x87, 0xd9, 0x38, 0x18, 0xbb, 0x1a, 0xc5, 0x36,
+ 0xbd, 0xb0, 0x4c, 0x8e, 0xc0, 0x64, 0xdf, 0x9b, 0x5e, 0x25, 0x46, 0x02, 0xbb, 0x88, 0xa6, 0x92,
+ 0xb3, 0x97, 0x17, 0xe0, 0xd9, 0xc4, 0x4f, 0xed, 0x4b, 0x58, 0x7f, 0x07, 0x60, 0x42, 0x74, 0xe1,
+ 0x20, 0xbd, 0x2a, 0xa3, 0xba, 0x76, 0xee, 0xcc, 0xef, 0x15, 0x8c, 0x23, 0x46, 0xfe, 0x0c, 0x8f,
+ 0x18, 0x3d, 0xb6, 0x9f, 0xc2, 0x93, 0xda, 0x7e, 0x8a, 0xc3, 0xdc, 0x7e, 0x46, 0xd2, 0x6d, 0x3f,
+ 0x43, 0x73, 0x0c, 0x4d, 0x90, 0x9e, 0xa5, 0xc1, 0x4b, 0xcf, 0xe4, 0x4d, 0x0e, 0xce, 0x7e, 0x93,
+ 0xfb, 0xcd, 0x24, 0xa9, 0x3a, 0x96, 0xf6, 0x4d, 0xdc, 0x88, 0x48, 0x18, 0x92, 0x44, 0x1d, 0x1f,
+ 0x86, 0x44, 0x1d, 0x88, 0x50, 0xfc, 0xc5, 0x0c, 0x94, 0xd0, 0x0a, 0x28, 0x8f, 0x00, 0x20, 0xaf,
+ 0x43, 0xbe, 0xe3, 0xd8, 0xca, 0x6a, 0x73, 0x45, 0x69, 0xa5, 0xdb, 0x8e, 0x1d, 0x3c, 0x7e, 0x38,
+ 0x33, 0xa9, 0x11, 0x29, 0x2b, 0x41, 0x8e, 0x4b, 0x2a, 0x30, 0xc5, 0x3d, 0xa1, 0x7d, 0x1e, 0x25,
+ 0xc0, 0x00, 0x32, 0xa0, 0x5e, 0x3b, 0x60, 0x62, 0x14, 0x8c, 0x71, 0xfc, 0xf2, 0x97, 0x8b, 0xf2,
+ 0xb1, 0x8c, 0x01, 0xdc, 0x5e, 0x0e, 0x3a, 0xbb, 0x67, 0xff, 0xc6, 0xa7, 0xcb, 0x90, 0xad, 0xef,
+ 0x70, 0x45, 0xbc, 0x10, 0xa6, 0xb5, 0x5c, 0x9c, 0xc7, 0x6c, 0x7d, 0x87, 0xbc, 0x02, 0xa3, 0xf2,
+ 0x5a, 0x54, 0xa5, 0x7e, 0xe4, 0x6c, 0xe5, 0x9d, 0xa9, 0x8f, 0x1a, 0x3a, 0xf4, 0xeb, 0xc7, 0xc1,
+ 0x86, 0xca, 0xc4, 0x47, 0xef, 0x83, 0xec, 0x58, 0xd9, 0x9f, 0xae, 0xfc, 0x9a, 0x91, 0x7e, 0x16,
+ 0xa2, 0x4e, 0xbc, 0xdd, 0xb9, 0x65, 0xd3, 0x9d, 0x26, 0xff, 0x71, 0x11, 0x2e, 0x25, 0x3f, 0xe3,
+ 0xf2, 0x81, 0x59, 0x0c, 0x62, 0x6e, 0xe7, 0x12, 0xe7, 0xf6, 0x87, 0x60, 0x44, 0xc4, 0xf3, 0xaa,
+ 0xa4, 0x59, 0xdc, 0x7e, 0x2f, 0xbe, 0xc5, 0x47, 0x05, 0x23, 0x37, 0x81, 0x88, 0xbb, 0x81, 0x05,
+ 0xb7, 0xe3, 0x04, 0x9b, 0xd4, 0x43, 0x6a, 0xd5, 0x65, 0x6c, 0x87, 0xbe, 0x3e, 0x59, 0xeb, 0xc2,
+ 0xc0, 0x84, 0x5a, 0x3c, 0xcd, 0x57, 0x57, 0x40, 0xa3, 0x99, 0xe6, 0xeb, 0xa8, 0xd8, 0xa8, 0x61,
+ 0x1f, 0x0e, 0xbf, 0xd1, 0x6d, 0x54, 0x79, 0x6b, 0xd0, 0xef, 0xfb, 0x7c, 0x80, 0x2d, 0x2b, 0x67,
+ 0xb9, 0x72, 0xfe, 0x38, 0x0f, 0x17, 0x12, 0xde, 0x59, 0x8d, 0xca, 0xee, 0xcc, 0x09, 0x64, 0x77,
+ 0x53, 0x77, 0x52, 0xea, 0xac, 0xc3, 0xaa, 0x3d, 0x47, 0xf4, 0xd0, 0x37, 0x32, 0x70, 0x91, 0x87,
+ 0xb3, 0xaa, 0x1b, 0x0f, 0x59, 0x45, 0x1a, 0x72, 0xdf, 0x38, 0xd9, 0x9b, 0x36, 0xd7, 0x13, 0x28,
+ 0x84, 0xa1, 0x7d, 0x49, 0x50, 0x4c, 0xe4, 0x4a, 0x16, 0x00, 0xf4, 0xf3, 0x2c, 0x6a, 0x0d, 0xbf,
+ 0xc4, 0x8e, 0x1e, 0xfa, 0xfd, 0x16, 0xff, 0x31, 0x0f, 0x95, 0x35, 0x3a, 0x9a, 0x1b, 0xac, 0x8c,
+ 0x6a, 0xe4, 0x6b, 0xdd, 0x8f, 0x65, 0x7c, 0x6e, 0xa0, 0x8f, 0xe7, 0x9e, 0x7c, 0xca, 0xa7, 0x9b,
+ 0x53, 0xbf, 0x91, 0x83, 0xc9, 0xe8, 0x18, 0x92, 0x97, 0xa1, 0xd8, 0xf6, 0xe8, 0xae, 0xfd, 0x40,
+ 0xce, 0xa5, 0xf0, 0xa9, 0x7a, 0x5e, 0x8a, 0x12, 0x4a, 0xde, 0x89, 0x39, 0xa0, 0xcf, 0xa7, 0x89,
+ 0xab, 0x51, 0x6e, 0xca, 0x3d, 0xd2, 0x01, 0xbc, 0xa3, 0x5f, 0x0b, 0xca, 0x0d, 0x9e, 0x57, 0xf4,
+ 0xa5, 0x20, 0xf2, 0x39, 0x28, 0xd5, 0x3c, 0x6a, 0x05, 0xb4, 0x3e, 0x7f, 0x28, 0x2d, 0x8d, 0xfd,
+ 0xbc, 0xbb, 0xa4, 0x97, 0xde, 0x82, 0x22, 0x82, 0x21, 0x3d, 0x7e, 0xbf, 0xb6, 0x1b, 0x50, 0x8f,
+ 0x27, 0xe3, 0x90, 0xe6, 0xc4, 0xf0, 0x7e, 0x4d, 0x43, 0xd0, 0xc0, 0x2a, 0xff, 0x61, 0x11, 0x20,
+ 0x7c, 0xf5, 0x9a, 0x49, 0x1c, 0xea, 0xd4, 0xdb, 0xae, 0xed, 0x28, 0x15, 0x56, 0xcf, 0x8e, 0x25,
+ 0x59, 0x8e, 0x1a, 0x83, 0xec, 0x42, 0x51, 0x3e, 0x7d, 0x9f, 0x4d, 0xeb, 0x2e, 0x51, 0xfd, 0xd8,
+ 0x3c, 0xa7, 0x24, 0x56, 0xb9, 0xf8, 0x1f, 0x25, 0x75, 0x36, 0x6b, 0x3c, 0xda, 0x08, 0x93, 0x0c,
+ 0xe8, 0xde, 0x45, 0x5e, 0x8a, 0x12, 0x1a, 0xc9, 0x9f, 0x9d, 0x3f, 0x36, 0x7f, 0x36, 0x42, 0x49,
+ 0xdc, 0x03, 0xdd, 0xa2, 0x87, 0xfd, 0x1d, 0xbb, 0xc5, 0x15, 0xa7, 0xaa, 0x8b, 0x21, 0x19, 0x46,
+ 0xd3, 0x57, 0xe8, 0xfd, 0xe5, 0xa5, 0x14, 0x69, 0x54, 0x54, 0x31, 0x86, 0x64, 0x8c, 0x54, 0xbc,
+ 0x23, 0x3d, 0x53, 0xf1, 0xee, 0xc6, 0x54, 0xc0, 0x54, 0x23, 0x71, 0x84, 0xbc, 0x7d, 0xaf, 0x3b,
+ 0x75, 0x2d, 0x0e, 0xe2, 0xb9, 0xf5, 0x3e, 0x76, 0xe1, 0xb7, 0x60, 0xa2, 0x66, 0x2d, 0x50, 0x56,
+ 0xd1, 0xae, 0x59, 0x01, 0x95, 0xe7, 0xe8, 0x7e, 0x92, 0xb0, 0x2f, 0x54, 0x8c, 0xfa, 0x18, 0x25,
+ 0x97, 0x4e, 0xe4, 0xdd, 0x82, 0x51, 0x35, 0x93, 0xc9, 0x8b, 0x46, 0xbd, 0xd0, 0x36, 0xc6, 0x06,
+ 0x97, 0x13, 0x39, 0xfe, 0x56, 0xf5, 0xb3, 0x8c, 0x58, 0x9f, 0x82, 0xf3, 0x65, 0x28, 0xfa, 0x9d,
+ 0x5d, 0x86, 0x17, 0x7b, 0xed, 0xa9, 0xca, 0x4b, 0x51, 0x42, 0xcb, 0xff, 0x33, 0x03, 0x10, 0xc6,
+ 0x7a, 0xb2, 0x6d, 0xbe, 0x45, 0xd9, 0xc9, 0xc9, 0xf6, 0x5b, 0xf1, 0x6d, 0x7e, 0x4d, 0x01, 0x30,
+ 0xc4, 0x21, 0xdb, 0x00, 0x4c, 0xf1, 0x38, 0x4d, 0xfe, 0x1b, 0x7e, 0x5b, 0xba, 0xad, 0x2b, 0xa3,
+ 0x41, 0x88, 0x58, 0x30, 0xa9, 0x34, 0x65, 0x49, 0xba, 0xaf, 0xa0, 0x16, 0x1e, 0x39, 0xba, 0x19,
+ 0x21, 0x80, 0x31, 0x82, 0xe5, 0xbf, 0x3b, 0x02, 0x53, 0xb1, 0x47, 0x02, 0x9f, 0xfa, 0xa7, 0xd7,
+ 0xcc, 0x17, 0x3e, 0x72, 0x83, 0x7e, 0xe1, 0x23, 0x3f, 0x88, 0x63, 0x4f, 0xfc, 0x15, 0x99, 0xc2,
+ 0x20, 0x5f, 0x91, 0x59, 0x85, 0x11, 0x99, 0x4e, 0xb8, 0x3f, 0x99, 0xcb, 0x8f, 0x57, 0xea, 0xd8,
+ 0xa7, 0x48, 0x0c, 0x38, 0x5e, 0x32, 0x36, 0xd5, 0x3e, 0xc8, 0xc7, 0xfa, 0x4d, 0xb8, 0xd8, 0x76,
+ 0x9b, 0x4d, 0x15, 0xed, 0xbb, 0xd8, 0x91, 0xaf, 0x36, 0x96, 0xa2, 0x6f, 0x73, 0x6c, 0x26, 0xe0,
+ 0x60, 0x62, 0xcd, 0x74, 0xb2, 0xf4, 0xdf, 0x14, 0x61, 0x32, 0xfa, 0xa0, 0xfd, 0x13, 0x79, 0xa1,
+ 0x8c, 0x5f, 0x52, 0x54, 0x3c, 0x27, 0xfe, 0x42, 0xd9, 0x96, 0x2c, 0x47, 0x8d, 0x11, 0xd5, 0x28,
+ 0x72, 0x43, 0xd0, 0x28, 0xf2, 0x83, 0xd1, 0x28, 0x42, 0x7d, 0xaa, 0x70, 0xa4, 0x3e, 0xf5, 0x2a,
+ 0x8c, 0x78, 0x6e, 0x93, 0x56, 0x70, 0x5d, 0x9a, 0x05, 0xf4, 0x6d, 0x06, 0x8a, 0x62, 0x54, 0xf0,
+ 0x01, 0xfb, 0xe2, 0x47, 0x87, 0xbd, 0x8f, 0x35, 0x73, 0x1d, 0xce, 0x1f, 0xc8, 0x3b, 0x84, 0xaa,
+ 0xdd, 0x70, 0xac, 0x20, 0x7c, 0x4a, 0x45, 0x7b, 0x83, 0xde, 0x89, 0x23, 0x60, 0x77, 0x9d, 0x27,
+ 0x72, 0xd6, 0xd7, 0x9a, 0x37, 0x1c, 0xa7, 0x79, 0xa7, 0x5b, 0x58, 0xff, 0x64, 0x04, 0x26, 0xab,
+ 0xb7, 0x23, 0x0b, 0x2b, 0x32, 0x73, 0x33, 0x43, 0x98, 0xb9, 0xd9, 0x41, 0xcf, 0xdc, 0xa3, 0x4f,
+ 0x02, 0x2f, 0xa9, 0xd0, 0xae, 0x7c, 0xf4, 0xe2, 0xd1, 0x0c, 0xef, 0x22, 0x15, 0xb6, 0x87, 0x0b,
+ 0x37, 0x4e, 0x95, 0xf8, 0xa0, 0xc0, 0xb3, 0xfa, 0x18, 0x1b, 0x6f, 0x04, 0x8c, 0x71, 0xfc, 0x7e,
+ 0x56, 0x48, 0x7f, 0xfe, 0x44, 0x6f, 0xc2, 0x24, 0x6f, 0xa4, 0x74, 0x75, 0x5e, 0xa9, 0xcb, 0xec,
+ 0xf0, 0xda, 0x15, 0xeb, 0xb6, 0x09, 0x5d, 0xc4, 0x18, 0x76, 0x74, 0x3d, 0x96, 0x52, 0xaf, 0xc7,
+ 0xdb, 0xa7, 0x5c, 0x8f, 0x2f, 0x42, 0xae, 0xde, 0xbc, 0x27, 0x9f, 0x32, 0xd3, 0x3a, 0xf0, 0xe2,
+ 0xea, 0x6d, 0x64, 0xe5, 0xc6, 0x2a, 0x1b, 0x3b, 0xfb, 0x55, 0x36, 0x7e, 0xec, 0xf9, 0x96, 0x29,
+ 0x2d, 0xd4, 0xf7, 0x6d, 0xd7, 0x11, 0x7e, 0xb0, 0x13, 0xfd, 0x2b, 0x2d, 0x46, 0x75, 0x8c, 0x10,
+ 0x4b, 0xb7, 0x84, 0xff, 0x55, 0x06, 0x2e, 0x26, 0xe5, 0x4e, 0x39, 0xee, 0x42, 0xfe, 0x35, 0x18,
+ 0x15, 0x89, 0x54, 0x56, 0xea, 0xf2, 0x8e, 0x49, 0x7f, 0xbf, 0x20, 0xb7, 0xb2, 0x88, 0x1a, 0x83,
+ 0x50, 0x23, 0xfa, 0x78, 0x40, 0x51, 0xf0, 0xfa, 0x9c, 0x13, 0x06, 0x7e, 0x96, 0x7f, 0x3b, 0x03,
+ 0xe3, 0x66, 0xae, 0x93, 0x13, 0xbc, 0xfd, 0x76, 0x00, 0x25, 0xde, 0x19, 0xcb, 0x9e, 0xdb, 0x4a,
+ 0xaf, 0x78, 0xdf, 0x51, 0xa4, 0xc4, 0xfc, 0x11, 0xf2, 0x47, 0x17, 0x62, 0xc8, 0xaa, 0xfc, 0xf3,
+ 0x30, 0xaa, 0xa3, 0x50, 0x8e, 0x39, 0xdf, 0xcd, 0x41, 0xc9, 0x6d, 0xab, 0x87, 0xaf, 0x63, 0x69,
+ 0xeb, 0x36, 0x14, 0x00, 0x43, 0x1c, 0x26, 0xb3, 0xc4, 0x68, 0xc7, 0x5c, 0x34, 0x23, 0x29, 0x35,
+ 0xff, 0x69, 0x16, 0x8a, 0x55, 0xea, 0xf8, 0xae, 0x47, 0xde, 0x36, 0x56, 0xb8, 0x10, 0xd9, 0x1f,
+ 0x39, 0x99, 0x29, 0x49, 0x84, 0x6e, 0xb0, 0xc9, 0x17, 0x9a, 0x87, 0xc2, 0x32, 0x63, 0xf5, 0xee,
+ 0x42, 0xde, 0x6f, 0xd3, 0x01, 0x04, 0xd0, 0x8b, 0x16, 0x57, 0xdb, 0xb4, 0x16, 0x8e, 0x26, 0xfb,
+ 0x85, 0x9c, 0x3e, 0x71, 0xf4, 0xcb, 0xe7, 0x62, 0xa6, 0x2d, 0xa7, 0xe6, 0x74, 0xe4, 0xfb, 0xe7,
+ 0xe5, 0x3f, 0x66, 0x87, 0x5f, 0x8e, 0xb8, 0x6a, 0xfb, 0x01, 0xf9, 0x7c, 0x57, 0x47, 0xce, 0x9e,
+ 0xac, 0x23, 0x59, 0x6d, 0xde, 0x8d, 0x7a, 0x11, 0xa9, 0x92, 0x48, 0x9c, 0x4f, 0xc1, 0x0e, 0x68,
+ 0x4b, 0x59, 0x32, 0x3f, 0x95, 0xf6, 0xdb, 0xc2, 0x89, 0xb1, 0xc2, 0xc8, 0xa2, 0xa0, 0x5e, 0xfe,
+ 0x7e, 0x51, 0x7d, 0x13, 0xeb, 0x58, 0xf2, 0xa5, 0x0c, 0x8c, 0xd7, 0x69, 0x9b, 0x3a, 0x75, 0xea,
+ 0xd4, 0x6c, 0xaa, 0xf2, 0x89, 0xac, 0xa4, 0x14, 0xb0, 0x8b, 0x8a, 0xa4, 0x11, 0xa8, 0xb5, 0x68,
+ 0xb0, 0xc1, 0x08, 0x53, 0xe2, 0xc2, 0x68, 0x20, 0xdc, 0x02, 0xd4, 0xe7, 0x57, 0x52, 0xfb, 0xd6,
+ 0x18, 0x1a, 0xb8, 0x24, 0x8d, 0x9a, 0x09, 0x69, 0xc2, 0x68, 0x10, 0x4d, 0x30, 0x9f, 0xc2, 0x12,
+ 0xa6, 0xc3, 0xe7, 0xf8, 0xa1, 0x56, 0x87, 0xcb, 0x69, 0x0e, 0xe4, 0x26, 0x10, 0x99, 0xa2, 0x75,
+ 0xd9, 0xb2, 0x9b, 0xb4, 0x8e, 0x6e, 0xc7, 0xa9, 0x4b, 0xcb, 0xa3, 0xbe, 0x88, 0x5b, 0xea, 0xc2,
+ 0xc0, 0x84, 0x5a, 0xe4, 0x1a, 0x8c, 0x73, 0xfe, 0xf3, 0x1d, 0xdf, 0x08, 0x8f, 0xd0, 0x9d, 0xbc,
+ 0x64, 0xc0, 0x30, 0x82, 0x19, 0x49, 0xc4, 0x5f, 0x3c, 0x32, 0x11, 0xff, 0x2a, 0x5c, 0xf4, 0xe8,
+ 0x81, 0xcd, 0xf6, 0xa0, 0x1b, 0xb6, 0x1f, 0xb8, 0xde, 0x21, 0xf7, 0x45, 0x90, 0xc9, 0xda, 0x44,
+ 0x20, 0x4f, 0x02, 0x1c, 0x13, 0x6b, 0x91, 0xef, 0x66, 0x60, 0xa2, 0xe9, 0x36, 0x1a, 0xb6, 0xd3,
+ 0x10, 0x56, 0x6e, 0x79, 0x45, 0x77, 0x77, 0x10, 0x72, 0x62, 0x76, 0xd5, 0xa4, 0x2c, 0x14, 0x0d,
+ 0x7d, 0x29, 0x19, 0x81, 0x61, 0xb4, 0x11, 0x97, 0x3f, 0x05, 0xa4, 0xbb, 0x6e, 0xbf, 0x09, 0xa1,
+ 0xc7, 0x4d, 0x39, 0x42, 0xf6, 0xb4, 0x7c, 0x12, 0xe2, 0x21, 0xcd, 0x1a, 0x3e, 0x52, 0x32, 0x11,
+ 0x0b, 0xc6, 0x9a, 0x96, 0x1f, 0x6c, 0xb7, 0xd9, 0x69, 0x44, 0xdd, 0x38, 0xf7, 0x73, 0x43, 0xa0,
+ 0x6f, 0xb4, 0x57, 0x43, 0x32, 0x68, 0xd2, 0x64, 0x93, 0xd6, 0xdd, 0xf1, 0xa9, 0x77, 0x40, 0xeb,
+ 0xfc, 0x21, 0x75, 0x4b, 0x67, 0x33, 0xcc, 0x85, 0x93, 0x76, 0xa3, 0x0b, 0x03, 0x13, 0x6a, 0x95,
+ 0xff, 0x6b, 0x06, 0x46, 0x64, 0x9c, 0x5e, 0x24, 0x7a, 0x32, 0x33, 0xf4, 0xe8, 0xc9, 0x45, 0x28,
+ 0xb4, 0x5d, 0x2f, 0x50, 0x62, 0x65, 0x26, 0x59, 0x27, 0x13, 0x2f, 0x08, 0xb9, 0x5e, 0x10, 0x0a,
+ 0x4d, 0xf6, 0xcb, 0x47, 0x51, 0x99, 0xed, 0xd1, 0x2a, 0xd7, 0xca, 0x66, 0xdc, 0x33, 0x45, 0xe5,
+ 0x63, 0xd9, 0x0c, 0xf3, 0xb1, 0x6c, 0x96, 0x1f, 0xe5, 0xe1, 0x5c, 0xb5, 0x69, 0xd5, 0xf6, 0xcd,
+ 0xc3, 0xd3, 0x5b, 0x30, 0xe1, 0xdb, 0x0d, 0xc7, 0x76, 0x1a, 0xd2, 0xb8, 0x95, 0xe9, 0xdb, 0x22,
+ 0x5d, 0x35, 0xeb, 0x63, 0x94, 0xdc, 0xc0, 0xf2, 0x04, 0x19, 0xd6, 0x93, 0xdc, 0x99, 0x58, 0x4f,
+ 0x22, 0x1e, 0x32, 0xf9, 0xb4, 0x1e, 0x32, 0xf1, 0x7e, 0x3f, 0x95, 0x29, 0xad, 0xf0, 0x14, 0xc4,
+ 0x44, 0xfc, 0x2c, 0x8c, 0xf1, 0x6f, 0xad, 0xb2, 0x8d, 0x34, 0xea, 0x05, 0x90, 0x39, 0xce, 0x0b,
+ 0x80, 0xe9, 0xce, 0x76, 0x4d, 0x6b, 0x9c, 0x5a, 0xdb, 0x5a, 0xa9, 0xb9, 0x0e, 0x72, 0x48, 0xf9,
+ 0x9f, 0x65, 0x24, 0xfd, 0xad, 0x3d, 0x8f, 0x5a, 0x75, 0x52, 0x85, 0x67, 0x5b, 0xd4, 0xf7, 0xad,
+ 0x06, 0xad, 0x34, 0x1a, 0x1e, 0x6d, 0xf0, 0xa5, 0x7d, 0x4b, 0x6b, 0xb6, 0x3a, 0x49, 0xf9, 0x5a,
+ 0x12, 0x12, 0x26, 0xd7, 0x25, 0x5f, 0x80, 0xe7, 0x77, 0x3c, 0xd7, 0xaa, 0xd7, 0x2c, 0xa6, 0x10,
+ 0x71, 0x8c, 0x2d, 0x57, 0x3a, 0x69, 0xc9, 0x64, 0xd3, 0x3f, 0x2a, 0x09, 0x3f, 0x3f, 0xdf, 0x0b,
+ 0x11, 0x7b, 0xd3, 0x28, 0xff, 0xaf, 0x3c, 0x8c, 0x8b, 0xaf, 0x90, 0xae, 0xc8, 0x51, 0x37, 0xe2,
+ 0xcc, 0x99, 0xbb, 0x11, 0x6f, 0x03, 0xf8, 0xbc, 0x3d, 0xfd, 0x2f, 0x55, 0x7e, 0x23, 0x52, 0xd5,
+ 0x95, 0xd1, 0x20, 0xd4, 0x4f, 0x9a, 0x90, 0x57, 0x61, 0x44, 0x0e, 0x86, 0x34, 0x7b, 0x68, 0x54,
+ 0xd9, 0x7b, 0xa8, 0xe0, 0xe4, 0x13, 0x30, 0x66, 0x05, 0x81, 0x55, 0xdb, 0x6b, 0xc9, 0x37, 0x94,
+ 0x23, 0xde, 0x50, 0x95, 0x10, 0x84, 0x26, 0x1e, 0x7f, 0x80, 0xbd, 0xe9, 0xd6, 0xf6, 0xfd, 0xae,
+ 0x07, 0xd8, 0x79, 0x29, 0x4a, 0x28, 0x69, 0x41, 0x31, 0xe0, 0x93, 0x4b, 0xfa, 0x06, 0x2d, 0xa5,
+ 0x5c, 0xf5, 0x62, 0xa6, 0x86, 0xec, 0xc4, 0x6f, 0x94, 0x4c, 0x18, 0x3b, 0x9f, 0xaf, 0x15, 0x69,
+ 0x29, 0x4f, 0xcb, 0x4e, 0x2c, 0x3c, 0x63, 0x93, 0xe6, 0xbf, 0x51, 0x32, 0x29, 0xff, 0xf7, 0x1c,
+ 0x90, 0x6a, 0x60, 0x39, 0x75, 0xcb, 0xab, 0xdf, 0xba, 0xa6, 0x13, 0xfc, 0xb0, 0x53, 0x8c, 0x70,
+ 0x3e, 0x11, 0xf2, 0x3f, 0xc5, 0xe4, 0x53, 0xd7, 0xa2, 0xab, 0xae, 0x78, 0xbb, 0x54, 0xc8, 0x18,
+ 0x21, 0x75, 0x50, 0x72, 0x21, 0xeb, 0xdd, 0x07, 0xcc, 0x8f, 0x74, 0x1d, 0x30, 0x1f, 0x3f, 0x9c,
+ 0xf9, 0x91, 0x5b, 0x9d, 0x1d, 0xea, 0x39, 0x34, 0xa0, 0xbe, 0xf2, 0xc6, 0x48, 0x3c, 0x7f, 0x3e,
+ 0x69, 0x3f, 0xfc, 0x5d, 0x98, 0x68, 0x5b, 0x41, 0x4d, 0x67, 0x10, 0x91, 0x93, 0xf8, 0x53, 0x4a,
+ 0xeb, 0xdb, 0x34, 0x81, 0x8f, 0x1f, 0xce, 0xfc, 0x7f, 0x61, 0xd0, 0xa7, 0xd6, 0x8a, 0xe6, 0xda,
+ 0xfb, 0x8d, 0xb9, 0xe0, 0xb0, 0x4d, 0xfd, 0x59, 0x8e, 0xce, 0xef, 0xed, 0xa2, 0x64, 0xc9, 0xeb,
+ 0x00, 0x4d, 0xfb, 0x80, 0x8a, 0x13, 0x6f, 0xdc, 0x4d, 0x62, 0x55, 0x43, 0xd0, 0xc0, 0x2a, 0xff,
+ 0x42, 0x06, 0xa4, 0xaa, 0x46, 0xee, 0x03, 0xd4, 0x5c, 0xa7, 0x6e, 0x9b, 0x69, 0x1a, 0x17, 0x52,
+ 0x25, 0xeb, 0x10, 0xb4, 0xc2, 0x36, 0xe8, 0x22, 0x1f, 0x0d, 0x56, 0xe5, 0x39, 0x18, 0x17, 0x4d,
+ 0x90, 0xef, 0x68, 0xcc, 0x40, 0xc1, 0x6a, 0x36, 0xdd, 0xfb, 0xbc, 0x0d, 0x05, 0xb1, 0xdf, 0x73,
+ 0xb7, 0x7c, 0x14, 0xe5, 0xe5, 0xbf, 0x28, 0xc0, 0x25, 0x19, 0x62, 0x7b, 0xdd, 0xb3, 0xeb, 0x4f,
+ 0xf4, 0x22, 0x25, 0x74, 0x62, 0xc8, 0xf6, 0x74, 0x62, 0x08, 0x77, 0xe9, 0xd4, 0x6f, 0x83, 0x19,
+ 0x9f, 0x7d, 0xb4, 0x35, 0x50, 0xdf, 0xee, 0xe4, 0x8f, 0xbd, 0xdd, 0x79, 0x59, 0x7b, 0xbb, 0xc4,
+ 0x6e, 0x4d, 0x7a, 0x7a, 0xab, 0x14, 0x8f, 0xb4, 0x51, 0x47, 0x42, 0xec, 0x47, 0x06, 0x13, 0x62,
+ 0xff, 0x32, 0x14, 0xad, 0xb6, 0xbd, 0x8d, 0xab, 0xd2, 0x5c, 0x1c, 0xbe, 0x09, 0xbf, 0xb9, 0xb2,
+ 0x8d, 0xab, 0x28, 0xa1, 0x51, 0xcf, 0xca, 0x52, 0x5a, 0xcf, 0xca, 0xe4, 0x49, 0x76, 0x56, 0x6e,
+ 0x66, 0x35, 0x38, 0xdf, 0x35, 0xdc, 0x03, 0xf7, 0x97, 0x78, 0x3f, 0xcf, 0xb8, 0x78, 0x76, 0x9b,
+ 0x3e, 0xd1, 0x65, 0xf4, 0x49, 0x98, 0x10, 0xfe, 0x5e, 0x12, 0x22, 0x55, 0xa9, 0xd0, 0x5d, 0xd7,
+ 0x04, 0x62, 0x14, 0x97, 0xac, 0xf0, 0xc9, 0xd1, 0xf7, 0xdd, 0x24, 0xc8, 0xf9, 0xc3, 0xb4, 0x3d,
+ 0x49, 0x80, 0x7c, 0x14, 0xc6, 0x78, 0xfb, 0x45, 0x6f, 0x4b, 0x4f, 0x47, 0x9e, 0x86, 0x69, 0x29,
+ 0x2c, 0x46, 0x13, 0x27, 0x1a, 0x32, 0x59, 0x48, 0x1b, 0x32, 0xd9, 0x35, 0x16, 0x67, 0x35, 0xdb,
+ 0xbe, 0x94, 0x83, 0x92, 0xf6, 0x57, 0x26, 0x9f, 0x83, 0x71, 0xe1, 0x3d, 0x74, 0x9a, 0x93, 0x1f,
+ 0xbf, 0x21, 0x10, 0xbe, 0x48, 0xca, 0xad, 0xc1, 0x24, 0xc6, 0xc3, 0xe9, 0x79, 0x6e, 0x6b, 0x83,
+ 0x41, 0xb6, 0xff, 0x70, 0xfa, 0x18, 0x09, 0xec, 0x22, 0x4a, 0xea, 0x30, 0x25, 0xca, 0x42, 0xff,
+ 0x8c, 0x5c, 0xdf, 0x51, 0x50, 0x0b, 0x51, 0x0a, 0x18, 0x27, 0x49, 0x6e, 0x02, 0x51, 0xbe, 0x77,
+ 0xd5, 0x7d, 0xbb, 0xcd, 0xdf, 0x66, 0x3f, 0x8c, 0x5b, 0xcb, 0x56, 0xba, 0x30, 0x30, 0xa1, 0x56,
+ 0xf9, 0x3b, 0xa3, 0xa0, 0x0d, 0x72, 0x67, 0x6c, 0x79, 0x48, 0x4e, 0x5e, 0x94, 0x3d, 0x55, 0xf2,
+ 0xa2, 0x9b, 0x50, 0xd2, 0xc9, 0xc1, 0x64, 0x97, 0xbf, 0xd8, 0xe3, 0x49, 0x66, 0x81, 0x24, 0x53,
+ 0xc5, 0xaa, 0x9f, 0x18, 0x56, 0x27, 0x4b, 0x30, 0x22, 0xd2, 0x4e, 0xa8, 0xdc, 0x8c, 0x97, 0x93,
+ 0x28, 0x89, 0x2c, 0x15, 0x46, 0xa6, 0x18, 0x51, 0x05, 0x55, 0xdd, 0xa4, 0xb4, 0x54, 0x85, 0x21,
+ 0xa4, 0xa5, 0xfa, 0x66, 0x72, 0x66, 0xb1, 0xad, 0xf4, 0xd6, 0xda, 0x0f, 0x56, 0x4e, 0xb1, 0xa4,
+ 0xd4, 0x5a, 0xa3, 0x67, 0xfd, 0xa2, 0x61, 0x29, 0x65, 0x3a, 0x2c, 0x38, 0x71, 0x3a, 0xac, 0xb1,
+ 0xd3, 0xa7, 0xc3, 0x4a, 0x9f, 0x46, 0xa9, 0x0a, 0xb0, 0x65, 0xb7, 0x94, 0xab, 0xf9, 0x4b, 0x50,
+ 0xe0, 0x4f, 0x11, 0xc6, 0xb3, 0xe5, 0x08, 0x1f, 0x68, 0x01, 0x23, 0x57, 0x21, 0xef, 0x07, 0x6e,
+ 0x3b, 0x6e, 0x2d, 0xa9, 0x06, 0x6e, 0x1b, 0x39, 0xa4, 0xfc, 0xa5, 0x22, 0x8c, 0xa8, 0x13, 0x9e,
+ 0x6f, 0xdc, 0x2e, 0xa4, 0x7e, 0xbc, 0x5f, 0x12, 0x3d, 0xf6, 0x92, 0x21, 0x7a, 0x2c, 0xcb, 0x9e,
+ 0xf9, 0xb1, 0x6c, 0x1f, 0x8a, 0x6d, 0x7e, 0xe0, 0x90, 0x02, 0xea, 0x7a, 0x7a, 0xde, 0x9c, 0x9c,
+ 0xd0, 0x2b, 0xc4, 0xff, 0x28, 0x59, 0x90, 0x77, 0x61, 0xc2, 0xa3, 0x81, 0x77, 0x18, 0x39, 0x03,
+ 0x0e, 0x24, 0x48, 0x96, 0x9b, 0x59, 0xd1, 0xa4, 0x8d, 0x51, 0x56, 0xa4, 0x0d, 0x25, 0x4f, 0x85,
+ 0x67, 0xa6, 0xcf, 0x32, 0xab, 0x23, 0x3d, 0x85, 0xc8, 0xd6, 0x3f, 0x31, 0x64, 0x22, 0xac, 0x30,
+ 0xab, 0xd4, 0xf2, 0x83, 0x0d, 0xf5, 0x62, 0xee, 0xa8, 0x69, 0x85, 0xd1, 0x20, 0x34, 0xf1, 0xc8,
+ 0x3d, 0x80, 0x7a, 0xf3, 0x9e, 0xec, 0x4c, 0x79, 0x72, 0x18, 0xc0, 0xbd, 0x1a, 0xb7, 0x42, 0x2d,
+ 0x6a, 0xc2, 0x68, 0x30, 0x29, 0xff, 0xb7, 0x0c, 0x9c, 0x8b, 0xcf, 0x1c, 0xb2, 0x0f, 0x39, 0xdf,
+ 0x53, 0x39, 0xf2, 0x37, 0x07, 0x37, 0x25, 0xe5, 0x2d, 0x3c, 0x8f, 0x05, 0xab, 0x7a, 0x35, 0x64,
+ 0x5c, 0xd8, 0x4a, 0xd5, 0x0f, 0xd5, 0x19, 0x2b, 0x75, 0x91, 0xfa, 0x01, 0x72, 0x08, 0x59, 0x35,
+ 0xed, 0x21, 0xc2, 0x56, 0x36, 0x9b, 0x64, 0x0f, 0x79, 0x3e, 0xce, 0x2f, 0xc9, 0x1a, 0x52, 0xfe,
+ 0x5a, 0x0e, 0x2e, 0x25, 0x37, 0x8c, 0xbc, 0x09, 0x93, 0xfa, 0x96, 0xf3, 0xd0, 0xc8, 0x69, 0xa5,
+ 0x7d, 0x73, 0x16, 0x23, 0x50, 0x8c, 0x61, 0x93, 0xd7, 0xb9, 0x05, 0x81, 0x6d, 0x83, 0xca, 0x33,
+ 0xaa, 0x14, 0x39, 0xfc, 0x4b, 0x08, 0x1a, 0x58, 0xa4, 0x02, 0x53, 0xf2, 0x57, 0xe4, 0x01, 0xed,
+ 0x52, 0xe8, 0xab, 0xb4, 0x10, 0x05, 0x63, 0x1c, 0x9f, 0xbc, 0x0a, 0x23, 0x4c, 0x81, 0x51, 0x7e,
+ 0x84, 0x86, 0x79, 0x70, 0x51, 0x14, 0xa3, 0x82, 0x93, 0x6b, 0x30, 0xce, 0xfe, 0x8d, 0xa4, 0x24,
+ 0x35, 0x2e, 0x23, 0x17, 0x0d, 0x18, 0x46, 0x30, 0xc3, 0x37, 0x41, 0x8b, 0x61, 0x4e, 0x6d, 0xd3,
+ 0x81, 0x81, 0x7d, 0x7c, 0xc7, 0xa7, 0x68, 0xdd, 0x5f, 0x54, 0xaf, 0x34, 0x1b, 0xd6, 0x97, 0x6d,
+ 0x0d, 0x41, 0x03, 0xab, 0xfc, 0xc3, 0x0c, 0x4c, 0x44, 0x64, 0x07, 0xd9, 0x85, 0xdc, 0xfe, 0x35,
+ 0x75, 0x1d, 0x77, 0x6b, 0x80, 0x0f, 0x88, 0x8a, 0x59, 0x77, 0xeb, 0x9a, 0x8f, 0x8c, 0x01, 0x79,
+ 0x47, 0xdf, 0xfc, 0x65, 0x53, 0x7b, 0x26, 0x18, 0xb6, 0x1b, 0x69, 0xcf, 0x8b, 0x7a, 0x25, 0xfc,
+ 0x8b, 0x49, 0x98, 0x8a, 0x6d, 0x0a, 0x27, 0xf0, 0x84, 0x79, 0x3d, 0x62, 0x8e, 0xea, 0x9e, 0x4c,
+ 0x09, 0x96, 0x24, 0xd2, 0x10, 0xbd, 0x97, 0x4b, 0xfb, 0xa0, 0x5e, 0xb7, 0x11, 0x34, 0xd6, 0x7d,
+ 0x5f, 0xca, 0xc0, 0x38, 0xa3, 0x74, 0xd7, 0xf5, 0xf6, 0x77, 0x9b, 0xee, 0x7d, 0x29, 0xce, 0xd7,
+ 0xd2, 0x58, 0x46, 0x43, 0x6a, 0xda, 0x21, 0x80, 0xbf, 0x5c, 0x60, 0x00, 0x30, 0xc2, 0x94, 0xd4,
+ 0x20, 0xbf, 0x17, 0x04, 0x6d, 0x29, 0xd3, 0x53, 0x18, 0x87, 0x6f, 0x6c, 0x6d, 0x6d, 0x2a, 0xa6,
+ 0x3c, 0x7b, 0x3d, 0x2b, 0x40, 0x4e, 0x9c, 0xdc, 0x87, 0x92, 0x75, 0xdf, 0x5f, 0xb5, 0x5a, 0x3b,
+ 0x75, 0x4b, 0x7a, 0xa1, 0xa7, 0x31, 0x00, 0xdf, 0xad, 0x0a, 0x52, 0x8a, 0x9d, 0x30, 0xf9, 0xa8,
+ 0x52, 0x0c, 0x79, 0x11, 0x0f, 0x8a, 0xb5, 0x8e, 0x1f, 0xb8, 0x2d, 0xb9, 0x13, 0xa4, 0xd8, 0x9f,
+ 0x17, 0x38, 0x1d, 0xc5, 0x52, 0x84, 0xca, 0x98, 0x45, 0x28, 0x39, 0x91, 0x06, 0x14, 0xf6, 0xad,
+ 0xdd, 0x7d, 0x95, 0x26, 0x77, 0x79, 0x30, 0x6f, 0x6f, 0x09, 0x69, 0xc1, 0x4b, 0x50, 0xd0, 0x67,
+ 0x43, 0xe7, 0x58, 0x81, 0x2f, 0x9d, 0x70, 0x97, 0xd2, 0xbd, 0x3a, 0x10, 0x19, 0x3a, 0x56, 0x80,
+ 0x9c, 0x38, 0xfb, 0x1a, 0x7e, 0xe1, 0x22, 0x23, 0x89, 0x96, 0xd3, 0x5e, 0x56, 0x98, 0x5f, 0xc3,
+ 0x4b, 0x50, 0xd0, 0x67, 0x73, 0xc4, 0x55, 0x69, 0x3e, 0xa5, 0xaa, 0x9c, 0x62, 0x8e, 0xc4, 0x33,
+ 0x86, 0x8a, 0x39, 0xa2, 0x4b, 0x31, 0xe4, 0x45, 0xbe, 0x00, 0xb9, 0xa6, 0xdb, 0x48, 0xff, 0x3a,
+ 0x5c, 0xf8, 0x6a, 0x98, 0x58, 0xe8, 0xab, 0x6e, 0x03, 0x19, 0x65, 0xf2, 0xcb, 0x19, 0x98, 0xb4,
+ 0xde, 0xed, 0x78, 0xc2, 0x22, 0x73, 0xa3, 0xb3, 0xe3, 0x4b, 0x67, 0xc9, 0x8d, 0x14, 0x6b, 0x20,
+ 0x42, 0x4f, 0xf1, 0xe5, 0x21, 0x3e, 0x51, 0x10, 0xc6, 0x58, 0x73, 0x95, 0x95, 0xe7, 0x24, 0x91,
+ 0x89, 0x98, 0xae, 0x0f, 0x28, 0xb7, 0x89, 0x54, 0x59, 0x79, 0x11, 0x4a, 0x16, 0xe4, 0xbb, 0x19,
+ 0xbe, 0x35, 0x2b, 0x39, 0x4b, 0x7d, 0x1a, 0xc8, 0xc7, 0xe0, 0x6e, 0x0f, 0xe0, 0x56, 0x40, 0x10,
+ 0x5c, 0xf0, 0xec, 0x80, 0x7a, 0xb6, 0x15, 0xd9, 0xed, 0x4d, 0x04, 0x8c, 0x37, 0x81, 0x7c, 0x2b,
+ 0x03, 0x53, 0xbc, 0x5b, 0xa4, 0x29, 0x62, 0xbe, 0x23, 0xb2, 0x0c, 0xa7, 0xd2, 0xd4, 0x2a, 0x51,
+ 0x82, 0xaa, 0x5b, 0x44, 0x16, 0x9c, 0x28, 0x0c, 0xe3, 0xdc, 0xd9, 0x32, 0xa3, 0x2d, 0xcb, 0x6e,
+ 0xf2, 0x24, 0xc6, 0xa9, 0x96, 0xd9, 0x12, 0x23, 0x13, 0x59, 0x66, 0xbc, 0x04, 0x05, 0xfd, 0x72,
+ 0x0d, 0xc6, 0xb6, 0x71, 0x55, 0xc7, 0xb4, 0x1e, 0x9f, 0xe0, 0xf4, 0x75, 0x80, 0x03, 0x6e, 0x57,
+ 0x5a, 0xa0, 0x9e, 0x7a, 0x0a, 0x59, 0xef, 0xa1, 0x77, 0x34, 0x04, 0x0d, 0xac, 0xf2, 0x9f, 0x65,
+ 0x60, 0x2a, 0xe6, 0x37, 0x2a, 0xfc, 0x85, 0x95, 0xd7, 0x3a, 0xdd, 0x3d, 0x85, 0x35, 0xb0, 0x6a,
+ 0x54, 0xc7, 0x08, 0x31, 0xd2, 0xe0, 0xd3, 0x6c, 0xd7, 0x6e, 0xac, 0x59, 0x6d, 0x49, 0x5f, 0xe8,
+ 0x24, 0xaf, 0xf4, 0xb0, 0x18, 0x69, 0xd4, 0x98, 0x9d, 0x2e, 0x4a, 0x04, 0xe3, 0x54, 0xcb, 0xdf,
+ 0xcb, 0x40, 0x3c, 0xe2, 0x8c, 0xcc, 0x41, 0xa9, 0x6e, 0x7b, 0x9c, 0xca, 0x61, 0x3c, 0x40, 0x6e,
+ 0x51, 0x01, 0x30, 0xc4, 0xd1, 0x9d, 0x9e, 0x3d, 0xaa, 0xd3, 0xd9, 0x5f, 0xa4, 0x0d, 0xfa, 0xa0,
+ 0x2d, 0x95, 0x59, 0xe3, 0x2c, 0xaa, 0x20, 0x68, 0x60, 0x95, 0xff, 0x75, 0x01, 0x26, 0xa3, 0x76,
+ 0xf2, 0x3e, 0x23, 0x96, 0x5f, 0x86, 0x62, 0x8b, 0x06, 0x7b, 0x6e, 0x3d, 0x6e, 0xee, 0x5f, 0xe3,
+ 0xa5, 0x28, 0xa1, 0xbc, 0xf9, 0xae, 0x17, 0xc8, 0x66, 0x85, 0xcd, 0x77, 0xbd, 0x00, 0x39, 0x44,
+ 0x39, 0x5a, 0xe7, 0x7b, 0x38, 0x5a, 0x37, 0xe0, 0x1c, 0xf7, 0x96, 0xf2, 0x0c, 0xdb, 0x6d, 0xff,
+ 0xa9, 0x50, 0xab, 0x31, 0x12, 0xd8, 0x45, 0x94, 0xd4, 0x61, 0x4a, 0x94, 0x85, 0xb6, 0xdb, 0x62,
+ 0xdf, 0xb6, 0xdb, 0x6a, 0x94, 0x02, 0xc6, 0x49, 0x0e, 0x38, 0xbc, 0x27, 0x3a, 0x84, 0x7d, 0xf8,
+ 0xf1, 0x6c, 0x03, 0x58, 0x9d, 0x60, 0x4f, 0x7e, 0xe7, 0x68, 0xdf, 0x3e, 0x16, 0x15, 0x5d, 0x19,
+ 0x0d, 0x42, 0xe4, 0x0d, 0x98, 0x0c, 0xd3, 0x9d, 0xf3, 0x3c, 0xc0, 0xe2, 0x75, 0x67, 0xbe, 0xd7,
+ 0xac, 0x45, 0x20, 0x18, 0xc3, 0x4c, 0x77, 0x99, 0xf0, 0xed, 0x2c, 0x10, 0xd9, 0x19, 0xe6, 0xb5,
+ 0xd2, 0x57, 0x33, 0x30, 0x79, 0x3f, 0xd2, 0x47, 0x03, 0xbf, 0x5e, 0xd2, 0x67, 0xd5, 0x68, 0x39,
+ 0xc6, 0xf8, 0x1a, 0x77, 0xb2, 0xd9, 0x33, 0xf1, 0x9c, 0x9a, 0x7f, 0xeb, 0xfb, 0x3f, 0xb8, 0xf2,
+ 0xcc, 0x1f, 0xfd, 0xe0, 0xca, 0x33, 0x7f, 0xfe, 0x83, 0x2b, 0xcf, 0xbc, 0xf7, 0xe8, 0x4a, 0xe6,
+ 0xfb, 0x8f, 0xae, 0x64, 0xfe, 0xe8, 0xd1, 0x95, 0xcc, 0x9f, 0x3f, 0xba, 0x92, 0xf9, 0x0f, 0x8f,
+ 0xae, 0x64, 0xbe, 0xfd, 0xc3, 0x2b, 0xcf, 0x7c, 0xf6, 0x5a, 0xd8, 0x8a, 0x39, 0xd5, 0x0a, 0xfe,
+ 0xcf, 0x87, 0x05, 0x57, 0xee, 0x07, 0xc0, 0x5a, 0x31, 0x27, 0x7f, 0xab, 0x56, 0xfc, 0xdf, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0x9b, 0xb1, 0xdb, 0x22, 0x5a, 0x1c, 0x01, 0x00,
}
func (m *AMQPConsumeConfig) Marshal() (dAtA []byte, err error) {
@@ -8971,6 +8976,19 @@ func (m *EventSourceStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration))
+ i--
+ dAtA[i] = 0x18
+ {
+ size, err := m.LastUpdated.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
{
size, err := m.Status.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
@@ -14027,6 +14045,19 @@ func (m *SensorStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration))
+ i--
+ dAtA[i] = 0x18
+ {
+ size, err := m.LastUpdated.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
{
size, err := m.Status.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
@@ -17187,6 +17218,9 @@ func (m *EventSourceStatus) Size() (n int) {
_ = l
l = m.Status.Size()
n += 1 + l + sovGenerated(uint64(l))
+ l = m.LastUpdated.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ n += 1 + sovGenerated(uint64(m.ObservedGeneration))
return n
}
@@ -19026,6 +19060,9 @@ func (m *SensorStatus) Size() (n int) {
_ = l
l = m.Status.Size()
n += 1 + l + sovGenerated(uint64(l))
+ l = m.LastUpdated.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ n += 1 + sovGenerated(uint64(m.ObservedGeneration))
return n
}
@@ -20800,6 +20837,8 @@ func (this *EventSourceStatus) String() string {
}
s := strings.Join([]string{`&EventSourceStatus{`,
`Status:` + strings.Replace(strings.Replace(this.Status.String(), "Status", "Status", 1), `&`, ``, 1) + `,`,
+ `LastUpdated:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdated), "Time", "v11.Time", 1), `&`, ``, 1) + `,`,
+ `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`,
`}`,
}, "")
return s
@@ -22107,6 +22146,8 @@ func (this *SensorStatus) String() string {
}
s := strings.Join([]string{`&SensorStatus{`,
`Status:` + strings.Replace(strings.Replace(this.Status.String(), "Status", "Status", 1), `&`, ``, 1) + `,`,
+ `LastUpdated:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdated), "Time", "v11.Time", 1), `&`, ``, 1) + `,`,
+ `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`,
`}`,
}, "")
return s
@@ -37237,6 +37278,58 @@ func (m *EventSourceStatus) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field LastUpdated", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.LastUpdated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType)
+ }
+ m.ObservedGeneration = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.ObservedGeneration |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -54894,6 +54987,58 @@ func (m *SensorStatus) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field LastUpdated", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.LastUpdated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType)
+ }
+ m.ObservedGeneration = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.ObservedGeneration |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
diff --git a/pkg/apis/events/v1alpha1/generated.proto b/pkg/apis/events/v1alpha1/generated.proto
index abf1e566c4..cf131c90bd 100644
--- a/pkg/apis/events/v1alpha1/generated.proto
+++ b/pkg/apis/events/v1alpha1/generated.proto
@@ -1145,6 +1145,13 @@ message EventSourceSpec {
// EventSourceStatus holds the status of the event-source resource
message EventSourceStatus {
optional Status status = 1;
+
+ // +optional
+ optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastUpdated = 2;
+
+ // The generation observed by the controller.
+ // +optional
+ optional int64 observedGeneration = 3;
}
message ExprFilter {
@@ -2782,6 +2789,13 @@ message SensorSpec {
// SensorStatus contains information about the status of a sensor.
message SensorStatus {
optional Status status = 1;
+
+ // +optional
+ optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastUpdated = 2;
+
+ // The generation observed by the controller.
+ // +optional
+ optional int64 observedGeneration = 3;
}
// Service holds the service information eventsource exposes
diff --git a/pkg/apis/events/v1alpha1/openapi_generated.go b/pkg/apis/events/v1alpha1/openapi_generated.go
index 3765c62cc6..c7fad8a5c5 100644
--- a/pkg/apis/events/v1alpha1/openapi_generated.go
+++ b/pkg/apis/events/v1alpha1/openapi_generated.go
@@ -3236,11 +3236,23 @@ func schema_pkg_apis_events_v1alpha1_EventSourceStatus(ref common.ReferenceCallb
},
},
},
+ "lastUpdated": {
+ SchemaProps: spec.SchemaProps{
+ Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"),
+ },
+ },
+ "observedGeneration": {
+ SchemaProps: spec.SchemaProps{
+ Description: "The generation observed by the controller.",
+ Type: []string{"integer"},
+ Format: "int64",
+ },
+ },
},
},
},
Dependencies: []string{
- "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1.Condition"},
+ "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1.Condition", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"},
}
}
@@ -7285,11 +7297,23 @@ func schema_pkg_apis_events_v1alpha1_SensorStatus(ref common.ReferenceCallback)
},
},
},
+ "lastUpdated": {
+ SchemaProps: spec.SchemaProps{
+ Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"),
+ },
+ },
+ "observedGeneration": {
+ SchemaProps: spec.SchemaProps{
+ Description: "The generation observed by the controller.",
+ Type: []string{"integer"},
+ Format: "int64",
+ },
+ },
},
},
},
Dependencies: []string{
- "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1.Condition"},
+ "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1.Condition", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"},
}
}
diff --git a/pkg/apis/events/v1alpha1/sensor_types.go b/pkg/apis/events/v1alpha1/sensor_types.go
index c34ee6169c..5bb091244c 100644
--- a/pkg/apis/events/v1alpha1/sensor_types.go
+++ b/pkg/apis/events/v1alpha1/sensor_types.go
@@ -869,15 +869,18 @@ func (in *StatusPolicy) GetAllow() []int {
// SensorStatus contains information about the status of a sensor.
type SensorStatus struct {
Status `json:",inline" protobuf:"bytes,1,opt,name=status"`
+ // +optional
+ LastUpdated metav1.Time `json:"lastUpdated,omitempty" protobuf:"bytes,2,opt,name=lastUpdated"`
+ // The generation observed by the controller.
+ // +optional
+ ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,3,opt,name=observedGeneration"`
}
const (
- // SensorConditionDepencencyProvided has the status True when the
- // Sensor has valid dependencies provided.
- SensorConditionDepencencyProvided ConditionType = "DependenciesProvided"
- // SensorConditionTriggersProvided has the status True when the
- // Sensor has valid triggers provided.
- SensorConditionTriggersProvided ConditionType = "TriggersProvided"
+ // SensorConditionConfigured has the status True when the Sensor
+ // has valid configuration.
+ SensorConditionConfigured ConditionType = "Configured"
+
// SensorConditionDeployed has the status True when the Sensor
// has its Deployment created.
SensorConditionDeployed ConditionType = "Deployed"
@@ -885,27 +888,17 @@ const (
// InitConditions sets conditions to Unknown state.
func (s *SensorStatus) InitConditions() {
- s.InitializeConditions(SensorConditionDepencencyProvided, SensorConditionTriggersProvided, SensorConditionDeployed)
+ s.InitializeConditions(SensorConditionConfigured, SensorConditionDeployed)
}
// MarkDependenciesProvided set the sensor has valid dependencies provided.
-func (s *SensorStatus) MarkDependenciesProvided() {
- s.MarkTrue(SensorConditionDepencencyProvided)
+func (s *SensorStatus) MarkSensorConfigured() {
+ s.MarkTrue(SensorConditionConfigured)
}
// MarkDependenciesNotProvided set the sensor has invalid dependencies provided.
-func (s *SensorStatus) MarkDependenciesNotProvided(reason, message string) {
- s.MarkFalse(SensorConditionDepencencyProvided, reason, message)
-}
-
-// MarkTriggersProvided set the sensor has valid triggers provided.
-func (s *SensorStatus) MarkTriggersProvided() {
- s.MarkTrue(SensorConditionTriggersProvided)
-}
-
-// MarkTriggersNotProvided set the sensor has invalid triggers provided.
-func (s *SensorStatus) MarkTriggersNotProvided(reason, message string) {
- s.MarkFalse(SensorConditionTriggersProvided, reason, message)
+func (s *SensorStatus) MarkSensorNotConfigured(reason, message string) {
+ s.MarkFalse(SensorConditionConfigured, reason, message)
}
// MarkDeployed set the sensor has been deployed.
@@ -918,6 +911,10 @@ func (s *SensorStatus) MarkDeployFailed(reason, message string) {
s.MarkFalse(SensorConditionDeployed, reason, message)
}
+func (s *SensorStatus) SetObservedGeneration(value int64) {
+ s.ObservedGeneration = value
+}
+
// ArtifactLocation describes the source location for an external artifact
type ArtifactLocation struct {
// S3 compliant artifact
diff --git a/pkg/apis/events/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/events/v1alpha1/zz_generated.deepcopy.go
index bae9669ccb..0d797ec18e 100644
--- a/pkg/apis/events/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/events/v1alpha1/zz_generated.deepcopy.go
@@ -1670,6 +1670,7 @@ func (in *EventSourceSpec) DeepCopy() *EventSourceSpec {
func (in *EventSourceStatus) DeepCopyInto(out *EventSourceStatus) {
*out = *in
in.Status.DeepCopyInto(&out.Status)
+ in.LastUpdated.DeepCopyInto(&out.LastUpdated)
return
}
@@ -3779,6 +3780,7 @@ func (in *SensorSpec) DeepCopy() *SensorSpec {
func (in *SensorStatus) DeepCopyInto(out *SensorStatus) {
*out = *in
in.Status.DeepCopyInto(&out.Status)
+ in.LastUpdated.DeepCopyInto(&out.LastUpdated)
return
}
diff --git a/pkg/reconciler/cmd/start.go b/pkg/reconciler/cmd/start.go
index 552d85a62a..fc4254c57f 100644
--- a/pkg/reconciler/cmd/start.go
+++ b/pkg/reconciler/cmd/start.go
@@ -133,7 +133,7 @@ func Start(eventsOpts ArgoEventsControllerOpts) {
}
// EventSource controller
- eventSourceController, err := controller.New(eventsource.ControllerName, mgr, controller.Options{
+ eventSourceController, err := controller.New(aev1.ControllerEventSource, mgr, controller.Options{
Reconciler: eventsource.NewReconciler(mgr.GetClient(), mgr.GetScheme(), imageName, logger),
})
if err != nil {
diff --git a/pkg/reconciler/eventsource/controller.go b/pkg/reconciler/eventsource/controller.go
index 88467611f8..fc11f6c78d 100644
--- a/pkg/reconciler/eventsource/controller.go
+++ b/pkg/reconciler/eventsource/controller.go
@@ -2,26 +2,36 @@ package eventsource
import (
"context"
+ "encoding/base64"
+ "encoding/json"
+ "fmt"
+ "sort"
+ "strings"
"go.uber.org/zap"
+ appv1 "k8s.io/api/apps/v1"
+ corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality"
apierrors "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/types"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
+ "sigs.k8s.io/yaml"
"github.com/argoproj/argo-events/pkg/apis/events/v1alpha1"
- aev1 "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1"
"github.com/argoproj/argo-events/pkg/shared/logging"
+ sharedutil "github.com/argoproj/argo-events/pkg/shared/util"
+ "github.com/imdario/mergo"
)
const (
- // ControllerName is name of the controller
- ControllerName = "eventsource-controller"
-
- finalizerName = ControllerName
+ finalizerName = v1alpha1.ControllerEventSource
)
type reconciler struct {
@@ -38,13 +48,13 @@ func NewReconciler(client client.Client, scheme *runtime.Scheme, eventSourceImag
}
func (r *reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
- eventSource := &aev1.EventSource{}
+ eventSource := &v1alpha1.EventSource{}
if err := r.client.Get(ctx, req.NamespacedName, eventSource); err != nil {
if apierrors.IsNotFound(err) {
r.logger.Warnw("WARNING: eventsource not found", "request", req)
return reconcile.Result{}, nil
}
- r.logger.Errorw("unable to get eventsource ctl", "request", req, "error", err)
+ r.logger.Errorw("unable to get eventsource", "request", req, zap.Error(err))
return ctrl.Result{}, err
}
log := r.logger.With("namespace", eventSource.Namespace).With("eventSource", eventSource.Name)
@@ -52,12 +62,14 @@ func (r *reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
esCopy := eventSource.DeepCopy()
reconcileErr := r.reconcile(ctx, esCopy)
if reconcileErr != nil {
- log.Errorw("reconcile error", zap.Error(reconcileErr))
+ log.Errorw("Reconcile error", zap.Error(reconcileErr))
}
- if r.needsUpdate(eventSource, esCopy) {
- // Use a DeepCopy to update, because it will be mutated afterwards, with empty Status.
- if err := r.client.Update(ctx, esCopy.DeepCopy()); err != nil {
- return reconcile.Result{}, err
+ esCopy.Status.LastUpdated = metav1.Now()
+ if !equality.Semantic.DeepEqual(eventSource.Finalizers, esCopy.Finalizers) {
+ patchYaml := "metadata:\n finalizers: [" + strings.Join(esCopy.Finalizers, ",") + "]"
+ patchJson, _ := yaml.YAMLToJSON([]byte(patchYaml))
+ if err := r.client.Patch(ctx, eventSource, client.RawPatch(types.MergePatchType, patchJson)); err != nil {
+ return ctrl.Result{}, err
}
}
if err := r.client.Status().Update(ctx, esCopy); err != nil {
@@ -67,41 +79,521 @@ func (r *reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
}
// reconcile does the real logic
-func (r *reconciler) reconcile(ctx context.Context, eventSource *aev1.EventSource) error {
+func (r *reconciler) reconcile(ctx context.Context, eventSource *v1alpha1.EventSource) error {
log := logging.FromContext(ctx)
if !eventSource.DeletionTimestamp.IsZero() {
- log.Info("deleting eventsource")
+ log.Info("Deleting eventsource")
if controllerutil.ContainsFinalizer(eventSource, finalizerName) {
- // Finalizer logic should be added here.
+ // We don't add finalizer anymore, keep the removing logic for backward compatibility
controllerutil.RemoveFinalizer(eventSource, finalizerName)
}
return nil
}
- controllerutil.AddFinalizer(eventSource, finalizerName)
eventSource.Status.InitConditions()
+ eventSource.Status.SetObservedGeneration(eventSource.Generation)
if err := ValidateEventSource(eventSource); err != nil {
- log.Errorw("validation error", zap.Error(err))
+ log.Errorw("Validation error", zap.Error(err))
+ eventSource.Status.MarkSourcesNotProvided("InvalidEventSource", err.Error())
+ return err
+ }
+ eventSource.Status.MarkSourcesProvided()
+ if err := r.orchestrateResources(ctx, eventSource); err != nil {
+ log.Errorw("Error orchestrating resources", zap.Error(err))
+ eventSource.Status.MarkDeployFailed("OrchestrateResourcesFailed", err.Error())
return err
}
- args := &AdaptorArgs{
- Image: r.eventSourceImage,
- EventSource: eventSource,
- Labels: map[string]string{
- "controller": "eventsource-controller",
- v1alpha1.LabelEventSourceName: eventSource.Name,
- v1alpha1.LabelOwnerName: eventSource.Name,
+ eventSource.Status.MarkDeployed()
+ return nil
+}
+
+func (r *reconciler) orchestrateResources(ctx context.Context, eventSource *v1alpha1.EventSource) error {
+ log := logging.FromContext(ctx)
+ eventBus := &v1alpha1.EventBus{}
+ eventBusName := v1alpha1.DefaultEventBusName
+ if len(eventSource.Spec.EventBusName) > 0 {
+ eventBusName = eventSource.Spec.EventBusName
+ }
+ err := r.client.Get(ctx, types.NamespacedName{Namespace: eventSource.Namespace, Name: eventBusName}, eventBus)
+ if err != nil {
+ if apierrors.IsNotFound(err) {
+ log.Errorw("EventBus not found", "eventBusName", eventBusName, zap.Error(err))
+ return fmt.Errorf("eventbus %s not found", eventBusName)
+ }
+ return fmt.Errorf("failed to get eventbus %q, %w", eventBusName, err)
+ }
+ if !eventBus.Status.IsReady() {
+ return fmt.Errorf("eventbus %q not ready", eventBusName)
+ }
+
+ if err := r.createOrUpdateDeployment(ctx, eventBus, eventSource); err != nil {
+ return fmt.Errorf("failed to create/update a deployment, %w", err)
+ }
+
+ // Create service if any
+ if eventSource.Spec.Service != nil {
+ if err := r.createOrUpdateService(ctx, eventSource); err != nil {
+ return fmt.Errorf("failed to create/update a service, %w", err)
+ }
+ }
+ return nil
+}
+
+func (r *reconciler) createOrUpdateDeployment(ctx context.Context, eventBus *v1alpha1.EventBus, eventSource *v1alpha1.EventSource) error {
+ log := logging.FromContext(ctx)
+
+ // Clean up legacy deployment
+ // TODO: remove this in a future rlease
+ legacyDeploy, err := r.findLegacyDeployment(ctx, eventSource)
+ if err != nil {
+ if !apierrors.IsNotFound(err) {
+ log.Errorw("error finding legacy deployment", zap.Error(err))
+ return err
+ }
+ } else {
+ _ = r.client.Delete(ctx, legacyDeploy)
+ }
+
+ expectedDeploy, err := r.buildDeployment(eventBus, eventSource)
+ if err != nil {
+ return fmt.Errorf("failed to build deployment spec, %w", err)
+ }
+
+ deployHash := expectedDeploy.GetAnnotations()[v1alpha1.KeyHash]
+
+ existingDeploy := &appv1.Deployment{}
+ needToCreate := false
+ if err := r.client.Get(ctx, types.NamespacedName{Namespace: eventSource.Namespace, Name: expectedDeploy.Name}, existingDeploy); err != nil {
+ if !apierrors.IsNotFound(err) {
+ log.Errorw("Failed to find existing deployment", zap.String("deployment", expectedDeploy.Name), zap.Error(err))
+ return fmt.Errorf("failed to find existing deployment, %w", err)
+ } else {
+ needToCreate = true
+ }
+ } else {
+ if existingDeploy.GetAnnotations()[v1alpha1.KeyHash] != deployHash {
+ // Delete and recreate, to avoid updating immutable fields problem.
+ if err := r.client.Delete(ctx, expectedDeploy); err != nil {
+ log.Errorw("Failed to delete the outdated daemon deployment", zap.String("deployment", existingDeploy.Name), zap.Error(err))
+ return fmt.Errorf("failed to delete an outdated deployment, %w", err)
+ }
+ needToCreate = true
+ }
+ }
+ if needToCreate {
+ if err := r.client.Create(ctx, expectedDeploy); err != nil && !apierrors.IsAlreadyExists(err) {
+ log.Errorw("Failed to create a deployment", zap.String("deployment", expectedDeploy.Name), zap.Error(err))
+ return fmt.Errorf("failed to create a deployment, %w", err)
+ }
+ log.Infow("Succeeded to create/recreate a deployment", zap.String("deployment", expectedDeploy.Name))
+ }
+ return nil
+}
+
+func (r *reconciler) buildDeployment(eventBus *v1alpha1.EventBus, eventSource *v1alpha1.EventSource) (*appv1.Deployment, error) {
+ labels := map[string]string{
+ v1alpha1.KeyManagedBy: v1alpha1.ControllerEventSource,
+ v1alpha1.KeyComponent: v1alpha1.ComponentEventSource,
+ v1alpha1.KeyPartOf: v1alpha1.Project,
+ v1alpha1.KeyAppName: eventSource.GetDeploymentName(),
+ v1alpha1.KeyEventSourceName: eventSource.Name,
+ }
+ deploymentSpec, err := r.buildDeploymentSpec(eventSource, labels)
+ if err != nil {
+ return nil, err
+ }
+ eventSourceCopy := &v1alpha1.EventSource{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: eventSource.Namespace,
+ Name: eventSource.GetDeploymentName(),
+ },
+ Spec: eventSource.Spec,
+ }
+ eventSourceBytes, err := json.Marshal(eventSourceCopy)
+ if err != nil {
+ return nil, fmt.Errorf("failed marshal eventsource spec")
+ }
+ busConfigBytes, err := json.Marshal(eventBus.Status.Config)
+ if err != nil {
+ return nil, fmt.Errorf("failed marshal event bus config: %v", err)
+ }
+
+ env := []corev1.EnvVar{
+ {
+ Name: v1alpha1.EnvVarEventSourceObject,
+ Value: base64.StdEncoding.EncodeToString(eventSourceBytes),
+ },
+ {
+ Name: v1alpha1.EnvVarEventBusSubject,
+ Value: fmt.Sprintf("eventbus-%s", eventSource.Namespace),
+ },
+ {
+ Name: v1alpha1.EnvVarPodName,
+ ValueFrom: &corev1.EnvVarSource{FieldRef: &corev1.ObjectFieldSelector{FieldPath: "metadata.name"}},
+ },
+ {
+ Name: v1alpha1.EnvVarLeaderElection,
+ Value: eventSource.Annotations[v1alpha1.AnnotationLeaderElection],
+ },
+ {
+ Name: v1alpha1.EnvVarEventBusConfig,
+ Value: base64.StdEncoding.EncodeToString(busConfigBytes),
+ },
+ }
+
+ volumes := []corev1.Volume{
+ {
+ Name: "tmp",
+ VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},
+ },
+ }
+
+ volumeMounts := []corev1.VolumeMount{
+ {
+ Name: "tmp",
+ MountPath: "/tmp",
},
}
- return Reconcile(r.client, args, log)
+
+ var secretObjs []interface{}
+ var accessSecret *corev1.SecretKeySelector
+ var caCertSecret *corev1.SecretKeySelector
+ var clientCertSecret *corev1.SecretKeySelector
+ var clientKeySecret *corev1.SecretKeySelector
+ switch {
+ case eventBus.Status.Config.NATS != nil:
+ caCertSecret = nil
+ clientCertSecret = nil
+ clientKeySecret = nil
+ accessSecret = eventBus.Status.Config.NATS.AccessSecret
+ secretObjs = []interface{}{eventSourceCopy}
+ case eventBus.Status.Config.JetStream != nil:
+ tlsOptions := eventBus.Status.Config.JetStream.TLS
+ if tlsOptions != nil {
+ caCertSecret = tlsOptions.CACertSecret
+ clientCertSecret = tlsOptions.ClientCertSecret
+ clientKeySecret = tlsOptions.ClientKeySecret
+ }
+ accessSecret = eventBus.Status.Config.JetStream.AccessSecret
+ secretObjs = []interface{}{eventSourceCopy}
+ case eventBus.Status.Config.Kafka != nil:
+ caCertSecret = nil
+ clientCertSecret = nil
+ clientKeySecret = nil
+ accessSecret = nil
+ secretObjs = []interface{}{eventSourceCopy, eventBus} // kafka requires secrets for sasl and tls
+ default:
+ return nil, fmt.Errorf("unsupported event bus")
+ }
+
+ if accessSecret != nil {
+ // Mount the secret as volume instead of using envFrom to gain the ability
+ // for the sensor deployment to auto reload when the secret changes
+ volumes = append(volumes, corev1.Volume{
+ Name: "auth-volume",
+ VolumeSource: corev1.VolumeSource{
+ Secret: &corev1.SecretVolumeSource{
+ SecretName: accessSecret.Name,
+ Items: []corev1.KeyToPath{
+ {
+ Key: accessSecret.Key,
+ Path: "auth.yaml",
+ },
+ },
+ },
+ },
+ })
+ volumeMounts = append(volumeMounts, corev1.VolumeMount{
+ Name: "auth-volume",
+ MountPath: v1alpha1.EventBusAuthFileMountPath,
+ })
+ }
+
+ uniqueCertVolumeMap := make(map[string][]corev1.KeyToPath)
+ for _, secret := range []*corev1.SecretKeySelector{caCertSecret, clientCertSecret, clientKeySecret} {
+ if secret != nil {
+ uniqueCertVolumeMap[secret.Name] = append(uniqueCertVolumeMap[secret.Name], corev1.KeyToPath{
+ Key: secret.Key,
+ Path: secret.Key,
+ })
+ }
+ }
+
+ // We deduplicate the certificate secret mounts to ensure every secret under the TLS config is only mounted once
+ // because the secrets MUST be mounted at /argo-events/secrets/
+ // in order for util.GetTLSConfig to work without modification
+ for secretName, items := range uniqueCertVolumeMap {
+ // The names of volumes MUST be valid DNS_LABELs; as the secret names are user-supplied,
+ // we perform some input cleansing to ensure they conform
+ volumeName := sharedutil.ConvertToDNSLabel(secretName)
+
+ optional := false
+
+ volumes = append(volumes, corev1.Volume{
+ Name: volumeName,
+ VolumeSource: corev1.VolumeSource{
+ Secret: &corev1.SecretVolumeSource{
+ SecretName: secretName,
+ Items: items,
+ Optional: &optional,
+ },
+ },
+ })
+
+ volumeMounts = append(volumeMounts, corev1.VolumeMount{
+ Name: volumeName,
+ MountPath: fmt.Sprintf("/argo-events/secrets/%s", secretName),
+ })
+ }
+
+ // secrets
+ volSecrets, volSecretMounts := sharedutil.VolumesFromSecretsOrConfigMaps(v1alpha1.SecretKeySelectorType, secretObjs...)
+ volumes = append(volumes, volSecrets...)
+ volumeMounts = append(volumeMounts, volSecretMounts...)
+
+ // config maps
+ volConfigMaps, volCofigMapMounts := sharedutil.VolumesFromSecretsOrConfigMaps(v1alpha1.ConfigMapKeySelectorType, eventSourceCopy)
+ volumeMounts = append(volumeMounts, volCofigMapMounts...)
+ volumes = append(volumes, volConfigMaps...)
+
+ // Order volumes and volumemounts based on name to make the order deterministic
+ sort.Slice(volumes, func(i, j int) bool {
+ return volumes[i].Name < volumes[j].Name
+ })
+ sort.Slice(volumeMounts, func(i, j int) bool {
+ return volumeMounts[i].Name < volumeMounts[j].Name
+ })
+
+ deploymentSpec.Template.Spec.Containers[0].Env = append(deploymentSpec.Template.Spec.Containers[0].Env, env...)
+ deploymentSpec.Template.Spec.Containers[0].VolumeMounts = append(deploymentSpec.Template.Spec.Containers[0].VolumeMounts, volumeMounts...)
+ deploymentSpec.Template.Spec.Volumes = append(deploymentSpec.Template.Spec.Volumes, volumes...)
+
+ hash := sharedutil.MustHash(deploymentSpec)
+
+ deployment := &appv1.Deployment{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: eventSource.Namespace,
+ Name: eventSource.GetDeploymentName(),
+ Labels: labels,
+ Annotations: map[string]string{
+ v1alpha1.KeyHash: hash,
+ },
+ OwnerReferences: []metav1.OwnerReference{
+ *metav1.NewControllerRef(eventSource.GetObjectMeta(), v1alpha1.EventBusGroupVersionKind),
+ },
+ },
+ Spec: *deploymentSpec,
+ }
+ return deployment, nil
+}
+
+func (r *reconciler) buildDeploymentSpec(eventSource *v1alpha1.EventSource, labels map[string]string) (*appv1.DeploymentSpec, error) {
+ eventSourceContainer := corev1.Container{
+ Name: "main",
+ Image: r.eventSourceImage,
+ ImagePullPolicy: sharedutil.GetImagePullPolicy(),
+ Args: []string{"eventsource-service"},
+ Ports: []corev1.ContainerPort{
+ {Name: "metrics", ContainerPort: v1alpha1.EventSourceMetricsPort},
+ },
+ }
+ if t := eventSource.Spec.Template; t != nil && t.Container != nil {
+ if err := mergo.Merge(&eventSourceContainer, t.Container, mergo.WithOverride); err != nil {
+ return nil, err
+ }
+ }
+ lbs := make(map[string]string)
+ for k, v := range labels {
+ lbs[k] = v
+ }
+ if t := eventSource.Spec.Template; t != nil && t.Metadata != nil &&
+ len(t.Metadata.Labels) > 0 {
+ for k, v := range t.Metadata.Labels {
+ lbs[k] = v
+ }
+ }
+
+ replicas := eventSource.Spec.GetReplicas()
+ spec := &appv1.DeploymentSpec{
+ Selector: &metav1.LabelSelector{
+ MatchLabels: lbs,
+ },
+ Replicas: &replicas,
+ Template: corev1.PodTemplateSpec{
+ ObjectMeta: metav1.ObjectMeta{
+ Labels: lbs,
+ },
+ Spec: corev1.PodSpec{
+ Containers: []corev1.Container{
+ eventSourceContainer,
+ },
+ },
+ },
+ }
+ if t := eventSource.Spec.Template; t != nil {
+ if t.Metadata != nil {
+ spec.Template.SetAnnotations(t.Metadata.Annotations)
+ }
+ spec.Template.Spec.ServiceAccountName = t.ServiceAccountName
+ spec.Template.Spec.Volumes = t.Volumes
+ spec.Template.Spec.SecurityContext = t.SecurityContext
+ spec.Template.Spec.NodeSelector = t.NodeSelector
+ spec.Template.Spec.Tolerations = t.Tolerations
+ spec.Template.Spec.Affinity = t.Affinity
+ spec.Template.Spec.ImagePullSecrets = t.ImagePullSecrets
+ spec.Template.Spec.PriorityClassName = t.PriorityClassName
+ spec.Template.Spec.Priority = t.Priority
+ }
+ return spec, nil
+}
+
+func (r *reconciler) findLegacyDeployment(ctx context.Context, eventSource *v1alpha1.EventSource) (*appv1.Deployment, error) {
+ selector := labels.SelectorFromSet(map[string]string{
+ "controller": "eventsource-controller",
+ "eventsource-name": eventSource.Name,
+ "owner-name": eventSource.Name,
+ })
+ dl := &appv1.DeploymentList{}
+ err := r.client.List(ctx, dl, &client.ListOptions{
+ Namespace: eventSource.Namespace,
+ LabelSelector: selector,
+ })
+ if err != nil {
+ return nil, err
+ }
+ for _, deploy := range dl.Items {
+ if metav1.IsControlledBy(&deploy, eventSource) {
+ return &deploy, nil
+ }
+ }
+ return nil, apierrors.NewNotFound(schema.GroupResource{}, "")
}
-func (r *reconciler) needsUpdate(old, new *aev1.EventSource) bool {
- if old == nil {
- return true
+func (r *reconciler) createOrUpdateService(ctx context.Context, eventSource *v1alpha1.EventSource) error {
+ log := logging.FromContext(ctx)
+
+ // Clean up legacy services
+ // TODO: remove this in a future release
+ legacySvc, err := r.findLegacyService(ctx, eventSource)
+ if err != nil {
+ if !apierrors.IsNotFound(err) {
+ log.Errorw("error finding legacy deployment", zap.Error(err))
+ return err
+ }
+ } else {
+ _ = r.client.Delete(ctx, legacySvc)
}
- if !equality.Semantic.DeepEqual(old.Finalizers, new.Finalizers) {
- return true
+
+ expectedSvc := r.buildService(eventSource)
+ if expectedSvc == nil {
+ return nil
+ }
+ svcHash := expectedSvc.GetAnnotations()[v1alpha1.KeyHash]
+
+ existingSvc := &corev1.Service{}
+ needToCreat := false
+ if err := r.client.Get(ctx, types.NamespacedName{Namespace: eventSource.Namespace, Name: expectedSvc.Name}, existingSvc); err != nil {
+ if apierrors.IsNotFound(err) {
+ needToCreat = true
+ } else {
+ return fmt.Errorf("failed to find existing service, %w", err)
+ }
+ } else if existingSvc.GetAnnotations()[v1alpha1.KeyHash] != svcHash {
+ if err := r.client.Delete(ctx, existingSvc); err != nil && !apierrors.IsNotFound(err) {
+ log.Errorw("Failed to delete existing service", zap.String("service", existingSvc.Name), zap.Error(err))
+ return fmt.Errorf("failed to delete existing service, %w", err)
+ }
+ needToCreat = true
+ }
+ if needToCreat {
+ if err := r.client.Create(ctx, expectedSvc); err != nil {
+ log.Errorw("Failed to create daemon service", zap.String("service", expectedSvc.Name), zap.Error(err))
+ return fmt.Errorf("failed to create a service, %w", err)
+ }
+ log.Infow("Succeeded to create/recreate a service", zap.String("service", expectedSvc.Name))
+ }
+ return nil
+}
+
+func (r *reconciler) buildService(eventSource *v1alpha1.EventSource) *corev1.Service {
+ if eventSource.Spec.Service == nil {
+ return nil
+ }
+ if len(eventSource.Spec.Service.Ports) == 0 {
+ return nil
+ }
+ // Use a ports copy otherwise it will update the oririnal Ports spec in EventSource
+ ports := []corev1.ServicePort{}
+ ports = append(ports, eventSource.Spec.Service.Ports...)
+
+ labels := map[string]string{
+ v1alpha1.KeyManagedBy: v1alpha1.ControllerEventSource,
+ v1alpha1.KeyComponent: v1alpha1.ComponentEventSource,
+ v1alpha1.KeyPartOf: v1alpha1.Project,
+ v1alpha1.KeyAppName: eventSource.GetDeploymentName(),
+ v1alpha1.KeyEventSourceName: eventSource.Name,
+ }
+ svc := &corev1.Service{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: eventSource.GetServiceName(),
+ Namespace: eventSource.Namespace,
+ OwnerReferences: []metav1.OwnerReference{
+ *metav1.NewControllerRef(eventSource.GetObjectMeta(), v1alpha1.EventBusGroupVersionKind),
+ },
+ },
+ Spec: corev1.ServiceSpec{
+ Ports: ports,
+ Type: corev1.ServiceTypeClusterIP,
+ ClusterIP: eventSource.Spec.Service.ClusterIP,
+ Selector: labels,
+ },
+ }
+
+ lbs := make(map[string]string)
+ for k, v := range labels {
+ lbs[k] = v
+ }
+ hash := sharedutil.MustHash(svc.Spec)
+ annotations := map[string]string{
+ v1alpha1.KeyHash: hash,
+ }
+
+ if s := eventSource.Spec.Service.Metadata; s != nil {
+ if s.Labels != nil {
+ for k, v := range s.Labels {
+ lbs[k] = v
+ }
+ }
+ if s.Annotations != nil {
+ for k, v := range s.Annotations {
+ annotations[k] = v
+ }
+ }
+ }
+
+ svc.ObjectMeta.SetLabels(lbs)
+ svc.ObjectMeta.SetAnnotations(annotations)
+ return svc
+}
+
+func (r *reconciler) findLegacyService(ctx context.Context, eventSource *v1alpha1.EventSource) (*corev1.Service, error) {
+ selector := labels.SelectorFromSet(map[string]string{
+ "controller": "eventsource-controller",
+ "eventsource-name": eventSource.Name,
+ "owner-name": eventSource.Name,
+ })
+ sl := &corev1.ServiceList{}
+ err := r.client.List(ctx, sl, &client.ListOptions{
+ Namespace: eventSource.Namespace,
+ LabelSelector: selector,
+ })
+ if err != nil {
+ return nil, err
+ }
+ for _, svc := range sl.Items {
+ if metav1.IsControlledBy(&svc, eventSource) {
+ return &svc, nil
+ }
}
- return false
+ return nil, apierrors.NewNotFound(schema.GroupResource{}, "")
}
diff --git a/pkg/reconciler/eventsource/controller_test.go b/pkg/reconciler/eventsource/controller_test.go
index 43f7e3ddc6..acc9b8635b 100644
--- a/pkg/reconciler/eventsource/controller_test.go
+++ b/pkg/reconciler/eventsource/controller_test.go
@@ -2,6 +2,8 @@ package eventsource
import (
"context"
+ "fmt"
+ "strings"
"testing"
appv1 "k8s.io/api/apps/v1"
@@ -116,6 +118,47 @@ var (
},
},
}
+
+ fakeEventBusJetstreamWithTLS = &v1alpha1.EventBus{
+ TypeMeta: metav1.TypeMeta{
+ APIVersion: v1alpha1.SchemeGroupVersion.String(),
+ Kind: "EventBus",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: testNamespace,
+ Name: v1alpha1.DefaultEventBusName,
+ },
+ Spec: v1alpha1.EventBusSpec{
+ JetStream: &v1alpha1.JetStreamBus{},
+ },
+ Status: v1alpha1.EventBusStatus{
+ Config: v1alpha1.BusConfig{
+ JetStream: &v1alpha1.JetStreamConfig{
+ URL: "nats://xxxx",
+ TLS: &v1alpha1.TLSConfig{
+ CACertSecret: &corev1.SecretKeySelector{
+ LocalObjectReference: corev1.LocalObjectReference{
+ Name: "secret-0",
+ },
+ Key: "ca.crt",
+ },
+ ClientKeySecret: &corev1.SecretKeySelector{
+ LocalObjectReference: corev1.LocalObjectReference{
+ Name: "secret-1",
+ },
+ Key: "tls.key",
+ },
+ ClientCertSecret: &corev1.SecretKeySelector{
+ LocalObjectReference: corev1.LocalObjectReference{
+ Name: "secret-1",
+ },
+ Key: "tls.crt",
+ },
+ },
+ },
+ },
+ },
+ }
)
func fakeEmptyEventSource() *v1alpha1.EventSource {
@@ -209,7 +252,7 @@ func TestReconcile(t *testing.T) {
testEventSource.Spec.Calendar = fakeCalendarEventSourceMap("test")
ctx := context.TODO()
cl := fake.NewClientBuilder().Build()
- testBus := fakeEventBus.DeepCopy()
+ testBus := fakeEventBusJetstream.DeepCopy()
testBus.Status.MarkDeployed("test", "test")
testBus.Status.MarkConfigured()
err := cl.Create(ctx, testBus)
@@ -225,3 +268,217 @@ func TestReconcile(t *testing.T) {
assert.True(t, testEventSource.Status.IsReady())
})
}
+
+func Test_BuildDeployment(t *testing.T) {
+ cl := fake.NewClientBuilder().Build()
+ r := &reconciler{
+ client: cl,
+ scheme: scheme.Scheme,
+ eventSourceImage: "test-image",
+ logger: logging.NewArgoEventsLogger(),
+ }
+ testEventSource := fakeEmptyEventSource()
+ testEventSource.Spec.HDFS = fakeHDFSEventSourceMap("test")
+ testEventSource.Spec.Template = &v1alpha1.Template{
+ ImagePullSecrets: []corev1.LocalObjectReference{
+ {
+ Name: "test",
+ },
+ },
+ PriorityClassName: "test-class",
+ }
+
+ t.Run("test build HDFS", func(t *testing.T) {
+ deployment, err := r.buildDeployment(fakeEventBus.DeepCopy(), testEventSource)
+ assert.Nil(t, err)
+ assert.NotNil(t, deployment)
+ volumes := deployment.Spec.Template.Spec.Volumes
+ assert.True(t, len(volumes) > 0)
+ hasAuthVolume := false
+ hasTmpVolume := false
+ cmRefs, secretRefs := 0, 0
+ for _, vol := range volumes {
+ if vol.Name == "auth-volume" {
+ hasAuthVolume = true
+ }
+ if vol.Name == "tmp" {
+ hasTmpVolume = true
+ }
+ if strings.Contains(vol.Name, testEventSource.Spec.HDFS["test"].KrbCCacheSecret.Name) {
+ secretRefs++
+ }
+ if strings.Contains(vol.Name, testEventSource.Spec.HDFS["test"].KrbConfigConfigMap.Name) {
+ cmRefs++
+ }
+ }
+ assert.True(t, hasAuthVolume)
+ assert.True(t, hasTmpVolume)
+ assert.True(t, len(deployment.Spec.Template.Spec.ImagePullSecrets) > 0)
+ assert.True(t, cmRefs > 0)
+ assert.True(t, secretRefs > 0)
+ assert.Equal(t, deployment.Spec.Template.Spec.PriorityClassName, "test-class")
+ })
+
+ t.Run("test kafka eventbus secrets attached", func(t *testing.T) {
+ // add secrets to kafka eventbus
+ testBus := fakeEventBusKafka.DeepCopy()
+ testBus.Spec.Kafka.TLS = &v1alpha1.TLSConfig{
+ CACertSecret: &corev1.SecretKeySelector{Key: "cert", LocalObjectReference: corev1.LocalObjectReference{Name: "tls-secret"}},
+ }
+ testBus.Spec.Kafka.SASL = &v1alpha1.SASLConfig{
+ Mechanism: "SCRAM-SHA-512",
+ UserSecret: &corev1.SecretKeySelector{Key: "username", LocalObjectReference: corev1.LocalObjectReference{Name: "sasl-secret"}},
+ PasswordSecret: &corev1.SecretKeySelector{Key: "password", LocalObjectReference: corev1.LocalObjectReference{Name: "sasl-secret"}},
+ }
+
+ deployment, err := r.buildDeployment(testBus, testEventSource)
+ assert.Nil(t, err)
+ assert.NotNil(t, deployment)
+
+ hasSASLSecretVolume := false
+ hasSASLSecretVolumeMount := false
+ hasTLSSecretVolume := false
+ hasTLSSecretVolumeMount := false
+ for _, volume := range deployment.Spec.Template.Spec.Volumes {
+ if volume.Name == "secret-sasl-secret" {
+ hasSASLSecretVolume = true
+ }
+ if volume.Name == "secret-tls-secret" {
+ hasTLSSecretVolume = true
+ }
+ }
+ for _, volumeMount := range deployment.Spec.Template.Spec.Containers[0].VolumeMounts {
+ if volumeMount.Name == "secret-sasl-secret" {
+ hasSASLSecretVolumeMount = true
+ }
+ if volumeMount.Name == "secret-tls-secret" {
+ hasTLSSecretVolumeMount = true
+ }
+ }
+
+ assert.True(t, hasSASLSecretVolume)
+ assert.True(t, hasSASLSecretVolumeMount)
+ assert.True(t, hasTLSSecretVolume)
+ assert.True(t, hasTLSSecretVolumeMount)
+ })
+
+ t.Run("test jetstream eventbus secrets attached", func(t *testing.T) {
+ deployment, err := r.buildDeployment(fakeEventBusJetstreamWithTLS.DeepCopy(), testEventSource)
+ assert.Nil(t, err)
+ assert.NotNil(t, deployment)
+
+ hasCAVolume := false
+ hasCertVolume := false
+ hasCAVolumeMount := false
+ hasCertVolumeMount := false
+ for _, volume := range deployment.Spec.Template.Spec.Volumes {
+ if volume.Name == "secret-0" {
+ if hasCAVolume {
+ assert.Fail(t, "Secrets should be de-duplicated")
+ }
+ hasCAVolume = true
+ }
+ if volume.Name == "secret-1" {
+ if hasCertVolume {
+ assert.Fail(t, "Secrets should be de-duplicated")
+ }
+ hasCertVolume = true
+ }
+ }
+ for _, volumeMount := range deployment.Spec.Template.Spec.Containers[0].VolumeMounts {
+ if volumeMount.Name == "secret-0" {
+ hasCAVolumeMount = true
+ assert.Equal(t, volumeMount.MountPath, fmt.Sprintf("/argo-events/secrets/%s", volumeMount.Name))
+ }
+ if volumeMount.Name == "secret-1" {
+ hasCertVolumeMount = true
+ assert.Equal(t, volumeMount.MountPath, fmt.Sprintf("/argo-events/secrets/%s", volumeMount.Name))
+ }
+ }
+
+ assert.True(t, hasCAVolume)
+ assert.True(t, hasCertVolume)
+ assert.True(t, hasCAVolumeMount)
+ assert.True(t, hasCertVolumeMount)
+ })
+
+ t.Run("test secret volume and volumemount order deterministic", func(t *testing.T) {
+ webhooksWithSecrets := map[string]v1alpha1.WebhookEventSource{
+ "webhook4": {
+ WebhookContext: v1alpha1.WebhookContext{
+ URL: "http://a.b",
+ Endpoint: "/webhook4",
+ Port: "1234",
+ AuthSecret: &corev1.SecretKeySelector{
+ LocalObjectReference: corev1.LocalObjectReference{Name: "webhook4"},
+ Key: "secret",
+ },
+ },
+ },
+ "webhook3": {
+ WebhookContext: v1alpha1.WebhookContext{
+ URL: "http://a.b",
+ Endpoint: "/webhook3",
+ Port: "1234",
+ AuthSecret: &corev1.SecretKeySelector{
+ LocalObjectReference: corev1.LocalObjectReference{Name: "webhook3"},
+ Key: "secret",
+ },
+ },
+ },
+ "webhook1": {
+ WebhookContext: v1alpha1.WebhookContext{
+ URL: "http://a.b",
+ Endpoint: "/webhook1",
+ Port: "1234",
+ AuthSecret: &corev1.SecretKeySelector{
+ LocalObjectReference: corev1.LocalObjectReference{Name: "webhook1"},
+ Key: "secret",
+ },
+ },
+ },
+ "webhook2": {
+ WebhookContext: v1alpha1.WebhookContext{
+ URL: "http://a.b",
+ Endpoint: "/webhook2",
+ Port: "1234",
+ AuthSecret: &corev1.SecretKeySelector{
+ LocalObjectReference: corev1.LocalObjectReference{Name: "webhook2"},
+ Key: "secret",
+ },
+ },
+ },
+ }
+ es := testEventSource.DeepCopy()
+ es.Spec.Webhook = webhooksWithSecrets
+
+ wantVolumeNames := []string{"auth-volume", "cm-test-cm", "secret-test-secret", "secret-webhook1", "secret-webhook2", "secret-webhook3", "secret-webhook4", "tmp"}
+ wantVolumeMountNames := []string{"auth-volume", "cm-test-cm", "secret-test-secret", "secret-webhook1", "secret-webhook2", "secret-webhook3", "secret-webhook4", "tmp"}
+
+ deployment, err := r.buildDeployment(fakeEventBus, es)
+ assert.Nil(t, err)
+ assert.NotNil(t, deployment)
+ gotVolumes := deployment.Spec.Template.Spec.Volumes
+ gotVolumeMounts := deployment.Spec.Template.Spec.Containers[0].VolumeMounts
+
+ var gotVolumeNames []string
+ var gotVolumeMountNames []string
+
+ for _, v := range gotVolumes {
+ gotVolumeNames = append(gotVolumeNames, v.Name)
+ }
+ for _, v := range gotVolumeMounts {
+ gotVolumeMountNames = append(gotVolumeMountNames, v.Name)
+ }
+
+ assert.Equal(t, len(gotVolumes), len(wantVolumeNames))
+ assert.Equal(t, len(gotVolumeMounts), len(wantVolumeMountNames))
+
+ for i := range gotVolumeNames {
+ assert.Equal(t, gotVolumeNames[i], wantVolumeNames[i])
+ }
+ for i := range gotVolumeMountNames {
+ assert.Equal(t, gotVolumeMountNames[i], wantVolumeMountNames[i])
+ }
+ })
+}
diff --git a/pkg/reconciler/eventsource/resource.go b/pkg/reconciler/eventsource/resource.go
deleted file mode 100644
index decc44ebcc..0000000000
--- a/pkg/reconciler/eventsource/resource.go
+++ /dev/null
@@ -1,486 +0,0 @@
-package eventsource
-
-import (
- "context"
- "encoding/base64"
- "encoding/json"
- "fmt"
- "sort"
-
- "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1"
- aev1 "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1"
- controllerscommon "github.com/argoproj/argo-events/pkg/reconciler/common"
- sharedutil "github.com/argoproj/argo-events/pkg/shared/util"
- "github.com/imdario/mergo"
- "go.uber.org/zap"
- appv1 "k8s.io/api/apps/v1"
- corev1 "k8s.io/api/core/v1"
- apierrors "k8s.io/apimachinery/pkg/api/errors"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/labels"
- "k8s.io/apimachinery/pkg/runtime/schema"
- "k8s.io/apimachinery/pkg/types"
- "sigs.k8s.io/controller-runtime/pkg/client"
-)
-
-// AdaptorArgs are the args needed to create a sensor deployment
-type AdaptorArgs struct {
- Image string
- EventSource *aev1.EventSource
- Labels map[string]string
-}
-
-// Reconcile does the real logic
-func Reconcile(client client.Client, args *AdaptorArgs, logger *zap.SugaredLogger) error {
- ctx := context.Background()
- eventSource := args.EventSource
- eventBus := &aev1.EventBus{}
- eventBusName := v1alpha1.DefaultEventBusName
- if len(eventSource.Spec.EventBusName) > 0 {
- eventBusName = eventSource.Spec.EventBusName
- }
- err := client.Get(ctx, types.NamespacedName{Namespace: eventSource.Namespace, Name: eventBusName}, eventBus)
- if err != nil {
- if apierrors.IsNotFound(err) {
- eventSource.Status.MarkDeployFailed("EventBusNotFound", "EventBus not found.")
- logger.Errorw("EventBus not found", "eventBusName", eventBusName, "error", err)
- return fmt.Errorf("eventbus %s not found", eventBusName)
- }
- eventSource.Status.MarkDeployFailed("GetEventBusFailed", "Failed to get EventBus.")
- logger.Errorw("failed to get EventBus", "eventBusName", eventBusName, "error", err)
- return err
- }
- if !eventBus.Status.IsReady() {
- eventSource.Status.MarkDeployFailed("EventBusNotReady", "EventBus not ready.")
- logger.Errorw("event bus is not in ready status", "eventBusName", eventBusName, "error", err)
- return fmt.Errorf("eventbus not ready")
- }
-
- expectedDeploy, err := buildDeployment(args, eventBus)
- if err != nil {
- eventSource.Status.MarkDeployFailed("BuildDeploymentSpecFailed", "Failed to build Deployment spec.")
- logger.Errorw("failed to build deployment spec", "error", err)
- return err
- }
-
- deploy, err := getDeployment(ctx, client, args)
- if err != nil && !apierrors.IsNotFound(err) {
- eventSource.Status.MarkDeployFailed("GetDeploymentFailed", "Get existing deployment failed")
- logger.Errorw("error getting existing deployment", "error", err)
- return err
- }
- if deploy != nil {
- if deploy.Annotations != nil && deploy.Annotations[v1alpha1.AnnotationResourceSpecHash] != expectedDeploy.Annotations[v1alpha1.AnnotationResourceSpecHash] {
- deploy.Spec = expectedDeploy.Spec
- deploy.SetLabels(expectedDeploy.Labels)
- deploy.Annotations[v1alpha1.AnnotationResourceSpecHash] = expectedDeploy.Annotations[v1alpha1.AnnotationResourceSpecHash]
- err = client.Update(ctx, deploy)
- if err != nil {
- eventSource.Status.MarkDeployFailed("UpdateDeploymentFailed", "Failed to update existing deployment")
- logger.Errorw("error updating existing deployment", "error", err)
- return err
- }
- logger.Infow("deployment is updated", "deploymentName", deploy.Name)
- }
- } else {
- err = client.Create(ctx, expectedDeploy)
- if err != nil {
- eventSource.Status.MarkDeployFailed("CreateDeploymentFailed", "Failed to create a deployment")
- logger.Errorw("error creating a deployment", "error", err)
- return err
- }
- logger.Infow("deployment is created", "deploymentName", expectedDeploy.Name)
- }
- // Service if any
- existingSvc, err := getService(ctx, client, args)
- if err != nil && !apierrors.IsNotFound(err) {
- eventSource.Status.MarkDeployFailed("GetServiceFailed", "Failed to get existing service")
- logger.Errorw("error getting existing service", "error", err)
- return err
- }
- expectedSvc, err := buildService(args)
- if err != nil {
- eventSource.Status.MarkDeployFailed("BuildServiceFailed", "Failed to build service spec")
- logger.Errorw("error building service spec", "error", err)
- return err
- }
- if expectedSvc == nil {
- if existingSvc != nil {
- err = client.Delete(ctx, existingSvc)
- if err != nil {
- eventSource.Status.MarkDeployFailed("DeleteServiceFailed", "Failed to delete existing service")
- logger.Errorw("error deleting existing service", "error", err)
- return err
- }
- logger.Infow("deleted existing service", "serviceName", existingSvc.Name)
- }
- } else {
- if existingSvc == nil {
- err = client.Create(ctx, expectedSvc)
- if err != nil {
- eventSource.Status.MarkDeployFailed("CreateServiceFailed", "Failed to create a service")
- logger.Errorw("error creating a service", "error", err)
- return err
- }
- logger.Infow("service is created", "serviceName", expectedSvc.Name)
- } else if existingSvc.Annotations != nil && existingSvc.Annotations[v1alpha1.AnnotationResourceSpecHash] != expectedSvc.Annotations[v1alpha1.AnnotationResourceSpecHash] {
- // To avoid service updating issues such as port name change, re-create it.
- err = client.Delete(ctx, existingSvc)
- if err != nil {
- eventSource.Status.MarkDeployFailed("DeleteServiceFailed", "Failed to delete existing service")
- logger.Errorw("error deleting existing service", "error", err)
- return err
- }
- err = client.Create(ctx, expectedSvc)
- if err != nil {
- eventSource.Status.MarkDeployFailed("RecreateServiceFailed", "Failed to re-create existing service")
- logger.Errorw("error re-creating existing service", "error", err)
- return err
- }
- logger.Infow("service is re-created", "serviceName", existingSvc.Name)
- }
- }
- eventSource.Status.MarkDeployed()
- return nil
-}
-
-func getDeployment(ctx context.Context, cl client.Client, args *AdaptorArgs) (*appv1.Deployment, error) {
- dl := &appv1.DeploymentList{}
- err := cl.List(ctx, dl, &client.ListOptions{
- Namespace: args.EventSource.Namespace,
- LabelSelector: labelSelector(args.Labels),
- })
- if err != nil {
- return nil, err
- }
- for _, deploy := range dl.Items {
- if metav1.IsControlledBy(&deploy, args.EventSource) {
- return &deploy, nil
- }
- }
- return nil, apierrors.NewNotFound(schema.GroupResource{}, "")
-}
-
-func buildDeployment(args *AdaptorArgs, eventBus *aev1.EventBus) (*appv1.Deployment, error) {
- deploymentSpec, err := buildDeploymentSpec(args)
- if err != nil {
- return nil, err
- }
- eventSourceCopy := &aev1.EventSource{
- ObjectMeta: metav1.ObjectMeta{
- Namespace: args.EventSource.Namespace,
- Name: args.EventSource.Name,
- },
- Spec: args.EventSource.Spec,
- }
- eventSourceBytes, err := json.Marshal(eventSourceCopy)
- if err != nil {
- return nil, fmt.Errorf("failed marshal eventsource spec")
- }
- busConfigBytes, err := json.Marshal(eventBus.Status.Config)
- if err != nil {
- return nil, fmt.Errorf("failed marshal event bus config: %v", err)
- }
-
- env := []corev1.EnvVar{
- {
- Name: v1alpha1.EnvVarEventSourceObject,
- Value: base64.StdEncoding.EncodeToString(eventSourceBytes),
- },
- {
- Name: v1alpha1.EnvVarEventBusSubject,
- Value: fmt.Sprintf("eventbus-%s", args.EventSource.Namespace),
- },
- {
- Name: v1alpha1.EnvVarPodName,
- ValueFrom: &corev1.EnvVarSource{FieldRef: &corev1.ObjectFieldSelector{FieldPath: "metadata.name"}},
- },
- {
- Name: v1alpha1.EnvVarLeaderElection,
- Value: args.EventSource.Annotations[v1alpha1.AnnotationLeaderElection],
- },
- {
- Name: v1alpha1.EnvVarEventBusConfig,
- Value: base64.StdEncoding.EncodeToString(busConfigBytes),
- },
- }
-
- volumes := []corev1.Volume{
- {
- Name: "tmp",
- VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},
- },
- }
-
- volumeMounts := []corev1.VolumeMount{
- {
- Name: "tmp",
- MountPath: "/tmp",
- },
- }
-
- var secretObjs []interface{}
- var accessSecret *corev1.SecretKeySelector
- var caCertSecret *corev1.SecretKeySelector
- var clientCertSecret *corev1.SecretKeySelector
- var clientKeySecret *corev1.SecretKeySelector
- switch {
- case eventBus.Status.Config.NATS != nil:
- caCertSecret = nil
- clientCertSecret = nil
- clientKeySecret = nil
- accessSecret = eventBus.Status.Config.NATS.AccessSecret
- secretObjs = []interface{}{eventSourceCopy}
- case eventBus.Status.Config.JetStream != nil:
- tlsOptions := eventBus.Status.Config.JetStream.TLS
- if tlsOptions != nil {
- caCertSecret = tlsOptions.CACertSecret
- clientCertSecret = tlsOptions.ClientCertSecret
- clientKeySecret = tlsOptions.ClientKeySecret
- }
- accessSecret = eventBus.Status.Config.JetStream.AccessSecret
- secretObjs = []interface{}{eventSourceCopy}
- case eventBus.Status.Config.Kafka != nil:
- caCertSecret = nil
- clientCertSecret = nil
- clientKeySecret = nil
- accessSecret = nil
- secretObjs = []interface{}{eventSourceCopy, eventBus} // kafka requires secrets for sasl and tls
- default:
- return nil, fmt.Errorf("unsupported event bus")
- }
-
- if accessSecret != nil {
- // Mount the secret as volume instead of using envFrom to gain the ability
- // for the sensor deployment to auto reload when the secret changes
- volumes = append(volumes, corev1.Volume{
- Name: "auth-volume",
- VolumeSource: corev1.VolumeSource{
- Secret: &corev1.SecretVolumeSource{
- SecretName: accessSecret.Name,
- Items: []corev1.KeyToPath{
- {
- Key: accessSecret.Key,
- Path: "auth.yaml",
- },
- },
- },
- },
- })
- volumeMounts = append(volumeMounts, corev1.VolumeMount{
- Name: "auth-volume",
- MountPath: v1alpha1.EventBusAuthFileMountPath,
- })
- }
-
- uniqueCertVolumeMap := make(map[string][]corev1.KeyToPath)
- for _, secret := range []*corev1.SecretKeySelector{caCertSecret, clientCertSecret, clientKeySecret} {
- if secret != nil {
- uniqueCertVolumeMap[secret.Name] = append(uniqueCertVolumeMap[secret.Name], corev1.KeyToPath{
- Key: secret.Key,
- Path: secret.Key,
- })
- }
- }
-
- // We deduplicate the certificate secret mounts to ensure every secret under the TLS config is only mounted once
- // because the secrets MUST be mounted at /argo-events/secrets/
- // in order for util.GetTLSConfig to work without modification
- for secretName, items := range uniqueCertVolumeMap {
- // The names of volumes MUST be valid DNS_LABELs; as the secret names are user-supplied,
- // we perform some input cleansing to ensure they conform
- volumeName := sharedutil.ConvertToDNSLabel(secretName)
-
- optional := false
-
- volumes = append(volumes, corev1.Volume{
- Name: volumeName,
- VolumeSource: corev1.VolumeSource{
- Secret: &corev1.SecretVolumeSource{
- SecretName: secretName,
- Items: items,
- Optional: &optional,
- },
- },
- })
-
- volumeMounts = append(volumeMounts, corev1.VolumeMount{
- Name: volumeName,
- MountPath: fmt.Sprintf("/argo-events/secrets/%s", secretName),
- })
- }
-
- // secrets
- volSecrets, volSecretMounts := sharedutil.VolumesFromSecretsOrConfigMaps(v1alpha1.SecretKeySelectorType, secretObjs...)
- volumes = append(volumes, volSecrets...)
- volumeMounts = append(volumeMounts, volSecretMounts...)
-
- // config maps
- volConfigMaps, volCofigMapMounts := sharedutil.VolumesFromSecretsOrConfigMaps(v1alpha1.ConfigMapKeySelectorType, eventSourceCopy)
- volumeMounts = append(volumeMounts, volCofigMapMounts...)
- volumes = append(volumes, volConfigMaps...)
-
- // Order volumes and volumemounts based on name to make the order deterministic
- sort.Slice(volumes, func(i, j int) bool {
- return volumes[i].Name < volumes[j].Name
- })
- sort.Slice(volumeMounts, func(i, j int) bool {
- return volumeMounts[i].Name < volumeMounts[j].Name
- })
-
- deploymentSpec.Template.Spec.Containers[0].Env = append(deploymentSpec.Template.Spec.Containers[0].Env, env...)
- deploymentSpec.Template.Spec.Containers[0].VolumeMounts = append(deploymentSpec.Template.Spec.Containers[0].VolumeMounts, volumeMounts...)
- deploymentSpec.Template.Spec.Volumes = append(deploymentSpec.Template.Spec.Volumes, volumes...)
-
- deployment := &appv1.Deployment{
- ObjectMeta: metav1.ObjectMeta{
- Namespace: args.EventSource.Namespace,
- GenerateName: fmt.Sprintf("%s-eventsource-", args.EventSource.Name),
- Labels: mergeLabels(args.EventSource.Labels, args.Labels),
- },
- Spec: *deploymentSpec,
- }
- if err := controllerscommon.SetObjectMeta(args.EventSource, deployment, aev1.EventSourceGroupVersionKind); err != nil {
- return nil, err
- }
-
- return deployment, nil
-}
-
-func buildDeploymentSpec(args *AdaptorArgs) (*appv1.DeploymentSpec, error) {
- eventSourceContainer := corev1.Container{
- Image: args.Image,
- ImagePullPolicy: sharedutil.GetImagePullPolicy(),
- Args: []string{"eventsource-service"},
- Ports: []corev1.ContainerPort{
- {Name: "metrics", ContainerPort: v1alpha1.EventSourceMetricsPort},
- },
- }
- if args.EventSource.Spec.Template != nil && args.EventSource.Spec.Template.Container != nil {
- if err := mergo.Merge(&eventSourceContainer, args.EventSource.Spec.Template.Container, mergo.WithOverride); err != nil {
- return nil, err
- }
- }
- eventSourceContainer.Name = "main"
- podTemplateLabels := make(map[string]string)
- if args.EventSource.Spec.Template != nil && args.EventSource.Spec.Template.Metadata != nil &&
- len(args.EventSource.Spec.Template.Metadata.Labels) > 0 {
- for k, v := range args.EventSource.Spec.Template.Metadata.Labels {
- podTemplateLabels[k] = v
- }
- }
- for k, v := range args.Labels {
- podTemplateLabels[k] = v
- }
-
- replicas := args.EventSource.Spec.GetReplicas()
- spec := &appv1.DeploymentSpec{
- Selector: &metav1.LabelSelector{
- MatchLabels: args.Labels,
- },
- Replicas: &replicas,
- Template: corev1.PodTemplateSpec{
- ObjectMeta: metav1.ObjectMeta{
- Labels: podTemplateLabels,
- },
- Spec: corev1.PodSpec{
- Containers: []corev1.Container{
- eventSourceContainer,
- },
- },
- },
- }
- if args.EventSource.Spec.Template != nil {
- if args.EventSource.Spec.Template.Metadata != nil {
- spec.Template.SetAnnotations(args.EventSource.Spec.Template.Metadata.Annotations)
- }
- spec.Template.Spec.ServiceAccountName = args.EventSource.Spec.Template.ServiceAccountName
- spec.Template.Spec.Volumes = args.EventSource.Spec.Template.Volumes
- spec.Template.Spec.SecurityContext = args.EventSource.Spec.Template.SecurityContext
- spec.Template.Spec.NodeSelector = args.EventSource.Spec.Template.NodeSelector
- spec.Template.Spec.Tolerations = args.EventSource.Spec.Template.Tolerations
- spec.Template.Spec.Affinity = args.EventSource.Spec.Template.Affinity
- spec.Template.Spec.ImagePullSecrets = args.EventSource.Spec.Template.ImagePullSecrets
- spec.Template.Spec.PriorityClassName = args.EventSource.Spec.Template.PriorityClassName
- spec.Template.Spec.Priority = args.EventSource.Spec.Template.Priority
- }
- return spec, nil
-}
-
-func getService(ctx context.Context, cl client.Client, args *AdaptorArgs) (*corev1.Service, error) {
- sl := &corev1.ServiceList{}
- err := cl.List(ctx, sl, &client.ListOptions{
- Namespace: args.EventSource.Namespace,
- LabelSelector: labelSelector(args.Labels),
- })
- if err != nil {
- return nil, err
- }
- for _, svc := range sl.Items {
- if metav1.IsControlledBy(&svc, args.EventSource) {
- return &svc, nil
- }
- }
- return nil, apierrors.NewNotFound(schema.GroupResource{}, "")
-}
-
-func buildService(args *AdaptorArgs) (*corev1.Service, error) {
- eventSource := args.EventSource
- if eventSource.Spec.Service == nil {
- return nil, nil
- }
- if len(eventSource.Spec.Service.Ports) == 0 {
- return nil, nil
- }
- // Use a ports copy otherwise it will update the oririnal Ports spec in EventSource
- ports := []corev1.ServicePort{}
- ports = append(ports, eventSource.Spec.Service.Ports...)
-
- svc := &corev1.Service{
- ObjectMeta: metav1.ObjectMeta{
- Name: fmt.Sprintf("%s-eventsource-svc", eventSource.Name),
- Namespace: eventSource.Namespace,
- },
- Spec: corev1.ServiceSpec{
- Ports: ports,
- Type: corev1.ServiceTypeClusterIP,
- ClusterIP: eventSource.Spec.Service.ClusterIP,
- Selector: args.Labels,
- },
- }
-
- labels := mergeLabels(args.EventSource.Labels, args.Labels)
- annotations := make(map[string]string)
-
- if args.EventSource.Spec.Service.Metadata != nil {
- if args.EventSource.Spec.Service.Metadata.Labels != nil {
- labels = mergeLabels(args.EventSource.Spec.Service.Metadata.Labels, labels)
- }
- if args.EventSource.Spec.Service.Metadata.Annotations != nil {
- annotations = mergeLabels(args.EventSource.Spec.Service.Metadata.Annotations, annotations)
- }
- }
-
- svc.ObjectMeta.SetLabels(labels)
- svc.ObjectMeta.SetAnnotations(annotations)
-
- if err := controllerscommon.SetObjectMeta(eventSource, svc, v1alpha1.EventSourceGroupVersionKind); err != nil {
- return nil, err
- }
- return svc, nil
-}
-
-func mergeLabels(eventBusLabels, given map[string]string) map[string]string {
- result := map[string]string{}
- for k, v := range eventBusLabels {
- result[k] = v
- }
- for k, v := range given {
- result[k] = v
- }
- return result
-}
-
-func labelSelector(labelMap map[string]string) labels.Selector {
- return labels.SelectorFromSet(labelMap)
-}
diff --git a/pkg/reconciler/eventsource/resource_test.go b/pkg/reconciler/eventsource/resource_test.go
deleted file mode 100644
index bea3e5b210..0000000000
--- a/pkg/reconciler/eventsource/resource_test.go
+++ /dev/null
@@ -1,346 +0,0 @@
-package eventsource
-
-import (
- "context"
- "fmt"
- "strings"
- "testing"
-
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
- "github.com/stretchr/testify/assert"
- appv1 "k8s.io/api/apps/v1"
- corev1 "k8s.io/api/core/v1"
- "sigs.k8s.io/controller-runtime/pkg/client"
- "sigs.k8s.io/controller-runtime/pkg/client/fake"
-
- "github.com/argoproj/argo-events/pkg/apis/events/v1alpha1"
- "github.com/argoproj/argo-events/pkg/shared/logging"
-)
-
-const (
- testImage = "test-image"
-)
-
-var (
- testLabels = map[string]string{"controller": "test-controller"}
- fakeEventBusJetstreamWithTLS = &v1alpha1.EventBus{
- TypeMeta: metav1.TypeMeta{
- APIVersion: v1alpha1.SchemeGroupVersion.String(),
- Kind: "EventBus",
- },
- ObjectMeta: metav1.ObjectMeta{
- Namespace: testNamespace,
- Name: v1alpha1.DefaultEventBusName,
- },
- Spec: v1alpha1.EventBusSpec{
- JetStream: &v1alpha1.JetStreamBus{},
- },
- Status: v1alpha1.EventBusStatus{
- Config: v1alpha1.BusConfig{
- JetStream: &v1alpha1.JetStreamConfig{
- URL: "nats://xxxx",
- TLS: &v1alpha1.TLSConfig{
- CACertSecret: &corev1.SecretKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{
- Name: "secret-0",
- },
- Key: "ca.crt",
- },
- ClientKeySecret: &corev1.SecretKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{
- Name: "secret-1",
- },
- Key: "tls.key",
- },
- ClientCertSecret: &corev1.SecretKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{
- Name: "secret-1",
- },
- Key: "tls.crt",
- },
- },
- },
- },
- },
- }
-)
-
-func Test_BuildDeployment(t *testing.T) {
- testEventSource := fakeEmptyEventSource()
- testEventSource.Spec.HDFS = fakeHDFSEventSourceMap("test")
- testEventSource.Spec.Template = &v1alpha1.Template{
- ImagePullSecrets: []corev1.LocalObjectReference{
- {
- Name: "test",
- },
- },
- PriorityClassName: "test-class",
- }
- t.Run("test build HDFS", func(t *testing.T) {
- args := &AdaptorArgs{
- Image: testImage,
- EventSource: testEventSource,
- Labels: testLabels,
- }
- deployment, err := buildDeployment(args, fakeEventBus)
- assert.Nil(t, err)
- assert.NotNil(t, deployment)
- volumes := deployment.Spec.Template.Spec.Volumes
- assert.True(t, len(volumes) > 0)
- hasAuthVolume := false
- hasTmpVolume := false
- cmRefs, secretRefs := 0, 0
- for _, vol := range volumes {
- if vol.Name == "auth-volume" {
- hasAuthVolume = true
- }
- if vol.Name == "tmp" {
- hasTmpVolume = true
- }
- if strings.Contains(vol.Name, testEventSource.Spec.HDFS["test"].KrbCCacheSecret.Name) {
- secretRefs++
- }
- if strings.Contains(vol.Name, testEventSource.Spec.HDFS["test"].KrbConfigConfigMap.Name) {
- cmRefs++
- }
- }
- assert.True(t, hasAuthVolume)
- assert.True(t, hasTmpVolume)
- assert.True(t, len(deployment.Spec.Template.Spec.ImagePullSecrets) > 0)
- assert.True(t, cmRefs > 0)
- assert.True(t, secretRefs > 0)
- assert.Equal(t, deployment.Spec.Template.Spec.PriorityClassName, "test-class")
- })
-
- t.Run("test kafka eventbus secrets attached", func(t *testing.T) {
- args := &AdaptorArgs{
- Image: testImage,
- EventSource: testEventSource,
- Labels: testLabels,
- }
-
- // add secrets to kafka eventbus
- testBus := fakeEventBusKafka.DeepCopy()
- testBus.Spec.Kafka.TLS = &v1alpha1.TLSConfig{
- CACertSecret: &corev1.SecretKeySelector{Key: "cert", LocalObjectReference: corev1.LocalObjectReference{Name: "tls-secret"}},
- }
- testBus.Spec.Kafka.SASL = &v1alpha1.SASLConfig{
- Mechanism: "SCRAM-SHA-512",
- UserSecret: &corev1.SecretKeySelector{Key: "username", LocalObjectReference: corev1.LocalObjectReference{Name: "sasl-secret"}},
- PasswordSecret: &corev1.SecretKeySelector{Key: "password", LocalObjectReference: corev1.LocalObjectReference{Name: "sasl-secret"}},
- }
-
- deployment, err := buildDeployment(args, testBus)
- assert.Nil(t, err)
- assert.NotNil(t, deployment)
-
- hasSASLSecretVolume := false
- hasSASLSecretVolumeMount := false
- hasTLSSecretVolume := false
- hasTLSSecretVolumeMount := false
- for _, volume := range deployment.Spec.Template.Spec.Volumes {
- if volume.Name == "secret-sasl-secret" {
- hasSASLSecretVolume = true
- }
- if volume.Name == "secret-tls-secret" {
- hasTLSSecretVolume = true
- }
- }
- for _, volumeMount := range deployment.Spec.Template.Spec.Containers[0].VolumeMounts {
- if volumeMount.Name == "secret-sasl-secret" {
- hasSASLSecretVolumeMount = true
- }
- if volumeMount.Name == "secret-tls-secret" {
- hasTLSSecretVolumeMount = true
- }
- }
-
- assert.True(t, hasSASLSecretVolume)
- assert.True(t, hasSASLSecretVolumeMount)
- assert.True(t, hasTLSSecretVolume)
- assert.True(t, hasTLSSecretVolumeMount)
- })
-
- t.Run("test jetstream eventbus secrets attached", func(t *testing.T) {
- args := &AdaptorArgs{
- Image: testImage,
- EventSource: testEventSource,
- Labels: testLabels,
- }
-
- deployment, err := buildDeployment(args, fakeEventBusJetstreamWithTLS.DeepCopy())
- assert.Nil(t, err)
- assert.NotNil(t, deployment)
-
- hasCAVolume := false
- hasCertVolume := false
- hasCAVolumeMount := false
- hasCertVolumeMount := false
- for _, volume := range deployment.Spec.Template.Spec.Volumes {
- if volume.Name == "secret-0" {
- if hasCAVolume {
- assert.Fail(t, "Secrets should be de-duplicated")
- }
- hasCAVolume = true
- }
- if volume.Name == "secret-1" {
- if hasCertVolume {
- assert.Fail(t, "Secrets should be de-duplicated")
- }
- hasCertVolume = true
- }
- }
- for _, volumeMount := range deployment.Spec.Template.Spec.Containers[0].VolumeMounts {
- if volumeMount.Name == "secret-0" {
- hasCAVolumeMount = true
- assert.Equal(t, volumeMount.MountPath, fmt.Sprintf("/argo-events/secrets/%s", volumeMount.Name))
- }
- if volumeMount.Name == "secret-1" {
- hasCertVolumeMount = true
- assert.Equal(t, volumeMount.MountPath, fmt.Sprintf("/argo-events/secrets/%s", volumeMount.Name))
- }
- }
-
- assert.True(t, hasCAVolume)
- assert.True(t, hasCertVolume)
- assert.True(t, hasCAVolumeMount)
- assert.True(t, hasCertVolumeMount)
- })
-
- t.Run("test secret volume and volumemount order deterministic", func(t *testing.T) {
- args := &AdaptorArgs{
- Image: testImage,
- EventSource: testEventSource,
- Labels: testLabels,
- }
-
- webhooksWithSecrets := map[string]v1alpha1.WebhookEventSource{
- "webhook4": {
- WebhookContext: v1alpha1.WebhookContext{
- URL: "http://a.b",
- Endpoint: "/webhook4",
- Port: "1234",
- AuthSecret: &corev1.SecretKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{Name: "webhook4"},
- Key: "secret",
- },
- },
- },
- "webhook3": {
- WebhookContext: v1alpha1.WebhookContext{
- URL: "http://a.b",
- Endpoint: "/webhook3",
- Port: "1234",
- AuthSecret: &corev1.SecretKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{Name: "webhook3"},
- Key: "secret",
- },
- },
- },
- "webhook1": {
- WebhookContext: v1alpha1.WebhookContext{
- URL: "http://a.b",
- Endpoint: "/webhook1",
- Port: "1234",
- AuthSecret: &corev1.SecretKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{Name: "webhook1"},
- Key: "secret",
- },
- },
- },
- "webhook2": {
- WebhookContext: v1alpha1.WebhookContext{
- URL: "http://a.b",
- Endpoint: "/webhook2",
- Port: "1234",
- AuthSecret: &corev1.SecretKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{Name: "webhook2"},
- Key: "secret",
- },
- },
- },
- }
- args.EventSource.Spec.Webhook = webhooksWithSecrets
-
- wantVolumeNames := []string{"auth-volume", "cm-test-cm", "secret-test-secret", "secret-webhook1", "secret-webhook2", "secret-webhook3", "secret-webhook4", "tmp"}
- wantVolumeMountNames := []string{"auth-volume", "cm-test-cm", "secret-test-secret", "secret-webhook1", "secret-webhook2", "secret-webhook3", "secret-webhook4", "tmp"}
-
- deployment, err := buildDeployment(args, fakeEventBus)
- assert.Nil(t, err)
- assert.NotNil(t, deployment)
- gotVolumes := deployment.Spec.Template.Spec.Volumes
- gotVolumeMounts := deployment.Spec.Template.Spec.Containers[0].VolumeMounts
-
- var gotVolumeNames []string
- var gotVolumeMountNames []string
-
- for _, v := range gotVolumes {
- gotVolumeNames = append(gotVolumeNames, v.Name)
- }
- for _, v := range gotVolumeMounts {
- gotVolumeMountNames = append(gotVolumeMountNames, v.Name)
- }
-
- assert.Equal(t, len(gotVolumes), len(wantVolumeNames))
- assert.Equal(t, len(gotVolumeMounts), len(wantVolumeMountNames))
-
- for i := range gotVolumeNames {
- assert.Equal(t, gotVolumeNames[i], wantVolumeNames[i])
- }
- for i := range gotVolumeMountNames {
- assert.Equal(t, gotVolumeMountNames[i], wantVolumeMountNames[i])
- }
- })
-}
-
-func TestResourceReconcile(t *testing.T) {
- testEventSource := fakeEmptyEventSource()
- testEventSource.Spec.HDFS = fakeHDFSEventSourceMap("test")
- t.Run("test resource reconcile without eventbus", func(t *testing.T) {
- cl := fake.NewClientBuilder().Build()
- args := &AdaptorArgs{
- Image: testImage,
- EventSource: testEventSource,
- Labels: testLabels,
- }
- err := Reconcile(cl, args, logging.NewArgoEventsLogger())
- assert.Error(t, err)
- assert.False(t, testEventSource.Status.IsReady())
- })
-
- for _, eb := range []*v1alpha1.EventBus{fakeEventBus, fakeEventBusJetstream, fakeEventBusKafka} {
- testBus := eb.DeepCopy()
-
- t.Run("test resource reconcile with eventbus", func(t *testing.T) {
- ctx := context.TODO()
- cl := fake.NewClientBuilder().Build()
- testBus.Status.MarkDeployed("test", "test")
- testBus.Status.MarkConfigured()
- err := cl.Create(ctx, testBus)
- assert.Nil(t, err)
- args := &AdaptorArgs{
- Image: testImage,
- EventSource: testEventSource,
- Labels: testLabels,
- }
- err = Reconcile(cl, args, logging.NewArgoEventsLogger())
- assert.Nil(t, err)
- assert.True(t, testEventSource.Status.IsReady())
-
- deployList := &appv1.DeploymentList{}
- err = cl.List(ctx, deployList, &client.ListOptions{
- Namespace: testNamespace,
- })
- assert.NoError(t, err)
- assert.Equal(t, 1, len(deployList.Items))
-
- svcList := &corev1.ServiceList{}
- err = cl.List(ctx, svcList, &client.ListOptions{
- Namespace: testNamespace,
- })
- assert.NoError(t, err)
- assert.Equal(t, 0, len(svcList.Items))
- })
- }
-}
diff --git a/pkg/reconciler/eventsource/validate.go b/pkg/reconciler/eventsource/validate.go
index 59bf11e898..d753dd3eb8 100644
--- a/pkg/reconciler/eventsource/validate.go
+++ b/pkg/reconciler/eventsource/validate.go
@@ -33,13 +33,11 @@ func ValidateEventSource(eventSource *aev1.EventSource) error {
eventNames[eName] = true
} else {
// Duplicated event name not allowed in one EventSource, even they are in different EventSourceType.
- eventSource.Status.MarkSourcesNotProvided("InvalidEventSource", fmt.Sprintf("more than one \"%s\" found", eName))
return fmt.Errorf("more than one %q found in the spec", eName)
}
err := server.ValidateEventSource(ctx)
if err != nil {
- eventSource.Status.MarkSourcesNotProvided("InvalidEventSource", fmt.Sprintf("Invalid spec: %s - %s", server.GetEventSourceName(), server.GetEventName()))
return err
}
}
@@ -47,10 +45,8 @@ func ValidateEventSource(eventSource *aev1.EventSource) error {
if rollingUpdates > 0 && recreates > 0 {
// We don't allow this as if we use recreate strategy for the deployment it will have downtime
- eventSource.Status.MarkSourcesNotProvided("InvalidEventSource", "Some types of event sources can not be put in one spec")
return fmt.Errorf("event sources with rolling update and recreate update strategy can not be put together")
}
- eventSource.Status.MarkSourcesProvided()
return nil
}
diff --git a/pkg/reconciler/sensor/controller.go b/pkg/reconciler/sensor/controller.go
index a1cb3ff513..d9e16cd982 100644
--- a/pkg/reconciler/sensor/controller.go
+++ b/pkg/reconciler/sensor/controller.go
@@ -19,16 +19,19 @@ package sensor
import (
"context"
"fmt"
+ "strings"
"go.uber.org/zap"
"k8s.io/apimachinery/pkg/api/equality"
apierrors "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
+ "sigs.k8s.io/yaml"
"github.com/argoproj/argo-events/pkg/apis/events/v1alpha1"
"github.com/argoproj/argo-events/pkg/shared/logging"
@@ -61,7 +64,7 @@ func (r *reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
r.logger.Warnw("WARNING: sensor not found", "request", req)
return reconcile.Result{}, nil
}
- r.logger.Errorw("unable to get sensor ctl", zap.Any("request", req), zap.Error(err))
+ r.logger.Errorw("Unable to get sensor", zap.Any("request", req), zap.Error(err))
return ctrl.Result{}, err
}
log := r.logger.With("namespace", sensor.Namespace).With("sensor", sensor.Name)
@@ -69,14 +72,17 @@ func (r *reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
sensorCopy := sensor.DeepCopy()
reconcileErr := r.reconcile(ctx, sensorCopy)
if reconcileErr != nil {
- log.Errorw("reconcile error", zap.Error(reconcileErr))
+ log.Errorw("Reconcile error", zap.Error(reconcileErr))
}
- if r.needsUpdate(sensor, sensorCopy) {
- // Use a DeepCopy to update, because it will be mutated afterwards, with empty Status.
- if err := r.client.Update(ctx, sensorCopy.DeepCopy()); err != nil {
- return reconcile.Result{}, err
+ sensorCopy.Status.LastUpdated = metav1.Now()
+ if !equality.Semantic.DeepEqual(sensor.Finalizers, sensorCopy.Finalizers) {
+ patchYaml := "metadata:\n finalizers: [" + strings.Join(sensorCopy.Finalizers, ",") + "]"
+ patchJson, _ := yaml.YAMLToJSON([]byte(patchYaml))
+ if err := r.client.Patch(ctx, sensor, client.RawPatch(types.MergePatchType, patchJson)); err != nil {
+ return ctrl.Result{}, err
}
}
+
if err := r.client.Status().Update(ctx, sensorCopy); err != nil {
return reconcile.Result{}, err
}
@@ -87,16 +93,16 @@ func (r *reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
func (r *reconciler) reconcile(ctx context.Context, sensor *v1alpha1.Sensor) error {
log := logging.FromContext(ctx)
if !sensor.DeletionTimestamp.IsZero() {
- log.Info("deleting sensor")
+ log.Info("Deleting sensor")
if controllerutil.ContainsFinalizer(sensor, finalizerName) {
- // Finalizer logic should be added here.
+ // We don't add finalizer anymore, keep the removing logic for backward compatibility
controllerutil.RemoveFinalizer(sensor, finalizerName)
}
return nil
}
- controllerutil.AddFinalizer(sensor, finalizerName)
sensor.Status.InitConditions()
+ sensor.Status.SetObservedGeneration(sensor.Generation)
eventBus := &v1alpha1.EventBus{}
eventBusName := v1alpha1.DefaultEventBusName
@@ -107,11 +113,11 @@ func (r *reconciler) reconcile(ctx context.Context, sensor *v1alpha1.Sensor) err
if err != nil {
if apierrors.IsNotFound(err) {
sensor.Status.MarkDeployFailed("EventBusNotFound", "EventBus not found.")
- log.Errorw("EventBus not found", "eventBusName", eventBusName, "error", err)
+ log.Errorw("EventBus not found", "eventBusName", eventBusName, zap.Error(err))
return fmt.Errorf("eventbus %s not found", eventBusName)
}
sensor.Status.MarkDeployFailed("GetEventBusFailed", "Failed to get EventBus.")
- log.Errorw("failed to get EventBus", "eventBusName", eventBusName, "error", err)
+ log.Errorw("failed to get EventBus", "eventBusName", eventBusName, zap.Error(err))
return err
}
@@ -130,13 +136,3 @@ func (r *reconciler) reconcile(ctx context.Context, sensor *v1alpha1.Sensor) err
}
return Reconcile(r.client, eventBus, args, log)
}
-
-func (r *reconciler) needsUpdate(old, new *v1alpha1.Sensor) bool {
- if old == nil {
- return true
- }
- if !equality.Semantic.DeepEqual(old.Finalizers, new.Finalizers) {
- return true
- }
- return false
-}
diff --git a/pkg/reconciler/sensor/validate.go b/pkg/reconciler/sensor/validate.go
index 18d93c9a41..c89662d25a 100644
--- a/pkg/reconciler/sensor/validate.go
+++ b/pkg/reconciler/sensor/validate.go
@@ -35,21 +35,13 @@ func ValidateSensor(s *v1alpha1.Sensor, b *v1alpha1.EventBus) error {
if s == nil {
return fmt.Errorf("nil sensor")
}
- if b == nil {
- s.Status.MarkDependenciesNotProvided("InvalidEventBus", "nil eventbus")
- return fmt.Errorf("nil eventbus")
- }
if err := validateDependencies(s.Spec.Dependencies, b); err != nil {
- s.Status.MarkDependenciesNotProvided("InvalidDependencies", err.Error())
- return err
+ return fmt.Errorf("invalid dependencies, %w", err)
}
- s.Status.MarkDependenciesProvided()
err := validateTriggers(s.Spec.Triggers)
if err != nil {
- s.Status.MarkTriggersNotProvided("InvalidTriggers", err.Error())
- return err
+ return fmt.Errorf("invalid triggers, %w", err)
}
- s.Status.MarkTriggersProvided()
return nil
}