diff --git a/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml b/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml index b3f1db4b35..d2700428ee 100644 --- a/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: catalogsources.operators.coreos.com spec: group: operators.coreos.com @@ -150,6 +150,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -180,11 +182,14 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -236,6 +241,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -266,7 +273,10 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic podAffinity: description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). @@ -332,6 +342,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -345,12 +357,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -360,12 +372,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -409,6 +421,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -427,6 +441,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -441,6 +456,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -498,6 +514,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -511,12 +529,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -526,12 +544,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -575,6 +593,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -593,6 +613,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -601,6 +622,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). type: object @@ -665,6 +687,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -678,12 +702,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -693,12 +717,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -742,6 +766,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -760,6 +786,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -774,6 +801,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -831,6 +859,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -844,12 +874,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -859,12 +889,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -908,6 +938,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -926,6 +958,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -934,6 +967,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic extractContent: description: |- ExtractContent configures the gRPC catalog Pod to extract catalog metadata from the provided index image and diff --git a/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml b/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml index c65bc25d36..a3192a66d3 100644 --- a/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: clusterserviceversions.operators.coreos.com spec: group: operators.coreos.com @@ -110,7 +110,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -169,7 +169,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -194,7 +194,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -232,7 +232,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -291,7 +291,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -316,7 +316,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -370,7 +370,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -422,7 +422,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -447,7 +447,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -484,7 +484,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -536,7 +536,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -561,7 +561,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -634,6 +634,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic nonResourceURLs: description: |- NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path @@ -642,21 +643,25 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic resourceNames: description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. type: array items: type: string + x-kubernetes-list-type: atomic resources: description: Resources is a list of resources this rule applies to. '*' represents all resources. type: array items: type: string + x-kubernetes-list-type: atomic verbs: description: Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. type: array items: type: string + x-kubernetes-list-type: atomic serviceAccountName: type: string deployments: @@ -750,6 +755,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -898,6 +905,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -928,11 +937,14 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -984,6 +996,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -1014,7 +1028,10 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic podAffinity: description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). @@ -1080,6 +1097,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1093,12 +1112,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1108,12 +1127,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1157,6 +1176,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1175,6 +1196,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1189,6 +1211,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -1246,6 +1269,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1259,12 +1284,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1274,12 +1299,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1323,6 +1348,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1341,6 +1368,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1349,6 +1377,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). type: object @@ -1413,6 +1442,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1426,12 +1457,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1441,12 +1472,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1490,6 +1521,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1508,6 +1541,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1522,6 +1556,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -1579,6 +1614,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1592,12 +1629,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1607,12 +1644,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1656,6 +1693,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1674,6 +1713,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1682,6 +1722,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic automountServiceAccountToken: description: AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. type: boolean @@ -1711,6 +1752,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic command: description: |- Entrypoint array. Not executed within a shell. @@ -1724,6 +1766,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic env: description: |- List of environment variables to set in the container. @@ -1766,9 +1809,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -1822,13 +1870,21 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map envFrom: description: |- List of sources to populate environment variables in the container. @@ -1849,9 +1905,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -1866,13 +1927,19 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic image: description: |- Container image name. @@ -1916,6 +1983,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -1945,6 +2013,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2020,6 +2089,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -2049,6 +2119,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2119,6 +2190,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -2172,6 +2244,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2323,6 +2396,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -2376,6 +2450,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2564,6 +2639,30 @@ spec: 2) has CAP_SYS_ADMIN Note that this field cannot be set when spec.os.name is windows. type: boolean + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by this container. If set, this profile + overrides the pod's appArmorProfile. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string capabilities: description: |- The capabilities to add/drop when running containers. @@ -2577,12 +2676,14 @@ spec: items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic drop: description: Removed capabilities type: array items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic privileged: description: |- Run container in privileged mode. @@ -2735,6 +2836,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -2788,6 +2890,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2919,6 +3022,9 @@ spec: name: description: name must match the name of a persistentVolumeClaim in the pod type: string + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map volumeMounts: description: |- Pod volumes to mount into the container's filesystem. @@ -2942,6 +3048,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -2951,6 +3059,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -2963,6 +3094,9 @@ spec: Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. type: string + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map workingDir: description: |- Container's working directory. @@ -2970,6 +3104,9 @@ spec: might be configured in the container image. Cannot be updated. type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map dnsConfig: description: |- Specifies the DNS parameters of a pod. @@ -2985,6 +3122,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic options: description: |- A list of DNS resolver options. @@ -3001,6 +3139,7 @@ spec: type: string value: type: string + x-kubernetes-list-type: atomic searches: description: |- A list of DNS search domains for host-name lookup. @@ -3009,6 +3148,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic dnsPolicy: description: |- Set DNS policy for the pod. @@ -3059,6 +3199,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic command: description: |- Entrypoint array. Not executed within a shell. @@ -3072,6 +3213,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic env: description: |- List of environment variables to set in the container. @@ -3114,9 +3256,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -3170,13 +3317,21 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map envFrom: description: |- List of sources to populate environment variables in the container. @@ -3197,9 +3352,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -3214,13 +3374,19 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic image: description: |- Container image name. @@ -3260,6 +3426,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -3289,6 +3456,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3364,6 +3532,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -3393,6 +3562,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3459,6 +3629,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -3512,6 +3683,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3651,6 +3823,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -3704,6 +3877,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3879,6 +4053,30 @@ spec: 2) has CAP_SYS_ADMIN Note that this field cannot be set when spec.os.name is windows. type: boolean + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by this container. If set, this profile + overrides the pod's appArmorProfile. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string capabilities: description: |- The capabilities to add/drop when running containers. @@ -3892,12 +4090,14 @@ spec: items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic drop: description: Removed capabilities type: array items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic privileged: description: |- Run container in privileged mode. @@ -4043,6 +4243,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -4096,6 +4297,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -4237,6 +4439,9 @@ spec: name: description: name must match the name of a persistentVolumeClaim in the pod type: string + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map volumeMounts: description: |- Pod volumes to mount into the container's filesystem. Subpath mounts are not allowed for ephemeral containers. @@ -4260,6 +4465,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -4269,6 +4476,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -4281,6 +4511,9 @@ spec: Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. type: string + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map workingDir: description: |- Container's working directory. @@ -4288,25 +4521,35 @@ spec: might be configured in the container image. Cannot be updated. type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map hostAliases: description: |- HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts - file if specified. This is only valid for non-hostNetwork pods. + file if specified. type: array items: description: |- HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file. type: object + required: + - ip properties: hostnames: description: Hostnames for the above IP address. type: array items: type: string + x-kubernetes-list-type: atomic ip: description: IP address of the host file entry. type: string + default: "" + x-kubernetes-list-map-keys: + - ip + x-kubernetes-list-type: map hostIPC: description: |- Use the host's ipc namespace. @@ -4355,10 +4598,18 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map initContainers: description: |- List of initialization containers belonging to the pod. @@ -4394,6 +4645,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic command: description: |- Entrypoint array. Not executed within a shell. @@ -4407,6 +4659,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic env: description: |- List of environment variables to set in the container. @@ -4449,9 +4702,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -4505,13 +4763,21 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map envFrom: description: |- List of sources to populate environment variables in the container. @@ -4532,9 +4798,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -4549,13 +4820,19 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic image: description: |- Container image name. @@ -4599,6 +4876,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -4628,6 +4906,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -4703,6 +4982,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -4732,6 +5012,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -4802,6 +5083,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -4855,6 +5137,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -5006,6 +5289,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -5059,6 +5343,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -5247,6 +5532,30 @@ spec: 2) has CAP_SYS_ADMIN Note that this field cannot be set when spec.os.name is windows. type: boolean + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by this container. If set, this profile + overrides the pod's appArmorProfile. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string capabilities: description: |- The capabilities to add/drop when running containers. @@ -5260,12 +5569,14 @@ spec: items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic drop: description: Removed capabilities type: array items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic privileged: description: |- Run container in privileged mode. @@ -5418,6 +5729,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -5471,6 +5783,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -5602,6 +5915,9 @@ spec: name: description: name must match the name of a persistentVolumeClaim in the pod type: string + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map volumeMounts: description: |- Pod volumes to mount into the container's filesystem. @@ -5625,6 +5941,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -5634,6 +5952,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -5646,6 +5987,9 @@ spec: Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. type: string + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map workingDir: description: |- Container's working directory. @@ -5653,6 +5997,9 @@ spec: might be configured in the container image. Cannot be updated. type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map nodeName: description: |- NodeName is a request to schedule this pod onto a specific node. If it is non-empty, @@ -5682,6 +6029,7 @@ spec: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.appArmorProfile - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup @@ -5691,6 +6039,7 @@ spec: - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups + - spec.containers[*].securityContext.appArmorProfile - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities @@ -5767,6 +6116,7 @@ spec: conditionType: description: ConditionType refers to a condition in the pod's condition list with matching type. type: string + x-kubernetes-list-type: atomic resourceClaims: description: |- ResourceClaims defines which ResourceClaims must be allocated @@ -5852,9 +6202,6 @@ spec: SchedulingGates can only be set at pod creation time, and be removed only afterwards. - - - This is a beta feature enabled by the PodSchedulingReadiness feature gate. type: array items: description: PodSchedulingGate is associated to a Pod to guard its scheduling. @@ -5876,6 +6223,29 @@ spec: Optional: Defaults to empty. See type description for default values of each field. type: object properties: + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by the containers in this pod. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string fsGroup: description: |- A special supplemental group that applies to all containers in a pod. @@ -5991,6 +6361,7 @@ spec: items: type: integer format: int64 + x-kubernetes-list-type: atomic sysctls: description: |- Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported @@ -6010,6 +6381,7 @@ spec: value: description: Value of a property to set type: string + x-kubernetes-list-type: atomic windowsOptions: description: |- The Windows specific settings applied to all containers. @@ -6043,7 +6415,7 @@ spec: type: string serviceAccount: description: |- - DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. + DeprecatedServiceAccount is a deprecated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. type: string serviceAccountName: @@ -6123,6 +6495,7 @@ spec: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string + x-kubernetes-list-type: atomic topologySpreadConstraints: description: |- TopologySpreadConstraints describes how a group of pods ought to spread across topology @@ -6173,6 +6546,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -6242,9 +6617,6 @@ spec: In this situation, new pod with the same labelSelector cannot be scheduled, because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones, it will violate MaxSkew. - - - This is a beta field and requires the MinDomainsInPodTopologySpread feature gate to be enabled (enabled by default). type: integer format: int32 nodeAffinityPolicy: @@ -6415,6 +6787,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic path: description: 'path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /' type: string @@ -6438,9 +6811,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -6477,9 +6855,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeID: description: |- @@ -6538,12 +6921,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -6577,9 +6966,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic readOnly: description: |- @@ -6619,7 +7013,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -6666,6 +7060,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic emptyDir: description: |- emptyDir represents a temporary directory that shares a pod's lifetime. @@ -6775,6 +7170,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic dataSource: description: |- dataSource field can be used to specify either: @@ -6917,6 +7313,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -6943,7 +7341,7 @@ spec: If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass + More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled. type: string volumeMode: @@ -6979,6 +7377,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic wwids: description: |- wwids Optional: FC volume world wide identifiers (wwids) @@ -6986,6 +7385,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic flexVolume: description: |- flexVolume represents a generic volume resource that is @@ -7025,9 +7425,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic flocker: description: flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running @@ -7202,6 +7607,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic readOnly: description: |- readOnly here will force the ReadOnly setting in VolumeMounts. @@ -7214,9 +7620,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic targetPortal: description: |- @@ -7388,6 +7799,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -7460,12 +7873,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -7484,7 +7903,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -7531,6 +7950,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic secret: description: secret information about the secret data to project type: object @@ -7572,12 +7992,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional field specify whether the Secret or its key must be defined type: boolean @@ -7610,6 +8036,7 @@ spec: path is the path relative to the mount point of the file to project the token into. type: string + x-kubernetes-list-type: atomic quobyte: description: quobyte represents a Quobyte mount on the host that shares a pod's lifetime type: object @@ -7681,6 +8108,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic pool: description: |- pool is the rados pool name. @@ -7704,9 +8132,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -7749,9 +8182,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default false @@ -7826,6 +8264,7 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic optional: description: optional field specify whether the Secret or its keys must be defined type: boolean @@ -7858,9 +8297,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeName: description: |- @@ -7897,6 +8341,9 @@ spec: volumePath: description: volumePath is the path that identifies vSphere volume vmdk type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map permissions: type: array items: @@ -7923,6 +8370,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic nonResourceURLs: description: |- NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path @@ -7931,21 +8379,25 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic resourceNames: description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. type: array items: type: string + x-kubernetes-list-type: atomic resources: description: Resources is a list of resources this rule applies to. '*' represents all resources. type: array items: type: string + x-kubernetes-list-type: atomic verbs: description: Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. type: array items: type: string + x-kubernetes-list-type: atomic serviceAccountName: type: string strategy: @@ -8079,6 +8531,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -8169,6 +8623,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels diff --git a/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml b/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml index afdb6cfd7c..97c4551e04 100644 --- a/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: installplans.operators.coreos.com spec: group: operators.coreos.com diff --git a/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml b/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml index e90729ad61..21a679ca25 100644 --- a/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: olmconfigs.operators.coreos.com spec: group: operators.coreos.com diff --git a/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml b/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml index dada8e93b0..571d8f8e6e 100644 --- a/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: operatorconditions.operators.coreos.com spec: group: operators.coreos.com diff --git a/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml b/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml index 3daddc999c..2061eaa9aa 100644 --- a/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: operatorgroups.operators.coreos.com spec: group: operators.coreos.com @@ -83,6 +83,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -341,6 +343,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels diff --git a/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml b/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml index e58f182cf8..0b570b1b2e 100644 --- a/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: operators.operators.coreos.com spec: group: operators.coreos.com @@ -84,6 +84,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels diff --git a/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml b/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml index df5ecd967c..e9eedba916 100644 --- a/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml +++ b/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: subscriptions.operators.coreos.com spec: group: operators.coreos.com @@ -137,6 +137,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -167,11 +169,14 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -223,6 +228,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -253,7 +260,10 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic podAffinity: description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). @@ -319,6 +329,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -332,12 +344,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -347,12 +359,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -396,6 +408,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -414,6 +428,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -428,6 +443,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -485,6 +501,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -498,12 +516,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -513,12 +531,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -562,6 +580,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -580,6 +600,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -588,6 +609,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). type: object @@ -652,6 +674,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -665,12 +689,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -680,12 +704,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -729,6 +753,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -747,6 +773,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -761,6 +788,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -818,6 +846,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -831,12 +861,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -846,12 +876,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -895,6 +925,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -913,6 +945,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -921,6 +954,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic annotations: description: |- Annotations is an unstructured key value map stored with each Deployment, Pod, APIService in the Operator. @@ -972,9 +1006,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -1028,9 +1067,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean @@ -1055,9 +1099,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -1072,9 +1121,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean @@ -1182,6 +1236,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1251,6 +1307,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -1260,6 +1318,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -1377,6 +1458,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic path: description: 'path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /' type: string @@ -1400,9 +1482,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -1439,9 +1526,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeID: description: |- @@ -1500,12 +1592,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -1539,9 +1637,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic readOnly: description: |- @@ -1581,7 +1684,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -1628,6 +1731,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic emptyDir: description: |- emptyDir represents a temporary directory that shares a pod's lifetime. @@ -1737,6 +1841,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic dataSource: description: |- dataSource field can be used to specify either: @@ -1879,6 +1984,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1905,7 +2012,7 @@ spec: If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass + More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled. type: string volumeMode: @@ -1941,6 +2048,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic wwids: description: |- wwids Optional: FC volume world wide identifiers (wwids) @@ -1948,6 +2056,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic flexVolume: description: |- flexVolume represents a generic volume resource that is @@ -1987,9 +2096,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic flocker: description: flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running @@ -2164,6 +2278,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic readOnly: description: |- readOnly here will force the ReadOnly setting in VolumeMounts. @@ -2176,9 +2291,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic targetPortal: description: |- @@ -2350,6 +2470,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -2422,12 +2544,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -2446,7 +2574,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -2493,6 +2621,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic secret: description: secret information about the secret data to project type: object @@ -2534,12 +2663,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional field specify whether the Secret or its key must be defined type: boolean @@ -2572,6 +2707,7 @@ spec: path is the path relative to the mount point of the file to project the token into. type: string + x-kubernetes-list-type: atomic quobyte: description: quobyte represents a Quobyte mount on the host that shares a pod's lifetime type: object @@ -2643,6 +2779,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic pool: description: |- pool is the rados pool name. @@ -2666,9 +2803,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -2711,9 +2853,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default false @@ -2788,6 +2935,7 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic optional: description: optional field specify whether the Secret or its keys must be defined type: boolean @@ -2820,9 +2968,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeName: description: |- diff --git a/go.mod b/go.mod index 92aa53a78c..e46c49dae6 100644 --- a/go.mod +++ b/go.mod @@ -23,13 +23,13 @@ require ( github.com/onsi/gomega v1.33.1 github.com/openshift/api v3.9.0+incompatible github.com/openshift/client-go v0.0.0-20220525160904-9e1acff93e4a - github.com/operator-framework/api v0.23.0 - github.com/operator-framework/operator-registry v1.41.0 + github.com/operator-framework/api v0.25.0 + github.com/operator-framework/operator-registry v1.43.1 github.com/otiai10/copy v1.14.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.18.0 + github.com/prometheus/client_golang v1.19.0 github.com/prometheus/client_model v0.6.1 - github.com/prometheus/common v0.47.0 + github.com/prometheus/common v0.51.1 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 @@ -37,7 +37,7 @@ require ( golang.org/x/net v0.25.0 golang.org/x/sync v0.7.0 golang.org/x/time v0.5.0 - google.golang.org/grpc v1.63.2 + google.golang.org/grpc v1.64.0 gopkg.in/yaml.v2 v2.4.0 k8s.io/api v0.30.1 k8s.io/apiextensions-apiserver v0.30.1 @@ -57,43 +57,43 @@ require ( require ( github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/BurntSushi/toml v1.3.2 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/Microsoft/hcsshim v0.12.0-rc.3 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/Microsoft/hcsshim v0.12.3 // indirect github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/containerd/cgroups/v3 v3.0.2 // indirect - github.com/containerd/containerd v1.7.16 // indirect + github.com/containerd/cgroups/v3 v3.0.3 // indirect + github.com/containerd/containerd v1.7.17 // indirect github.com/containerd/continuity v0.4.2 // indirect github.com/containerd/errdefs v0.1.0 // indirect github.com/containerd/log v0.1.0 // indirect - github.com/containerd/ttrpc v1.2.3 // indirect + github.com/containerd/ttrpc v1.2.4 // indirect github.com/containerd/typeurl/v2 v2.1.1 // indirect - github.com/containers/common v0.58.2 // indirect - github.com/containers/image/v5 v5.30.1 // indirect + github.com/containers/common v0.59.0 // indirect + github.com/containers/image/v5 v5.31.0 // indirect github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 // indirect - github.com/containers/ocicrypt v1.1.9 // indirect - github.com/containers/storage v1.53.0 // indirect + github.com/containers/ocicrypt v1.1.10 // indirect + github.com/containers/storage v1.54.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/cli v26.1.2+incompatible // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/docker/cli v26.1.3+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v25.0.5+incompatible // indirect + github.com/docker/docker v26.1.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.1 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/go-restful/v3 v3.11.2 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect - github.com/fatih/color v1.17.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.20.2 // indirect - github.com/go-openapi/jsonreference v0.20.4 // indirect - github.com/go-openapi/swag v0.22.10 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gobuffalo/flect v1.0.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -110,15 +110,12 @@ require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/h2non/filetype v1.1.3 // indirect github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/itchyny/timefmt-go v0.1.6 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.7 // indirect - github.com/klauspost/pgzip v1.2.6 // indirect + github.com/klauspost/compress v1.17.8 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -133,42 +130,37 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect - github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/stoewer/go-strcase v1.3.0 // indirect github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect - github.com/vbatts/tar-split v0.11.5 // indirect go.etcd.io/bbolt v1.3.10 // indirect go.etcd.io/etcd/api/v3 v3.5.12 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.12 // indirect go.etcd.io/etcd/client/v3 v3.5.12 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 // indirect - go.opentelemetry.io/otel v1.23.1 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 // indirect - go.opentelemetry.io/otel/metric v1.23.1 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/sdk v1.23.1 // indirect - go.opentelemetry.io/otel/trace v1.23.1 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/oauth2 v0.20.0 // indirect golang.org/x/sys v0.20.0 // indirect golang.org/x/term v0.20.0 // indirect golang.org/x/text v0.15.0 // indirect golang.org/x/tools v0.21.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -183,6 +175,17 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) +// pin to v1.18.0 until k8s.io/component-base updates its prometheus dependency +// issue: https://github.com/operator-framework/operator-lifecycle-manager/issues/3283 +replace ( + github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.18.0 + github.com/prometheus/common => github.com/prometheus/common v0.47.0 +) + +// v1.64.0 breaks our e2e tests as it affects the grpc connection state transition +// issue: https://github.com/operator-framework/operator-lifecycle-manager/issues/3284 +replace google.golang.org/grpc => google.golang.org/grpc v1.63.2 + replace ( // controller runtime github.com/openshift/api => github.com/openshift/api v0.0.0-20221021112143-4226c2167e40 // release-4.12 diff --git a/go.sum b/go.sum index b2cdcc08ce..7d74486ba7 100644 --- a/go.sum +++ b/go.sum @@ -1,85 +1,1436 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU= cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= +cloud.google.com/go/accessapproval v1.7.2/go.mod h1:/gShiq9/kK/h8T/eEn1BTzalDvk0mZxJlhfw0p+Xuc0= +cloud.google.com/go/accessapproval v1.7.3/go.mod h1:4l8+pwIxGTNqSf4T3ds8nLO94NQf0W/KnMNuQ9PbnP8= +cloud.google.com/go/accessapproval v1.7.4/go.mod h1:/aTEh45LzplQgFYdQdwPMR9YdX0UlhBmvB84uAmQKUc= +cloud.google.com/go/accessapproval v1.7.5/go.mod h1:g88i1ok5dvQ9XJsxpUInWWvUBrIZhyPDPbk4T01OoJ0= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= +cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= +cloud.google.com/go/accesscontextmanager v1.8.2/go.mod h1:E6/SCRM30elQJ2PKtFMs2YhfJpZSNcJyejhuzoId4Zk= +cloud.google.com/go/accesscontextmanager v1.8.3/go.mod h1:4i/JkF2JiFbhLnnpnfoTX5vRXfhf9ukhU1ANOTALTOQ= +cloud.google.com/go/accesscontextmanager v1.8.4/go.mod h1:ParU+WbMpD34s5JFEnGAnPBYAgUHozaTmDJU7aCU9+M= +cloud.google.com/go/accesscontextmanager v1.8.5/go.mod h1:TInEhcZ7V9jptGNqN3EzZ5XMhT6ijWxTGjzyETwmL0Q= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.50.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.1/go.mod h1:kY3nIMAVQOK2XDqDPHaOuD9e+FdMA6OOpfBjsvaFSOo= +cloud.google.com/go/aiplatform v1.51.2/go.mod h1:hCqVYB3mY45w99TmetEoe8eCQEwZEp9WHxeZdcv9phw= +cloud.google.com/go/aiplatform v1.52.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.54.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.57.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.58.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.58.2/go.mod h1:c3kCiVmb6UC1dHAjZjcpDj6ZS0bHQ2slL88ZjC2LtlA= +cloud.google.com/go/aiplatform v1.60.0/go.mod h1:eTlGuHOahHprZw3Hio5VKmtThIOak5/qy6pzdsqcQnM= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.4/go.mod h1:zZgNCxLCy8b2rKKVfC1YkC2vTrpfZmeRCySM3aUbskA= +cloud.google.com/go/analytics v0.21.5/go.mod h1:BQtOBHWTlJ96axpPPnw5CvGJ6i3Ve/qX2fTxR8qWyr8= +cloud.google.com/go/analytics v0.21.6/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= +cloud.google.com/go/analytics v0.22.0/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= +cloud.google.com/go/analytics v0.23.0/go.mod h1:YPd7Bvik3WS95KBok2gPXDqQPHy08TsCQG6CdUCb+u0= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= +cloud.google.com/go/apigateway v1.6.2/go.mod h1:CwMC90nnZElorCW63P2pAYm25AtQrHfuOkbRSHj0bT8= +cloud.google.com/go/apigateway v1.6.3/go.mod h1:k68PXWpEs6BVDTtnLQAyG606Q3mz8pshItwPXjgv44Y= +cloud.google.com/go/apigateway v1.6.4/go.mod h1:0EpJlVGH5HwAN4VF4Iec8TAzGN1aQgbxAWGJsnPCGGY= +cloud.google.com/go/apigateway v1.6.5/go.mod h1:6wCwvYRckRQogyDDltpANi3zsCDl6kWi0b4Je+w2UiI= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= +cloud.google.com/go/apigeeconnect v1.6.2/go.mod h1:s6O0CgXT9RgAxlq3DLXvG8riw8PYYbU/v25jqP3Dy18= +cloud.google.com/go/apigeeconnect v1.6.3/go.mod h1:peG0HFQ0si2bN15M6QSjEW/W7Gy3NYkWGz7pFz13cbo= +cloud.google.com/go/apigeeconnect v1.6.4/go.mod h1:CapQCWZ8TCjnU0d7PobxhpOdVz/OVJ2Hr/Zcuu1xFx0= +cloud.google.com/go/apigeeconnect v1.6.5/go.mod h1:MEKm3AiT7s11PqTfKE3KZluZA9O91FNysvd3E6SJ6Ow= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= +cloud.google.com/go/apigeeregistry v0.7.2/go.mod h1:9CA2B2+TGsPKtfi3F7/1ncCCsL62NXBRfM6iPoGSM+8= +cloud.google.com/go/apigeeregistry v0.8.1/go.mod h1:MW4ig1N4JZQsXmBSwH4rwpgDonocz7FPBSw6XPGHmYw= +cloud.google.com/go/apigeeregistry v0.8.2/go.mod h1:h4v11TDGdeXJDJvImtgK2AFVvMIgGWjSb0HRnBSjcX8= +cloud.google.com/go/apigeeregistry v0.8.3/go.mod h1:aInOWnqF4yMQx8kTjDqHNXjZGh/mxeNlAf52YqtASUs= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= +cloud.google.com/go/appengine v1.8.2/go.mod h1:WMeJV9oZ51pvclqFN2PqHoGnys7rK0rz6s3Mp6yMvDo= +cloud.google.com/go/appengine v1.8.3/go.mod h1:2oUPZ1LVZ5EXi+AF1ihNAF+S8JrzQ3till5m9VQkrsk= +cloud.google.com/go/appengine v1.8.4/go.mod h1:TZ24v+wXBujtkK77CXCpjZbnuTvsFNT41MUaZ28D6vg= +cloud.google.com/go/appengine v1.8.5/go.mod h1:uHBgNoGLTS5di7BvU25NFDuKa82v0qQLjyMJLuPQrVo= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= +cloud.google.com/go/area120 v0.8.2/go.mod h1:a5qfo+x77SRLXnCynFWPUZhnZGeSgvQ+Y0v1kSItkh4= +cloud.google.com/go/area120 v0.8.3/go.mod h1:5zj6pMzVTH+SVHljdSKC35sriR/CVvQZzG/Icdyriw0= +cloud.google.com/go/area120 v0.8.4/go.mod h1:jfawXjxf29wyBXr48+W+GyX/f8fflxp642D/bb9v68M= +cloud.google.com/go/area120 v0.8.5/go.mod h1:BcoFCbDLZjsfe4EkCnEq1LKvHSK0Ew/zk5UFu6GMyA0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= +cloud.google.com/go/artifactregistry v1.14.2/go.mod h1:Xk+QbsKEb0ElmyeMfdHAey41B+qBq3q5R5f5xD4XT3U= +cloud.google.com/go/artifactregistry v1.14.3/go.mod h1:A2/E9GXnsyXl7GUvQ/2CjHA+mVRoWAXC0brg2os+kNI= +cloud.google.com/go/artifactregistry v1.14.4/go.mod h1:SJJcZTMv6ce0LDMUnihCN7WSrI+kBSFV0KIKo8S8aYU= +cloud.google.com/go/artifactregistry v1.14.6/go.mod h1:np9LSFotNWHcjnOgh8UVK0RFPCTUGbO0ve3384xyHfE= +cloud.google.com/go/artifactregistry v1.14.7/go.mod h1:0AUKhzWQzfmeTvT4SjfI4zjot72EMfrkvL9g9aRjnnM= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= +cloud.google.com/go/asset v1.15.0/go.mod h1:tpKafV6mEut3+vN9ScGvCHXHj7FALFVta+okxFECHcg= +cloud.google.com/go/asset v1.15.1/go.mod h1:yX/amTvFWRpp5rcFq6XbCxzKT8RJUam1UoboE179jU4= +cloud.google.com/go/asset v1.15.2/go.mod h1:B6H5tclkXvXz7PD22qCA2TDxSVQfasa3iDlM89O2NXs= +cloud.google.com/go/asset v1.15.3/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= +cloud.google.com/go/asset v1.16.0/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= +cloud.google.com/go/asset v1.17.0/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= +cloud.google.com/go/asset v1.17.1/go.mod h1:byvDw36UME5AzGNK7o4JnOnINkwOZ1yRrGrKIahHrng= +cloud.google.com/go/asset v1.17.2/go.mod h1:SVbzde67ehddSoKf5uebOD1sYw8Ab/jD/9EIeWg99q4= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= +cloud.google.com/go/assuredworkloads v1.11.2/go.mod h1:O1dfr+oZJMlE6mw0Bp0P1KZSlj5SghMBvTpZqIcUAW4= +cloud.google.com/go/assuredworkloads v1.11.3/go.mod h1:vEjfTKYyRUaIeA0bsGJceFV2JKpVRgyG2op3jfa59Zs= +cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U= +cloud.google.com/go/assuredworkloads v1.11.5/go.mod h1:FKJ3g3ZvkL2D7qtqIGnDufFkHxwIpNM9vtmhvt+6wqk= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= +cloud.google.com/go/automl v1.13.2/go.mod h1:gNY/fUmDEN40sP8amAX3MaXkxcqPIn7F1UIIPZpy4Mg= +cloud.google.com/go/automl v1.13.3/go.mod h1:Y8KwvyAZFOsMAPqUCfNu1AyclbC6ivCUF/MTwORymyY= +cloud.google.com/go/automl v1.13.4/go.mod h1:ULqwX/OLZ4hBVfKQaMtxMSTlPx0GqGbWN8uA/1EqCP8= +cloud.google.com/go/automl v1.13.5/go.mod h1:MDw3vLem3yh+SvmSgeYUmUKqyls6NzSumDm9OJ3xJ1Y= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA= +cloud.google.com/go/baremetalsolution v1.2.0/go.mod h1:68wi9AwPYkEWIUT4SvSGS9UJwKzNpshjHsH4lzk8iOw= +cloud.google.com/go/baremetalsolution v1.2.1/go.mod h1:3qKpKIw12RPXStwQXcbhfxVj1dqQGEvcmA+SX/mUR88= +cloud.google.com/go/baremetalsolution v1.2.2/go.mod h1:O5V6Uu1vzVelYahKfwEWRMaS3AbCkeYHy3145s1FkhM= +cloud.google.com/go/baremetalsolution v1.2.3/go.mod h1:/UAQ5xG3faDdy180rCUv47e0jvpp3BFxT+Cl0PFjw5g= +cloud.google.com/go/baremetalsolution v1.2.4/go.mod h1:BHCmxgpevw9IEryE99HbYEfxXkAEA3hkMJbYYsHtIuY= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A= +cloud.google.com/go/batch v1.4.1/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.0/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.1/go.mod h1:RpBuIYLkQu8+CWDk3dFD/t/jOCGuUpkpX+Y0n1Xccs8= +cloud.google.com/go/batch v1.6.1/go.mod h1:urdpD13zPe6YOK+6iZs/8/x2VBRofvblLpx0t57vM98= +cloud.google.com/go/batch v1.6.3/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= +cloud.google.com/go/batch v1.7.0/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= +cloud.google.com/go/batch v1.8.0/go.mod h1:k8V7f6VE2Suc0zUM4WtoibNrA6D3dqBpB+++e3vSGYc= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.1/go.mod h1:zl/rWWAFVeV+kx+X2Javly7o1EIQThU4WlkynffL/lk= +cloud.google.com/go/beyondcorp v1.0.2/go.mod h1:m8cpG7caD+5su+1eZr+TSvF6r21NdLJk4f9u4SP2Ntc= +cloud.google.com/go/beyondcorp v1.0.3/go.mod h1:HcBvnEd7eYr+HGDd5ZbuVmBYX019C6CEXBonXbCVwJo= +cloud.google.com/go/beyondcorp v1.0.4/go.mod h1:Gx8/Rk2MxrvWfn4WIhHIG1NV7IBfg14pTKv1+EArVcc= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.55.0/go.mod h1:9Y5I3PN9kQWuid6183JFhOGOW3GcirA5LpsKCUn+2ec= +cloud.google.com/go/bigquery v1.56.0/go.mod h1:KDcsploXTEY7XT3fDQzMUZlpQLHzE4itubHrnmhUrZA= +cloud.google.com/go/bigquery v1.57.1/go.mod h1:iYzC0tGVWt1jqSzBHqCr3lrRn0u13E8e+AqowBsDgug= +cloud.google.com/go/bigquery v1.58.0/go.mod h1:0eh4mWNY0KrBTjUzLjoYImapGORq9gEPT7MWjCy9lik= +cloud.google.com/go/bigquery v1.59.1/go.mod h1:VP1UJYgevyTwsV7desjzNzDND5p6hZB+Z8gZJN1GQUc= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= +cloud.google.com/go/billing v1.17.0/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.1/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.2/go.mod h1:u/AdV/3wr3xoRBk5xvUzYMS1IawOAPwQMuHgHMdljDg= +cloud.google.com/go/billing v1.17.3/go.mod h1:z83AkoZ7mZwBGT3yTnt6rSGI1OOsHSIi6a5M3mJ8NaU= +cloud.google.com/go/billing v1.17.4/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= +cloud.google.com/go/billing v1.18.0/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= +cloud.google.com/go/billing v1.18.2/go.mod h1:PPIwVsOOQ7xzbADCwNe8nvK776QpfrOAUkvKjCUcpSE= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= +cloud.google.com/go/binaryauthorization v1.7.0/go.mod h1:Zn+S6QqTMn6odcMU1zDZCJxPjU2tZPV1oDl45lWY154= +cloud.google.com/go/binaryauthorization v1.7.1/go.mod h1:GTAyfRWYgcbsP3NJogpV3yeunbUIjx2T9xVeYovtURE= +cloud.google.com/go/binaryauthorization v1.7.2/go.mod h1:kFK5fQtxEp97m92ziy+hbu+uKocka1qRRL8MVJIgjv0= +cloud.google.com/go/binaryauthorization v1.7.3/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= +cloud.google.com/go/binaryauthorization v1.8.0/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= +cloud.google.com/go/binaryauthorization v1.8.1/go.mod h1:1HVRyBerREA/nhI7yLang4Zn7vfNVA3okoAR9qYQJAQ= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= +cloud.google.com/go/certificatemanager v1.7.2/go.mod h1:15SYTDQMd00kdoW0+XY5d9e+JbOPjp24AvF48D8BbcQ= +cloud.google.com/go/certificatemanager v1.7.3/go.mod h1:T/sZYuC30PTag0TLo28VedIRIj1KPGcOQzjWAptHa00= +cloud.google.com/go/certificatemanager v1.7.4/go.mod h1:FHAylPe/6IIKuaRmHbjbdLhGhVQ+CWHSD5Jq0k4+cCE= +cloud.google.com/go/certificatemanager v1.7.5/go.mod h1:uX+v7kWqy0Y3NG/ZhNvffh0kuqkKZIXdvlZRO7z0VtM= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= +cloud.google.com/go/channel v1.17.0/go.mod h1:RpbhJsGi/lXWAUM1eF4IbQGbsfVlg2o8Iiy2/YLfVT0= +cloud.google.com/go/channel v1.17.1/go.mod h1:xqfzcOZAcP4b/hUDH0GkGg1Sd5to6di1HOJn/pi5uBQ= +cloud.google.com/go/channel v1.17.2/go.mod h1:aT2LhnftnyfQceFql5I/mP8mIbiiJS4lWqgXA815zMk= +cloud.google.com/go/channel v1.17.3/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= +cloud.google.com/go/channel v1.17.4/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= +cloud.google.com/go/channel v1.17.5/go.mod h1:FlpaOSINDAXgEext0KMaBq/vwpLMkkPAw9b2mApQeHc= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.1/go.mod h1:K7wGc/3zfvmYWOWwYTgF/d/UVJhS4pu+HAy7PL7mCsU= +cloud.google.com/go/cloudbuild v1.14.2/go.mod h1:Bn6RO0mBYk8Vlrt+8NLrru7WXlQ9/RDWz2uo5KG1/sg= +cloud.google.com/go/cloudbuild v1.14.3/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= +cloud.google.com/go/cloudbuild v1.15.0/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= +cloud.google.com/go/cloudbuild v1.15.1/go.mod h1:gIofXZSu+XD2Uy+qkOrGKEx45zd7s28u/k8f99qKals= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= +cloud.google.com/go/clouddms v1.7.0/go.mod h1:MW1dC6SOtI/tPNCciTsXtsGNEM0i0OccykPvv3hiYeM= +cloud.google.com/go/clouddms v1.7.1/go.mod h1:o4SR8U95+P7gZ/TX+YbJxehOCsM+fe6/brlrFquiszk= +cloud.google.com/go/clouddms v1.7.2/go.mod h1:Rk32TmWmHo64XqDvW7jgkFQet1tUKNVzs7oajtJT3jU= +cloud.google.com/go/clouddms v1.7.3/go.mod h1:fkN2HQQNUYInAU3NQ3vRLkV2iWs8lIdmBKOx4nrL6Hc= +cloud.google.com/go/clouddms v1.7.4/go.mod h1:RdrVqoFG9RWI5AvZ81SxJ/xvxPdtcRhFotwdE79DieY= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.2/go.mod h1:A7nYkjNlW2gUoROg1kvJrQGhJP/38UaWwsnuBDOBVUk= +cloud.google.com/go/cloudtasks v1.12.3/go.mod h1:GPVXhIOSGEaR+3xT4Fp72ScI+HjHffSS4B8+BaBB5Ys= +cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWKBPGnsb7udGY0= +cloud.google.com/go/cloudtasks v1.12.6/go.mod h1:b7c7fe4+TJsFZfDyzO51F7cjq7HLUlRi/KZQLQjDsaY= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.23.4/go.mod h1:/EJMj55asU6kAFnuZET8zqgwgJ9FvXWXOkkfQZa4ioI= cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= +cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.11.0/go.mod h1:hutBdImE4XNZ1NV4vbPJKSFOnQruhC5Lj9bZqWMTKiU= +cloud.google.com/go/contactcenterinsights v1.11.1/go.mod h1:FeNP3Kg8iteKM80lMwSk3zZZKVxr+PGnAId6soKuXwE= +cloud.google.com/go/contactcenterinsights v1.11.2/go.mod h1:A9PIR5ov5cRcd28KlDbmmXE8Aay+Gccer2h4wzkYFso= +cloud.google.com/go/contactcenterinsights v1.11.3/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.12.0/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.12.1/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.13.0/go.mod h1:ieq5d5EtHsu8vhe2y3amtZ+BE+AQwX5qAy7cpo0POsI= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.26.0/go.mod h1:YJCmRet6+6jnYYRS000T6k0D0xUXQgBSaJ7VwI8FBj4= +cloud.google.com/go/container v1.26.1/go.mod h1:5smONjPRUxeEpDG7bMKWfDL4sauswqEtnBK1/KKpR04= +cloud.google.com/go/container v1.26.2/go.mod h1:YlO84xCt5xupVbLaMY4s3XNE79MUJ+49VmkInr6HvF4= +cloud.google.com/go/container v1.27.1/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.28.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.29.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.30.1/go.mod h1:vkbfX0EnAKL/vgVECs5BZn24e1cJROzgszJirRKQ4Bg= +cloud.google.com/go/container v1.31.0/go.mod h1:7yABn5s3Iv3lmw7oMmyGbeV6tQj86njcTijkkGuvdZA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= +cloud.google.com/go/containeranalysis v0.11.0/go.mod h1:4n2e99ZwpGxpNcz+YsFT1dfOHPQFGcAC8FN2M2/ne/U= +cloud.google.com/go/containeranalysis v0.11.1/go.mod h1:rYlUOM7nem1OJMKwE1SadufX0JP3wnXj844EtZAwWLY= +cloud.google.com/go/containeranalysis v0.11.2/go.mod h1:xibioGBC1MD2j4reTyV1xY1/MvKaz+fyM9ENWhmIeP8= +cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U= +cloud.google.com/go/containeranalysis v0.11.4/go.mod h1:cVZT7rXYBS9NG1rhQbWL9pWbXCKHWJPYraE8/FTSYPE= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= +cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.17.1/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.0/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.1/go.mod h1:TzAWaz+ON1tkNr4MOcak8EBHX7wIRX/gZKM+yTVsv+A= +cloud.google.com/go/datacatalog v1.18.2/go.mod h1:SPVgWW2WEMuWHA+fHodYjmxPiMqcOiWfhc9OD5msigk= +cloud.google.com/go/datacatalog v1.18.3/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= +cloud.google.com/go/datacatalog v1.19.0/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= +cloud.google.com/go/datacatalog v1.19.2/go.mod h1:2YbODwmhpLM4lOFe3PuEhHK9EyTzQJ5AXgIy7EDKTEE= +cloud.google.com/go/datacatalog v1.19.3/go.mod h1:ra8V3UAsciBpJKQ+z9Whkxzxv7jmQg1hfODr3N3YPJ4= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= +cloud.google.com/go/dataflow v0.9.2/go.mod h1:vBfdBZ/ejlTaYIGB3zB4T08UshH70vbtZeMD+urnUSo= +cloud.google.com/go/dataflow v0.9.3/go.mod h1:HI4kMVjcHGTs3jTHW/kv3501YW+eloiJSLxkJa/vqFE= +cloud.google.com/go/dataflow v0.9.4/go.mod h1:4G8vAkHYCSzU8b/kmsoR2lWyHJD85oMJPHMtan40K8w= +cloud.google.com/go/dataflow v0.9.5/go.mod h1:udl6oi8pfUHnL0z6UN9Lf9chGqzDMVqcYTcZ1aPnCZQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= +cloud.google.com/go/dataform v0.8.2/go.mod h1:X9RIqDs6NbGPLR80tnYoPNiO1w0wenKTb8PxxlhTMKM= +cloud.google.com/go/dataform v0.8.3/go.mod h1:8nI/tvv5Fso0drO3pEjtowz58lodx8MVkdV2q0aPlqg= +cloud.google.com/go/dataform v0.9.1/go.mod h1:pWTg+zGQ7i16pyn0bS1ruqIE91SdL2FDMvEYu/8oQxs= +cloud.google.com/go/dataform v0.9.2/go.mod h1:S8cQUwPNWXo7m/g3DhWHsLBoufRNn9EgFrMgne2j7cI= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= +cloud.google.com/go/datafusion v1.7.2/go.mod h1:62K2NEC6DRlpNmI43WHMWf9Vg/YvN6QVi8EVwifElI0= +cloud.google.com/go/datafusion v1.7.3/go.mod h1:eoLt1uFXKGBq48jy9LZ+Is8EAVLnmn50lNncLzwYokE= +cloud.google.com/go/datafusion v1.7.4/go.mod h1:BBs78WTOLYkT4GVZIXQCZT3GFpkpDN4aBY4NDX/jVlM= +cloud.google.com/go/datafusion v1.7.5/go.mod h1:bYH53Oa5UiqahfbNK9YuYKteeD4RbQSNMx7JF7peGHc= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= +cloud.google.com/go/datalabeling v0.8.2/go.mod h1:cyDvGHuJWu9U/cLDA7d8sb9a0tWLEletStu2sTmg3BE= +cloud.google.com/go/datalabeling v0.8.3/go.mod h1:tvPhpGyS/V7lqjmb3V0TaDdGvhzgR1JoW7G2bpi2UTI= +cloud.google.com/go/datalabeling v0.8.4/go.mod h1:Z1z3E6LHtffBGrNUkKwbwbDxTiXEApLzIgmymj8A3S8= +cloud.google.com/go/datalabeling v0.8.5/go.mod h1:IABB2lxQnkdUbMnQaOl2prCOfms20mcPxDBm36lps+s= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.10.1/go.mod h1:1MzmBv8FvjYfc7vDdxhnLFNskikkB+3vl475/XdCDhs= +cloud.google.com/go/dataplex v1.10.2/go.mod h1:xdC8URdTrCrZMW6keY779ZT1cTOfV8KEPNsw+LTRT1Y= +cloud.google.com/go/dataplex v1.11.1/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.11.2/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.13.0/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.14.0/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.14.1/go.mod h1:bWxQAbg6Smg+sca2+Ex7s8D9a5qU6xfXtwmq4BVReps= +cloud.google.com/go/dataplex v1.14.2/go.mod h1:0oGOSFlEKef1cQeAHXy4GZPB/Ife0fz/PxBf+ZymA2U= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4= +cloud.google.com/go/dataproc/v2 v2.2.0/go.mod h1:lZR7AQtwZPvmINx5J87DSOOpTfof9LVZju6/Qo4lmcY= +cloud.google.com/go/dataproc/v2 v2.2.1/go.mod h1:QdAJLaBjh+l4PVlVZcmrmhGccosY/omC1qwfQ61Zv/o= +cloud.google.com/go/dataproc/v2 v2.2.2/go.mod h1:aocQywVmQVF4i8CL740rNI/ZRpsaaC1Wh2++BJ7HEJ4= +cloud.google.com/go/dataproc/v2 v2.2.3/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= +cloud.google.com/go/dataproc/v2 v2.3.0/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= +cloud.google.com/go/dataproc/v2 v2.4.0/go.mod h1:3B1Ht2aRB8VZIteGxQS/iNSJGzt9+CA0WGnDVMEm7Z4= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= +cloud.google.com/go/dataqna v0.8.2/go.mod h1:KNEqgx8TTmUipnQsScOoDpq/VlXVptUqVMZnt30WAPs= +cloud.google.com/go/dataqna v0.8.3/go.mod h1:wXNBW2uvc9e7Gl5k8adyAMnLush1KVV6lZUhB+rqNu4= +cloud.google.com/go/dataqna v0.8.4/go.mod h1:mySRKjKg5Lz784P6sCov3p1QD+RZQONRMRjzGNcFd0c= +cloud.google.com/go/dataqna v0.8.5/go.mod h1:vgihg1mz6n7pb5q2YJF7KlXve6tCglInd6XO0JGOlWM= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.14.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.1/go.mod h1:7ngSYwnw95YFyTd5tOGBxHlOZiL+OtpjheqU7t2/s/c= +cloud.google.com/go/datastream v1.10.2/go.mod h1:W42TFgKAs/om6x/CdXX5E4oiAsKlH+e8MTGy81zdYt0= +cloud.google.com/go/datastream v1.10.3/go.mod h1:YR0USzgjhqA/Id0Ycu1VvZe8hEWwrkjuXrGbzeDOSEA= +cloud.google.com/go/datastream v1.10.4/go.mod h1:7kRxPdxZxhPg3MFeCSulmAJnil8NJGGvSNdn4p1sRZo= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.1/go.mod h1:8jeadyLkH9qu9xgO3hVWw8jVr29N1mnW42gRJT8GY6g= +cloud.google.com/go/deploy v1.14.1/go.mod h1:N8S0b+aIHSEeSr5ORVoC0+/mOPUysVt8ae4QkZYolAw= +cloud.google.com/go/deploy v1.14.2/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.15.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.16.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.17.0/go.mod h1:XBr42U5jIr64t92gcpOXxNrqL2PStQCXHuKK5GRUuYo= +cloud.google.com/go/deploy v1.17.1/go.mod h1:SXQyfsXrk0fBmgBHRzBjQbZhMfKZ3hMQBw5ym7MN/50= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.43.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.1/go.mod h1:n/h+/N2ouKOO+rbe/ZnI186xImpqvCVj2DdsWS/0EAk= +cloud.google.com/go/dialogflow v1.44.2/go.mod h1:QzFYndeJhpVPElnFkUXxdlptx0wPnBWLCBT9BvtC3/c= +cloud.google.com/go/dialogflow v1.44.3/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dialogflow v1.47.0/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dialogflow v1.48.0/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dialogflow v1.48.1/go.mod h1:C1sjs2/g9cEwjCltkKeYp3FFpz8BOzNondEaAlCpt+A= +cloud.google.com/go/dialogflow v1.48.2/go.mod h1:7A2oDf6JJ1/+hdpnFRfb/RjJUOh2X3rhIa5P8wQSEX4= +cloud.google.com/go/dialogflow v1.49.0/go.mod h1:dhVrXKETtdPlpPhE7+2/k4Z8FRNUp6kMV3EW3oz/fe0= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= +cloud.google.com/go/dlp v1.10.2/go.mod h1:ZbdKIhcnyhILgccwVDzkwqybthh7+MplGC3kZVZsIOQ= +cloud.google.com/go/dlp v1.10.3/go.mod h1:iUaTc/ln8I+QT6Ai5vmuwfw8fqTk2kaz0FvCwhLCom0= +cloud.google.com/go/dlp v1.11.1/go.mod h1:/PA2EnioBeXTL/0hInwgj0rfsQb3lpE3R8XUJxqUNKI= +cloud.google.com/go/dlp v1.11.2/go.mod h1:9Czi+8Y/FegpWzgSfkRlyz+jwW6Te9Rv26P3UfU/h/w= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.1/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.0/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.2/go.mod h1:Q/wcRT+qnuXOpjAkvOV4A+IeQl04q2/ReT7SSbytLSo= +cloud.google.com/go/documentai v1.23.4/go.mod h1:4MYAaEMnADPN1LPN5xboDR5QVB6AgsaxgFdJhitlE2Y= +cloud.google.com/go/documentai v1.23.5/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/documentai v1.23.6/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/documentai v1.23.7/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/documentai v1.23.8/go.mod h1:Vd/y5PosxCpUHmwC+v9arZyeMfTqBR9VIwOwIqQYYfA= +cloud.google.com/go/documentai v1.25.0/go.mod h1:ftLnzw5VcXkLItp6pw1mFic91tMRyfv6hHEY5br4KzY= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= +cloud.google.com/go/domains v0.9.2/go.mod h1:3YvXGYzZG1Temjbk7EyGCuGGiXHJwVNmwIf+E/cUp5I= +cloud.google.com/go/domains v0.9.3/go.mod h1:29k66YNDLDY9LCFKpGFeh6Nj9r62ZKm5EsUJxAl84KU= +cloud.google.com/go/domains v0.9.4/go.mod h1:27jmJGShuXYdUNjyDG0SodTfT5RwLi7xmH334Gvi3fY= +cloud.google.com/go/domains v0.9.5/go.mod h1:dBzlxgepazdFhvG7u23XMhmMKBjrkoUNaw0A8AQB55Y= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= +cloud.google.com/go/edgecontainer v1.1.2/go.mod h1:wQRjIzqxEs9e9wrtle4hQPSR1Y51kqN75dgF7UllZZ4= +cloud.google.com/go/edgecontainer v1.1.3/go.mod h1:Ll2DtIABzEfaxaVSbwj3QHFaOOovlDFiWVDu349jSsA= +cloud.google.com/go/edgecontainer v1.1.4/go.mod h1:AvFdVuZuVGdgaE5YvlL1faAoa1ndRR/5XhXZvPBHbsE= +cloud.google.com/go/edgecontainer v1.1.5/go.mod h1:rgcjrba3DEDEQAidT4yuzaKWTbkTI5zAMu3yy6ZWS0M= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= +cloud.google.com/go/essentialcontacts v1.6.3/go.mod h1:yiPCD7f2TkP82oJEFXFTou8Jl8L6LBRPeBEkTaO0Ggo= +cloud.google.com/go/essentialcontacts v1.6.4/go.mod h1:iju5Vy3d9tJUg0PYMd1nHhjV7xoCXaOAVabrwLaPBEM= +cloud.google.com/go/essentialcontacts v1.6.5/go.mod h1:jjYbPzw0x+yglXC890l6ECJWdYeZ5dlYACTFL0U/VuM= +cloud.google.com/go/essentialcontacts v1.6.6/go.mod h1:XbqHJGaiH0v2UvtuucfOzFXN+rpL/aU5BCZLn4DYl1Q= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.1/go.mod h1:EqBxmGHFrruIara4FUQ3RHlgfCn7yo1HYsu2Hpt/C3Y= +cloud.google.com/go/eventarc v1.13.2/go.mod h1:X9A80ShVu19fb4e5sc/OLV7mpFUKZMwfJFeeWhcIObM= +cloud.google.com/go/eventarc v1.13.3/go.mod h1:RWH10IAZIRcj1s/vClXkBgMHwh59ts7hSWcqD3kaclg= +cloud.google.com/go/eventarc v1.13.4/go.mod h1:zV5sFVoAa9orc/52Q+OuYUG9xL2IIZTbbuTHC6JSY8s= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= +cloud.google.com/go/filestore v1.7.2/go.mod h1:TYOlyJs25f/omgj+vY7/tIG/E7BX369triSPzE4LdgE= +cloud.google.com/go/filestore v1.7.3/go.mod h1:Qp8WaEERR3cSkxToxFPHh/b8AACkSut+4qlCjAmKTV0= +cloud.google.com/go/filestore v1.7.4/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= +cloud.google.com/go/filestore v1.8.0/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= +cloud.google.com/go/filestore v1.8.1/go.mod h1:MbN9KcaM47DRTIuLfQhJEsjaocVebNtNQhSLhKCF5GM= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= +cloud.google.com/go/functions v1.15.2/go.mod h1:CHAjtcR6OU4XF2HuiVeriEdELNcnvRZSk1Q8RMqy4lE= +cloud.google.com/go/functions v1.15.3/go.mod h1:r/AMHwBheapkkySEhiZYLDBwVJCdlRwsm4ieJu35/Ug= +cloud.google.com/go/functions v1.15.4/go.mod h1:CAsTc3VlRMVvx+XqXxKqVevguqJpnVip4DdonFsX28I= +cloud.google.com/go/functions v1.16.0/go.mod h1:nbNpfAG7SG7Duw/o1iZ6ohvL7mc6MapWQVpqtM29n8k= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.1/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.2/go.mod h1:OMZbXzEJloyXMC7gqdSB+EOEQ1AKcpGYvO3s1ec5ixk= +cloud.google.com/go/gkebackup v1.3.3/go.mod h1:eMk7/wVV5P22KBakhQnJxWSVftL1p4VBFLpv0kIft7I= +cloud.google.com/go/gkebackup v1.3.4/go.mod h1:gLVlbM8h/nHIs09ns1qx3q3eaXcGSELgNu1DWXYz1HI= +cloud.google.com/go/gkebackup v1.3.5/go.mod h1:KJ77KkNN7Wm1LdMopOelV6OodM01pMuK2/5Zt1t4Tvc= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= +cloud.google.com/go/gkeconnect v0.8.2/go.mod h1:6nAVhwchBJYgQCXD2pHBFQNiJNyAd/wyxljpaa6ZPrY= +cloud.google.com/go/gkeconnect v0.8.3/go.mod h1:i9GDTrfzBSUZGCe98qSu1B8YB8qfapT57PenIb820Jo= +cloud.google.com/go/gkeconnect v0.8.4/go.mod h1:84hZz4UMlDCKl8ifVW8layK4WHlMAFeq8vbzjU0yJkw= +cloud.google.com/go/gkeconnect v0.8.5/go.mod h1:LC/rS7+CuJ5fgIbXv8tCD/mdfnlAadTaUufgOkmijuk= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= +cloud.google.com/go/gkehub v0.14.2/go.mod h1:iyjYH23XzAxSdhrbmfoQdePnlMj2EWcvnR+tHdBQsCY= +cloud.google.com/go/gkehub v0.14.3/go.mod h1:jAl6WafkHHW18qgq7kqcrXYzN08hXeK/Va3utN8VKg8= +cloud.google.com/go/gkehub v0.14.4/go.mod h1:Xispfu2MqnnFt8rV/2/3o73SK1snL8s9dYJ9G2oQMfc= +cloud.google.com/go/gkehub v0.14.5/go.mod h1:6bzqxM+a+vEH/h8W8ec4OJl4r36laxTs3A/fMNHJ0wA= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.1/go.mod h1:AcrGoin6VLKT/fwZEYuqvVominLriQBCKmbjtnbMjG8= +cloud.google.com/go/gkemulticloud v1.0.2/go.mod h1:+ee5VXxKb3H1l4LZAcgWB/rvI16VTNTrInWxDjAGsGo= +cloud.google.com/go/gkemulticloud v1.0.3/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= +cloud.google.com/go/gkemulticloud v1.1.0/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= +cloud.google.com/go/gkemulticloud v1.1.1/go.mod h1:C+a4vcHlWeEIf45IB5FFR5XGjTeYhF83+AYIpTy4i2Q= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= +cloud.google.com/go/grafeas v0.3.4/go.mod h1:A5m316hcG+AulafjAbPKXBO/+I5itU4LOdKO2R/uDIc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= +cloud.google.com/go/gsuiteaddons v1.6.2/go.mod h1:K65m9XSgs8hTF3X9nNTPi8IQueljSdYo9F+Mi+s4MyU= +cloud.google.com/go/gsuiteaddons v1.6.3/go.mod h1:sCFJkZoMrLZT3JTb8uJqgKPNshH2tfXeCwTFRebTq48= +cloud.google.com/go/gsuiteaddons v1.6.4/go.mod h1:rxtstw7Fx22uLOXBpsvb9DUbC+fiXs7rF4U29KHM/pE= +cloud.google.com/go/gsuiteaddons v1.6.5/go.mod h1:Lo4P2IvO8uZ9W+RaC6s1JVxo42vgy+TX5a6hfBZ0ubs= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= +cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= +cloud.google.com/go/iap v1.9.0/go.mod h1:01OFxd1R+NFrg78S+hoPV5PxEzv22HXaNqUUlmNHFuY= +cloud.google.com/go/iap v1.9.1/go.mod h1:SIAkY7cGMLohLSdBR25BuIxO+I4fXJiL06IBL7cy/5Q= +cloud.google.com/go/iap v1.9.2/go.mod h1:GwDTOs047PPSnwRD0Us5FKf4WDRcVvHg1q9WVkKBhdI= +cloud.google.com/go/iap v1.9.3/go.mod h1:DTdutSZBqkkOm2HEOTBzhZxh2mwwxshfD/h3yofAiCw= +cloud.google.com/go/iap v1.9.4/go.mod h1:vO4mSq0xNf/Pu6E5paORLASBwEmphXEjgCFg7aeNu1w= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= +cloud.google.com/go/ids v1.4.2/go.mod h1:3vw8DX6YddRu9BncxuzMyWn0g8+ooUjI2gslJ7FH3vk= +cloud.google.com/go/ids v1.4.3/go.mod h1:9CXPqI3GedjmkjbMWCUhMZ2P2N7TUMzAkVXYEH2orYU= +cloud.google.com/go/ids v1.4.4/go.mod h1:z+WUc2eEl6S/1aZWzwtVNWoSZslgzPxAboS0lZX0HjI= +cloud.google.com/go/ids v1.4.5/go.mod h1:p0ZnyzjMWxww6d2DvMGnFwCsSxDJM666Iir1bK1UuBo= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= +cloud.google.com/go/iot v1.7.2/go.mod h1:q+0P5zr1wRFpw7/MOgDXrG/HVA+l+cSwdObffkrpnSg= +cloud.google.com/go/iot v1.7.3/go.mod h1:t8itFchkol4VgNbHnIq9lXoOOtHNR3uAACQMYbN9N4I= +cloud.google.com/go/iot v1.7.4/go.mod h1:3TWqDVvsddYBG++nHSZmluoCAVGr1hAcabbWZNKEZLk= +cloud.google.com/go/iot v1.7.5/go.mod h1:nq3/sqTz3HGaWJi1xNiX7F41ThOzpud67vwk0YsSsqs= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.2/go.mod h1:3hopT4+7ooWRCjc2DxgnpESFxhIraaI2IpAVUEhbT/w= +cloud.google.com/go/kms v1.15.3/go.mod h1:AJdXqHxS2GlPyduM99s9iGqi2nwbviBbhV/hdmt4iOQ= +cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= +cloud.google.com/go/kms v1.15.6/go.mod h1:yF75jttnIdHfGBoE51AKsD/Yqf+/jICzB9v1s1acsms= +cloud.google.com/go/kms v1.15.7/go.mod h1:ub54lbsa6tDkUwnu4W7Yt1aAIFLnspgh0kPGToDukeI= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= +cloud.google.com/go/language v1.11.0/go.mod h1:uDx+pFDdAKTY8ehpWbiXyQdz8tDSYLJbQcXsCkjYyvQ= +cloud.google.com/go/language v1.11.1/go.mod h1:Xyid9MG9WOX3utvDbpX7j3tXDmmDooMyMDqgUVpH17U= +cloud.google.com/go/language v1.12.1/go.mod h1:zQhalE2QlQIxbKIZt54IASBzmZpN/aDASea5zl1l+J4= +cloud.google.com/go/language v1.12.2/go.mod h1:9idWapzr/JKXBBQ4lWqVX/hcadxB194ry20m/bTrhWc= +cloud.google.com/go/language v1.12.3/go.mod h1:evFX9wECX6mksEva8RbRnr/4wi/vKGYnAJrTRXU8+f8= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= +cloud.google.com/go/lifesciences v0.9.2/go.mod h1:QHEOO4tDzcSAzeJg7s2qwnLM2ji8IRpQl4p6m5Z9yTA= +cloud.google.com/go/lifesciences v0.9.3/go.mod h1:gNGBOJV80IWZdkd+xz4GQj4mbqaz737SCLHn2aRhQKM= +cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqNj+Nia7hF0Z7JA= +cloud.google.com/go/lifesciences v0.9.5/go.mod h1:OdBm0n7C0Osh5yZB7j9BXyrMnTRGBJIZonUMxo5CzPw= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI= +cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= +cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y= +cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= +cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= +cloud.google.com/go/managedidentities v1.6.2/go.mod h1:5c2VG66eCa0WIq6IylRk3TBW83l161zkFvCj28X7jn8= +cloud.google.com/go/managedidentities v1.6.3/go.mod h1:tewiat9WLyFN0Fi7q1fDD5+0N4VUoL0SCX0OTCthZq4= +cloud.google.com/go/managedidentities v1.6.4/go.mod h1:WgyaECfHmF00t/1Uk8Oun3CQ2PGUtjc3e9Alh79wyiM= +cloud.google.com/go/managedidentities v1.6.5/go.mod h1:fkFI2PwwyRQbjLxlm5bQ8SjtObFMW3ChBGNqaMcgZjI= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.1/go.mod h1:BxSa0BnW1g2U2gNdbq5zikLlHUuHW0GFWh7sgML2kIY= +cloud.google.com/go/maps v1.5.1/go.mod h1:NPMZw1LJwQZYCfz4y+EIw+SI+24A4bpdFJqdKVr0lt4= +cloud.google.com/go/maps v1.6.1/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= +cloud.google.com/go/maps v1.6.2/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= +cloud.google.com/go/maps v1.6.3/go.mod h1:VGAn809ADswi1ASofL5lveOHPnE6Rk/SFTTBx1yuOLw= +cloud.google.com/go/maps v1.6.4/go.mod h1:rhjqRy8NWmDJ53saCfsXQ0LKwBHfi6OSh5wkq6BaMhI= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= +cloud.google.com/go/mediatranslation v0.8.2/go.mod h1:c9pUaDRLkgHRx3irYE5ZC8tfXGrMYwNZdmDqKMSfFp8= +cloud.google.com/go/mediatranslation v0.8.3/go.mod h1:F9OnXTy336rteOEywtY7FOqCk+J43o2RF638hkOQl4Y= +cloud.google.com/go/mediatranslation v0.8.4/go.mod h1:9WstgtNVAdN53m6TQa5GjIjLqKQPXe74hwSCxUP6nj4= +cloud.google.com/go/mediatranslation v0.8.5/go.mod h1:y7kTHYIPCIfgyLbKncgqouXJtLsU+26hZhHEEy80fSs= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= +cloud.google.com/go/memcache v1.10.2/go.mod h1:f9ZzJHLBrmd4BkguIAa/l/Vle6uTHzHokdnzSWOdQ6A= +cloud.google.com/go/memcache v1.10.3/go.mod h1:6z89A41MT2DVAW0P4iIRdu5cmRTsbsFn4cyiIx8gbwo= +cloud.google.com/go/memcache v1.10.4/go.mod h1:v/d8PuC8d1gD6Yn5+I3INzLR01IDn0N4Ym56RgikSI0= +cloud.google.com/go/memcache v1.10.5/go.mod h1:/FcblbNd0FdMsx4natdj+2GWzTq+cjZvMa1I+9QsuMA= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.13.0/go.mod h1:URDhpG6XLeh5K+Glq0NOt74OfrPKTwS62gEPZzb5SOk= +cloud.google.com/go/metastore v1.13.1/go.mod h1:IbF62JLxuZmhItCppcIfzBBfUFq0DIB9HPDoLgWrVOU= +cloud.google.com/go/metastore v1.13.2/go.mod h1:KS59dD+unBji/kFebVp8XU/quNSyo8b6N6tPGspKszA= +cloud.google.com/go/metastore v1.13.3/go.mod h1:K+wdjXdtkdk7AQg4+sXS8bRrQa9gcOr+foOMF2tqINE= +cloud.google.com/go/metastore v1.13.4/go.mod h1:FMv9bvPInEfX9Ac1cVcRXp8EBBQnBcqH6gz3KvJ9BAE= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= +cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67mLHQfyqbw+poY= +cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4= +cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc= +cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= +cloud.google.com/go/monitoring v1.17.0/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= +cloud.google.com/go/monitoring v1.17.1/go.mod h1:SJzPMakCF0GHOuKEH/r4hxVKF04zl+cRPQyc3d/fqII= +cloud.google.com/go/monitoring v1.18.0/go.mod h1:c92vVBCeq/OB4Ioyo+NbN2U7tlg5ZH41PZcdvfc+Lcg= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= +cloud.google.com/go/networkconnectivity v1.13.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.1/go.mod h1:LyGPXR742uQcDxZ/wv4EI0Vu5N6NKJ77ZYVnDe69Zug= +cloud.google.com/go/networkconnectivity v1.14.2/go.mod h1:5UFlwIisZylSkGG1AdwK/WZUaoz12PKu6wODwIbFzJo= +cloud.google.com/go/networkconnectivity v1.14.3/go.mod h1:4aoeFdrJpYEXNvrnfyD5kIzs8YtHg945Og4koAjHQek= +cloud.google.com/go/networkconnectivity v1.14.4/go.mod h1:PU12q++/IMnDJAB+3r+tJtuCXCfwfN+C6Niyj6ji1Po= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= +cloud.google.com/go/networkmanagement v1.9.0/go.mod h1:UTUaEU9YwbCAhhz3jEOHr+2/K/MrBk2XxOLS89LQzFw= +cloud.google.com/go/networkmanagement v1.9.1/go.mod h1:CCSYgrQQvW73EJawO2QamemYcOb57LvrDdDU51F0mcI= +cloud.google.com/go/networkmanagement v1.9.2/go.mod h1:iDGvGzAoYRghhp4j2Cji7sF899GnfGQcQRQwgVOWnDw= +cloud.google.com/go/networkmanagement v1.9.3/go.mod h1:y7WMO1bRLaP5h3Obm4tey+NquUvB93Co1oh4wpL+XcU= +cloud.google.com/go/networkmanagement v1.9.4/go.mod h1:daWJAl0KTFytFL7ar33I6R/oNBH8eEOX/rBNHrC/8TA= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= +cloud.google.com/go/networksecurity v0.9.2/go.mod h1:jG0SeAttWzPMUILEHDUvFYdQTl8L/E/KC8iZDj85lEI= +cloud.google.com/go/networksecurity v0.9.3/go.mod h1:l+C0ynM6P+KV9YjOnx+kk5IZqMSLccdBqW6GUoF4p/0= +cloud.google.com/go/networksecurity v0.9.4/go.mod h1:E9CeMZ2zDsNBkr8axKSYm8XyTqNhiCHf1JO/Vb8mD1w= +cloud.google.com/go/networksecurity v0.9.5/go.mod h1:KNkjH/RsylSGyyZ8wXpue8xpCEK+bTtvof8SBfIhMG8= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= +cloud.google.com/go/notebooks v1.10.0/go.mod h1:SOPYMZnttHxqot0SGSFSkRrwE29eqnKPBJFqgWmiK2k= +cloud.google.com/go/notebooks v1.10.1/go.mod h1:5PdJc2SgAybE76kFQCWrTfJolCOUQXF97e+gteUUA6A= +cloud.google.com/go/notebooks v1.11.1/go.mod h1:V2Zkv8wX9kDCGRJqYoI+bQAaoVeE5kSiz4yYHd2yJwQ= +cloud.google.com/go/notebooks v1.11.2/go.mod h1:z0tlHI/lREXC8BS2mIsUeR3agM1AkgLiS+Isov3SS70= +cloud.google.com/go/notebooks v1.11.3/go.mod h1:0wQyI2dQC3AZyQqWnRsp+yA+kY4gC7ZIVP4Qg3AQcgo= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= +cloud.google.com/go/optimization v1.5.0/go.mod h1:evo1OvTxeBRBu6ydPlrIRizKY/LJKo/drDMMRKqGEUU= +cloud.google.com/go/optimization v1.5.1/go.mod h1:NC0gnUD5MWVAF7XLdoYVPmYYVth93Q6BUzqAq3ZwtV8= +cloud.google.com/go/optimization v1.6.1/go.mod h1:hH2RYPTTM9e9zOiTaYPTiGPcGdNZVnBSBxjIAJzUkqo= +cloud.google.com/go/optimization v1.6.2/go.mod h1:mWNZ7B9/EyMCcwNl1frUGEuY6CPijSkz88Fz2vwKPOY= +cloud.google.com/go/optimization v1.6.3/go.mod h1:8ve3svp3W6NFcAEFr4SfJxrldzhUl4VMUJmhrqVKtYA= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= +cloud.google.com/go/orchestration v1.8.2/go.mod h1:T1cP+6WyTmh6LSZzeUhvGf0uZVmJyTx7t8z7Vg87+A0= +cloud.google.com/go/orchestration v1.8.3/go.mod h1:xhgWAYqlbYjlz2ftbFghdyqENYW+JXuhBx9KsjMoGHs= +cloud.google.com/go/orchestration v1.8.4/go.mod h1:d0lywZSVYtIoSZXb0iFjv9SaL13PGyVOKDxqGxEf/qI= +cloud.google.com/go/orchestration v1.8.5/go.mod h1:C1J7HesE96Ba8/hZ71ISTV2UAat0bwN+pi85ky38Yq8= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= +cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= +cloud.google.com/go/orgpolicy v1.11.2/go.mod h1:biRDpNwfyytYnmCRWZWxrKF22Nkz9eNVj9zyaBdpm1o= +cloud.google.com/go/orgpolicy v1.11.3/go.mod h1:oKAtJ/gkMjum5icv2aujkP4CxROxPXsBbYGCDbPO8MM= +cloud.google.com/go/orgpolicy v1.11.4/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= +cloud.google.com/go/orgpolicy v1.12.0/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= +cloud.google.com/go/orgpolicy v1.12.1/go.mod h1:aibX78RDl5pcK3jA8ysDQCFkVxLj3aOQqrbBaUL2V5I= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= +cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= +cloud.google.com/go/osconfig v1.12.2/go.mod h1:eh9GPaMZpI6mEJEuhEjUJmaxvQ3gav+fFEJon1Y8Iw0= +cloud.google.com/go/osconfig v1.12.3/go.mod h1:L/fPS8LL6bEYUi1au832WtMnPeQNT94Zo3FwwV1/xGM= +cloud.google.com/go/osconfig v1.12.4/go.mod h1:B1qEwJ/jzqSRslvdOCI8Kdnp0gSng0xW4LOnIebQomA= +cloud.google.com/go/osconfig v1.12.5/go.mod h1:D9QFdxzfjgw3h/+ZaAb5NypM8bhOMqBzgmbhzWViiW8= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= +cloud.google.com/go/oslogin v1.11.0/go.mod h1:8GMTJs4X2nOAUVJiPGqIWVcDaF0eniEto3xlOxaboXE= +cloud.google.com/go/oslogin v1.11.1/go.mod h1:OhD2icArCVNUxKqtK0mcSmKL7lgr0LVlQz+v9s1ujTg= +cloud.google.com/go/oslogin v1.12.1/go.mod h1:VfwTeFJGbnakxAY236eN8fsnglLiVXndlbcNomY4iZU= +cloud.google.com/go/oslogin v1.12.2/go.mod h1:CQ3V8Jvw4Qo4WRhNPF0o+HAM4DiLuE27Ul9CX9g2QdY= +cloud.google.com/go/oslogin v1.13.0/go.mod h1:xPJqLwpTZ90LSE5IL1/svko+6c5avZLluiyylMb/sRA= +cloud.google.com/go/oslogin v1.13.1/go.mod h1:vS8Sr/jR7QvPWpCjNqy6LYZr5Zs1e8ZGW/KPn9gmhws= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= +cloud.google.com/go/phishingprotection v0.8.2/go.mod h1:LhJ91uyVHEYKSKcMGhOa14zMMWfbEdxG032oT6ECbC8= +cloud.google.com/go/phishingprotection v0.8.3/go.mod h1:3B01yO7T2Ra/TMojifn8EoGd4G9jts/6cIO0DgDY9J8= +cloud.google.com/go/phishingprotection v0.8.4/go.mod h1:6b3kNPAc2AQ6jZfFHioZKg9MQNybDg4ixFd4RPZZ2nE= +cloud.google.com/go/phishingprotection v0.8.5/go.mod h1:g1smd68F7mF1hgQPuYn3z8HDbNre8L6Z0b7XMYFmX7I= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= +cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU= +cloud.google.com/go/policytroubleshooter v1.9.0/go.mod h1:+E2Lga7TycpeSTj2FsH4oXxTnrbHJGRlKhVZBLGgU64= +cloud.google.com/go/policytroubleshooter v1.9.1/go.mod h1:MYI8i0bCrL8cW+VHN1PoiBTyNZTstCg2WUw2eVC4c4U= +cloud.google.com/go/policytroubleshooter v1.10.1/go.mod h1:5C0rhT3TDZVxAu8813bwmTvd57Phbl8mr9F4ipOsxEs= +cloud.google.com/go/policytroubleshooter v1.10.2/go.mod h1:m4uF3f6LseVEnMV6nknlN2vYGRb+75ylQwJdnOXfnv0= +cloud.google.com/go/policytroubleshooter v1.10.3/go.mod h1:+ZqG3agHT7WPb4EBIRqUv4OyIwRTZvsVDHZ8GlZaoxk= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= +cloud.google.com/go/privatecatalog v0.9.2/go.mod h1:RMA4ATa8IXfzvjrhhK8J6H4wwcztab+oZph3c6WmtFc= +cloud.google.com/go/privatecatalog v0.9.3/go.mod h1:K5pn2GrVmOPjXz3T26mzwXLcKivfIJ9R5N79AFCF9UE= +cloud.google.com/go/privatecatalog v0.9.4/go.mod h1:SOjm93f+5hp/U3PqMZAHTtBtluqLygrDrVO8X8tYtG0= +cloud.google.com/go/privatecatalog v0.9.5/go.mod h1:fVWeBOVe7uj2n3kWRGlUQqR/pOd450J9yZoOECcQqJk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.34.0/go.mod h1:alj4l4rBg+N3YTFDDC+/YyFTs6JAjam2QfYsddcAW4c= +cloud.google.com/go/pubsub v1.36.1/go.mod h1:iYjCa9EzWOoBiTdd4ps7QoMtMln5NwaZQpK1hbRfBDE= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.0/go.mod h1:QuE8EdU9dEnesG8/kG3XuJyNsjEqMlMzg3v3scCJ46c= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.1/go.mod h1:JZYZJOeZjgSSTGP4uz7NlQ4/d1w5hGmksVgM0lbEij0= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.2/go.mod h1:kpaDBOpkwD4G0GVMzG1W6Doy1tFFC97XAV3xy+Rd/pw= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.3/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.4/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.0/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.2/go.mod h1:trwwGkfhCmp05Ll5MSJPXY7yvnO0p4v3orGANAFHAuU= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= +cloud.google.com/go/recommendationengine v0.8.2/go.mod h1:QIybYHPK58qir9CV2ix/re/M//Ty10OxjnnhWdaKS1Y= +cloud.google.com/go/recommendationengine v0.8.3/go.mod h1:m3b0RZV02BnODE9FeSvGv1qibFo8g0OnmB/RMwYy4V8= +cloud.google.com/go/recommendationengine v0.8.4/go.mod h1:GEteCf1PATl5v5ZsQ60sTClUE0phbWmo3rQ1Js8louU= +cloud.google.com/go/recommendationengine v0.8.5/go.mod h1:A38rIXHGFvoPvmy6pZLozr0g59NRNREz4cx7F58HAsQ= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= +cloud.google.com/go/recommender v1.11.0/go.mod h1:kPiRQhPyTJ9kyXPCG6u/dlPLbYfFlkwHNRwdzPVAoII= +cloud.google.com/go/recommender v1.11.1/go.mod h1:sGwFFAyI57v2Hc5LbIj+lTwXipGu9NW015rkaEM5B18= +cloud.google.com/go/recommender v1.11.2/go.mod h1:AeoJuzOvFR/emIcXdVFkspVXVTYpliRCmKNYDnyBv6Y= +cloud.google.com/go/recommender v1.11.3/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= +cloud.google.com/go/recommender v1.12.0/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= +cloud.google.com/go/recommender v1.12.1/go.mod h1:gf95SInWNND5aPas3yjwl0I572dtudMhMIG4ni8nr+0= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= +cloud.google.com/go/redis v1.13.2/go.mod h1:0Hg7pCMXS9uz02q+LoEVl5dNHUkIQv+C/3L76fandSA= +cloud.google.com/go/redis v1.13.3/go.mod h1:vbUpCKUAZSYzFcWKmICnYgRAhTFg9r+djWqFxDYXi4U= +cloud.google.com/go/redis v1.14.1/go.mod h1:MbmBxN8bEnQI4doZPC1BzADU4HGocHBk2de3SbgOkqs= +cloud.google.com/go/redis v1.14.2/go.mod h1:g0Lu7RRRz46ENdFKQ2EcQZBAJ2PtJHJLuiiRuEXwyQw= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= +cloud.google.com/go/resourcemanager v1.9.2/go.mod h1:OujkBg1UZg5lX2yIyMo5Vz9O5hf7XQOSV7WxqxxMtQE= +cloud.google.com/go/resourcemanager v1.9.3/go.mod h1:IqrY+g0ZgLsihcfcmqSe+RKp1hzjXwG904B92AwBz6U= +cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= +cloud.google.com/go/resourcemanager v1.9.5/go.mod h1:hep6KjelHA+ToEjOfO3garMKi/CLYwTqeAw7YiEI9x8= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= +cloud.google.com/go/resourcesettings v1.6.2/go.mod h1:mJIEDd9MobzunWMeniaMp6tzg4I2GvD3TTmPkc8vBXk= +cloud.google.com/go/resourcesettings v1.6.3/go.mod h1:pno5D+7oDYkMWZ5BpPsb4SO0ewg3IXcmmrUZaMJrFic= +cloud.google.com/go/resourcesettings v1.6.4/go.mod h1:pYTTkWdv2lmQcjsthbZLNBP4QW140cs7wqA3DuqErVI= +cloud.google.com/go/resourcesettings v1.6.5/go.mod h1:WBOIWZraXZOGAgoR4ukNj0o0HiSMO62H9RpFi9WjP9I= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= +cloud.google.com/go/retail v1.14.2/go.mod h1:W7rrNRChAEChX336QF7bnMxbsjugcOCPU44i5kbLiL8= +cloud.google.com/go/retail v1.14.3/go.mod h1:Omz2akDHeSlfCq8ArPKiBxlnRpKEBjUH386JYFLUvXo= +cloud.google.com/go/retail v1.14.4/go.mod h1:l/N7cMtY78yRnJqp5JW8emy7MB1nz8E4t2yfOmklYfg= +cloud.google.com/go/retail v1.15.1/go.mod h1:In9nSBOYhLbDGa87QvWlnE1XA14xBN2FpQRiRsUs9wU= +cloud.google.com/go/retail v1.16.0/go.mod h1:LW7tllVveZo4ReWt68VnldZFWJRzsh9np+01J9dYWzE= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo= +cloud.google.com/go/run v1.3.0/go.mod h1:S/osX/4jIPZGg+ssuqh6GNgg7syixKe3YnprwehzHKU= +cloud.google.com/go/run v1.3.1/go.mod h1:cymddtZOzdwLIAsmS6s+Asl4JoXIDm/K1cpZTxV4Q5s= +cloud.google.com/go/run v1.3.2/go.mod h1:SIhmqArbjdU/D9M6JoHaAqnAMKLFtXaVdNeq04NjnVE= +cloud.google.com/go/run v1.3.3/go.mod h1:WSM5pGyJ7cfYyYbONVQBN4buz42zFqwG67Q3ch07iK4= +cloud.google.com/go/run v1.3.4/go.mod h1:FGieuZvQ3tj1e9GnzXqrMABSuir38AJg5xhiYq+SF3o= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= +cloud.google.com/go/scheduler v1.10.2/go.mod h1:O3jX6HRH5eKCA3FutMw375XHZJudNIKVonSCHv7ropY= +cloud.google.com/go/scheduler v1.10.3/go.mod h1:8ANskEM33+sIbpJ+R4xRfw/jzOG+ZFE8WVLy7/yGvbc= +cloud.google.com/go/scheduler v1.10.4/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= +cloud.google.com/go/scheduler v1.10.5/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= +cloud.google.com/go/scheduler v1.10.6/go.mod h1:pe2pNCtJ+R01E06XCDOJs1XvAMbv28ZsQEbqknxGOuE= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= +cloud.google.com/go/secretmanager v1.11.2/go.mod h1:MQm4t3deoSub7+WNwiC4/tRYgDBHJgJPvswqQVB1Vss= +cloud.google.com/go/secretmanager v1.11.3/go.mod h1:0bA2o6FabmShrEy328i67aV+65XoUFFSmVeLBn/51jI= +cloud.google.com/go/secretmanager v1.11.4/go.mod h1:wreJlbS9Zdq21lMzWmJ0XhWW2ZxgPeahsqeV/vZoJ3w= +cloud.google.com/go/secretmanager v1.11.5/go.mod h1:eAGv+DaCHkeVyQi0BeXgAHOU0RdrMeZIASKc+S7VqH4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= +cloud.google.com/go/security v1.15.2/go.mod h1:2GVE/v1oixIRHDaClVbHuPcZwAqFM28mXuAKCfMgYIg= +cloud.google.com/go/security v1.15.3/go.mod h1:gQ/7Q2JYUZZgOzqKtw9McShH+MjNvtDpL40J1cT+vBs= +cloud.google.com/go/security v1.15.4/go.mod h1:oN7C2uIZKhxCLiAAijKUCuHLZbIt/ghYEo8MqwD/Ty4= +cloud.google.com/go/security v1.15.5/go.mod h1:KS6X2eG3ynWjqcIX976fuToN5juVkF6Ra6c7MPnldtc= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= +cloud.google.com/go/securitycenter v1.23.1/go.mod h1:w2HV3Mv/yKhbXKwOCu2i8bCuLtNP1IMHuiYQn4HJq5s= +cloud.google.com/go/securitycenter v1.24.1/go.mod h1:3h9IdjjHhVMXdQnmqzVnM7b0wMn/1O/U20eWVpMpZjI= +cloud.google.com/go/securitycenter v1.24.2/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= +cloud.google.com/go/securitycenter v1.24.3/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= +cloud.google.com/go/securitycenter v1.24.4/go.mod h1:PSccin+o1EMYKcFQzz9HMMnZ2r9+7jbc+LvPjXhpwcU= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.1/go.mod h1:tJywXimEWzNzw9FvtNjsQxxJ3/41jseeILgwU/QLrGI= +cloud.google.com/go/servicedirectory v1.11.2/go.mod h1:KD9hCLhncWRV5jJphwIpugKwM5bn1x0GyVVD4NO8mGg= +cloud.google.com/go/servicedirectory v1.11.3/go.mod h1:LV+cHkomRLr67YoQy3Xq2tUXBGOs5z5bPofdq7qtiAw= +cloud.google.com/go/servicedirectory v1.11.4/go.mod h1:Bz2T9t+/Ehg6x+Y7Ycq5xiShYLD96NfEsWNHyitj1qM= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= +cloud.google.com/go/shell v1.7.2/go.mod h1:KqRPKwBV0UyLickMn0+BY1qIyE98kKyI216sH/TuHmc= +cloud.google.com/go/shell v1.7.3/go.mod h1:cTTEz/JdaBsQAeTQ3B6HHldZudFoYBOqjteev07FbIc= +cloud.google.com/go/shell v1.7.4/go.mod h1:yLeXB8eKLxw0dpEmXQ/FjriYrBijNsONpwnWsdPqlKM= +cloud.google.com/go/shell v1.7.5/go.mod h1:hL2++7F47/IfpfTO53KYf1EC+F56k3ThfNEXd4zcuiE= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= +cloud.google.com/go/spanner v1.49.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.50.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0= +cloud.google.com/go/spanner v1.53.0/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= +cloud.google.com/go/spanner v1.53.1/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= +cloud.google.com/go/spanner v1.54.0/go.mod h1:wZvSQVBgngF0Gq86fKup6KIYmN2be7uOKjtK97X+bQU= +cloud.google.com/go/spanner v1.55.0/go.mod h1:HXEznMUVhC+PC+HDyo9YFG2Ajj5BQDkcbqB9Z2Ffxi0= +cloud.google.com/go/spanner v1.56.0/go.mod h1:DndqtUKQAt3VLuV2Le+9Y3WTnq5cNKrnLb/Piqcj+h0= +cloud.google.com/go/spanner v1.57.0/go.mod h1:aXQ5QDdhPRIqVhYmnkAdwPYvj/DRN0FguclhEWw+jOo= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.1/go.mod h1:WcuaWz/3hOlzPFOVo9DUsblMIHwxP589y6ZMtaG+iAA= +cloud.google.com/go/speech v1.19.2/go.mod h1:2OYFfj+Ch5LWjsaSINuCZsre/789zlcCI3SY4oAi2oI= +cloud.google.com/go/speech v1.20.1/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= +cloud.google.com/go/speech v1.21.0/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= +cloud.google.com/go/speech v1.21.1/go.mod h1:E5GHZXYQlkqWQwY5xRSLHw2ci5NMQNG52FfMU1aZrIA= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.37.0/go.mod h1:i34TiT2IhiNDmcj65PqwCjcoUX7Z5pLzS8DEmoiFq1k= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= +cloud.google.com/go/storagetransfer v1.10.1/go.mod h1:rS7Sy0BtPviWYTTJVWCSV4QrbBitgPeuK4/FKa4IdLs= +cloud.google.com/go/storagetransfer v1.10.2/go.mod h1:meIhYQup5rg9juQJdyppnA/WLQCOguxtk1pr3/vBWzA= +cloud.google.com/go/storagetransfer v1.10.3/go.mod h1:Up8LY2p6X68SZ+WToswpQbQHnJpOty/ACcMafuey8gc= +cloud.google.com/go/storagetransfer v1.10.4/go.mod h1:vef30rZKu5HSEf/x1tK3WfWrL0XVoUQN/EPDRGPzjZs= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= +cloud.google.com/go/talent v1.6.3/go.mod h1:xoDO97Qd4AK43rGjJvyBHMskiEf3KulgYzcH6YWOVoo= +cloud.google.com/go/talent v1.6.4/go.mod h1:QsWvi5eKeh6gG2DlBkpMaFYZYrYUnIpo34f6/V5QykY= +cloud.google.com/go/talent v1.6.5/go.mod h1:Mf5cma696HmE+P2BWJ/ZwYqeJXEeU0UqjHFXVLadEDI= +cloud.google.com/go/talent v1.6.6/go.mod h1:y/WQDKrhVz12WagoarpAIyKKMeKGKHWPoReZ0g8tseQ= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= +cloud.google.com/go/texttospeech v1.7.2/go.mod h1:VYPT6aTOEl3herQjFHYErTlSZJ4vB00Q2ZTmuVgluD4= +cloud.google.com/go/texttospeech v1.7.3/go.mod h1:Av/zpkcgWfXlDLRYob17lqMstGZ3GqlvJXqKMp2u8so= +cloud.google.com/go/texttospeech v1.7.4/go.mod h1:vgv0002WvR4liGuSd5BJbWy4nDn5Ozco0uJymY5+U74= +cloud.google.com/go/texttospeech v1.7.5/go.mod h1:tzpCuNWPwrNJnEa4Pu5taALuZL4QRRLcb+K9pbhXT6M= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= +cloud.google.com/go/tpu v1.6.2/go.mod h1:NXh3NDwt71TsPZdtGWgAG5ThDfGd32X1mJ2cMaRlVgU= +cloud.google.com/go/tpu v1.6.3/go.mod h1:lxiueqfVMlSToZY1151IaZqp89ELPSrk+3HIQ5HRkbY= +cloud.google.com/go/tpu v1.6.4/go.mod h1:NAm9q3Rq2wIlGnOhpYICNI7+bpBebMJbh0yyp3aNw1Y= +cloud.google.com/go/tpu v1.6.5/go.mod h1:P9DFOEBIBhuEcZhXi+wPoVy/cji+0ICFi4TtTkMHSSs= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= +cloud.google.com/go/trace v1.10.2/go.mod h1:NPXemMi6MToRFcSxRl2uDnu/qAlAQ3oULUphcHGh1vA= +cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY= +cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY= +cloud.google.com/go/trace v1.10.5/go.mod h1:9hjCV1nGBCtXbAE4YK7OqJ8pmPYSxPA0I67JwRd5s3M= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.0/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.1/go.mod h1:TWIgDZknq2+JD4iRcojgeDtqGEp154HN/uL6hMvylS8= +cloud.google.com/go/translate v1.9.2/go.mod h1:E3Tc6rUTsQkVrXW6avbUhKJSr7ZE3j7zNmqzXKHqRrY= +cloud.google.com/go/translate v1.9.3/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= +cloud.google.com/go/translate v1.10.0/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= +cloud.google.com/go/translate v1.10.1/go.mod h1:adGZcQNom/3ogU65N9UXHOnnSvjPwA/jKQUMnsYXOyk= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.20.0/go.mod h1:U3G3FTnsvAGqglq9LxgqzOiBc/Nt8zis8S+850N2DUM= +cloud.google.com/go/video v1.20.1/go.mod h1:3gJS+iDprnj8SY6pe0SwLeC5BUW80NjhwX7INWEuWGU= +cloud.google.com/go/video v1.20.2/go.mod h1:lrixr5JeKNThsgfM9gqtwb6Okuqzfo4VrY2xynaViTA= +cloud.google.com/go/video v1.20.3/go.mod h1:TnH/mNZKVHeNtpamsSPygSR0iHtvrR/cW1/GDjN5+GU= +cloud.google.com/go/video v1.20.4/go.mod h1:LyUVjyW+Bwj7dh3UJnUGZfyqjEto9DnrvTe1f/+QrW0= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= +cloud.google.com/go/videointelligence v1.11.2/go.mod h1:ocfIGYtIVmIcWk1DsSGOoDiXca4vaZQII1C85qtoplc= +cloud.google.com/go/videointelligence v1.11.3/go.mod h1:tf0NUaGTjU1iS2KEkGWvO5hRHeCkFK3nPo0/cOZhZAo= +cloud.google.com/go/videointelligence v1.11.4/go.mod h1:kPBMAYsTPFiQxMLmmjpcZUMklJp3nC9+ipJJtprccD8= +cloud.google.com/go/videointelligence v1.11.5/go.mod h1:/PkeQjpRponmOerPeJxNPuxvi12HlW7Em0lJO14FC3I= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= +cloud.google.com/go/vision/v2 v2.7.3/go.mod h1:V0IcLCY7W+hpMKXK1JYE0LV5llEqVmj+UJChjvA1WsM= +cloud.google.com/go/vision/v2 v2.7.4/go.mod h1:ynDKnsDN/0RtqkKxQZ2iatv3Dm9O+HfRb5djl7l4Vvw= +cloud.google.com/go/vision/v2 v2.7.5/go.mod h1:GcviprJLFfK9OLf0z8Gm6lQb6ZFUulvpZws+mm6yPLM= +cloud.google.com/go/vision/v2 v2.7.6/go.mod h1:ZkvWTVNPBU3YZYzgF9Y1jwEbD1NBOCyJn0KFdQfE6Bw= +cloud.google.com/go/vision/v2 v2.8.0/go.mod h1:ocqDiA2j97pvgogdyhoxiQp2ZkDCyr0HWpicywGGRhU= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= +cloud.google.com/go/vmmigration v1.7.2/go.mod h1:iA2hVj22sm2LLYXGPT1pB63mXHhrH1m/ruux9TwWLd8= +cloud.google.com/go/vmmigration v1.7.3/go.mod h1:ZCQC7cENwmSWlwyTrZcWivchn78YnFniEQYRWQ65tBo= +cloud.google.com/go/vmmigration v1.7.4/go.mod h1:yBXCmiLaB99hEl/G9ZooNx2GyzgsjKnw5fWcINRgD70= +cloud.google.com/go/vmmigration v1.7.5/go.mod h1:pkvO6huVnVWzkFioxSghZxIGcsstDvYiVCxQ9ZH3eYI= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.1/go.mod h1:aT3Xsm5sNx0QShk1Jc1B8OddrxAScYLwzVoaiXfdzzk= +cloud.google.com/go/vmwareengine v1.0.2/go.mod h1:xMSNjIk8/itYrz1JA8nV3Ajg4L4n3N+ugP8JKzk3OaA= +cloud.google.com/go/vmwareengine v1.0.3/go.mod h1:QSpdZ1stlbfKtyt6Iu19M6XRxjmXO+vb5a/R6Fvy2y4= +cloud.google.com/go/vmwareengine v1.1.1/go.mod h1:nMpdsIVkUrSaX8UvmnBhzVzG7PPvNYc5BszcvIVudYs= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= +cloud.google.com/go/vpcaccess v1.7.2/go.mod h1:mmg/MnRHv+3e8FJUjeSibVFvQF1cCy2MsFaFqxeY1HU= +cloud.google.com/go/vpcaccess v1.7.3/go.mod h1:YX4skyfW3NC8vI3Fk+EegJnlYFatA+dXK4o236EUCUc= +cloud.google.com/go/vpcaccess v1.7.4/go.mod h1:lA0KTvhtEOb/VOdnH/gwPuOzGgM+CWsmGu6bb4IoMKk= +cloud.google.com/go/vpcaccess v1.7.5/go.mod h1:slc5ZRvvjP78c2dnL7m4l4R9GwL3wDLcpIWz6P/ziig= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= +cloud.google.com/go/webrisk v1.9.2/go.mod h1:pY9kfDgAqxUpDBOrG4w8deLfhvJmejKB0qd/5uQIPBc= +cloud.google.com/go/webrisk v1.9.3/go.mod h1:RUYXe9X/wBDXhVilss7EDLW9ZNa06aowPuinUOPCXH8= +cloud.google.com/go/webrisk v1.9.4/go.mod h1:w7m4Ib4C+OseSr2GL66m0zMBywdrVNTDKsdEsfMl7X0= +cloud.google.com/go/webrisk v1.9.5/go.mod h1:aako0Fzep1Q714cPEM5E+mtYX8/jsfegAuS8aivxy3U= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= +cloud.google.com/go/websecurityscanner v1.6.2/go.mod h1:7YgjuU5tun7Eg2kpKgGnDuEOXWIrh8x8lWrJT4zfmas= +cloud.google.com/go/websecurityscanner v1.6.3/go.mod h1:x9XANObUFR+83Cya3g/B9M/yoHVqzxPnFtgF8yYGAXw= +cloud.google.com/go/websecurityscanner v1.6.4/go.mod h1:mUiyMQ+dGpPPRkHgknIZeCzSHJ45+fY4F52nZFDHm2o= +cloud.google.com/go/websecurityscanner v1.6.5/go.mod h1:QR+DWaxAz2pWooylsBF854/Ijvuoa3FCyS1zBa1rAVQ= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= +cloud.google.com/go/workflows v1.12.0/go.mod h1:PYhSk2b6DhZ508tj8HXKaBh+OFe+xdl0dHF/tJdzPQM= +cloud.google.com/go/workflows v1.12.1/go.mod h1:5A95OhD/edtOhQd/O741NSfIMezNTbCwLM1P1tBRGHM= +cloud.google.com/go/workflows v1.12.2/go.mod h1:+OmBIgNqYJPVggnMo9nqmizW0qEXHhmnAzK/CnBqsHc= +cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= +cloud.google.com/go/workflows v1.12.4/go.mod h1:yQ7HUqOkdJK4duVtMeBCAOPiN1ZF1E9pAMX51vpwB/w= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/Microsoft/hcsshim v0.12.0-rc.3 h1:5GNGrobGs/sN/0nFO21W9k4lFn+iXXZAE8fCZbmdRak= -github.com/Microsoft/hcsshim v0.12.0-rc.3/go.mod h1:WuNfcaYNaw+KpCEsZCIM6HCEmu0c5HfXpi+dDSmveP0= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/hcsshim v0.12.3 h1:LS9NXqXhMoqNCplK1ApmVSfB4UnVLRDWRapB6EIlxE0= +github.com/Microsoft/hcsshim v0.12.3/go.mod h1:Iyl1WVpZzr+UkzjekHZbV8o5Z9ZkxNGx6CtY2Qg/JVQ= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/akrylysov/pogreb v0.10.2 h1:e6PxmeyEhWyi2AKOBIJzAEi4HkiC+lKyCocRGlnDi78= github.com/akrylysov/pogreb v0.10.2/go.mod h1:pNs6QmpQ1UlTJKDezuRWmaqkgUE2TuU0YTWyqJZ7+lI= +github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/participle/v2 v2.0.0/go.mod h1:rAKZdJldHu8084ojcWevWAL8KmEU+AT+Olodb+WoN2Y= +github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c= +github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= +github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= +github.com/apache/arrow/go/v14 v14.0.2/go.mod h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +github.com/apache/thrift v0.17.0/go.mod h1:OLxhMRJxomX+1I/KUw03qoV3mMz16BwaKI+d4fPBx7Q= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= -github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0= -github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE= -github.com/containerd/containerd v1.7.16 h1:7Zsfe8Fkj4Wi2My6DXGQ87hiqIrmOXolm72ZEkFU5Mg= -github.com/containerd/containerd v1.7.16/go.mod h1:NL49g7A/Fui7ccmxV6zkBWwqMgmMxFWzujYCc+JLt7k= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= +github.com/containerd/containerd v1.7.17 h1:KjNnn0+tAVQHAoaWRjmdak9WlvnFR/8rU1CHHy8Rm2A= +github.com/containerd/containerd v1.7.17/go.mod h1:vK+hhT4TIv2uejlcDlbVIc8+h/BqtKLIyNrtCZol8lI= github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/ttrpc v1.2.3 h1:4jlhbXIGvijRtNC8F/5CpuJZ7yKOBFGFOOXg1bkISz0= -github.com/containerd/ttrpc v1.2.3/go.mod h1:ieWsXucbb8Mj9PH0rXCw1i8IunRbbAiDkpXkbfflWBM= +github.com/containerd/ttrpc v1.2.4 h1:eQCQK4h9dxDmpOb9QOOMh2NHTfzroH1IkmHiKZi05Oo= +github.com/containerd/ttrpc v1.2.4/go.mod h1:ojvb8SJBSch0XkqNO0L0YX/5NxR3UnVk2LzFKBK0upc= github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4= github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= -github.com/containers/common v0.58.2 h1:5nu9lQz4QNSgovNk7NRk33SkqkVNKYoXh7L6gXmACow= -github.com/containers/common v0.58.2/go.mod h1:l3vMqanJGj7tZ3W/i76gEJ128VXgFUO1tLaohJXPvdk= -github.com/containers/image/v5 v5.30.1 h1:AKrQMgOKI1oKx5FW5eoU2xoNyzACajHGx1O3qxobvFM= -github.com/containers/image/v5 v5.30.1/go.mod h1:gSD8MVOyqBspc0ynLsuiMR9qmt8UQ4jpVImjmK0uXfk= +github.com/containers/common v0.59.0 h1:fy9Jz0B7Qs1C030bm73YJtVddaiFSZD3558EV1tgN2g= +github.com/containers/common v0.59.0/go.mod h1:53VicJCZ2AD0O+Br7VVoyrS7viXF4YmwlTIocWUT8XE= +github.com/containers/image/v5 v5.31.0 h1:eDFVlz5XaYICxe9dXpf23htEKvyosgkl62mJlIATXE4= +github.com/containers/image/v5 v5.31.0/go.mod h1:5QfOqSackPkSbF7Qxc1DnVNnPJKQ+KWLkfEfDpK590Q= github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 h1:Qzk5C6cYglewc+UyGf6lc8Mj2UaPTHy/iF2De0/77CA= github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY= -github.com/containers/ocicrypt v1.1.9 h1:2Csfba4jse85Raxk5HIyEk8OwZNjRvfkhEGijOjIdEM= -github.com/containers/ocicrypt v1.1.9/go.mod h1:dTKx1918d8TDkxXvarscpNVY+lyPakPNFN4jwA9GBys= -github.com/containers/storage v1.53.0 h1:VSES3C/u1pxjTJIXvLrSmyP7OBtDky04oGu07UvdTEA= -github.com/containers/storage v1.53.0/go.mod h1:pujcoOSc+upx15Jirdkebhtd8uJiLwbSd/mYT6zDJK8= +github.com/containers/ocicrypt v1.1.10 h1:r7UR6o8+lyhkEywetubUUgcKFjOWOaWz8cEBrCPX0ic= +github.com/containers/ocicrypt v1.1.10/go.mod h1:YfzSSr06PTHQwSTUKqDSjish9BeW1E4HUmreluQcMd8= +github.com/containers/storage v1.54.0 h1:xwYAlf6n9OnIlURQLLg3FYHbO74fQ/2W2N6EtQEUM4I= +github.com/containers/storage v1.54.0/go.mod h1:PlMOoinRrBSnhYODLxt4EXl0nmJt+X0kjG0Xdt9fMTw= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/distribution/distribution/v3 v3.0.0-alpha.1 h1:jn7I1gvjOvmLztH1+1cLiUFud7aeJCIQcgzugtwjyJo= github.com/distribution/distribution/v3 v3.0.0-alpha.1/go.mod h1:LCp4JZp1ZalYg0W/TN05jarCQu+h4w7xc7ZfQF4Y/cY= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v26.1.2+incompatible h1:/MWZpUMMlr1hCGyquL8QNbL1hbivQ1kLuT3Z9s1Tlpg= -github.com/docker/cli v26.1.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v26.1.3+incompatible h1:bUpXT/N0kDE3VUHI2r5VMsYQgi38kYuoC0oL9yt3lqc= +github.com/docker/cli v26.1.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE= -github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo= +github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -90,54 +1441,92 @@ github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQ github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emicklei/go-restful/v3 v3.11.2 h1:1onLa9DcsMYO9P+CXaL0dStDqQ2EHHXLiz+BtnqkLAU= github.com/emicklei/go-restful/v3 v3.11.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= +github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= -github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= -github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-air/gini v1.0.4 h1:lteMAxHKNOAjIqazL/klOJJmxq6YxxSuJ17MnMXny+s= github.com/go-air/gini v1.0.4/go.mod h1:dd8RvT1xcv6N1da33okvBd8DhMh1/A4siGy6ErjTljs= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= -github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= -github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= -github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU= -github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= -github.com/go-openapi/swag v0.22.10 h1:4y86NVn7Z2yYd6pfS4Z+Nyh3aAUL3Nul+LMbhFKy0gA= -github.com/go-openapi/swag v0.22.10/go.mod h1:Cnn8BYtRlx6BNE3DPN86f/xkapGIcLWzh3CLEb4C1jI= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA= github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXKkTfoE= +github.com/goccy/go-yaml v1.11.0/go.mod h1:H+mJrWtjPTJAHvRbV09MCK9xYwODM+wRTVFFTWckfng= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -145,50 +1534,139 @@ github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOW github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-migrate/migrate/v4 v4.17.1 h1:4zQ6iqL6t6AiItphxJctQb3cFqWiSpMnX7wLTPnnYO4= github.com/golang-migrate/migrate/v4 v4.17.1/go.mod h1:m8hinFyWBn0SA4QKHuKh175Pm9wjmxj3S2Mia7dbXzM= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto= github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-pkcs11 v0.2.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -201,21 +1679,32 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -234,29 +1723,62 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/maxbrunsfeld/counterfeiter/v6 v6.8.1 h1:NicmruxkeqHjDv03SfSxqmaLuisddudfP3h5wdXFbhM= github.com/maxbrunsfeld/counterfeiter/v6 v6.8.1/go.mod h1:eyp4DdUJAKkr9tvxR3jWhw2mDK7CWABMG5r9uyaKC7I= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -294,23 +1816,37 @@ github.com/openshift/api v0.0.0-20221021112143-4226c2167e40 h1:PxjGCA72RtsdHWToZ github.com/openshift/api v0.0.0-20221021112143-4226c2167e40/go.mod h1:aQ6LDasvHMvHZXqLHnX2GRmnfTWCF/iIwz8EMTTIE9A= github.com/openshift/client-go v0.0.0-20221019143426-16aed247da5c h1:CV76yFOTXmq9VciBR3Bve5ZWzSxdft7gaMVB3kS0rwg= github.com/openshift/client-go v0.0.0-20221019143426-16aed247da5c/go.mod h1:lFMO8mLHXWFzSdYvGNo8ivF9SfF6zInA8ZGw4phRnUE= -github.com/operator-framework/api v0.23.0 h1:kHymOwcHBpBVujT49SKOCd4EVG7Odwj4wl3NbOR2LLA= -github.com/operator-framework/api v0.23.0/go.mod h1:oKcFOz+Xc1UhMi2Pzcp6qsO7wjS4r+yP7EQprQBXrfM= -github.com/operator-framework/operator-registry v1.41.0 h1:MFLrMIce1biq6Gd0gsDnjpvYMXwDjoM7I5YdtvUYOLw= -github.com/operator-framework/operator-registry v1.41.0/go.mod h1:hvOar2ikD/BhyG+I6gGHe85cdqup7NV5b8LkP18H7wU= +github.com/operator-framework/api v0.25.0 h1:pSQwFSoPmZaTIERadawxtCwicehLkC7i9n3w3+70SVI= +github.com/operator-framework/api v0.25.0/go.mod h1:PvyCQb0x53ytIqdTECH5e+iqv+am3uZ0qGsZWmL35gQ= +github.com/operator-framework/operator-registry v1.43.1 h1:ACahVHGIL/hINBXd3RKWqSFR5SmSM6L5/n9xXqpR51s= +github.com/operator-framework/operator-registry v1.43.1/go.mod h1:qhssAIYWXDIW+nTg0C5i4iD9zpMtiXtfXqGUuUmGz5c= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= -github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= -github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.47.0 h1:p5Cz0FNHo7SnWOmWmoRozVcjEp0bIVU8cV7OShpjL1k= @@ -323,15 +1859,27 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ= github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -341,29 +1889,42 @@ github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8w github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/substrait-io/substrait-go v0.4.2/go.mod h1:qhpnLmrcvAnlZsUyPXZRqldiHapPTXC3t7xFgDi3aQg= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M= go.etcd.io/bbolt v1.3.10 h1:+BqfJTcCzTItrop8mq/lbzL8wSGtj94UO/3U31shqG0= go.etcd.io/bbolt v1.3.10/go.mod h1:bK3UQLPJZly7IlNmV7uVHJDxfe5aK9Ll93e/74Y9oEQ= go.etcd.io/etcd/api/v3 v3.5.12 h1:W4sw5ZoU2Juc9gBWuLk5U6fHfNVyY1WC5g9uiXZio/c= @@ -380,16 +1941,30 @@ go.etcd.io/etcd/raft/v3 v3.5.10 h1:cgNAYe7xrsrn/5kXMSaH8kM/Ky8mAdMqGOxyYwpP0LA= go.etcd.io/etcd/raft/v3 v3.5.10/go.mod h1:odD6kr8XQXTy9oQnyMPBOr0TVe+gT0neQhElQ6jbGRc= go.etcd.io/etcd/server/v3 v3.5.10 h1:4NOGyOwD5sUZ22PiWYKmfxqoeh72z6EhYjNosKGLmZg= go.etcd.io/etcd/server/v3 v3.5.10/go.mod h1:gBplPHfs6YI0L+RpGkTQO7buDbHv5HJGG/Bst0/zIPo= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/exporters/autoexport v0.46.1 h1:ysCfPZB9AjUlMa1UHYup3c9dAOCMQX/6sxSfPBUoxHw= go.opentelemetry.io/contrib/exporters/autoexport v0.46.1/go.mod h1:ha0aiYm+DOPsLHjh0zoQ8W8sLT+LJ58J3j47lGpSLrU= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 h1:P+/g8GpuJGYbOp2tAdKrIPUX9JO02q8Q0YNlHolpibA= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= -go.opentelemetry.io/otel v1.23.1 h1:Za4UzOqJYS+MUczKI320AtqZHZb7EqxO00jAHE0jmQY= -go.opentelemetry.io/otel v1.23.1/go.mod h1:Td0134eafDLcTS4y+zQ26GE8u3dEuRBiBCTUIRHaikA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 h1:jd0+5t/YynESZqsSyPz+7PAFdEop0dlN0+PkyHYo8oI= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0/go.mod h1:U707O40ee1FpQGyhvqnzmCJm1Wh6OX6GGBVn0E6Uyyk= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 h1:bflGWrfYyuulcdxf14V6n9+CoQcu5SAAdHmDPAJnlps= @@ -406,14 +1981,26 @@ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 h1:dEZWPjVN22urgY go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0/go.mod h1:sTt30Evb7hJB/gEk27qLb1+l9n4Tb8HvHkR0Wx3S6CU= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0/go.mod h1:kB3ufRbfU+CQ4MlUcqtW8Z7YEOBeK2DJ6CmR5rYYF3E= -go.opentelemetry.io/otel/metric v1.23.1 h1:PQJmqJ9u2QaJLBOELl1cxIdPcpbwzbkjfEyelTl2rlo= -go.opentelemetry.io/otel/metric v1.23.1/go.mod h1:mpG2QPlAfnK8yNhNJAxDZruU9Y1/HubbC+KyH8FaCWI= +go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/sdk v1.23.1 h1:O7JmZw0h76if63LQdsBMKQDWNb5oEcOThG9IrxscV+E= go.opentelemetry.io/otel/sdk v1.23.1/go.mod h1:LzdEVR5am1uKOOwfBWFef2DCi1nu3SA8XQxx2IerWFk= go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= -go.opentelemetry.io/otel/trace v1.23.1 h1:4LrmmEd8AU2rFvU1zegmvqW7+kWarxtNOPyeL6HmYY8= -go.opentelemetry.io/otel/trace v1.23.1/go.mod h1:4IpnpJFwr1mo/6HL8XIPJaE9y0+u1KcVmuW7dwFSVrI= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= @@ -425,114 +2012,755 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= +golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.139.0/go.mod h1:CVagp6Eekz9CjGZ718Z+sloknzkDJE7Vc1Ckj9+viBk= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg= +google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= +google.golang.org/api v0.157.0/go.mod h1:+z4v4ufbZ1WEpld6yMGHyggs+PmAHiaLNj5ytP3N01g= +google.golang.org/api v0.160.0/go.mod h1:0mu0TpK33qnydLvWqbImq2b1eQ5FHRSDCBzAxX9ZHyw= +google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto v0.0.0-20230821184602-ccc8af3d0e93/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= +google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= +google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917/go.mod h1:pZqR+glSb11aJ+JQcczCvgf47+duRuzNSKqE8YAQnV0= +google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= +google.golang.org/genproto v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= +google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= +google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= +google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917/go.mod h1:CmlNWB9lSezaYELKS5Ym1r44VrrbPUa7JTvw+6MbpJ0= +google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg= +google.golang.org/genproto/googleapis/api v0.0.0-20240122161410-6c6643bf1457/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014/go.mod h1:rbHMSEDyoYX62nRVLOCc4Qt1HbsdytAYoVwgjiOhF3I= +google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:PVreiBMirk8ypES6aw9d4p6iiBNSIfZEBqr3UGoAi2E= google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231212172506-995d672761c0/go.mod h1:guYXGPwC6jwxgWKW5Y405fKWOFNwlvUlUnzyp9i0uqo= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:ZSvZ8l+AWJwXw91DoTjWjaVLpWU6o0eZ4YLYpH8aLeQ= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:SCz6T5xjNXM4QFPRwxHcfChp7V+9DcXR3ay2TkHR8Tg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920183334-c177e329c48b/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231211222908-989df2bf70f3/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917/go.mod h1:xtjpI3tXFPP051KaWnhvxkiubL/6dJ18vLVf7q2pTOU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240122161410-6c6643bf1457/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240205150955-31a09d347014/go.mod h1:SaPjaZGWb0lPqs6Ittu0spdfrOArqji4ZdeP5IC/9N4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -541,15 +2769,25 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= @@ -558,6 +2796,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= @@ -568,7 +2808,13 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= k8s.io/api v0.30.1 h1:kCm/6mADMdbAxmIh0LBjS54nQBE+U4KmbCfIkF5CpJY= k8s.io/api v0.30.1/go.mod h1:ddbN2C0+0DIiPntan/bye3SW3PdwLa11/0yqwvuRrJM= k8s.io/apiextensions-apiserver v0.30.1 h1:4fAJZ9985BmpJG6PkoxVRpXv9vmPUOVzl614xarePws= @@ -597,6 +2843,70 @@ k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7F k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ= k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.3.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.38.1/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= +modernc.org/ccgo/v3 v3.0.0-20220910160915-348f15de615a/go.mod h1:8p47QxPkdugex9J4n9P2tLZ9bK01yngIVp00g4nomW0= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= +modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= +modernc.org/libc v1.19.0/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.21.2/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= +modernc.org/libc v1.22.4/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= +modernc.org/sqlite v1.21.2/go.mod h1:cxbLkB5WS32DnQqeH4h4o1B0eMr8W/y8/RGuxQ3JsC0= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= +modernc.org/tcl v1.15.1/go.mod h1:aEjeGJX2gz1oWKOLDVZ2tnEWLUrIn8H+GFu+akoDhqs= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +modernc.org/z v1.7.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 h1:/U5vjBbQn3RChhv7P11uhYvCSm5G2GaIi5AIGBS6r4c= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0/go.mod h1:z7+wmGM2dfIiLRfrC6jb5kV2Mq/sK1ZP303cxzkV5Y4= sigs.k8s.io/controller-runtime v0.18.3 h1:B5Wmmo8WMWK7izei+2LlXLVDGzMwAHBNLX68lwtlSR4= diff --git a/vendor/github.com/Microsoft/go-winio/.golangci.yml b/vendor/github.com/Microsoft/go-winio/.golangci.yml index 7b503d26a3..faedfe937a 100644 --- a/vendor/github.com/Microsoft/go-winio/.golangci.yml +++ b/vendor/github.com/Microsoft/go-winio/.golangci.yml @@ -1,7 +1,3 @@ -run: - skip-dirs: - - pkg/etw/sample - linters: enable: # style @@ -20,9 +16,13 @@ linters: - gofmt # files are gofmt'ed - gosec # security - nilerr # returns nil even with non-nil error + - thelper # test helpers without t.Helper() - unparam # unused function params issues: + exclude-dirs: + - pkg/etw/sample + exclude-rules: # err is very often shadowed in nested scopes - linters: @@ -69,9 +69,7 @@ linters-settings: # struct order is often for Win32 compat # also, ignore pointer bytes/GC issues for now until performance becomes an issue - fieldalignment - check-shadowing: true nolintlint: - allow-leading-space: false require-explanation: true require-specific: true revive: diff --git a/vendor/github.com/Microsoft/go-winio/backup.go b/vendor/github.com/Microsoft/go-winio/backup.go index 09621c8846..b54341daac 100644 --- a/vendor/github.com/Microsoft/go-winio/backup.go +++ b/vendor/github.com/Microsoft/go-winio/backup.go @@ -10,14 +10,14 @@ import ( "io" "os" "runtime" - "syscall" "unicode/utf16" + "github.com/Microsoft/go-winio/internal/fs" "golang.org/x/sys/windows" ) -//sys backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead -//sys backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite +//sys backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead +//sys backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite const ( BackupData = uint32(iota + 1) @@ -104,7 +104,7 @@ func (r *BackupStreamReader) Next() (*BackupHeader, error) { if err := binary.Read(r.r, binary.LittleEndian, name); err != nil { return nil, err } - hdr.Name = syscall.UTF16ToString(name) + hdr.Name = windows.UTF16ToString(name) } if wsi.StreamID == BackupSparseBlock { if err := binary.Read(r.r, binary.LittleEndian, &hdr.Offset); err != nil { @@ -205,7 +205,7 @@ func NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileReader { // Read reads a backup stream from the file by calling the Win32 API BackupRead(). func (r *BackupFileReader) Read(b []byte) (int, error) { var bytesRead uint32 - err := backupRead(syscall.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx) + err := backupRead(windows.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx) if err != nil { return 0, &os.PathError{Op: "BackupRead", Path: r.f.Name(), Err: err} } @@ -220,7 +220,7 @@ func (r *BackupFileReader) Read(b []byte) (int, error) { // the underlying file. func (r *BackupFileReader) Close() error { if r.ctx != 0 { - _ = backupRead(syscall.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx) + _ = backupRead(windows.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx) runtime.KeepAlive(r.f) r.ctx = 0 } @@ -244,7 +244,7 @@ func NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWriter { // Write restores a portion of the file using the provided backup stream. func (w *BackupFileWriter) Write(b []byte) (int, error) { var bytesWritten uint32 - err := backupWrite(syscall.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx) + err := backupWrite(windows.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx) if err != nil { return 0, &os.PathError{Op: "BackupWrite", Path: w.f.Name(), Err: err} } @@ -259,7 +259,7 @@ func (w *BackupFileWriter) Write(b []byte) (int, error) { // close the underlying file. func (w *BackupFileWriter) Close() error { if w.ctx != 0 { - _ = backupWrite(syscall.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx) + _ = backupWrite(windows.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx) runtime.KeepAlive(w.f) w.ctx = 0 } @@ -271,17 +271,14 @@ func (w *BackupFileWriter) Close() error { // // If the file opened was a directory, it cannot be used with Readdir(). func OpenForBackup(path string, access uint32, share uint32, createmode uint32) (*os.File, error) { - winPath, err := syscall.UTF16FromString(path) - if err != nil { - return nil, err - } - h, err := syscall.CreateFile(&winPath[0], - access, - share, + h, err := fs.CreateFile(path, + fs.AccessMask(access), + fs.FileShareMode(share), nil, - createmode, - syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OPEN_REPARSE_POINT, - 0) + fs.FileCreationDisposition(createmode), + fs.FILE_FLAG_BACKUP_SEMANTICS|fs.FILE_FLAG_OPEN_REPARSE_POINT, + 0, + ) if err != nil { err = &os.PathError{Op: "open", Path: path, Err: err} return nil, err diff --git a/vendor/github.com/Microsoft/go-winio/backuptar/tar.go b/vendor/github.com/Microsoft/go-winio/backuptar/tar.go index 6b3b0cd519..7f852bbf81 100644 --- a/vendor/github.com/Microsoft/go-winio/backuptar/tar.go +++ b/vendor/github.com/Microsoft/go-winio/backuptar/tar.go @@ -11,7 +11,6 @@ import ( "path/filepath" "strconv" "strings" - "syscall" "time" "github.com/Microsoft/go-winio" @@ -106,7 +105,7 @@ func BasicInfoHeader(name string, size int64, fileInfo *winio.FileBasicInfo) *ta hdr.PAXRecords[hdrFileAttributes] = fmt.Sprintf("%d", fileInfo.FileAttributes) hdr.PAXRecords[hdrCreationTime] = formatPAXTime(time.Unix(0, fileInfo.CreationTime.Nanoseconds())) - if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 { + if (fileInfo.FileAttributes & windows.FILE_ATTRIBUTE_DIRECTORY) != 0 { hdr.Mode |= cISDIR hdr.Size = 0 hdr.Typeflag = tar.TypeDir @@ -378,7 +377,7 @@ func WriteTarFileFromBackupStream(t *tar.Writer, r io.Reader, name string, size // WriteTarFileFromBackupStream. func FileInfoFromHeader(hdr *tar.Header) (name string, size int64, fileInfo *winio.FileBasicInfo, err error) { name = hdr.Name - if hdr.Typeflag == tar.TypeReg || hdr.Typeflag == tar.TypeRegA { + if hdr.Typeflag == tar.TypeReg { size = hdr.Size } fileInfo = &winio.FileBasicInfo{ @@ -396,7 +395,7 @@ func FileInfoFromHeader(hdr *tar.Header) (name string, size int64, fileInfo *win fileInfo.FileAttributes = uint32(attr) } else { if hdr.Typeflag == tar.TypeDir { - fileInfo.FileAttributes |= syscall.FILE_ATTRIBUTE_DIRECTORY + fileInfo.FileAttributes |= windows.FILE_ATTRIBUTE_DIRECTORY } } if creationTimeStr, ok := hdr.PAXRecords[hdrCreationTime]; ok { @@ -469,7 +468,7 @@ func WriteBackupStreamFromTarFile(w io.Writer, t *tar.Reader, hdr *tar.Header) ( } } - if hdr.Typeflag == tar.TypeReg || hdr.Typeflag == tar.TypeRegA { + if hdr.Typeflag == tar.TypeReg { bhdr := winio.BackupHeader{ Id: winio.BackupData, Size: hdr.Size, diff --git a/vendor/github.com/Microsoft/go-winio/file.go b/vendor/github.com/Microsoft/go-winio/file.go index 175a99d3f4..fe82a180db 100644 --- a/vendor/github.com/Microsoft/go-winio/file.go +++ b/vendor/github.com/Microsoft/go-winio/file.go @@ -15,26 +15,11 @@ import ( "golang.org/x/sys/windows" ) -//sys cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) = CancelIoEx -//sys createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) = CreateIoCompletionPort -//sys getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus -//sys setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes -//sys wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult - -type atomicBool int32 - -func (b *atomicBool) isSet() bool { return atomic.LoadInt32((*int32)(b)) != 0 } -func (b *atomicBool) setFalse() { atomic.StoreInt32((*int32)(b), 0) } -func (b *atomicBool) setTrue() { atomic.StoreInt32((*int32)(b), 1) } - -//revive:disable-next-line:predeclared Keep "new" to maintain consistency with "atomic" pkg -func (b *atomicBool) swap(new bool) bool { - var newInt int32 - if new { - newInt = 1 - } - return atomic.SwapInt32((*int32)(b), newInt) == 1 -} +//sys cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) = CancelIoEx +//sys createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) = CreateIoCompletionPort +//sys getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus +//sys setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes +//sys wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult var ( ErrFileClosed = errors.New("file has already been closed") @@ -50,7 +35,7 @@ func (*timeoutError) Temporary() bool { return true } type timeoutChan chan struct{} var ioInitOnce sync.Once -var ioCompletionPort syscall.Handle +var ioCompletionPort windows.Handle // ioResult contains the result of an asynchronous IO operation. type ioResult struct { @@ -60,12 +45,12 @@ type ioResult struct { // ioOperation represents an outstanding asynchronous Win32 IO. type ioOperation struct { - o syscall.Overlapped + o windows.Overlapped ch chan ioResult } func initIO() { - h, err := createIoCompletionPort(syscall.InvalidHandle, 0, 0, 0xffffffff) + h, err := createIoCompletionPort(windows.InvalidHandle, 0, 0, 0xffffffff) if err != nil { panic(err) } @@ -76,10 +61,10 @@ func initIO() { // win32File implements Reader, Writer, and Closer on a Win32 handle without blocking in a syscall. // It takes ownership of this handle and will close it if it is garbage collected. type win32File struct { - handle syscall.Handle + handle windows.Handle wg sync.WaitGroup wgLock sync.RWMutex - closing atomicBool + closing atomic.Bool socket bool readDeadline deadlineHandler writeDeadline deadlineHandler @@ -90,11 +75,11 @@ type deadlineHandler struct { channel timeoutChan channelLock sync.RWMutex timer *time.Timer - timedout atomicBool + timedout atomic.Bool } // makeWin32File makes a new win32File from an existing file handle. -func makeWin32File(h syscall.Handle) (*win32File, error) { +func makeWin32File(h windows.Handle) (*win32File, error) { f := &win32File{handle: h} ioInitOnce.Do(initIO) _, err := createIoCompletionPort(h, ioCompletionPort, 0, 0xffffffff) @@ -110,7 +95,12 @@ func makeWin32File(h syscall.Handle) (*win32File, error) { return f, nil } +// Deprecated: use NewOpenFile instead. func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) { + return NewOpenFile(windows.Handle(h)) +} + +func NewOpenFile(h windows.Handle) (io.ReadWriteCloser, error) { // If we return the result of makeWin32File directly, it can result in an // interface-wrapped nil, rather than a nil interface value. f, err := makeWin32File(h) @@ -124,13 +114,13 @@ func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) { func (f *win32File) closeHandle() { f.wgLock.Lock() // Atomically set that we are closing, releasing the resources only once. - if !f.closing.swap(true) { + if !f.closing.Swap(true) { f.wgLock.Unlock() // cancel all IO and wait for it to complete _ = cancelIoEx(f.handle, nil) f.wg.Wait() // at this point, no new IO can start - syscall.Close(f.handle) + windows.Close(f.handle) f.handle = 0 } else { f.wgLock.Unlock() @@ -145,14 +135,14 @@ func (f *win32File) Close() error { // IsClosed checks if the file has been closed. func (f *win32File) IsClosed() bool { - return f.closing.isSet() + return f.closing.Load() } // prepareIO prepares for a new IO operation. // The caller must call f.wg.Done() when the IO is finished, prior to Close() returning. func (f *win32File) prepareIO() (*ioOperation, error) { f.wgLock.RLock() - if f.closing.isSet() { + if f.closing.Load() { f.wgLock.RUnlock() return nil, ErrFileClosed } @@ -164,12 +154,12 @@ func (f *win32File) prepareIO() (*ioOperation, error) { } // ioCompletionProcessor processes completed async IOs forever. -func ioCompletionProcessor(h syscall.Handle) { +func ioCompletionProcessor(h windows.Handle) { for { var bytes uint32 var key uintptr var op *ioOperation - err := getQueuedCompletionStatus(h, &bytes, &key, &op, syscall.INFINITE) + err := getQueuedCompletionStatus(h, &bytes, &key, &op, windows.INFINITE) if op == nil { panic(err) } @@ -182,11 +172,11 @@ func ioCompletionProcessor(h syscall.Handle) { // asyncIO processes the return value from ReadFile or WriteFile, blocking until // the operation has actually completed. func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, err error) (int, error) { - if err != syscall.ERROR_IO_PENDING { //nolint:errorlint // err is Errno + if err != windows.ERROR_IO_PENDING { //nolint:errorlint // err is Errno return int(bytes), err } - if f.closing.isSet() { + if f.closing.Load() { _ = cancelIoEx(f.handle, &c.o) } @@ -201,8 +191,8 @@ func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, er select { case r = <-c.ch: err = r.err - if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno - if f.closing.isSet() { + if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno + if f.closing.Load() { err = ErrFileClosed } } else if err != nil && f.socket { @@ -214,7 +204,7 @@ func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, er _ = cancelIoEx(f.handle, &c.o) r = <-c.ch err = r.err - if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno + if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno err = ErrTimeout } } @@ -235,23 +225,22 @@ func (f *win32File) Read(b []byte) (int, error) { } defer f.wg.Done() - if f.readDeadline.timedout.isSet() { + if f.readDeadline.timedout.Load() { return 0, ErrTimeout } var bytes uint32 - err = syscall.ReadFile(f.handle, b, &bytes, &c.o) + err = windows.ReadFile(f.handle, b, &bytes, &c.o) n, err := f.asyncIO(c, &f.readDeadline, bytes, err) runtime.KeepAlive(b) // Handle EOF conditions. if err == nil && n == 0 && len(b) != 0 { return 0, io.EOF - } else if err == syscall.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno + } else if err == windows.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno return 0, io.EOF - } else { - return n, err } + return n, err } // Write writes to a file handle. @@ -262,12 +251,12 @@ func (f *win32File) Write(b []byte) (int, error) { } defer f.wg.Done() - if f.writeDeadline.timedout.isSet() { + if f.writeDeadline.timedout.Load() { return 0, ErrTimeout } var bytes uint32 - err = syscall.WriteFile(f.handle, b, &bytes, &c.o) + err = windows.WriteFile(f.handle, b, &bytes, &c.o) n, err := f.asyncIO(c, &f.writeDeadline, bytes, err) runtime.KeepAlive(b) return n, err @@ -282,7 +271,7 @@ func (f *win32File) SetWriteDeadline(deadline time.Time) error { } func (f *win32File) Flush() error { - return syscall.FlushFileBuffers(f.handle) + return windows.FlushFileBuffers(f.handle) } func (f *win32File) Fd() uintptr { @@ -299,7 +288,7 @@ func (d *deadlineHandler) set(deadline time.Time) error { } d.timer = nil } - d.timedout.setFalse() + d.timedout.Store(false) select { case <-d.channel: @@ -314,7 +303,7 @@ func (d *deadlineHandler) set(deadline time.Time) error { } timeoutIO := func() { - d.timedout.setTrue() + d.timedout.Store(true) close(d.channel) } diff --git a/vendor/github.com/Microsoft/go-winio/fileinfo.go b/vendor/github.com/Microsoft/go-winio/fileinfo.go index 702950e72a..c860eb9917 100644 --- a/vendor/github.com/Microsoft/go-winio/fileinfo.go +++ b/vendor/github.com/Microsoft/go-winio/fileinfo.go @@ -18,9 +18,18 @@ type FileBasicInfo struct { _ uint32 // padding } +// alignedFileBasicInfo is a FileBasicInfo, but aligned to uint64 by containing +// uint64 rather than windows.Filetime. Filetime contains two uint32s. uint64 +// alignment is necessary to pass this as FILE_BASIC_INFO. +type alignedFileBasicInfo struct { + CreationTime, LastAccessTime, LastWriteTime, ChangeTime uint64 + FileAttributes uint32 + _ uint32 // padding +} + // GetFileBasicInfo retrieves times and attributes for a file. func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) { - bi := &FileBasicInfo{} + bi := &alignedFileBasicInfo{} if err := windows.GetFileInformationByHandleEx( windows.Handle(f.Fd()), windows.FileBasicInfo, @@ -30,16 +39,21 @@ func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) { return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err} } runtime.KeepAlive(f) - return bi, nil + // Reinterpret the alignedFileBasicInfo as a FileBasicInfo so it matches the + // public API of this module. The data may be unnecessarily aligned. + return (*FileBasicInfo)(unsafe.Pointer(bi)), nil } // SetFileBasicInfo sets times and attributes for a file. func SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error { + // Create an alignedFileBasicInfo based on a FileBasicInfo. The copy is + // suitable to pass to GetFileInformationByHandleEx. + biAligned := *(*alignedFileBasicInfo)(unsafe.Pointer(bi)) if err := windows.SetFileInformationByHandle( windows.Handle(f.Fd()), windows.FileBasicInfo, - (*byte)(unsafe.Pointer(bi)), - uint32(unsafe.Sizeof(*bi)), + (*byte)(unsafe.Pointer(&biAligned)), + uint32(unsafe.Sizeof(biAligned)), ); err != nil { return &os.PathError{Op: "SetFileInformationByHandle", Path: f.Name(), Err: err} } diff --git a/vendor/github.com/Microsoft/go-winio/hvsock.go b/vendor/github.com/Microsoft/go-winio/hvsock.go index c881916583..c4fdd9d4ae 100644 --- a/vendor/github.com/Microsoft/go-winio/hvsock.go +++ b/vendor/github.com/Microsoft/go-winio/hvsock.go @@ -10,7 +10,6 @@ import ( "io" "net" "os" - "syscall" "time" "unsafe" @@ -181,13 +180,13 @@ type HvsockConn struct { var _ net.Conn = &HvsockConn{} func newHVSocket() (*win32File, error) { - fd, err := syscall.Socket(afHVSock, syscall.SOCK_STREAM, 1) + fd, err := windows.Socket(afHVSock, windows.SOCK_STREAM, 1) if err != nil { return nil, os.NewSyscallError("socket", err) } f, err := makeWin32File(fd) if err != nil { - syscall.Close(fd) + windows.Close(fd) return nil, err } f.socket = true @@ -197,16 +196,24 @@ func newHVSocket() (*win32File, error) { // ListenHvsock listens for connections on the specified hvsock address. func ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) { l := &HvsockListener{addr: *addr} - sock, err := newHVSocket() + + var sock *win32File + sock, err = newHVSocket() if err != nil { return nil, l.opErr("listen", err) } + defer func() { + if err != nil { + _ = sock.Close() + } + }() + sa := addr.raw() - err = socket.Bind(windows.Handle(sock.handle), &sa) + err = socket.Bind(sock.handle, &sa) if err != nil { return nil, l.opErr("listen", os.NewSyscallError("socket", err)) } - err = syscall.Listen(sock.handle, 16) + err = windows.Listen(sock.handle, 16) if err != nil { return nil, l.opErr("listen", os.NewSyscallError("listen", err)) } @@ -246,7 +253,7 @@ func (l *HvsockListener) Accept() (_ net.Conn, err error) { var addrbuf [addrlen * 2]byte var bytes uint32 - err = syscall.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o) + err = windows.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o) if _, err = l.sock.asyncIO(c, nil, bytes, err); err != nil { return nil, l.opErr("accept", os.NewSyscallError("acceptex", err)) } @@ -263,7 +270,7 @@ func (l *HvsockListener) Accept() (_ net.Conn, err error) { conn.remote.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[addrlen]))) // initialize the accepted socket and update its properties with those of the listening socket - if err = windows.Setsockopt(windows.Handle(sock.handle), + if err = windows.Setsockopt(sock.handle, windows.SOL_SOCKET, windows.SO_UPDATE_ACCEPT_CONTEXT, (*byte)(unsafe.Pointer(&l.sock.handle)), int32(unsafe.Sizeof(l.sock.handle))); err != nil { return nil, conn.opErr("accept", os.NewSyscallError("setsockopt", err)) @@ -334,7 +341,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock }() sa := addr.raw() - err = socket.Bind(windows.Handle(sock.handle), &sa) + err = socket.Bind(sock.handle, &sa) if err != nil { return nil, conn.opErr(op, os.NewSyscallError("bind", err)) } @@ -347,7 +354,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock var bytes uint32 for i := uint(0); i <= d.Retries; i++ { err = socket.ConnectEx( - windows.Handle(sock.handle), + sock.handle, &sa, nil, // sendBuf 0, // sendDataLen @@ -367,7 +374,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock // update the connection properties, so shutdown can be used if err = windows.Setsockopt( - windows.Handle(sock.handle), + sock.handle, windows.SOL_SOCKET, windows.SO_UPDATE_CONNECT_CONTEXT, nil, // optvalue @@ -378,7 +385,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock // get the local name var sal rawHvsockAddr - err = socket.GetSockName(windows.Handle(sock.handle), &sal) + err = socket.GetSockName(sock.handle, &sal) if err != nil { return nil, conn.opErr(op, os.NewSyscallError("getsockname", err)) } @@ -421,7 +428,7 @@ func (d *HvsockDialer) redialWait(ctx context.Context) (err error) { return ctx.Err() } -// assumes error is a plain, unwrapped syscall.Errno provided by direct syscall. +// assumes error is a plain, unwrapped windows.Errno provided by direct syscall. func canRedial(err error) bool { //nolint:errorlint // guaranteed to be an Errno switch err { @@ -447,9 +454,9 @@ func (conn *HvsockConn) Read(b []byte) (int, error) { return 0, conn.opErr("read", err) } defer conn.sock.wg.Done() - buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))} + buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))} var flags, bytes uint32 - err = syscall.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil) + err = windows.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil) n, err := conn.sock.asyncIO(c, &conn.sock.readDeadline, bytes, err) if err != nil { var eno windows.Errno @@ -482,9 +489,9 @@ func (conn *HvsockConn) write(b []byte) (int, error) { return 0, conn.opErr("write", err) } defer conn.sock.wg.Done() - buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))} + buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))} var bytes uint32 - err = syscall.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil) + err = windows.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil) n, err := conn.sock.asyncIO(c, &conn.sock.writeDeadline, bytes, err) if err != nil { var eno windows.Errno @@ -511,7 +518,7 @@ func (conn *HvsockConn) shutdown(how int) error { return socket.ErrSocketClosed } - err := syscall.Shutdown(conn.sock.handle, how) + err := windows.Shutdown(conn.sock.handle, how) if err != nil { // If the connection was closed, shutdowns fail with "not connected" if errors.Is(err, windows.WSAENOTCONN) || @@ -525,7 +532,7 @@ func (conn *HvsockConn) shutdown(how int) error { // CloseRead shuts down the read end of the socket, preventing future read operations. func (conn *HvsockConn) CloseRead() error { - err := conn.shutdown(syscall.SHUT_RD) + err := conn.shutdown(windows.SHUT_RD) if err != nil { return conn.opErr("closeread", err) } @@ -535,7 +542,7 @@ func (conn *HvsockConn) CloseRead() error { // CloseWrite shuts down the write end of the socket, preventing future write operations and // notifying the other endpoint that no more data will be written. func (conn *HvsockConn) CloseWrite() error { - err := conn.shutdown(syscall.SHUT_WR) + err := conn.shutdown(windows.SHUT_WR) if err != nil { return conn.opErr("closewrite", err) } diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go b/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go index 509b3ec641..0cd9621df7 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go +++ b/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go @@ -11,12 +11,14 @@ import ( //go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go fs.go // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew -//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW +//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW const NullHandle windows.Handle = 0 // AccessMask defines standard, specific, and generic rights. // +// Used with CreateFile and NtCreateFile (and co.). +// // Bitmask: // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 @@ -47,6 +49,12 @@ const ( // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#parameters FILE_ANY_ACCESS AccessMask = 0 + GENERIC_READ AccessMask = 0x8000_0000 + GENERIC_WRITE AccessMask = 0x4000_0000 + GENERIC_EXECUTE AccessMask = 0x2000_0000 + GENERIC_ALL AccessMask = 0x1000_0000 + ACCESS_SYSTEM_SECURITY AccessMask = 0x0100_0000 + // Specific Object Access // from ntioapi.h @@ -124,14 +132,32 @@ const ( TRUNCATE_EXISTING FileCreationDisposition = 0x05 ) +// Create disposition values for NtCreate* +type NTFileCreationDisposition uint32 + +//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. +const ( + // From ntioapi.h + + FILE_SUPERSEDE NTFileCreationDisposition = 0x00 + FILE_OPEN NTFileCreationDisposition = 0x01 + FILE_CREATE NTFileCreationDisposition = 0x02 + FILE_OPEN_IF NTFileCreationDisposition = 0x03 + FILE_OVERWRITE NTFileCreationDisposition = 0x04 + FILE_OVERWRITE_IF NTFileCreationDisposition = 0x05 + FILE_MAXIMUM_DISPOSITION NTFileCreationDisposition = 0x05 +) + // CreateFile and co. take flags or attributes together as one parameter. // Define alias until we can use generics to allow both - +// // https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants type FileFlagOrAttribute uint32 //nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( // from winnt.h +const ( + // from winnt.h + FILE_FLAG_WRITE_THROUGH FileFlagOrAttribute = 0x8000_0000 FILE_FLAG_OVERLAPPED FileFlagOrAttribute = 0x4000_0000 FILE_FLAG_NO_BUFFERING FileFlagOrAttribute = 0x2000_0000 @@ -145,17 +171,51 @@ const ( // from winnt.h FILE_FLAG_FIRST_PIPE_INSTANCE FileFlagOrAttribute = 0x0008_0000 ) +// NtCreate* functions take a dedicated CreateOptions parameter. +// +// https://learn.microsoft.com/en-us/windows/win32/api/Winternl/nf-winternl-ntcreatefile +// +// https://learn.microsoft.com/en-us/windows/win32/devnotes/nt-create-named-pipe-file +type NTCreateOptions uint32 + +//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. +const ( + // From ntioapi.h + + FILE_DIRECTORY_FILE NTCreateOptions = 0x0000_0001 + FILE_WRITE_THROUGH NTCreateOptions = 0x0000_0002 + FILE_SEQUENTIAL_ONLY NTCreateOptions = 0x0000_0004 + FILE_NO_INTERMEDIATE_BUFFERING NTCreateOptions = 0x0000_0008 + + FILE_SYNCHRONOUS_IO_ALERT NTCreateOptions = 0x0000_0010 + FILE_SYNCHRONOUS_IO_NONALERT NTCreateOptions = 0x0000_0020 + FILE_NON_DIRECTORY_FILE NTCreateOptions = 0x0000_0040 + FILE_CREATE_TREE_CONNECTION NTCreateOptions = 0x0000_0080 + + FILE_COMPLETE_IF_OPLOCKED NTCreateOptions = 0x0000_0100 + FILE_NO_EA_KNOWLEDGE NTCreateOptions = 0x0000_0200 + FILE_DISABLE_TUNNELING NTCreateOptions = 0x0000_0400 + FILE_RANDOM_ACCESS NTCreateOptions = 0x0000_0800 + + FILE_DELETE_ON_CLOSE NTCreateOptions = 0x0000_1000 + FILE_OPEN_BY_FILE_ID NTCreateOptions = 0x0000_2000 + FILE_OPEN_FOR_BACKUP_INTENT NTCreateOptions = 0x0000_4000 + FILE_NO_COMPRESSION NTCreateOptions = 0x0000_8000 +) + type FileSQSFlag = FileFlagOrAttribute //nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( // from winbase.h +const ( + // from winbase.h + SECURITY_ANONYMOUS FileSQSFlag = FileSQSFlag(SecurityAnonymous << 16) SECURITY_IDENTIFICATION FileSQSFlag = FileSQSFlag(SecurityIdentification << 16) SECURITY_IMPERSONATION FileSQSFlag = FileSQSFlag(SecurityImpersonation << 16) SECURITY_DELEGATION FileSQSFlag = FileSQSFlag(SecurityDelegation << 16) - SECURITY_SQOS_PRESENT FileSQSFlag = 0x00100000 - SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F0000 + SECURITY_SQOS_PRESENT FileSQSFlag = 0x0010_0000 + SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F_0000 ) // GetFinalPathNameByHandle flags diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go index e2f7bb24e5..a94e234c70 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -45,7 +42,7 @@ var ( procCreateFileW = modkernel32.NewProc("CreateFileW") ) -func CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { +func CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { var _p0 *uint16 _p0, err = syscall.UTF16PtrFromString(name) if err != nil { @@ -54,8 +51,8 @@ func CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall. return _CreateFile(_p0, access, mode, sa, createmode, attrs, templatefile) } -func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) +func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { + r0, _, e1 := syscall.SyscallN(procCreateFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile)) handle = windows.Handle(r0) if handle == windows.InvalidHandle { err = errnoErr(e1) diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go b/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go index aeb7b7250f..88580d974e 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go +++ b/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go @@ -156,9 +156,7 @@ func connectEx( bytesSent *uint32, overlapped *windows.Overlapped, ) (err error) { - // todo: after upgrading to 1.18, switch from syscall.Syscall9 to syscall.SyscallN - r1, _, e1 := syscall.Syscall9(connectExFunc.addr, - 7, + r1, _, e1 := syscall.SyscallN(connectExFunc.addr, uintptr(s), uintptr(name), uintptr(namelen), @@ -166,8 +164,8 @@ func connectEx( uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), - 0, - 0) + ) + if r1 == 0 { if e1 != 0 { err = error(e1) diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go index 6d2e1a9e44..e1504126aa 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -48,7 +45,7 @@ var ( ) func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + r1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen)) if r1 == socketError { err = errnoErr(e1) } @@ -56,7 +53,7 @@ func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) { } func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) + r1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) if r1 == socketError { err = errnoErr(e1) } @@ -64,7 +61,7 @@ func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err err } func getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) + r1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) if r1 == socketError { err = errnoErr(e1) } diff --git a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go b/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go index 7ad5057024..42ebc019fc 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go +++ b/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go @@ -62,7 +62,7 @@ func (b *WString) Free() { // ResizeTo grows the buffer to at least c and returns the new capacity, freeing the // previous buffer back into pool. func (b *WString) ResizeTo(c uint32) uint32 { - // allready sufficient (or n is 0) + // already sufficient (or n is 0) if c <= b.Cap() { return b.Cap() } diff --git a/vendor/github.com/Microsoft/go-winio/pipe.go b/vendor/github.com/Microsoft/go-winio/pipe.go index 25cc811031..a2da6639d0 100644 --- a/vendor/github.com/Microsoft/go-winio/pipe.go +++ b/vendor/github.com/Microsoft/go-winio/pipe.go @@ -11,7 +11,6 @@ import ( "net" "os" "runtime" - "syscall" "time" "unsafe" @@ -20,20 +19,44 @@ import ( "github.com/Microsoft/go-winio/internal/fs" ) -//sys connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) = ConnectNamedPipe -//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) [failretval==syscall.InvalidHandle] = CreateNamedPipeW -//sys getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo -//sys getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW -//sys localAlloc(uFlags uint32, length uint32) (ptr uintptr) = LocalAlloc -//sys ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile +//sys connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) = ConnectNamedPipe +//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateNamedPipeW +//sys disconnectNamedPipe(pipe windows.Handle) (err error) = DisconnectNamedPipe +//sys getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo +//sys getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW +//sys ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile //sys rtlNtStatusToDosError(status ntStatus) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb //sys rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) = ntdll.RtlDosPathNameToNtPathName_U //sys rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) = ntdll.RtlDefaultNpAcl +type PipeConn interface { + net.Conn + Disconnect() error + Flush() error +} + +// type aliases for mkwinsyscall code +type ( + ntAccessMask = fs.AccessMask + ntFileShareMode = fs.FileShareMode + ntFileCreationDisposition = fs.NTFileCreationDisposition + ntFileOptions = fs.NTCreateOptions +) + type ioStatusBlock struct { Status, Information uintptr } +// typedef struct _OBJECT_ATTRIBUTES { +// ULONG Length; +// HANDLE RootDirectory; +// PUNICODE_STRING ObjectName; +// ULONG Attributes; +// PVOID SecurityDescriptor; +// PVOID SecurityQualityOfService; +// } OBJECT_ATTRIBUTES; +// +// https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_object_attributes type objectAttributes struct { Length uintptr RootDirectory uintptr @@ -49,6 +72,17 @@ type unicodeString struct { Buffer uintptr } +// typedef struct _SECURITY_DESCRIPTOR { +// BYTE Revision; +// BYTE Sbz1; +// SECURITY_DESCRIPTOR_CONTROL Control; +// PSID Owner; +// PSID Group; +// PACL Sacl; +// PACL Dacl; +// } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; +// +// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-security_descriptor type securityDescriptor struct { Revision byte Sbz1 byte @@ -80,6 +114,8 @@ type win32Pipe struct { path string } +var _ PipeConn = (*win32Pipe)(nil) + type win32MessageBytePipe struct { win32Pipe writeClosed bool @@ -103,6 +139,10 @@ func (f *win32Pipe) SetDeadline(t time.Time) error { return f.SetWriteDeadline(t) } +func (f *win32Pipe) Disconnect() error { + return disconnectNamedPipe(f.win32File.handle) +} + // CloseWrite closes the write side of a message pipe in byte mode. func (f *win32MessageBytePipe) CloseWrite() error { if f.writeClosed { @@ -146,7 +186,7 @@ func (f *win32MessageBytePipe) Read(b []byte) (int, error) { // zero-byte message, ensure that all future Read() calls // also return EOF. f.readEOF = true - } else if err == syscall.ERROR_MORE_DATA { //nolint:errorlint // err is Errno + } else if err == windows.ERROR_MORE_DATA { //nolint:errorlint // err is Errno // ERROR_MORE_DATA indicates that the pipe's read mode is message mode // and the message still has more bytes. Treat this as a success, since // this package presents all named pipes as byte streams. @@ -164,21 +204,20 @@ func (s pipeAddress) String() string { } // tryDialPipe attempts to dial the pipe at `path` until `ctx` cancellation or timeout. -func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask) (syscall.Handle, error) { +func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask, impLevel PipeImpLevel) (windows.Handle, error) { for { select { case <-ctx.Done(): - return syscall.Handle(0), ctx.Err() + return windows.Handle(0), ctx.Err() default: - wh, err := fs.CreateFile(*path, + h, err := fs.CreateFile(*path, access, 0, // mode nil, // security attributes fs.OPEN_EXISTING, - fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.SECURITY_ANONYMOUS, + fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.FileSQSFlag(impLevel), 0, // template file handle ) - h := syscall.Handle(wh) if err == nil { return h, nil } @@ -214,15 +253,33 @@ func DialPipe(path string, timeout *time.Duration) (net.Conn, error) { // DialPipeContext attempts to connect to a named pipe by `path` until `ctx` // cancellation or timeout. func DialPipeContext(ctx context.Context, path string) (net.Conn, error) { - return DialPipeAccess(ctx, path, syscall.GENERIC_READ|syscall.GENERIC_WRITE) + return DialPipeAccess(ctx, path, uint32(fs.GENERIC_READ|fs.GENERIC_WRITE)) } +// PipeImpLevel is an enumeration of impersonation levels that may be set +// when calling DialPipeAccessImpersonation. +type PipeImpLevel uint32 + +const ( + PipeImpLevelAnonymous = PipeImpLevel(fs.SECURITY_ANONYMOUS) + PipeImpLevelIdentification = PipeImpLevel(fs.SECURITY_IDENTIFICATION) + PipeImpLevelImpersonation = PipeImpLevel(fs.SECURITY_IMPERSONATION) + PipeImpLevelDelegation = PipeImpLevel(fs.SECURITY_DELEGATION) +) + // DialPipeAccess attempts to connect to a named pipe by `path` with `access` until `ctx` // cancellation or timeout. func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, error) { + return DialPipeAccessImpLevel(ctx, path, access, PipeImpLevelAnonymous) +} + +// DialPipeAccessImpLevel attempts to connect to a named pipe by `path` with +// `access` at `impLevel` until `ctx` cancellation or timeout. The other +// DialPipe* implementations use PipeImpLevelAnonymous. +func DialPipeAccessImpLevel(ctx context.Context, path string, access uint32, impLevel PipeImpLevel) (net.Conn, error) { var err error - var h syscall.Handle - h, err = tryDialPipe(ctx, &path, fs.AccessMask(access)) + var h windows.Handle + h, err = tryDialPipe(ctx, &path, fs.AccessMask(access), impLevel) if err != nil { return nil, err } @@ -235,7 +292,7 @@ func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, f, err := makeWin32File(h) if err != nil { - syscall.Close(h) + windows.Close(h) return nil, err } @@ -255,7 +312,7 @@ type acceptResponse struct { } type win32PipeListener struct { - firstHandle syscall.Handle + firstHandle windows.Handle path string config PipeConfig acceptCh chan (chan acceptResponse) @@ -263,8 +320,8 @@ type win32PipeListener struct { doneCh chan int } -func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (syscall.Handle, error) { - path16, err := syscall.UTF16FromString(path) +func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (windows.Handle, error) { + path16, err := windows.UTF16FromString(path) if err != nil { return 0, &os.PathError{Op: "open", Path: path, Err: err} } @@ -280,16 +337,20 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy ).Err(); err != nil { return 0, &os.PathError{Op: "open", Path: path, Err: err} } - defer localFree(ntPath.Buffer) + defer windows.LocalFree(windows.Handle(ntPath.Buffer)) //nolint:errcheck oa.ObjectName = &ntPath oa.Attributes = windows.OBJ_CASE_INSENSITIVE // The security descriptor is only needed for the first pipe. if first { if sd != nil { + //todo: does `sdb` need to be allocated on the heap, or can go allocate it? l := uint32(len(sd)) - sdb := localAlloc(0, l) - defer localFree(sdb) + sdb, err := windows.LocalAlloc(0, l) + if err != nil { + return 0, fmt.Errorf("LocalAlloc for security descriptor with of length %d: %w", l, err) + } + defer windows.LocalFree(windows.Handle(sdb)) //nolint:errcheck copy((*[0xffff]byte)(unsafe.Pointer(sdb))[:], sd) oa.SecurityDescriptor = (*securityDescriptor)(unsafe.Pointer(sdb)) } else { @@ -298,7 +359,7 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy if err := rtlDefaultNpAcl(&dacl).Err(); err != nil { return 0, fmt.Errorf("getting default named pipe ACL: %w", err) } - defer localFree(dacl) + defer windows.LocalFree(windows.Handle(dacl)) //nolint:errcheck sdb := &securityDescriptor{ Revision: 1, @@ -314,27 +375,27 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy typ |= windows.FILE_PIPE_MESSAGE_TYPE } - disposition := uint32(windows.FILE_OPEN) - access := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE | syscall.SYNCHRONIZE) + disposition := fs.FILE_OPEN + access := fs.GENERIC_READ | fs.GENERIC_WRITE | fs.SYNCHRONIZE if first { - disposition = windows.FILE_CREATE + disposition = fs.FILE_CREATE // By not asking for read or write access, the named pipe file system // will put this pipe into an initially disconnected state, blocking // client connections until the next call with first == false. - access = syscall.SYNCHRONIZE + access = fs.SYNCHRONIZE } timeout := int64(-50 * 10000) // 50ms var ( - h syscall.Handle + h windows.Handle iosb ioStatusBlock ) err = ntCreateNamedPipeFile(&h, access, &oa, &iosb, - syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE, + fs.FILE_SHARE_READ|fs.FILE_SHARE_WRITE, disposition, 0, typ, @@ -359,7 +420,7 @@ func (l *win32PipeListener) makeServerPipe() (*win32File, error) { } f, err := makeWin32File(h) if err != nil { - syscall.Close(h) + windows.Close(h) return nil, err } return f, nil @@ -418,7 +479,7 @@ func (l *win32PipeListener) listenerRoutine() { closed = err == ErrPipeListenerClosed //nolint:errorlint // err is Errno } } - syscall.Close(l.firstHandle) + windows.Close(l.firstHandle) l.firstHandle = 0 // Notify Close() and Accept() callers that the handle has been closed. close(l.doneCh) diff --git a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go index 7ac377ae46..7c7f145f44 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go @@ -11,7 +11,6 @@ import ( "os" "path/filepath" "strings" - "syscall" "unsafe" "golang.org/x/sys/windows" @@ -244,7 +243,7 @@ func getFinalPath(pth string) (string, error) { } buf = make([]uint16, n) } - finalPath := syscall.UTF16ToString(buf) + finalPath := windows.UTF16ToString(buf) // We got VOLUME_NAME_DOS, we need to strip away some leading slashes. // Leave unchanged if we ended up requesting VOLUME_NAME_GUID if len(finalPath) > 4 && finalPath[:4] == `\\?\` && flags == 0x0 { diff --git a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go index 45c45c96e4..1da9b3f3b4 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -52,7 +49,7 @@ func bfGetMappings(flags uint32, jobHandle windows.Handle, virtRootPath *uint16, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procBfGetMappings.Addr(), 6, uintptr(flags), uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(bufferSize)), uintptr(unsafe.Pointer(outBuffer))) + r0, _, _ := syscall.SyscallN(procBfGetMappings.Addr(), uintptr(flags), uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(bufferSize)), uintptr(unsafe.Pointer(outBuffer))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -76,7 +73,7 @@ func _bfRemoveMapping(jobHandle windows.Handle, virtRootPath *uint16) (hr error) if hr != nil { return } - r0, _, _ := syscall.Syscall(procBfRemoveMapping.Addr(), 2, uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath)), 0) + r0, _, _ := syscall.SyscallN(procBfRemoveMapping.Addr(), uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -105,7 +102,7 @@ func _bfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16 if hr != nil { return } - r0, _, _ := syscall.Syscall6(procBfSetupFilter.Addr(), 6, uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) + r0, _, _ := syscall.SyscallN(procBfSetupFilter.Addr(), uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/vendor/github.com/Microsoft/go-winio/privilege.go b/vendor/github.com/Microsoft/go-winio/privilege.go index 0ff9dac906..d9b90b6e86 100644 --- a/vendor/github.com/Microsoft/go-winio/privilege.go +++ b/vendor/github.com/Microsoft/go-winio/privilege.go @@ -9,7 +9,6 @@ import ( "fmt" "runtime" "sync" - "syscall" "unicode/utf16" "golang.org/x/sys/windows" @@ -18,8 +17,8 @@ import ( //sys adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges //sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf //sys revertToSelf() (err error) = advapi32.RevertToSelf -//sys openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken -//sys getCurrentThread() (h syscall.Handle) = GetCurrentThread +//sys openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken +//sys getCurrentThread() (h windows.Handle) = GetCurrentThread //sys lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) = advapi32.LookupPrivilegeValueW //sys lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) = advapi32.LookupPrivilegeNameW //sys lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) = advapi32.LookupPrivilegeDisplayNameW @@ -29,7 +28,7 @@ const ( SE_PRIVILEGE_ENABLED = windows.SE_PRIVILEGE_ENABLED //revive:disable-next-line:var-naming ALL_CAPS - ERROR_NOT_ALL_ASSIGNED syscall.Errno = windows.ERROR_NOT_ALL_ASSIGNED + ERROR_NOT_ALL_ASSIGNED windows.Errno = windows.ERROR_NOT_ALL_ASSIGNED SeBackupPrivilege = "SeBackupPrivilege" SeRestorePrivilege = "SeRestorePrivilege" @@ -177,7 +176,7 @@ func newThreadToken() (windows.Token, error) { } var token windows.Token - err = openThreadToken(getCurrentThread(), syscall.TOKEN_ADJUST_PRIVILEGES|syscall.TOKEN_QUERY, false, &token) + err = openThreadToken(getCurrentThread(), windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, false, &token) if err != nil { rerr := revertToSelf() if rerr != nil { diff --git a/vendor/github.com/Microsoft/go-winio/sd.go b/vendor/github.com/Microsoft/go-winio/sd.go index 5550ef6b61..c3685e98e1 100644 --- a/vendor/github.com/Microsoft/go-winio/sd.go +++ b/vendor/github.com/Microsoft/go-winio/sd.go @@ -5,7 +5,7 @@ package winio import ( "errors" - "syscall" + "fmt" "unsafe" "golang.org/x/sys/windows" @@ -15,10 +15,6 @@ import ( //sys lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountSidW //sys convertSidToStringSid(sid *byte, str **uint16) (err error) = advapi32.ConvertSidToStringSidW //sys convertStringSidToSid(str *uint16, sid **byte) (err error) = advapi32.ConvertStringSidToSidW -//sys convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW -//sys convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW -//sys localFree(mem uintptr) = LocalFree -//sys getSecurityDescriptorLength(sd uintptr) (len uint32) = advapi32.GetSecurityDescriptorLength type AccountLookupError struct { Name string @@ -64,7 +60,7 @@ func LookupSidByName(name string) (sid string, err error) { var sidSize, sidNameUse, refDomainSize uint32 err = lookupAccountName(nil, name, nil, &sidSize, nil, &refDomainSize, &sidNameUse) - if err != nil && err != syscall.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno + if err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno return "", &AccountLookupError{name, err} } sidBuffer := make([]byte, sidSize) @@ -78,8 +74,8 @@ func LookupSidByName(name string) (sid string, err error) { if err != nil { return "", &AccountLookupError{name, err} } - sid = syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:]) - localFree(uintptr(unsafe.Pointer(strBuffer))) + sid = windows.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:]) + _, _ = windows.LocalFree(windows.Handle(unsafe.Pointer(strBuffer))) return sid, nil } @@ -100,7 +96,7 @@ func LookupNameBySid(sid string) (name string, err error) { if err = convertStringSidToSid(sidBuffer, &sidPtr); err != nil { return "", &AccountLookupError{sid, err} } - defer localFree(uintptr(unsafe.Pointer(sidPtr))) + defer windows.LocalFree(windows.Handle(unsafe.Pointer(sidPtr))) //nolint:errcheck var nameSize, refDomainSize, sidNameUse uint32 err = lookupAccountSid(nil, sidPtr, nil, &nameSize, nil, &refDomainSize, &sidNameUse) @@ -120,25 +116,18 @@ func LookupNameBySid(sid string) (name string, err error) { } func SddlToSecurityDescriptor(sddl string) ([]byte, error) { - var sdBuffer uintptr - err := convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &sdBuffer, nil) + sd, err := windows.SecurityDescriptorFromString(sddl) if err != nil { - return nil, &SddlConversionError{sddl, err} + return nil, &SddlConversionError{Sddl: sddl, Err: err} } - defer localFree(sdBuffer) - sd := make([]byte, getSecurityDescriptorLength(sdBuffer)) - copy(sd, (*[0xffff]byte)(unsafe.Pointer(sdBuffer))[:len(sd)]) - return sd, nil + b := unsafe.Slice((*byte)(unsafe.Pointer(sd)), sd.Length()) + return b, nil } func SecurityDescriptorToSddl(sd []byte) (string, error) { - var sddl *uint16 - // The returned string length seems to include an arbitrary number of terminating NULs. - // Don't use it. - err := convertSecurityDescriptorToStringSecurityDescriptor(&sd[0], 1, 0xff, &sddl, nil) - if err != nil { - return "", err + if l := int(unsafe.Sizeof(windows.SECURITY_DESCRIPTOR{})); len(sd) < l { + return "", fmt.Errorf("SecurityDescriptor (%d) smaller than expected (%d): %w", len(sd), l, windows.ERROR_INCORRECT_SIZE) } - defer localFree(uintptr(unsafe.Pointer(sddl))) - return syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(sddl))[:]), nil + s := (*windows.SECURITY_DESCRIPTOR)(unsafe.Pointer(&sd[0])) + return s.String(), nil } diff --git a/vendor/github.com/Microsoft/go-winio/tools.go b/vendor/github.com/Microsoft/go-winio/tools.go deleted file mode 100644 index 2aa045843e..0000000000 --- a/vendor/github.com/Microsoft/go-winio/tools.go +++ /dev/null @@ -1,5 +0,0 @@ -//go:build tools - -package winio - -import _ "golang.org/x/tools/cmd/stringer" diff --git a/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go b/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go index d0e917d2be..95c0407433 100644 --- a/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go +++ b/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -50,7 +47,7 @@ var ( ) func attachVirtualDisk(handle syscall.Handle, securityDescriptor *uintptr, attachVirtualDiskFlag uint32, providerSpecificFlags uint32, parameters *AttachVirtualDiskParameters, overlapped *syscall.Overlapped) (win32err error) { - r0, _, _ := syscall.Syscall6(procAttachVirtualDisk.Addr(), 6, uintptr(handle), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(attachVirtualDiskFlag), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped))) + r0, _, _ := syscall.SyscallN(procAttachVirtualDisk.Addr(), uintptr(handle), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(attachVirtualDiskFlag), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -67,7 +64,7 @@ func createVirtualDisk(virtualStorageType *VirtualStorageType, path string, virt } func _createVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, virtualDiskAccessMask uint32, securityDescriptor *uintptr, createVirtualDiskFlags uint32, providerSpecificFlags uint32, parameters *CreateVirtualDiskParameters, overlapped *syscall.Overlapped, handle *syscall.Handle) (win32err error) { - r0, _, _ := syscall.Syscall9(procCreateVirtualDisk.Addr(), 9, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(createVirtualDiskFlags), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(handle))) + r0, _, _ := syscall.SyscallN(procCreateVirtualDisk.Addr(), uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(createVirtualDiskFlags), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(handle))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -75,7 +72,7 @@ func _createVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, vi } func detachVirtualDisk(handle syscall.Handle, detachVirtualDiskFlags uint32, providerSpecificFlags uint32) (win32err error) { - r0, _, _ := syscall.Syscall(procDetachVirtualDisk.Addr(), 3, uintptr(handle), uintptr(detachVirtualDiskFlags), uintptr(providerSpecificFlags)) + r0, _, _ := syscall.SyscallN(procDetachVirtualDisk.Addr(), uintptr(handle), uintptr(detachVirtualDiskFlags), uintptr(providerSpecificFlags)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -83,7 +80,7 @@ func detachVirtualDisk(handle syscall.Handle, detachVirtualDiskFlags uint32, pro } func getVirtualDiskPhysicalPath(handle syscall.Handle, diskPathSizeInBytes *uint32, buffer *uint16) (win32err error) { - r0, _, _ := syscall.Syscall(procGetVirtualDiskPhysicalPath.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(diskPathSizeInBytes)), uintptr(unsafe.Pointer(buffer))) + r0, _, _ := syscall.SyscallN(procGetVirtualDiskPhysicalPath.Addr(), uintptr(handle), uintptr(unsafe.Pointer(diskPathSizeInBytes)), uintptr(unsafe.Pointer(buffer))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -100,7 +97,7 @@ func openVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtua } func _openVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (win32err error) { - r0, _, _ := syscall.Syscall6(procOpenVirtualDisk.Addr(), 6, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(openVirtualDiskFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) + r0, _, _ := syscall.SyscallN(procOpenVirtualDisk.Addr(), uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(openVirtualDiskFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) if r0 != 0 { win32err = syscall.Errno(r0) } diff --git a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go index 469b16f639..89b66eda8c 100644 --- a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -45,38 +42,34 @@ var ( modntdll = windows.NewLazySystemDLL("ntdll.dll") modws2_32 = windows.NewLazySystemDLL("ws2_32.dll") - procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") - procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW") - procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") - procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW") - procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") - procGetSecurityDescriptorLength = modadvapi32.NewProc("GetSecurityDescriptorLength") - procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") - procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") - procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") - procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW") - procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW") - procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") - procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") - procRevertToSelf = modadvapi32.NewProc("RevertToSelf") - procBackupRead = modkernel32.NewProc("BackupRead") - procBackupWrite = modkernel32.NewProc("BackupWrite") - procCancelIoEx = modkernel32.NewProc("CancelIoEx") - procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") - procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") - procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") - procGetCurrentThread = modkernel32.NewProc("GetCurrentThread") - procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") - procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") - procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") - procLocalAlloc = modkernel32.NewProc("LocalAlloc") - procLocalFree = modkernel32.NewProc("LocalFree") - procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") - procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") - procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") - procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U") - procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") - procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") + procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") + procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") + procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") + procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") + procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") + procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") + procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW") + procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW") + procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") + procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") + procRevertToSelf = modadvapi32.NewProc("RevertToSelf") + procBackupRead = modkernel32.NewProc("BackupRead") + procBackupWrite = modkernel32.NewProc("BackupWrite") + procCancelIoEx = modkernel32.NewProc("CancelIoEx") + procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") + procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") + procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") + procDisconnectNamedPipe = modkernel32.NewProc("DisconnectNamedPipe") + procGetCurrentThread = modkernel32.NewProc("GetCurrentThread") + procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") + procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") + procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") + procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") + procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") + procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U") + procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") + procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") ) func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) { @@ -84,7 +77,7 @@ func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, ou if releaseAll { _p0 = 1 } - r0, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize))) + r0, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize))) success = r0 != 0 if true { err = errnoErr(e1) @@ -92,33 +85,8 @@ func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, ou return } -func convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(secInfo), uintptr(unsafe.Pointer(sddl)), uintptr(unsafe.Pointer(sddlSize)), 0) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - func convertSidToStringSid(sid *byte, str **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str)), 0) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(str) - if err != nil { - return - } - return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size) -} - -func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd *uintptr, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str))) if r1 == 0 { err = errnoErr(e1) } @@ -126,21 +94,15 @@ func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision } func convertStringSidToSid(str *uint16, sid **byte) (err error) { - r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid)), 0) + r1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid))) if r1 == 0 { err = errnoErr(e1) } return } -func getSecurityDescriptorLength(sd uintptr) (len uint32) { - r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(sd), 0, 0) - len = uint32(r0) - return -} - func impersonateSelf(level uint32) (err error) { - r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(level), 0, 0) + r1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(level)) if r1 == 0 { err = errnoErr(e1) } @@ -157,7 +119,7 @@ func lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSiz } func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse))) if r1 == 0 { err = errnoErr(e1) } @@ -165,7 +127,7 @@ func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidS } func lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountSidW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse))) if r1 == 0 { err = errnoErr(e1) } @@ -182,7 +144,7 @@ func lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, } func _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procLookupPrivilegeDisplayNameW.Addr(), 5, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId)), 0) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeDisplayNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId))) if r1 == 0 { err = errnoErr(e1) } @@ -199,7 +161,7 @@ func lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size * } func _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint16, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procLookupPrivilegeNameW.Addr(), 4, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } @@ -221,19 +183,19 @@ func lookupPrivilegeValue(systemName string, name string, luid *uint64) (err err } func _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint64) (err error) { - r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeValueW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) if r1 == 0 { err = errnoErr(e1) } return } -func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) { +func openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) { var _p0 uint32 if openAsSelf { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0) + r1, _, e1 := syscall.SyscallN(procOpenThreadToken.Addr(), uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -241,14 +203,14 @@ func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, } func revertToSelf() (err error) { - r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0) + r1, _, e1 := syscall.SyscallN(procRevertToSelf.Addr()) if r1 == 0 { err = errnoErr(e1) } return } -func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { +func backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { var _p0 *byte if len(b) > 0 { _p0 = &b[0] @@ -261,14 +223,14 @@ func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, proce if processSecurity { _p2 = 1 } - r1, _, e1 := syscall.Syscall9(procBackupRead.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0) + r1, _, e1 := syscall.SyscallN(procBackupRead.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context))) if r1 == 0 { err = errnoErr(e1) } return } -func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { +func backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { var _p0 *byte if len(b) > 0 { _p0 = &b[0] @@ -281,39 +243,39 @@ func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, p if processSecurity { _p2 = 1 } - r1, _, e1 := syscall.Syscall9(procBackupWrite.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0) + r1, _, e1 := syscall.SyscallN(procBackupWrite.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context))) if r1 == 0 { err = errnoErr(e1) } return } -func cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(file), uintptr(unsafe.Pointer(o)), 0) +func cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) { + r1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(file), uintptr(unsafe.Pointer(o))) if r1 == 0 { err = errnoErr(e1) } return } -func connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(o)), 0) +func connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) { + r1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(o))) if r1 == 0 { err = errnoErr(e1) } return } -func createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount), 0, 0) - newport = syscall.Handle(r0) +func createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) { + r0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount)) + newport = windows.Handle(r0) if newport == 0 { err = errnoErr(e1) } return } -func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) { +func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) { var _p0 *uint16 _p0, err = syscall.UTF16PtrFromString(name) if err != nil { @@ -322,96 +284,93 @@ func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances ui return _createNamedPipe(_p0, flags, pipeMode, maxInstances, outSize, inSize, defaultTimeout, sa) } -func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0) - handle = syscall.Handle(r0) - if handle == syscall.InvalidHandle { +func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) { + r0, _, e1 := syscall.SyscallN(procCreateNamedPipeW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa))) + handle = windows.Handle(r0) + if handle == windows.InvalidHandle { err = errnoErr(e1) } return } -func getCurrentThread() (h syscall.Handle) { - r0, _, _ := syscall.Syscall(procGetCurrentThread.Addr(), 0, 0, 0, 0) - h = syscall.Handle(r0) - return -} - -func getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0) +func disconnectNamedPipe(pipe windows.Handle) (err error) { + r1, _, e1 := syscall.SyscallN(procDisconnectNamedPipe.Addr(), uintptr(pipe)) if r1 == 0 { err = errnoErr(e1) } return } -func getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0) - if r1 == 0 { - err = errnoErr(e1) - } +func getCurrentThread() (h windows.Handle) { + r0, _, _ := syscall.SyscallN(procGetCurrentThread.Addr()) + h = windows.Handle(r0) return } -func getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout), 0) +func getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeHandleStateW.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize)) if r1 == 0 { err = errnoErr(e1) } return } -func localAlloc(uFlags uint32, length uint32) (ptr uintptr) { - r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(uFlags), uintptr(length), 0) - ptr = uintptr(r0) +func getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeInfo.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances))) + if r1 == 0 { + err = errnoErr(e1) + } return } -func localFree(mem uintptr) { - syscall.Syscall(procLocalFree.Addr(), 1, uintptr(mem), 0, 0) +func getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout)) + if r1 == 0 { + err = errnoErr(e1) + } return } -func setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(h), uintptr(flags), 0) +func setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) { + r1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(h), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } return } -func ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) { - r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0) +func ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) { + r0, _, _ := syscall.SyscallN(procNtCreateNamedPipeFile.Addr(), uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout))) status = ntStatus(r0) return } func rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) { - r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(dacl)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(dacl))) status = ntStatus(r0) return } func rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) { - r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved)) status = ntStatus(r0) return } func rtlNtStatusToDosError(status ntStatus) (winerr error) { - r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(status), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(status)) if r0 != 0 { winerr = syscall.Errno(r0) } return } -func wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) { +func wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) { var _p0 uint32 if wait { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0) + r1, _, e1 := syscall.SyscallN(procWSAGetOverlappedResult.Addr(), uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags))) if r1 == 0 { err = errnoErr(e1) } diff --git a/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go index 53d0beb87f..9f697beca8 100644 --- a/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -75,7 +72,7 @@ func _hcsAttachLayerStorageFilter(layerPath *uint16, layerData *uint16) (hr erro if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsAttachLayerStorageFilter.Addr(), 2, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(layerData)), 0) + r0, _, _ := syscall.SyscallN(procHcsAttachLayerStorageFilter.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(layerData))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -104,7 +101,7 @@ func _hcsAttachOverlayFilter(volumePath *uint16, layerData *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsAttachOverlayFilter.Addr(), 2, uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(layerData)), 0) + r0, _, _ := syscall.SyscallN(procHcsAttachOverlayFilter.Addr(), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(layerData))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -128,7 +125,7 @@ func _hcsDestroyLayer(layerPath *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsDestroyLayer.Addr(), 1, uintptr(unsafe.Pointer(layerPath)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsDestroyLayer.Addr(), uintptr(unsafe.Pointer(layerPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -152,7 +149,7 @@ func _hcsDetachLayerStorageFilter(layerPath *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsDetachLayerStorageFilter.Addr(), 1, uintptr(unsafe.Pointer(layerPath)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsDetachLayerStorageFilter.Addr(), uintptr(unsafe.Pointer(layerPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -181,7 +178,7 @@ func _hcsDetachOverlayFilter(volumePath *uint16, layerData *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsDetachOverlayFilter.Addr(), 2, uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(layerData)), 0) + r0, _, _ := syscall.SyscallN(procHcsDetachOverlayFilter.Addr(), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(layerData))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -220,7 +217,7 @@ func _hcsExportLayer(layerPath *uint16, exportFolderPath *uint16, layerData *uin if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsExportLayer.Addr(), 4, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(exportFolderPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsExportLayer.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(exportFolderPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -235,7 +232,7 @@ func hcsFormatWritableLayerVhd(handle windows.Handle) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsFormatWritableLayerVhd.Addr(), 1, uintptr(handle), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsFormatWritableLayerVhd.Addr(), uintptr(handle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -250,7 +247,7 @@ func hcsGetLayerVhdMountPath(vhdHandle windows.Handle, mountPath **uint16) (hr e if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetLayerVhdMountPath.Addr(), 2, uintptr(vhdHandle), uintptr(unsafe.Pointer(mountPath)), 0) + r0, _, _ := syscall.SyscallN(procHcsGetLayerVhdMountPath.Addr(), uintptr(vhdHandle), uintptr(unsafe.Pointer(mountPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -284,7 +281,7 @@ func _hcsImportLayer(layerPath *uint16, sourceFolderPath *uint16, layerData *uin if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsImportLayer.Addr(), 3, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(sourceFolderPath)), uintptr(unsafe.Pointer(layerData))) + r0, _, _ := syscall.SyscallN(procHcsImportLayer.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(sourceFolderPath)), uintptr(unsafe.Pointer(layerData))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -318,7 +315,7 @@ func _hcsInitializeWritableLayer(writableLayerPath *uint16, layerData *uint16, o if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsInitializeWritableLayer.Addr(), 3, uintptr(unsafe.Pointer(writableLayerPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options))) + r0, _, _ := syscall.SyscallN(procHcsInitializeWritableLayer.Addr(), uintptr(unsafe.Pointer(writableLayerPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -347,7 +344,7 @@ func _hcsSetupBaseOSLayer(layerPath *uint16, handle windows.Handle, options *uin if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSetupBaseOSLayer.Addr(), 3, uintptr(unsafe.Pointer(layerPath)), uintptr(handle), uintptr(unsafe.Pointer(options))) + r0, _, _ := syscall.SyscallN(procHcsSetupBaseOSLayer.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(handle), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -381,7 +378,7 @@ func _hcsSetupBaseOSVolume(layerPath *uint16, volumePath *uint16, options *uint1 if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSetupBaseOSVolume.Addr(), 3, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(options))) + r0, _, _ := syscall.SyscallN(procHcsSetupBaseOSVolume.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go index 5dcb97eb39..76eb2be7cf 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go @@ -14,14 +14,14 @@ import ( "golang.org/x/sys/windows" ) -// makeOpenFiles calls winio.MakeOpenFile for each handle in a slice but closes all the handles +// makeOpenFiles calls winio.NewOpenFile for each handle in a slice but closes all the handles // if there is an error. func makeOpenFiles(hs []syscall.Handle) (_ []io.ReadWriteCloser, err error) { fs := make([]io.ReadWriteCloser, len(hs)) for i, h := range hs { if h != syscall.Handle(0) { if err == nil { - fs[i], err = winio.MakeOpenFile(h) + fs[i], err = winio.NewOpenFile(windows.Handle(h)) } if err != nil { syscall.Close(h) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go index a35ee945db..11c7e97e34 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -69,7 +66,7 @@ func __hnsCall(method *uint16, path *uint16, object *uint16, response **uint16) if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHNSCall.Addr(), 4, uintptr(unsafe.Pointer(method)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(object)), uintptr(unsafe.Pointer(response)), 0, 0) + r0, _, _ := syscall.SyscallN(procHNSCall.Addr(), uintptr(unsafe.Pointer(method)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(object)), uintptr(unsafe.Pointer(response))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go index a17a112508..14c750bd8d 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -46,6 +43,6 @@ var ( ) func coTaskMemFree(buffer unsafe.Pointer) { - syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(buffer), 0, 0) + syscall.SyscallN(procCoTaskMemFree.Addr(), uintptr(buffer)) return } diff --git a/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go index 26c986b88f..395f54687f 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -48,7 +45,7 @@ var ( ) func getSecurityInfo(handle syscall.Handle, objectType uint32, si uint32, ppsidOwner **uintptr, ppsidGroup **uintptr, ppDacl *uintptr, ppSacl *uintptr, ppSecurityDescriptor *uintptr) (win32err error) { - r0, _, _ := syscall.Syscall9(procGetSecurityInfo.Addr(), 8, uintptr(handle), uintptr(objectType), uintptr(si), uintptr(unsafe.Pointer(ppsidOwner)), uintptr(unsafe.Pointer(ppsidGroup)), uintptr(unsafe.Pointer(ppDacl)), uintptr(unsafe.Pointer(ppSacl)), uintptr(unsafe.Pointer(ppSecurityDescriptor)), 0) + r0, _, _ := syscall.SyscallN(procGetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(si), uintptr(unsafe.Pointer(ppsidOwner)), uintptr(unsafe.Pointer(ppsidGroup)), uintptr(unsafe.Pointer(ppDacl)), uintptr(unsafe.Pointer(ppSacl)), uintptr(unsafe.Pointer(ppSecurityDescriptor))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -56,7 +53,7 @@ func getSecurityInfo(handle syscall.Handle, objectType uint32, si uint32, ppsidO } func setEntriesInAcl(count uintptr, pListOfEEs uintptr, oldAcl uintptr, newAcl *uintptr) (win32err error) { - r0, _, _ := syscall.Syscall6(procSetEntriesInAclW.Addr(), 4, uintptr(count), uintptr(pListOfEEs), uintptr(oldAcl), uintptr(unsafe.Pointer(newAcl)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetEntriesInAclW.Addr(), uintptr(count), uintptr(pListOfEEs), uintptr(oldAcl), uintptr(unsafe.Pointer(newAcl))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -64,7 +61,7 @@ func setEntriesInAcl(count uintptr, pListOfEEs uintptr, oldAcl uintptr, newAcl * } func setSecurityInfo(handle syscall.Handle, objectType uint32, si uint32, psidOwner uintptr, psidGroup uintptr, pDacl uintptr, pSacl uintptr) (win32err error) { - r0, _, _ := syscall.Syscall9(procSetSecurityInfo.Addr(), 7, uintptr(handle), uintptr(objectType), uintptr(si), uintptr(psidOwner), uintptr(psidGroup), uintptr(pDacl), uintptr(pSacl), 0, 0) + r0, _, _ := syscall.SyscallN(procSetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(si), uintptr(psidOwner), uintptr(psidGroup), uintptr(pDacl), uintptr(pSacl)) if r0 != 0 { win32err = syscall.Errno(r0) } diff --git a/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go index 42368872b7..67779de50b 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -75,7 +72,7 @@ func hcsCloseComputeSystem(computeSystem HcsSystem) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsCloseComputeSystem.Addr(), 1, uintptr(computeSystem), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsCloseComputeSystem.Addr(), uintptr(computeSystem)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -90,7 +87,7 @@ func hcsCloseProcess(process HcsProcess) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsCloseProcess.Addr(), 1, uintptr(process), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsCloseProcess.Addr(), uintptr(process)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -119,7 +116,7 @@ func _hcsCreateComputeSystem(id *uint16, configuration *uint16, identity syscall if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsCreateComputeSystem.Addr(), 5, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(configuration)), uintptr(identity), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsCreateComputeSystem.Addr(), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(configuration)), uintptr(identity), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -143,7 +140,7 @@ func _hcsCreateProcess(computeSystem HcsSystem, processParameters *uint16, proce if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsCreateProcess.Addr(), 5, uintptr(computeSystem), uintptr(unsafe.Pointer(processParameters)), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsCreateProcess.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(processParameters)), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -167,7 +164,7 @@ func _hcsEnumerateComputeSystems(query *uint16, computeSystems **uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsEnumerateComputeSystems.Addr(), 3, uintptr(unsafe.Pointer(query)), uintptr(unsafe.Pointer(computeSystems)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsEnumerateComputeSystems.Addr(), uintptr(unsafe.Pointer(query)), uintptr(unsafe.Pointer(computeSystems)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -191,7 +188,7 @@ func _hcsGetComputeSystemProperties(computeSystem HcsSystem, propertyQuery *uint if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsGetComputeSystemProperties.Addr(), 4, uintptr(computeSystem), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsGetComputeSystemProperties.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -206,7 +203,7 @@ func hcsGetProcessInfo(process HcsProcess, processInformation *HcsProcessInforma if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetProcessInfo.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsGetProcessInfo.Addr(), uintptr(process), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -221,7 +218,7 @@ func hcsGetProcessProperties(process HcsProcess, processProperties **uint16, res if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetProcessProperties.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processProperties)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsGetProcessProperties.Addr(), uintptr(process), uintptr(unsafe.Pointer(processProperties)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -245,7 +242,7 @@ func _hcsGetServiceProperties(propertyQuery *uint16, properties **uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetServiceProperties.Addr(), 3, uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsGetServiceProperties.Addr(), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -269,7 +266,7 @@ func _hcsModifyComputeSystem(computeSystem HcsSystem, configuration *uint16, res if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsModifyComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(configuration)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsModifyComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(configuration)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -293,7 +290,7 @@ func _hcsModifyProcess(process HcsProcess, settings *uint16, result **uint16) (h if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsModifyProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsModifyProcess.Addr(), uintptr(process), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -317,7 +314,7 @@ func _hcsModifyServiceSettings(settings *uint16, result **uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsModifyServiceSettings.Addr(), 2, uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsModifyServiceSettings.Addr(), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -341,7 +338,7 @@ func _hcsOpenComputeSystem(id *uint16, computeSystem *HcsSystem, result **uint16 if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsOpenComputeSystem.Addr(), 3, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsOpenComputeSystem.Addr(), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -356,7 +353,7 @@ func hcsOpenProcess(computeSystem HcsSystem, pid uint32, process *HcsProcess, re if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsOpenProcess.Addr(), 4, uintptr(computeSystem), uintptr(pid), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsOpenProcess.Addr(), uintptr(computeSystem), uintptr(pid), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -380,7 +377,7 @@ func _hcsPauseComputeSystem(computeSystem HcsSystem, options *uint16, result **u if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsPauseComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsPauseComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -395,7 +392,7 @@ func hcsRegisterComputeSystemCallback(computeSystem HcsSystem, callback uintptr, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsRegisterComputeSystemCallback.Addr(), 4, uintptr(computeSystem), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsRegisterComputeSystemCallback.Addr(), uintptr(computeSystem), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -410,7 +407,7 @@ func hcsRegisterProcessCallback(process HcsProcess, callback uintptr, context ui if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsRegisterProcessCallback.Addr(), 4, uintptr(process), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsRegisterProcessCallback.Addr(), uintptr(process), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -434,7 +431,7 @@ func _hcsResumeComputeSystem(computeSystem HcsSystem, options *uint16, result ** if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsResumeComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsResumeComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -458,7 +455,7 @@ func _hcsSaveComputeSystem(computeSystem HcsSystem, options *uint16, result **ui if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSaveComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsSaveComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -482,7 +479,7 @@ func _hcsShutdownComputeSystem(computeSystem HcsSystem, options *uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsShutdownComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsShutdownComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -506,7 +503,7 @@ func _hcsSignalProcess(process HcsProcess, options *uint16, result **uint16) (hr if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSignalProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsSignalProcess.Addr(), uintptr(process), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -530,7 +527,7 @@ func _hcsStartComputeSystem(computeSystem HcsSystem, options *uint16, result **u if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsStartComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsStartComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -554,7 +551,7 @@ func _hcsTerminateComputeSystem(computeSystem HcsSystem, options *uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsTerminateComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsTerminateComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -569,7 +566,7 @@ func hcsTerminateProcess(process HcsProcess, result **uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsTerminateProcess.Addr(), 2, uintptr(process), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsTerminateProcess.Addr(), uintptr(process), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -584,7 +581,7 @@ func hcsUnregisterComputeSystemCallback(callbackHandle HcsCallback) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsUnregisterComputeSystemCallback.Addr(), 1, uintptr(callbackHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsUnregisterComputeSystemCallback.Addr(), uintptr(callbackHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -599,7 +596,7 @@ func hcsUnregisterProcessCallback(callbackHandle HcsCallback) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsUnregisterProcessCallback.Addr(), 1, uintptr(callbackHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsUnregisterProcessCallback.Addr(), uintptr(callbackHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go index 0cb509c46f..403b94fc57 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -77,7 +74,7 @@ func getDiskFreeSpaceEx(directoryName string, freeBytesAvailableToCaller *int64, } func _getDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *int64, totalNumberOfBytes *int64, totalNumberOfFreeBytes *int64) (err error) { - r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetDiskFreeSpaceExW.Addr(), uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes))) if r1 == 0 { err = errnoErr(e1) } @@ -85,7 +82,7 @@ func _getDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *int6 } func attachVirtualDisk(handle syscall.Handle, sd uintptr, flags uint32, providerFlags uint32, params uintptr, overlapped uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procAttachVirtualDisk.Addr(), 6, uintptr(handle), uintptr(sd), uintptr(flags), uintptr(providerFlags), uintptr(params), uintptr(overlapped)) + r1, _, e1 := syscall.SyscallN(procAttachVirtualDisk.Addr(), uintptr(handle), uintptr(sd), uintptr(flags), uintptr(providerFlags), uintptr(params), uintptr(overlapped)) if r1 != 0 { err = errnoErr(e1) } @@ -102,7 +99,7 @@ func openVirtualDisk(virtualStorageType *virtualStorageType, path string, virtua } func _openVirtualDisk(virtualStorageType *virtualStorageType, path *uint16, virtualDiskAccessMask uint32, flags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (err error) { - r1, _, e1 := syscall.Syscall6(procOpenVirtualDisk.Addr(), 6, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(flags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) + r1, _, e1 := syscall.SyscallN(procOpenVirtualDisk.Addr(), uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(flags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) if r1 != 0 { err = errnoErr(e1) } @@ -123,7 +120,7 @@ func _activateLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procActivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procActivateLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -156,7 +153,7 @@ func _copyLayer(info *driverInfo, srcId *uint16, dstId *uint16, descriptors []WC if len(descriptors) > 0 { _p2 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procCopyLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(srcId)), uintptr(unsafe.Pointer(dstId)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procCopyLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(srcId)), uintptr(unsafe.Pointer(dstId)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -185,7 +182,7 @@ func _createLayer(info *driverInfo, id *uint16, parent *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCreateLayer.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent))) + r0, _, _ := syscall.SyscallN(procCreateLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -213,7 +210,7 @@ func _createSandboxLayer(info *driverInfo, id *uint16, parent uintptr, descripto if len(descriptors) > 0 { _p1 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procCreateSandboxLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(parent), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procCreateSandboxLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(parent), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -237,7 +234,7 @@ func _deactivateLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procDeactivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procDeactivateLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -261,7 +258,7 @@ func _destroyLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procDestroyLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procDestroyLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -285,7 +282,7 @@ func _expandSandboxSize(info *driverInfo, id *uint16, size uint64) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procExpandSandboxSize.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(size)) + r0, _, _ := syscall.SyscallN(procExpandSandboxSize.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(size)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -318,7 +315,7 @@ func _exportLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_L if len(descriptors) > 0 { _p2 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procExportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procExportLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -333,7 +330,7 @@ func getBaseImages(buffer **uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procGetBaseImages.Addr(), 1, uintptr(unsafe.Pointer(buffer)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetBaseImages.Addr(), uintptr(unsafe.Pointer(buffer))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -357,7 +354,7 @@ func _getLayerMountPath(info *driverInfo, id *uint16, length *uintptr, buffer *u if hr != nil { return } - r0, _, _ := syscall.Syscall6(procGetLayerMountPath.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(length)), uintptr(unsafe.Pointer(buffer)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetLayerMountPath.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(length)), uintptr(unsafe.Pointer(buffer))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -386,7 +383,7 @@ func _grantVmAccess(vmid *uint16, filepath *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procGrantVmAccess.Addr(), 2, uintptr(unsafe.Pointer(vmid)), uintptr(unsafe.Pointer(filepath)), 0) + r0, _, _ := syscall.SyscallN(procGrantVmAccess.Addr(), uintptr(unsafe.Pointer(vmid)), uintptr(unsafe.Pointer(filepath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -419,7 +416,7 @@ func _importLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_L if len(descriptors) > 0 { _p2 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procImportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procImportLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -443,7 +440,7 @@ func _layerExists(info *driverInfo, id *uint16, exists *uint32) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procLayerExists.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(exists))) + r0, _, _ := syscall.SyscallN(procLayerExists.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(exists))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -467,7 +464,7 @@ func _nameToGuid(name *uint16, guid *_guid) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procNameToGuid.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(guid)), 0) + r0, _, _ := syscall.SyscallN(procNameToGuid.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(guid))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -495,7 +492,7 @@ func _prepareLayer(info *driverInfo, id *uint16, descriptors []WC_LAYER_DESCRIPT if len(descriptors) > 0 { _p1 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procPrepareLayer.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0, 0) + r0, _, _ := syscall.SyscallN(procPrepareLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -519,7 +516,7 @@ func _processBaseImage(path *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procProcessBaseImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, _ := syscall.SyscallN(procProcessBaseImage.Addr(), uintptr(unsafe.Pointer(path))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -543,7 +540,7 @@ func _processUtilityImage(path *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procProcessUtilityImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, _ := syscall.SyscallN(procProcessUtilityImage.Addr(), uintptr(unsafe.Pointer(path))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -567,7 +564,7 @@ func _unprepareLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procUnprepareLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procUnprepareLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go b/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go index 93d633d490..70c43fc1cc 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go @@ -4,7 +4,6 @@ package winapi import ( "errors" - "reflect" "syscall" "unsafe" @@ -14,11 +13,7 @@ import ( // Uint16BufferToSlice wraps a uint16 pointer-and-length into a slice // for easier interop with Go APIs func Uint16BufferToSlice(buffer *uint16, bufferLength int) (result []uint16) { - hdr := (*reflect.SliceHeader)(unsafe.Pointer(&result)) - hdr.Data = uintptr(unsafe.Pointer(buffer)) - hdr.Cap = bufferLength - hdr.Len = bufferLength - + result = unsafe.Slice(buffer, bufferLength) return } diff --git a/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go index ffd3cd7ff3..33720fe8b5 100644 --- a/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -109,7 +106,7 @@ var ( ) func LogonUser(username *uint16, domain *uint16, password *uint16, logonType uint32, logonProvider uint32, token *windows.Token) (err error) { - r1, _, e1 := syscall.Syscall6(procLogonUserW.Addr(), 6, uintptr(unsafe.Pointer(username)), uintptr(unsafe.Pointer(domain)), uintptr(unsafe.Pointer(password)), uintptr(logonType), uintptr(logonProvider), uintptr(unsafe.Pointer(token))) + r1, _, e1 := syscall.SyscallN(procLogonUserW.Addr(), uintptr(unsafe.Pointer(username)), uintptr(unsafe.Pointer(domain)), uintptr(unsafe.Pointer(password)), uintptr(logonType), uintptr(logonProvider), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -121,7 +118,7 @@ func BfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procBfSetupFilter.Addr(), 6, uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) + r0, _, _ := syscall.SyscallN(procBfSetupFilter.Addr(), uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -132,7 +129,7 @@ func BfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16, } func CMGetDevNodeProperty(dnDevInst uint32, propertyKey *DevPropKey, propertyType *uint32, propertyBuffer *uint16, propertyBufferSize *uint32, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_PropertyW.Addr(), 6, uintptr(dnDevInst), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(unsafe.Pointer(propertyBufferSize)), uintptr(uFlags)) + r0, _, _ := syscall.SyscallN(procCM_Get_DevNode_PropertyW.Addr(), uintptr(dnDevInst), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(unsafe.Pointer(propertyBufferSize)), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -143,7 +140,7 @@ func CMGetDevNodeProperty(dnDevInst uint32, propertyKey *DevPropKey, propertyTyp } func CMGetDeviceIDList(pszFilter *byte, buffer *byte, bufferLen uint32, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall6(procCM_Get_Device_ID_ListA.Addr(), 4, uintptr(unsafe.Pointer(pszFilter)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(uFlags), 0, 0) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_ID_ListA.Addr(), uintptr(unsafe.Pointer(pszFilter)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -154,7 +151,7 @@ func CMGetDeviceIDList(pszFilter *byte, buffer *byte, bufferLen uint32, uFlags u } func CMGetDeviceIDListSize(pulLen *uint32, pszFilter *byte, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall(procCM_Get_Device_ID_List_SizeA.Addr(), 3, uintptr(unsafe.Pointer(pulLen)), uintptr(unsafe.Pointer(pszFilter)), uintptr(uFlags)) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_ID_List_SizeA.Addr(), uintptr(unsafe.Pointer(pulLen)), uintptr(unsafe.Pointer(pszFilter)), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -174,7 +171,7 @@ func CMLocateDevNode(pdnDevInst *uint32, pDeviceID string, uFlags uint32) (hr er } func _CMLocateDevNode(pdnDevInst *uint32, pDeviceID *uint16, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall(procCM_Locate_DevNodeW.Addr(), 3, uintptr(unsafe.Pointer(pdnDevInst)), uintptr(unsafe.Pointer(pDeviceID)), uintptr(uFlags)) + r0, _, _ := syscall.SyscallN(procCM_Locate_DevNodeW.Addr(), uintptr(unsafe.Pointer(pdnDevInst)), uintptr(unsafe.Pointer(pDeviceID)), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -189,7 +186,7 @@ func CimCloseImage(cimFSHandle FsHandle) (err error) { if err != nil { return } - syscall.Syscall(procCimCloseImage.Addr(), 1, uintptr(cimFSHandle), 0, 0) + syscall.SyscallN(procCimCloseImage.Addr(), uintptr(cimFSHandle)) return } @@ -198,7 +195,7 @@ func CimCloseStream(cimStreamHandle StreamHandle) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimCloseStream.Addr(), 1, uintptr(cimStreamHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCloseStream.Addr(), uintptr(cimStreamHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -213,7 +210,7 @@ func CimCommitImage(cimFSHandle FsHandle) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimCommitImage.Addr(), 1, uintptr(cimFSHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCommitImage.Addr(), uintptr(cimFSHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -237,7 +234,7 @@ func _CimCreateAlternateStream(cimFSHandle FsHandle, path *uint16, size uint64, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimCreateAlternateStream.Addr(), 4, uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(size), uintptr(unsafe.Pointer(cimStreamHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCreateAlternateStream.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(size), uintptr(unsafe.Pointer(cimStreamHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -261,7 +258,7 @@ func _CimCreateFile(cimFSHandle FsHandle, path *uint16, file *CimFsFileMetadata, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimCreateFile.Addr(), 4, uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(cimStreamHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCreateFile.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(cimStreamHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -290,7 +287,7 @@ func _CimCreateHardLink(cimFSHandle FsHandle, newPath *uint16, oldPath *uint16) if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimCreateHardLink.Addr(), 3, uintptr(cimFSHandle), uintptr(unsafe.Pointer(newPath)), uintptr(unsafe.Pointer(oldPath))) + r0, _, _ := syscall.SyscallN(procCimCreateHardLink.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(newPath)), uintptr(unsafe.Pointer(oldPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -314,7 +311,7 @@ func _CimCreateImage(imagePath *uint16, oldFSName *uint16, newFSName *uint16, ci if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimCreateImage.Addr(), 4, uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(oldFSName)), uintptr(unsafe.Pointer(newFSName)), uintptr(unsafe.Pointer(cimFSHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCreateImage.Addr(), uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(oldFSName)), uintptr(unsafe.Pointer(newFSName)), uintptr(unsafe.Pointer(cimFSHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -338,7 +335,7 @@ func _CimDeletePath(cimFSHandle FsHandle, path *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimDeletePath.Addr(), 2, uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), 0) + r0, _, _ := syscall.SyscallN(procCimDeletePath.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(path))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -353,7 +350,7 @@ func CimDismountImage(volumeID *g) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimDismountImage.Addr(), 1, uintptr(unsafe.Pointer(volumeID)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimDismountImage.Addr(), uintptr(unsafe.Pointer(volumeID))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -382,7 +379,7 @@ func _CimMountImage(imagePath *uint16, fsName *uint16, flags uint32, volumeID *g if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimMountImage.Addr(), 4, uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(fsName)), uintptr(flags), uintptr(unsafe.Pointer(volumeID)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimMountImage.Addr(), uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(fsName)), uintptr(flags), uintptr(unsafe.Pointer(volumeID))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -397,7 +394,7 @@ func CimWriteStream(cimStreamHandle StreamHandle, buffer uintptr, bufferSize uin if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimWriteStream.Addr(), 3, uintptr(cimStreamHandle), uintptr(buffer), uintptr(bufferSize)) + r0, _, _ := syscall.SyscallN(procCimWriteStream.Addr(), uintptr(cimStreamHandle), uintptr(buffer), uintptr(bufferSize)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -408,7 +405,7 @@ func CimWriteStream(cimStreamHandle StreamHandle, buffer uintptr, bufferSize uin } func SetJobCompartmentId(handle windows.Handle, compartmentId uint32) (win32Err error) { - r0, _, _ := syscall.Syscall(procSetJobCompartmentId.Addr(), 2, uintptr(handle), uintptr(compartmentId), 0) + r0, _, _ := syscall.SyscallN(procSetJobCompartmentId.Addr(), uintptr(handle), uintptr(compartmentId)) if r0 != 0 { win32Err = syscall.Errno(r0) } @@ -416,12 +413,12 @@ func SetJobCompartmentId(handle windows.Handle, compartmentId uint32) (win32Err } func ClosePseudoConsole(hpc windows.Handle) { - syscall.Syscall(procClosePseudoConsole.Addr(), 1, uintptr(hpc), 0, 0) + syscall.SyscallN(procClosePseudoConsole.Addr(), uintptr(hpc)) return } func CopyFileW(existingFileName *uint16, newFileName *uint16, failIfExists int32) (err error) { - r1, _, e1 := syscall.Syscall(procCopyFileW.Addr(), 3, uintptr(unsafe.Pointer(existingFileName)), uintptr(unsafe.Pointer(newFileName)), uintptr(failIfExists)) + r1, _, e1 := syscall.SyscallN(procCopyFileW.Addr(), uintptr(unsafe.Pointer(existingFileName)), uintptr(unsafe.Pointer(newFileName)), uintptr(failIfExists)) if r1 == 0 { err = errnoErr(e1) } @@ -429,7 +426,7 @@ func CopyFileW(existingFileName *uint16, newFileName *uint16, failIfExists int32 } func createPseudoConsole(size uint32, hInput windows.Handle, hOutput windows.Handle, dwFlags uint32, hpcon *windows.Handle) (hr error) { - r0, _, _ := syscall.Syscall6(procCreatePseudoConsole.Addr(), 5, uintptr(size), uintptr(hInput), uintptr(hOutput), uintptr(dwFlags), uintptr(unsafe.Pointer(hpcon)), 0) + r0, _, _ := syscall.SyscallN(procCreatePseudoConsole.Addr(), uintptr(size), uintptr(hInput), uintptr(hOutput), uintptr(dwFlags), uintptr(unsafe.Pointer(hpcon))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -440,7 +437,7 @@ func createPseudoConsole(size uint32, hInput windows.Handle, hOutput windows.Han } func CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes, stackSize uint32, startAddr uintptr, parameter uintptr, creationFlags uint32, threadID *uint32) (handle windows.Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateRemoteThread.Addr(), 7, uintptr(process), uintptr(unsafe.Pointer(sa)), uintptr(stackSize), uintptr(startAddr), uintptr(parameter), uintptr(creationFlags), uintptr(unsafe.Pointer(threadID)), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateRemoteThread.Addr(), uintptr(process), uintptr(unsafe.Pointer(sa)), uintptr(stackSize), uintptr(startAddr), uintptr(parameter), uintptr(creationFlags), uintptr(unsafe.Pointer(threadID))) handle = windows.Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -449,13 +446,13 @@ func CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes, } func GetActiveProcessorCount(groupNumber uint16) (amount uint32) { - r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + r0, _, _ := syscall.SyscallN(procGetActiveProcessorCount.Addr(), uintptr(groupNumber)) amount = uint32(r0) return } func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) { - r1, _, e1 := syscall.Syscall(procIsProcessInJob.Addr(), 3, uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result))) + r1, _, e1 := syscall.SyscallN(procIsProcessInJob.Addr(), uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result))) if r1 == 0 { err = errnoErr(e1) } @@ -463,18 +460,18 @@ func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result } func LocalAlloc(flags uint32, size int) (ptr uintptr) { - r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(size), 0) + r0, _, _ := syscall.SyscallN(procLocalAlloc.Addr(), uintptr(flags), uintptr(size)) ptr = uintptr(r0) return } func LocalFree(ptr uintptr) { - syscall.Syscall(procLocalFree.Addr(), 1, uintptr(ptr), 0, 0) + syscall.SyscallN(procLocalFree.Addr(), uintptr(ptr)) return } func OpenJobObject(desiredAccess uint32, inheritHandle int32, lpName *uint16) (handle windows.Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenJobObjectW.Addr(), 3, uintptr(desiredAccess), uintptr(inheritHandle), uintptr(unsafe.Pointer(lpName))) + r0, _, e1 := syscall.SyscallN(procOpenJobObjectW.Addr(), uintptr(desiredAccess), uintptr(inheritHandle), uintptr(unsafe.Pointer(lpName))) handle = windows.Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -483,7 +480,7 @@ func OpenJobObject(desiredAccess uint32, inheritHandle int32, lpName *uint16) (h } func QueryInformationJobObject(jobHandle windows.Handle, infoClass uint32, jobObjectInfo unsafe.Pointer, jobObjectInformationLength uint32, lpReturnLength *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(jobHandle), uintptr(infoClass), uintptr(jobObjectInfo), uintptr(jobObjectInformationLength), uintptr(unsafe.Pointer(lpReturnLength)), 0) + r1, _, e1 := syscall.SyscallN(procQueryInformationJobObject.Addr(), uintptr(jobHandle), uintptr(infoClass), uintptr(jobObjectInfo), uintptr(jobObjectInformationLength), uintptr(unsafe.Pointer(lpReturnLength))) if r1 == 0 { err = errnoErr(e1) } @@ -491,7 +488,7 @@ func QueryInformationJobObject(jobHandle windows.Handle, infoClass uint32, jobOb } func QueryIoRateControlInformationJobObject(jobHandle windows.Handle, volumeName *uint16, ioRateControlInfo **JOBOBJECT_IO_RATE_CONTROL_INFORMATION, infoBlockCount *uint32) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall6(procQueryIoRateControlInformationJobObject.Addr(), 4, uintptr(jobHandle), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(ioRateControlInfo)), uintptr(unsafe.Pointer(infoBlockCount)), 0, 0) + r0, _, e1 := syscall.SyscallN(procQueryIoRateControlInformationJobObject.Addr(), uintptr(jobHandle), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(ioRateControlInfo)), uintptr(unsafe.Pointer(infoBlockCount))) ret = uint32(r0) if ret == 0 { err = errnoErr(e1) @@ -500,7 +497,7 @@ func QueryIoRateControlInformationJobObject(jobHandle windows.Handle, volumeName } func resizePseudoConsole(hPc windows.Handle, size uint32) (hr error) { - r0, _, _ := syscall.Syscall(procResizePseudoConsole.Addr(), 2, uintptr(hPc), uintptr(size), 0) + r0, _, _ := syscall.SyscallN(procResizePseudoConsole.Addr(), uintptr(hPc), uintptr(size)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -511,7 +508,7 @@ func resizePseudoConsole(hPc windows.Handle, size uint32) (hr error) { } func SearchPath(lpPath *uint16, lpFileName *uint16, lpExtension *uint16, nBufferLength uint32, lpBuffer *uint16, lpFilePath *uint16) (size uint32, err error) { - r0, _, e1 := syscall.Syscall6(procSearchPathW.Addr(), 6, uintptr(unsafe.Pointer(lpPath)), uintptr(unsafe.Pointer(lpFileName)), uintptr(unsafe.Pointer(lpExtension)), uintptr(nBufferLength), uintptr(unsafe.Pointer(lpBuffer)), uintptr(unsafe.Pointer(lpFilePath))) + r0, _, e1 := syscall.SyscallN(procSearchPathW.Addr(), uintptr(unsafe.Pointer(lpPath)), uintptr(unsafe.Pointer(lpFileName)), uintptr(unsafe.Pointer(lpExtension)), uintptr(nBufferLength), uintptr(unsafe.Pointer(lpBuffer)), uintptr(unsafe.Pointer(lpFilePath))) size = uint32(r0) if size == 0 { err = errnoErr(e1) @@ -520,7 +517,7 @@ func SearchPath(lpPath *uint16, lpFileName *uint16, lpExtension *uint16, nBuffer } func SetIoRateControlInformationJobObject(jobHandle windows.Handle, ioRateControlInfo *JOBOBJECT_IO_RATE_CONTROL_INFORMATION) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall(procSetIoRateControlInformationJobObject.Addr(), 2, uintptr(jobHandle), uintptr(unsafe.Pointer(ioRateControlInfo)), 0) + r0, _, e1 := syscall.SyscallN(procSetIoRateControlInformationJobObject.Addr(), uintptr(jobHandle), uintptr(unsafe.Pointer(ioRateControlInfo))) ret = uint32(r0) if ret == 0 { err = errnoErr(e1) @@ -529,7 +526,7 @@ func SetIoRateControlInformationJobObject(jobHandle windows.Handle, ioRateContro } func netLocalGroupAddMembers(serverName *uint16, groupName *uint16, level uint32, buf *byte, totalEntries uint32) (status error) { - r0, _, _ := syscall.Syscall6(procNetLocalGroupAddMembers.Addr(), 5, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(totalEntries), 0) + r0, _, _ := syscall.SyscallN(procNetLocalGroupAddMembers.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(totalEntries)) if r0 != 0 { status = syscall.Errno(r0) } @@ -537,7 +534,7 @@ func netLocalGroupAddMembers(serverName *uint16, groupName *uint16, level uint32 } func netLocalGroupGetInfo(serverName *uint16, groupName *uint16, level uint32, bufptr **byte) (status error) { - r0, _, _ := syscall.Syscall6(procNetLocalGroupGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(bufptr)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetLocalGroupGetInfo.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(bufptr))) if r0 != 0 { status = syscall.Errno(r0) } @@ -545,7 +542,7 @@ func netLocalGroupGetInfo(serverName *uint16, groupName *uint16, level uint32, b } func netUserAdd(serverName *uint16, level uint32, buf *byte, parm_err *uint32) (status error) { - r0, _, _ := syscall.Syscall6(procNetUserAdd.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(parm_err)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetUserAdd.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(parm_err))) if r0 != 0 { status = syscall.Errno(r0) } @@ -553,7 +550,7 @@ func netUserAdd(serverName *uint16, level uint32, buf *byte, parm_err *uint32) ( } func netUserDel(serverName *uint16, username *uint16) (status error) { - r0, _, _ := syscall.Syscall(procNetUserDel.Addr(), 2, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(username)), 0) + r0, _, _ := syscall.SyscallN(procNetUserDel.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(username))) if r0 != 0 { status = syscall.Errno(r0) } @@ -561,25 +558,25 @@ func netUserDel(serverName *uint16, username *uint16) (status error) { } func NtCreateFile(handle *uintptr, accessMask uint32, oa *ObjectAttributes, iosb *IOStatusBlock, allocationSize *uint64, fileAttributes uint32, shareAccess uint32, createDisposition uint32, createOptions uint32, eaBuffer *byte, eaLength uint32) (status uint32) { - r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(fileAttributes), uintptr(shareAccess), uintptr(createDisposition), uintptr(createOptions), uintptr(unsafe.Pointer(eaBuffer)), uintptr(eaLength), 0) + r0, _, _ := syscall.SyscallN(procNtCreateFile.Addr(), uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(fileAttributes), uintptr(shareAccess), uintptr(createDisposition), uintptr(createOptions), uintptr(unsafe.Pointer(eaBuffer)), uintptr(eaLength)) status = uint32(r0) return } func NtCreateJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) { - r0, _, _ := syscall.Syscall(procNtCreateJobObject.Addr(), 3, uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) + r0, _, _ := syscall.SyscallN(procNtCreateJobObject.Addr(), uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) status = uint32(r0) return } func NtOpenDirectoryObject(handle *uintptr, accessMask uint32, oa *ObjectAttributes) (status uint32) { - r0, _, _ := syscall.Syscall(procNtOpenDirectoryObject.Addr(), 3, uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa))) + r0, _, _ := syscall.SyscallN(procNtOpenDirectoryObject.Addr(), uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa))) status = uint32(r0) return } func NtOpenJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) { - r0, _, _ := syscall.Syscall(procNtOpenJobObject.Addr(), 3, uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) + r0, _, _ := syscall.SyscallN(procNtOpenJobObject.Addr(), uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) status = uint32(r0) return } @@ -593,31 +590,31 @@ func NtQueryDirectoryObject(handle uintptr, buffer *byte, length uint32, singleE if restartScan { _p1 = 1 } - r0, _, _ := syscall.Syscall9(procNtQueryDirectoryObject.Addr(), 7, uintptr(handle), uintptr(unsafe.Pointer(buffer)), uintptr(length), uintptr(_p0), uintptr(_p1), uintptr(unsafe.Pointer(context)), uintptr(unsafe.Pointer(returnLength)), 0, 0) + r0, _, _ := syscall.SyscallN(procNtQueryDirectoryObject.Addr(), uintptr(handle), uintptr(unsafe.Pointer(buffer)), uintptr(length), uintptr(_p0), uintptr(_p1), uintptr(unsafe.Pointer(context)), uintptr(unsafe.Pointer(returnLength))) status = uint32(r0) return } func NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo unsafe.Pointer, processInfoLength uint32, returnLength *uint32) (status uint32) { - r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(processHandle), uintptr(processInfoClass), uintptr(processInfo), uintptr(processInfoLength), uintptr(unsafe.Pointer(returnLength)), 0) + r0, _, _ := syscall.SyscallN(procNtQueryInformationProcess.Addr(), uintptr(processHandle), uintptr(processInfoClass), uintptr(processInfo), uintptr(processInfoLength), uintptr(unsafe.Pointer(returnLength))) status = uint32(r0) return } func NtQuerySystemInformation(systemInfoClass int, systemInformation unsafe.Pointer, systemInfoLength uint32, returnLength *uint32) (status uint32) { - r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(systemInfoClass), uintptr(systemInformation), uintptr(systemInfoLength), uintptr(unsafe.Pointer(returnLength)), 0, 0) + r0, _, _ := syscall.SyscallN(procNtQuerySystemInformation.Addr(), uintptr(systemInfoClass), uintptr(systemInformation), uintptr(systemInfoLength), uintptr(unsafe.Pointer(returnLength))) status = uint32(r0) return } func NtSetInformationFile(handle uintptr, iosb *IOStatusBlock, information uintptr, length uint32, class uint32) (status uint32) { - r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(information), uintptr(length), uintptr(class), 0) + r0, _, _ := syscall.SyscallN(procNtSetInformationFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(information), uintptr(length), uintptr(class)) status = uint32(r0) return } func RtlNtStatusToDosError(status uint32) (winerr error) { - r0, _, _ := syscall.Syscall(procRtlNtStatusToDosError.Addr(), 1, uintptr(status), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosError.Addr(), uintptr(status)) if r0 != 0 { winerr = syscall.Errno(r0) } @@ -625,7 +622,7 @@ func RtlNtStatusToDosError(status uint32) (winerr error) { } func ORCloseHive(handle ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procORCloseHive.Addr(), 1, uintptr(handle), 0, 0) + r0, _, _ := syscall.SyscallN(procORCloseHive.Addr(), uintptr(handle)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -633,7 +630,7 @@ func ORCloseHive(handle ORHKey) (win32err error) { } func ORCloseKey(handle ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procORCloseKey.Addr(), 1, uintptr(handle), 0, 0) + r0, _, _ := syscall.SyscallN(procORCloseKey.Addr(), uintptr(handle)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -641,7 +638,7 @@ func ORCloseKey(handle ORHKey) (win32err error) { } func ORCreateHive(key *ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procORCreateHive.Addr(), 1, uintptr(unsafe.Pointer(key)), 0, 0) + r0, _, _ := syscall.SyscallN(procORCreateHive.Addr(), uintptr(unsafe.Pointer(key))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -658,7 +655,7 @@ func ORCreateKey(handle ORHKey, subKey string, class uintptr, options uint32, se } func _ORCreateKey(handle ORHKey, subKey *uint16, class uintptr, options uint32, securityDescriptor uintptr, result *ORHKey, disposition *uint32) (win32err error) { - r0, _, _ := syscall.Syscall9(procORCreateKey.Addr(), 7, uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(class), uintptr(options), uintptr(securityDescriptor), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition)), 0, 0) + r0, _, _ := syscall.SyscallN(procORCreateKey.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(class), uintptr(options), uintptr(securityDescriptor), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -675,7 +672,7 @@ func ORDeleteKey(handle ORHKey, subKey string) (win32err error) { } func _ORDeleteKey(handle ORHKey, subKey *uint16) (win32err error) { - r0, _, _ := syscall.Syscall(procORDeleteKey.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(subKey)), 0) + r0, _, _ := syscall.SyscallN(procORDeleteKey.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -697,7 +694,7 @@ func ORGetValue(handle ORHKey, subKey string, value string, valueType *uint32, d } func _ORGetValue(handle ORHKey, subKey *uint16, value *uint16, valueType *uint32, data *byte, dataLen *uint32) (win32err error) { - r0, _, _ := syscall.Syscall6(procORGetValue.Addr(), 6, uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(value)), uintptr(unsafe.Pointer(valueType)), uintptr(unsafe.Pointer(data)), uintptr(unsafe.Pointer(dataLen))) + r0, _, _ := syscall.SyscallN(procORGetValue.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(value)), uintptr(unsafe.Pointer(valueType)), uintptr(unsafe.Pointer(data)), uintptr(unsafe.Pointer(dataLen))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -709,7 +706,7 @@ func ORMergeHives(hiveHandles []ORHKey, result *ORHKey) (win32err error) { if len(hiveHandles) > 0 { _p0 = &hiveHandles[0] } - r0, _, _ := syscall.Syscall(procORMergeHives.Addr(), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(hiveHandles)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procORMergeHives.Addr(), uintptr(unsafe.Pointer(_p0)), uintptr(len(hiveHandles)), uintptr(unsafe.Pointer(result))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -726,7 +723,7 @@ func OROpenHive(hivePath string, result *ORHKey) (win32err error) { } func _OROpenHive(hivePath *uint16, result *ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procOROpenHive.Addr(), 2, uintptr(unsafe.Pointer(hivePath)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procOROpenHive.Addr(), uintptr(unsafe.Pointer(hivePath)), uintptr(unsafe.Pointer(result))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -743,7 +740,7 @@ func OROpenKey(handle ORHKey, subKey string, result *ORHKey) (win32err error) { } func _OROpenKey(handle ORHKey, subKey *uint16, result *ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procOROpenKey.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procOROpenKey.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(result))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -760,7 +757,7 @@ func ORSaveHive(handle ORHKey, hivePath string, osMajorVersion uint32, osMinorVe } func _ORSaveHive(handle ORHKey, hivePath *uint16, osMajorVersion uint32, osMinorVersion uint32) (win32err error) { - r0, _, _ := syscall.Syscall6(procORSaveHive.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(hivePath)), uintptr(osMajorVersion), uintptr(osMinorVersion), 0, 0) + r0, _, _ := syscall.SyscallN(procORSaveHive.Addr(), uintptr(handle), uintptr(unsafe.Pointer(hivePath)), uintptr(osMajorVersion), uintptr(osMinorVersion)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -777,7 +774,7 @@ func ORSetValue(handle ORHKey, valueName string, valueType uint32, data *byte, d } func _ORSetValue(handle ORHKey, valueName *uint16, valueType uint32, data *byte, dataLen uint32) (win32err error) { - r0, _, _ := syscall.Syscall6(procORSetValue.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(valueName)), uintptr(valueType), uintptr(unsafe.Pointer(data)), uintptr(dataLen), 0) + r0, _, _ := syscall.SyscallN(procORSetValue.Addr(), uintptr(handle), uintptr(unsafe.Pointer(valueName)), uintptr(valueType), uintptr(unsafe.Pointer(data)), uintptr(dataLen)) if r0 != 0 { win32err = syscall.Errno(r0) } diff --git a/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go index 9b619b6e62..e43d59a406 100644 --- a/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -46,7 +43,7 @@ var ( ) func SetCurrentThreadCompartmentId(compartmentId uint32) (hr error) { - r0, _, _ := syscall.Syscall(procSetCurrentThreadCompartmentId.Addr(), 1, uintptr(compartmentId), 0, 0) + r0, _, _ := syscall.SyscallN(procSetCurrentThreadCompartmentId.Addr(), uintptr(compartmentId)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/vendor/github.com/containerd/containerd/contrib/seccomp/kernelversion/kernel_linux.go b/vendor/github.com/containerd/containerd/contrib/seccomp/kernelversion/kernel_linux.go new file mode 100644 index 0000000000..ab288fbb8a --- /dev/null +++ b/vendor/github.com/containerd/containerd/contrib/seccomp/kernelversion/kernel_linux.go @@ -0,0 +1,92 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + File copied and customized based on + https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux.go +*/ + +package kernelversion + +import ( + "bytes" + "fmt" + "sync" + + "golang.org/x/sys/unix" +) + +// KernelVersion holds information about the kernel. +type KernelVersion struct { + Kernel uint64 // Version of the Kernel (i.e., the "4" in "4.1.2-generic") + Major uint64 // Major revision of the Kernel (i.e., the "1" in "4.1.2-generic") +} + +// String implements fmt.Stringer for KernelVersion +func (k *KernelVersion) String() string { + if k.Kernel > 0 || k.Major > 0 { + return fmt.Sprintf("%d.%d", k.Kernel, k.Major) + } + return "" +} + +var ( + currentKernelVersion *KernelVersion + kernelVersionError error + once sync.Once +) + +// getKernelVersion gets the current kernel version. +func getKernelVersion() (*KernelVersion, error) { + once.Do(func() { + var uts unix.Utsname + if err := unix.Uname(&uts); err != nil { + return + } + // Remove the \x00 from the release for Atoi to parse correctly + currentKernelVersion, kernelVersionError = parseRelease(string(uts.Release[:bytes.IndexByte(uts.Release[:], 0)])) + }) + return currentKernelVersion, kernelVersionError +} + +// parseRelease parses a string and creates a KernelVersion based on it. +func parseRelease(release string) (*KernelVersion, error) { + var version = KernelVersion{} + + // We're only make sure we get the "kernel" and "major revision". Sometimes we have + // 3.12.25-gentoo, but sometimes we just have 3.12-1-amd64. + _, err := fmt.Sscanf(release, "%d.%d", &version.Kernel, &version.Major) + if err != nil { + return nil, fmt.Errorf("failed to parse kernel version %q: %w", release, err) + } + return &version, nil +} + +// GreaterEqualThan checks if the host's kernel version is greater than, or +// equal to the given kernel version v. Only "kernel version" and "major revision" +// can be specified (e.g., "3.12") and will be taken into account, which means +// that 3.12.25-gentoo and 3.12-1-amd64 are considered equal (kernel: 3, major: 12). +func GreaterEqualThan(minVersion KernelVersion) (bool, error) { + kv, err := getKernelVersion() + if err != nil { + return false, err + } + if kv.Kernel > minVersion.Kernel { + return true, nil + } + if kv.Kernel == minVersion.Kernel && kv.Major >= minVersion.Major { + return true, nil + } + return false, nil +} diff --git a/vendor/github.com/containerd/containerd/images/diffid.go b/vendor/github.com/containerd/containerd/images/diffid.go index 56193cc289..85577eedee 100644 --- a/vendor/github.com/containerd/containerd/images/diffid.go +++ b/vendor/github.com/containerd/containerd/images/diffid.go @@ -36,7 +36,7 @@ func GetDiffID(ctx context.Context, cs content.Store, desc ocispec.Descriptor) ( MediaTypeDockerSchema2Layer, ocispec.MediaTypeImageLayer, MediaTypeDockerSchema2LayerForeign, - ocispec.MediaTypeImageLayerNonDistributable: + ocispec.MediaTypeImageLayerNonDistributable: //nolint:staticcheck // deprecated return desc.Digest, nil } info, err := cs.Info(ctx, desc.Digest) diff --git a/vendor/github.com/containerd/containerd/images/mediatypes.go b/vendor/github.com/containerd/containerd/images/mediatypes.go index 067963babb..d3b28d42dc 100644 --- a/vendor/github.com/containerd/containerd/images/mediatypes.go +++ b/vendor/github.com/containerd/containerd/images/mediatypes.go @@ -81,7 +81,7 @@ func DiffCompression(ctx context.Context, mediaType string) (string, error) { return "", nil } return "gzip", nil - case ocispec.MediaTypeImageLayer, ocispec.MediaTypeImageLayerNonDistributable: + case ocispec.MediaTypeImageLayer, ocispec.MediaTypeImageLayerNonDistributable: //nolint:staticcheck // Non-distributable layers are deprecated if len(ext) > 0 { switch ext[len(ext)-1] { case "gzip": diff --git a/vendor/github.com/containerd/containerd/metadata/snapshot.go b/vendor/github.com/containerd/containerd/metadata/snapshot.go index e7774d36ec..fa6ebfeeb8 100644 --- a/vendor/github.com/containerd/containerd/metadata/snapshot.go +++ b/vendor/github.com/containerd/containerd/metadata/snapshot.go @@ -323,6 +323,7 @@ func (s *snapshotter) createSnapshot(ctx context.Context, key, parent string, re bopts = []snapshots.Opt{ snapshots.WithLabels(snapshots.FilterInheritedLabels(base.Labels)), } + rerr error ) if err := update(ctx, s.db, func(tx *bolt.Tx) error { @@ -334,12 +335,20 @@ func (s *snapshotter) createSnapshot(ctx context.Context, key, parent string, re // Check if target exists, if so, return already exists if target != "" { if tbkt := bkt.Bucket([]byte(target)); tbkt != nil { - return fmt.Errorf("target snapshot %q: %w", target, errdefs.ErrAlreadyExists) + rerr = fmt.Errorf("target snapshot %q: %w", target, errdefs.ErrAlreadyExists) + if err := addSnapshotLease(ctx, tx, s.name, target); err != nil { + return err + } + return nil } } if bbkt := bkt.Bucket([]byte(key)); bbkt != nil { - return fmt.Errorf("snapshot %q: %w", key, errdefs.ErrAlreadyExists) + rerr = fmt.Errorf("snapshot %q: %w", key, errdefs.ErrAlreadyExists) + if err := addSnapshotLease(ctx, tx, s.name, key); err != nil { + return err + } + return nil } if parent != "" { @@ -360,11 +369,14 @@ func (s *snapshotter) createSnapshot(ctx context.Context, key, parent string, re }); err != nil { return nil, err } + // Already exists and lease successfully added in transaction + if rerr != nil { + return nil, rerr + } var ( m []mount.Mount created string - rerr error ) if readonly { m, err = s.Snapshotter.View(ctx, bkey, bparent, bopts...) @@ -527,7 +539,10 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap return err } - var bname string + var ( + bname string + rerr error + ) if err := update(ctx, s.db, func(tx *bolt.Tx) error { bkt := getSnapshotterBucket(tx, ns, s.name) if bkt == nil { @@ -535,16 +550,17 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap s.name, errdefs.ErrNotFound) } + if err := addSnapshotLease(ctx, tx, s.name, name); err != nil { + return err + } bbkt, err := bkt.CreateBucket([]byte(name)) if err != nil { if err == bolt.ErrBucketExists { - err = fmt.Errorf("snapshot %q: %w", name, errdefs.ErrAlreadyExists) + rerr = fmt.Errorf("snapshot %q: %w", name, errdefs.ErrAlreadyExists) + return nil } return err } - if err := addSnapshotLease(ctx, tx, s.name, name); err != nil { - return err - } obkt := bkt.Bucket([]byte(key)) if obkt == nil { @@ -634,7 +650,7 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap return err } - if s.db.dbopts.publisher != nil { + if rerr == nil && s.db.dbopts.publisher != nil { if err := s.db.dbopts.publisher.Publish(ctx, "/snapshot/commit", &eventstypes.SnapshotCommit{ Key: key, Name: name, @@ -644,7 +660,7 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap } } - return nil + return rerr } diff --git a/vendor/github.com/containerd/containerd/mount/losetup_linux.go b/vendor/github.com/containerd/containerd/mount/losetup_linux.go index e3647e9543..811288cff3 100644 --- a/vendor/github.com/containerd/containerd/mount/losetup_linux.go +++ b/vendor/github.com/containerd/containerd/mount/losetup_linux.go @@ -23,6 +23,7 @@ import ( "strings" "time" + kernel "github.com/containerd/containerd/contrib/seccomp/kernelversion" "github.com/containerd/containerd/pkg/randutil" "golang.org/x/sys/unix" ) @@ -84,6 +85,32 @@ func setupLoopDev(backingFile, loopDev string, param LoopParams) (_ *os.File, re } }() + fiveDotEight := kernel.KernelVersion{Kernel: 5, Major: 8} + if ok, err := kernel.GreaterEqualThan(fiveDotEight); err == nil && ok { + config := unix.LoopConfig{ + Fd: uint32(back.Fd()), + } + + copy(config.Info.File_name[:], backingFile) + if param.Readonly { + config.Info.Flags |= unix.LO_FLAGS_READ_ONLY + } + + if param.Autoclear { + config.Info.Flags |= unix.LO_FLAGS_AUTOCLEAR + } + + if param.Direct { + config.Info.Flags |= unix.LO_FLAGS_DIRECT_IO + } + + if err := unix.IoctlLoopConfigure(int(loop.Fd()), &config); err != nil { + return nil, fmt.Errorf("failed to configure loop device: %s: %w", loopDev, err) + } + + return loop, nil + } + // 2. Set FD if err := unix.IoctlSetInt(int(loop.Fd()), unix.LOOP_SET_FD, int(back.Fd())); err != nil { return nil, fmt.Errorf("could not set loop fd for device: %s: %w", loopDev, err) diff --git a/vendor/github.com/containerd/containerd/mount/mount_linux.go b/vendor/github.com/containerd/containerd/mount/mount_linux.go index 8ddbf9c996..34aa639bb6 100644 --- a/vendor/github.com/containerd/containerd/mount/mount_linux.go +++ b/vendor/github.com/containerd/containerd/mount/mount_linux.go @@ -26,6 +26,7 @@ import ( "strings" "time" + "github.com/containerd/containerd/pkg/userns" "golang.org/x/sys/unix" ) @@ -114,12 +115,56 @@ func (m *Mount) mount(target string) (err error) { const broflags = unix.MS_BIND | unix.MS_RDONLY if oflags&broflags == broflags { + // Preserve CL_UNPRIVILEGED "locked" flags of the + // bind mount target when we remount to make the bind readonly. + // This is necessary to ensure that + // bind-mounting "with options" will not fail with user namespaces, due to + // kernel restrictions that require user namespace mounts to preserve + // CL_UNPRIVILEGED locked flags. + var unprivFlags int + if userns.RunningInUserNS() { + unprivFlags, err = getUnprivilegedMountFlags(target) + if err != nil { + return err + } + } // Remount the bind to apply read only. - return unix.Mount("", target, "", uintptr(oflags|unix.MS_REMOUNT), "") + return unix.Mount("", target, "", uintptr(oflags|unprivFlags|unix.MS_REMOUNT), "") } return nil } +// Get the set of mount flags that are set on the mount that contains the given +// path and are locked by CL_UNPRIVILEGED. +// +// From https://github.com/moby/moby/blob/v23.0.1/daemon/oci_linux.go#L430-L460 +func getUnprivilegedMountFlags(path string) (int, error) { + var statfs unix.Statfs_t + if err := unix.Statfs(path, &statfs); err != nil { + return 0, err + } + + // The set of keys come from https://github.com/torvalds/linux/blob/v4.13/fs/namespace.c#L1034-L1048. + unprivilegedFlags := []int{ + unix.MS_RDONLY, + unix.MS_NODEV, + unix.MS_NOEXEC, + unix.MS_NOSUID, + unix.MS_NOATIME, + unix.MS_RELATIME, + unix.MS_NODIRATIME, + } + + var flags int + for flag := range unprivilegedFlags { + if int(statfs.Flags)&flag == flag { + flags |= flag + } + } + + return flags, nil +} + // Unmount the provided mount path with the flags func Unmount(target string, flags int) error { if err := unmount(target, flags); err != nil && err != unix.EINVAL { diff --git a/vendor/github.com/containerd/containerd/version/version.go b/vendor/github.com/containerd/containerd/version/version.go index 8a9eb5d4ae..782771e4de 100644 --- a/vendor/github.com/containerd/containerd/version/version.go +++ b/vendor/github.com/containerd/containerd/version/version.go @@ -23,7 +23,7 @@ var ( Package = "github.com/containerd/containerd" // Version holds the complete version number. Filled in at linking time. - Version = "1.7.16+unknown" + Version = "1.7.17+unknown" // Revision is filled with the VCS (e.g. git) revision being used to build // the program at linking time. diff --git a/vendor/github.com/containerd/ttrpc/client.go b/vendor/github.com/containerd/ttrpc/client.go index 482a68e3d5..685a00a9be 100644 --- a/vendor/github.com/containerd/ttrpc/client.go +++ b/vendor/github.com/containerd/ttrpc/client.go @@ -386,25 +386,44 @@ func (c *Client) receiveLoop() error { // createStream creates a new stream and registers it with the client // Introduce stream types for multiple or single response func (c *Client) createStream(flags uint8, b []byte) (*stream, error) { - c.streamLock.Lock() + // sendLock must be held across both allocation of the stream ID and sending it across the wire. + // This ensures that new stream IDs sent on the wire are always increasing, which is a + // requirement of the TTRPC protocol. + // This use of sendLock could be split into another mutex that covers stream creation + first send, + // and just use sendLock to guard writing to the wire, but for now it seems simpler to have fewer mutexes. + c.sendLock.Lock() + defer c.sendLock.Unlock() // Check if closed since lock acquired to prevent adding // anything after cleanup completes select { case <-c.ctx.Done(): - c.streamLock.Unlock() return nil, ErrClosed default: } - // Stream ID should be allocated at same time - s := newStream(c.nextStreamID, c) - c.streams[s.id] = s - c.nextStreamID = c.nextStreamID + 2 + var s *stream + if err := func() error { + // In the future this could be replaced with a sync.Map instead of streamLock+map. + c.streamLock.Lock() + defer c.streamLock.Unlock() - c.sendLock.Lock() - defer c.sendLock.Unlock() - c.streamLock.Unlock() + // Check if closed since lock acquired to prevent adding + // anything after cleanup completes + select { + case <-c.ctx.Done(): + return ErrClosed + default: + } + + s = newStream(c.nextStreamID, c) + c.streams[s.id] = s + c.nextStreamID = c.nextStreamID + 2 + + return nil + }(); err != nil { + return nil, err + } if err := c.channel.send(uint32(s.id), messageTypeRequest, flags, b); err != nil { return s, filterCloseErr(err) diff --git a/vendor/github.com/containers/common/pkg/auth/auth.go b/vendor/github.com/containers/common/pkg/auth/auth.go index 3b6a05f0ab..a3d333a99a 100644 --- a/vendor/github.com/containers/common/pkg/auth/auth.go +++ b/vendor/github.com/containers/common/pkg/auth/auth.go @@ -16,6 +16,7 @@ import ( "github.com/containers/image/v5/pkg/docker/config" "github.com/containers/image/v5/pkg/sysregistriesv2" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/sirupsen/logrus" ) @@ -69,7 +70,7 @@ func CheckAuthFile(pathOption string) error { if pathOption == "" { return nil } - if _, err := os.Stat(pathOption); err != nil { + if err := fileutils.Exists(pathOption); err != nil { return fmt.Errorf("credential file is not accessible: %w", err) } return nil diff --git a/vendor/github.com/containers/common/pkg/capabilities/capabilities.go b/vendor/github.com/containers/common/pkg/capabilities/capabilities.go index e0b0ac95e8..43fd2c1b58 100644 --- a/vendor/github.com/containers/common/pkg/capabilities/capabilities.go +++ b/vendor/github.com/containers/common/pkg/capabilities/capabilities.go @@ -8,12 +8,12 @@ package capabilities import ( "errors" "fmt" + "slices" "sort" "strings" "sync" "github.com/syndtr/gocapability/capability" - "golang.org/x/exp/slices" ) var ( diff --git a/vendor/github.com/containers/image/v5/docker/distribution_error.go b/vendor/github.com/containers/image/v5/docker/distribution_error.go index 11b42c6e00..0a0064576a 100644 --- a/vendor/github.com/containers/image/v5/docker/distribution_error.go +++ b/vendor/github.com/containers/image/v5/docker/distribution_error.go @@ -21,10 +21,10 @@ import ( "fmt" "io" "net/http" + "slices" "github.com/docker/distribution/registry/api/errcode" dockerChallenge "github.com/docker/distribution/registry/client/auth/challenge" - "golang.org/x/exp/slices" ) // errNoErrorsInBody is returned when an HTTP response body parses to an empty diff --git a/vendor/github.com/containers/image/v5/docker/docker_client.go b/vendor/github.com/containers/image/v5/docker/docker_client.go index 737c778a05..94cbcb1d99 100644 --- a/vendor/github.com/containers/image/v5/docker/docker_client.go +++ b/vendor/github.com/containers/image/v5/docker/docker_client.go @@ -18,6 +18,7 @@ import ( "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/iolimits" + "github.com/containers/image/v5/internal/multierr" "github.com/containers/image/v5/internal/set" "github.com/containers/image/v5/internal/useragent" "github.com/containers/image/v5/manifest" @@ -25,6 +26,7 @@ import ( "github.com/containers/image/v5/pkg/sysregistriesv2" "github.com/containers/image/v5/pkg/tlsclientconfig" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/docker/distribution/registry/api/errcode" v2 "github.com/docker/distribution/registry/api/v2" @@ -186,7 +188,7 @@ func dockerCertDir(sys *types.SystemContext, hostPort string) (string, error) { } fullCertDirPath = filepath.Join(hostCertDir, hostPort) - _, err := os.Stat(fullCertDirPath) + err := fileutils.Exists(fullCertDirPath) if err == nil { break } @@ -497,8 +499,8 @@ func (c *dockerClient) resolveRequestURL(path string) (*url.URL, error) { // Checks if the auth headers in the response contain an indication of a failed // authorizdation because of an "insufficient_scope" error. If that's the case, // returns the required scope to be used for fetching a new token. -func needsRetryWithUpdatedScope(err error, res *http.Response) (bool, *authScope) { - if err == nil && res.StatusCode == http.StatusUnauthorized { +func needsRetryWithUpdatedScope(res *http.Response) (bool, *authScope) { + if res.StatusCode == http.StatusUnauthorized { challenges := parseAuthHeader(res.Header) for _, challenge := range challenges { if challenge.Scheme == "bearer" { @@ -557,6 +559,9 @@ func (c *dockerClient) makeRequestToResolvedURL(ctx context.Context, method stri attempts := 0 for { res, err := c.makeRequestToResolvedURLOnce(ctx, method, requestURL, headers, stream, streamLen, auth, extraScope) + if err != nil { + return nil, err + } attempts++ // By default we use pre-defined scopes per operation. In @@ -572,27 +577,29 @@ func (c *dockerClient) makeRequestToResolvedURL(ctx context.Context, method stri // We also cannot retry with a body (stream != nil) as stream // was already read if attempts == 1 && stream == nil && auth != noAuth { - if retry, newScope := needsRetryWithUpdatedScope(err, res); retry { + if retry, newScope := needsRetryWithUpdatedScope(res); retry { logrus.Debug("Detected insufficient_scope error, will retry request with updated scope") + res.Body.Close() // Note: This retry ignores extraScope. That’s, strictly speaking, incorrect, but we don’t currently // expect the insufficient_scope errors to happen for those callers. If that changes, we can add support // for more than one extra scope. res, err = c.makeRequestToResolvedURLOnce(ctx, method, requestURL, headers, stream, streamLen, auth, newScope) + if err != nil { + return nil, err + } extraScope = newScope } } - if res == nil || res.StatusCode != http.StatusTooManyRequests || // Only retry on StatusTooManyRequests, success or other failure is returned to caller immediately + + if res.StatusCode != http.StatusTooManyRequests || // Only retry on StatusTooManyRequests, success or other failure is returned to caller immediately stream != nil || // We can't retry with a body (which is not restartable in the general case) attempts == backoffNumIterations { - return res, err + return res, nil } // close response body before retry or context done res.Body.Close() - delay = parseRetryAfter(res, delay) - if delay > backoffMaxDelay { - delay = backoffMaxDelay - } + delay = min(parseRetryAfter(res, delay), backoffMaxDelay) logrus.Debugf("Too many requests to %s: sleeping for %f seconds before next attempt", requestURL.Redacted(), delay.Seconds()) select { case <-ctx.Done(): @@ -671,10 +678,14 @@ func parseRegistryWarningHeader(header string) string { // warning-value = warn-code SP warn-agent SP warn-text [ SP warn-date ] // distribution-spec requires warn-code=299, warn-agent="-", warn-date missing - if !strings.HasPrefix(header, expectedPrefix) || !strings.HasSuffix(header, expectedSuffix) { + header, ok := strings.CutPrefix(header, expectedPrefix) + if !ok { + return "" + } + header, ok = strings.CutSuffix(header, expectedSuffix) + if !ok { return "" } - header = header[len(expectedPrefix) : len(header)-len(expectedSuffix)] // ”Recipients that process the value of a quoted-string MUST handle a quoted-pair // as if it were replaced by the octet following the backslash.”, so let’s do that… @@ -1009,11 +1020,7 @@ func (c *dockerClient) getExternalBlob(ctx context.Context, urls []string) (io.R if remoteErrors == nil { return nil, 0, nil // fallback to non-external blob } - err := fmt.Errorf("failed fetching external blob from all urls: %w", remoteErrors[0]) - for _, e := range remoteErrors[1:] { - err = fmt.Errorf("%s, %w", err, e) - } - return nil, 0, err + return nil, 0, fmt.Errorf("failed fetching external blob from all urls: %w", multierr.Format("", ", ", "", remoteErrors)) } func getBlobSize(resp *http.Response) int64 { @@ -1090,6 +1097,11 @@ func isManifestUnknownError(err error) bool { if errors.As(err, &e) && e.ErrorCode() == errcode.ErrorCodeUnknown && e.Message == "Not Found" { return true } + // Harbor v2.10.2 + if errors.As(err, &e) && e.ErrorCode() == errcode.ErrorCodeUnknown && strings.Contains(strings.ToLower(e.Message), "not found") { + return true + } + // opencontainers/distribution-spec does not require the errcode.Error payloads to be used, // but specifies that the HTTP status must be 404. var unexpected *unexpectedHTTPResponseError diff --git a/vendor/github.com/containers/image/v5/docker/docker_image_dest.go b/vendor/github.com/containers/image/v5/docker/docker_image_dest.go index a29150eb7e..7f59ea3fe3 100644 --- a/vendor/github.com/containers/image/v5/docker/docker_image_dest.go +++ b/vendor/github.com/containers/image/v5/docker/docker_image_dest.go @@ -8,10 +8,12 @@ import ( "errors" "fmt" "io" + "maps" "net/http" "net/url" "os" "path/filepath" + "slices" "strings" "github.com/containers/image/v5/docker/reference" @@ -34,8 +36,6 @@ import ( "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" "github.com/sirupsen/logrus" - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" ) type dockerImageDestination struct { @@ -347,35 +347,24 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, } // Then try reusing blobs from other locations. - candidates := options.Cache.CandidateLocations2(d.ref.Transport(), bicTransportScope(d.ref), info.Digest, options.CanSubstitute) + candidates := options.Cache.CandidateLocations2(d.ref.Transport(), bicTransportScope(d.ref), info.Digest, blobinfocache.CandidateLocations2Options{ + CanSubstitute: options.CanSubstitute, + PossibleManifestFormats: options.PossibleManifestFormats, + RequiredCompression: options.RequiredCompression, + }) for _, candidate := range candidates { - var err error - compressionOperation, compressionAlgorithm, err := blobinfocache.OperationAndAlgorithmForCompressor(candidate.CompressorName) - if err != nil { - logrus.Debugf("OperationAndAlgorithmForCompressor Failed: %v", err) - continue - } var candidateRepo reference.Named if !candidate.UnknownLocation { + var err error candidateRepo, err = parseBICLocationReference(candidate.Location) if err != nil { logrus.Debugf("Error parsing BlobInfoCache location reference: %s", err) continue } } - if !impl.CandidateMatchesTryReusingBlobOptions(options, compressionAlgorithm) { - if !candidate.UnknownLocation { - logrus.Debugf("Ignoring candidate blob %s in %s, compression %s does not match required %s or MIME types %#v", candidate.Digest.String(), candidateRepo.Name(), - optionalCompressionName(compressionAlgorithm), optionalCompressionName(options.RequiredCompression), options.PossibleManifestFormats) - } else { - logrus.Debugf("Ignoring candidate blob %s with no known location, compression %s does not match required %s or MIME types %#v", candidate.Digest.String(), - optionalCompressionName(compressionAlgorithm), optionalCompressionName(options.RequiredCompression), options.PossibleManifestFormats) - } - continue - } if !candidate.UnknownLocation { - if candidate.CompressorName != blobinfocache.Uncompressed { - logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s in destination repo %s", candidate.Digest.String(), candidate.CompressorName, candidateRepo.Name()) + if candidate.CompressionAlgorithm != nil { + logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s in destination repo %s", candidate.Digest.String(), candidate.CompressionAlgorithm.Name(), candidateRepo.Name()) } else { logrus.Debugf("Trying to reuse blob with cached digest %s in destination repo %s", candidate.Digest.String(), candidateRepo.Name()) } @@ -390,8 +379,8 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, continue } } else { - if candidate.CompressorName != blobinfocache.Uncompressed { - logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s with no location match, checking current repo", candidate.Digest.String(), candidate.CompressorName) + if candidate.CompressionAlgorithm != nil { + logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s with no location match, checking current repo", candidate.Digest.String(), candidate.CompressionAlgorithm.Name()) } else { logrus.Debugf("Trying to reuse blob with cached digest %s in destination repo with no location match, checking current repo", candidate.Digest.String()) } @@ -442,8 +431,8 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, return true, private.ReusedBlob{ Digest: candidate.Digest, Size: size, - CompressionOperation: compressionOperation, - CompressionAlgorithm: compressionAlgorithm}, nil + CompressionOperation: candidate.CompressionOperation, + CompressionAlgorithm: candidate.CompressionAlgorithm}, nil } return false, private.ReusedBlob{}, nil diff --git a/vendor/github.com/containers/image/v5/docker/docker_image_src.go b/vendor/github.com/containers/image/v5/docker/docker_image_src.go index 274cd6dd2c..a2b6dbed78 100644 --- a/vendor/github.com/containers/image/v5/docker/docker_image_src.go +++ b/vendor/github.com/containers/image/v5/docker/docker_image_src.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "math" "mime" "mime/multipart" "net/http" @@ -260,9 +261,15 @@ func splitHTTP200ResponseToPartial(streams chan io.ReadCloser, errs chan error, } currentOffset += toSkip } + var reader io.Reader + if c.Length == math.MaxUint64 { + reader = body + } else { + reader = io.LimitReader(body, int64(c.Length)) + } s := signalCloseReader{ closed: make(chan struct{}), - stream: io.NopCloser(io.LimitReader(body, int64(c.Length))), + stream: io.NopCloser(reader), consumeStream: true, } streams <- s @@ -343,12 +350,24 @@ func parseMediaType(contentType string) (string, map[string]string, error) { // The specified chunks must be not overlapping and sorted by their offset. // The readers must be fully consumed, in the order they are returned, before blocking // to read the next chunk. +// If the Length for the last chunk is set to math.MaxUint64, then it +// fully fetches the remaining data from the offset to the end of the blob. func (s *dockerImageSource) GetBlobAt(ctx context.Context, info types.BlobInfo, chunks []private.ImageSourceChunk) (chan io.ReadCloser, chan error, error) { headers := make(map[string][]string) rangeVals := make([]string, 0, len(chunks)) + lastFound := false for _, c := range chunks { - rangeVals = append(rangeVals, fmt.Sprintf("%d-%d", c.Offset, c.Offset+c.Length-1)) + if lastFound { + return nil, nil, fmt.Errorf("internal error: another chunk requested after an util-EOF chunk") + } + // If the Length is set to -1, then request anything after the specified offset. + if c.Length == math.MaxUint64 { + lastFound = true + rangeVals = append(rangeVals, fmt.Sprintf("%d-", c.Offset)) + } else { + rangeVals = append(rangeVals, fmt.Sprintf("%d-%d", c.Offset, c.Offset+c.Length-1)) + } } headers["Range"] = []string{fmt.Sprintf("bytes=%s", strings.Join(rangeVals, ","))} diff --git a/vendor/github.com/containers/image/v5/docker/docker_transport.go b/vendor/github.com/containers/image/v5/docker/docker_transport.go index 1c89302f46..c10463a430 100644 --- a/vendor/github.com/containers/image/v5/docker/docker_transport.go +++ b/vendor/github.com/containers/image/v5/docker/docker_transport.go @@ -54,16 +54,12 @@ type dockerReference struct { // ParseReference converts a string, which should not start with the ImageTransport.Name prefix, into an Docker ImageReference. func ParseReference(refString string) (types.ImageReference, error) { - if !strings.HasPrefix(refString, "//") { + refString, ok := strings.CutPrefix(refString, "//") + if !ok { return nil, fmt.Errorf("docker: image reference %s does not start with //", refString) } - // Check if ref has UnknownDigestSuffix suffixed to it - unknownDigest := false - if strings.HasSuffix(refString, UnknownDigestSuffix) { - unknownDigest = true - refString = strings.TrimSuffix(refString, UnknownDigestSuffix) - } - ref, err := reference.ParseNormalizedNamed(strings.TrimPrefix(refString, "//")) + refString, unknownDigest := strings.CutSuffix(refString, UnknownDigestSuffix) + ref, err := reference.ParseNormalizedNamed(refString) if err != nil { return nil, err } diff --git a/vendor/github.com/containers/image/v5/docker/registries_d.go b/vendor/github.com/containers/image/v5/docker/registries_d.go index 9d651d9bd2..3619c3baef 100644 --- a/vendor/github.com/containers/image/v5/docker/registries_d.go +++ b/vendor/github.com/containers/image/v5/docker/registries_d.go @@ -12,6 +12,7 @@ import ( "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/rootless" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/opencontainers/go-digest" "github.com/sirupsen/logrus" @@ -93,7 +94,7 @@ func registriesDirPathWithHomeDir(sys *types.SystemContext, homeDir string) stri return sys.RegistriesDirPath } userRegistriesDirPath := filepath.Join(homeDir, userRegistriesDir) - if _, err := os.Stat(userRegistriesDirPath); err == nil { + if err := fileutils.Exists(userRegistriesDirPath); err == nil { return userRegistriesDirPath } if sys != nil && sys.RootForImplicitAbsolutePaths != "" { @@ -139,7 +140,7 @@ func loadAndMergeConfig(dirPath string) (*registryConfiguration, error) { if config.DefaultDocker != nil { if mergedConfig.DefaultDocker != nil { - return nil, fmt.Errorf(`Error parsing signature storage configuration: "default-docker" defined both in "%s" and "%s"`, + return nil, fmt.Errorf(`Error parsing signature storage configuration: "default-docker" defined both in %q and %q`, dockerDefaultMergedFrom, configPath) } mergedConfig.DefaultDocker = config.DefaultDocker @@ -148,7 +149,7 @@ func loadAndMergeConfig(dirPath string) (*registryConfiguration, error) { for nsName, nsConfig := range config.Docker { // includes config.Docker == nil if _, ok := mergedConfig.Docker[nsName]; ok { - return nil, fmt.Errorf(`Error parsing signature storage configuration: "docker" namespace "%s" defined both in "%s" and "%s"`, + return nil, fmt.Errorf(`Error parsing signature storage configuration: "docker" namespace %q defined both in %q and %q`, nsName, nsMergedFrom[nsName], configPath) } mergedConfig.Docker[nsName] = nsConfig @@ -287,10 +288,10 @@ func (ns registryNamespace) signatureTopLevel(write bool) string { // base is not nil from the caller // NOTE: Keep this in sync with docs/signature-protocols.md! func lookasideStorageURL(base lookasideStorageBase, manifestDigest digest.Digest, index int) (*url.URL, error) { - if err := manifestDigest.Validate(); err != nil { // digest.Digest.Hex() panics on failure, and could possibly result in a path with ../, so validate explicitly. + if err := manifestDigest.Validate(); err != nil { // digest.Digest.Encoded() panics on failure, and could possibly result in a path with ../, so validate explicitly. return nil, err } sigURL := *base - sigURL.Path = fmt.Sprintf("%s@%s=%s/signature-%d", sigURL.Path, manifestDigest.Algorithm(), manifestDigest.Hex(), index+1) + sigURL.Path = fmt.Sprintf("%s@%s=%s/signature-%d", sigURL.Path, manifestDigest.Algorithm(), manifestDigest.Encoded(), index+1) return &sigURL, nil } diff --git a/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go b/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go index 2767c39507..893aa959d4 100644 --- a/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go +++ b/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go @@ -1,8 +1,6 @@ package blobinfocache import ( - "github.com/containers/image/v5/pkg/compression" - compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" digest "github.com/opencontainers/go-digest" ) @@ -32,7 +30,7 @@ func (bic *v1OnlyBlobInfoCache) Close() { func (bic *v1OnlyBlobInfoCache) RecordDigestCompressorName(anyDigest digest.Digest, compressorName string) { } -func (bic *v1OnlyBlobInfoCache) CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, canSubstitute bool) []BICReplacementCandidate2 { +func (bic *v1OnlyBlobInfoCache) CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, options CandidateLocations2Options) []BICReplacementCandidate2 { return nil } @@ -48,23 +46,3 @@ func CandidateLocationsFromV2(v2candidates []BICReplacementCandidate2) []types.B } return candidates } - -// OperationAndAlgorithmForCompressor returns CompressionOperation and CompressionAlgorithm -// values suitable for inclusion in a types.BlobInfo structure, based on the name of the -// compression algorithm, or Uncompressed, or UnknownCompression. This is typically used by -// TryReusingBlob() implementations to set values in the BlobInfo structure that they return -// upon success. -func OperationAndAlgorithmForCompressor(compressorName string) (types.LayerCompression, *compressiontypes.Algorithm, error) { - switch compressorName { - case Uncompressed: - return types.Decompress, nil, nil - case UnknownCompression: - return types.PreserveOriginal, nil, nil - default: - algo, err := compression.AlgorithmByName(compressorName) - if err == nil { - return types.Compress, &algo, nil - } - return types.PreserveOriginal, nil, err - } -} diff --git a/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go b/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go index 4d3858ab8d..c9e4aaa485 100644 --- a/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go +++ b/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go @@ -1,6 +1,7 @@ package blobinfocache import ( + compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" digest "github.com/opencontainers/go-digest" ) @@ -35,19 +36,24 @@ type BlobInfoCache2 interface { // CandidateLocations2 returns a prioritized, limited, number of blobs and their locations (if known) // that could possibly be reused within the specified (transport scope) (if they still // exist, which is not guaranteed). - // - // If !canSubstitute, the returned candidates will match the submitted digest exactly; if - // canSubstitute, data from previous RecordDigestUncompressedPair calls is used to also look + CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, options CandidateLocations2Options) []BICReplacementCandidate2 +} + +// CandidateLocations2Options are used in CandidateLocations2. +type CandidateLocations2Options struct { + // If !CanSubstitute, the returned candidates will match the submitted digest exactly; if + // CanSubstitute, data from previous RecordDigestUncompressedPair calls is used to also look // up variants of the blob which have the same uncompressed digest. - // - // The CompressorName fields in returned data must never be UnknownCompression. - CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, canSubstitute bool) []BICReplacementCandidate2 + CanSubstitute bool + PossibleManifestFormats []string // If set, a set of possible manifest formats; at least one should support the reused layer + RequiredCompression *compressiontypes.Algorithm // If set, only reuse layers with a matching algorithm } // BICReplacementCandidate2 is an item returned by BlobInfoCache2.CandidateLocations2. type BICReplacementCandidate2 struct { - Digest digest.Digest - CompressorName string // either the Name() of a known pkg/compression.Algorithm, or Uncompressed or UnknownCompression - UnknownLocation bool // is true when `Location` for this blob is not set - Location types.BICLocationReference // not set if UnknownLocation is set to `true` + Digest digest.Digest + CompressionOperation types.LayerCompression // Either types.Decompress for uncompressed, or types.Compress for compressed + CompressionAlgorithm *compressiontypes.Algorithm // An algorithm when the candidate is compressed, or nil when it is uncompressed + UnknownLocation bool // is true when `Location` for this blob is not set + Location types.BICLocationReference // not set if UnknownLocation is set to `true` } diff --git a/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go b/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go index c3234c377b..01219e3919 100644 --- a/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go +++ b/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go @@ -366,7 +366,7 @@ func v1IDFromBlobDigestAndComponents(blobDigest digest.Digest, others ...string) if err := blobDigest.Validate(); err != nil { return "", err } - parts := append([]string{blobDigest.Hex()}, others...) + parts := append([]string{blobDigest.Encoded()}, others...) v1IDHash := sha256.Sum256([]byte(strings.Join(parts, " "))) return hex.EncodeToString(v1IDHash[:]), nil } diff --git a/vendor/github.com/containers/image/v5/internal/image/manifest.go b/vendor/github.com/containers/image/v5/internal/image/manifest.go index 75e472aa74..ed57e08dd8 100644 --- a/vendor/github.com/containers/image/v5/internal/image/manifest.go +++ b/vendor/github.com/containers/image/v5/internal/image/manifest.go @@ -76,7 +76,7 @@ func manifestInstanceFromBlob(ctx context.Context, sys *types.SystemContext, src case imgspecv1.MediaTypeImageIndex: return manifestOCI1FromImageIndex(ctx, sys, src, manblob) default: // Note that this may not be reachable, manifest.NormalizedMIMEType has a default for unknown values. - return nil, fmt.Errorf("Unimplemented manifest MIME type %s", mt) + return nil, fmt.Errorf("Unimplemented manifest MIME type %q", mt) } } diff --git a/vendor/github.com/containers/image/v5/internal/image/oci.go b/vendor/github.com/containers/image/v5/internal/image/oci.go index df0e8e4171..aaef95ff3d 100644 --- a/vendor/github.com/containers/image/v5/internal/image/oci.go +++ b/vendor/github.com/containers/image/v5/internal/image/oci.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "slices" "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/iolimits" @@ -15,7 +16,6 @@ import ( ociencspec "github.com/containers/ocicrypt/spec" "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/slices" ) type manifestOCI1 struct { diff --git a/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go b/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go index 553569a030..9b42cfbec0 100644 --- a/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go +++ b/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go @@ -3,40 +3,13 @@ package impl import ( "github.com/containers/image/v5/internal/manifest" "github.com/containers/image/v5/internal/private" - compression "github.com/containers/image/v5/pkg/compression/types" - "golang.org/x/exp/slices" ) -// CandidateMatchesTryReusingBlobOptions validates if compression is required by the caller while selecting a blob, if it is required -// then function performs a match against the compression requested by the caller and compression of existing blob -// (which can be nil to represent uncompressed or unknown) -func CandidateMatchesTryReusingBlobOptions(options private.TryReusingBlobOptions, candidateCompression *compression.Algorithm) bool { - if options.RequiredCompression != nil { - if options.RequiredCompression.Name() == compression.ZstdChunkedAlgorithmName { - // HACK: Never match when the caller asks for zstd:chunked, because we don’t record the annotations required to use the chunked blobs. - // The caller must re-compress to build those annotations. - return false - } - if candidateCompression == nil || - (options.RequiredCompression.Name() != candidateCompression.Name() && options.RequiredCompression.Name() != candidateCompression.BaseVariantName()) { - return false - } - } - - // For candidateCompression == nil, we can’t tell the difference between “uncompressed” and “unknown”; - // and “uncompressed” is acceptable in all known formats (well, it seems to work in practice for schema1), - // so don’t impose any restrictions if candidateCompression == nil - if options.PossibleManifestFormats != nil && candidateCompression != nil { - if !slices.ContainsFunc(options.PossibleManifestFormats, func(mt string) bool { - return manifest.MIMETypeSupportsCompressionAlgorithm(mt, *candidateCompression) - }) { - return false - } - } - - return true -} - +// OriginalCandidateMatchesTryReusingBlobOptions returns true if the original blob passed to TryReusingBlobWithOptions +// is acceptable based on opts. func OriginalCandidateMatchesTryReusingBlobOptions(opts private.TryReusingBlobOptions) bool { - return CandidateMatchesTryReusingBlobOptions(opts, opts.OriginalCompression) + return manifest.CandidateCompressionMatchesReuseConditions(manifest.ReuseConditions{ + PossibleManifestFormats: opts.PossibleManifestFormats, + RequiredCompression: opts.RequiredCompression, + }, opts.OriginalCompression) } diff --git a/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go b/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go index 15aee6d42f..286ae524b1 100644 --- a/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go +++ b/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go @@ -39,6 +39,8 @@ func (stub NoGetBlobAtInitialize) SupportsGetBlobAt() bool { // The specified chunks must be not overlapping and sorted by their offset. // The readers must be fully consumed, in the order they are returned, before blocking // to read the next chunk. +// If the Length for the last chunk is set to math.MaxUint64, then it +// fully fetches the remaining data from the offset to the end of the blob. func (stub NoGetBlobAtInitialize) GetBlobAt(ctx context.Context, info types.BlobInfo, chunks []private.ImageSourceChunk) (chan io.ReadCloser, chan error, error) { return nil, nil, fmt.Errorf("internal error: GetBlobAt is not supported by the %q transport", stub.transportName) } diff --git a/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go b/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go index 7ce5bb0696..f847fa9cc8 100644 --- a/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go +++ b/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go @@ -3,13 +3,13 @@ package manifest import ( "encoding/json" "fmt" + "slices" platform "github.com/containers/image/v5/internal/pkg/platform" compression "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/slices" ) // Schema2PlatformSpec describes the platform which a particular manifest is @@ -164,7 +164,7 @@ func (list *Schema2ListPublic) ChooseInstance(ctx *types.SystemContext) (digest. } } } - return "", fmt.Errorf("no image found in manifest list for architecture %s, variant %q, OS %s", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) + return "", fmt.Errorf("no image found in manifest list for architecture %q, variant %q, OS %q", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) } // Serialize returns the list in a blob format. diff --git a/vendor/github.com/containers/image/v5/internal/manifest/list.go b/vendor/github.com/containers/image/v5/internal/manifest/list.go index 1d60da7529..1c614d1246 100644 --- a/vendor/github.com/containers/image/v5/internal/manifest/list.go +++ b/vendor/github.com/containers/image/v5/internal/manifest/list.go @@ -129,5 +129,5 @@ func ListFromBlob(manifest []byte, manifestMIMEType string) (List, error) { case DockerV2Schema1MediaType, DockerV2Schema1SignedMediaType, imgspecv1.MediaTypeImageManifest, DockerV2Schema2MediaType: return nil, fmt.Errorf("Treating single images as manifest lists is not implemented") } - return nil, fmt.Errorf("Unimplemented manifest list MIME type %s (normalized as %s)", manifestMIMEType, normalized) + return nil, fmt.Errorf("Unimplemented manifest list MIME type %q (normalized as %q)", manifestMIMEType, normalized) } diff --git a/vendor/github.com/containers/image/v5/internal/manifest/manifest.go b/vendor/github.com/containers/image/v5/internal/manifest/manifest.go index c77db7522a..ee0ddc772a 100644 --- a/vendor/github.com/containers/image/v5/internal/manifest/manifest.go +++ b/vendor/github.com/containers/image/v5/internal/manifest/manifest.go @@ -2,6 +2,7 @@ package manifest import ( "encoding/json" + "slices" compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/libtrust" @@ -192,3 +193,39 @@ func MIMETypeSupportsCompressionAlgorithm(mimeType string, algo compressiontypes return false } } + +// ReuseConditions are an input to CandidateCompressionMatchesReuseConditions; +// it is a struct to allow longer and better-documented field names. +type ReuseConditions struct { + PossibleManifestFormats []string // If set, a set of possible manifest formats; at least one should support the reused layer + RequiredCompression *compressiontypes.Algorithm // If set, only reuse layers with a matching algorithm +} + +// CandidateCompressionMatchesReuseConditions returns true if a layer with candidateCompression +// (which can be nil to represent uncompressed or unknown) matches reuseConditions. +func CandidateCompressionMatchesReuseConditions(c ReuseConditions, candidateCompression *compressiontypes.Algorithm) bool { + if c.RequiredCompression != nil { + if c.RequiredCompression.Name() == compressiontypes.ZstdChunkedAlgorithmName { + // HACK: Never match when the caller asks for zstd:chunked, because we don’t record the annotations required to use the chunked blobs. + // The caller must re-compress to build those annotations. + return false + } + if candidateCompression == nil || + (c.RequiredCompression.Name() != candidateCompression.Name() && c.RequiredCompression.Name() != candidateCompression.BaseVariantName()) { + return false + } + } + + // For candidateCompression == nil, we can’t tell the difference between “uncompressed” and “unknown”; + // and “uncompressed” is acceptable in all known formats (well, it seems to work in practice for schema1), + // so don’t impose any restrictions if candidateCompression == nil + if c.PossibleManifestFormats != nil && candidateCompression != nil { + if !slices.ContainsFunc(c.PossibleManifestFormats, func(mt string) bool { + return MIMETypeSupportsCompressionAlgorithm(mt, *candidateCompression) + }) { + return false + } + } + + return true +} diff --git a/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go b/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go index 829852a836..67b4cfeba6 100644 --- a/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go +++ b/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go @@ -3,8 +3,10 @@ package manifest import ( "encoding/json" "fmt" + "maps" "math" "runtime" + "slices" platform "github.com/containers/image/v5/internal/pkg/platform" compression "github.com/containers/image/v5/pkg/compression/types" @@ -12,8 +14,6 @@ import ( "github.com/opencontainers/go-digest" imgspec "github.com/opencontainers/image-spec/specs-go" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" ) const ( @@ -260,7 +260,7 @@ func (index *OCI1IndexPublic) chooseInstance(ctx *types.SystemContext, preferGzi if bestMatch != nil { return bestMatch.digest, nil } - return "", fmt.Errorf("no image found in image index for architecture %s, variant %q, OS %s", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) + return "", fmt.Errorf("no image found in image index for architecture %q, variant %q, OS %q", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) } func (index *OCI1Index) ChooseInstanceByCompression(ctx *types.SystemContext, preferGzip types.OptionalBool) (digest.Digest, error) { diff --git a/vendor/github.com/containers/image/v5/internal/multierr/multierr.go b/vendor/github.com/containers/image/v5/internal/multierr/multierr.go new file mode 100644 index 0000000000..1341925c1d --- /dev/null +++ b/vendor/github.com/containers/image/v5/internal/multierr/multierr.go @@ -0,0 +1,34 @@ +package multierr + +import ( + "fmt" + "strings" +) + +// Format creates an error value from the input array (which should not be empty) +// If the input contains a single error value, it is returned as is. +// If there are multiple, they are formatted as a multi-error (with Unwrap() []error) with the provided initial, separator, and ending strings. +// +// Typical usage: +// +// var errs []error +// // … +// errs = append(errs, …) +// // … +// if errs != nil { return multierr.Format("Failures doing $FOO", "\n* ", "", errs)} +func Format(first, middle, last string, errs []error) error { + switch len(errs) { + case 0: + return fmt.Errorf("internal error: multierr.Format called with 0 errors") + case 1: + return errs[0] + default: + // We have to do this — and this function only really exists — because fmt.Errorf(format, errs...) is invalid: + // []error is not a valid parameter to a function expecting []any + anyErrs := make([]any, 0, len(errs)) + for _, e := range errs { + anyErrs = append(anyErrs, e) + } + return fmt.Errorf(first+"%w"+strings.Repeat(middle+"%w", len(errs)-1)+last, anyErrs...) + } +} diff --git a/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go b/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go index 94002d6d47..afdce1d3d9 100644 --- a/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go +++ b/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go @@ -21,12 +21,12 @@ import ( "fmt" "os" "runtime" + "slices" "strings" "github.com/containers/image/v5/types" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" "github.com/sirupsen/logrus" - "golang.org/x/exp/slices" ) // For Linux, the kernel has already detected the ABI, ISA and Features. @@ -64,8 +64,8 @@ func getCPUInfo(pattern string) (info string, err error) { return "", fmt.Errorf("getCPUInfo for pattern: %s not found", pattern) } -func getCPUVariantWindows(arch string) string { - // Windows only supports v7 for ARM32 and v8 for ARM64 and so we can use +func getCPUVariantDarwinWindows(arch string) string { + // Darwin and Windows only support v7 for ARM32 and v8 for ARM64 and so we can use // runtime.GOARCH to determine the variants var variant string switch arch { @@ -133,8 +133,8 @@ func getCPUVariantArm() string { } func getCPUVariant(os string, arch string) string { - if os == "windows" { - return getCPUVariantWindows(arch) + if os == "darwin" || os == "windows" { + return getCPUVariantDarwinWindows(arch) } if arch == "arm" || arch == "arm64" { return getCPUVariantArm() diff --git a/vendor/github.com/containers/image/v5/internal/private/private.go b/vendor/github.com/containers/image/v5/internal/private/private.go index 562adbea8d..63fb9326de 100644 --- a/vendor/github.com/containers/image/v5/internal/private/private.go +++ b/vendor/github.com/containers/image/v5/internal/private/private.go @@ -143,7 +143,11 @@ type ReusedBlob struct { // ImageSourceChunk is a portion of a blob. // This API is experimental and can be changed without bumping the major version number. type ImageSourceChunk struct { + // Offset specifies the starting position of the chunk within the source blob. Offset uint64 + + // Length specifies the size of the chunk. If it is set to math.MaxUint64, + // then it refers to all the data from Offset to the end of the blob. Length uint64 } @@ -154,6 +158,8 @@ type BlobChunkAccessor interface { // The specified chunks must be not overlapping and sorted by their offset. // The readers must be fully consumed, in the order they are returned, before blocking // to read the next chunk. + // If the Length for the last chunk is set to math.MaxUint64, then it + // fully fetches the remaining data from the offset to the end of the blob. GetBlobAt(ctx context.Context, info types.BlobInfo, chunks []ImageSourceChunk) (chan io.ReadCloser, chan error, error) } diff --git a/vendor/github.com/containers/image/v5/internal/signature/sigstore.go b/vendor/github.com/containers/image/v5/internal/signature/sigstore.go index b8a9b366cc..8025cd2700 100644 --- a/vendor/github.com/containers/image/v5/internal/signature/sigstore.go +++ b/vendor/github.com/containers/image/v5/internal/signature/sigstore.go @@ -1,10 +1,9 @@ package signature import ( + "bytes" "encoding/json" - - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" + "maps" ) const ( @@ -45,7 +44,7 @@ type sigstoreJSONRepresentation struct { func SigstoreFromComponents(untrustedMimeType string, untrustedPayload []byte, untrustedAnnotations map[string]string) Sigstore { return Sigstore{ untrustedMIMEType: untrustedMimeType, - untrustedPayload: slices.Clone(untrustedPayload), + untrustedPayload: bytes.Clone(untrustedPayload), untrustedAnnotations: maps.Clone(untrustedAnnotations), } } @@ -79,7 +78,7 @@ func (s Sigstore) UntrustedMIMEType() string { return s.untrustedMIMEType } func (s Sigstore) UntrustedPayload() []byte { - return slices.Clone(s.untrustedPayload) + return bytes.Clone(s.untrustedPayload) } func (s Sigstore) UntrustedAnnotations() map[string]string { diff --git a/vendor/github.com/containers/image/v5/internal/signature/simple.go b/vendor/github.com/containers/image/v5/internal/signature/simple.go index c093704060..76f270b48e 100644 --- a/vendor/github.com/containers/image/v5/internal/signature/simple.go +++ b/vendor/github.com/containers/image/v5/internal/signature/simple.go @@ -1,6 +1,6 @@ package signature -import "golang.org/x/exp/slices" +import "bytes" // SimpleSigning is a “simple signing” signature. type SimpleSigning struct { @@ -10,7 +10,7 @@ type SimpleSigning struct { // SimpleSigningFromBlob converts a “simple signing” signature into a SimpleSigning object. func SimpleSigningFromBlob(blobChunk []byte) SimpleSigning { return SimpleSigning{ - untrustedSignature: slices.Clone(blobChunk), + untrustedSignature: bytes.Clone(blobChunk), } } @@ -21,9 +21,9 @@ func (s SimpleSigning) FormatID() FormatID { // blobChunk returns a representation of signature as a []byte, suitable for long-term storage. // Almost everyone should use signature.Blob() instead. func (s SimpleSigning) blobChunk() ([]byte, error) { - return slices.Clone(s.untrustedSignature), nil + return bytes.Clone(s.untrustedSignature), nil } func (s SimpleSigning) UntrustedSignature() []byte { - return slices.Clone(s.untrustedSignature) + return bytes.Clone(s.untrustedSignature) } diff --git a/vendor/github.com/containers/image/v5/manifest/common.go b/vendor/github.com/containers/image/v5/manifest/common.go index de4628115a..8d9d5795f2 100644 --- a/vendor/github.com/containers/image/v5/manifest/common.go +++ b/vendor/github.com/containers/image/v5/manifest/common.go @@ -67,15 +67,15 @@ func compressionVariantMIMEType(variantTable []compressionMIMETypeSet, mimeType return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("uncompressed variant is not supported for type %q", mimeType)} } if name != mtsUncompressed { - return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("unknown compressed with algorithm %s variant for type %s", name, mimeType)} + return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("unknown compressed with algorithm %s variant for type %q", name, mimeType)} } // We can't very well say “the idea of no compression is unknown” return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("uncompressed variant is not supported for type %q", mimeType)} } if algorithm != nil { - return "", fmt.Errorf("unsupported MIME type for compression: %s", mimeType) + return "", fmt.Errorf("unsupported MIME type for compression: %q", mimeType) } - return "", fmt.Errorf("unsupported MIME type for decompression: %s", mimeType) + return "", fmt.Errorf("unsupported MIME type for decompression: %q", mimeType) } // updatedMIMEType returns the result of applying edits in updated (MediaType, CompressionOperation) to diff --git a/vendor/github.com/containers/image/v5/manifest/docker_schema1.go b/vendor/github.com/containers/image/v5/manifest/docker_schema1.go index 762815570c..222aa896ee 100644 --- a/vendor/github.com/containers/image/v5/manifest/docker_schema1.go +++ b/vendor/github.com/containers/image/v5/manifest/docker_schema1.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "slices" "strings" "time" @@ -15,7 +16,6 @@ import ( "github.com/containers/storage/pkg/regexp" "github.com/docker/docker/api/types/versions" "github.com/opencontainers/go-digest" - "golang.org/x/exp/slices" ) // Schema1FSLayers is an entry of the "fsLayers" array in docker/distribution schema 1. @@ -221,7 +221,7 @@ func (m *Schema1) fixManifestLayers() error { m.History = slices.Delete(m.History, i, i+1) m.ExtractedV1Compatibility = slices.Delete(m.ExtractedV1Compatibility, i, i+1) } else if m.ExtractedV1Compatibility[i].Parent != m.ExtractedV1Compatibility[i+1].ID { - return fmt.Errorf("Invalid parent ID. Expected %v, got %v", m.ExtractedV1Compatibility[i+1].ID, m.ExtractedV1Compatibility[i].Parent) + return fmt.Errorf("Invalid parent ID. Expected %v, got %q", m.ExtractedV1Compatibility[i+1].ID, m.ExtractedV1Compatibility[i].Parent) } } return nil @@ -342,5 +342,5 @@ func (m *Schema1) ImageID(diffIDs []digest.Digest) (string, error) { if err != nil { return "", err } - return digest.FromBytes(image).Hex(), nil + return digest.FromBytes(image).Encoded(), nil } diff --git a/vendor/github.com/containers/image/v5/manifest/docker_schema2.go b/vendor/github.com/containers/image/v5/manifest/docker_schema2.go index 20b721f4ca..818166834d 100644 --- a/vendor/github.com/containers/image/v5/manifest/docker_schema2.go +++ b/vendor/github.com/containers/image/v5/manifest/docker_schema2.go @@ -54,9 +54,10 @@ type Schema2HealthConfig struct { Test []string `json:",omitempty"` // Zero means to inherit. Durations are expressed as integer nanoseconds. - StartPeriod time.Duration `json:",omitempty"` // StartPeriod is the time to wait after starting before running the first check. - Interval time.Duration `json:",omitempty"` // Interval is the time to wait between checks. - Timeout time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung. + StartPeriod time.Duration `json:",omitempty"` // StartPeriod is the time to wait after starting before running the first check. + StartInterval time.Duration `json:",omitempty"` // StartInterval is the time to wait between checks during the start period. + Interval time.Duration `json:",omitempty"` // Interval is the time to wait between checks. + Timeout time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung. // Retries is the number of consecutive failures needed to consider a container as unhealthy. // Zero means inherit. @@ -294,7 +295,7 @@ func (m *Schema2) ImageID([]digest.Digest) (string, error) { if err := m.ConfigDescriptor.Digest.Validate(); err != nil { return "", err } - return m.ConfigDescriptor.Digest.Hex(), nil + return m.ConfigDescriptor.Digest.Encoded(), nil } // CanChangeLayerCompression returns true if we can compress/decompress layers with mimeType in the current image diff --git a/vendor/github.com/containers/image/v5/manifest/manifest.go b/vendor/github.com/containers/image/v5/manifest/manifest.go index 828b8da0b7..d8f37eb45d 100644 --- a/vendor/github.com/containers/image/v5/manifest/manifest.go +++ b/vendor/github.com/containers/image/v5/manifest/manifest.go @@ -166,5 +166,5 @@ func FromBlob(manblob []byte, mt string) (Manifest, error) { return nil, fmt.Errorf("Treating manifest lists as individual manifests is not implemented") } // Note that this may not be reachable, NormalizedMIMEType has a default for unknown values. - return nil, fmt.Errorf("Unimplemented manifest MIME type %s (normalized as %s)", mt, nmt) + return nil, fmt.Errorf("Unimplemented manifest MIME type %q (normalized as %q)", mt, nmt) } diff --git a/vendor/github.com/containers/image/v5/manifest/oci.go b/vendor/github.com/containers/image/v5/manifest/oci.go index 548994ffaf..497cf476e3 100644 --- a/vendor/github.com/containers/image/v5/manifest/oci.go +++ b/vendor/github.com/containers/image/v5/manifest/oci.go @@ -3,6 +3,7 @@ package manifest import ( "encoding/json" "fmt" + "slices" "strings" "github.com/containers/image/v5/internal/manifest" @@ -12,7 +13,6 @@ import ( "github.com/opencontainers/go-digest" "github.com/opencontainers/image-spec/specs-go" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/slices" ) // BlobInfoFromOCI1Descriptor returns a types.BlobInfo based on the input OCI1 descriptor. @@ -167,7 +167,7 @@ func (m *OCI1) UpdateLayerInfos(layerInfos []types.BlobInfo) error { // an error if the mediatype does not support encryption func getEncryptedMediaType(mediatype string) (string, error) { if slices.Contains(strings.Split(mediatype, "+")[1:], "encrypted") { - return "", fmt.Errorf("unsupported mediaType: %v already encrypted", mediatype) + return "", fmt.Errorf("unsupported mediaType: %q already encrypted", mediatype) } unsuffixedMediatype := strings.Split(mediatype, "+")[0] switch unsuffixedMediatype { @@ -176,17 +176,18 @@ func getEncryptedMediaType(mediatype string) (string, error) { return mediatype + "+encrypted", nil } - return "", fmt.Errorf("unsupported mediaType to encrypt: %v", mediatype) + return "", fmt.Errorf("unsupported mediaType to encrypt: %q", mediatype) } -// getEncryptedMediaType will return the mediatype to its encrypted counterpart and return +// getDecryptedMediaType will return the mediatype to its encrypted counterpart and return // an error if the mediatype does not support decryption func getDecryptedMediaType(mediatype string) (string, error) { - if !strings.HasSuffix(mediatype, "+encrypted") { - return "", fmt.Errorf("unsupported mediaType to decrypt: %v", mediatype) + res, ok := strings.CutSuffix(mediatype, "+encrypted") + if !ok { + return "", fmt.Errorf("unsupported mediaType to decrypt: %q", mediatype) } - return strings.TrimSuffix(mediatype, "+encrypted"), nil + return res, nil } // Serialize returns the manifest in a blob format. @@ -259,7 +260,7 @@ func (m *OCI1) ImageID(diffIDs []digest.Digest) (string, error) { if err := m.Config.Digest.Validate(); err != nil { return "", err } - return m.Config.Digest.Hex(), nil + return m.Config.Digest.Encoded(), nil } // CanChangeLayerCompression returns true if we can compress/decompress layers with mimeType in the current image diff --git a/vendor/github.com/containers/image/v5/pkg/compression/compression.go b/vendor/github.com/containers/image/v5/pkg/compression/compression.go deleted file mode 100644 index b83a257e4f..0000000000 --- a/vendor/github.com/containers/image/v5/pkg/compression/compression.go +++ /dev/null @@ -1,165 +0,0 @@ -package compression - -import ( - "bytes" - "compress/bzip2" - "fmt" - "io" - - "github.com/containers/image/v5/pkg/compression/internal" - "github.com/containers/image/v5/pkg/compression/types" - "github.com/containers/storage/pkg/chunked/compressor" - "github.com/klauspost/pgzip" - "github.com/sirupsen/logrus" - "github.com/ulikunitz/xz" -) - -// Algorithm is a compression algorithm that can be used for CompressStream. -type Algorithm = types.Algorithm - -var ( - // Gzip compression. - Gzip = internal.NewAlgorithm(types.GzipAlgorithmName, "", - []byte{0x1F, 0x8B, 0x08}, GzipDecompressor, gzipCompressor) - // Bzip2 compression. - Bzip2 = internal.NewAlgorithm(types.Bzip2AlgorithmName, "", - []byte{0x42, 0x5A, 0x68}, Bzip2Decompressor, bzip2Compressor) - // Xz compression. - Xz = internal.NewAlgorithm(types.XzAlgorithmName, "", - []byte{0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00}, XzDecompressor, xzCompressor) - // Zstd compression. - Zstd = internal.NewAlgorithm(types.ZstdAlgorithmName, "", - []byte{0x28, 0xb5, 0x2f, 0xfd}, ZstdDecompressor, zstdCompressor) - // ZstdChunked is a Zstd compression with chunk metadata which allows random access to individual files. - ZstdChunked = internal.NewAlgorithm(types.ZstdChunkedAlgorithmName, types.ZstdAlgorithmName, - nil, ZstdDecompressor, compressor.ZstdCompressor) - - compressionAlgorithms = map[string]Algorithm{ - Gzip.Name(): Gzip, - Bzip2.Name(): Bzip2, - Xz.Name(): Xz, - Zstd.Name(): Zstd, - ZstdChunked.Name(): ZstdChunked, - } -) - -// AlgorithmByName returns the compressor by its name -func AlgorithmByName(name string) (Algorithm, error) { - algorithm, ok := compressionAlgorithms[name] - if ok { - return algorithm, nil - } - return Algorithm{}, fmt.Errorf("cannot find compressor for %q", name) -} - -// DecompressorFunc returns the decompressed stream, given a compressed stream. -// The caller must call Close() on the decompressed stream (even if the compressed input stream does not need closing!). -type DecompressorFunc = internal.DecompressorFunc - -// GzipDecompressor is a DecompressorFunc for the gzip compression algorithm. -func GzipDecompressor(r io.Reader) (io.ReadCloser, error) { - return pgzip.NewReader(r) -} - -// Bzip2Decompressor is a DecompressorFunc for the bzip2 compression algorithm. -func Bzip2Decompressor(r io.Reader) (io.ReadCloser, error) { - return io.NopCloser(bzip2.NewReader(r)), nil -} - -// XzDecompressor is a DecompressorFunc for the xz compression algorithm. -func XzDecompressor(r io.Reader) (io.ReadCloser, error) { - r, err := xz.NewReader(r) - if err != nil { - return nil, err - } - return io.NopCloser(r), nil -} - -// gzipCompressor is a CompressorFunc for the gzip compression algorithm. -func gzipCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - if level != nil { - return pgzip.NewWriterLevel(r, *level) - } - return pgzip.NewWriter(r), nil -} - -// bzip2Compressor is a CompressorFunc for the bzip2 compression algorithm. -func bzip2Compressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - return nil, fmt.Errorf("bzip2 compression not supported") -} - -// xzCompressor is a CompressorFunc for the xz compression algorithm. -func xzCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - return xz.NewWriter(r) -} - -// CompressStream returns the compressor by its name -func CompressStream(dest io.Writer, algo Algorithm, level *int) (io.WriteCloser, error) { - m := map[string]string{} - return internal.AlgorithmCompressor(algo)(dest, m, level) -} - -// CompressStreamWithMetadata returns the compressor by its name. If the compression -// generates any metadata, it is written to the provided metadata map. -func CompressStreamWithMetadata(dest io.Writer, metadata map[string]string, algo Algorithm, level *int) (io.WriteCloser, error) { - return internal.AlgorithmCompressor(algo)(dest, metadata, level) -} - -// DetectCompressionFormat returns an Algorithm and DecompressorFunc if the input is recognized as a compressed format, an invalid -// value and nil otherwise. -// Because it consumes the start of input, other consumers must use the returned io.Reader instead to also read from the beginning. -func DetectCompressionFormat(input io.Reader) (Algorithm, DecompressorFunc, io.Reader, error) { - buffer := [8]byte{} - - n, err := io.ReadAtLeast(input, buffer[:], len(buffer)) - if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF { - // This is a “real” error. We could just ignore it this time, process the data we have, and hope that the source will report the same error again. - // Instead, fail immediately with the original error cause instead of a possibly secondary/misleading error returned later. - return Algorithm{}, nil, nil, err - } - - var retAlgo Algorithm - var decompressor DecompressorFunc - for _, algo := range compressionAlgorithms { - prefix := internal.AlgorithmPrefix(algo) - if len(prefix) > 0 && bytes.HasPrefix(buffer[:n], prefix) { - logrus.Debugf("Detected compression format %s", algo.Name()) - retAlgo = algo - decompressor = internal.AlgorithmDecompressor(algo) - break - } - } - if decompressor == nil { - logrus.Debugf("No compression detected") - } - - return retAlgo, decompressor, io.MultiReader(bytes.NewReader(buffer[:n]), input), nil -} - -// DetectCompression returns a DecompressorFunc if the input is recognized as a compressed format, nil otherwise. -// Because it consumes the start of input, other consumers must use the returned io.Reader instead to also read from the beginning. -func DetectCompression(input io.Reader) (DecompressorFunc, io.Reader, error) { - _, d, r, e := DetectCompressionFormat(input) - return d, r, e -} - -// AutoDecompress takes a stream and returns an uncompressed version of the -// same stream. -// The caller must call Close() on the returned stream (even if the input does not need, -// or does not even support, closing!). -func AutoDecompress(stream io.Reader) (io.ReadCloser, bool, error) { - decompressor, stream, err := DetectCompression(stream) - if err != nil { - return nil, false, fmt.Errorf("detecting compression: %w", err) - } - var res io.ReadCloser - if decompressor != nil { - res, err = decompressor(stream) - if err != nil { - return nil, false, fmt.Errorf("initializing decompression: %w", err) - } - } else { - res = io.NopCloser(stream) - } - return res, decompressor != nil, nil -} diff --git a/vendor/github.com/containers/image/v5/pkg/compression/zstd.go b/vendor/github.com/containers/image/v5/pkg/compression/zstd.go deleted file mode 100644 index 39ae014d2e..0000000000 --- a/vendor/github.com/containers/image/v5/pkg/compression/zstd.go +++ /dev/null @@ -1,59 +0,0 @@ -package compression - -import ( - "io" - - "github.com/klauspost/compress/zstd" -) - -type wrapperZstdDecoder struct { - decoder *zstd.Decoder -} - -func (w *wrapperZstdDecoder) Close() error { - w.decoder.Close() - return nil -} - -func (w *wrapperZstdDecoder) DecodeAll(input, dst []byte) ([]byte, error) { - return w.decoder.DecodeAll(input, dst) -} - -func (w *wrapperZstdDecoder) Read(p []byte) (int, error) { - return w.decoder.Read(p) -} - -func (w *wrapperZstdDecoder) Reset(r io.Reader) error { - return w.decoder.Reset(r) -} - -func (w *wrapperZstdDecoder) WriteTo(wr io.Writer) (int64, error) { - return w.decoder.WriteTo(wr) -} - -func zstdReader(buf io.Reader) (io.ReadCloser, error) { - decoder, err := zstd.NewReader(buf) - return &wrapperZstdDecoder{decoder: decoder}, err -} - -func zstdWriter(dest io.Writer) (io.WriteCloser, error) { - return zstd.NewWriter(dest) -} - -func zstdWriterWithLevel(dest io.Writer, level int) (*zstd.Encoder, error) { - el := zstd.EncoderLevelFromZstd(level) - return zstd.NewWriter(dest, zstd.WithEncoderLevel(el)) -} - -// zstdCompressor is a CompressorFunc for the zstd compression algorithm. -func zstdCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - if level == nil { - return zstdWriter(r) - } - return zstdWriterWithLevel(r, *level) -} - -// ZstdDecompressor is a DecompressorFunc for the zstd compression algorithm. -func ZstdDecompressor(r io.Reader) (io.ReadCloser, error) { - return zstdReader(r) -} diff --git a/vendor/github.com/containers/image/v5/pkg/docker/config/config.go b/vendor/github.com/containers/image/v5/pkg/docker/config/config.go index c61065cb01..da2238a0b6 100644 --- a/vendor/github.com/containers/image/v5/pkg/docker/config/config.go +++ b/vendor/github.com/containers/image/v5/pkg/docker/config/config.go @@ -13,14 +13,15 @@ import ( "strings" "github.com/containers/image/v5/docker/reference" + "github.com/containers/image/v5/internal/multierr" "github.com/containers/image/v5/internal/set" "github.com/containers/image/v5/pkg/sysregistriesv2" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/containers/storage/pkg/ioutils" helperclient "github.com/docker/docker-credential-helpers/client" "github.com/docker/docker-credential-helpers/credentials" - "github.com/hashicorp/go-multierror" "github.com/sirupsen/logrus" ) @@ -231,7 +232,7 @@ func getCredentialsWithHomeDir(sys *types.SystemContext, key, homeDir string) (t return types.DockerAuthConfig{}, err } - var multiErr error + var multiErr []error for _, helper := range helpers { var ( creds types.DockerAuthConfig @@ -253,7 +254,7 @@ func getCredentialsWithHomeDir(sys *types.SystemContext, key, homeDir string) (t } if err != nil { logrus.Debugf("Error looking up credentials for %s in credential helper %s: %v", helperKey, helper, err) - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) continue } if creds != (types.DockerAuthConfig{}) { @@ -266,7 +267,7 @@ func getCredentialsWithHomeDir(sys *types.SystemContext, key, homeDir string) (t } } if multiErr != nil { - return types.DockerAuthConfig{}, multiErr + return types.DockerAuthConfig{}, multierr.Format("errors looking up credentials:\n\t* ", "\nt* ", "\n", multiErr) } logrus.Debugf("No credentials for %s found", key) @@ -313,7 +314,7 @@ func SetCredentials(sys *types.SystemContext, key, username, password string) (s } // Make sure to collect all errors. - var multiErr error + var multiErr []error for _, helper := range helpers { var desc string var err error @@ -345,14 +346,14 @@ func SetCredentials(sys *types.SystemContext, key, username, password string) (s } } if err != nil { - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) logrus.Debugf("Error storing credentials for %s in credential helper %s: %v", key, helper, err) continue } logrus.Debugf("Stored credentials for %s in credential helper %s", key, helper) return desc, nil } - return "", multiErr + return "", multierr.Format("Errors storing credentials\n\t* ", "\n\t* ", "\n", multiErr) } func unsupportedNamespaceErr(helper string) error { @@ -376,53 +377,56 @@ func RemoveAuthentication(sys *types.SystemContext, key string) error { return err } - var multiErr error isLoggedIn := false - removeFromCredHelper := func(helper string) { + removeFromCredHelper := func(helper string) error { if isNamespaced { logrus.Debugf("Not removing credentials because namespaced keys are not supported for the credential helper: %s", helper) - return + return nil } err := deleteCredsFromCredHelper(helper, key) if err == nil { logrus.Debugf("Credentials for %q were deleted from credential helper %s", key, helper) isLoggedIn = true - return + return nil } if credentials.IsErrCredentialsNotFoundMessage(err.Error()) { logrus.Debugf("Not logged in to %s with credential helper %s", key, helper) - return + return nil } - multiErr = multierror.Append(multiErr, fmt.Errorf("removing credentials for %s from credential helper %s: %w", key, helper, err)) + return fmt.Errorf("removing credentials for %s from credential helper %s: %w", key, helper, err) } + var multiErr []error for _, helper := range helpers { var err error switch helper { // Special-case the built-in helper for auth files. case sysregistriesv2.AuthenticationFileHelper: _, err = jsonEditor(sys, func(fileContents *dockerConfigFile) (bool, string, error) { + var helperErr error if innerHelper, exists := fileContents.CredHelpers[key]; exists { - removeFromCredHelper(innerHelper) + helperErr = removeFromCredHelper(innerHelper) } if _, ok := fileContents.AuthConfigs[key]; ok { isLoggedIn = true delete(fileContents.AuthConfigs, key) } - return true, "", multiErr + return true, "", helperErr }) if err != nil { - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) } // External helpers. default: - removeFromCredHelper(helper) + if err := removeFromCredHelper(helper); err != nil { + multiErr = append(multiErr, err) + } } } if multiErr != nil { - return multiErr + return multierr.Format("errors removing credentials\n\t* ", "\n\t*", "\n", multiErr) } if !isLoggedIn { return ErrNotLoggedIn @@ -439,7 +443,7 @@ func RemoveAllAuthentication(sys *types.SystemContext) error { return err } - var multiErr error + var multiErr []error for _, helper := range helpers { var err error switch helper { @@ -479,13 +483,16 @@ func RemoveAllAuthentication(sys *types.SystemContext) error { } if err != nil { logrus.Debugf("Error removing credentials from credential helper %s: %v", helper, err) - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) continue } logrus.Debugf("All credentials removed from credential helper %s", helper) } - return multiErr + if multiErr != nil { + return multierr.Format("errors removing all credentials:\n\t* ", "\n\t* ", "\n", multiErr) + } + return nil } // prepareForEdit processes sys and key (if keyRelevant) to return: @@ -570,9 +577,9 @@ func getPathToAuthWithOS(sys *types.SystemContext, goOS string) (authPath, bool, runtimeDir := os.Getenv("XDG_RUNTIME_DIR") if runtimeDir != "" { // This function does not in general need to separately check that the returned path exists; that’s racy, and callers will fail accessing the file anyway. - // We are checking for os.IsNotExist here only to give the user better guidance what to do in this special case. - _, err := os.Stat(runtimeDir) - if os.IsNotExist(err) { + // We are checking for fs.ErrNotExist here only to give the user better guidance what to do in this special case. + err := fileutils.Exists(runtimeDir) + if errors.Is(err, fs.ErrNotExist) { // This means the user set the XDG_RUNTIME_DIR variable and either forgot to create the directory // or made a typo while setting the environment variable, // so return an error referring to $XDG_RUNTIME_DIR instead of xdgRuntimeDirPath inside. diff --git a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go index 3a11542c62..71f5bc8378 100644 --- a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go +++ b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go @@ -2,6 +2,7 @@ package sysregistriesv2 import ( "fmt" + "maps" "os" "path/filepath" "reflect" @@ -9,12 +10,12 @@ import ( "github.com/BurntSushi/toml" "github.com/containers/image/v5/docker/reference" + "github.com/containers/image/v5/internal/multierr" "github.com/containers/image/v5/internal/rootless" "github.com/containers/image/v5/types" "github.com/containers/storage/pkg/homedir" "github.com/containers/storage/pkg/lockfile" "github.com/sirupsen/logrus" - "golang.org/x/exp/maps" ) // defaultShortNameMode is the default mode of registries.conf files if the @@ -297,11 +298,7 @@ func newShortNameAliasCache(path string, conf *shortNameAliasConf) (*shortNameAl } } if len(errs) > 0 { - err := errs[0] - for i := 1; i < len(errs); i++ { - err = fmt.Errorf("%v\n: %w", errs[i], err) - } - return nil, err + return nil, multierr.Format("", "\n", "", errs) } return &res, nil } diff --git a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go index f45fd9de11..45427a350f 100644 --- a/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go +++ b/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go @@ -13,6 +13,7 @@ import ( "github.com/BurntSushi/toml" "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/containers/storage/pkg/regexp" "github.com/sirupsen/logrus" @@ -564,7 +565,7 @@ func newConfigWrapperWithHomeDir(ctx *types.SystemContext, homeDir string) confi // decide configPath using per-user path or system file if ctx != nil && ctx.SystemRegistriesConfPath != "" { wrapper.configPath = ctx.SystemRegistriesConfPath - } else if _, err := os.Stat(userRegistriesFilePath); err == nil { + } else if err := fileutils.Exists(userRegistriesFilePath); err == nil { // per-user registries.conf exists, not reading system dir // return config dirs from ctx or per-user one wrapper.configPath = userRegistriesFilePath diff --git a/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go b/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go index c6ec84bd5a..f6c0576e07 100644 --- a/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go +++ b/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go @@ -8,11 +8,11 @@ import ( "net/http" "os" "path/filepath" + "slices" "strings" "time" "github.com/sirupsen/logrus" - "golang.org/x/exp/slices" ) // SetupCertificates opens all .crt, .cert, and .key files in dir and appends / loads certs and key pairs as appropriate to tlsc @@ -55,9 +55,9 @@ func SetupCertificates(dir string, tlsc *tls.Config) error { } tlsc.RootCAs.AppendCertsFromPEM(data) } - if strings.HasSuffix(f.Name(), ".cert") { + if base, ok := strings.CutSuffix(f.Name(), ".cert"); ok { certName := f.Name() - keyName := certName[:len(certName)-5] + ".key" + keyName := base + ".key" logrus.Debugf(" cert: %s", fullPath) if !hasFile(fs, keyName) { return fmt.Errorf("missing key %s for client certificate %s. Note that CA certificates should use the extension .crt", keyName, certName) @@ -68,9 +68,9 @@ func SetupCertificates(dir string, tlsc *tls.Config) error { } tlsc.Certificates = append(slices.Clone(tlsc.Certificates), cert) } - if strings.HasSuffix(f.Name(), ".key") { + if base, ok := strings.CutSuffix(f.Name(), ".key"); ok { keyName := f.Name() - certName := keyName[:len(keyName)-4] + ".cert" + certName := base + ".cert" logrus.Debugf(" key: %s", fullPath) if !hasFile(fs, certName) { return fmt.Errorf("missing client certificate %s for key %s", certName, keyName) diff --git a/vendor/github.com/containers/image/v5/version/version.go b/vendor/github.com/containers/image/v5/version/version.go index 2be0541584..0b5c3bd7a8 100644 --- a/vendor/github.com/containers/image/v5/version/version.go +++ b/vendor/github.com/containers/image/v5/version/version.go @@ -6,9 +6,9 @@ const ( // VersionMajor is for an API incompatible changes VersionMajor = 5 // VersionMinor is for functionality in a backwards-compatible manner - VersionMinor = 30 + VersionMinor = 31 // VersionPatch is for backwards-compatible bug fixes - VersionPatch = 1 + VersionPatch = 0 // VersionDev indicates development branch. Releases will be empty string. VersionDev = "" diff --git a/vendor/github.com/containers/storage/pkg/chunked/compressor/compressor.go b/vendor/github.com/containers/storage/pkg/chunked/compressor/compressor.go deleted file mode 100644 index a2fd904caf..0000000000 --- a/vendor/github.com/containers/storage/pkg/chunked/compressor/compressor.go +++ /dev/null @@ -1,521 +0,0 @@ -package compressor - -// NOTE: This is used from github.com/containers/image by callers that -// don't otherwise use containers/storage, so don't make this depend on any -// larger software like the graph drivers. - -import ( - "bufio" - "bytes" - "encoding/base64" - "io" - - "github.com/containers/storage/pkg/chunked/internal" - "github.com/containers/storage/pkg/ioutils" - "github.com/klauspost/compress/zstd" - "github.com/opencontainers/go-digest" - "github.com/vbatts/tar-split/archive/tar" - "github.com/vbatts/tar-split/tar/asm" - "github.com/vbatts/tar-split/tar/storage" -) - -const ( - RollsumBits = 16 - holesThreshold = int64(1 << 10) -) - -type holesFinder struct { - reader *bufio.Reader - zeros int64 - threshold int64 - - state int -} - -const ( - holesFinderStateRead = iota - holesFinderStateAccumulate - holesFinderStateFound - holesFinderStateEOF -) - -// readByte reads a single byte from the underlying reader. -// If a single byte is read, the return value is (0, RAW-BYTE-VALUE, nil). -// If there are at least f.THRESHOLD consecutive zeros, then the -// return value is (N_CONSECUTIVE_ZEROS, '\x00'). -func (f *holesFinder) readByte() (int64, byte, error) { - for { - switch f.state { - // reading the file stream - case holesFinderStateRead: - if f.zeros > 0 { - f.zeros-- - return 0, 0, nil - } - b, err := f.reader.ReadByte() - if err != nil { - return 0, b, err - } - - if b != 0 { - return 0, b, err - } - - f.zeros = 1 - if f.zeros == f.threshold { - f.state = holesFinderStateFound - } else { - f.state = holesFinderStateAccumulate - } - // accumulating zeros, but still didn't reach the threshold - case holesFinderStateAccumulate: - b, err := f.reader.ReadByte() - if err != nil { - if err == io.EOF { - f.state = holesFinderStateEOF - continue - } - return 0, b, err - } - - if b == 0 { - f.zeros++ - if f.zeros == f.threshold { - f.state = holesFinderStateFound - } - } else { - if err := f.reader.UnreadByte(); err != nil { - return 0, 0, err - } - f.state = holesFinderStateRead - } - // found a hole. Number of zeros >= threshold - case holesFinderStateFound: - b, err := f.reader.ReadByte() - if err != nil { - if err == io.EOF { - f.state = holesFinderStateEOF - } - holeLen := f.zeros - f.zeros = 0 - return holeLen, 0, nil - } - if b != 0 { - if err := f.reader.UnreadByte(); err != nil { - return 0, 0, err - } - f.state = holesFinderStateRead - - holeLen := f.zeros - f.zeros = 0 - return holeLen, 0, nil - } - f.zeros++ - // reached EOF. Flush pending zeros if any. - case holesFinderStateEOF: - if f.zeros > 0 { - f.zeros-- - return 0, 0, nil - } - return 0, 0, io.EOF - } - } -} - -type rollingChecksumReader struct { - reader *holesFinder - closed bool - rollsum *RollSum - pendingHole int64 - - // WrittenOut is the total number of bytes read from - // the stream. - WrittenOut int64 - - // IsLastChunkZeros tells whether the last generated - // chunk is a hole (made of consecutive zeros). If it - // is false, then the last chunk is a data chunk - // generated by the rolling checksum. - IsLastChunkZeros bool -} - -func (rc *rollingChecksumReader) Read(b []byte) (bool, int, error) { - rc.IsLastChunkZeros = false - - if rc.pendingHole > 0 { - toCopy := int64(len(b)) - if rc.pendingHole < toCopy { - toCopy = rc.pendingHole - } - rc.pendingHole -= toCopy - for i := int64(0); i < toCopy; i++ { - b[i] = 0 - } - - rc.WrittenOut += toCopy - - rc.IsLastChunkZeros = true - - // if there are no other zeros left, terminate the chunk - return rc.pendingHole == 0, int(toCopy), nil - } - - if rc.closed { - return false, 0, io.EOF - } - - for i := 0; i < len(b); i++ { - holeLen, n, err := rc.reader.readByte() - if err != nil { - if err == io.EOF { - rc.closed = true - if i == 0 { - return false, 0, err - } - return false, i, nil - } - // Report any other error type - return false, -1, err - } - if holeLen > 0 { - for j := int64(0); j < holeLen; j++ { - rc.rollsum.Roll(0) - } - rc.pendingHole = holeLen - return true, i, nil - } - b[i] = n - rc.WrittenOut++ - rc.rollsum.Roll(n) - if rc.rollsum.OnSplitWithBits(RollsumBits) { - return true, i + 1, nil - } - } - return false, len(b), nil -} - -type chunk struct { - ChunkOffset int64 - Offset int64 - Checksum string - ChunkSize int64 - ChunkType string -} - -type tarSplitData struct { - compressed *bytes.Buffer - digester digest.Digester - uncompressedCounter *ioutils.WriteCounter - zstd *zstd.Encoder - packer storage.Packer -} - -func newTarSplitData(level int) (*tarSplitData, error) { - compressed := bytes.NewBuffer(nil) - digester := digest.Canonical.Digester() - - zstdWriter, err := internal.ZstdWriterWithLevel(io.MultiWriter(compressed, digester.Hash()), level) - if err != nil { - return nil, err - } - - uncompressedCounter := ioutils.NewWriteCounter(zstdWriter) - metaPacker := storage.NewJSONPacker(uncompressedCounter) - - return &tarSplitData{ - compressed: compressed, - digester: digester, - uncompressedCounter: uncompressedCounter, - zstd: zstdWriter, - packer: metaPacker, - }, nil -} - -func writeZstdChunkedStream(destFile io.Writer, outMetadata map[string]string, reader io.Reader, level int) error { - // total written so far. Used to retrieve partial offsets in the file - dest := ioutils.NewWriteCounter(destFile) - - tarSplitData, err := newTarSplitData(level) - if err != nil { - return err - } - defer func() { - if tarSplitData.zstd != nil { - tarSplitData.zstd.Close() - } - }() - - its, err := asm.NewInputTarStream(reader, tarSplitData.packer, nil) - if err != nil { - return err - } - - tr := tar.NewReader(its) - tr.RawAccounting = true - - buf := make([]byte, 4096) - - zstdWriter, err := internal.ZstdWriterWithLevel(dest, level) - if err != nil { - return err - } - defer func() { - if zstdWriter != nil { - zstdWriter.Close() - } - }() - - restartCompression := func() (int64, error) { - var offset int64 - if zstdWriter != nil { - if err := zstdWriter.Close(); err != nil { - return 0, err - } - offset = dest.Count - zstdWriter.Reset(dest) - } - return offset, nil - } - - var metadata []internal.FileMetadata - for { - hdr, err := tr.Next() - if err != nil { - if err == io.EOF { - break - } - return err - } - - rawBytes := tr.RawBytes() - if _, err := zstdWriter.Write(rawBytes); err != nil { - return err - } - - payloadDigester := digest.Canonical.Digester() - chunkDigester := digest.Canonical.Digester() - - // Now handle the payload, if any - startOffset := int64(0) - lastOffset := int64(0) - lastChunkOffset := int64(0) - - checksum := "" - - chunks := []chunk{} - - hf := &holesFinder{ - threshold: holesThreshold, - reader: bufio.NewReader(tr), - } - - rcReader := &rollingChecksumReader{ - reader: hf, - rollsum: NewRollSum(), - } - - payloadDest := io.MultiWriter(payloadDigester.Hash(), chunkDigester.Hash(), zstdWriter) - for { - mustSplit, read, errRead := rcReader.Read(buf) - if errRead != nil && errRead != io.EOF { - return err - } - // restart the compression only if there is a payload. - if read > 0 { - if startOffset == 0 { - startOffset, err = restartCompression() - if err != nil { - return err - } - lastOffset = startOffset - } - - if _, err := payloadDest.Write(buf[:read]); err != nil { - return err - } - } - if (mustSplit || errRead == io.EOF) && startOffset > 0 { - off, err := restartCompression() - if err != nil { - return err - } - - chunkSize := rcReader.WrittenOut - lastChunkOffset - if chunkSize > 0 { - chunkType := internal.ChunkTypeData - if rcReader.IsLastChunkZeros { - chunkType = internal.ChunkTypeZeros - } - - chunks = append(chunks, chunk{ - ChunkOffset: lastChunkOffset, - Offset: lastOffset, - Checksum: chunkDigester.Digest().String(), - ChunkSize: chunkSize, - ChunkType: chunkType, - }) - } - - lastOffset = off - lastChunkOffset = rcReader.WrittenOut - chunkDigester = digest.Canonical.Digester() - payloadDest = io.MultiWriter(payloadDigester.Hash(), chunkDigester.Hash(), zstdWriter) - } - if errRead == io.EOF { - if startOffset > 0 { - checksum = payloadDigester.Digest().String() - } - break - } - } - - typ, err := internal.GetType(hdr.Typeflag) - if err != nil { - return err - } - xattrs := make(map[string]string) - for k, v := range hdr.Xattrs { - xattrs[k] = base64.StdEncoding.EncodeToString([]byte(v)) - } - entries := []internal.FileMetadata{ - { - Type: typ, - Name: hdr.Name, - Linkname: hdr.Linkname, - Mode: hdr.Mode, - Size: hdr.Size, - UID: hdr.Uid, - GID: hdr.Gid, - ModTime: &hdr.ModTime, - AccessTime: &hdr.AccessTime, - ChangeTime: &hdr.ChangeTime, - Devmajor: hdr.Devmajor, - Devminor: hdr.Devminor, - Xattrs: xattrs, - Digest: checksum, - Offset: startOffset, - EndOffset: lastOffset, - }, - } - for i := 1; i < len(chunks); i++ { - entries = append(entries, internal.FileMetadata{ - Type: internal.TypeChunk, - Name: hdr.Name, - ChunkOffset: chunks[i].ChunkOffset, - }) - } - if len(chunks) > 1 { - for i := range chunks { - entries[i].ChunkSize = chunks[i].ChunkSize - entries[i].Offset = chunks[i].Offset - entries[i].ChunkDigest = chunks[i].Checksum - entries[i].ChunkType = chunks[i].ChunkType - } - } - metadata = append(metadata, entries...) - } - - rawBytes := tr.RawBytes() - if _, err := zstdWriter.Write(rawBytes); err != nil { - zstdWriter.Close() - return err - } - - // make sure the entire tarball is flushed to the output as it might contain - // some trailing zeros that affect the checksum. - if _, err := io.Copy(zstdWriter, its); err != nil { - zstdWriter.Close() - return err - } - - if err := zstdWriter.Flush(); err != nil { - zstdWriter.Close() - return err - } - if err := zstdWriter.Close(); err != nil { - return err - } - zstdWriter = nil - - if err := tarSplitData.zstd.Flush(); err != nil { - return err - } - if err := tarSplitData.zstd.Close(); err != nil { - return err - } - tarSplitData.zstd = nil - - ts := internal.TarSplitData{ - Data: tarSplitData.compressed.Bytes(), - Digest: tarSplitData.digester.Digest(), - UncompressedSize: tarSplitData.uncompressedCounter.Count, - } - - return internal.WriteZstdChunkedManifest(dest, outMetadata, uint64(dest.Count), &ts, metadata, level) -} - -type zstdChunkedWriter struct { - tarSplitOut *io.PipeWriter - tarSplitErr chan error -} - -func (w zstdChunkedWriter) Close() error { - errClose := w.tarSplitOut.Close() - - if err := <-w.tarSplitErr; err != nil && err != io.EOF { - return err - } - return errClose -} - -func (w zstdChunkedWriter) Write(p []byte) (int, error) { - select { - case err := <-w.tarSplitErr: - w.tarSplitOut.Close() - return 0, err - default: - return w.tarSplitOut.Write(p) - } -} - -// zstdChunkedWriterWithLevel writes a zstd compressed tarball where each file is -// compressed separately so it can be addressed separately. Idea based on CRFS: -// https://github.com/google/crfs -// The difference with CRFS is that the zstd compression is used instead of gzip. -// The reason for it is that zstd supports embedding metadata ignored by the decoder -// as part of the compressed stream. -// A manifest json file with all the metadata is appended at the end of the tarball -// stream, using zstd skippable frames. -// The final file will look like: -// [FILE_1][FILE_2]..[FILE_N][SKIPPABLE FRAME 1][SKIPPABLE FRAME 2] -// Where: -// [FILE_N]: [ZSTD HEADER][TAR HEADER][PAYLOAD FILE_N][ZSTD FOOTER] -// [SKIPPABLE FRAME 1]: [ZSTD SKIPPABLE FRAME, SIZE=MANIFEST LENGTH][MANIFEST] -// [SKIPPABLE FRAME 2]: [ZSTD SKIPPABLE FRAME, SIZE=16][MANIFEST_OFFSET][MANIFEST_LENGTH][MANIFEST_LENGTH_UNCOMPRESSED][MANIFEST_TYPE][CHUNKED_ZSTD_MAGIC_NUMBER] -// MANIFEST_OFFSET, MANIFEST_LENGTH, MANIFEST_LENGTH_UNCOMPRESSED and CHUNKED_ZSTD_MAGIC_NUMBER are 64 bits unsigned in little endian format. -func zstdChunkedWriterWithLevel(out io.Writer, metadata map[string]string, level int) (io.WriteCloser, error) { - ch := make(chan error, 1) - r, w := io.Pipe() - - go func() { - ch <- writeZstdChunkedStream(out, metadata, r, level) - _, _ = io.Copy(io.Discard, r) // Ordinarily writeZstdChunkedStream consumes all of r. If it fails, ensure the write end never blocks and eventually terminates. - r.Close() - close(ch) - }() - - return zstdChunkedWriter{ - tarSplitOut: w, - tarSplitErr: ch, - }, nil -} - -// ZstdCompressor is a CompressorFunc for the zstd compression algorithm. -func ZstdCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - if level == nil { - l := 10 - level = &l - } - - return zstdChunkedWriterWithLevel(r, metadata, *level) -} diff --git a/vendor/github.com/containers/storage/pkg/chunked/compressor/rollsum.go b/vendor/github.com/containers/storage/pkg/chunked/compressor/rollsum.go deleted file mode 100644 index 59df6901e8..0000000000 --- a/vendor/github.com/containers/storage/pkg/chunked/compressor/rollsum.go +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2011 The Perkeep Authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package rollsum implements rolling checksums similar to apenwarr's bup, which -// is similar to librsync. -// -// The bup project is at https://github.com/apenwarr/bup and its splitting in -// particular is at https://github.com/apenwarr/bup/blob/master/lib/bup/bupsplit.c -package compressor - -import ( - "math/bits" -) - -const ( - windowSize = 64 // Roll assumes windowSize is a power of 2 - charOffset = 31 -) - -const ( - blobBits = 13 - blobSize = 1 << blobBits // 8k -) - -type RollSum struct { - s1, s2 uint32 - window [windowSize]uint8 - wofs int -} - -func NewRollSum() *RollSum { - return &RollSum{ - s1: windowSize * charOffset, - s2: windowSize * (windowSize - 1) * charOffset, - } -} - -func (rs *RollSum) add(drop, add uint32) { - s1 := rs.s1 + add - drop - rs.s1 = s1 - rs.s2 += s1 - uint32(windowSize)*(drop+charOffset) -} - -// Roll adds ch to the rolling sum. -func (rs *RollSum) Roll(ch byte) { - wp := &rs.window[rs.wofs] - rs.add(uint32(*wp), uint32(ch)) - *wp = ch - rs.wofs = (rs.wofs + 1) & (windowSize - 1) -} - -// OnSplit reports whether at least 13 consecutive trailing bits of -// the current checksum are set the same way. -func (rs *RollSum) OnSplit() bool { - return (rs.s2 & (blobSize - 1)) == ((^0) & (blobSize - 1)) -} - -// OnSplitWithBits reports whether at least n consecutive trailing bits -// of the current checksum are set the same way. -func (rs *RollSum) OnSplitWithBits(n uint32) bool { - mask := (uint32(1) << n) - 1 - return rs.s2&mask == (^uint32(0))&mask -} - -func (rs *RollSum) Bits() int { - rsum := rs.Digest() >> (blobBits + 1) - return blobBits + bits.TrailingZeros32(^rsum) -} - -func (rs *RollSum) Digest() uint32 { - return (rs.s1 << 16) | (rs.s2 & 0xffff) -} diff --git a/vendor/github.com/containers/storage/pkg/chunked/internal/compression.go b/vendor/github.com/containers/storage/pkg/chunked/internal/compression.go deleted file mode 100644 index caa581efe6..0000000000 --- a/vendor/github.com/containers/storage/pkg/chunked/internal/compression.go +++ /dev/null @@ -1,283 +0,0 @@ -package internal - -// NOTE: This is used from github.com/containers/image by callers that -// don't otherwise use containers/storage, so don't make this depend on any -// larger software like the graph drivers. - -import ( - "archive/tar" - "bytes" - "encoding/binary" - "errors" - "fmt" - "io" - "time" - - jsoniter "github.com/json-iterator/go" - "github.com/klauspost/compress/zstd" - "github.com/opencontainers/go-digest" -) - -type TOC struct { - Version int `json:"version"` - Entries []FileMetadata `json:"entries"` - - // internal: used by unmarshalToc - StringsBuf bytes.Buffer `json:"-"` -} - -type FileMetadata struct { - Type string `json:"type"` - Name string `json:"name"` - Linkname string `json:"linkName,omitempty"` - Mode int64 `json:"mode,omitempty"` - Size int64 `json:"size,omitempty"` - UID int `json:"uid,omitempty"` - GID int `json:"gid,omitempty"` - ModTime *time.Time `json:"modtime,omitempty"` - AccessTime *time.Time `json:"accesstime,omitempty"` - ChangeTime *time.Time `json:"changetime,omitempty"` - Devmajor int64 `json:"devMajor,omitempty"` - Devminor int64 `json:"devMinor,omitempty"` - Xattrs map[string]string `json:"xattrs,omitempty"` - Digest string `json:"digest,omitempty"` - Offset int64 `json:"offset,omitempty"` - EndOffset int64 `json:"endOffset,omitempty"` - - ChunkSize int64 `json:"chunkSize,omitempty"` - ChunkOffset int64 `json:"chunkOffset,omitempty"` - ChunkDigest string `json:"chunkDigest,omitempty"` - ChunkType string `json:"chunkType,omitempty"` - - // internal: computed by mergeTOCEntries. - Chunks []*FileMetadata `json:"-"` -} - -const ( - ChunkTypeData = "" - ChunkTypeZeros = "zeros" -) - -const ( - TypeReg = "reg" - TypeChunk = "chunk" - TypeLink = "hardlink" - TypeChar = "char" - TypeBlock = "block" - TypeDir = "dir" - TypeFifo = "fifo" - TypeSymlink = "symlink" -) - -var TarTypes = map[byte]string{ - tar.TypeReg: TypeReg, - tar.TypeRegA: TypeReg, - tar.TypeLink: TypeLink, - tar.TypeChar: TypeChar, - tar.TypeBlock: TypeBlock, - tar.TypeDir: TypeDir, - tar.TypeFifo: TypeFifo, - tar.TypeSymlink: TypeSymlink, -} - -func GetType(t byte) (string, error) { - r, found := TarTypes[t] - if !found { - return "", fmt.Errorf("unknown tarball type: %v", t) - } - return r, nil -} - -const ( - ManifestChecksumKey = "io.github.containers.zstd-chunked.manifest-checksum" - ManifestInfoKey = "io.github.containers.zstd-chunked.manifest-position" - TarSplitChecksumKey = "io.github.containers.zstd-chunked.tarsplit-checksum" - TarSplitInfoKey = "io.github.containers.zstd-chunked.tarsplit-position" - - // ManifestTypeCRFS is a manifest file compatible with the CRFS TOC file. - ManifestTypeCRFS = 1 - - // FooterSizeSupported is the footer size supported by this implementation. - // Newer versions of the image format might increase this value, so reject - // any version that is not supported. - FooterSizeSupported = 64 -) - -var ( - // when the zstd decoder encounters a skippable frame + 1 byte for the size, it - // will ignore it. - // https://tools.ietf.org/html/rfc8478#section-3.1.2 - skippableFrameMagic = []byte{0x50, 0x2a, 0x4d, 0x18} - - ZstdChunkedFrameMagic = []byte{0x47, 0x4e, 0x55, 0x6c, 0x49, 0x6e, 0x55, 0x78} -) - -func appendZstdSkippableFrame(dest io.Writer, data []byte) error { - if _, err := dest.Write(skippableFrameMagic); err != nil { - return err - } - - size := make([]byte, 4) - binary.LittleEndian.PutUint32(size, uint32(len(data))) - if _, err := dest.Write(size); err != nil { - return err - } - if _, err := dest.Write(data); err != nil { - return err - } - return nil -} - -type TarSplitData struct { - Data []byte - Digest digest.Digest - UncompressedSize int64 -} - -func WriteZstdChunkedManifest(dest io.Writer, outMetadata map[string]string, offset uint64, tarSplitData *TarSplitData, metadata []FileMetadata, level int) error { - // 8 is the size of the zstd skippable frame header + the frame size - const zstdSkippableFrameHeader = 8 - manifestOffset := offset + zstdSkippableFrameHeader - - toc := TOC{ - Version: 1, - Entries: metadata, - } - - json := jsoniter.ConfigCompatibleWithStandardLibrary - // Generate the manifest - manifest, err := json.Marshal(toc) - if err != nil { - return err - } - - var compressedBuffer bytes.Buffer - zstdWriter, err := ZstdWriterWithLevel(&compressedBuffer, level) - if err != nil { - return err - } - if _, err := zstdWriter.Write(manifest); err != nil { - zstdWriter.Close() - return err - } - if err := zstdWriter.Close(); err != nil { - return err - } - compressedManifest := compressedBuffer.Bytes() - - manifestDigester := digest.Canonical.Digester() - manifestChecksum := manifestDigester.Hash() - if _, err := manifestChecksum.Write(compressedManifest); err != nil { - return err - } - - outMetadata[ManifestChecksumKey] = manifestDigester.Digest().String() - outMetadata[ManifestInfoKey] = fmt.Sprintf("%d:%d:%d:%d", manifestOffset, len(compressedManifest), len(manifest), ManifestTypeCRFS) - if err := appendZstdSkippableFrame(dest, compressedManifest); err != nil { - return err - } - - outMetadata[TarSplitChecksumKey] = tarSplitData.Digest.String() - tarSplitOffset := manifestOffset + uint64(len(compressedManifest)) + zstdSkippableFrameHeader - outMetadata[TarSplitInfoKey] = fmt.Sprintf("%d:%d:%d", tarSplitOffset, len(tarSplitData.Data), tarSplitData.UncompressedSize) - if err := appendZstdSkippableFrame(dest, tarSplitData.Data); err != nil { - return err - } - - footer := ZstdChunkedFooterData{ - ManifestType: uint64(ManifestTypeCRFS), - Offset: manifestOffset, - LengthCompressed: uint64(len(compressedManifest)), - LengthUncompressed: uint64(len(manifest)), - ChecksumAnnotation: "", // unused - OffsetTarSplit: uint64(tarSplitOffset), - LengthCompressedTarSplit: uint64(len(tarSplitData.Data)), - LengthUncompressedTarSplit: uint64(tarSplitData.UncompressedSize), - ChecksumAnnotationTarSplit: "", // unused - } - - manifestDataLE := footerDataToBlob(footer) - - return appendZstdSkippableFrame(dest, manifestDataLE) -} - -func ZstdWriterWithLevel(dest io.Writer, level int) (*zstd.Encoder, error) { - el := zstd.EncoderLevelFromZstd(level) - return zstd.NewWriter(dest, zstd.WithEncoderLevel(el)) -} - -// ZstdChunkedFooterData contains all the data stored in the zstd:chunked footer. -type ZstdChunkedFooterData struct { - ManifestType uint64 - - Offset uint64 - LengthCompressed uint64 - LengthUncompressed uint64 - ChecksumAnnotation string // Only used when reading a layer, not when creating it - - OffsetTarSplit uint64 - LengthCompressedTarSplit uint64 - LengthUncompressedTarSplit uint64 - ChecksumAnnotationTarSplit string // Only used when reading a layer, not when creating it -} - -func footerDataToBlob(footer ZstdChunkedFooterData) []byte { - // Store the offset to the manifest and its size in LE order - manifestDataLE := make([]byte, FooterSizeSupported) - binary.LittleEndian.PutUint64(manifestDataLE[8*0:], footer.Offset) - binary.LittleEndian.PutUint64(manifestDataLE[8*1:], footer.LengthCompressed) - binary.LittleEndian.PutUint64(manifestDataLE[8*2:], footer.LengthUncompressed) - binary.LittleEndian.PutUint64(manifestDataLE[8*3:], footer.ManifestType) - binary.LittleEndian.PutUint64(manifestDataLE[8*4:], footer.OffsetTarSplit) - binary.LittleEndian.PutUint64(manifestDataLE[8*5:], footer.LengthCompressedTarSplit) - binary.LittleEndian.PutUint64(manifestDataLE[8*6:], footer.LengthUncompressedTarSplit) - copy(manifestDataLE[8*7:], ZstdChunkedFrameMagic) - - return manifestDataLE -} - -// ReadFooterDataFromAnnotations reads the zstd:chunked footer data from the given annotations. -func ReadFooterDataFromAnnotations(annotations map[string]string) (ZstdChunkedFooterData, error) { - var footerData ZstdChunkedFooterData - - footerData.ChecksumAnnotation = annotations[ManifestChecksumKey] - if footerData.ChecksumAnnotation == "" { - return footerData, fmt.Errorf("manifest checksum annotation %q not found", ManifestChecksumKey) - } - - offsetMetadata := annotations[ManifestInfoKey] - - if _, err := fmt.Sscanf(offsetMetadata, "%d:%d:%d:%d", &footerData.Offset, &footerData.LengthCompressed, &footerData.LengthUncompressed, &footerData.ManifestType); err != nil { - return footerData, err - } - - if tarSplitInfoKeyAnnotation, found := annotations[TarSplitInfoKey]; found { - if _, err := fmt.Sscanf(tarSplitInfoKeyAnnotation, "%d:%d:%d", &footerData.OffsetTarSplit, &footerData.LengthCompressedTarSplit, &footerData.LengthUncompressedTarSplit); err != nil { - return footerData, err - } - footerData.ChecksumAnnotationTarSplit = annotations[TarSplitChecksumKey] - } - return footerData, nil -} - -// ReadFooterDataFromBlob reads the zstd:chunked footer from the binary buffer. -func ReadFooterDataFromBlob(footer []byte) (ZstdChunkedFooterData, error) { - var footerData ZstdChunkedFooterData - - if len(footer) < FooterSizeSupported { - return footerData, errors.New("blob too small") - } - footerData.Offset = binary.LittleEndian.Uint64(footer[0:8]) - footerData.LengthCompressed = binary.LittleEndian.Uint64(footer[8:16]) - footerData.LengthUncompressed = binary.LittleEndian.Uint64(footer[16:24]) - footerData.ManifestType = binary.LittleEndian.Uint64(footer[24:32]) - footerData.OffsetTarSplit = binary.LittleEndian.Uint64(footer[32:40]) - footerData.LengthCompressedTarSplit = binary.LittleEndian.Uint64(footer[40:48]) - footerData.LengthUncompressedTarSplit = binary.LittleEndian.Uint64(footer[48:56]) - - // the magic number is stored in the last 8 bytes - if !bytes.Equal(ZstdChunkedFrameMagic, footer[len(footer)-len(ZstdChunkedFrameMagic):]) { - return footerData, errors.New("invalid magic number") - } - return footerData, nil -} diff --git a/vendor/github.com/containers/storage/pkg/fileutils/exists_unix.go b/vendor/github.com/containers/storage/pkg/fileutils/exists_unix.go new file mode 100644 index 0000000000..f3087d7df6 --- /dev/null +++ b/vendor/github.com/containers/storage/pkg/fileutils/exists_unix.go @@ -0,0 +1,34 @@ +//go:build !windows +// +build !windows + +package fileutils + +import ( + "os" + + "golang.org/x/sys/unix" +) + +// Exists checks whether a file or directory exists at the given path. +// If the path is a symlink, the symlink is followed. +func Exists(path string) error { + // It uses unix.Faccessat which is a faster operation compared to os.Stat for + // simply checking the existence of a file. + err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, 0) + if err != nil { + return &os.PathError{Op: "faccessat", Path: path, Err: err} + } + return nil +} + +// Lexists checks whether a file or directory exists at the given path. +// If the path is a symlink, the symlink itself is checked. +func Lexists(path string) error { + // It uses unix.Faccessat which is a faster operation compared to os.Stat for + // simply checking the existence of a file. + err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, unix.AT_SYMLINK_NOFOLLOW) + if err != nil { + return &os.PathError{Op: "faccessat", Path: path, Err: err} + } + return nil +} diff --git a/vendor/github.com/containers/storage/pkg/fileutils/exists_windows.go b/vendor/github.com/containers/storage/pkg/fileutils/exists_windows.go new file mode 100644 index 0000000000..355cf04647 --- /dev/null +++ b/vendor/github.com/containers/storage/pkg/fileutils/exists_windows.go @@ -0,0 +1,18 @@ +package fileutils + +import ( + "os" +) + +// Exists checks whether a file or directory exists at the given path. +func Exists(path string) error { + _, err := os.Stat(path) + return err +} + +// Lexists checks whether a file or directory exists at the given path, without +// resolving symlinks +func Lexists(path string) error { + _, err := os.Lstat(path) + return err +} diff --git a/vendor/github.com/containers/storage/pkg/fileutils/fileutils.go b/vendor/github.com/containers/storage/pkg/fileutils/fileutils.go new file mode 100644 index 0000000000..85ce2d5260 --- /dev/null +++ b/vendor/github.com/containers/storage/pkg/fileutils/fileutils.go @@ -0,0 +1,371 @@ +package fileutils + +import ( + "errors" + "fmt" + "io" + "os" + "path/filepath" + "regexp" + "strings" + "text/scanner" + + "github.com/sirupsen/logrus" +) + +// PatternMatcher allows checking paths against a list of patterns +type PatternMatcher struct { + patterns []*Pattern + exclusions bool +} + +// NewPatternMatcher creates a new matcher object for specific patterns that can +// be used later to match against patterns against paths +func NewPatternMatcher(patterns []string) (*PatternMatcher, error) { + pm := &PatternMatcher{ + patterns: make([]*Pattern, 0, len(patterns)), + } + for _, p := range patterns { + // Eliminate leading and trailing whitespace. + p = strings.TrimSpace(p) + if p == "" { + continue + } + p = filepath.Clean(p) + newp := &Pattern{} + if p[0] == '!' { + if len(p) == 1 { + return nil, errors.New("illegal exclusion pattern: \"!\"") + } + newp.exclusion = true + p = strings.TrimPrefix(filepath.Clean(p[1:]), "/") + pm.exclusions = true + } + // Do some syntax checking on the pattern. + // filepath's Match() has some really weird rules that are inconsistent + // so instead of trying to dup their logic, just call Match() for its + // error state and if there is an error in the pattern return it. + // If this becomes an issue we can remove this since its really only + // needed in the error (syntax) case - which isn't really critical. + if _, err := filepath.Match(p, "."); err != nil { + return nil, err + } + newp.cleanedPattern = p + newp.dirs = strings.Split(p, string(os.PathSeparator)) + pm.patterns = append(pm.patterns, newp) + } + return pm, nil +} + +// Deprecated: Please use the `MatchesResult` method instead. +// Matches matches path against all the patterns. Matches is not safe to be +// called concurrently +func (pm *PatternMatcher) Matches(file string) (bool, error) { + matched := false + file = filepath.FromSlash(file) + + for _, pattern := range pm.patterns { + negative := false + + if pattern.exclusion { + negative = true + } + + match, err := pattern.match(file) + if err != nil { + return false, err + } + + if match { + matched = !negative + } + } + + if matched { + logrus.Debugf("Skipping excluded path: %s", file) + } + + return matched, nil +} + +type MatchResult struct { + isMatched bool + matches, excludes uint +} + +// Excludes returns true if the overall result is matched +func (m *MatchResult) IsMatched() bool { + return m.isMatched +} + +// Excludes returns the amount of matches of an MatchResult +func (m *MatchResult) Matches() uint { + return m.matches +} + +// Excludes returns the amount of excludes of an MatchResult +func (m *MatchResult) Excludes() uint { + return m.excludes +} + +// MatchesResult verifies the provided filepath against all patterns. +// It returns the `*MatchResult` result for the patterns on success, otherwise +// an error. This method is not safe to be called concurrently. +func (pm *PatternMatcher) MatchesResult(file string) (res *MatchResult, err error) { + file = filepath.FromSlash(file) + res = &MatchResult{false, 0, 0} + + for _, pattern := range pm.patterns { + negative := false + + if pattern.exclusion { + negative = true + } + + match, err := pattern.match(file) + if err != nil { + return nil, err + } + + if match { + res.isMatched = !negative + if negative { + res.excludes++ + } else { + res.matches++ + } + } + } + + if res.matches > 0 { + logrus.Debugf("Skipping excluded path: %s", file) + } + + return res, nil +} + +// IsMatch verifies the provided filepath against all patterns and returns true +// if it matches. A match is valid if the last match is a positive one. +// It returns an error on failure and is not safe to be called concurrently. +func (pm *PatternMatcher) IsMatch(file string) (matched bool, err error) { + res, err := pm.MatchesResult(file) + if err != nil { + return false, err + } + return res.isMatched, nil +} + +// Exclusions returns true if any of the patterns define exclusions +func (pm *PatternMatcher) Exclusions() bool { + return pm.exclusions +} + +// Patterns returns array of active patterns +func (pm *PatternMatcher) Patterns() []*Pattern { + return pm.patterns +} + +// Pattern defines a single regexp used to filter file paths. +type Pattern struct { + cleanedPattern string + dirs []string + regexp *regexp.Regexp + exclusion bool +} + +func (p *Pattern) String() string { + return p.cleanedPattern +} + +// Exclusion returns true if this pattern defines exclusion +func (p *Pattern) Exclusion() bool { + return p.exclusion +} + +func (p *Pattern) match(path string) (bool, error) { + if p.regexp == nil { + if err := p.compile(); err != nil { + return false, filepath.ErrBadPattern + } + } + + b := p.regexp.MatchString(path) + + return b, nil +} + +func (p *Pattern) compile() error { + regStr := "^" + pattern := p.cleanedPattern + // Go through the pattern and convert it to a regexp. + // We use a scanner so we can support utf-8 chars. + var scan scanner.Scanner + scan.Init(strings.NewReader(pattern)) + + sl := string(os.PathSeparator) + escSL := sl + const bs = `\` + if sl == bs { + escSL += bs + } + + for scan.Peek() != scanner.EOF { + ch := scan.Next() + + if ch == '*' { + if scan.Peek() == '*' { + // is some flavor of "**" + scan.Next() + + // Treat **/ as ** so eat the "/" + if string(scan.Peek()) == sl { + scan.Next() + } + + if scan.Peek() == scanner.EOF { + // is "**EOF" - to align with .gitignore just accept all + regStr += ".*" + } else { + // is "**" + // Note that this allows for any # of /'s (even 0) because + // the .* will eat everything, even /'s + regStr += "(.*" + escSL + ")?" + } + } else { + // is "*" so map it to anything but "/" + regStr += "[^" + escSL + "]*" + } + } else if ch == '?' { + // "?" is any char except "/" + regStr += "[^" + escSL + "]" + } else if ch == '.' || ch == '$' { + // Escape some regexp special chars that have no meaning + // in golang's filepath.Match + regStr += bs + string(ch) + } else if ch == '\\' { + // escape next char. + if sl == bs { + // On windows map "\" to "\\", meaning an escaped backslash, + // and then just continue because filepath.Match on + // Windows doesn't allow escaping at all + regStr += escSL + continue + } + if scan.Peek() != scanner.EOF { + regStr += bs + string(scan.Next()) + } else { + return filepath.ErrBadPattern + } + } else { + regStr += string(ch) + } + } + + regStr += "(" + escSL + ".*)?$" + + re, err := regexp.Compile(regStr) + if err != nil { + return err + } + + p.regexp = re + return nil +} + +// Matches returns true if file matches any of the patterns +// and isn't excluded by any of the subsequent patterns. +func Matches(file string, patterns []string) (bool, error) { + pm, err := NewPatternMatcher(patterns) + if err != nil { + return false, err + } + file = filepath.Clean(file) + + if file == "." { + // Don't let them exclude everything, kind of silly. + return false, nil + } + + return pm.IsMatch(file) +} + +// CopyFile copies from src to dst until either EOF is reached +// on src or an error occurs. It verifies src exists and removes +// the dst if it exists. +func CopyFile(src, dst string) (int64, error) { + cleanSrc := filepath.Clean(src) + cleanDst := filepath.Clean(dst) + if cleanSrc == cleanDst { + return 0, nil + } + sf, err := os.Open(cleanSrc) + if err != nil { + return 0, err + } + defer sf.Close() + if err := os.Remove(cleanDst); err != nil && !os.IsNotExist(err) { + return 0, err + } + df, err := os.Create(cleanDst) + if err != nil { + return 0, err + } + defer df.Close() + return io.Copy(df, sf) +} + +// ReadSymlinkedDirectory returns the target directory of a symlink. +// The target of the symbolic link may not be a file. +func ReadSymlinkedDirectory(path string) (string, error) { + var realPath string + var err error + if realPath, err = filepath.Abs(path); err != nil { + return "", fmt.Errorf("unable to get absolute path for %s: %w", path, err) + } + if realPath, err = filepath.EvalSymlinks(realPath); err != nil { + return "", fmt.Errorf("failed to canonicalise path for %s: %w", path, err) + } + realPathInfo, err := os.Stat(realPath) + if err != nil { + return "", fmt.Errorf("failed to stat target '%s' of '%s': %w", realPath, path, err) + } + if !realPathInfo.Mode().IsDir() { + return "", fmt.Errorf("canonical path points to a file '%s'", realPath) + } + return realPath, nil +} + +// ReadSymlinkedPath returns the target directory of a symlink. +// The target of the symbolic link can be a file and a directory. +func ReadSymlinkedPath(path string) (realPath string, err error) { + if realPath, err = filepath.Abs(path); err != nil { + return "", fmt.Errorf("unable to get absolute path for %q: %w", path, err) + } + if realPath, err = filepath.EvalSymlinks(realPath); err != nil { + return "", fmt.Errorf("failed to canonicalise path for %q: %w", path, err) + } + if err := Exists(realPath); err != nil { + return "", fmt.Errorf("failed to stat target %q of %q: %w", realPath, path, err) + } + return realPath, nil +} + +// CreateIfNotExists creates a file or a directory only if it does not already exist. +func CreateIfNotExists(path string, isDir bool) error { + if err := Exists(path); err != nil { + if os.IsNotExist(err) { + if isDir { + return os.MkdirAll(path, 0o755) + } + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return err + } + f, err := os.OpenFile(path, os.O_CREATE, 0o755) + if err != nil { + return err + } + f.Close() + } + } + return nil +} diff --git a/vendor/github.com/containers/storage/pkg/fileutils/fileutils_darwin.go b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_darwin.go new file mode 100644 index 0000000000..ccd648fac3 --- /dev/null +++ b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_darwin.go @@ -0,0 +1,27 @@ +package fileutils + +import ( + "os" + "os/exec" + "strconv" + "strings" +) + +// GetTotalUsedFds returns the number of used File Descriptors by +// executing `lsof -p PID` +func GetTotalUsedFds() int { + pid := os.Getpid() + + cmd := exec.Command("lsof", "-p", strconv.Itoa(pid)) + + output, err := cmd.CombinedOutput() + if err != nil { + return -1 + } + + outputStr := strings.TrimSpace(string(output)) + + fds := strings.Split(outputStr, "\n") + + return len(fds) - 1 +} diff --git a/vendor/github.com/containers/storage/pkg/fileutils/fileutils_solaris.go b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_solaris.go new file mode 100644 index 0000000000..0f2cb7ab93 --- /dev/null +++ b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_solaris.go @@ -0,0 +1,7 @@ +package fileutils + +// GetTotalUsedFds Returns the number of used File Descriptors. +// On Solaris these limits are per process and not systemwide +func GetTotalUsedFds() int { + return -1 +} diff --git a/vendor/github.com/containers/storage/pkg/fileutils/fileutils_unix.go b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_unix.go new file mode 100644 index 0000000000..92e0263d81 --- /dev/null +++ b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_unix.go @@ -0,0 +1,22 @@ +//go:build linux || freebsd +// +build linux freebsd + +package fileutils + +import ( + "fmt" + "os" + + "github.com/sirupsen/logrus" +) + +// GetTotalUsedFds Returns the number of used File Descriptors by +// reading it via /proc filesystem. +func GetTotalUsedFds() int { + if fds, err := os.ReadDir(fmt.Sprintf("/proc/%d/fd", os.Getpid())); err != nil { + logrus.Errorf("%v", err) + } else { + return len(fds) + } + return -1 +} diff --git a/vendor/github.com/containers/storage/pkg/fileutils/fileutils_windows.go b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_windows.go new file mode 100644 index 0000000000..5ec21cace5 --- /dev/null +++ b/vendor/github.com/containers/storage/pkg/fileutils/fileutils_windows.go @@ -0,0 +1,7 @@ +package fileutils + +// GetTotalUsedFds Returns the number of used File Descriptors. Not supported +// on Windows. +func GetTotalUsedFds() int { + return -1 +} diff --git a/vendor/github.com/containers/storage/pkg/idtools/idtools.go b/vendor/github.com/containers/storage/pkg/idtools/idtools.go index 1e2d5bcc31..ef5a952546 100644 --- a/vendor/github.com/containers/storage/pkg/idtools/idtools.go +++ b/vendor/github.com/containers/storage/pkg/idtools/idtools.go @@ -228,7 +228,7 @@ func getOverflowUID() int { return overflowUID } -// getOverflowUID returns the GID mapped to the overflow user +// getOverflowGID returns the GID mapped to the overflow user func getOverflowGID() int { overflowGIDOnce.Do(func() { // 65534 is the value on older kernels where /proc/sys/kernel/overflowgid is not present diff --git a/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go b/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go index d7cb4ac2fd..7900af38a9 100644 --- a/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go +++ b/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go @@ -13,6 +13,7 @@ import ( "sync" "syscall" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/system" "github.com/moby/sys/user" ) @@ -55,7 +56,7 @@ func mkdirAs(path string, mode os.FileMode, ownerUID, ownerGID int, mkAll, chown if dirPath == "/" { break } - if _, err := os.Stat(dirPath); err != nil && os.IsNotExist(err) { + if err := fileutils.Exists(dirPath); err != nil && os.IsNotExist(err) { paths = append(paths, dirPath) } } diff --git a/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go b/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go index 5dd6741086..5101475786 100644 --- a/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go +++ b/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go @@ -133,11 +133,25 @@ func (l *LockFile) Lock() { } } -// LockRead locks the lockfile as a reader. +// RLock locks the lockfile as a reader. func (l *LockFile) RLock() { l.lock(readLock) } +// TryLock attempts to lock the lockfile as a writer. Panic if the lock is a read-only one. +func (l *LockFile) TryLock() error { + if l.ro { + panic("can't take write lock on read-only lock file") + } else { + return l.tryLock(writeLock) + } +} + +// TryRLock attempts to lock the lockfile as a reader. +func (l *LockFile) TryRLock() error { + return l.tryLock(readLock) +} + // Unlock unlocks the lockfile. func (l *LockFile) Unlock() { l.stateMutex.Lock() @@ -401,9 +415,47 @@ func (l *LockFile) lock(lType lockType) { // Optimization: only use the (expensive) syscall when // the counter is 0. In this case, we're either the first // reader lock or a writer lock. - lockHandle(l.fd, lType) + lockHandle(l.fd, lType, false) + } + l.lockType = lType + l.locked = true + l.counter++ +} + +// lock locks the lockfile via syscall based on the specified type and +// command. +func (l *LockFile) tryLock(lType lockType) error { + var success bool + if lType == readLock { + success = l.rwMutex.TryRLock() + } else { + success = l.rwMutex.TryLock() + } + if !success { + return fmt.Errorf("resource temporarily unavailable") + } + l.stateMutex.Lock() + defer l.stateMutex.Unlock() + if l.counter == 0 { + // If we're the first reference on the lock, we need to open the file again. + fd, err := openLock(l.file, l.ro) + if err != nil { + l.rwMutex.Unlock() + return err + } + l.fd = fd + + // Optimization: only use the (expensive) syscall when + // the counter is 0. In this case, we're either the first + // reader lock or a writer lock. + if err = lockHandle(l.fd, lType, true); err != nil { + closeHandle(fd) + l.rwMutex.Unlock() + return err + } } l.lockType = lType l.locked = true l.counter++ + return nil } diff --git a/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go b/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go index 38e737e265..0eff003bcd 100644 --- a/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go +++ b/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go @@ -74,7 +74,7 @@ func openHandle(path string, mode int) (fileHandle, error) { return fileHandle(fd), err } -func lockHandle(fd fileHandle, lType lockType) { +func lockHandle(fd fileHandle, lType lockType, nonblocking bool) error { fType := unix.F_RDLCK if lType != readLock { fType = unix.F_WRLCK @@ -85,7 +85,15 @@ func lockHandle(fd fileHandle, lType lockType) { Start: 0, Len: 0, } - for unix.FcntlFlock(uintptr(fd), unix.F_SETLKW, &lk) != nil { + cmd := unix.F_SETLKW + if nonblocking { + cmd = unix.F_SETLK + } + for { + err := unix.FcntlFlock(uintptr(fd), cmd, &lk) + if err == nil || nonblocking { + return err + } time.Sleep(10 * time.Millisecond) } } @@ -93,3 +101,7 @@ func lockHandle(fd fileHandle, lType lockType) { func unlockAndCloseHandle(fd fileHandle) { unix.Close(int(fd)) } + +func closeHandle(fd fileHandle) { + unix.Close(int(fd)) +} diff --git a/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go b/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go index 304c92b158..6482529b3e 100644 --- a/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go +++ b/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go @@ -81,19 +81,30 @@ func openHandle(path string, mode int) (fileHandle, error) { return fileHandle(fd), err } -func lockHandle(fd fileHandle, lType lockType) { +func lockHandle(fd fileHandle, lType lockType, nonblocking bool) error { flags := 0 if lType != readLock { flags = windows.LOCKFILE_EXCLUSIVE_LOCK } + if nonblocking { + flags |= windows.LOCKFILE_FAIL_IMMEDIATELY + } ol := new(windows.Overlapped) if err := windows.LockFileEx(windows.Handle(fd), uint32(flags), reserved, allBytes, allBytes, ol); err != nil { + if nonblocking { + return err + } panic(err) } + return nil } func unlockAndCloseHandle(fd fileHandle) { ol := new(windows.Overlapped) windows.UnlockFileEx(windows.Handle(fd), reserved, allBytes, allBytes, ol) + closeHandle(fd) +} + +func closeHandle(fd fileHandle) { windows.Close(windows.Handle(fd)) } diff --git a/vendor/github.com/containers/storage/pkg/unshare/unshare.c b/vendor/github.com/containers/storage/pkg/unshare/unshare.c index f5a7c3a259..a2800654f9 100644 --- a/vendor/github.com/containers/storage/pkg/unshare/unshare.c +++ b/vendor/github.com/containers/storage/pkg/unshare/unshare.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include diff --git a/vendor/github.com/docker/docker/AUTHORS b/vendor/github.com/docker/docker/AUTHORS index 48d04f9a98..36315d429d 100644 --- a/vendor/github.com/docker/docker/AUTHORS +++ b/vendor/github.com/docker/docker/AUTHORS @@ -669,6 +669,7 @@ Erik Hollensbe Erik Inge Bolsø Erik Kristensen Erik Sipsma +Erik Sjölund Erik St. Martin Erik Weathers Erno Hopearuoho @@ -731,6 +732,7 @@ Feroz Salam Ferran Rodenas Filipe Brandenburger Filipe Oliveira +Filipe Pina Flavio Castelli Flavio Crisciani Florian @@ -875,6 +877,8 @@ Hsing-Yu (David) Chen hsinko <21551195@zju.edu.cn> Hu Keping Hu Tao +Huajin Tong +huang-jl <1046678590@qq.com> HuanHuan Ye Huanzhong Zhang Huayi Zhang @@ -969,6 +973,7 @@ Jannick Fahlbusch Januar Wayong Jared Biel Jared Hocutt +Jaroslav Jindrak Jaroslaw Zabiello Jasmine Hegman Jason A. Donenfeld @@ -1012,6 +1017,7 @@ Jeffrey Bolle Jeffrey Morgan Jeffrey van Gogh Jenny Gebske +Jeongseok Kang Jeremy Chambers Jeremy Grosser Jeremy Huntwork @@ -1029,6 +1035,7 @@ Jezeniel Zapanta Jhon Honce Ji.Zhilong Jian Liao +Jian Zeng Jian Zhang Jiang Jinyang Jianyong Wu @@ -1967,6 +1974,7 @@ Sergey Evstifeev Sergii Kabashniuk Sergio Lopez Serhat Gülçiçek +Serhii Nakon SeungUkLee Sevki Hasirci Shane Canon @@ -2253,6 +2261,7 @@ VladimirAus Vladislav Kolesnikov Vlastimil Zeman Vojtech Vitek (V-Teq) +voloder <110066198+voloder@users.noreply.github.com> Walter Leibbrandt Walter Stanish Wang Chao diff --git a/vendor/github.com/docker/docker/api/types/versions/README.md b/vendor/github.com/docker/docker/api/types/versions/README.md deleted file mode 100644 index 1ef911edb0..0000000000 --- a/vendor/github.com/docker/docker/api/types/versions/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Legacy API type versions - -This package includes types for legacy API versions. The stable version of the API types live in `api/types/*.go`. - -Consider moving a type here when you need to keep backwards compatibility in the API. This legacy types are organized by the latest API version they appear in. For instance, types in the `v1p19` package are valid for API versions below or equal `1.19`. Types in the `v1p20` package are valid for the API version `1.20`, since the versions below that will use the legacy types in `v1p19`. - -## Package name conventions - -The package name convention is to use `v` as a prefix for the version number and `p`(patch) as a separator. We use this nomenclature due to a few restrictions in the Go package name convention: - -1. We cannot use `.` because it's interpreted by the language, think of `v1.20.CallFunction`. -2. We cannot use `_` because golint complains about it. The code is actually valid, but it looks probably more weird: `v1_20.CallFunction`. - -For instance, if you want to modify a type that was available in the version `1.21` of the API but it will have different fields in the version `1.22`, you want to create a new package under `api/types/versions/v1p21`. diff --git a/vendor/github.com/docker/docker/pkg/homedir/homedir.go b/vendor/github.com/docker/docker/pkg/homedir/homedir.go index 590683206c..c0ab3f5bf3 100644 --- a/vendor/github.com/docker/docker/pkg/homedir/homedir.go +++ b/vendor/github.com/docker/docker/pkg/homedir/homedir.go @@ -6,14 +6,6 @@ import ( "runtime" ) -// Key returns the env var name for the user's home dir based on -// the platform being run on. -// -// Deprecated: this function is no longer used, and will be removed in the next release. -func Key() string { - return envKeyName -} - // Get returns the home directory of the current user with the help of // environment variables depending on the target operating system. // Returned path should be used with "path/filepath" to form new paths. @@ -34,11 +26,3 @@ func Get() string { } return home } - -// GetShortcutString returns the string that is shortcut to user's home directory -// in the native shell of the platform running on. -// -// Deprecated: this function is no longer used, and will be removed in the next release. -func GetShortcutString() string { - return homeShortCut -} diff --git a/vendor/github.com/docker/docker/pkg/homedir/homedir_unix.go b/vendor/github.com/docker/docker/pkg/homedir/homedir_unix.go deleted file mode 100644 index feae4d736c..0000000000 --- a/vendor/github.com/docker/docker/pkg/homedir/homedir_unix.go +++ /dev/null @@ -1,8 +0,0 @@ -//go:build !windows - -package homedir // import "github.com/docker/docker/pkg/homedir" - -const ( - envKeyName = "HOME" - homeShortCut = "~" -) diff --git a/vendor/github.com/docker/docker/pkg/homedir/homedir_windows.go b/vendor/github.com/docker/docker/pkg/homedir/homedir_windows.go deleted file mode 100644 index 37f4ee6701..0000000000 --- a/vendor/github.com/docker/docker/pkg/homedir/homedir_windows.go +++ /dev/null @@ -1,6 +0,0 @@ -package homedir // import "github.com/docker/docker/pkg/homedir" - -const ( - envKeyName = "USERPROFILE" - homeShortCut = "%USERPROFILE%" // be careful while using in format functions -) diff --git a/vendor/github.com/fatih/color/color.go b/vendor/github.com/fatih/color/color.go index 81094e87c5..c4234287dc 100644 --- a/vendor/github.com/fatih/color/color.go +++ b/vendor/github.com/fatih/color/color.go @@ -269,7 +269,7 @@ func (c *Color) Printf(format string, a ...interface{}) (n int, err error) { // On Windows, users should wrap w with colorable.NewColorable() if w is of // type *os.File. func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprintln(w, c.wrap(sprintln(a...))) + return fmt.Fprintln(w, c.wrap(fmt.Sprint(a...))) } // Println formats using the default formats for its operands and writes to @@ -278,7 +278,7 @@ func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { // encountered. This is the standard fmt.Print() method wrapped with the given // color. func (c *Color) Println(a ...interface{}) (n int, err error) { - return fmt.Fprintln(Output, c.wrap(sprintln(a...))) + return fmt.Fprintln(Output, c.wrap(fmt.Sprint(a...))) } // Sprint is just like Print, but returns a string instead of printing it. @@ -288,7 +288,7 @@ func (c *Color) Sprint(a ...interface{}) string { // Sprintln is just like Println, but returns a string instead of printing it. func (c *Color) Sprintln(a ...interface{}) string { - return c.wrap(sprintln(a...)) + "\n" + return fmt.Sprintln(c.Sprint(a...)) } // Sprintf is just like Printf, but returns a string instead of printing it. @@ -370,7 +370,7 @@ func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { // string. Windows users should use this in conjunction with color.Output. func (c *Color) SprintlnFunc() func(a ...interface{}) string { return func(a ...interface{}) string { - return c.wrap(sprintln(a...)) + "\n" + return fmt.Sprintln(c.Sprint(a...)) } } @@ -648,8 +648,3 @@ func HiCyanString(format string, a ...interface{}) string { return colorString(f func HiWhiteString(format string, a ...interface{}) string { return colorString(format, FgHiWhite, a...) } - -// sprintln is a helper function to format a string with fmt.Sprintln and trim the trailing newline. -func sprintln(a ...interface{}) string { - return strings.TrimSuffix(fmt.Sprintln(a...), "\n") -} diff --git a/vendor/github.com/go-openapi/jsonpointer/pointer.go b/vendor/github.com/go-openapi/jsonpointer/pointer.go index d975773d49..d970c7cf44 100644 --- a/vendor/github.com/go-openapi/jsonpointer/pointer.go +++ b/vendor/github.com/go-openapi/jsonpointer/pointer.go @@ -264,7 +264,7 @@ func (p *Pointer) set(node, data any, nameProvider *swag.NameProvider) error { knd := reflect.ValueOf(node).Kind() if knd != reflect.Ptr && knd != reflect.Struct && knd != reflect.Map && knd != reflect.Slice && knd != reflect.Array { - return fmt.Errorf("only structs, pointers, maps and slices are supported for setting values") + return errors.New("only structs, pointers, maps and slices are supported for setting values") } if nameProvider == nil { diff --git a/vendor/github.com/go-openapi/swag/string_bytes.go b/vendor/github.com/go-openapi/swag/string_bytes.go index c52d6bf719..90745d5ca9 100644 --- a/vendor/github.com/go-openapi/swag/string_bytes.go +++ b/vendor/github.com/go-openapi/swag/string_bytes.go @@ -2,21 +2,7 @@ package swag import "unsafe" -type internalString struct { - Data unsafe.Pointer - Len int -} - // hackStringBytes returns the (unsafe) underlying bytes slice of a string. -func hackStringBytes(str string) []byte { - p := (*internalString)(unsafe.Pointer(&str)).Data - return unsafe.Slice((*byte)(p), len(str)) -} - -/* - * go1.20 version (for when go mod moves to a go1.20 requirement): - func hackStringBytes(str string) []byte { return unsafe.Slice(unsafe.StringData(str), len(str)) } -*/ diff --git a/vendor/github.com/hashicorp/errwrap/LICENSE b/vendor/github.com/hashicorp/errwrap/LICENSE deleted file mode 100644 index c33dcc7c92..0000000000 --- a/vendor/github.com/hashicorp/errwrap/LICENSE +++ /dev/null @@ -1,354 +0,0 @@ -Mozilla Public License, version 2.0 - -1. Definitions - -1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - -1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - -1.3. “Contribution” - - means Covered Software of a particular Contributor. - -1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - -1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - -1.6. “Executable Form” - - means any form of the work other than Source Code Form. - -1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - -1.8. “License” - - means this document. - -1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - -1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - -1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - -1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - -1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - -2. License Grants and Conditions - -2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - -2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - -2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - -2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - -2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - -2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - -2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - -3. Responsibilities - -3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - -3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - -3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - -8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - -10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - -10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, then -You may include the notice in a location (such as a LICENSE file in a relevant -directory) where a recipient would be likely to look for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - diff --git a/vendor/github.com/hashicorp/errwrap/README.md b/vendor/github.com/hashicorp/errwrap/README.md deleted file mode 100644 index 444df08f8e..0000000000 --- a/vendor/github.com/hashicorp/errwrap/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# errwrap - -`errwrap` is a package for Go that formalizes the pattern of wrapping errors -and checking if an error contains another error. - -There is a common pattern in Go of taking a returned `error` value and -then wrapping it (such as with `fmt.Errorf`) before returning it. The problem -with this pattern is that you completely lose the original `error` structure. - -Arguably the _correct_ approach is that you should make a custom structure -implementing the `error` interface, and have the original error as a field -on that structure, such [as this example](http://golang.org/pkg/os/#PathError). -This is a good approach, but you have to know the entire chain of possible -rewrapping that happens, when you might just care about one. - -`errwrap` formalizes this pattern (it doesn't matter what approach you use -above) by giving a single interface for wrapping errors, checking if a specific -error is wrapped, and extracting that error. - -## Installation and Docs - -Install using `go get github.com/hashicorp/errwrap`. - -Full documentation is available at -http://godoc.org/github.com/hashicorp/errwrap - -## Usage - -#### Basic Usage - -Below is a very basic example of its usage: - -```go -// A function that always returns an error, but wraps it, like a real -// function might. -func tryOpen() error { - _, err := os.Open("/i/dont/exist") - if err != nil { - return errwrap.Wrapf("Doesn't exist: {{err}}", err) - } - - return nil -} - -func main() { - err := tryOpen() - - // We can use the Contains helpers to check if an error contains - // another error. It is safe to do this with a nil error, or with - // an error that doesn't even use the errwrap package. - if errwrap.Contains(err, "does not exist") { - // Do something - } - if errwrap.ContainsType(err, new(os.PathError)) { - // Do something - } - - // Or we can use the associated `Get` functions to just extract - // a specific error. This would return nil if that specific error doesn't - // exist. - perr := errwrap.GetType(err, new(os.PathError)) -} -``` - -#### Custom Types - -If you're already making custom types that properly wrap errors, then -you can get all the functionality of `errwraps.Contains` and such by -implementing the `Wrapper` interface with just one function. Example: - -```go -type AppError { - Code ErrorCode - Err error -} - -func (e *AppError) WrappedErrors() []error { - return []error{e.Err} -} -``` - -Now this works: - -```go -err := &AppError{Err: fmt.Errorf("an error")} -if errwrap.ContainsType(err, fmt.Errorf("")) { - // This will work! -} -``` diff --git a/vendor/github.com/hashicorp/errwrap/errwrap.go b/vendor/github.com/hashicorp/errwrap/errwrap.go deleted file mode 100644 index 44e368e569..0000000000 --- a/vendor/github.com/hashicorp/errwrap/errwrap.go +++ /dev/null @@ -1,178 +0,0 @@ -// Package errwrap implements methods to formalize error wrapping in Go. -// -// All of the top-level functions that take an `error` are built to be able -// to take any error, not just wrapped errors. This allows you to use errwrap -// without having to type-check and type-cast everywhere. -package errwrap - -import ( - "errors" - "reflect" - "strings" -) - -// WalkFunc is the callback called for Walk. -type WalkFunc func(error) - -// Wrapper is an interface that can be implemented by custom types to -// have all the Contains, Get, etc. functions in errwrap work. -// -// When Walk reaches a Wrapper, it will call the callback for every -// wrapped error in addition to the wrapper itself. Since all the top-level -// functions in errwrap use Walk, this means that all those functions work -// with your custom type. -type Wrapper interface { - WrappedErrors() []error -} - -// Wrap defines that outer wraps inner, returning an error type that -// can be cleanly used with the other methods in this package, such as -// Contains, GetAll, etc. -// -// This function won't modify the error message at all (the outer message -// will be used). -func Wrap(outer, inner error) error { - return &wrappedError{ - Outer: outer, - Inner: inner, - } -} - -// Wrapf wraps an error with a formatting message. This is similar to using -// `fmt.Errorf` to wrap an error. If you're using `fmt.Errorf` to wrap -// errors, you should replace it with this. -// -// format is the format of the error message. The string '{{err}}' will -// be replaced with the original error message. -// -// Deprecated: Use fmt.Errorf() -func Wrapf(format string, err error) error { - outerMsg := "" - if err != nil { - outerMsg = err.Error() - } - - outer := errors.New(strings.Replace( - format, "{{err}}", outerMsg, -1)) - - return Wrap(outer, err) -} - -// Contains checks if the given error contains an error with the -// message msg. If err is not a wrapped error, this will always return -// false unless the error itself happens to match this msg. -func Contains(err error, msg string) bool { - return len(GetAll(err, msg)) > 0 -} - -// ContainsType checks if the given error contains an error with -// the same concrete type as v. If err is not a wrapped error, this will -// check the err itself. -func ContainsType(err error, v interface{}) bool { - return len(GetAllType(err, v)) > 0 -} - -// Get is the same as GetAll but returns the deepest matching error. -func Get(err error, msg string) error { - es := GetAll(err, msg) - if len(es) > 0 { - return es[len(es)-1] - } - - return nil -} - -// GetType is the same as GetAllType but returns the deepest matching error. -func GetType(err error, v interface{}) error { - es := GetAllType(err, v) - if len(es) > 0 { - return es[len(es)-1] - } - - return nil -} - -// GetAll gets all the errors that might be wrapped in err with the -// given message. The order of the errors is such that the outermost -// matching error (the most recent wrap) is index zero, and so on. -func GetAll(err error, msg string) []error { - var result []error - - Walk(err, func(err error) { - if err.Error() == msg { - result = append(result, err) - } - }) - - return result -} - -// GetAllType gets all the errors that are the same type as v. -// -// The order of the return value is the same as described in GetAll. -func GetAllType(err error, v interface{}) []error { - var result []error - - var search string - if v != nil { - search = reflect.TypeOf(v).String() - } - Walk(err, func(err error) { - var needle string - if err != nil { - needle = reflect.TypeOf(err).String() - } - - if needle == search { - result = append(result, err) - } - }) - - return result -} - -// Walk walks all the wrapped errors in err and calls the callback. If -// err isn't a wrapped error, this will be called once for err. If err -// is a wrapped error, the callback will be called for both the wrapper -// that implements error as well as the wrapped error itself. -func Walk(err error, cb WalkFunc) { - if err == nil { - return - } - - switch e := err.(type) { - case *wrappedError: - cb(e.Outer) - Walk(e.Inner, cb) - case Wrapper: - cb(err) - - for _, err := range e.WrappedErrors() { - Walk(err, cb) - } - case interface{ Unwrap() error }: - cb(err) - Walk(e.Unwrap(), cb) - default: - cb(err) - } -} - -// wrappedError is an implementation of error that has both the -// outer and inner errors. -type wrappedError struct { - Outer error - Inner error -} - -func (w *wrappedError) Error() string { - return w.Outer.Error() -} - -func (w *wrappedError) WrappedErrors() []error { - return []error{w.Outer, w.Inner} -} - -func (w *wrappedError) Unwrap() error { - return w.Inner -} diff --git a/vendor/github.com/hashicorp/go-multierror/LICENSE b/vendor/github.com/hashicorp/go-multierror/LICENSE deleted file mode 100644 index 82b4de97c7..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/LICENSE +++ /dev/null @@ -1,353 +0,0 @@ -Mozilla Public License, version 2.0 - -1. Definitions - -1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - -1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - -1.3. “Contribution” - - means Covered Software of a particular Contributor. - -1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - -1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - -1.6. “Executable Form” - - means any form of the work other than Source Code Form. - -1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - -1.8. “License” - - means this document. - -1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - -1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - -1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - -1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - -1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - -2. License Grants and Conditions - -2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - -2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - -2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - -2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - -2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - -2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - -2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - -3. Responsibilities - -3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - -3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - -3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - -8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - -10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - -10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, then -You may include the notice in a location (such as a LICENSE file in a relevant -directory) where a recipient would be likely to look for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. diff --git a/vendor/github.com/hashicorp/go-multierror/Makefile b/vendor/github.com/hashicorp/go-multierror/Makefile deleted file mode 100644 index b97cd6ed02..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -TEST?=./... - -default: test - -# test runs the test suite and vets the code. -test: generate - @echo "==> Running tests..." - @go list $(TEST) \ - | grep -v "/vendor/" \ - | xargs -n1 go test -timeout=60s -parallel=10 ${TESTARGS} - -# testrace runs the race checker -testrace: generate - @echo "==> Running tests (race)..." - @go list $(TEST) \ - | grep -v "/vendor/" \ - | xargs -n1 go test -timeout=60s -race ${TESTARGS} - -# updatedeps installs all the dependencies needed to run and build. -updatedeps: - @sh -c "'${CURDIR}/scripts/deps.sh' '${NAME}'" - -# generate runs `go generate` to build the dynamically generated source files. -generate: - @echo "==> Generating..." - @find . -type f -name '.DS_Store' -delete - @go list ./... \ - | grep -v "/vendor/" \ - | xargs -n1 go generate - -.PHONY: default test testrace updatedeps generate diff --git a/vendor/github.com/hashicorp/go-multierror/README.md b/vendor/github.com/hashicorp/go-multierror/README.md deleted file mode 100644 index 71dd308ed8..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# go-multierror - -[![CircleCI](https://img.shields.io/circleci/build/github/hashicorp/go-multierror/master)](https://circleci.com/gh/hashicorp/go-multierror) -[![Go Reference](https://pkg.go.dev/badge/github.com/hashicorp/go-multierror.svg)](https://pkg.go.dev/github.com/hashicorp/go-multierror) -![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/hashicorp/go-multierror) - -[circleci]: https://app.circleci.com/pipelines/github/hashicorp/go-multierror -[godocs]: https://pkg.go.dev/github.com/hashicorp/go-multierror - -`go-multierror` is a package for Go that provides a mechanism for -representing a list of `error` values as a single `error`. - -This allows a function in Go to return an `error` that might actually -be a list of errors. If the caller knows this, they can unwrap the -list and access the errors. If the caller doesn't know, the error -formats to a nice human-readable format. - -`go-multierror` is fully compatible with the Go standard library -[errors](https://golang.org/pkg/errors/) package, including the -functions `As`, `Is`, and `Unwrap`. This provides a standardized approach -for introspecting on error values. - -## Installation and Docs - -Install using `go get github.com/hashicorp/go-multierror`. - -Full documentation is available at -https://pkg.go.dev/github.com/hashicorp/go-multierror - -### Requires go version 1.13 or newer - -`go-multierror` requires go version 1.13 or newer. Go 1.13 introduced -[error wrapping](https://golang.org/doc/go1.13#error_wrapping), which -this library takes advantage of. - -If you need to use an earlier version of go, you can use the -[v1.0.0](https://github.com/hashicorp/go-multierror/tree/v1.0.0) -tag, which doesn't rely on features in go 1.13. - -If you see compile errors that look like the below, it's likely that -you're on an older version of go: - -``` -/go/src/github.com/hashicorp/go-multierror/multierror.go:112:9: undefined: errors.As -/go/src/github.com/hashicorp/go-multierror/multierror.go:117:9: undefined: errors.Is -``` - -## Usage - -go-multierror is easy to use and purposely built to be unobtrusive in -existing Go applications/libraries that may not be aware of it. - -**Building a list of errors** - -The `Append` function is used to create a list of errors. This function -behaves a lot like the Go built-in `append` function: it doesn't matter -if the first argument is nil, a `multierror.Error`, or any other `error`, -the function behaves as you would expect. - -```go -var result error - -if err := step1(); err != nil { - result = multierror.Append(result, err) -} -if err := step2(); err != nil { - result = multierror.Append(result, err) -} - -return result -``` - -**Customizing the formatting of the errors** - -By specifying a custom `ErrorFormat`, you can customize the format -of the `Error() string` function: - -```go -var result *multierror.Error - -// ... accumulate errors here, maybe using Append - -if result != nil { - result.ErrorFormat = func([]error) string { - return "errors!" - } -} -``` - -**Accessing the list of errors** - -`multierror.Error` implements `error` so if the caller doesn't know about -multierror, it will work just fine. But if you're aware a multierror might -be returned, you can use type switches to access the list of errors: - -```go -if err := something(); err != nil { - if merr, ok := err.(*multierror.Error); ok { - // Use merr.Errors - } -} -``` - -You can also use the standard [`errors.Unwrap`](https://golang.org/pkg/errors/#Unwrap) -function. This will continue to unwrap into subsequent errors until none exist. - -**Extracting an error** - -The standard library [`errors.As`](https://golang.org/pkg/errors/#As) -function can be used directly with a multierror to extract a specific error: - -```go -// Assume err is a multierror value -err := somefunc() - -// We want to know if "err" has a "RichErrorType" in it and extract it. -var errRich RichErrorType -if errors.As(err, &errRich) { - // It has it, and now errRich is populated. -} -``` - -**Checking for an exact error value** - -Some errors are returned as exact errors such as the [`ErrNotExist`](https://golang.org/pkg/os/#pkg-variables) -error in the `os` package. You can check if this error is present by using -the standard [`errors.Is`](https://golang.org/pkg/errors/#Is) function. - -```go -// Assume err is a multierror value -err := somefunc() -if errors.Is(err, os.ErrNotExist) { - // err contains os.ErrNotExist -} -``` - -**Returning a multierror only if there are errors** - -If you build a `multierror.Error`, you can use the `ErrorOrNil` function -to return an `error` implementation only if there are errors to return: - -```go -var result *multierror.Error - -// ... accumulate errors here - -// Return the `error` only if errors were added to the multierror, otherwise -// return nil since there are no errors. -return result.ErrorOrNil() -``` diff --git a/vendor/github.com/hashicorp/go-multierror/append.go b/vendor/github.com/hashicorp/go-multierror/append.go deleted file mode 100644 index 3e2589bfde..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/append.go +++ /dev/null @@ -1,43 +0,0 @@ -package multierror - -// Append is a helper function that will append more errors -// onto an Error in order to create a larger multi-error. -// -// If err is not a multierror.Error, then it will be turned into -// one. If any of the errs are multierr.Error, they will be flattened -// one level into err. -// Any nil errors within errs will be ignored. If err is nil, a new -// *Error will be returned. -func Append(err error, errs ...error) *Error { - switch err := err.(type) { - case *Error: - // Typed nils can reach here, so initialize if we are nil - if err == nil { - err = new(Error) - } - - // Go through each error and flatten - for _, e := range errs { - switch e := e.(type) { - case *Error: - if e != nil { - err.Errors = append(err.Errors, e.Errors...) - } - default: - if e != nil { - err.Errors = append(err.Errors, e) - } - } - } - - return err - default: - newErrs := make([]error, 0, len(errs)+1) - if err != nil { - newErrs = append(newErrs, err) - } - newErrs = append(newErrs, errs...) - - return Append(&Error{}, newErrs...) - } -} diff --git a/vendor/github.com/hashicorp/go-multierror/flatten.go b/vendor/github.com/hashicorp/go-multierror/flatten.go deleted file mode 100644 index aab8e9abec..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/flatten.go +++ /dev/null @@ -1,26 +0,0 @@ -package multierror - -// Flatten flattens the given error, merging any *Errors together into -// a single *Error. -func Flatten(err error) error { - // If it isn't an *Error, just return the error as-is - if _, ok := err.(*Error); !ok { - return err - } - - // Otherwise, make the result and flatten away! - flatErr := new(Error) - flatten(err, flatErr) - return flatErr -} - -func flatten(err error, flatErr *Error) { - switch err := err.(type) { - case *Error: - for _, e := range err.Errors { - flatten(e, flatErr) - } - default: - flatErr.Errors = append(flatErr.Errors, err) - } -} diff --git a/vendor/github.com/hashicorp/go-multierror/format.go b/vendor/github.com/hashicorp/go-multierror/format.go deleted file mode 100644 index 47f13c49a6..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/format.go +++ /dev/null @@ -1,27 +0,0 @@ -package multierror - -import ( - "fmt" - "strings" -) - -// ErrorFormatFunc is a function callback that is called by Error to -// turn the list of errors into a string. -type ErrorFormatFunc func([]error) string - -// ListFormatFunc is a basic formatter that outputs the number of errors -// that occurred along with a bullet point list of the errors. -func ListFormatFunc(es []error) string { - if len(es) == 1 { - return fmt.Sprintf("1 error occurred:\n\t* %s\n\n", es[0]) - } - - points := make([]string, len(es)) - for i, err := range es { - points[i] = fmt.Sprintf("* %s", err) - } - - return fmt.Sprintf( - "%d errors occurred:\n\t%s\n\n", - len(es), strings.Join(points, "\n\t")) -} diff --git a/vendor/github.com/hashicorp/go-multierror/group.go b/vendor/github.com/hashicorp/go-multierror/group.go deleted file mode 100644 index 9c29efb7f8..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/group.go +++ /dev/null @@ -1,38 +0,0 @@ -package multierror - -import "sync" - -// Group is a collection of goroutines which return errors that need to be -// coalesced. -type Group struct { - mutex sync.Mutex - err *Error - wg sync.WaitGroup -} - -// Go calls the given function in a new goroutine. -// -// If the function returns an error it is added to the group multierror which -// is returned by Wait. -func (g *Group) Go(f func() error) { - g.wg.Add(1) - - go func() { - defer g.wg.Done() - - if err := f(); err != nil { - g.mutex.Lock() - g.err = Append(g.err, err) - g.mutex.Unlock() - } - }() -} - -// Wait blocks until all function calls from the Go method have returned, then -// returns the multierror. -func (g *Group) Wait() *Error { - g.wg.Wait() - g.mutex.Lock() - defer g.mutex.Unlock() - return g.err -} diff --git a/vendor/github.com/hashicorp/go-multierror/multierror.go b/vendor/github.com/hashicorp/go-multierror/multierror.go deleted file mode 100644 index f545743264..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/multierror.go +++ /dev/null @@ -1,121 +0,0 @@ -package multierror - -import ( - "errors" - "fmt" -) - -// Error is an error type to track multiple errors. This is used to -// accumulate errors in cases and return them as a single "error". -type Error struct { - Errors []error - ErrorFormat ErrorFormatFunc -} - -func (e *Error) Error() string { - fn := e.ErrorFormat - if fn == nil { - fn = ListFormatFunc - } - - return fn(e.Errors) -} - -// ErrorOrNil returns an error interface if this Error represents -// a list of errors, or returns nil if the list of errors is empty. This -// function is useful at the end of accumulation to make sure that the value -// returned represents the existence of errors. -func (e *Error) ErrorOrNil() error { - if e == nil { - return nil - } - if len(e.Errors) == 0 { - return nil - } - - return e -} - -func (e *Error) GoString() string { - return fmt.Sprintf("*%#v", *e) -} - -// WrappedErrors returns the list of errors that this Error is wrapping. It is -// an implementation of the errwrap.Wrapper interface so that multierror.Error -// can be used with that library. -// -// This method is not safe to be called concurrently. Unlike accessing the -// Errors field directly, this function also checks if the multierror is nil to -// prevent a null-pointer panic. It satisfies the errwrap.Wrapper interface. -func (e *Error) WrappedErrors() []error { - if e == nil { - return nil - } - return e.Errors -} - -// Unwrap returns an error from Error (or nil if there are no errors). -// This error returned will further support Unwrap to get the next error, -// etc. The order will match the order of Errors in the multierror.Error -// at the time of calling. -// -// The resulting error supports errors.As/Is/Unwrap so you can continue -// to use the stdlib errors package to introspect further. -// -// This will perform a shallow copy of the errors slice. Any errors appended -// to this error after calling Unwrap will not be available until a new -// Unwrap is called on the multierror.Error. -func (e *Error) Unwrap() error { - // If we have no errors then we do nothing - if e == nil || len(e.Errors) == 0 { - return nil - } - - // If we have exactly one error, we can just return that directly. - if len(e.Errors) == 1 { - return e.Errors[0] - } - - // Shallow copy the slice - errs := make([]error, len(e.Errors)) - copy(errs, e.Errors) - return chain(errs) -} - -// chain implements the interfaces necessary for errors.Is/As/Unwrap to -// work in a deterministic way with multierror. A chain tracks a list of -// errors while accounting for the current represented error. This lets -// Is/As be meaningful. -// -// Unwrap returns the next error. In the cleanest form, Unwrap would return -// the wrapped error here but we can't do that if we want to properly -// get access to all the errors. Instead, users are recommended to use -// Is/As to get the correct error type out. -// -// Precondition: []error is non-empty (len > 0) -type chain []error - -// Error implements the error interface -func (e chain) Error() string { - return e[0].Error() -} - -// Unwrap implements errors.Unwrap by returning the next error in the -// chain or nil if there are no more errors. -func (e chain) Unwrap() error { - if len(e) == 1 { - return nil - } - - return e[1:] -} - -// As implements errors.As by attempting to map to the current value. -func (e chain) As(target interface{}) bool { - return errors.As(e[0], target) -} - -// Is implements errors.Is by comparing the current value directly. -func (e chain) Is(target error) bool { - return errors.Is(e[0], target) -} diff --git a/vendor/github.com/hashicorp/go-multierror/prefix.go b/vendor/github.com/hashicorp/go-multierror/prefix.go deleted file mode 100644 index 5c477abe44..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/prefix.go +++ /dev/null @@ -1,37 +0,0 @@ -package multierror - -import ( - "fmt" - - "github.com/hashicorp/errwrap" -) - -// Prefix is a helper function that will prefix some text -// to the given error. If the error is a multierror.Error, then -// it will be prefixed to each wrapped error. -// -// This is useful to use when appending multiple multierrors -// together in order to give better scoping. -func Prefix(err error, prefix string) error { - if err == nil { - return nil - } - - format := fmt.Sprintf("%s {{err}}", prefix) - switch err := err.(type) { - case *Error: - // Typed nils can reach here, so initialize if we are nil - if err == nil { - err = new(Error) - } - - // Wrap each of the errors - for i, e := range err.Errors { - err.Errors[i] = errwrap.Wrapf(format, e) - } - - return err - default: - return errwrap.Wrapf(format, err) - } -} diff --git a/vendor/github.com/hashicorp/go-multierror/sort.go b/vendor/github.com/hashicorp/go-multierror/sort.go deleted file mode 100644 index fecb14e81c..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/sort.go +++ /dev/null @@ -1,16 +0,0 @@ -package multierror - -// Len implements sort.Interface function for length -func (err Error) Len() int { - return len(err.Errors) -} - -// Swap implements sort.Interface function for swapping elements -func (err Error) Swap(i, j int) { - err.Errors[i], err.Errors[j] = err.Errors[j], err.Errors[i] -} - -// Less implements sort.Interface function for determining order -func (err Error) Less(i, j int) bool { - return err.Errors[i].Error() < err.Errors[j].Error() -} diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index 1f72cdde18..05c7359e48 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -55,6 +55,10 @@ https://github.com/klauspost/compress/pull/919 https://github.com/klauspost/comp * s2: Do 2 overlapping match checks https://github.com/klauspost/compress/pull/839 * flate: Add amd64 assembly matchlen https://github.com/klauspost/compress/pull/837 * gzip: Copy bufio.Reader on Reset by @thatguystone in https://github.com/klauspost/compress/pull/860 + +
+ See changes to v1.16.x + * July 1st, 2023 - [v1.16.7](https://github.com/klauspost/compress/releases/tag/v1.16.7) * zstd: Fix default level first dictionary encode https://github.com/klauspost/compress/pull/829 @@ -93,6 +97,7 @@ https://github.com/klauspost/compress/pull/919 https://github.com/klauspost/comp * s2: Add LZ4 block converter. https://github.com/klauspost/compress/pull/748 * s2: Support io.ReaderAt in ReadSeeker. https://github.com/klauspost/compress/pull/747 * s2c/s2sx: Use concurrent decoding. https://github.com/klauspost/compress/pull/746 +
See changes to v1.15.x @@ -560,6 +565,8 @@ the stateless compress described below. For compression performance, see: [this spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing). +To disable all assembly add `-tags=noasm`. This works across all packages. + # Stateless compression This package offers stateless compression as a special option for gzip/deflate. diff --git a/vendor/github.com/klauspost/compress/flate/deflate.go b/vendor/github.com/klauspost/compress/flate/deflate.go deleted file mode 100644 index 66d1657d2c..0000000000 --- a/vendor/github.com/klauspost/compress/flate/deflate.go +++ /dev/null @@ -1,1017 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Copyright (c) 2015 Klaus Post -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "errors" - "fmt" - "io" - "math" -) - -const ( - NoCompression = 0 - BestSpeed = 1 - BestCompression = 9 - DefaultCompression = -1 - - // HuffmanOnly disables Lempel-Ziv match searching and only performs Huffman - // entropy encoding. This mode is useful in compressing data that has - // already been compressed with an LZ style algorithm (e.g. Snappy or LZ4) - // that lacks an entropy encoder. Compression gains are achieved when - // certain bytes in the input stream occur more frequently than others. - // - // Note that HuffmanOnly produces a compressed output that is - // RFC 1951 compliant. That is, any valid DEFLATE decompressor will - // continue to be able to decompress this output. - HuffmanOnly = -2 - ConstantCompression = HuffmanOnly // compatibility alias. - - logWindowSize = 15 - windowSize = 1 << logWindowSize - windowMask = windowSize - 1 - logMaxOffsetSize = 15 // Standard DEFLATE - minMatchLength = 4 // The smallest match that the compressor looks for - maxMatchLength = 258 // The longest match for the compressor - minOffsetSize = 1 // The shortest offset that makes any sense - - // The maximum number of tokens we will encode at the time. - // Smaller sizes usually creates less optimal blocks. - // Bigger can make context switching slow. - // We use this for levels 7-9, so we make it big. - maxFlateBlockTokens = 1 << 15 - maxStoreBlockSize = 65535 - hashBits = 17 // After 17 performance degrades - hashSize = 1 << hashBits - hashMask = (1 << hashBits) - 1 - hashShift = (hashBits + minMatchLength - 1) / minMatchLength - maxHashOffset = 1 << 28 - - skipNever = math.MaxInt32 - - debugDeflate = false -) - -type compressionLevel struct { - good, lazy, nice, chain, fastSkipHashing, level int -} - -// Compression levels have been rebalanced from zlib deflate defaults -// to give a bigger spread in speed and compression. -// See https://blog.klauspost.com/rebalancing-deflate-compression-levels/ -var levels = []compressionLevel{ - {}, // 0 - // Level 1-6 uses specialized algorithm - values not used - {0, 0, 0, 0, 0, 1}, - {0, 0, 0, 0, 0, 2}, - {0, 0, 0, 0, 0, 3}, - {0, 0, 0, 0, 0, 4}, - {0, 0, 0, 0, 0, 5}, - {0, 0, 0, 0, 0, 6}, - // Levels 7-9 use increasingly more lazy matching - // and increasingly stringent conditions for "good enough". - {8, 12, 16, 24, skipNever, 7}, - {16, 30, 40, 64, skipNever, 8}, - {32, 258, 258, 1024, skipNever, 9}, -} - -// advancedState contains state for the advanced levels, with bigger hash tables, etc. -type advancedState struct { - // deflate state - length int - offset int - maxInsertIndex int - chainHead int - hashOffset int - - ii uint16 // position of last match, intended to overflow to reset. - - // input window: unprocessed data is window[index:windowEnd] - index int - hashMatch [maxMatchLength + minMatchLength]uint32 - - // Input hash chains - // hashHead[hashValue] contains the largest inputIndex with the specified hash value - // If hashHead[hashValue] is within the current window, then - // hashPrev[hashHead[hashValue] & windowMask] contains the previous index - // with the same hash value. - hashHead [hashSize]uint32 - hashPrev [windowSize]uint32 -} - -type compressor struct { - compressionLevel - - h *huffmanEncoder - w *huffmanBitWriter - - // compression algorithm - fill func(*compressor, []byte) int // copy data to window - step func(*compressor) // process window - - window []byte - windowEnd int - blockStart int // window index where current tokens start - err error - - // queued output tokens - tokens tokens - fast fastEnc - state *advancedState - - sync bool // requesting flush - byteAvailable bool // if true, still need to process window[index-1]. -} - -func (d *compressor) fillDeflate(b []byte) int { - s := d.state - if s.index >= 2*windowSize-(minMatchLength+maxMatchLength) { - // shift the window by windowSize - //copy(d.window[:], d.window[windowSize:2*windowSize]) - *(*[windowSize]byte)(d.window) = *(*[windowSize]byte)(d.window[windowSize:]) - s.index -= windowSize - d.windowEnd -= windowSize - if d.blockStart >= windowSize { - d.blockStart -= windowSize - } else { - d.blockStart = math.MaxInt32 - } - s.hashOffset += windowSize - if s.hashOffset > maxHashOffset { - delta := s.hashOffset - 1 - s.hashOffset -= delta - s.chainHead -= delta - // Iterate over slices instead of arrays to avoid copying - // the entire table onto the stack (Issue #18625). - for i, v := range s.hashPrev[:] { - if int(v) > delta { - s.hashPrev[i] = uint32(int(v) - delta) - } else { - s.hashPrev[i] = 0 - } - } - for i, v := range s.hashHead[:] { - if int(v) > delta { - s.hashHead[i] = uint32(int(v) - delta) - } else { - s.hashHead[i] = 0 - } - } - } - } - n := copy(d.window[d.windowEnd:], b) - d.windowEnd += n - return n -} - -func (d *compressor) writeBlock(tok *tokens, index int, eof bool) error { - if index > 0 || eof { - var window []byte - if d.blockStart <= index { - window = d.window[d.blockStart:index] - } - d.blockStart = index - //d.w.writeBlock(tok, eof, window) - d.w.writeBlockDynamic(tok, eof, window, d.sync) - return d.w.err - } - return nil -} - -// writeBlockSkip writes the current block and uses the number of tokens -// to determine if the block should be stored on no matches, or -// only huffman encoded. -func (d *compressor) writeBlockSkip(tok *tokens, index int, eof bool) error { - if index > 0 || eof { - if d.blockStart <= index { - window := d.window[d.blockStart:index] - // If we removed less than a 64th of all literals - // we huffman compress the block. - if int(tok.n) > len(window)-int(tok.n>>6) { - d.w.writeBlockHuff(eof, window, d.sync) - } else { - // Write a dynamic huffman block. - d.w.writeBlockDynamic(tok, eof, window, d.sync) - } - } else { - d.w.writeBlock(tok, eof, nil) - } - d.blockStart = index - return d.w.err - } - return nil -} - -// fillWindow will fill the current window with the supplied -// dictionary and calculate all hashes. -// This is much faster than doing a full encode. -// Should only be used after a start/reset. -func (d *compressor) fillWindow(b []byte) { - // Do not fill window if we are in store-only or huffman mode. - if d.level <= 0 && d.level > -MinCustomWindowSize { - return - } - if d.fast != nil { - // encode the last data, but discard the result - if len(b) > maxMatchOffset { - b = b[len(b)-maxMatchOffset:] - } - d.fast.Encode(&d.tokens, b) - d.tokens.Reset() - return - } - s := d.state - // If we are given too much, cut it. - if len(b) > windowSize { - b = b[len(b)-windowSize:] - } - // Add all to window. - n := copy(d.window[d.windowEnd:], b) - - // Calculate 256 hashes at the time (more L1 cache hits) - loops := (n + 256 - minMatchLength) / 256 - for j := 0; j < loops; j++ { - startindex := j * 256 - end := startindex + 256 + minMatchLength - 1 - if end > n { - end = n - } - tocheck := d.window[startindex:end] - dstSize := len(tocheck) - minMatchLength + 1 - - if dstSize <= 0 { - continue - } - - dst := s.hashMatch[:dstSize] - bulkHash4(tocheck, dst) - var newH uint32 - for i, val := range dst { - di := i + startindex - newH = val & hashMask - // Get previous value with the same hash. - // Our chain should point to the previous value. - s.hashPrev[di&windowMask] = s.hashHead[newH] - // Set the head of the hash chain to us. - s.hashHead[newH] = uint32(di + s.hashOffset) - } - } - // Update window information. - d.windowEnd += n - s.index = n -} - -// Try to find a match starting at index whose length is greater than prevSize. -// We only look at chainCount possibilities before giving up. -// pos = s.index, prevHead = s.chainHead-s.hashOffset, prevLength=minMatchLength-1, lookahead -func (d *compressor) findMatch(pos int, prevHead int, lookahead int) (length, offset int, ok bool) { - minMatchLook := maxMatchLength - if lookahead < minMatchLook { - minMatchLook = lookahead - } - - win := d.window[0 : pos+minMatchLook] - - // We quit when we get a match that's at least nice long - nice := len(win) - pos - if d.nice < nice { - nice = d.nice - } - - // If we've got a match that's good enough, only look in 1/4 the chain. - tries := d.chain - length = minMatchLength - 1 - - wEnd := win[pos+length] - wPos := win[pos:] - minIndex := pos - windowSize - if minIndex < 0 { - minIndex = 0 - } - offset = 0 - - if d.chain < 100 { - for i := prevHead; tries > 0; tries-- { - if wEnd == win[i+length] { - n := matchLen(win[i:i+minMatchLook], wPos) - if n > length { - length = n - offset = pos - i - ok = true - if n >= nice { - // The match is good enough that we don't try to find a better one. - break - } - wEnd = win[pos+n] - } - } - if i <= minIndex { - // hashPrev[i & windowMask] has already been overwritten, so stop now. - break - } - i = int(d.state.hashPrev[i&windowMask]) - d.state.hashOffset - if i < minIndex { - break - } - } - return - } - - // Minimum gain to accept a match. - cGain := 4 - - // Some like it higher (CSV), some like it lower (JSON) - const baseCost = 3 - // Base is 4 bytes at with an additional cost. - // Matches must be better than this. - - for i := prevHead; tries > 0; tries-- { - if wEnd == win[i+length] { - n := matchLen(win[i:i+minMatchLook], wPos) - if n > length { - // Calculate gain. Estimate - newGain := d.h.bitLengthRaw(wPos[:n]) - int(offsetExtraBits[offsetCode(uint32(pos-i))]) - baseCost - int(lengthExtraBits[lengthCodes[(n-3)&255]]) - - //fmt.Println("gain:", newGain, "prev:", cGain, "raw:", d.h.bitLengthRaw(wPos[:n]), "this-len:", n, "prev-len:", length) - if newGain > cGain { - length = n - offset = pos - i - cGain = newGain - ok = true - if n >= nice { - // The match is good enough that we don't try to find a better one. - break - } - wEnd = win[pos+n] - } - } - } - if i <= minIndex { - // hashPrev[i & windowMask] has already been overwritten, so stop now. - break - } - i = int(d.state.hashPrev[i&windowMask]) - d.state.hashOffset - if i < minIndex { - break - } - } - return -} - -func (d *compressor) writeStoredBlock(buf []byte) error { - if d.w.writeStoredHeader(len(buf), false); d.w.err != nil { - return d.w.err - } - d.w.writeBytes(buf) - return d.w.err -} - -// hash4 returns a hash representation of the first 4 bytes -// of the supplied slice. -// The caller must ensure that len(b) >= 4. -func hash4(b []byte) uint32 { - return hash4u(binary.LittleEndian.Uint32(b), hashBits) -} - -// hash4 returns the hash of u to fit in a hash table with h bits. -// Preferably h should be a constant and should always be <32. -func hash4u(u uint32, h uint8) uint32 { - return (u * prime4bytes) >> (32 - h) -} - -// bulkHash4 will compute hashes using the same -// algorithm as hash4 -func bulkHash4(b []byte, dst []uint32) { - if len(b) < 4 { - return - } - hb := binary.LittleEndian.Uint32(b) - - dst[0] = hash4u(hb, hashBits) - end := len(b) - 4 + 1 - for i := 1; i < end; i++ { - hb = (hb >> 8) | uint32(b[i+3])<<24 - dst[i] = hash4u(hb, hashBits) - } -} - -func (d *compressor) initDeflate() { - d.window = make([]byte, 2*windowSize) - d.byteAvailable = false - d.err = nil - if d.state == nil { - return - } - s := d.state - s.index = 0 - s.hashOffset = 1 - s.length = minMatchLength - 1 - s.offset = 0 - s.chainHead = -1 -} - -// deflateLazy is the same as deflate, but with d.fastSkipHashing == skipNever, -// meaning it always has lazy matching on. -func (d *compressor) deflateLazy() { - s := d.state - // Sanity enables additional runtime tests. - // It's intended to be used during development - // to supplement the currently ad-hoc unit tests. - const sanity = debugDeflate - - if d.windowEnd-s.index < minMatchLength+maxMatchLength && !d.sync { - return - } - if d.windowEnd != s.index && d.chain > 100 { - // Get literal huffman coder. - if d.h == nil { - d.h = newHuffmanEncoder(maxFlateBlockTokens) - } - var tmp [256]uint16 - for _, v := range d.window[s.index:d.windowEnd] { - tmp[v]++ - } - d.h.generate(tmp[:], 15) - } - - s.maxInsertIndex = d.windowEnd - (minMatchLength - 1) - - for { - if sanity && s.index > d.windowEnd { - panic("index > windowEnd") - } - lookahead := d.windowEnd - s.index - if lookahead < minMatchLength+maxMatchLength { - if !d.sync { - return - } - if sanity && s.index > d.windowEnd { - panic("index > windowEnd") - } - if lookahead == 0 { - // Flush current output block if any. - if d.byteAvailable { - // There is still one pending token that needs to be flushed - d.tokens.AddLiteral(d.window[s.index-1]) - d.byteAvailable = false - } - if d.tokens.n > 0 { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - return - } - } - if s.index < s.maxInsertIndex { - // Update the hash - hash := hash4(d.window[s.index:]) - ch := s.hashHead[hash] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[hash] = uint32(s.index + s.hashOffset) - } - prevLength := s.length - prevOffset := s.offset - s.length = minMatchLength - 1 - s.offset = 0 - minIndex := s.index - windowSize - if minIndex < 0 { - minIndex = 0 - } - - if s.chainHead-s.hashOffset >= minIndex && lookahead > prevLength && prevLength < d.lazy { - if newLength, newOffset, ok := d.findMatch(s.index, s.chainHead-s.hashOffset, lookahead); ok { - s.length = newLength - s.offset = newOffset - } - } - - if prevLength >= minMatchLength && s.length <= prevLength { - // No better match, but check for better match at end... - // - // Skip forward a number of bytes. - // Offset of 2 seems to yield best results. 3 is sometimes better. - const checkOff = 2 - - // Check all, except full length - if prevLength < maxMatchLength-checkOff { - prevIndex := s.index - 1 - if prevIndex+prevLength < s.maxInsertIndex { - end := lookahead - if lookahead > maxMatchLength+checkOff { - end = maxMatchLength + checkOff - } - end += prevIndex - - // Hash at match end. - h := hash4(d.window[prevIndex+prevLength:]) - ch2 := int(s.hashHead[h]) - s.hashOffset - prevLength - if prevIndex-ch2 != prevOffset && ch2 > minIndex+checkOff { - length := matchLen(d.window[prevIndex+checkOff:end], d.window[ch2+checkOff:]) - // It seems like a pure length metric is best. - if length > prevLength { - prevLength = length - prevOffset = prevIndex - ch2 - - // Extend back... - for i := checkOff - 1; i >= 0; i-- { - if prevLength >= maxMatchLength || d.window[prevIndex+i] != d.window[ch2+i] { - // Emit tokens we "owe" - for j := 0; j <= i; j++ { - d.tokens.AddLiteral(d.window[prevIndex+j]) - if d.tokens.n == maxFlateBlockTokens { - // The block includes the current character - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.index++ - if s.index < s.maxInsertIndex { - h := hash4(d.window[s.index:]) - ch := s.hashHead[h] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[h] = uint32(s.index + s.hashOffset) - } - } - break - } else { - prevLength++ - } - } - } else if false { - // Check one further ahead. - // Only rarely better, disabled for now. - prevIndex++ - h := hash4(d.window[prevIndex+prevLength:]) - ch2 := int(s.hashHead[h]) - s.hashOffset - prevLength - if prevIndex-ch2 != prevOffset && ch2 > minIndex+checkOff { - length := matchLen(d.window[prevIndex+checkOff:end], d.window[ch2+checkOff:]) - // It seems like a pure length metric is best. - if length > prevLength+checkOff { - prevLength = length - prevOffset = prevIndex - ch2 - prevIndex-- - - // Extend back... - for i := checkOff; i >= 0; i-- { - if prevLength >= maxMatchLength || d.window[prevIndex+i] != d.window[ch2+i-1] { - // Emit tokens we "owe" - for j := 0; j <= i; j++ { - d.tokens.AddLiteral(d.window[prevIndex+j]) - if d.tokens.n == maxFlateBlockTokens { - // The block includes the current character - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.index++ - if s.index < s.maxInsertIndex { - h := hash4(d.window[s.index:]) - ch := s.hashHead[h] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[h] = uint32(s.index + s.hashOffset) - } - } - break - } else { - prevLength++ - } - } - } - } - } - } - } - } - // There was a match at the previous step, and the current match is - // not better. Output the previous match. - d.tokens.AddMatch(uint32(prevLength-3), uint32(prevOffset-minOffsetSize)) - - // Insert in the hash table all strings up to the end of the match. - // index and index-1 are already inserted. If there is not enough - // lookahead, the last two strings are not inserted into the hash - // table. - newIndex := s.index + prevLength - 1 - // Calculate missing hashes - end := newIndex - if end > s.maxInsertIndex { - end = s.maxInsertIndex - } - end += minMatchLength - 1 - startindex := s.index + 1 - if startindex > s.maxInsertIndex { - startindex = s.maxInsertIndex - } - tocheck := d.window[startindex:end] - dstSize := len(tocheck) - minMatchLength + 1 - if dstSize > 0 { - dst := s.hashMatch[:dstSize] - bulkHash4(tocheck, dst) - var newH uint32 - for i, val := range dst { - di := i + startindex - newH = val & hashMask - // Get previous value with the same hash. - // Our chain should point to the previous value. - s.hashPrev[di&windowMask] = s.hashHead[newH] - // Set the head of the hash chain to us. - s.hashHead[newH] = uint32(di + s.hashOffset) - } - } - - s.index = newIndex - d.byteAvailable = false - s.length = minMatchLength - 1 - if d.tokens.n == maxFlateBlockTokens { - // The block includes the current character - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.ii = 0 - } else { - // Reset, if we got a match this run. - if s.length >= minMatchLength { - s.ii = 0 - } - // We have a byte waiting. Emit it. - if d.byteAvailable { - s.ii++ - d.tokens.AddLiteral(d.window[s.index-1]) - if d.tokens.n == maxFlateBlockTokens { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.index++ - - // If we have a long run of no matches, skip additional bytes - // Resets when s.ii overflows after 64KB. - if n := int(s.ii) - d.chain; n > 0 { - n = 1 + int(n>>6) - for j := 0; j < n; j++ { - if s.index >= d.windowEnd-1 { - break - } - d.tokens.AddLiteral(d.window[s.index-1]) - if d.tokens.n == maxFlateBlockTokens { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - // Index... - if s.index < s.maxInsertIndex { - h := hash4(d.window[s.index:]) - ch := s.hashHead[h] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[h] = uint32(s.index + s.hashOffset) - } - s.index++ - } - // Flush last byte - d.tokens.AddLiteral(d.window[s.index-1]) - d.byteAvailable = false - // s.length = minMatchLength - 1 // not needed, since s.ii is reset above, so it should never be > minMatchLength - if d.tokens.n == maxFlateBlockTokens { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - } - } else { - s.index++ - d.byteAvailable = true - } - } - } -} - -func (d *compressor) store() { - if d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) { - d.err = d.writeStoredBlock(d.window[:d.windowEnd]) - d.windowEnd = 0 - } -} - -// fillWindow will fill the buffer with data for huffman-only compression. -// The number of bytes copied is returned. -func (d *compressor) fillBlock(b []byte) int { - n := copy(d.window[d.windowEnd:], b) - d.windowEnd += n - return n -} - -// storeHuff will compress and store the currently added data, -// if enough has been accumulated or we at the end of the stream. -// Any error that occurred will be in d.err -func (d *compressor) storeHuff() { - if d.windowEnd < len(d.window) && !d.sync || d.windowEnd == 0 { - return - } - d.w.writeBlockHuff(false, d.window[:d.windowEnd], d.sync) - d.err = d.w.err - d.windowEnd = 0 -} - -// storeFast will compress and store the currently added data, -// if enough has been accumulated or we at the end of the stream. -// Any error that occurred will be in d.err -func (d *compressor) storeFast() { - // We only compress if we have maxStoreBlockSize. - if d.windowEnd < len(d.window) { - if !d.sync { - return - } - // Handle extremely small sizes. - if d.windowEnd < 128 { - if d.windowEnd == 0 { - return - } - if d.windowEnd <= 32 { - d.err = d.writeStoredBlock(d.window[:d.windowEnd]) - } else { - d.w.writeBlockHuff(false, d.window[:d.windowEnd], true) - d.err = d.w.err - } - d.tokens.Reset() - d.windowEnd = 0 - d.fast.Reset() - return - } - } - - d.fast.Encode(&d.tokens, d.window[:d.windowEnd]) - // If we made zero matches, store the block as is. - if d.tokens.n == 0 { - d.err = d.writeStoredBlock(d.window[:d.windowEnd]) - // If we removed less than 1/16th, huffman compress the block. - } else if int(d.tokens.n) > d.windowEnd-(d.windowEnd>>4) { - d.w.writeBlockHuff(false, d.window[:d.windowEnd], d.sync) - d.err = d.w.err - } else { - d.w.writeBlockDynamic(&d.tokens, false, d.window[:d.windowEnd], d.sync) - d.err = d.w.err - } - d.tokens.Reset() - d.windowEnd = 0 -} - -// write will add input byte to the stream. -// Unless an error occurs all bytes will be consumed. -func (d *compressor) write(b []byte) (n int, err error) { - if d.err != nil { - return 0, d.err - } - n = len(b) - for len(b) > 0 { - if d.windowEnd == len(d.window) || d.sync { - d.step(d) - } - b = b[d.fill(d, b):] - if d.err != nil { - return 0, d.err - } - } - return n, d.err -} - -func (d *compressor) syncFlush() error { - d.sync = true - if d.err != nil { - return d.err - } - d.step(d) - if d.err == nil { - d.w.writeStoredHeader(0, false) - d.w.flush() - d.err = d.w.err - } - d.sync = false - return d.err -} - -func (d *compressor) init(w io.Writer, level int) (err error) { - d.w = newHuffmanBitWriter(w) - - switch { - case level == NoCompression: - d.window = make([]byte, maxStoreBlockSize) - d.fill = (*compressor).fillBlock - d.step = (*compressor).store - case level == ConstantCompression: - d.w.logNewTablePenalty = 10 - d.window = make([]byte, 32<<10) - d.fill = (*compressor).fillBlock - d.step = (*compressor).storeHuff - case level == DefaultCompression: - level = 5 - fallthrough - case level >= 1 && level <= 6: - d.w.logNewTablePenalty = 7 - d.fast = newFastEnc(level) - d.window = make([]byte, maxStoreBlockSize) - d.fill = (*compressor).fillBlock - d.step = (*compressor).storeFast - case 7 <= level && level <= 9: - d.w.logNewTablePenalty = 8 - d.state = &advancedState{} - d.compressionLevel = levels[level] - d.initDeflate() - d.fill = (*compressor).fillDeflate - d.step = (*compressor).deflateLazy - case -level >= MinCustomWindowSize && -level <= MaxCustomWindowSize: - d.w.logNewTablePenalty = 7 - d.fast = &fastEncL5Window{maxOffset: int32(-level), cur: maxStoreBlockSize} - d.window = make([]byte, maxStoreBlockSize) - d.fill = (*compressor).fillBlock - d.step = (*compressor).storeFast - default: - return fmt.Errorf("flate: invalid compression level %d: want value in range [-2, 9]", level) - } - d.level = level - return nil -} - -// reset the state of the compressor. -func (d *compressor) reset(w io.Writer) { - d.w.reset(w) - d.sync = false - d.err = nil - // We only need to reset a few things for Snappy. - if d.fast != nil { - d.fast.Reset() - d.windowEnd = 0 - d.tokens.Reset() - return - } - switch d.compressionLevel.chain { - case 0: - // level was NoCompression or ConstantCompresssion. - d.windowEnd = 0 - default: - s := d.state - s.chainHead = -1 - for i := range s.hashHead { - s.hashHead[i] = 0 - } - for i := range s.hashPrev { - s.hashPrev[i] = 0 - } - s.hashOffset = 1 - s.index, d.windowEnd = 0, 0 - d.blockStart, d.byteAvailable = 0, false - d.tokens.Reset() - s.length = minMatchLength - 1 - s.offset = 0 - s.ii = 0 - s.maxInsertIndex = 0 - } -} - -func (d *compressor) close() error { - if d.err != nil { - return d.err - } - d.sync = true - d.step(d) - if d.err != nil { - return d.err - } - if d.w.writeStoredHeader(0, true); d.w.err != nil { - return d.w.err - } - d.w.flush() - d.w.reset(nil) - return d.w.err -} - -// NewWriter returns a new Writer compressing data at the given level. -// Following zlib, levels range from 1 (BestSpeed) to 9 (BestCompression); -// higher levels typically run slower but compress more. -// Level 0 (NoCompression) does not attempt any compression; it only adds the -// necessary DEFLATE framing. -// Level -1 (DefaultCompression) uses the default compression level. -// Level -2 (ConstantCompression) will use Huffman compression only, giving -// a very fast compression for all types of input, but sacrificing considerable -// compression efficiency. -// -// If level is in the range [-2, 9] then the error returned will be nil. -// Otherwise the error returned will be non-nil. -func NewWriter(w io.Writer, level int) (*Writer, error) { - var dw Writer - if err := dw.d.init(w, level); err != nil { - return nil, err - } - return &dw, nil -} - -// NewWriterDict is like NewWriter but initializes the new -// Writer with a preset dictionary. The returned Writer behaves -// as if the dictionary had been written to it without producing -// any compressed output. The compressed data written to w -// can only be decompressed by a Reader initialized with the -// same dictionary. -func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) { - zw, err := NewWriter(w, level) - if err != nil { - return nil, err - } - zw.d.fillWindow(dict) - zw.dict = append(zw.dict, dict...) // duplicate dictionary for Reset method. - return zw, err -} - -// MinCustomWindowSize is the minimum window size that can be sent to NewWriterWindow. -const MinCustomWindowSize = 32 - -// MaxCustomWindowSize is the maximum custom window that can be sent to NewWriterWindow. -const MaxCustomWindowSize = windowSize - -// NewWriterWindow returns a new Writer compressing data with a custom window size. -// windowSize must be from MinCustomWindowSize to MaxCustomWindowSize. -func NewWriterWindow(w io.Writer, windowSize int) (*Writer, error) { - if windowSize < MinCustomWindowSize { - return nil, errors.New("flate: requested window size less than MinWindowSize") - } - if windowSize > MaxCustomWindowSize { - return nil, errors.New("flate: requested window size bigger than MaxCustomWindowSize") - } - var dw Writer - if err := dw.d.init(w, -windowSize); err != nil { - return nil, err - } - return &dw, nil -} - -// A Writer takes data written to it and writes the compressed -// form of that data to an underlying writer (see NewWriter). -type Writer struct { - d compressor - dict []byte -} - -// Write writes data to w, which will eventually write the -// compressed form of data to its underlying writer. -func (w *Writer) Write(data []byte) (n int, err error) { - return w.d.write(data) -} - -// Flush flushes any pending data to the underlying writer. -// It is useful mainly in compressed network protocols, to ensure that -// a remote reader has enough data to reconstruct a packet. -// Flush does not return until the data has been written. -// Calling Flush when there is no pending data still causes the Writer -// to emit a sync marker of at least 4 bytes. -// If the underlying writer returns an error, Flush returns that error. -// -// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH. -func (w *Writer) Flush() error { - // For more about flushing: - // http://www.bolet.org/~pornin/deflate-flush.html - return w.d.syncFlush() -} - -// Close flushes and closes the writer. -func (w *Writer) Close() error { - return w.d.close() -} - -// Reset discards the writer's state and makes it equivalent to -// the result of NewWriter or NewWriterDict called with dst -// and w's level and dictionary. -func (w *Writer) Reset(dst io.Writer) { - if len(w.dict) > 0 { - // w was created with NewWriterDict - w.d.reset(dst) - if dst != nil { - w.d.fillWindow(w.dict) - } - } else { - // w was created with NewWriter - w.d.reset(dst) - } -} - -// ResetDict discards the writer's state and makes it equivalent to -// the result of NewWriter or NewWriterDict called with dst -// and w's level, but sets a specific dictionary. -func (w *Writer) ResetDict(dst io.Writer, dict []byte) { - w.dict = dict - w.d.reset(dst) - w.d.fillWindow(w.dict) -} diff --git a/vendor/github.com/klauspost/compress/flate/dict_decoder.go b/vendor/github.com/klauspost/compress/flate/dict_decoder.go deleted file mode 100644 index bb36351a5a..0000000000 --- a/vendor/github.com/klauspost/compress/flate/dict_decoder.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -// dictDecoder implements the LZ77 sliding dictionary as used in decompression. -// LZ77 decompresses data through sequences of two forms of commands: -// -// - Literal insertions: Runs of one or more symbols are inserted into the data -// stream as is. This is accomplished through the writeByte method for a -// single symbol, or combinations of writeSlice/writeMark for multiple symbols. -// Any valid stream must start with a literal insertion if no preset dictionary -// is used. -// -// - Backward copies: Runs of one or more symbols are copied from previously -// emitted data. Backward copies come as the tuple (dist, length) where dist -// determines how far back in the stream to copy from and length determines how -// many bytes to copy. Note that it is valid for the length to be greater than -// the distance. Since LZ77 uses forward copies, that situation is used to -// perform a form of run-length encoding on repeated runs of symbols. -// The writeCopy and tryWriteCopy are used to implement this command. -// -// For performance reasons, this implementation performs little to no sanity -// checks about the arguments. As such, the invariants documented for each -// method call must be respected. -type dictDecoder struct { - hist []byte // Sliding window history - - // Invariant: 0 <= rdPos <= wrPos <= len(hist) - wrPos int // Current output position in buffer - rdPos int // Have emitted hist[:rdPos] already - full bool // Has a full window length been written yet? -} - -// init initializes dictDecoder to have a sliding window dictionary of the given -// size. If a preset dict is provided, it will initialize the dictionary with -// the contents of dict. -func (dd *dictDecoder) init(size int, dict []byte) { - *dd = dictDecoder{hist: dd.hist} - - if cap(dd.hist) < size { - dd.hist = make([]byte, size) - } - dd.hist = dd.hist[:size] - - if len(dict) > len(dd.hist) { - dict = dict[len(dict)-len(dd.hist):] - } - dd.wrPos = copy(dd.hist, dict) - if dd.wrPos == len(dd.hist) { - dd.wrPos = 0 - dd.full = true - } - dd.rdPos = dd.wrPos -} - -// histSize reports the total amount of historical data in the dictionary. -func (dd *dictDecoder) histSize() int { - if dd.full { - return len(dd.hist) - } - return dd.wrPos -} - -// availRead reports the number of bytes that can be flushed by readFlush. -func (dd *dictDecoder) availRead() int { - return dd.wrPos - dd.rdPos -} - -// availWrite reports the available amount of output buffer space. -func (dd *dictDecoder) availWrite() int { - return len(dd.hist) - dd.wrPos -} - -// writeSlice returns a slice of the available buffer to write data to. -// -// This invariant will be kept: len(s) <= availWrite() -func (dd *dictDecoder) writeSlice() []byte { - return dd.hist[dd.wrPos:] -} - -// writeMark advances the writer pointer by cnt. -// -// This invariant must be kept: 0 <= cnt <= availWrite() -func (dd *dictDecoder) writeMark(cnt int) { - dd.wrPos += cnt -} - -// writeByte writes a single byte to the dictionary. -// -// This invariant must be kept: 0 < availWrite() -func (dd *dictDecoder) writeByte(c byte) { - dd.hist[dd.wrPos] = c - dd.wrPos++ -} - -// writeCopy copies a string at a given (dist, length) to the output. -// This returns the number of bytes copied and may be less than the requested -// length if the available space in the output buffer is too small. -// -// This invariant must be kept: 0 < dist <= histSize() -func (dd *dictDecoder) writeCopy(dist, length int) int { - dstBase := dd.wrPos - dstPos := dstBase - srcPos := dstPos - dist - endPos := dstPos + length - if endPos > len(dd.hist) { - endPos = len(dd.hist) - } - - // Copy non-overlapping section after destination position. - // - // This section is non-overlapping in that the copy length for this section - // is always less than or equal to the backwards distance. This can occur - // if a distance refers to data that wraps-around in the buffer. - // Thus, a backwards copy is performed here; that is, the exact bytes in - // the source prior to the copy is placed in the destination. - if srcPos < 0 { - srcPos += len(dd.hist) - dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:]) - srcPos = 0 - } - - // Copy possibly overlapping section before destination position. - // - // This section can overlap if the copy length for this section is larger - // than the backwards distance. This is allowed by LZ77 so that repeated - // strings can be succinctly represented using (dist, length) pairs. - // Thus, a forwards copy is performed here; that is, the bytes copied is - // possibly dependent on the resulting bytes in the destination as the copy - // progresses along. This is functionally equivalent to the following: - // - // for i := 0; i < endPos-dstPos; i++ { - // dd.hist[dstPos+i] = dd.hist[srcPos+i] - // } - // dstPos = endPos - // - for dstPos < endPos { - dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos]) - } - - dd.wrPos = dstPos - return dstPos - dstBase -} - -// tryWriteCopy tries to copy a string at a given (distance, length) to the -// output. This specialized version is optimized for short distances. -// -// This method is designed to be inlined for performance reasons. -// -// This invariant must be kept: 0 < dist <= histSize() -func (dd *dictDecoder) tryWriteCopy(dist, length int) int { - dstPos := dd.wrPos - endPos := dstPos + length - if dstPos < dist || endPos > len(dd.hist) { - return 0 - } - dstBase := dstPos - srcPos := dstPos - dist - - // Copy possibly overlapping section before destination position. -loop: - dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos]) - if dstPos < endPos { - goto loop // Avoid for-loop so that this function can be inlined - } - - dd.wrPos = dstPos - return dstPos - dstBase -} - -// readFlush returns a slice of the historical buffer that is ready to be -// emitted to the user. The data returned by readFlush must be fully consumed -// before calling any other dictDecoder methods. -func (dd *dictDecoder) readFlush() []byte { - toRead := dd.hist[dd.rdPos:dd.wrPos] - dd.rdPos = dd.wrPos - if dd.wrPos == len(dd.hist) { - dd.wrPos, dd.rdPos = 0, 0 - dd.full = true - } - return toRead -} diff --git a/vendor/github.com/klauspost/compress/flate/fast_encoder.go b/vendor/github.com/klauspost/compress/flate/fast_encoder.go deleted file mode 100644 index c8124b5c49..0000000000 --- a/vendor/github.com/klauspost/compress/flate/fast_encoder.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2011 The Snappy-Go Authors. All rights reserved. -// Modified for deflate by Klaus Post (c) 2015. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "fmt" -) - -type fastEnc interface { - Encode(dst *tokens, src []byte) - Reset() -} - -func newFastEnc(level int) fastEnc { - switch level { - case 1: - return &fastEncL1{fastGen: fastGen{cur: maxStoreBlockSize}} - case 2: - return &fastEncL2{fastGen: fastGen{cur: maxStoreBlockSize}} - case 3: - return &fastEncL3{fastGen: fastGen{cur: maxStoreBlockSize}} - case 4: - return &fastEncL4{fastGen: fastGen{cur: maxStoreBlockSize}} - case 5: - return &fastEncL5{fastGen: fastGen{cur: maxStoreBlockSize}} - case 6: - return &fastEncL6{fastGen: fastGen{cur: maxStoreBlockSize}} - default: - panic("invalid level specified") - } -} - -const ( - tableBits = 15 // Bits used in the table - tableSize = 1 << tableBits // Size of the table - tableShift = 32 - tableBits // Right-shift to get the tableBits most significant bits of a uint32. - baseMatchOffset = 1 // The smallest match offset - baseMatchLength = 3 // The smallest match length per the RFC section 3.2.5 - maxMatchOffset = 1 << 15 // The largest match offset - - bTableBits = 17 // Bits used in the big tables - bTableSize = 1 << bTableBits // Size of the table - allocHistory = maxStoreBlockSize * 5 // Size to preallocate for history. - bufferReset = (1 << 31) - allocHistory - maxStoreBlockSize - 1 // Reset the buffer offset when reaching this. -) - -const ( - prime3bytes = 506832829 - prime4bytes = 2654435761 - prime5bytes = 889523592379 - prime6bytes = 227718039650203 - prime7bytes = 58295818150454627 - prime8bytes = 0xcf1bbcdcb7a56463 -) - -func load3232(b []byte, i int32) uint32 { - return binary.LittleEndian.Uint32(b[i:]) -} - -func load6432(b []byte, i int32) uint64 { - return binary.LittleEndian.Uint64(b[i:]) -} - -type tableEntry struct { - offset int32 -} - -// fastGen maintains the table for matches, -// and the previous byte block for level 2. -// This is the generic implementation. -type fastGen struct { - hist []byte - cur int32 -} - -func (e *fastGen) addBlock(src []byte) int32 { - // check if we have space already - if len(e.hist)+len(src) > cap(e.hist) { - if cap(e.hist) == 0 { - e.hist = make([]byte, 0, allocHistory) - } else { - if cap(e.hist) < maxMatchOffset*2 { - panic("unexpected buffer size") - } - // Move down - offset := int32(len(e.hist)) - maxMatchOffset - // copy(e.hist[0:maxMatchOffset], e.hist[offset:]) - *(*[maxMatchOffset]byte)(e.hist) = *(*[maxMatchOffset]byte)(e.hist[offset:]) - e.cur += offset - e.hist = e.hist[:maxMatchOffset] - } - } - s := int32(len(e.hist)) - e.hist = append(e.hist, src...) - return s -} - -type tableEntryPrev struct { - Cur tableEntry - Prev tableEntry -} - -// hash7 returns the hash of the lowest 7 bytes of u to fit in a hash table with h bits. -// Preferably h should be a constant and should always be <64. -func hash7(u uint64, h uint8) uint32 { - return uint32(((u << (64 - 56)) * prime7bytes) >> ((64 - h) & reg8SizeMask64)) -} - -// hashLen returns a hash of the lowest mls bytes of with length output bits. -// mls must be >=3 and <=8. Any other value will return hash for 4 bytes. -// length should always be < 32. -// Preferably length and mls should be a constant for inlining. -func hashLen(u uint64, length, mls uint8) uint32 { - switch mls { - case 3: - return (uint32(u<<8) * prime3bytes) >> (32 - length) - case 5: - return uint32(((u << (64 - 40)) * prime5bytes) >> (64 - length)) - case 6: - return uint32(((u << (64 - 48)) * prime6bytes) >> (64 - length)) - case 7: - return uint32(((u << (64 - 56)) * prime7bytes) >> (64 - length)) - case 8: - return uint32((u * prime8bytes) >> (64 - length)) - default: - return (uint32(u) * prime4bytes) >> (32 - length) - } -} - -// matchlen will return the match length between offsets and t in src. -// The maximum length returned is maxMatchLength - 4. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastGen) matchlen(s, t int32, src []byte) int32 { - if debugDecode { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > maxMatchOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - s1 := int(s) + maxMatchLength - 4 - if s1 > len(src) { - s1 = len(src) - } - - // Extend the match to be as long as possible. - return int32(matchLen(src[s:s1], src[t:])) -} - -// matchlenLong will return the match length between offsets and t in src. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastGen) matchlenLong(s, t int32, src []byte) int32 { - if debugDeflate { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > maxMatchOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - // Extend the match to be as long as possible. - return int32(matchLen(src[s:], src[t:])) -} - -// Reset the encoding table. -func (e *fastGen) Reset() { - if cap(e.hist) < allocHistory { - e.hist = make([]byte, 0, allocHistory) - } - // We offset current position so everything will be out of reach. - // If we are above the buffer reset it will be cleared anyway since len(hist) == 0. - if e.cur <= bufferReset { - e.cur += maxMatchOffset + int32(len(e.hist)) - } - e.hist = e.hist[:0] -} diff --git a/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go b/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go deleted file mode 100644 index f70594c34e..0000000000 --- a/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go +++ /dev/null @@ -1,1182 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "fmt" - "io" - "math" -) - -const ( - // The largest offset code. - offsetCodeCount = 30 - - // The special code used to mark the end of a block. - endBlockMarker = 256 - - // The first length code. - lengthCodesStart = 257 - - // The number of codegen codes. - codegenCodeCount = 19 - badCode = 255 - - // maxPredefinedTokens is the maximum number of tokens - // where we check if fixed size is smaller. - maxPredefinedTokens = 250 - - // bufferFlushSize indicates the buffer size - // after which bytes are flushed to the writer. - // Should preferably be a multiple of 6, since - // we accumulate 6 bytes between writes to the buffer. - bufferFlushSize = 246 -) - -// Minimum length code that emits bits. -const lengthExtraBitsMinCode = 8 - -// The number of extra bits needed by length code X - LENGTH_CODES_START. -var lengthExtraBits = [32]uint8{ - /* 257 */ 0, 0, 0, - /* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, - /* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, - /* 280 */ 4, 5, 5, 5, 5, 0, -} - -// The length indicated by length code X - LENGTH_CODES_START. -var lengthBase = [32]uint8{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, - 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, - 64, 80, 96, 112, 128, 160, 192, 224, 255, -} - -// Minimum offset code that emits bits. -const offsetExtraBitsMinCode = 4 - -// offset code word extra bits. -var offsetExtraBits = [32]int8{ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, - 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, - /* extended window */ - 14, 14, -} - -var offsetCombined = [32]uint32{} - -func init() { - var offsetBase = [32]uint32{ - /* normal deflate */ - 0x000000, 0x000001, 0x000002, 0x000003, 0x000004, - 0x000006, 0x000008, 0x00000c, 0x000010, 0x000018, - 0x000020, 0x000030, 0x000040, 0x000060, 0x000080, - 0x0000c0, 0x000100, 0x000180, 0x000200, 0x000300, - 0x000400, 0x000600, 0x000800, 0x000c00, 0x001000, - 0x001800, 0x002000, 0x003000, 0x004000, 0x006000, - - /* extended window */ - 0x008000, 0x00c000, - } - - for i := range offsetCombined[:] { - // Don't use extended window values... - if offsetExtraBits[i] == 0 || offsetBase[i] > 0x006000 { - continue - } - offsetCombined[i] = uint32(offsetExtraBits[i]) | (offsetBase[i] << 8) - } -} - -// The odd order in which the codegen code sizes are written. -var codegenOrder = []uint32{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} - -type huffmanBitWriter struct { - // writer is the underlying writer. - // Do not use it directly; use the write method, which ensures - // that Write errors are sticky. - writer io.Writer - - // Data waiting to be written is bytes[0:nbytes] - // and then the low nbits of bits. - bits uint64 - nbits uint8 - nbytes uint8 - lastHuffMan bool - literalEncoding *huffmanEncoder - tmpLitEncoding *huffmanEncoder - offsetEncoding *huffmanEncoder - codegenEncoding *huffmanEncoder - err error - lastHeader int - // Set between 0 (reused block can be up to 2x the size) - logNewTablePenalty uint - bytes [256 + 8]byte - literalFreq [lengthCodesStart + 32]uint16 - offsetFreq [32]uint16 - codegenFreq [codegenCodeCount]uint16 - - // codegen must have an extra space for the final symbol. - codegen [literalCount + offsetCodeCount + 1]uint8 -} - -// Huffman reuse. -// -// The huffmanBitWriter supports reusing huffman tables and thereby combining block sections. -// -// This is controlled by several variables: -// -// If lastHeader is non-zero the Huffman table can be reused. -// This also indicates that a Huffman table has been generated that can output all -// possible symbols. -// It also indicates that an EOB has not yet been emitted, so if a new tabel is generated -// an EOB with the previous table must be written. -// -// If lastHuffMan is set, a table for outputting literals has been generated and offsets are invalid. -// -// An incoming block estimates the output size of a new table using a 'fresh' by calculating the -// optimal size and adding a penalty in 'logNewTablePenalty'. -// A Huffman table is not optimal, which is why we add a penalty, and generating a new table -// is slower both for compression and decompression. - -func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter { - return &huffmanBitWriter{ - writer: w, - literalEncoding: newHuffmanEncoder(literalCount), - tmpLitEncoding: newHuffmanEncoder(literalCount), - codegenEncoding: newHuffmanEncoder(codegenCodeCount), - offsetEncoding: newHuffmanEncoder(offsetCodeCount), - } -} - -func (w *huffmanBitWriter) reset(writer io.Writer) { - w.writer = writer - w.bits, w.nbits, w.nbytes, w.err = 0, 0, 0, nil - w.lastHeader = 0 - w.lastHuffMan = false -} - -func (w *huffmanBitWriter) canReuse(t *tokens) (ok bool) { - a := t.offHist[:offsetCodeCount] - b := w.offsetEncoding.codes - b = b[:len(a)] - for i, v := range a { - if v != 0 && b[i].zero() { - return false - } - } - - a = t.extraHist[:literalCount-256] - b = w.literalEncoding.codes[256:literalCount] - b = b[:len(a)] - for i, v := range a { - if v != 0 && b[i].zero() { - return false - } - } - - a = t.litHist[:256] - b = w.literalEncoding.codes[:len(a)] - for i, v := range a { - if v != 0 && b[i].zero() { - return false - } - } - return true -} - -func (w *huffmanBitWriter) flush() { - if w.err != nil { - w.nbits = 0 - return - } - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - n := w.nbytes - for w.nbits != 0 { - w.bytes[n] = byte(w.bits) - w.bits >>= 8 - if w.nbits > 8 { // Avoid underflow - w.nbits -= 8 - } else { - w.nbits = 0 - } - n++ - } - w.bits = 0 - w.write(w.bytes[:n]) - w.nbytes = 0 -} - -func (w *huffmanBitWriter) write(b []byte) { - if w.err != nil { - return - } - _, w.err = w.writer.Write(b) -} - -func (w *huffmanBitWriter) writeBits(b int32, nb uint8) { - w.bits |= uint64(b) << (w.nbits & 63) - w.nbits += nb - if w.nbits >= 48 { - w.writeOutBits() - } -} - -func (w *huffmanBitWriter) writeBytes(bytes []byte) { - if w.err != nil { - return - } - n := w.nbytes - if w.nbits&7 != 0 { - w.err = InternalError("writeBytes with unfinished bits") - return - } - for w.nbits != 0 { - w.bytes[n] = byte(w.bits) - w.bits >>= 8 - w.nbits -= 8 - n++ - } - if n != 0 { - w.write(w.bytes[:n]) - } - w.nbytes = 0 - w.write(bytes) -} - -// RFC 1951 3.2.7 specifies a special run-length encoding for specifying -// the literal and offset lengths arrays (which are concatenated into a single -// array). This method generates that run-length encoding. -// -// The result is written into the codegen array, and the frequencies -// of each code is written into the codegenFreq array. -// Codes 0-15 are single byte codes. Codes 16-18 are followed by additional -// information. Code badCode is an end marker -// -// numLiterals The number of literals in literalEncoding -// numOffsets The number of offsets in offsetEncoding -// litenc, offenc The literal and offset encoder to use -func (w *huffmanBitWriter) generateCodegen(numLiterals int, numOffsets int, litEnc, offEnc *huffmanEncoder) { - for i := range w.codegenFreq { - w.codegenFreq[i] = 0 - } - // Note that we are using codegen both as a temporary variable for holding - // a copy of the frequencies, and as the place where we put the result. - // This is fine because the output is always shorter than the input used - // so far. - codegen := w.codegen[:] // cache - // Copy the concatenated code sizes to codegen. Put a marker at the end. - cgnl := codegen[:numLiterals] - for i := range cgnl { - cgnl[i] = litEnc.codes[i].len() - } - - cgnl = codegen[numLiterals : numLiterals+numOffsets] - for i := range cgnl { - cgnl[i] = offEnc.codes[i].len() - } - codegen[numLiterals+numOffsets] = badCode - - size := codegen[0] - count := 1 - outIndex := 0 - for inIndex := 1; size != badCode; inIndex++ { - // INVARIANT: We have seen "count" copies of size that have not yet - // had output generated for them. - nextSize := codegen[inIndex] - if nextSize == size { - count++ - continue - } - // We need to generate codegen indicating "count" of size. - if size != 0 { - codegen[outIndex] = size - outIndex++ - w.codegenFreq[size]++ - count-- - for count >= 3 { - n := 6 - if n > count { - n = count - } - codegen[outIndex] = 16 - outIndex++ - codegen[outIndex] = uint8(n - 3) - outIndex++ - w.codegenFreq[16]++ - count -= n - } - } else { - for count >= 11 { - n := 138 - if n > count { - n = count - } - codegen[outIndex] = 18 - outIndex++ - codegen[outIndex] = uint8(n - 11) - outIndex++ - w.codegenFreq[18]++ - count -= n - } - if count >= 3 { - // count >= 3 && count <= 10 - codegen[outIndex] = 17 - outIndex++ - codegen[outIndex] = uint8(count - 3) - outIndex++ - w.codegenFreq[17]++ - count = 0 - } - } - count-- - for ; count >= 0; count-- { - codegen[outIndex] = size - outIndex++ - w.codegenFreq[size]++ - } - // Set up invariant for next time through the loop. - size = nextSize - count = 1 - } - // Marker indicating the end of the codegen. - codegen[outIndex] = badCode -} - -func (w *huffmanBitWriter) codegens() int { - numCodegens := len(w.codegenFreq) - for numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 { - numCodegens-- - } - return numCodegens -} - -func (w *huffmanBitWriter) headerSize() (size, numCodegens int) { - numCodegens = len(w.codegenFreq) - for numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 { - numCodegens-- - } - return 3 + 5 + 5 + 4 + (3 * numCodegens) + - w.codegenEncoding.bitLength(w.codegenFreq[:]) + - int(w.codegenFreq[16])*2 + - int(w.codegenFreq[17])*3 + - int(w.codegenFreq[18])*7, numCodegens -} - -// dynamicSize returns the size of dynamically encoded data in bits. -func (w *huffmanBitWriter) dynamicReuseSize(litEnc, offEnc *huffmanEncoder) (size int) { - size = litEnc.bitLength(w.literalFreq[:]) + - offEnc.bitLength(w.offsetFreq[:]) - return size -} - -// dynamicSize returns the size of dynamically encoded data in bits. -func (w *huffmanBitWriter) dynamicSize(litEnc, offEnc *huffmanEncoder, extraBits int) (size, numCodegens int) { - header, numCodegens := w.headerSize() - size = header + - litEnc.bitLength(w.literalFreq[:]) + - offEnc.bitLength(w.offsetFreq[:]) + - extraBits - return size, numCodegens -} - -// extraBitSize will return the number of bits that will be written -// as "extra" bits on matches. -func (w *huffmanBitWriter) extraBitSize() int { - total := 0 - for i, n := range w.literalFreq[257:literalCount] { - total += int(n) * int(lengthExtraBits[i&31]) - } - for i, n := range w.offsetFreq[:offsetCodeCount] { - total += int(n) * int(offsetExtraBits[i&31]) - } - return total -} - -// fixedSize returns the size of dynamically encoded data in bits. -func (w *huffmanBitWriter) fixedSize(extraBits int) int { - return 3 + - fixedLiteralEncoding.bitLength(w.literalFreq[:]) + - fixedOffsetEncoding.bitLength(w.offsetFreq[:]) + - extraBits -} - -// storedSize calculates the stored size, including header. -// The function returns the size in bits and whether the block -// fits inside a single block. -func (w *huffmanBitWriter) storedSize(in []byte) (int, bool) { - if in == nil { - return 0, false - } - if len(in) <= maxStoreBlockSize { - return (len(in) + 5) * 8, true - } - return 0, false -} - -func (w *huffmanBitWriter) writeCode(c hcode) { - // The function does not get inlined if we "& 63" the shift. - w.bits |= c.code64() << (w.nbits & 63) - w.nbits += c.len() - if w.nbits >= 48 { - w.writeOutBits() - } -} - -// writeOutBits will write bits to the buffer. -func (w *huffmanBitWriter) writeOutBits() { - bits := w.bits - w.bits >>= 48 - w.nbits -= 48 - n := w.nbytes - - // We over-write, but faster... - binary.LittleEndian.PutUint64(w.bytes[n:], bits) - n += 6 - - if n >= bufferFlushSize { - if w.err != nil { - n = 0 - return - } - w.write(w.bytes[:n]) - n = 0 - } - - w.nbytes = n -} - -// Write the header of a dynamic Huffman block to the output stream. -// -// numLiterals The number of literals specified in codegen -// numOffsets The number of offsets specified in codegen -// numCodegens The number of codegens used in codegen -func (w *huffmanBitWriter) writeDynamicHeader(numLiterals int, numOffsets int, numCodegens int, isEof bool) { - if w.err != nil { - return - } - var firstBits int32 = 4 - if isEof { - firstBits = 5 - } - w.writeBits(firstBits, 3) - w.writeBits(int32(numLiterals-257), 5) - w.writeBits(int32(numOffsets-1), 5) - w.writeBits(int32(numCodegens-4), 4) - - for i := 0; i < numCodegens; i++ { - value := uint(w.codegenEncoding.codes[codegenOrder[i]].len()) - w.writeBits(int32(value), 3) - } - - i := 0 - for { - var codeWord = uint32(w.codegen[i]) - i++ - if codeWord == badCode { - break - } - w.writeCode(w.codegenEncoding.codes[codeWord]) - - switch codeWord { - case 16: - w.writeBits(int32(w.codegen[i]), 2) - i++ - case 17: - w.writeBits(int32(w.codegen[i]), 3) - i++ - case 18: - w.writeBits(int32(w.codegen[i]), 7) - i++ - } - } -} - -// writeStoredHeader will write a stored header. -// If the stored block is only used for EOF, -// it is replaced with a fixed huffman block. -func (w *huffmanBitWriter) writeStoredHeader(length int, isEof bool) { - if w.err != nil { - return - } - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - - // To write EOF, use a fixed encoding block. 10 bits instead of 5 bytes. - if length == 0 && isEof { - w.writeFixedHeader(isEof) - // EOB: 7 bits, value: 0 - w.writeBits(0, 7) - w.flush() - return - } - - var flag int32 - if isEof { - flag = 1 - } - w.writeBits(flag, 3) - w.flush() - w.writeBits(int32(length), 16) - w.writeBits(int32(^uint16(length)), 16) -} - -func (w *huffmanBitWriter) writeFixedHeader(isEof bool) { - if w.err != nil { - return - } - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - - // Indicate that we are a fixed Huffman block - var value int32 = 2 - if isEof { - value = 3 - } - w.writeBits(value, 3) -} - -// writeBlock will write a block of tokens with the smallest encoding. -// The original input can be supplied, and if the huffman encoded data -// is larger than the original bytes, the data will be written as a -// stored block. -// If the input is nil, the tokens will always be Huffman encoded. -func (w *huffmanBitWriter) writeBlock(tokens *tokens, eof bool, input []byte) { - if w.err != nil { - return - } - - tokens.AddEOB() - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - numLiterals, numOffsets := w.indexTokens(tokens, false) - w.generate() - var extraBits int - storedSize, storable := w.storedSize(input) - if storable { - extraBits = w.extraBitSize() - } - - // Figure out smallest code. - // Fixed Huffman baseline. - var literalEncoding = fixedLiteralEncoding - var offsetEncoding = fixedOffsetEncoding - var size = math.MaxInt32 - if tokens.n < maxPredefinedTokens { - size = w.fixedSize(extraBits) - } - - // Dynamic Huffman? - var numCodegens int - - // Generate codegen and codegenFrequencies, which indicates how to encode - // the literalEncoding and the offsetEncoding. - w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding) - w.codegenEncoding.generate(w.codegenFreq[:], 7) - dynamicSize, numCodegens := w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits) - - if dynamicSize < size { - size = dynamicSize - literalEncoding = w.literalEncoding - offsetEncoding = w.offsetEncoding - } - - // Stored bytes? - if storable && storedSize <= size { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - - // Huffman. - if literalEncoding == fixedLiteralEncoding { - w.writeFixedHeader(eof) - } else { - w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) - } - - // Write the tokens. - w.writeTokens(tokens.Slice(), literalEncoding.codes, offsetEncoding.codes) -} - -// writeBlockDynamic encodes a block using a dynamic Huffman table. -// This should be used if the symbols used have a disproportionate -// histogram distribution. -// If input is supplied and the compression savings are below 1/16th of the -// input size the block is stored. -func (w *huffmanBitWriter) writeBlockDynamic(tokens *tokens, eof bool, input []byte, sync bool) { - if w.err != nil { - return - } - - sync = sync || eof - if sync { - tokens.AddEOB() - } - - // We cannot reuse pure huffman table, and must mark as EOF. - if (w.lastHuffMan || eof) && w.lastHeader > 0 { - // We will not try to reuse. - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - w.lastHuffMan = false - } - - // fillReuse enables filling of empty values. - // This will make encodings always reusable without testing. - // However, this does not appear to benefit on most cases. - const fillReuse = false - - // Check if we can reuse... - if !fillReuse && w.lastHeader > 0 && !w.canReuse(tokens) { - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - - numLiterals, numOffsets := w.indexTokens(tokens, !sync) - extraBits := 0 - ssize, storable := w.storedSize(input) - - const usePrefs = true - if storable || w.lastHeader > 0 { - extraBits = w.extraBitSize() - } - - var size int - - // Check if we should reuse. - if w.lastHeader > 0 { - // Estimate size for using a new table. - // Use the previous header size as the best estimate. - newSize := w.lastHeader + tokens.EstimatedBits() - newSize += int(w.literalEncoding.codes[endBlockMarker].len()) + newSize>>w.logNewTablePenalty - - // The estimated size is calculated as an optimal table. - // We add a penalty to make it more realistic and re-use a bit more. - reuseSize := w.dynamicReuseSize(w.literalEncoding, w.offsetEncoding) + extraBits - - // Check if a new table is better. - if newSize < reuseSize { - // Write the EOB we owe. - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - size = newSize - w.lastHeader = 0 - } else { - size = reuseSize - } - - if tokens.n < maxPredefinedTokens { - if preSize := w.fixedSize(extraBits) + 7; usePrefs && preSize < size { - // Check if we get a reasonable size decrease. - if storable && ssize <= size { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - w.writeFixedHeader(eof) - if !sync { - tokens.AddEOB() - } - w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) - return - } - } - // Check if we get a reasonable size decrease. - if storable && ssize <= size { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - } - - // We want a new block/table - if w.lastHeader == 0 { - if fillReuse && !sync { - w.fillTokens() - numLiterals, numOffsets = maxNumLit, maxNumDist - } else { - w.literalFreq[endBlockMarker] = 1 - } - - w.generate() - // Generate codegen and codegenFrequencies, which indicates how to encode - // the literalEncoding and the offsetEncoding. - w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding) - w.codegenEncoding.generate(w.codegenFreq[:], 7) - - var numCodegens int - if fillReuse && !sync { - // Reindex for accurate size... - w.indexTokens(tokens, true) - } - size, numCodegens = w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits) - - // Store predefined, if we don't get a reasonable improvement. - if tokens.n < maxPredefinedTokens { - if preSize := w.fixedSize(extraBits); usePrefs && preSize <= size { - // Store bytes, if we don't get an improvement. - if storable && ssize <= preSize { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - w.writeFixedHeader(eof) - if !sync { - tokens.AddEOB() - } - w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) - return - } - } - - if storable && ssize <= size { - // Store bytes, if we don't get an improvement. - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - - // Write Huffman table. - w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) - if !sync { - w.lastHeader, _ = w.headerSize() - } - w.lastHuffMan = false - } - - if sync { - w.lastHeader = 0 - } - // Write the tokens. - w.writeTokens(tokens.Slice(), w.literalEncoding.codes, w.offsetEncoding.codes) -} - -func (w *huffmanBitWriter) fillTokens() { - for i, v := range w.literalFreq[:literalCount] { - if v == 0 { - w.literalFreq[i] = 1 - } - } - for i, v := range w.offsetFreq[:offsetCodeCount] { - if v == 0 { - w.offsetFreq[i] = 1 - } - } -} - -// indexTokens indexes a slice of tokens, and updates -// literalFreq and offsetFreq, and generates literalEncoding -// and offsetEncoding. -// The number of literal and offset tokens is returned. -func (w *huffmanBitWriter) indexTokens(t *tokens, filled bool) (numLiterals, numOffsets int) { - //copy(w.literalFreq[:], t.litHist[:]) - *(*[256]uint16)(w.literalFreq[:]) = t.litHist - //copy(w.literalFreq[256:], t.extraHist[:]) - *(*[32]uint16)(w.literalFreq[256:]) = t.extraHist - w.offsetFreq = t.offHist - - if t.n == 0 { - return - } - if filled { - return maxNumLit, maxNumDist - } - // get the number of literals - numLiterals = len(w.literalFreq) - for w.literalFreq[numLiterals-1] == 0 { - numLiterals-- - } - // get the number of offsets - numOffsets = len(w.offsetFreq) - for numOffsets > 0 && w.offsetFreq[numOffsets-1] == 0 { - numOffsets-- - } - if numOffsets == 0 { - // We haven't found a single match. If we want to go with the dynamic encoding, - // we should count at least one offset to be sure that the offset huffman tree could be encoded. - w.offsetFreq[0] = 1 - numOffsets = 1 - } - return -} - -func (w *huffmanBitWriter) generate() { - w.literalEncoding.generate(w.literalFreq[:literalCount], 15) - w.offsetEncoding.generate(w.offsetFreq[:offsetCodeCount], 15) -} - -// writeTokens writes a slice of tokens to the output. -// codes for literal and offset encoding must be supplied. -func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) { - if w.err != nil { - return - } - if len(tokens) == 0 { - return - } - - // Only last token should be endBlockMarker. - var deferEOB bool - if tokens[len(tokens)-1] == endBlockMarker { - tokens = tokens[:len(tokens)-1] - deferEOB = true - } - - // Create slices up to the next power of two to avoid bounds checks. - lits := leCodes[:256] - offs := oeCodes[:32] - lengths := leCodes[lengthCodesStart:] - lengths = lengths[:32] - - // Go 1.16 LOVES having these on stack. - bits, nbits, nbytes := w.bits, w.nbits, w.nbytes - - for _, t := range tokens { - if t < 256 { - //w.writeCode(lits[t.literal()]) - c := lits[t] - bits |= c.code64() << (nbits & 63) - nbits += c.len() - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - continue - } - - // Write the length - length := t.length() - lengthCode := lengthCode(length) & 31 - if false { - w.writeCode(lengths[lengthCode]) - } else { - // inlined - c := lengths[lengthCode] - bits |= c.code64() << (nbits & 63) - nbits += c.len() - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - - if lengthCode >= lengthExtraBitsMinCode { - extraLengthBits := lengthExtraBits[lengthCode] - //w.writeBits(extraLength, extraLengthBits) - extraLength := int32(length - lengthBase[lengthCode]) - bits |= uint64(extraLength) << (nbits & 63) - nbits += extraLengthBits - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - // Write the offset - offset := t.offset() - offsetCode := (offset >> 16) & 31 - if false { - w.writeCode(offs[offsetCode]) - } else { - // inlined - c := offs[offsetCode] - bits |= c.code64() << (nbits & 63) - nbits += c.len() - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - - if offsetCode >= offsetExtraBitsMinCode { - offsetComb := offsetCombined[offsetCode] - //w.writeBits(extraOffset, extraOffsetBits) - bits |= uint64((offset-(offsetComb>>8))&matchOffsetOnlyMask) << (nbits & 63) - nbits += uint8(offsetComb) - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - } - // Restore... - w.bits, w.nbits, w.nbytes = bits, nbits, nbytes - - if deferEOB { - w.writeCode(leCodes[endBlockMarker]) - } -} - -// huffOffset is a static offset encoder used for huffman only encoding. -// It can be reused since we will not be encoding offset values. -var huffOffset *huffmanEncoder - -func init() { - w := newHuffmanBitWriter(nil) - w.offsetFreq[0] = 1 - huffOffset = newHuffmanEncoder(offsetCodeCount) - huffOffset.generate(w.offsetFreq[:offsetCodeCount], 15) -} - -// writeBlockHuff encodes a block of bytes as either -// Huffman encoded literals or uncompressed bytes if the -// results only gains very little from compression. -func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { - if w.err != nil { - return - } - - // Clear histogram - for i := range w.literalFreq[:] { - w.literalFreq[i] = 0 - } - if !w.lastHuffMan { - for i := range w.offsetFreq[:] { - w.offsetFreq[i] = 0 - } - } - - const numLiterals = endBlockMarker + 1 - const numOffsets = 1 - - // Add everything as literals - // We have to estimate the header size. - // Assume header is around 70 bytes: - // https://stackoverflow.com/a/25454430 - const guessHeaderSizeBits = 70 * 8 - histogram(input, w.literalFreq[:numLiterals]) - ssize, storable := w.storedSize(input) - if storable && len(input) > 1024 { - // Quick check for incompressible content. - abs := float64(0) - avg := float64(len(input)) / 256 - max := float64(len(input) * 2) - for _, v := range w.literalFreq[:256] { - diff := float64(v) - avg - abs += diff * diff - if abs > max { - break - } - } - if abs < max { - if debugDeflate { - fmt.Println("stored", abs, "<", max) - } - // No chance we can compress this... - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - } - w.literalFreq[endBlockMarker] = 1 - w.tmpLitEncoding.generate(w.literalFreq[:numLiterals], 15) - estBits := w.tmpLitEncoding.canReuseBits(w.literalFreq[:numLiterals]) - if estBits < math.MaxInt32 { - estBits += w.lastHeader - if w.lastHeader == 0 { - estBits += guessHeaderSizeBits - } - estBits += estBits >> w.logNewTablePenalty - } - - // Store bytes, if we don't get a reasonable improvement. - if storable && ssize <= estBits { - if debugDeflate { - fmt.Println("stored,", ssize, "<=", estBits) - } - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - - if w.lastHeader > 0 { - reuseSize := w.literalEncoding.canReuseBits(w.literalFreq[:256]) - - if estBits < reuseSize { - if debugDeflate { - fmt.Println("NOT reusing, reuse:", reuseSize/8, "> new:", estBits/8, "header est:", w.lastHeader/8, "bytes") - } - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } else if debugDeflate { - fmt.Println("reusing, reuse:", reuseSize/8, "> new:", estBits/8, "- header est:", w.lastHeader/8) - } - } - - count := 0 - if w.lastHeader == 0 { - // Use the temp encoding, so swap. - w.literalEncoding, w.tmpLitEncoding = w.tmpLitEncoding, w.literalEncoding - // Generate codegen and codegenFrequencies, which indicates how to encode - // the literalEncoding and the offsetEncoding. - w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, huffOffset) - w.codegenEncoding.generate(w.codegenFreq[:], 7) - numCodegens := w.codegens() - - // Huffman. - w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) - w.lastHuffMan = true - w.lastHeader, _ = w.headerSize() - if debugDeflate { - count += w.lastHeader - fmt.Println("header:", count/8) - } - } - - encoding := w.literalEncoding.codes[:256] - // Go 1.16 LOVES having these on stack. At least 1.5x the speed. - bits, nbits, nbytes := w.bits, w.nbits, w.nbytes - - if debugDeflate { - count -= int(nbytes)*8 + int(nbits) - } - // Unroll, write 3 codes/loop. - // Fastest number of unrolls. - for len(input) > 3 { - // We must have at least 48 bits free. - if nbits >= 8 { - n := nbits >> 3 - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - bits >>= (n * 8) & 63 - nbits -= n * 8 - nbytes += n - } - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - if debugDeflate { - count += int(nbytes) * 8 - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - a, b := encoding[input[0]], encoding[input[1]] - bits |= a.code64() << (nbits & 63) - bits |= b.code64() << ((nbits + a.len()) & 63) - c := encoding[input[2]] - nbits += b.len() + a.len() - bits |= c.code64() << (nbits & 63) - nbits += c.len() - input = input[3:] - } - - // Remaining... - for _, t := range input { - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - if debugDeflate { - count += int(nbytes) * 8 - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - // Bitwriting inlined, ~30% speedup - c := encoding[t] - bits |= c.code64() << (nbits & 63) - - nbits += c.len() - if debugDeflate { - count += int(c.len()) - } - } - // Restore... - w.bits, w.nbits, w.nbytes = bits, nbits, nbytes - - if debugDeflate { - nb := count + int(nbytes)*8 + int(nbits) - fmt.Println("wrote", nb, "bits,", nb/8, "bytes.") - } - // Flush if needed to have space. - if w.nbits >= 48 { - w.writeOutBits() - } - - if eof || sync { - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - w.lastHuffMan = false - } -} diff --git a/vendor/github.com/klauspost/compress/flate/huffman_code.go b/vendor/github.com/klauspost/compress/flate/huffman_code.go deleted file mode 100644 index be7b58b473..0000000000 --- a/vendor/github.com/klauspost/compress/flate/huffman_code.go +++ /dev/null @@ -1,417 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "math" - "math/bits" -) - -const ( - maxBitsLimit = 16 - // number of valid literals - literalCount = 286 -) - -// hcode is a huffman code with a bit code and bit length. -type hcode uint32 - -func (h hcode) len() uint8 { - return uint8(h) -} - -func (h hcode) code64() uint64 { - return uint64(h >> 8) -} - -func (h hcode) zero() bool { - return h == 0 -} - -type huffmanEncoder struct { - codes []hcode - bitCount [17]int32 - - // Allocate a reusable buffer with the longest possible frequency table. - // Possible lengths are codegenCodeCount, offsetCodeCount and literalCount. - // The largest of these is literalCount, so we allocate for that case. - freqcache [literalCount + 1]literalNode -} - -type literalNode struct { - literal uint16 - freq uint16 -} - -// A levelInfo describes the state of the constructed tree for a given depth. -type levelInfo struct { - // Our level. for better printing - level int32 - - // The frequency of the last node at this level - lastFreq int32 - - // The frequency of the next character to add to this level - nextCharFreq int32 - - // The frequency of the next pair (from level below) to add to this level. - // Only valid if the "needed" value of the next lower level is 0. - nextPairFreq int32 - - // The number of chains remaining to generate for this level before moving - // up to the next level - needed int32 -} - -// set sets the code and length of an hcode. -func (h *hcode) set(code uint16, length uint8) { - *h = hcode(length) | (hcode(code) << 8) -} - -func newhcode(code uint16, length uint8) hcode { - return hcode(length) | (hcode(code) << 8) -} - -func reverseBits(number uint16, bitLength byte) uint16 { - return bits.Reverse16(number << ((16 - bitLength) & 15)) -} - -func maxNode() literalNode { return literalNode{math.MaxUint16, math.MaxUint16} } - -func newHuffmanEncoder(size int) *huffmanEncoder { - // Make capacity to next power of two. - c := uint(bits.Len32(uint32(size - 1))) - return &huffmanEncoder{codes: make([]hcode, size, 1<= 3 -// The cases of 0, 1, and 2 literals are handled by special case code. -// -// list An array of the literals with non-zero frequencies -// -// and their associated frequencies. The array is in order of increasing -// frequency, and has as its last element a special element with frequency -// MaxInt32 -// -// maxBits The maximum number of bits that should be used to encode any literal. -// -// Must be less than 16. -// -// return An integer array in which array[i] indicates the number of literals -// -// that should be encoded in i bits. -func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 { - if maxBits >= maxBitsLimit { - panic("flate: maxBits too large") - } - n := int32(len(list)) - list = list[0 : n+1] - list[n] = maxNode() - - // The tree can't have greater depth than n - 1, no matter what. This - // saves a little bit of work in some small cases - if maxBits > n-1 { - maxBits = n - 1 - } - - // Create information about each of the levels. - // A bogus "Level 0" whose sole purpose is so that - // level1.prev.needed==0. This makes level1.nextPairFreq - // be a legitimate value that never gets chosen. - var levels [maxBitsLimit]levelInfo - // leafCounts[i] counts the number of literals at the left - // of ancestors of the rightmost node at level i. - // leafCounts[i][j] is the number of literals at the left - // of the level j ancestor. - var leafCounts [maxBitsLimit][maxBitsLimit]int32 - - // Descending to only have 1 bounds check. - l2f := int32(list[2].freq) - l1f := int32(list[1].freq) - l0f := int32(list[0].freq) + int32(list[1].freq) - - for level := int32(1); level <= maxBits; level++ { - // For every level, the first two items are the first two characters. - // We initialize the levels as if we had already figured this out. - levels[level] = levelInfo{ - level: level, - lastFreq: l1f, - nextCharFreq: l2f, - nextPairFreq: l0f, - } - leafCounts[level][level] = 2 - if level == 1 { - levels[level].nextPairFreq = math.MaxInt32 - } - } - - // We need a total of 2*n - 2 items at top level and have already generated 2. - levels[maxBits].needed = 2*n - 4 - - level := uint32(maxBits) - for level < 16 { - l := &levels[level] - if l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 { - // We've run out of both leafs and pairs. - // End all calculations for this level. - // To make sure we never come back to this level or any lower level, - // set nextPairFreq impossibly large. - l.needed = 0 - levels[level+1].nextPairFreq = math.MaxInt32 - level++ - continue - } - - prevFreq := l.lastFreq - if l.nextCharFreq < l.nextPairFreq { - // The next item on this row is a leaf node. - n := leafCounts[level][level] + 1 - l.lastFreq = l.nextCharFreq - // Lower leafCounts are the same of the previous node. - leafCounts[level][level] = n - e := list[n] - if e.literal < math.MaxUint16 { - l.nextCharFreq = int32(e.freq) - } else { - l.nextCharFreq = math.MaxInt32 - } - } else { - // The next item on this row is a pair from the previous row. - // nextPairFreq isn't valid until we generate two - // more values in the level below - l.lastFreq = l.nextPairFreq - // Take leaf counts from the lower level, except counts[level] remains the same. - if true { - save := leafCounts[level][level] - leafCounts[level] = leafCounts[level-1] - leafCounts[level][level] = save - } else { - copy(leafCounts[level][:level], leafCounts[level-1][:level]) - } - levels[l.level-1].needed = 2 - } - - if l.needed--; l.needed == 0 { - // We've done everything we need to do for this level. - // Continue calculating one level up. Fill in nextPairFreq - // of that level with the sum of the two nodes we've just calculated on - // this level. - if l.level == maxBits { - // All done! - break - } - levels[l.level+1].nextPairFreq = prevFreq + l.lastFreq - level++ - } else { - // If we stole from below, move down temporarily to replenish it. - for levels[level-1].needed > 0 { - level-- - } - } - } - - // Somethings is wrong if at the end, the top level is null or hasn't used - // all of the leaves. - if leafCounts[maxBits][maxBits] != n { - panic("leafCounts[maxBits][maxBits] != n") - } - - bitCount := h.bitCount[:maxBits+1] - bits := 1 - counts := &leafCounts[maxBits] - for level := maxBits; level > 0; level-- { - // chain.leafCount gives the number of literals requiring at least "bits" - // bits to encode. - bitCount[bits] = counts[level] - counts[level-1] - bits++ - } - return bitCount -} - -// Look at the leaves and assign them a bit count and an encoding as specified -// in RFC 1951 3.2.2 -func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalNode) { - code := uint16(0) - for n, bits := range bitCount { - code <<= 1 - if n == 0 || bits == 0 { - continue - } - // The literals list[len(list)-bits] .. list[len(list)-bits] - // are encoded using "bits" bits, and get the values - // code, code + 1, .... The code values are - // assigned in literal order (not frequency order). - chunk := list[len(list)-int(bits):] - - sortByLiteral(chunk) - for _, node := range chunk { - h.codes[node.literal] = newhcode(reverseBits(code, uint8(n)), uint8(n)) - code++ - } - list = list[0 : len(list)-int(bits)] - } -} - -// Update this Huffman Code object to be the minimum code for the specified frequency count. -// -// freq An array of frequencies, in which frequency[i] gives the frequency of literal i. -// maxBits The maximum number of bits to use for any literal. -func (h *huffmanEncoder) generate(freq []uint16, maxBits int32) { - list := h.freqcache[:len(freq)+1] - codes := h.codes[:len(freq)] - // Number of non-zero literals - count := 0 - // Set list to be the set of all non-zero literals and their frequencies - for i, f := range freq { - if f != 0 { - list[count] = literalNode{uint16(i), f} - count++ - } else { - codes[i] = 0 - } - } - list[count] = literalNode{} - - list = list[:count] - if count <= 2 { - // Handle the small cases here, because they are awkward for the general case code. With - // two or fewer literals, everything has bit length 1. - for i, node := range list { - // "list" is in order of increasing literal value. - h.codes[node.literal].set(uint16(i), 1) - } - return - } - sortByFreq(list) - - // Get the number of literals for each bit count - bitCount := h.bitCounts(list, maxBits) - // And do the assignment - h.assignEncodingAndSize(bitCount, list) -} - -// atLeastOne clamps the result between 1 and 15. -func atLeastOne(v float32) float32 { - if v < 1 { - return 1 - } - if v > 15 { - return 15 - } - return v -} - -func histogram(b []byte, h []uint16) { - if true && len(b) >= 8<<10 { - // Split for bigger inputs - histogramSplit(b, h) - } else { - h = h[:256] - for _, t := range b { - h[t]++ - } - } -} - -func histogramSplit(b []byte, h []uint16) { - // Tested, and slightly faster than 2-way. - // Writing to separate arrays and combining is also slightly slower. - h = h[:256] - for len(b)&3 != 0 { - h[b[0]]++ - b = b[1:] - } - n := len(b) / 4 - x, y, z, w := b[:n], b[n:], b[n+n:], b[n+n+n:] - y, z, w = y[:len(x)], z[:len(x)], w[:len(x)] - for i, t := range x { - v0 := &h[t] - v1 := &h[y[i]] - v3 := &h[w[i]] - v2 := &h[z[i]] - *v0++ - *v1++ - *v2++ - *v3++ - } -} diff --git a/vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go b/vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go deleted file mode 100644 index 6c05ba8c1c..0000000000 --- a/vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -// Sort sorts data. -// It makes one call to data.Len to determine n, and O(n*log(n)) calls to -// data.Less and data.Swap. The sort is not guaranteed to be stable. -func sortByFreq(data []literalNode) { - n := len(data) - quickSortByFreq(data, 0, n, maxDepth(n)) -} - -func quickSortByFreq(data []literalNode, a, b, maxDepth int) { - for b-a > 12 { // Use ShellSort for slices <= 12 elements - if maxDepth == 0 { - heapSort(data, a, b) - return - } - maxDepth-- - mlo, mhi := doPivotByFreq(data, a, b) - // Avoiding recursion on the larger subproblem guarantees - // a stack depth of at most lg(b-a). - if mlo-a < b-mhi { - quickSortByFreq(data, a, mlo, maxDepth) - a = mhi // i.e., quickSortByFreq(data, mhi, b) - } else { - quickSortByFreq(data, mhi, b, maxDepth) - b = mlo // i.e., quickSortByFreq(data, a, mlo) - } - } - if b-a > 1 { - // Do ShellSort pass with gap 6 - // It could be written in this simplified form cause b-a <= 12 - for i := a + 6; i < b; i++ { - if data[i].freq == data[i-6].freq && data[i].literal < data[i-6].literal || data[i].freq < data[i-6].freq { - data[i], data[i-6] = data[i-6], data[i] - } - } - insertionSortByFreq(data, a, b) - } -} - -func doPivotByFreq(data []literalNode, lo, hi int) (midlo, midhi int) { - m := int(uint(lo+hi) >> 1) // Written like this to avoid integer overflow. - if hi-lo > 40 { - // Tukey's ``Ninther,'' median of three medians of three. - s := (hi - lo) / 8 - medianOfThreeSortByFreq(data, lo, lo+s, lo+2*s) - medianOfThreeSortByFreq(data, m, m-s, m+s) - medianOfThreeSortByFreq(data, hi-1, hi-1-s, hi-1-2*s) - } - medianOfThreeSortByFreq(data, lo, m, hi-1) - - // Invariants are: - // data[lo] = pivot (set up by ChoosePivot) - // data[lo < i < a] < pivot - // data[a <= i < b] <= pivot - // data[b <= i < c] unexamined - // data[c <= i < hi-1] > pivot - // data[hi-1] >= pivot - pivot := lo - a, c := lo+1, hi-1 - - for ; a < c && (data[a].freq == data[pivot].freq && data[a].literal < data[pivot].literal || data[a].freq < data[pivot].freq); a++ { - } - b := a - for { - for ; b < c && (data[pivot].freq == data[b].freq && data[pivot].literal > data[b].literal || data[pivot].freq > data[b].freq); b++ { // data[b] <= pivot - } - for ; b < c && (data[pivot].freq == data[c-1].freq && data[pivot].literal < data[c-1].literal || data[pivot].freq < data[c-1].freq); c-- { // data[c-1] > pivot - } - if b >= c { - break - } - // data[b] > pivot; data[c-1] <= pivot - data[b], data[c-1] = data[c-1], data[b] - b++ - c-- - } - // If hi-c<3 then there are duplicates (by property of median of nine). - // Let's be a bit more conservative, and set border to 5. - protect := hi-c < 5 - if !protect && hi-c < (hi-lo)/4 { - // Lets test some points for equality to pivot - dups := 0 - if data[pivot].freq == data[hi-1].freq && data[pivot].literal > data[hi-1].literal || data[pivot].freq > data[hi-1].freq { // data[hi-1] = pivot - data[c], data[hi-1] = data[hi-1], data[c] - c++ - dups++ - } - if data[b-1].freq == data[pivot].freq && data[b-1].literal > data[pivot].literal || data[b-1].freq > data[pivot].freq { // data[b-1] = pivot - b-- - dups++ - } - // m-lo = (hi-lo)/2 > 6 - // b-lo > (hi-lo)*3/4-1 > 8 - // ==> m < b ==> data[m] <= pivot - if data[m].freq == data[pivot].freq && data[m].literal > data[pivot].literal || data[m].freq > data[pivot].freq { // data[m] = pivot - data[m], data[b-1] = data[b-1], data[m] - b-- - dups++ - } - // if at least 2 points are equal to pivot, assume skewed distribution - protect = dups > 1 - } - if protect { - // Protect against a lot of duplicates - // Add invariant: - // data[a <= i < b] unexamined - // data[b <= i < c] = pivot - for { - for ; a < b && (data[b-1].freq == data[pivot].freq && data[b-1].literal > data[pivot].literal || data[b-1].freq > data[pivot].freq); b-- { // data[b] == pivot - } - for ; a < b && (data[a].freq == data[pivot].freq && data[a].literal < data[pivot].literal || data[a].freq < data[pivot].freq); a++ { // data[a] < pivot - } - if a >= b { - break - } - // data[a] == pivot; data[b-1] < pivot - data[a], data[b-1] = data[b-1], data[a] - a++ - b-- - } - } - // Swap pivot into middle - data[pivot], data[b-1] = data[b-1], data[pivot] - return b - 1, c -} - -// Insertion sort -func insertionSortByFreq(data []literalNode, a, b int) { - for i := a + 1; i < b; i++ { - for j := i; j > a && (data[j].freq == data[j-1].freq && data[j].literal < data[j-1].literal || data[j].freq < data[j-1].freq); j-- { - data[j], data[j-1] = data[j-1], data[j] - } - } -} - -// quickSortByFreq, loosely following Bentley and McIlroy, -// ``Engineering a Sort Function,'' SP&E November 1993. - -// medianOfThreeSortByFreq moves the median of the three values data[m0], data[m1], data[m2] into data[m1]. -func medianOfThreeSortByFreq(data []literalNode, m1, m0, m2 int) { - // sort 3 elements - if data[m1].freq == data[m0].freq && data[m1].literal < data[m0].literal || data[m1].freq < data[m0].freq { - data[m1], data[m0] = data[m0], data[m1] - } - // data[m0] <= data[m1] - if data[m2].freq == data[m1].freq && data[m2].literal < data[m1].literal || data[m2].freq < data[m1].freq { - data[m2], data[m1] = data[m1], data[m2] - // data[m0] <= data[m2] && data[m1] < data[m2] - if data[m1].freq == data[m0].freq && data[m1].literal < data[m0].literal || data[m1].freq < data[m0].freq { - data[m1], data[m0] = data[m0], data[m1] - } - } - // now data[m0] <= data[m1] <= data[m2] -} diff --git a/vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go b/vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go deleted file mode 100644 index 93f1aea109..0000000000 --- a/vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -// Sort sorts data. -// It makes one call to data.Len to determine n, and O(n*log(n)) calls to -// data.Less and data.Swap. The sort is not guaranteed to be stable. -func sortByLiteral(data []literalNode) { - n := len(data) - quickSort(data, 0, n, maxDepth(n)) -} - -func quickSort(data []literalNode, a, b, maxDepth int) { - for b-a > 12 { // Use ShellSort for slices <= 12 elements - if maxDepth == 0 { - heapSort(data, a, b) - return - } - maxDepth-- - mlo, mhi := doPivot(data, a, b) - // Avoiding recursion on the larger subproblem guarantees - // a stack depth of at most lg(b-a). - if mlo-a < b-mhi { - quickSort(data, a, mlo, maxDepth) - a = mhi // i.e., quickSort(data, mhi, b) - } else { - quickSort(data, mhi, b, maxDepth) - b = mlo // i.e., quickSort(data, a, mlo) - } - } - if b-a > 1 { - // Do ShellSort pass with gap 6 - // It could be written in this simplified form cause b-a <= 12 - for i := a + 6; i < b; i++ { - if data[i].literal < data[i-6].literal { - data[i], data[i-6] = data[i-6], data[i] - } - } - insertionSort(data, a, b) - } -} -func heapSort(data []literalNode, a, b int) { - first := a - lo := 0 - hi := b - a - - // Build heap with greatest element at top. - for i := (hi - 1) / 2; i >= 0; i-- { - siftDown(data, i, hi, first) - } - - // Pop elements, largest first, into end of data. - for i := hi - 1; i >= 0; i-- { - data[first], data[first+i] = data[first+i], data[first] - siftDown(data, lo, i, first) - } -} - -// siftDown implements the heap property on data[lo, hi). -// first is an offset into the array where the root of the heap lies. -func siftDown(data []literalNode, lo, hi, first int) { - root := lo - for { - child := 2*root + 1 - if child >= hi { - break - } - if child+1 < hi && data[first+child].literal < data[first+child+1].literal { - child++ - } - if data[first+root].literal > data[first+child].literal { - return - } - data[first+root], data[first+child] = data[first+child], data[first+root] - root = child - } -} -func doPivot(data []literalNode, lo, hi int) (midlo, midhi int) { - m := int(uint(lo+hi) >> 1) // Written like this to avoid integer overflow. - if hi-lo > 40 { - // Tukey's ``Ninther,'' median of three medians of three. - s := (hi - lo) / 8 - medianOfThree(data, lo, lo+s, lo+2*s) - medianOfThree(data, m, m-s, m+s) - medianOfThree(data, hi-1, hi-1-s, hi-1-2*s) - } - medianOfThree(data, lo, m, hi-1) - - // Invariants are: - // data[lo] = pivot (set up by ChoosePivot) - // data[lo < i < a] < pivot - // data[a <= i < b] <= pivot - // data[b <= i < c] unexamined - // data[c <= i < hi-1] > pivot - // data[hi-1] >= pivot - pivot := lo - a, c := lo+1, hi-1 - - for ; a < c && data[a].literal < data[pivot].literal; a++ { - } - b := a - for { - for ; b < c && data[pivot].literal > data[b].literal; b++ { // data[b] <= pivot - } - for ; b < c && data[pivot].literal < data[c-1].literal; c-- { // data[c-1] > pivot - } - if b >= c { - break - } - // data[b] > pivot; data[c-1] <= pivot - data[b], data[c-1] = data[c-1], data[b] - b++ - c-- - } - // If hi-c<3 then there are duplicates (by property of median of nine). - // Let's be a bit more conservative, and set border to 5. - protect := hi-c < 5 - if !protect && hi-c < (hi-lo)/4 { - // Lets test some points for equality to pivot - dups := 0 - if data[pivot].literal > data[hi-1].literal { // data[hi-1] = pivot - data[c], data[hi-1] = data[hi-1], data[c] - c++ - dups++ - } - if data[b-1].literal > data[pivot].literal { // data[b-1] = pivot - b-- - dups++ - } - // m-lo = (hi-lo)/2 > 6 - // b-lo > (hi-lo)*3/4-1 > 8 - // ==> m < b ==> data[m] <= pivot - if data[m].literal > data[pivot].literal { // data[m] = pivot - data[m], data[b-1] = data[b-1], data[m] - b-- - dups++ - } - // if at least 2 points are equal to pivot, assume skewed distribution - protect = dups > 1 - } - if protect { - // Protect against a lot of duplicates - // Add invariant: - // data[a <= i < b] unexamined - // data[b <= i < c] = pivot - for { - for ; a < b && data[b-1].literal > data[pivot].literal; b-- { // data[b] == pivot - } - for ; a < b && data[a].literal < data[pivot].literal; a++ { // data[a] < pivot - } - if a >= b { - break - } - // data[a] == pivot; data[b-1] < pivot - data[a], data[b-1] = data[b-1], data[a] - a++ - b-- - } - } - // Swap pivot into middle - data[pivot], data[b-1] = data[b-1], data[pivot] - return b - 1, c -} - -// Insertion sort -func insertionSort(data []literalNode, a, b int) { - for i := a + 1; i < b; i++ { - for j := i; j > a && data[j].literal < data[j-1].literal; j-- { - data[j], data[j-1] = data[j-1], data[j] - } - } -} - -// maxDepth returns a threshold at which quicksort should switch -// to heapsort. It returns 2*ceil(lg(n+1)). -func maxDepth(n int) int { - var depth int - for i := n; i > 0; i >>= 1 { - depth++ - } - return depth * 2 -} - -// medianOfThree moves the median of the three values data[m0], data[m1], data[m2] into data[m1]. -func medianOfThree(data []literalNode, m1, m0, m2 int) { - // sort 3 elements - if data[m1].literal < data[m0].literal { - data[m1], data[m0] = data[m0], data[m1] - } - // data[m0] <= data[m1] - if data[m2].literal < data[m1].literal { - data[m2], data[m1] = data[m1], data[m2] - // data[m0] <= data[m2] && data[m1] < data[m2] - if data[m1].literal < data[m0].literal { - data[m1], data[m0] = data[m0], data[m1] - } - } - // now data[m0] <= data[m1] <= data[m2] -} diff --git a/vendor/github.com/klauspost/compress/flate/inflate.go b/vendor/github.com/klauspost/compress/flate/inflate.go deleted file mode 100644 index 2f410d64f5..0000000000 --- a/vendor/github.com/klauspost/compress/flate/inflate.go +++ /dev/null @@ -1,829 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package flate implements the DEFLATE compressed data format, described in -// RFC 1951. The gzip and zlib packages implement access to DEFLATE-based file -// formats. -package flate - -import ( - "bufio" - "compress/flate" - "fmt" - "io" - "math/bits" - "sync" -) - -const ( - maxCodeLen = 16 // max length of Huffman code - maxCodeLenMask = 15 // mask for max length of Huffman code - // The next three numbers come from the RFC section 3.2.7, with the - // additional proviso in section 3.2.5 which implies that distance codes - // 30 and 31 should never occur in compressed data. - maxNumLit = 286 - maxNumDist = 30 - numCodes = 19 // number of codes in Huffman meta-code - - debugDecode = false -) - -// Value of length - 3 and extra bits. -type lengthExtra struct { - length, extra uint8 -} - -var decCodeToLen = [32]lengthExtra{{length: 0x0, extra: 0x0}, {length: 0x1, extra: 0x0}, {length: 0x2, extra: 0x0}, {length: 0x3, extra: 0x0}, {length: 0x4, extra: 0x0}, {length: 0x5, extra: 0x0}, {length: 0x6, extra: 0x0}, {length: 0x7, extra: 0x0}, {length: 0x8, extra: 0x1}, {length: 0xa, extra: 0x1}, {length: 0xc, extra: 0x1}, {length: 0xe, extra: 0x1}, {length: 0x10, extra: 0x2}, {length: 0x14, extra: 0x2}, {length: 0x18, extra: 0x2}, {length: 0x1c, extra: 0x2}, {length: 0x20, extra: 0x3}, {length: 0x28, extra: 0x3}, {length: 0x30, extra: 0x3}, {length: 0x38, extra: 0x3}, {length: 0x40, extra: 0x4}, {length: 0x50, extra: 0x4}, {length: 0x60, extra: 0x4}, {length: 0x70, extra: 0x4}, {length: 0x80, extra: 0x5}, {length: 0xa0, extra: 0x5}, {length: 0xc0, extra: 0x5}, {length: 0xe0, extra: 0x5}, {length: 0xff, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}} - -var bitMask32 = [32]uint32{ - 0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, - 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, - 0x1ffff, 0x3ffff, 0x7FFFF, 0xfFFFF, 0x1fFFFF, 0x3fFFFF, 0x7fFFFF, 0xffFFFF, - 0x1ffFFFF, 0x3ffFFFF, 0x7ffFFFF, 0xfffFFFF, 0x1fffFFFF, 0x3fffFFFF, 0x7fffFFFF, -} // up to 32 bits - -// Initialize the fixedHuffmanDecoder only once upon first use. -var fixedOnce sync.Once -var fixedHuffmanDecoder huffmanDecoder - -// A CorruptInputError reports the presence of corrupt input at a given offset. -type CorruptInputError = flate.CorruptInputError - -// An InternalError reports an error in the flate code itself. -type InternalError string - -func (e InternalError) Error() string { return "flate: internal error: " + string(e) } - -// A ReadError reports an error encountered while reading input. -// -// Deprecated: No longer returned. -type ReadError = flate.ReadError - -// A WriteError reports an error encountered while writing output. -// -// Deprecated: No longer returned. -type WriteError = flate.WriteError - -// Resetter resets a ReadCloser returned by NewReader or NewReaderDict to -// to switch to a new underlying Reader. This permits reusing a ReadCloser -// instead of allocating a new one. -type Resetter interface { - // Reset discards any buffered data and resets the Resetter as if it was - // newly initialized with the given reader. - Reset(r io.Reader, dict []byte) error -} - -// The data structure for decoding Huffman tables is based on that of -// zlib. There is a lookup table of a fixed bit width (huffmanChunkBits), -// For codes smaller than the table width, there are multiple entries -// (each combination of trailing bits has the same value). For codes -// larger than the table width, the table contains a link to an overflow -// table. The width of each entry in the link table is the maximum code -// size minus the chunk width. -// -// Note that you can do a lookup in the table even without all bits -// filled. Since the extra bits are zero, and the DEFLATE Huffman codes -// have the property that shorter codes come before longer ones, the -// bit length estimate in the result is a lower bound on the actual -// number of bits. -// -// See the following: -// http://www.gzip.org/algorithm.txt - -// chunk & 15 is number of bits -// chunk >> 4 is value, including table link - -const ( - huffmanChunkBits = 9 - huffmanNumChunks = 1 << huffmanChunkBits - huffmanCountMask = 15 - huffmanValueShift = 4 -) - -type huffmanDecoder struct { - maxRead int // the maximum number of bits we can read and not overread - chunks *[huffmanNumChunks]uint16 // chunks as described above - links [][]uint16 // overflow links - linkMask uint32 // mask the width of the link table -} - -// Initialize Huffman decoding tables from array of code lengths. -// Following this function, h is guaranteed to be initialized into a complete -// tree (i.e., neither over-subscribed nor under-subscribed). The exception is a -// degenerate case where the tree has only a single symbol with length 1. Empty -// trees are permitted. -func (h *huffmanDecoder) init(lengths []int) bool { - // Sanity enables additional runtime tests during Huffman - // table construction. It's intended to be used during - // development to supplement the currently ad-hoc unit tests. - const sanity = false - - if h.chunks == nil { - h.chunks = new([huffmanNumChunks]uint16) - } - - if h.maxRead != 0 { - *h = huffmanDecoder{chunks: h.chunks, links: h.links} - } - - // Count number of codes of each length, - // compute maxRead and max length. - var count [maxCodeLen]int - var min, max int - for _, n := range lengths { - if n == 0 { - continue - } - if min == 0 || n < min { - min = n - } - if n > max { - max = n - } - count[n&maxCodeLenMask]++ - } - - // Empty tree. The decompressor.huffSym function will fail later if the tree - // is used. Technically, an empty tree is only valid for the HDIST tree and - // not the HCLEN and HLIT tree. However, a stream with an empty HCLEN tree - // is guaranteed to fail since it will attempt to use the tree to decode the - // codes for the HLIT and HDIST trees. Similarly, an empty HLIT tree is - // guaranteed to fail later since the compressed data section must be - // composed of at least one symbol (the end-of-block marker). - if max == 0 { - return true - } - - code := 0 - var nextcode [maxCodeLen]int - for i := min; i <= max; i++ { - code <<= 1 - nextcode[i&maxCodeLenMask] = code - code += count[i&maxCodeLenMask] - } - - // Check that the coding is complete (i.e., that we've - // assigned all 2-to-the-max possible bit sequences). - // Exception: To be compatible with zlib, we also need to - // accept degenerate single-code codings. See also - // TestDegenerateHuffmanCoding. - if code != 1< huffmanChunkBits { - numLinks := 1 << (uint(max) - huffmanChunkBits) - h.linkMask = uint32(numLinks - 1) - - // create link tables - link := nextcode[huffmanChunkBits+1] >> 1 - if cap(h.links) < huffmanNumChunks-link { - h.links = make([][]uint16, huffmanNumChunks-link) - } else { - h.links = h.links[:huffmanNumChunks-link] - } - for j := uint(link); j < huffmanNumChunks; j++ { - reverse := int(bits.Reverse16(uint16(j))) - reverse >>= uint(16 - huffmanChunkBits) - off := j - uint(link) - if sanity && h.chunks[reverse] != 0 { - panic("impossible: overwriting existing chunk") - } - h.chunks[reverse] = uint16(off<>= uint(16 - n) - if n <= huffmanChunkBits { - for off := reverse; off < len(h.chunks); off += 1 << uint(n) { - // We should never need to overwrite - // an existing chunk. Also, 0 is - // never a valid chunk, because the - // lower 4 "count" bits should be - // between 1 and 15. - if sanity && h.chunks[off] != 0 { - panic("impossible: overwriting existing chunk") - } - h.chunks[off] = chunk - } - } else { - j := reverse & (huffmanNumChunks - 1) - if sanity && h.chunks[j]&huffmanCountMask != huffmanChunkBits+1 { - // Longer codes should have been - // associated with a link table above. - panic("impossible: not an indirect chunk") - } - value := h.chunks[j] >> huffmanValueShift - linktab := h.links[value] - reverse >>= huffmanChunkBits - for off := reverse; off < len(linktab); off += 1 << uint(n-huffmanChunkBits) { - if sanity && linktab[off] != 0 { - panic("impossible: overwriting existing chunk") - } - linktab[off] = chunk - } - } - } - - if sanity { - // Above we've sanity checked that we never overwrote - // an existing entry. Here we additionally check that - // we filled the tables completely. - for i, chunk := range h.chunks { - if chunk == 0 { - // As an exception, in the degenerate - // single-code case, we allow odd - // chunks to be missing. - if code == 1 && i%2 == 1 { - continue - } - panic("impossible: missing chunk") - } - } - for _, linktab := range h.links { - for _, chunk := range linktab { - if chunk == 0 { - panic("impossible: missing chunk") - } - } - } - } - - return true -} - -// Reader is the actual read interface needed by NewReader. -// If the passed in io.Reader does not also have ReadByte, -// the NewReader will introduce its own buffering. -type Reader interface { - io.Reader - io.ByteReader -} - -type step uint8 - -const ( - copyData step = iota + 1 - nextBlock - huffmanBytesBuffer - huffmanBytesReader - huffmanBufioReader - huffmanStringsReader - huffmanGenericReader -) - -// Decompress state. -type decompressor struct { - // Input source. - r Reader - roffset int64 - - // Huffman decoders for literal/length, distance. - h1, h2 huffmanDecoder - - // Length arrays used to define Huffman codes. - bits *[maxNumLit + maxNumDist]int - codebits *[numCodes]int - - // Output history, buffer. - dict dictDecoder - - // Next step in the decompression, - // and decompression state. - step step - stepState int - err error - toRead []byte - hl, hd *huffmanDecoder - copyLen int - copyDist int - - // Temporary buffer (avoids repeated allocation). - buf [4]byte - - // Input bits, in top of b. - b uint32 - - nb uint - final bool -} - -func (f *decompressor) nextBlock() { - for f.nb < 1+2 { - if f.err = f.moreBits(); f.err != nil { - return - } - } - f.final = f.b&1 == 1 - f.b >>= 1 - typ := f.b & 3 - f.b >>= 2 - f.nb -= 1 + 2 - switch typ { - case 0: - f.dataBlock() - if debugDecode { - fmt.Println("stored block") - } - case 1: - // compressed, fixed Huffman tables - f.hl = &fixedHuffmanDecoder - f.hd = nil - f.huffmanBlockDecoder() - if debugDecode { - fmt.Println("predefinied huffman block") - } - case 2: - // compressed, dynamic Huffman tables - if f.err = f.readHuffman(); f.err != nil { - break - } - f.hl = &f.h1 - f.hd = &f.h2 - f.huffmanBlockDecoder() - if debugDecode { - fmt.Println("dynamic huffman block") - } - default: - // 3 is reserved. - if debugDecode { - fmt.Println("reserved data block encountered") - } - f.err = CorruptInputError(f.roffset) - } -} - -func (f *decompressor) Read(b []byte) (int, error) { - for { - if len(f.toRead) > 0 { - n := copy(b, f.toRead) - f.toRead = f.toRead[n:] - if len(f.toRead) == 0 { - return n, f.err - } - return n, nil - } - if f.err != nil { - return 0, f.err - } - - f.doStep() - - if f.err != nil && len(f.toRead) == 0 { - f.toRead = f.dict.readFlush() // Flush what's left in case of error - } - } -} - -// WriteTo implements the io.WriteTo interface for io.Copy and friends. -func (f *decompressor) WriteTo(w io.Writer) (int64, error) { - total := int64(0) - flushed := false - for { - if len(f.toRead) > 0 { - n, err := w.Write(f.toRead) - total += int64(n) - if err != nil { - f.err = err - return total, err - } - if n != len(f.toRead) { - return total, io.ErrShortWrite - } - f.toRead = f.toRead[:0] - } - if f.err != nil && flushed { - if f.err == io.EOF { - return total, nil - } - return total, f.err - } - if f.err == nil { - f.doStep() - } - if len(f.toRead) == 0 && f.err != nil && !flushed { - f.toRead = f.dict.readFlush() // Flush what's left in case of error - flushed = true - } - } -} - -func (f *decompressor) Close() error { - if f.err == io.EOF { - return nil - } - return f.err -} - -// RFC 1951 section 3.2.7. -// Compression with dynamic Huffman codes - -var codeOrder = [...]int{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} - -func (f *decompressor) readHuffman() error { - // HLIT[5], HDIST[5], HCLEN[4]. - for f.nb < 5+5+4 { - if err := f.moreBits(); err != nil { - return err - } - } - nlit := int(f.b&0x1F) + 257 - if nlit > maxNumLit { - if debugDecode { - fmt.Println("nlit > maxNumLit", nlit) - } - return CorruptInputError(f.roffset) - } - f.b >>= 5 - ndist := int(f.b&0x1F) + 1 - if ndist > maxNumDist { - if debugDecode { - fmt.Println("ndist > maxNumDist", ndist) - } - return CorruptInputError(f.roffset) - } - f.b >>= 5 - nclen := int(f.b&0xF) + 4 - // numCodes is 19, so nclen is always valid. - f.b >>= 4 - f.nb -= 5 + 5 + 4 - - // (HCLEN+4)*3 bits: code lengths in the magic codeOrder order. - for i := 0; i < nclen; i++ { - for f.nb < 3 { - if err := f.moreBits(); err != nil { - return err - } - } - f.codebits[codeOrder[i]] = int(f.b & 0x7) - f.b >>= 3 - f.nb -= 3 - } - for i := nclen; i < len(codeOrder); i++ { - f.codebits[codeOrder[i]] = 0 - } - if !f.h1.init(f.codebits[0:]) { - if debugDecode { - fmt.Println("init codebits failed") - } - return CorruptInputError(f.roffset) - } - - // HLIT + 257 code lengths, HDIST + 1 code lengths, - // using the code length Huffman code. - for i, n := 0, nlit+ndist; i < n; { - x, err := f.huffSym(&f.h1) - if err != nil { - return err - } - if x < 16 { - // Actual length. - f.bits[i] = x - i++ - continue - } - // Repeat previous length or zero. - var rep int - var nb uint - var b int - switch x { - default: - return InternalError("unexpected length code") - case 16: - rep = 3 - nb = 2 - if i == 0 { - if debugDecode { - fmt.Println("i==0") - } - return CorruptInputError(f.roffset) - } - b = f.bits[i-1] - case 17: - rep = 3 - nb = 3 - b = 0 - case 18: - rep = 11 - nb = 7 - b = 0 - } - for f.nb < nb { - if err := f.moreBits(); err != nil { - if debugDecode { - fmt.Println("morebits:", err) - } - return err - } - } - rep += int(f.b & uint32(1<<(nb®SizeMaskUint32)-1)) - f.b >>= nb & regSizeMaskUint32 - f.nb -= nb - if i+rep > n { - if debugDecode { - fmt.Println("i+rep > n", i, rep, n) - } - return CorruptInputError(f.roffset) - } - for j := 0; j < rep; j++ { - f.bits[i] = b - i++ - } - } - - if !f.h1.init(f.bits[0:nlit]) || !f.h2.init(f.bits[nlit:nlit+ndist]) { - if debugDecode { - fmt.Println("init2 failed") - } - return CorruptInputError(f.roffset) - } - - // As an optimization, we can initialize the maxRead bits to read at a time - // for the HLIT tree to the length of the EOB marker since we know that - // every block must terminate with one. This preserves the property that - // we never read any extra bytes after the end of the DEFLATE stream. - if f.h1.maxRead < f.bits[endBlockMarker] { - f.h1.maxRead = f.bits[endBlockMarker] - } - if !f.final { - // If not the final block, the smallest block possible is - // a predefined table, BTYPE=01, with a single EOB marker. - // This will take up 3 + 7 bits. - f.h1.maxRead += 10 - } - - return nil -} - -// Copy a single uncompressed data block from input to output. -func (f *decompressor) dataBlock() { - // Uncompressed. - // Discard current half-byte. - left := (f.nb) & 7 - f.nb -= left - f.b >>= left - - offBytes := f.nb >> 3 - // Unfilled values will be overwritten. - f.buf[0] = uint8(f.b) - f.buf[1] = uint8(f.b >> 8) - f.buf[2] = uint8(f.b >> 16) - f.buf[3] = uint8(f.b >> 24) - - f.roffset += int64(offBytes) - f.nb, f.b = 0, 0 - - // Length then ones-complement of length. - nr, err := io.ReadFull(f.r, f.buf[offBytes:4]) - f.roffset += int64(nr) - if err != nil { - f.err = noEOF(err) - return - } - n := uint16(f.buf[0]) | uint16(f.buf[1])<<8 - nn := uint16(f.buf[2]) | uint16(f.buf[3])<<8 - if nn != ^n { - if debugDecode { - ncomp := ^n - fmt.Println("uint16(nn) != uint16(^n)", nn, ncomp) - } - f.err = CorruptInputError(f.roffset) - return - } - - if n == 0 { - f.toRead = f.dict.readFlush() - f.finishBlock() - return - } - - f.copyLen = int(n) - f.copyData() -} - -// copyData copies f.copyLen bytes from the underlying reader into f.hist. -// It pauses for reads when f.hist is full. -func (f *decompressor) copyData() { - buf := f.dict.writeSlice() - if len(buf) > f.copyLen { - buf = buf[:f.copyLen] - } - - cnt, err := io.ReadFull(f.r, buf) - f.roffset += int64(cnt) - f.copyLen -= cnt - f.dict.writeMark(cnt) - if err != nil { - f.err = noEOF(err) - return - } - - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() - f.step = copyData - return - } - f.finishBlock() -} - -func (f *decompressor) finishBlock() { - if f.final { - if f.dict.availRead() > 0 { - f.toRead = f.dict.readFlush() - } - f.err = io.EOF - } - f.step = nextBlock -} - -func (f *decompressor) doStep() { - switch f.step { - case copyData: - f.copyData() - case nextBlock: - f.nextBlock() - case huffmanBytesBuffer: - f.huffmanBytesBuffer() - case huffmanBytesReader: - f.huffmanBytesReader() - case huffmanBufioReader: - f.huffmanBufioReader() - case huffmanStringsReader: - f.huffmanStringsReader() - case huffmanGenericReader: - f.huffmanGenericReader() - default: - panic("BUG: unexpected step state") - } -} - -// noEOF returns err, unless err == io.EOF, in which case it returns io.ErrUnexpectedEOF. -func noEOF(e error) error { - if e == io.EOF { - return io.ErrUnexpectedEOF - } - return e -} - -func (f *decompressor) moreBits() error { - c, err := f.r.ReadByte() - if err != nil { - return noEOF(err) - } - f.roffset++ - f.b |= uint32(c) << (f.nb & regSizeMaskUint32) - f.nb += 8 - return nil -} - -// Read the next Huffman-encoded symbol from f according to h. -func (f *decompressor) huffSym(h *huffmanDecoder) (int, error) { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(h.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b - for { - for nb < n { - c, err := f.r.ReadByte() - if err != nil { - f.b = b - f.nb = nb - return 0, noEOF(err) - } - f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 - } - chunk := h.chunks[b&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = h.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&h.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= nb { - if n == 0 { - f.b = b - f.nb = nb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return 0, f.err - } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n - return int(chunk >> huffmanValueShift), nil - } - } -} - -func makeReader(r io.Reader) Reader { - if rr, ok := r.(Reader); ok { - return rr - } - return bufio.NewReader(r) -} - -func fixedHuffmanDecoderInit() { - fixedOnce.Do(func() { - // These come from the RFC section 3.2.6. - var bits [288]int - for i := 0; i < 144; i++ { - bits[i] = 8 - } - for i := 144; i < 256; i++ { - bits[i] = 9 - } - for i := 256; i < 280; i++ { - bits[i] = 7 - } - for i := 280; i < 288; i++ { - bits[i] = 8 - } - fixedHuffmanDecoder.init(bits[:]) - }) -} - -func (f *decompressor) Reset(r io.Reader, dict []byte) error { - *f = decompressor{ - r: makeReader(r), - bits: f.bits, - codebits: f.codebits, - h1: f.h1, - h2: f.h2, - dict: f.dict, - step: nextBlock, - } - f.dict.init(maxMatchOffset, dict) - return nil -} - -// NewReader returns a new ReadCloser that can be used -// to read the uncompressed version of r. -// If r does not also implement io.ByteReader, -// the decompressor may read more data than necessary from r. -// It is the caller's responsibility to call Close on the ReadCloser -// when finished reading. -// -// The ReadCloser returned by NewReader also implements Resetter. -func NewReader(r io.Reader) io.ReadCloser { - fixedHuffmanDecoderInit() - - var f decompressor - f.r = makeReader(r) - f.bits = new([maxNumLit + maxNumDist]int) - f.codebits = new([numCodes]int) - f.step = nextBlock - f.dict.init(maxMatchOffset, nil) - return &f -} - -// NewReaderDict is like NewReader but initializes the reader -// with a preset dictionary. The returned Reader behaves as if -// the uncompressed data stream started with the given dictionary, -// which has already been read. NewReaderDict is typically used -// to read data compressed by NewWriterDict. -// -// The ReadCloser returned by NewReader also implements Resetter. -func NewReaderDict(r io.Reader, dict []byte) io.ReadCloser { - fixedHuffmanDecoderInit() - - var f decompressor - f.r = makeReader(r) - f.bits = new([maxNumLit + maxNumDist]int) - f.codebits = new([numCodes]int) - f.step = nextBlock - f.dict.init(maxMatchOffset, dict) - return &f -} diff --git a/vendor/github.com/klauspost/compress/flate/inflate_gen.go b/vendor/github.com/klauspost/compress/flate/inflate_gen.go deleted file mode 100644 index 2b2f993f75..0000000000 --- a/vendor/github.com/klauspost/compress/flate/inflate_gen.go +++ /dev/null @@ -1,1283 +0,0 @@ -// Code generated by go generate gen_inflate.go. DO NOT EDIT. - -package flate - -import ( - "bufio" - "bytes" - "fmt" - "math/bits" - "strings" -) - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanBytesBuffer() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*bytes.Buffer) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesBuffer - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesBuffer // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanBytesReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*bytes.Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanBufioReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*bufio.Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanBufioReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanBufioReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanStringsReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*strings.Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanStringsReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanStringsReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanGenericReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanGenericReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanGenericReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -func (f *decompressor) huffmanBlockDecoder() { - switch f.r.(type) { - case *bytes.Buffer: - f.huffmanBytesBuffer() - case *bytes.Reader: - f.huffmanBytesReader() - case *bufio.Reader: - f.huffmanBufioReader() - case *strings.Reader: - f.huffmanStringsReader() - case Reader: - f.huffmanGenericReader() - default: - f.huffmanGenericReader() - } -} diff --git a/vendor/github.com/klauspost/compress/flate/level1.go b/vendor/github.com/klauspost/compress/flate/level1.go deleted file mode 100644 index 703b9a89aa..0000000000 --- a/vendor/github.com/klauspost/compress/flate/level1.go +++ /dev/null @@ -1,241 +0,0 @@ -package flate - -import ( - "encoding/binary" - "fmt" - "math/bits" -) - -// fastGen maintains the table for matches, -// and the previous byte block for level 2. -// This is the generic implementation. -type fastEncL1 struct { - fastGen - table [tableSize]tableEntry -} - -// EncodeL1 uses a similar algorithm to level 1 -func (e *fastEncL1) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashBytes = 5 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - - for { - const skipLog = 5 - const doEvery = 2 - - nextS := s - var candidate tableEntry - for { - nextHash := hashLen(cv, tableBits, hashBytes) - candidate = e.table[nextHash] - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - - now := load6432(src, nextS) - e.table[nextHash] = tableEntry{offset: s + e.cur} - nextHash = hashLen(now, tableBits, hashBytes) - - offset := s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - e.table[nextHash] = tableEntry{offset: nextS + e.cur} - break - } - - // Do one right away... - cv = now - s = nextS - nextS++ - candidate = e.table[nextHash] - now >>= 8 - e.table[nextHash] = tableEntry{offset: s + e.cur} - - offset = s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - e.table[nextHash] = tableEntry{offset: nextS + e.cur} - break - } - cv = now - s = nextS - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - t := candidate.offset - e.cur - var l = int32(4) - if false { - l = e.matchlenLong(s+4, t+4, src) + 4 - } else { - // inlined: - a := src[s+4:] - b := src[t+4:] - for len(a) >= 8 { - if diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b); diff != 0 { - l += int32(bits.TrailingZeros64(diff) >> 3) - break - } - l += 8 - a = a[8:] - b = b[8:] - } - if len(a) < 8 { - b = b[:len(a)] - for i := range a { - if a[i] != b[i] { - break - } - l++ - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - // Save the match found - if false { - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - } else { - // Inlined... - xoffset := uint32(s - t - baseMatchOffset) - xlength := l - oc := offsetCode(xoffset) - xoffset |= oc << 16 - for xlength > 0 { - xl := xlength - if xl > 258 { - if xl > 258+baseMatchLength { - xl = 258 - } else { - xl = 258 - baseMatchLength - } - } - xlength -= xl - xl -= baseMatchLength - dst.extraHist[lengthCodes1[uint8(xl)]]++ - dst.offHist[oc]++ - dst.tokens[dst.n] = token(matchType | uint32(xl)<= s { - s = nextS + 1 - } - if s >= sLimit { - // Index first pair after match end. - if int(s+l+8) < len(src) { - cv := load6432(src, s) - e.table[hashLen(cv, tableBits, hashBytes)] = tableEntry{offset: s + e.cur} - } - goto emitRemainder - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 and at s. If - // another emitCopy is not our next move, also calculate nextHash - // at s+1. At least on GOARCH=amd64, these three hash calculations - // are faster as one load64 call (with some shifts) instead of - // three load32 calls. - x := load6432(src, s-2) - o := e.cur + s - 2 - prevHash := hashLen(x, tableBits, hashBytes) - e.table[prevHash] = tableEntry{offset: o} - x >>= 16 - currHash := hashLen(x, tableBits, hashBytes) - candidate = e.table[currHash] - e.table[currHash] = tableEntry{offset: o + 2} - - offset := s - (candidate.offset - e.cur) - if offset > maxMatchOffset || uint32(x) != load3232(src, candidate.offset-e.cur) { - cv = x >> 8 - s++ - break - } - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/vendor/github.com/klauspost/compress/flate/level2.go b/vendor/github.com/klauspost/compress/flate/level2.go deleted file mode 100644 index 876dfbe305..0000000000 --- a/vendor/github.com/klauspost/compress/flate/level2.go +++ /dev/null @@ -1,214 +0,0 @@ -package flate - -import "fmt" - -// fastGen maintains the table for matches, -// and the previous byte block for level 2. -// This is the generic implementation. -type fastEncL2 struct { - fastGen - table [bTableSize]tableEntry -} - -// EncodeL2 uses a similar algorithm to level 1, but is capable -// of matching across blocks giving better compression at a small slowdown. -func (e *fastEncL2) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashBytes = 5 - ) - - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - // When should we start skipping if we haven't found matches in a long while. - const skipLog = 5 - const doEvery = 2 - - nextS := s - var candidate tableEntry - for { - nextHash := hashLen(cv, bTableBits, hashBytes) - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - candidate = e.table[nextHash] - now := load6432(src, nextS) - e.table[nextHash] = tableEntry{offset: s + e.cur} - nextHash = hashLen(now, bTableBits, hashBytes) - - offset := s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - e.table[nextHash] = tableEntry{offset: nextS + e.cur} - break - } - - // Do one right away... - cv = now - s = nextS - nextS++ - candidate = e.table[nextHash] - now >>= 8 - e.table[nextHash] = tableEntry{offset: s + e.cur} - - offset = s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - break - } - cv = now - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - // Call emitCopy, and then see if another emitCopy could be our next - // move. Repeat until we find no match for the input immediately after - // what was consumed by the last emitCopy call. - // - // If we exit this loop normally then we need to call emitLiteral next, - // though we don't yet know how big the literal will be. We handle that - // by proceeding to the next iteration of the main loop. We also can - // exit this loop via goto if we get close to exhausting the input. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - t := candidate.offset - e.cur - l := e.matchlenLong(s+4, t+4, src) + 4 - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - // Index first pair after match end. - if int(s+l+8) < len(src) { - cv := load6432(src, s) - e.table[hashLen(cv, bTableBits, hashBytes)] = tableEntry{offset: s + e.cur} - } - goto emitRemainder - } - - // Store every second hash in-between, but offset by 1. - for i := s - l + 2; i < s-5; i += 7 { - x := load6432(src, i) - nextHash := hashLen(x, bTableBits, hashBytes) - e.table[nextHash] = tableEntry{offset: e.cur + i} - // Skip one - x >>= 16 - nextHash = hashLen(x, bTableBits, hashBytes) - e.table[nextHash] = tableEntry{offset: e.cur + i + 2} - // Skip one - x >>= 16 - nextHash = hashLen(x, bTableBits, hashBytes) - e.table[nextHash] = tableEntry{offset: e.cur + i + 4} - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 to s. If - // another emitCopy is not our next move, also calculate nextHash - // at s+1. At least on GOARCH=amd64, these three hash calculations - // are faster as one load64 call (with some shifts) instead of - // three load32 calls. - x := load6432(src, s-2) - o := e.cur + s - 2 - prevHash := hashLen(x, bTableBits, hashBytes) - prevHash2 := hashLen(x>>8, bTableBits, hashBytes) - e.table[prevHash] = tableEntry{offset: o} - e.table[prevHash2] = tableEntry{offset: o + 1} - currHash := hashLen(x>>16, bTableBits, hashBytes) - candidate = e.table[currHash] - e.table[currHash] = tableEntry{offset: o + 2} - - offset := s - (candidate.offset - e.cur) - if offset > maxMatchOffset || uint32(x>>16) != load3232(src, candidate.offset-e.cur) { - cv = x >> 24 - s++ - break - } - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/vendor/github.com/klauspost/compress/flate/level3.go b/vendor/github.com/klauspost/compress/flate/level3.go deleted file mode 100644 index 7aa2b72a12..0000000000 --- a/vendor/github.com/klauspost/compress/flate/level3.go +++ /dev/null @@ -1,241 +0,0 @@ -package flate - -import "fmt" - -// fastEncL3 -type fastEncL3 struct { - fastGen - table [1 << 16]tableEntryPrev -} - -// Encode uses a similar algorithm to level 2, will check up to two candidates. -func (e *fastEncL3) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - tableBits = 16 - tableSize = 1 << tableBits - hashBytes = 5 - ) - - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - } - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - e.table[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // Skip if too small. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 7 - nextS := s - var candidate tableEntry - for { - nextHash := hashLen(cv, tableBits, hashBytes) - s = nextS - nextS = s + 1 + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - candidates := e.table[nextHash] - now := load6432(src, nextS) - - // Safe offset distance until s + 4... - minOffset := e.cur + s - (maxMatchOffset - 4) - e.table[nextHash] = tableEntryPrev{Prev: candidates.Cur, Cur: tableEntry{offset: s + e.cur}} - - // Check both candidates - candidate = candidates.Cur - if candidate.offset < minOffset { - cv = now - // Previous will also be invalid, we have nothing. - continue - } - - if uint32(cv) == load3232(src, candidate.offset-e.cur) { - if candidates.Prev.offset < minOffset || uint32(cv) != load3232(src, candidates.Prev.offset-e.cur) { - break - } - // Both match and are valid, pick longest. - offset := s - (candidate.offset - e.cur) - o2 := s - (candidates.Prev.offset - e.cur) - l1, l2 := matchLen(src[s+4:], src[s-offset+4:]), matchLen(src[s+4:], src[s-o2+4:]) - if l2 > l1 { - candidate = candidates.Prev - } - break - } else { - // We only check if value mismatches. - // Offset will always be invalid in other cases. - candidate = candidates.Prev - if candidate.offset > minOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - break - } - } - cv = now - } - - // Call emitCopy, and then see if another emitCopy could be our next - // move. Repeat until we find no match for the input immediately after - // what was consumed by the last emitCopy call. - // - // If we exit this loop normally then we need to call emitLiteral next, - // though we don't yet know how big the literal will be. We handle that - // by proceeding to the next iteration of the main loop. We also can - // exit this loop via goto if we get close to exhausting the input. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - // - t := candidate.offset - e.cur - l := e.matchlenLong(s+4, t+4, src) + 4 - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - t += l - // Index first pair after match end. - if int(t+8) < len(src) && t > 0 { - cv = load6432(src, t) - nextHash := hashLen(cv, tableBits, hashBytes) - e.table[nextHash] = tableEntryPrev{ - Prev: e.table[nextHash].Cur, - Cur: tableEntry{offset: e.cur + t}, - } - } - goto emitRemainder - } - - // Store every 5th hash in-between. - for i := s - l + 2; i < s-5; i += 6 { - nextHash := hashLen(load6432(src, i), tableBits, hashBytes) - e.table[nextHash] = tableEntryPrev{ - Prev: e.table[nextHash].Cur, - Cur: tableEntry{offset: e.cur + i}} - } - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 to s. - x := load6432(src, s-2) - prevHash := hashLen(x, tableBits, hashBytes) - - e.table[prevHash] = tableEntryPrev{ - Prev: e.table[prevHash].Cur, - Cur: tableEntry{offset: e.cur + s - 2}, - } - x >>= 8 - prevHash = hashLen(x, tableBits, hashBytes) - - e.table[prevHash] = tableEntryPrev{ - Prev: e.table[prevHash].Cur, - Cur: tableEntry{offset: e.cur + s - 1}, - } - x >>= 8 - currHash := hashLen(x, tableBits, hashBytes) - candidates := e.table[currHash] - cv = x - e.table[currHash] = tableEntryPrev{ - Prev: candidates.Cur, - Cur: tableEntry{offset: s + e.cur}, - } - - // Check both candidates - candidate = candidates.Cur - minOffset := e.cur + s - (maxMatchOffset - 4) - - if candidate.offset > minOffset { - if uint32(cv) == load3232(src, candidate.offset-e.cur) { - // Found a match... - continue - } - candidate = candidates.Prev - if candidate.offset > minOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - // Match at prev... - continue - } - } - cv = x >> 8 - s++ - break - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/vendor/github.com/klauspost/compress/flate/level4.go b/vendor/github.com/klauspost/compress/flate/level4.go deleted file mode 100644 index 23c08b325c..0000000000 --- a/vendor/github.com/klauspost/compress/flate/level4.go +++ /dev/null @@ -1,221 +0,0 @@ -package flate - -import "fmt" - -type fastEncL4 struct { - fastGen - table [tableSize]tableEntry - bTable [tableSize]tableEntry -} - -func (e *fastEncL4) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntry{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.bTable[i].offset = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 6 - const doEvery = 1 - - nextS := s - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - e.bTable[nextHashL] = entry - - t = lCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.offset-e.cur) { - // We got a long match. Use that. - break - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - lCandidate = e.bTable[hash7(next, tableBits)] - - // If the next long is a candidate, check if we should use that instead... - lOff := nextS - (lCandidate.offset - e.cur) - if lOff < maxMatchOffset && load3232(src, lCandidate.offset-e.cur) == uint32(next) { - l1, l2 := matchLen(src[s+4:], src[t+4:]), matchLen(src[nextS+4:], src[nextS-lOff+4:]) - if l2 > l1 { - s = nextS - t = lCandidate.offset - e.cur - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - // Extend the 4-byte match as long as possible. - l := e.matchlenLong(s+4, t+4, src) + 4 - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if debugDeflate { - if t >= s { - panic("s-t") - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - // Index first pair after match end. - if int(s+8) < len(src) { - cv := load6432(src, s) - e.table[hashLen(cv, tableBits, hashShortBytes)] = tableEntry{offset: s + e.cur} - e.bTable[hash7(cv, tableBits)] = tableEntry{offset: s + e.cur} - } - goto emitRemainder - } - - // Store every 3rd hash in-between - if true { - i := nextS - if i < s-1 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - e.bTable[hash7(cv, tableBits)] = t - e.bTable[hash7(cv>>8, tableBits)] = t2 - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - - i += 3 - for ; i < s-1; i += 3 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - e.bTable[hash7(cv, tableBits)] = t - e.bTable[hash7(cv>>8, tableBits)] = t2 - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - } - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - x := load6432(src, s-1) - o := e.cur + s - 1 - prevHashS := hashLen(x, tableBits, hashShortBytes) - prevHashL := hash7(x, tableBits) - e.table[prevHashS] = tableEntry{offset: o} - e.bTable[prevHashL] = tableEntry{offset: o} - cv = x >> 8 - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/vendor/github.com/klauspost/compress/flate/level5.go b/vendor/github.com/klauspost/compress/flate/level5.go deleted file mode 100644 index 1f61ec1829..0000000000 --- a/vendor/github.com/klauspost/compress/flate/level5.go +++ /dev/null @@ -1,708 +0,0 @@ -package flate - -import "fmt" - -type fastEncL5 struct { - fastGen - table [tableSize]tableEntry - bTable [tableSize]tableEntryPrev -} - -func (e *fastEncL5) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - v.Prev.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - } - e.bTable[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 6 - const doEvery = 1 - - nextS := s - var l int32 - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = entry, eLong.Cur - - nextHashS = hashLen(next, tableBits, hashShortBytes) - nextHashL = hash7(next, tableBits) - - t = lCandidate.Cur.offset - e.cur - if s-t < maxMatchOffset { - if uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - t2 := lCandidate.Prev.offset - e.cur - if s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - l = e.matchlen(s+4, t+4, src) + 4 - ml1 := e.matchlen(s+4, t2+4, src) + 4 - if ml1 > l { - t = t2 - l = ml1 - break - } - } - break - } - t = lCandidate.Prev.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - break - } - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - l = e.matchlen(s+4, t+4, src) + 4 - lCandidate = e.bTable[nextHashL] - // Store the next match - - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // If the next long is a candidate, use that... - t2 := lCandidate.Cur.offset - e.cur - if nextS-t2 < maxMatchOffset { - if load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - // If the previous long is a candidate, use that... - t2 = lCandidate.Prev.offset - e.cur - if nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - if l == 0 { - // Extend the 4-byte match as long as possible. - l = e.matchlenLong(s+4, t+4, src) + 4 - } else if l == maxMatchLength { - l += e.matchlenLong(s+l, t+l, src) - } - - // Try to locate a better match by checking the end of best match... - if sAt := s + l; l < 30 && sAt < sLimit { - // Allow some bytes at the beginning to mismatch. - // Sweet spot is 2/3 bytes depending on input. - // 3 is only a little better when it is but sometimes a lot worse. - // The skipped bytes are tested in Extend backwards, - // and still picked up as part of the match if they do. - const skipBeginning = 2 - eLong := e.bTable[hash7(load6432(src, sAt), tableBits)].Cur.offset - t2 := eLong - e.cur - l + skipBeginning - s2 := s + skipBeginning - off := s2 - t2 - if t2 >= 0 && off < maxMatchOffset && off > 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if debugDeflate { - if t >= s { - panic(fmt.Sprintln("s-t", s, t)) - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", s-t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - goto emitRemainder - } - - // Store every 3rd hash in-between. - if true { - const hashEvery = 3 - i := s - l + 1 - if i < s-1 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // Do an long at i+1 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - eLong = &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // We only have enough bits for a short entry at i+2 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - - // Skip one - otherwise we risk hitting 's' - i += 4 - for ; i < s-1; i += hashEvery { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - } - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - x := load6432(src, s-1) - o := e.cur + s - 1 - prevHashS := hashLen(x, tableBits, hashShortBytes) - prevHashL := hash7(x, tableBits) - e.table[prevHashS] = tableEntry{offset: o} - eLong := &e.bTable[prevHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: o}, eLong.Cur - cv = x >> 8 - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} - -// fastEncL5Window is a level 5 encoder, -// but with a custom window size. -type fastEncL5Window struct { - hist []byte - cur int32 - maxOffset int32 - table [tableSize]tableEntry - bTable [tableSize]tableEntryPrev -} - -func (e *fastEncL5Window) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - maxMatchOffset := e.maxOffset - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - v.Prev.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - } - e.bTable[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 6 - const doEvery = 1 - - nextS := s - var l int32 - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = entry, eLong.Cur - - nextHashS = hashLen(next, tableBits, hashShortBytes) - nextHashL = hash7(next, tableBits) - - t = lCandidate.Cur.offset - e.cur - if s-t < maxMatchOffset { - if uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - t2 := lCandidate.Prev.offset - e.cur - if s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - l = e.matchlen(s+4, t+4, src) + 4 - ml1 := e.matchlen(s+4, t2+4, src) + 4 - if ml1 > l { - t = t2 - l = ml1 - break - } - } - break - } - t = lCandidate.Prev.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - break - } - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - l = e.matchlen(s+4, t+4, src) + 4 - lCandidate = e.bTable[nextHashL] - // Store the next match - - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // If the next long is a candidate, use that... - t2 := lCandidate.Cur.offset - e.cur - if nextS-t2 < maxMatchOffset { - if load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - // If the previous long is a candidate, use that... - t2 = lCandidate.Prev.offset - e.cur - if nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - if l == 0 { - // Extend the 4-byte match as long as possible. - l = e.matchlenLong(s+4, t+4, src) + 4 - } else if l == maxMatchLength { - l += e.matchlenLong(s+l, t+l, src) - } - - // Try to locate a better match by checking the end of best match... - if sAt := s + l; l < 30 && sAt < sLimit { - // Allow some bytes at the beginning to mismatch. - // Sweet spot is 2/3 bytes depending on input. - // 3 is only a little better when it is but sometimes a lot worse. - // The skipped bytes are tested in Extend backwards, - // and still picked up as part of the match if they do. - const skipBeginning = 2 - eLong := e.bTable[hash7(load6432(src, sAt), tableBits)].Cur.offset - t2 := eLong - e.cur - l + skipBeginning - s2 := s + skipBeginning - off := s2 - t2 - if t2 >= 0 && off < maxMatchOffset && off > 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if debugDeflate { - if t >= s { - panic(fmt.Sprintln("s-t", s, t)) - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", s-t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - goto emitRemainder - } - - // Store every 3rd hash in-between. - if true { - const hashEvery = 3 - i := s - l + 1 - if i < s-1 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // Do an long at i+1 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - eLong = &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // We only have enough bits for a short entry at i+2 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - - // Skip one - otherwise we risk hitting 's' - i += 4 - for ; i < s-1; i += hashEvery { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - } - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - x := load6432(src, s-1) - o := e.cur + s - 1 - prevHashS := hashLen(x, tableBits, hashShortBytes) - prevHashL := hash7(x, tableBits) - e.table[prevHashS] = tableEntry{offset: o} - eLong := &e.bTable[prevHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: o}, eLong.Cur - cv = x >> 8 - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} - -// Reset the encoding table. -func (e *fastEncL5Window) Reset() { - // We keep the same allocs, since we are compressing the same block sizes. - if cap(e.hist) < allocHistory { - e.hist = make([]byte, 0, allocHistory) - } - - // We offset current position so everything will be out of reach. - // If we are above the buffer reset it will be cleared anyway since len(hist) == 0. - if e.cur <= int32(bufferReset) { - e.cur += e.maxOffset + int32(len(e.hist)) - } - e.hist = e.hist[:0] -} - -func (e *fastEncL5Window) addBlock(src []byte) int32 { - // check if we have space already - maxMatchOffset := e.maxOffset - - if len(e.hist)+len(src) > cap(e.hist) { - if cap(e.hist) == 0 { - e.hist = make([]byte, 0, allocHistory) - } else { - if cap(e.hist) < int(maxMatchOffset*2) { - panic("unexpected buffer size") - } - // Move down - offset := int32(len(e.hist)) - maxMatchOffset - copy(e.hist[0:maxMatchOffset], e.hist[offset:]) - e.cur += offset - e.hist = e.hist[:maxMatchOffset] - } - } - s := int32(len(e.hist)) - e.hist = append(e.hist, src...) - return s -} - -// matchlen will return the match length between offsets and t in src. -// The maximum length returned is maxMatchLength - 4. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastEncL5Window) matchlen(s, t int32, src []byte) int32 { - if debugDecode { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > e.maxOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - s1 := int(s) + maxMatchLength - 4 - if s1 > len(src) { - s1 = len(src) - } - - // Extend the match to be as long as possible. - return int32(matchLen(src[s:s1], src[t:])) -} - -// matchlenLong will return the match length between offsets and t in src. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastEncL5Window) matchlenLong(s, t int32, src []byte) int32 { - if debugDeflate { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > e.maxOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - // Extend the match to be as long as possible. - return int32(matchLen(src[s:], src[t:])) -} diff --git a/vendor/github.com/klauspost/compress/flate/level6.go b/vendor/github.com/klauspost/compress/flate/level6.go deleted file mode 100644 index f1e9d98fa5..0000000000 --- a/vendor/github.com/klauspost/compress/flate/level6.go +++ /dev/null @@ -1,325 +0,0 @@ -package flate - -import "fmt" - -type fastEncL6 struct { - fastGen - table [tableSize]tableEntry - bTable [tableSize]tableEntryPrev -} - -func (e *fastEncL6) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - v.Prev.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - } - e.bTable[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - // Repeat MUST be > 1 and within range - repeat := int32(1) - for { - const skipLog = 7 - const doEvery = 1 - - nextS := s - var l int32 - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = entry, eLong.Cur - - // Calculate hashes of 'next' - nextHashS = hashLen(next, tableBits, hashShortBytes) - nextHashL = hash7(next, tableBits) - - t = lCandidate.Cur.offset - e.cur - if s-t < maxMatchOffset { - if uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) { - // Long candidate matches at least 4 bytes. - - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // Check the previous long candidate as well. - t2 := lCandidate.Prev.offset - e.cur - if s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - l = e.matchlen(s+4, t+4, src) + 4 - ml1 := e.matchlen(s+4, t2+4, src) + 4 - if ml1 > l { - t = t2 - l = ml1 - break - } - } - break - } - // Current value did not match, but check if previous long value does. - t = lCandidate.Prev.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - break - } - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - l = e.matchlen(s+4, t+4, src) + 4 - - // Look up next long candidate (at nextS) - lCandidate = e.bTable[nextHashL] - - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // Check repeat at s + repOff - const repOff = 1 - t2 := s - repeat + repOff - if load3232(src, t2) == uint32(cv>>(8*repOff)) { - ml := e.matchlen(s+4+repOff, t2+4, src) + 4 - if ml > l { - t = t2 - l = ml - s += repOff - // Not worth checking more. - break - } - } - - // If the next long is a candidate, use that... - t2 = lCandidate.Cur.offset - e.cur - if nextS-t2 < maxMatchOffset { - if load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - // This is ok, but check previous as well. - } - } - // If the previous long is a candidate, use that... - t2 = lCandidate.Prev.offset - e.cur - if nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - // Extend the 4-byte match as long as possible. - if l == 0 { - l = e.matchlenLong(s+4, t+4, src) + 4 - } else if l == maxMatchLength { - l += e.matchlenLong(s+l, t+l, src) - } - - // Try to locate a better match by checking the end-of-match... - if sAt := s + l; sAt < sLimit { - // Allow some bytes at the beginning to mismatch. - // Sweet spot is 2/3 bytes depending on input. - // 3 is only a little better when it is but sometimes a lot worse. - // The skipped bytes are tested in Extend backwards, - // and still picked up as part of the match if they do. - const skipBeginning = 2 - eLong := &e.bTable[hash7(load6432(src, sAt), tableBits)] - // Test current - t2 := eLong.Cur.offset - e.cur - l + skipBeginning - s2 := s + skipBeginning - off := s2 - t2 - if off < maxMatchOffset { - if off > 0 && t2 >= 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - // Test next: - t2 = eLong.Prev.offset - e.cur - l + skipBeginning - off := s2 - t2 - if off > 0 && off < maxMatchOffset && t2 >= 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if false { - if t >= s { - panic(fmt.Sprintln("s-t", s, t)) - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", s-t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - repeat = s - t - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - // Index after match end. - for i := nextS + 1; i < int32(len(src))-8; i += 2 { - cv := load6432(src, i) - e.table[hashLen(cv, tableBits, hashShortBytes)] = tableEntry{offset: i + e.cur} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = tableEntry{offset: i + e.cur}, eLong.Cur - } - goto emitRemainder - } - - // Store every long hash in-between and every second short. - if true { - for i := nextS + 1; i < s-1; i += 2 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong2 := &e.bTable[hash7(cv>>8, tableBits)] - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - eLong.Cur, eLong.Prev = t, eLong.Cur - eLong2.Cur, eLong2.Prev = t2, eLong2.Cur - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - cv = load6432(src, s) - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/vendor/github.com/klauspost/compress/flate/matchlen_amd64.go b/vendor/github.com/klauspost/compress/flate/matchlen_amd64.go deleted file mode 100644 index 4bd3885841..0000000000 --- a/vendor/github.com/klauspost/compress/flate/matchlen_amd64.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build amd64 && !appengine && !noasm && gc -// +build amd64,!appengine,!noasm,gc - -// Copyright 2019+ Klaus Post. All rights reserved. -// License information can be found in the LICENSE file. - -package flate - -// matchLen returns how many bytes match in a and b -// -// It assumes that: -// -// len(a) <= len(b) and len(a) > 0 -// -//go:noescape -func matchLen(a []byte, b []byte) int diff --git a/vendor/github.com/klauspost/compress/flate/matchlen_amd64.s b/vendor/github.com/klauspost/compress/flate/matchlen_amd64.s deleted file mode 100644 index 9a7655c0f7..0000000000 --- a/vendor/github.com/klauspost/compress/flate/matchlen_amd64.s +++ /dev/null @@ -1,68 +0,0 @@ -// Copied from S2 implementation. - -//go:build !appengine && !noasm && gc && !noasm - -#include "textflag.h" - -// func matchLen(a []byte, b []byte) int -// Requires: BMI -TEXT ·matchLen(SB), NOSPLIT, $0-56 - MOVQ a_base+0(FP), AX - MOVQ b_base+24(FP), CX - MOVQ a_len+8(FP), DX - - // matchLen - XORL SI, SI - CMPL DX, $0x08 - JB matchlen_match4_standalone - -matchlen_loopback_standalone: - MOVQ (AX)(SI*1), BX - XORQ (CX)(SI*1), BX - TESTQ BX, BX - JZ matchlen_loop_standalone - -#ifdef GOAMD64_v3 - TZCNTQ BX, BX -#else - BSFQ BX, BX -#endif - SARQ $0x03, BX - LEAL (SI)(BX*1), SI - JMP gen_match_len_end - -matchlen_loop_standalone: - LEAL -8(DX), DX - LEAL 8(SI), SI - CMPL DX, $0x08 - JAE matchlen_loopback_standalone - -matchlen_match4_standalone: - CMPL DX, $0x04 - JB matchlen_match2_standalone - MOVL (AX)(SI*1), BX - CMPL (CX)(SI*1), BX - JNE matchlen_match2_standalone - LEAL -4(DX), DX - LEAL 4(SI), SI - -matchlen_match2_standalone: - CMPL DX, $0x02 - JB matchlen_match1_standalone - MOVW (AX)(SI*1), BX - CMPW (CX)(SI*1), BX - JNE matchlen_match1_standalone - LEAL -2(DX), DX - LEAL 2(SI), SI - -matchlen_match1_standalone: - CMPL DX, $0x01 - JB gen_match_len_end - MOVB (AX)(SI*1), BL - CMPB (CX)(SI*1), BL - JNE gen_match_len_end - INCL SI - -gen_match_len_end: - MOVQ SI, ret+48(FP) - RET diff --git a/vendor/github.com/klauspost/compress/flate/matchlen_generic.go b/vendor/github.com/klauspost/compress/flate/matchlen_generic.go deleted file mode 100644 index ad5cd814b9..0000000000 --- a/vendor/github.com/klauspost/compress/flate/matchlen_generic.go +++ /dev/null @@ -1,33 +0,0 @@ -//go:build !amd64 || appengine || !gc || noasm -// +build !amd64 appengine !gc noasm - -// Copyright 2019+ Klaus Post. All rights reserved. -// License information can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "math/bits" -) - -// matchLen returns the maximum common prefix length of a and b. -// a must be the shortest of the two. -func matchLen(a, b []byte) (n int) { - for ; len(a) >= 8 && len(b) >= 8; a, b = a[8:], b[8:] { - diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b) - if diff != 0 { - return n + bits.TrailingZeros64(diff)>>3 - } - n += 8 - } - - for i := range a { - if a[i] != b[i] { - break - } - n++ - } - return n - -} diff --git a/vendor/github.com/klauspost/compress/flate/regmask_amd64.go b/vendor/github.com/klauspost/compress/flate/regmask_amd64.go deleted file mode 100644 index 6ed28061b2..0000000000 --- a/vendor/github.com/klauspost/compress/flate/regmask_amd64.go +++ /dev/null @@ -1,37 +0,0 @@ -package flate - -const ( - // Masks for shifts with register sizes of the shift value. - // This can be used to work around the x86 design of shifting by mod register size. - // It can be used when a variable shift is always smaller than the register size. - - // reg8SizeMaskX - shift value is 8 bits, shifted is X - reg8SizeMask8 = 7 - reg8SizeMask16 = 15 - reg8SizeMask32 = 31 - reg8SizeMask64 = 63 - - // reg16SizeMaskX - shift value is 16 bits, shifted is X - reg16SizeMask8 = reg8SizeMask8 - reg16SizeMask16 = reg8SizeMask16 - reg16SizeMask32 = reg8SizeMask32 - reg16SizeMask64 = reg8SizeMask64 - - // reg32SizeMaskX - shift value is 32 bits, shifted is X - reg32SizeMask8 = reg8SizeMask8 - reg32SizeMask16 = reg8SizeMask16 - reg32SizeMask32 = reg8SizeMask32 - reg32SizeMask64 = reg8SizeMask64 - - // reg64SizeMaskX - shift value is 64 bits, shifted is X - reg64SizeMask8 = reg8SizeMask8 - reg64SizeMask16 = reg8SizeMask16 - reg64SizeMask32 = reg8SizeMask32 - reg64SizeMask64 = reg8SizeMask64 - - // regSizeMaskUintX - shift value is uint, shifted is X - regSizeMaskUint8 = reg8SizeMask8 - regSizeMaskUint16 = reg8SizeMask16 - regSizeMaskUint32 = reg8SizeMask32 - regSizeMaskUint64 = reg8SizeMask64 -) diff --git a/vendor/github.com/klauspost/compress/flate/regmask_other.go b/vendor/github.com/klauspost/compress/flate/regmask_other.go deleted file mode 100644 index 1b7a2cbd79..0000000000 --- a/vendor/github.com/klauspost/compress/flate/regmask_other.go +++ /dev/null @@ -1,40 +0,0 @@ -//go:build !amd64 -// +build !amd64 - -package flate - -const ( - // Masks for shifts with register sizes of the shift value. - // This can be used to work around the x86 design of shifting by mod register size. - // It can be used when a variable shift is always smaller than the register size. - - // reg8SizeMaskX - shift value is 8 bits, shifted is X - reg8SizeMask8 = 0xff - reg8SizeMask16 = 0xff - reg8SizeMask32 = 0xff - reg8SizeMask64 = 0xff - - // reg16SizeMaskX - shift value is 16 bits, shifted is X - reg16SizeMask8 = 0xffff - reg16SizeMask16 = 0xffff - reg16SizeMask32 = 0xffff - reg16SizeMask64 = 0xffff - - // reg32SizeMaskX - shift value is 32 bits, shifted is X - reg32SizeMask8 = 0xffffffff - reg32SizeMask16 = 0xffffffff - reg32SizeMask32 = 0xffffffff - reg32SizeMask64 = 0xffffffff - - // reg64SizeMaskX - shift value is 64 bits, shifted is X - reg64SizeMask8 = 0xffffffffffffffff - reg64SizeMask16 = 0xffffffffffffffff - reg64SizeMask32 = 0xffffffffffffffff - reg64SizeMask64 = 0xffffffffffffffff - - // regSizeMaskUintX - shift value is uint, shifted is X - regSizeMaskUint8 = ^uint(0) - regSizeMaskUint16 = ^uint(0) - regSizeMaskUint32 = ^uint(0) - regSizeMaskUint64 = ^uint(0) -) diff --git a/vendor/github.com/klauspost/compress/flate/stateless.go b/vendor/github.com/klauspost/compress/flate/stateless.go deleted file mode 100644 index f3d4139ef3..0000000000 --- a/vendor/github.com/klauspost/compress/flate/stateless.go +++ /dev/null @@ -1,318 +0,0 @@ -package flate - -import ( - "io" - "math" - "sync" -) - -const ( - maxStatelessBlock = math.MaxInt16 - // dictionary will be taken from maxStatelessBlock, so limit it. - maxStatelessDict = 8 << 10 - - slTableBits = 13 - slTableSize = 1 << slTableBits - slTableShift = 32 - slTableBits -) - -type statelessWriter struct { - dst io.Writer - closed bool -} - -func (s *statelessWriter) Close() error { - if s.closed { - return nil - } - s.closed = true - // Emit EOF block - return StatelessDeflate(s.dst, nil, true, nil) -} - -func (s *statelessWriter) Write(p []byte) (n int, err error) { - err = StatelessDeflate(s.dst, p, false, nil) - if err != nil { - return 0, err - } - return len(p), nil -} - -func (s *statelessWriter) Reset(w io.Writer) { - s.dst = w - s.closed = false -} - -// NewStatelessWriter will do compression but without maintaining any state -// between Write calls. -// There will be no memory kept between Write calls, -// but compression and speed will be suboptimal. -// Because of this, the size of actual Write calls will affect output size. -func NewStatelessWriter(dst io.Writer) io.WriteCloser { - return &statelessWriter{dst: dst} -} - -// bitWriterPool contains bit writers that can be reused. -var bitWriterPool = sync.Pool{ - New: func() interface{} { - return newHuffmanBitWriter(nil) - }, -} - -// StatelessDeflate allows compressing directly to a Writer without retaining state. -// When returning everything will be flushed. -// Up to 8KB of an optional dictionary can be given which is presumed to precede the block. -// Longer dictionaries will be truncated and will still produce valid output. -// Sending nil dictionary is perfectly fine. -func StatelessDeflate(out io.Writer, in []byte, eof bool, dict []byte) error { - var dst tokens - bw := bitWriterPool.Get().(*huffmanBitWriter) - bw.reset(out) - defer func() { - // don't keep a reference to our output - bw.reset(nil) - bitWriterPool.Put(bw) - }() - if eof && len(in) == 0 { - // Just write an EOF block. - // Could be faster... - bw.writeStoredHeader(0, true) - bw.flush() - return bw.err - } - - // Truncate dict - if len(dict) > maxStatelessDict { - dict = dict[len(dict)-maxStatelessDict:] - } - - // For subsequent loops, keep shallow dict reference to avoid alloc+copy. - var inDict []byte - - for len(in) > 0 { - todo := in - if len(inDict) > 0 { - if len(todo) > maxStatelessBlock-maxStatelessDict { - todo = todo[:maxStatelessBlock-maxStatelessDict] - } - } else if len(todo) > maxStatelessBlock-len(dict) { - todo = todo[:maxStatelessBlock-len(dict)] - } - inOrg := in - in = in[len(todo):] - uncompressed := todo - if len(dict) > 0 { - // combine dict and source - bufLen := len(todo) + len(dict) - combined := make([]byte, bufLen) - copy(combined, dict) - copy(combined[len(dict):], todo) - todo = combined - } - // Compress - if len(inDict) == 0 { - statelessEnc(&dst, todo, int16(len(dict))) - } else { - statelessEnc(&dst, inDict[:maxStatelessDict+len(todo)], maxStatelessDict) - } - isEof := eof && len(in) == 0 - - if dst.n == 0 { - bw.writeStoredHeader(len(uncompressed), isEof) - if bw.err != nil { - return bw.err - } - bw.writeBytes(uncompressed) - } else if int(dst.n) > len(uncompressed)-len(uncompressed)>>4 { - // If we removed less than 1/16th, huffman compress the block. - bw.writeBlockHuff(isEof, uncompressed, len(in) == 0) - } else { - bw.writeBlockDynamic(&dst, isEof, uncompressed, len(in) == 0) - } - if len(in) > 0 { - // Retain a dict if we have more - inDict = inOrg[len(uncompressed)-maxStatelessDict:] - dict = nil - dst.Reset() - } - if bw.err != nil { - return bw.err - } - } - if !eof { - // Align, only a stored block can do that. - bw.writeStoredHeader(0, false) - } - bw.flush() - return bw.err -} - -func hashSL(u uint32) uint32 { - return (u * 0x1e35a7bd) >> slTableShift -} - -func load3216(b []byte, i int16) uint32 { - // Help the compiler eliminate bounds checks on the read so it can be done in a single read. - b = b[i:] - b = b[:4] - return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 -} - -func load6416(b []byte, i int16) uint64 { - // Help the compiler eliminate bounds checks on the read so it can be done in a single read. - b = b[i:] - b = b[:8] - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | - uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 -} - -func statelessEnc(dst *tokens, src []byte, startAt int16) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - ) - - type tableEntry struct { - offset int16 - } - - var table [slTableSize]tableEntry - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src)-int(startAt) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = 0 - return - } - // Index until startAt - if startAt > 0 { - cv := load3232(src, 0) - for i := int16(0); i < startAt; i++ { - table[hashSL(cv)] = tableEntry{offset: i} - cv = (cv >> 8) | (uint32(src[i+4]) << 24) - } - } - - s := startAt + 1 - nextEmit := startAt - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int16(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load3216(src, s) - - for { - const skipLog = 5 - const doEvery = 2 - - nextS := s - var candidate tableEntry - for { - nextHash := hashSL(cv) - candidate = table[nextHash] - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit || nextS <= 0 { - goto emitRemainder - } - - now := load6416(src, nextS) - table[nextHash] = tableEntry{offset: s} - nextHash = hashSL(uint32(now)) - - if cv == load3216(src, candidate.offset) { - table[nextHash] = tableEntry{offset: nextS} - break - } - - // Do one right away... - cv = uint32(now) - s = nextS - nextS++ - candidate = table[nextHash] - now >>= 8 - table[nextHash] = tableEntry{offset: s} - - if cv == load3216(src, candidate.offset) { - table[nextHash] = tableEntry{offset: nextS} - break - } - cv = uint32(now) - s = nextS - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - t := candidate.offset - l := int16(matchLen(src[s+4:], src[t+4:]) + 4) - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - // Save the match found - dst.AddMatchLong(int32(l), uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - if s >= sLimit { - goto emitRemainder - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 and at s. If - // another emitCopy is not our next move, also calculate nextHash - // at s+1. At least on GOARCH=amd64, these three hash calculations - // are faster as one load64 call (with some shifts) instead of - // three load32 calls. - x := load6416(src, s-2) - o := s - 2 - prevHash := hashSL(uint32(x)) - table[prevHash] = tableEntry{offset: o} - x >>= 16 - currHash := hashSL(uint32(x)) - candidate = table[currHash] - table[currHash] = tableEntry{offset: o + 2} - - if uint32(x) != load3216(src, candidate.offset) { - cv = uint32(x >> 8) - s++ - break - } - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/vendor/github.com/klauspost/compress/flate/token.go b/vendor/github.com/klauspost/compress/flate/token.go deleted file mode 100644 index d818790c13..0000000000 --- a/vendor/github.com/klauspost/compress/flate/token.go +++ /dev/null @@ -1,379 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "bytes" - "encoding/binary" - "fmt" - "io" - "math" -) - -const ( - // bits 0-16 xoffset = offset - MIN_OFFSET_SIZE, or literal - 16 bits - // bits 16-22 offsetcode - 5 bits - // bits 22-30 xlength = length - MIN_MATCH_LENGTH - 8 bits - // bits 30-32 type 0 = literal 1=EOF 2=Match 3=Unused - 2 bits - lengthShift = 22 - offsetMask = 1<maxnumlit - offHist [32]uint16 // offset codes - litHist [256]uint16 // codes 0->255 - nFilled int - n uint16 // Must be able to contain maxStoreBlockSize - tokens [maxStoreBlockSize + 1]token -} - -func (t *tokens) Reset() { - if t.n == 0 { - return - } - t.n = 0 - t.nFilled = 0 - for i := range t.litHist[:] { - t.litHist[i] = 0 - } - for i := range t.extraHist[:] { - t.extraHist[i] = 0 - } - for i := range t.offHist[:] { - t.offHist[i] = 0 - } -} - -func (t *tokens) Fill() { - if t.n == 0 { - return - } - for i, v := range t.litHist[:] { - if v == 0 { - t.litHist[i] = 1 - t.nFilled++ - } - } - for i, v := range t.extraHist[:literalCount-256] { - if v == 0 { - t.nFilled++ - t.extraHist[i] = 1 - } - } - for i, v := range t.offHist[:offsetCodeCount] { - if v == 0 { - t.offHist[i] = 1 - } - } -} - -func indexTokens(in []token) tokens { - var t tokens - t.indexTokens(in) - return t -} - -func (t *tokens) indexTokens(in []token) { - t.Reset() - for _, tok := range in { - if tok < matchType { - t.AddLiteral(tok.literal()) - continue - } - t.AddMatch(uint32(tok.length()), tok.offset()&matchOffsetOnlyMask) - } -} - -// emitLiteral writes a literal chunk and returns the number of bytes written. -func emitLiteral(dst *tokens, lit []byte) { - for _, v := range lit { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } -} - -func (t *tokens) AddLiteral(lit byte) { - t.tokens[t.n] = token(lit) - t.litHist[lit]++ - t.n++ -} - -// from https://stackoverflow.com/a/28730362 -func mFastLog2(val float32) float32 { - ux := int32(math.Float32bits(val)) - log2 := (float32)(((ux >> 23) & 255) - 128) - ux &= -0x7f800001 - ux += 127 << 23 - uval := math.Float32frombits(uint32(ux)) - log2 += ((-0.34484843)*uval+2.02466578)*uval - 0.67487759 - return log2 -} - -// EstimatedBits will return an minimum size estimated by an *optimal* -// compression of the block. -// The size of the block -func (t *tokens) EstimatedBits() int { - shannon := float32(0) - bits := int(0) - nMatches := 0 - total := int(t.n) + t.nFilled - if total > 0 { - invTotal := 1.0 / float32(total) - for _, v := range t.litHist[:] { - if v > 0 { - n := float32(v) - shannon += atLeastOne(-mFastLog2(n*invTotal)) * n - } - } - // Just add 15 for EOB - shannon += 15 - for i, v := range t.extraHist[1 : literalCount-256] { - if v > 0 { - n := float32(v) - shannon += atLeastOne(-mFastLog2(n*invTotal)) * n - bits += int(lengthExtraBits[i&31]) * int(v) - nMatches += int(v) - } - } - } - if nMatches > 0 { - invTotal := 1.0 / float32(nMatches) - for i, v := range t.offHist[:offsetCodeCount] { - if v > 0 { - n := float32(v) - shannon += atLeastOne(-mFastLog2(n*invTotal)) * n - bits += int(offsetExtraBits[i&31]) * int(v) - } - } - } - return int(shannon) + bits -} - -// AddMatch adds a match to the tokens. -// This function is very sensitive to inlining and right on the border. -func (t *tokens) AddMatch(xlength uint32, xoffset uint32) { - if debugDeflate { - if xlength >= maxMatchLength+baseMatchLength { - panic(fmt.Errorf("invalid length: %v", xlength)) - } - if xoffset >= maxMatchOffset+baseMatchOffset { - panic(fmt.Errorf("invalid offset: %v", xoffset)) - } - } - oCode := offsetCode(xoffset) - xoffset |= oCode << 16 - - t.extraHist[lengthCodes1[uint8(xlength)]]++ - t.offHist[oCode&31]++ - t.tokens[t.n] = token(matchType | xlength<= maxMatchOffset+baseMatchOffset { - panic(fmt.Errorf("invalid offset: %v", xoffset)) - } - } - oc := offsetCode(xoffset) - xoffset |= oc << 16 - for xlength > 0 { - xl := xlength - if xl > 258 { - // We need to have at least baseMatchLength left over for next loop. - if xl > 258+baseMatchLength { - xl = 258 - } else { - xl = 258 - baseMatchLength - } - } - xlength -= xl - xl -= baseMatchLength - t.extraHist[lengthCodes1[uint8(xl)]]++ - t.offHist[oc&31]++ - t.tokens[t.n] = token(matchType | uint32(xl)<> lengthShift) } - -// Convert length to code. -func lengthCode(len uint8) uint8 { return lengthCodes[len] } - -// Returns the offset code corresponding to a specific offset -func offsetCode(off uint32) uint32 { - if false { - if off < uint32(len(offsetCodes)) { - return offsetCodes[off&255] - } else if off>>7 < uint32(len(offsetCodes)) { - return offsetCodes[(off>>7)&255] + 14 - } else { - return offsetCodes[(off>>14)&255] + 28 - } - } - if off < uint32(len(offsetCodes)) { - return offsetCodes[uint8(off)] - } - return offsetCodes14[uint8(off>>7)] -} diff --git a/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go b/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go index 2aa6a95a02..2754bac6f1 100644 --- a/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go +++ b/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go @@ -51,7 +51,7 @@ func emitCopy(dst []byte, offset, length int) int { i := 0 // The maximum length for a single tagCopy1 or tagCopy2 op is 64 bytes. The // threshold for this loop is a little higher (at 68 = 64 + 4), and the - // length emitted down below is is a little lower (at 60 = 64 - 4), because + // length emitted down below is a little lower (at 60 = 64 - 4), because // it's shorter to encode a length 67 copy as a length 60 tagCopy2 followed // by a length 7 tagCopy1 (which encodes as 3+2 bytes) than to encode it as // a length 64 tagCopy2 followed by a length 3 tagCopy2 (which encodes as diff --git a/vendor/github.com/klauspost/compress/zstd/blockdec.go b/vendor/github.com/klauspost/compress/zstd/blockdec.go index 9f17ce601f..03744fbc76 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockdec.go +++ b/vendor/github.com/klauspost/compress/zstd/blockdec.go @@ -554,6 +554,9 @@ func (b *blockDec) prepareSequences(in []byte, hist *history) (err error) { if debugDecoder { printf("Compression modes: 0b%b", compMode) } + if compMode&3 != 0 { + return errors.New("corrupt block: reserved bits not zero") + } for i := uint(0); i < 3; i++ { mode := seqCompMode((compMode >> (6 - i*2)) & 3) if debugDecoder { diff --git a/vendor/github.com/klauspost/compress/zstd/blockenc.go b/vendor/github.com/klauspost/compress/zstd/blockenc.go index 2cfe925ade..32a7f401d5 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockenc.go +++ b/vendor/github.com/klauspost/compress/zstd/blockenc.go @@ -427,6 +427,16 @@ func (b *blockEnc) encodeLits(lits []byte, raw bool) error { return nil } +// encodeRLE will encode an RLE block. +func (b *blockEnc) encodeRLE(val byte, length uint32) { + var bh blockHeader + bh.setLast(b.last) + bh.setSize(length) + bh.setType(blockTypeRLE) + b.output = bh.appendTo(b.output) + b.output = append(b.output, val) +} + // fuzzFseEncoder can be used to fuzz the FSE encoder. func fuzzFseEncoder(data []byte) int { if len(data) > maxSequences || len(data) < 2 { @@ -479,6 +489,16 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { if len(b.sequences) == 0 { return b.encodeLits(b.literals, rawAllLits) } + if len(b.sequences) == 1 && len(org) > 0 && len(b.literals) <= 1 { + // Check common RLE cases. + seq := b.sequences[0] + if seq.litLen == uint32(len(b.literals)) && seq.offset-3 == 1 { + // Offset == 1 and 0 or 1 literals. + b.encodeRLE(org[0], b.sequences[0].matchLen+zstdMinMatch+seq.litLen) + return nil + } + } + // We want some difference to at least account for the headers. saved := b.size - len(b.literals) - (b.size >> 6) if saved < 16 { diff --git a/vendor/github.com/klauspost/compress/zstd/decoder.go b/vendor/github.com/klauspost/compress/zstd/decoder.go index f04aaa21eb..bbca17234a 100644 --- a/vendor/github.com/klauspost/compress/zstd/decoder.go +++ b/vendor/github.com/klauspost/compress/zstd/decoder.go @@ -82,7 +82,7 @@ var ( // can run multiple concurrent stateless decodes. It is even possible to // use stateless decodes while a stream is being decoded. // -// The Reset function can be used to initiate a new stream, which is will considerably +// The Reset function can be used to initiate a new stream, which will considerably // reduce the allocations normally caused by NewReader. func NewReader(r io.Reader, opts ...DOption) (*Decoder, error) { initPredefined() diff --git a/vendor/github.com/klauspost/compress/zstd/enc_best.go b/vendor/github.com/klauspost/compress/zstd/enc_best.go index 87f42879a8..4613724e9d 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_best.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_best.go @@ -135,8 +135,20 @@ func (e *bestFastEncoder) Encode(blk *blockEnc, src []byte) { break } + // Add block to history s := e.addBlock(src) blk.size = len(src) + + // Check RLE first + if len(src) > zstdMinMatch { + ml := matchLen(src[1:], src) + if ml == len(src)-1 { + blk.literals = append(blk.literals, src[0]) + blk.sequences = append(blk.sequences, seq{litLen: 1, matchLen: uint32(len(src)-1) - zstdMinMatch, offset: 1 + 3}) + return + } + } + if len(src) < minNonLiteralBlockSize { blk.extraLits = len(src) blk.literals = blk.literals[:len(src)] diff --git a/vendor/github.com/klauspost/compress/zstd/enc_better.go b/vendor/github.com/klauspost/compress/zstd/enc_better.go index 20d25b0e05..a4f5bf91fc 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_better.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_better.go @@ -102,9 +102,20 @@ func (e *betterFastEncoder) Encode(blk *blockEnc, src []byte) { e.cur = e.maxMatchOff break } - + // Add block to history s := e.addBlock(src) blk.size = len(src) + + // Check RLE first + if len(src) > zstdMinMatch { + ml := matchLen(src[1:], src) + if ml == len(src)-1 { + blk.literals = append(blk.literals, src[0]) + blk.sequences = append(blk.sequences, seq{litLen: 1, matchLen: uint32(len(src)-1) - zstdMinMatch, offset: 1 + 3}) + return + } + } + if len(src) < minNonLiteralBlockSize { blk.extraLits = len(src) blk.literals = blk.literals[:len(src)] diff --git a/vendor/github.com/klauspost/pgzip/.gitignore b/vendor/github.com/klauspost/pgzip/.gitignore deleted file mode 100644 index daf913b1b3..0000000000 --- a/vendor/github.com/klauspost/pgzip/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/klauspost/pgzip/.travis.yml b/vendor/github.com/klauspost/pgzip/.travis.yml deleted file mode 100644 index 34704000e9..0000000000 --- a/vendor/github.com/klauspost/pgzip/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ - -arch: - - amd64 - - ppc64le -language: go - -os: - - linux - - osx - -go: - - 1.13.x - - 1.14.x - - 1.15.x - - master - -env: - - GO111MODULE=off - -script: - - diff <(gofmt -d .) <(printf "") - - go test -v -cpu=1,2,4 . - - go test -v -cpu=2 -race -short . - -matrix: - allow_failures: - - go: 'master' - fast_finish: true diff --git a/vendor/github.com/klauspost/pgzip/GO_LICENSE b/vendor/github.com/klauspost/pgzip/GO_LICENSE deleted file mode 100644 index 7448756763..0000000000 --- a/vendor/github.com/klauspost/pgzip/GO_LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/klauspost/pgzip/LICENSE b/vendor/github.com/klauspost/pgzip/LICENSE deleted file mode 100644 index 2bdc0d7517..0000000000 --- a/vendor/github.com/klauspost/pgzip/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Klaus Post - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/vendor/github.com/klauspost/pgzip/README.md b/vendor/github.com/klauspost/pgzip/README.md deleted file mode 100644 index ecc8726fa7..0000000000 --- a/vendor/github.com/klauspost/pgzip/README.md +++ /dev/null @@ -1,134 +0,0 @@ -pgzip -===== - -Go parallel gzip compression/decompression. This is a fully gzip compatible drop in replacement for "compress/gzip". - -This will split compression into blocks that are compressed in parallel. -This can be useful for compressing big amounts of data. The output is a standard gzip file. - -The gzip decompression is modified so it decompresses ahead of the current reader. -This means that reads will be non-blocking if the decompressor can keep ahead of your code reading from it. -CRC calculation also takes place in a separate goroutine. - -You should only use this if you are (de)compressing big amounts of data, -say **more than 1MB** at the time, otherwise you will not see any benefit, -and it will likely be faster to use the internal gzip library -or [this package](https://github.com/klauspost/compress). - -It is important to note that this library creates and reads *standard gzip files*. -You do not have to match the compressor/decompressor to get the described speedups, -and the gzip files are fully compatible with other gzip readers/writers. - -A golang variant of this is [bgzf](https://godoc.org/github.com/biogo/hts/bgzf), -which has the same feature, as well as seeking in the resulting file. -The only drawback is a slightly bigger overhead compared to this and pure gzip. -See a comparison below. - -[![GoDoc][1]][2] [![Build Status][3]][4] - -[1]: https://godoc.org/github.com/klauspost/pgzip?status.svg -[2]: https://godoc.org/github.com/klauspost/pgzip -[3]: https://travis-ci.org/klauspost/pgzip.svg -[4]: https://travis-ci.org/klauspost/pgzip - -Installation -==== -```go get github.com/klauspost/pgzip/...``` - -You might need to get/update the dependencies: - -``` -go get -u github.com/klauspost/compress -``` - -Usage -==== -[Godoc Doumentation](https://godoc.org/github.com/klauspost/pgzip) - -To use as a replacement for gzip, exchange - -```import "compress/gzip"``` -with -```import gzip "github.com/klauspost/pgzip"```. - -# Changes - -* Oct 6, 2016: Fixed an issue if the destination writer returned an error. -* Oct 6, 2016: Better buffer reuse, should now generate less garbage. -* Oct 6, 2016: Output does not change based on write sizes. -* Dec 8, 2015: Decoder now supports the io.WriterTo interface, giving a speedup and less GC pressure. -* Oct 9, 2015: Reduced allocations by ~35 by using sync.Pool. ~15% overall speedup. - -Changes in [github.com/klauspost/compress](https://github.com/klauspost/compress#changelog) are also carried over, so see that for more changes. - -## Compression -The simplest way to use this is to simply do the same as you would when using [compress/gzip](http://golang.org/pkg/compress/gzip). - -To change the block size, use the added (*pgzip.Writer).SetConcurrency(blockSize, blocks int) function. With this you can control the approximate size of your blocks, as well as how many you want to be processing in parallel. Default values for this is SetConcurrency(1MB, runtime.GOMAXPROCS(0)), meaning blocks are split at 1 MB and up to the number of CPU threads blocks can be processing at once before the writer blocks. - - -Example: -``` -var b bytes.Buffer -w := gzip.NewWriter(&b) -w.SetConcurrency(100000, 10) -w.Write([]byte("hello, world\n")) -w.Close() -``` - -To get any performance gains, you should at least be compressing more than 1 megabyte of data at the time. - -You should at least have a block size of 100k and at least a number of blocks that match the number of cores your would like to utilize, but about twice the number of blocks would be the best. - -Another side effect of this is, that it is likely to speed up your other code, since writes to the compressor only blocks if the compressor is already compressing the number of blocks you have specified. This also means you don't have worry about buffering input to the compressor. - -## Decompression - -Decompression works similar to compression. That means that you simply call pgzip the same way as you would call [compress/gzip](http://golang.org/pkg/compress/gzip). - -The only difference is that if you want to specify your own readahead, you have to use `pgzip.NewReaderN(r io.Reader, blockSize, blocks int)` to get a reader with your custom blocksizes. The `blockSize` is the size of each block decoded, and `blocks` is the maximum number of blocks that is decoded ahead. - -See [Example on playground](http://play.golang.org/p/uHv1B5NbDh) - -Performance -==== -## Compression - -See my blog post in [Benchmarks of Golang Gzip](https://blog.klauspost.com/go-gzipdeflate-benchmarks/). - -Compression cost is usually about 0.2% with default settings with a block size of 250k. - -Example with GOMAXPROC set to 32 (16 core CPU) - -Content is [Matt Mahoneys 10GB corpus](http://mattmahoney.net/dc/10gb.html). Compression level 6. - -Compressor | MB/sec | speedup | size | size overhead (lower=better) -------------|----------|---------|------|--------- -[gzip](http://golang.org/pkg/compress/gzip) (golang) | 16.91MB/s (1 thread) | 1.0x | 4781329307 | 0% -[gzip](http://github.com/klauspost/compress/gzip) (klauspost) | 127.10MB/s (1 thread) | 7.52x | 4885366806 | +2.17% -[pgzip](https://github.com/klauspost/pgzip) (klauspost) | 2085.35MB/s| 123.34x | 4886132566 | +2.19% -[pargzip](https://godoc.org/github.com/golang/build/pargzip) (builder) | 334.04MB/s | 19.76x | 4786890417 | +0.12% - -pgzip also contains a [huffman only compression](https://github.com/klauspost/compress#linear-time-compression-huffman-only) mode, that will allow compression at ~450MB per core per second, largely independent of the content. - -See the [complete sheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing) for different content types and compression settings. - -## Decompression - -The decompression speedup is there because it allows you to do other work while the decompression is taking place. - -In the example above, the numbers are as follows on a 4 CPU machine: - -Decompressor | Time | Speedup --------------|------|-------- -[gzip](http://golang.org/pkg/compress/gzip) (golang) | 1m28.85s | 0% -[pgzip](https://github.com/klauspost/pgzip) (klauspost) | 43.48s | 104% - -But wait, since gzip decompression is inherently singlethreaded (aside from CRC calculation) how can it be more than 100% faster? Because pgzip due to its design also acts as a buffer. When using unbuffered gzip, you are also waiting for io when you are decompressing. If the gzip decoder can keep up, it will always have data ready for your reader, and you will not be waiting for input to the gzip decompressor to complete. - -This is pretty much an optimal situation for pgzip, but it reflects most common usecases for CPU intensive gzip usage. - -I haven't included [bgzf](https://godoc.org/github.com/biogo/hts/bgzf) in this comparison, since it only can decompress files created by a compatible encoder, and therefore cannot be considered a generic gzip decompressor. But if you are able to compress your files with a bgzf compatible program, you can expect it to scale beyond 100%. - -# License -This contains large portions of code from the go repository - see GO_LICENSE for more information. The changes are released under MIT License. See LICENSE for more information. diff --git a/vendor/github.com/klauspost/pgzip/gunzip.go b/vendor/github.com/klauspost/pgzip/gunzip.go deleted file mode 100644 index 3c4b32f16f..0000000000 --- a/vendor/github.com/klauspost/pgzip/gunzip.go +++ /dev/null @@ -1,597 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package pgzip implements reading and writing of gzip format compressed files, -// as specified in RFC 1952. -// -// This is a drop in replacement for "compress/gzip". -// This will split compression into blocks that are compressed in parallel. -// This can be useful for compressing big amounts of data. -// The gzip decompression has not been modified, but remains in the package, -// so you can use it as a complete replacement for "compress/gzip". -// -// See more at https://github.com/klauspost/pgzip -package pgzip - -import ( - "bufio" - "errors" - "hash" - "hash/crc32" - "io" - "sync" - "time" - - "github.com/klauspost/compress/flate" -) - -const ( - gzipID1 = 0x1f - gzipID2 = 0x8b - gzipDeflate = 8 - flagText = 1 << 0 - flagHdrCrc = 1 << 1 - flagExtra = 1 << 2 - flagName = 1 << 3 - flagComment = 1 << 4 -) - -func makeReader(r io.Reader) flate.Reader { - if rr, ok := r.(flate.Reader); ok { - return rr - } - return bufio.NewReader(r) -} - -var ( - // ErrChecksum is returned when reading GZIP data that has an invalid checksum. - ErrChecksum = errors.New("gzip: invalid checksum") - // ErrHeader is returned when reading GZIP data that has an invalid header. - ErrHeader = errors.New("gzip: invalid header") -) - -// The gzip file stores a header giving metadata about the compressed file. -// That header is exposed as the fields of the Writer and Reader structs. -type Header struct { - Comment string // comment - Extra []byte // "extra data" - ModTime time.Time // modification time - Name string // file name - OS byte // operating system type -} - -// A Reader is an io.Reader that can be read to retrieve -// uncompressed data from a gzip-format compressed file. -// -// In general, a gzip file can be a concatenation of gzip files, -// each with its own header. Reads from the Reader -// return the concatenation of the uncompressed data of each. -// Only the first header is recorded in the Reader fields. -// -// Gzip files store a length and checksum of the uncompressed data. -// The Reader will return a ErrChecksum when Read -// reaches the end of the uncompressed data if it does not -// have the expected length or checksum. Clients should treat data -// returned by Read as tentative until they receive the io.EOF -// marking the end of the data. -type Reader struct { - Header - r flate.Reader - decompressor io.ReadCloser - digest hash.Hash32 - size uint32 - flg byte - buf [512]byte - err error - closeErr chan error - multistream bool - - readAhead chan read - roff int // read offset - current []byte - closeReader chan struct{} - lastBlock bool - blockSize int - blocks int - - activeRA bool // Indication if readahead is active - mu sync.Mutex // Lock for above - - blockPool chan []byte -} - -type read struct { - b []byte - err error -} - -// NewReader creates a new Reader reading the given reader. -// The implementation buffers input and may read more data than necessary from r. -// It is the caller's responsibility to call Close on the Reader when done. -func NewReader(r io.Reader) (*Reader, error) { - z := new(Reader) - z.blocks = defaultBlocks - z.blockSize = defaultBlockSize - z.r = makeReader(r) - z.digest = crc32.NewIEEE() - z.multistream = true - z.blockPool = make(chan []byte, z.blocks) - for i := 0; i < z.blocks; i++ { - z.blockPool <- make([]byte, z.blockSize) - } - if err := z.readHeader(true); err != nil { - return nil, err - } - return z, nil -} - -// NewReaderN creates a new Reader reading the given reader. -// The implementation buffers input and may read more data than necessary from r. -// It is the caller's responsibility to call Close on the Reader when done. -// -// With this you can control the approximate size of your blocks, -// as well as how many blocks you want to have prefetched. -// -// Default values for this is blockSize = 250000, blocks = 16, -// meaning up to 16 blocks of maximum 250000 bytes will be -// prefetched. -func NewReaderN(r io.Reader, blockSize, blocks int) (*Reader, error) { - z := new(Reader) - z.blocks = blocks - z.blockSize = blockSize - z.r = makeReader(r) - z.digest = crc32.NewIEEE() - z.multistream = true - - // Account for too small values - if z.blocks <= 0 { - z.blocks = defaultBlocks - } - if z.blockSize <= 512 { - z.blockSize = defaultBlockSize - } - z.blockPool = make(chan []byte, z.blocks) - for i := 0; i < z.blocks; i++ { - z.blockPool <- make([]byte, z.blockSize) - } - if err := z.readHeader(true); err != nil { - return nil, err - } - return z, nil -} - -// Reset discards the Reader z's state and makes it equivalent to the -// result of its original state from NewReader, but reading from r instead. -// This permits reusing a Reader rather than allocating a new one. -func (z *Reader) Reset(r io.Reader) error { - z.killReadAhead() - z.r = makeReader(r) - z.digest = crc32.NewIEEE() - z.size = 0 - z.err = nil - z.multistream = true - - // Account for uninitialized values - if z.blocks <= 0 { - z.blocks = defaultBlocks - } - if z.blockSize <= 512 { - z.blockSize = defaultBlockSize - } - - if z.blockPool == nil { - z.blockPool = make(chan []byte, z.blocks) - for i := 0; i < z.blocks; i++ { - z.blockPool <- make([]byte, z.blockSize) - } - } - - return z.readHeader(true) -} - -// Multistream controls whether the reader supports multistream files. -// -// If enabled (the default), the Reader expects the input to be a sequence -// of individually gzipped data streams, each with its own header and -// trailer, ending at EOF. The effect is that the concatenation of a sequence -// of gzipped files is treated as equivalent to the gzip of the concatenation -// of the sequence. This is standard behavior for gzip readers. -// -// Calling Multistream(false) disables this behavior; disabling the behavior -// can be useful when reading file formats that distinguish individual gzip -// data streams or mix gzip data streams with other data streams. -// In this mode, when the Reader reaches the end of the data stream, -// Read returns io.EOF. If the underlying reader implements io.ByteReader, -// it will be left positioned just after the gzip stream. -// To start the next stream, call z.Reset(r) followed by z.Multistream(false). -// If there is no next stream, z.Reset(r) will return io.EOF. -func (z *Reader) Multistream(ok bool) { - z.multistream = ok -} - -// GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950). -func get4(p []byte) uint32 { - return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24 -} - -func (z *Reader) readString() (string, error) { - var err error - needconv := false - for i := 0; ; i++ { - if i >= len(z.buf) { - return "", ErrHeader - } - z.buf[i], err = z.r.ReadByte() - if err != nil { - return "", err - } - if z.buf[i] > 0x7f { - needconv = true - } - if z.buf[i] == 0 { - // GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1). - if needconv { - s := make([]rune, 0, i) - for _, v := range z.buf[0:i] { - s = append(s, rune(v)) - } - return string(s), nil - } - return string(z.buf[0:i]), nil - } - } -} - -func (z *Reader) read2() (uint32, error) { - _, err := io.ReadFull(z.r, z.buf[0:2]) - if err != nil { - return 0, err - } - return uint32(z.buf[0]) | uint32(z.buf[1])<<8, nil -} - -func (z *Reader) readHeader(save bool) error { - z.killReadAhead() - - _, err := io.ReadFull(z.r, z.buf[0:10]) - if err != nil { - return err - } - if z.buf[0] != gzipID1 || z.buf[1] != gzipID2 || z.buf[2] != gzipDeflate { - return ErrHeader - } - z.flg = z.buf[3] - if save { - z.ModTime = time.Unix(int64(get4(z.buf[4:8])), 0) - // z.buf[8] is xfl, ignored - z.OS = z.buf[9] - } - z.digest.Reset() - z.digest.Write(z.buf[0:10]) - - if z.flg&flagExtra != 0 { - n, err := z.read2() - if err != nil { - return err - } - data := make([]byte, n) - if _, err = io.ReadFull(z.r, data); err != nil { - return err - } - if save { - z.Extra = data - } - } - - var s string - if z.flg&flagName != 0 { - if s, err = z.readString(); err != nil { - return err - } - if save { - z.Name = s - } - } - - if z.flg&flagComment != 0 { - if s, err = z.readString(); err != nil { - return err - } - if save { - z.Comment = s - } - } - - if z.flg&flagHdrCrc != 0 { - n, err := z.read2() - if err != nil { - return err - } - sum := z.digest.Sum32() & 0xFFFF - if n != sum { - return ErrHeader - } - } - - z.digest.Reset() - z.decompressor = flate.NewReader(z.r) - z.doReadAhead() - return nil -} - -func (z *Reader) killReadAhead() error { - z.mu.Lock() - defer z.mu.Unlock() - if z.activeRA { - if z.closeReader != nil { - close(z.closeReader) - } - - // Wait for decompressor to be closed and return error, if any. - e, ok := <-z.closeErr - z.activeRA = false - - for blk := range z.readAhead { - if blk.b != nil { - z.blockPool <- blk.b - } - } - if cap(z.current) > 0 { - z.blockPool <- z.current - z.current = nil - } - if !ok { - // Channel is closed, so if there was any error it has already been returned. - return nil - } - return e - } - return nil -} - -// Starts readahead. -// Will return on error (including io.EOF) -// or when z.closeReader is closed. -func (z *Reader) doReadAhead() { - z.mu.Lock() - defer z.mu.Unlock() - z.activeRA = true - - if z.blocks <= 0 { - z.blocks = defaultBlocks - } - if z.blockSize <= 512 { - z.blockSize = defaultBlockSize - } - ra := make(chan read, z.blocks) - z.readAhead = ra - closeReader := make(chan struct{}, 0) - z.closeReader = closeReader - z.lastBlock = false - closeErr := make(chan error, 1) - z.closeErr = closeErr - z.size = 0 - z.roff = 0 - z.current = nil - decomp := z.decompressor - - go func() { - defer func() { - closeErr <- decomp.Close() - close(closeErr) - close(ra) - }() - - // We hold a local reference to digest, since - // it way be changed by reset. - digest := z.digest - var wg sync.WaitGroup - for { - var buf []byte - select { - case buf = <-z.blockPool: - case <-closeReader: - return - } - buf = buf[0:z.blockSize] - // Try to fill the buffer - n, err := io.ReadFull(decomp, buf) - if err == io.ErrUnexpectedEOF { - if n > 0 { - err = nil - } else { - // If we got zero bytes, we need to establish if - // we reached end of stream or truncated stream. - _, err = decomp.Read([]byte{}) - if err == io.EOF { - err = nil - } - } - } - if n < len(buf) { - buf = buf[0:n] - } - wg.Wait() - wg.Add(1) - go func() { - digest.Write(buf) - wg.Done() - }() - z.size += uint32(n) - - // If we return any error, out digest must be ready - if err != nil { - wg.Wait() - } - select { - case z.readAhead <- read{b: buf, err: err}: - case <-closeReader: - // Sent on close, we don't care about the next results - z.blockPool <- buf - return - } - if err != nil { - return - } - } - }() -} - -func (z *Reader) Read(p []byte) (n int, err error) { - if z.err != nil { - return 0, z.err - } - if len(p) == 0 { - return 0, nil - } - - for { - if len(z.current) == 0 && !z.lastBlock { - read := <-z.readAhead - - if read.err != nil { - // If not nil, the reader will have exited - z.closeReader = nil - - if read.err != io.EOF { - z.err = read.err - return - } - if read.err == io.EOF { - z.lastBlock = true - err = nil - } - } - z.current = read.b - z.roff = 0 - } - avail := z.current[z.roff:] - if len(p) >= len(avail) { - // If len(p) >= len(current), return all content of current - n = copy(p, avail) - z.blockPool <- z.current - z.current = nil - if z.lastBlock { - err = io.EOF - break - } - } else { - // We copy as much as there is space for - n = copy(p, avail) - z.roff += n - } - return - } - - // Finished file; check checksum + size. - if _, err := io.ReadFull(z.r, z.buf[0:8]); err != nil { - z.err = err - return 0, err - } - crc32, isize := get4(z.buf[0:4]), get4(z.buf[4:8]) - sum := z.digest.Sum32() - if sum != crc32 || isize != z.size { - z.err = ErrChecksum - return 0, z.err - } - - // File is ok; should we attempt reading one more? - if !z.multistream { - return 0, io.EOF - } - - // Is there another? - if err = z.readHeader(false); err != nil { - z.err = err - return - } - - // Yes. Reset and read from it. - return z.Read(p) -} - -func (z *Reader) WriteTo(w io.Writer) (n int64, err error) { - total := int64(0) - avail := z.current[z.roff:] - if len(avail) != 0 { - n, err := w.Write(avail) - if n != len(avail) { - return total, io.ErrShortWrite - } - total += int64(n) - if err != nil { - return total, err - } - z.blockPool <- z.current - z.current = nil - } - for { - if z.err != nil { - return total, z.err - } - // We write both to output and digest. - for { - // Read from input - read := <-z.readAhead - if read.err != nil { - // If not nil, the reader will have exited - z.closeReader = nil - - if read.err != io.EOF { - z.err = read.err - return total, z.err - } - if read.err == io.EOF { - z.lastBlock = true - err = nil - } - } - // Write what we got - n, err := w.Write(read.b) - if n != len(read.b) { - return total, io.ErrShortWrite - } - total += int64(n) - if err != nil { - return total, err - } - // Put block back - z.blockPool <- read.b - if z.lastBlock { - break - } - } - - // Finished file; check checksum + size. - if _, err := io.ReadFull(z.r, z.buf[0:8]); err != nil { - z.err = err - return total, err - } - crc32, isize := get4(z.buf[0:4]), get4(z.buf[4:8]) - sum := z.digest.Sum32() - if sum != crc32 || isize != z.size { - z.err = ErrChecksum - return total, z.err - } - // File is ok; should we attempt reading one more? - if !z.multistream { - return total, nil - } - - // Is there another? - err = z.readHeader(false) - if err == io.EOF { - return total, nil - } - if err != nil { - z.err = err - return total, err - } - } -} - -// Close closes the Reader. It does not close the underlying io.Reader. -func (z *Reader) Close() error { - return z.killReadAhead() -} diff --git a/vendor/github.com/klauspost/pgzip/gzip.go b/vendor/github.com/klauspost/pgzip/gzip.go deleted file mode 100644 index 257c4d299f..0000000000 --- a/vendor/github.com/klauspost/pgzip/gzip.go +++ /dev/null @@ -1,519 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pgzip - -import ( - "bytes" - "errors" - "fmt" - "hash" - "hash/crc32" - "io" - "runtime" - "sync" - "time" - - "github.com/klauspost/compress/flate" -) - -const ( - defaultBlockSize = 1 << 20 - tailSize = 16384 - defaultBlocks = 4 -) - -// These constants are copied from the flate package, so that code that imports -// "compress/gzip" does not also have to import "compress/flate". -const ( - NoCompression = flate.NoCompression - BestSpeed = flate.BestSpeed - BestCompression = flate.BestCompression - DefaultCompression = flate.DefaultCompression - ConstantCompression = flate.ConstantCompression - HuffmanOnly = flate.HuffmanOnly -) - -// A Writer is an io.WriteCloser. -// Writes to a Writer are compressed and written to w. -type Writer struct { - Header - w io.Writer - level int - wroteHeader bool - blockSize int - blocks int - currentBuffer []byte - prevTail []byte - digest hash.Hash32 - size int - closed bool - buf [10]byte - errMu sync.RWMutex - err error - pushedErr chan struct{} - results chan result - dictFlatePool sync.Pool - dstPool sync.Pool - wg sync.WaitGroup -} - -type result struct { - result chan []byte - notifyWritten chan struct{} -} - -// Use SetConcurrency to finetune the concurrency level if needed. -// -// With this you can control the approximate size of your blocks, -// as well as how many you want to be processing in parallel. -// -// Default values for this is SetConcurrency(defaultBlockSize, runtime.GOMAXPROCS(0)), -// meaning blocks are split at 1 MB and up to the number of CPU threads -// can be processing at once before the writer blocks. -func (z *Writer) SetConcurrency(blockSize, blocks int) error { - if blockSize <= tailSize { - return fmt.Errorf("gzip: block size cannot be less than or equal to %d", tailSize) - } - if blocks <= 0 { - return errors.New("gzip: blocks cannot be zero or less") - } - if blockSize == z.blockSize && blocks == z.blocks { - return nil - } - z.blockSize = blockSize - z.results = make(chan result, blocks) - z.blocks = blocks - z.dstPool.New = func() interface{} { return make([]byte, 0, blockSize+(blockSize)>>4) } - return nil -} - -// NewWriter returns a new Writer. -// Writes to the returned writer are compressed and written to w. -// -// It is the caller's responsibility to call Close on the WriteCloser when done. -// Writes may be buffered and not flushed until Close. -// -// Callers that wish to set the fields in Writer.Header must do so before -// the first call to Write or Close. The Comment and Name header fields are -// UTF-8 strings in Go, but the underlying format requires NUL-terminated ISO -// 8859-1 (Latin-1). NUL or non-Latin-1 runes in those strings will lead to an -// error on Write. -func NewWriter(w io.Writer) *Writer { - z, _ := NewWriterLevel(w, DefaultCompression) - return z -} - -// NewWriterLevel is like NewWriter but specifies the compression level instead -// of assuming DefaultCompression. -// -// The compression level can be DefaultCompression, NoCompression, or any -// integer value between BestSpeed and BestCompression inclusive. The error -// returned will be nil if the level is valid. -func NewWriterLevel(w io.Writer, level int) (*Writer, error) { - if level < ConstantCompression || level > BestCompression { - return nil, fmt.Errorf("gzip: invalid compression level: %d", level) - } - z := new(Writer) - z.SetConcurrency(defaultBlockSize, runtime.GOMAXPROCS(0)) - z.init(w, level) - return z, nil -} - -// This function must be used by goroutines to set an -// error condition, since z.err access is restricted -// to the callers goruotine. -func (z *Writer) pushError(err error) { - z.errMu.Lock() - if z.err != nil { - z.errMu.Unlock() - return - } - z.err = err - close(z.pushedErr) - z.errMu.Unlock() -} - -func (z *Writer) init(w io.Writer, level int) { - z.wg.Wait() - digest := z.digest - if digest != nil { - digest.Reset() - } else { - digest = crc32.NewIEEE() - } - z.Header = Header{OS: 255} - z.w = w - z.level = level - z.digest = digest - z.pushedErr = make(chan struct{}, 0) - z.results = make(chan result, z.blocks) - z.err = nil - z.closed = false - z.Comment = "" - z.Extra = nil - z.ModTime = time.Time{} - z.wroteHeader = false - z.currentBuffer = nil - z.buf = [10]byte{} - z.prevTail = nil - z.size = 0 - if z.dictFlatePool.New == nil { - z.dictFlatePool.New = func() interface{} { - f, _ := flate.NewWriterDict(w, level, nil) - return f - } - } -} - -// Reset discards the Writer z's state and makes it equivalent to the -// result of its original state from NewWriter or NewWriterLevel, but -// writing to w instead. This permits reusing a Writer rather than -// allocating a new one. -func (z *Writer) Reset(w io.Writer) { - if z.results != nil && !z.closed { - close(z.results) - } - z.SetConcurrency(defaultBlockSize, runtime.GOMAXPROCS(0)) - z.init(w, z.level) -} - -// GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950). -func put2(p []byte, v uint16) { - p[0] = uint8(v >> 0) - p[1] = uint8(v >> 8) -} - -func put4(p []byte, v uint32) { - p[0] = uint8(v >> 0) - p[1] = uint8(v >> 8) - p[2] = uint8(v >> 16) - p[3] = uint8(v >> 24) -} - -// writeBytes writes a length-prefixed byte slice to z.w. -func (z *Writer) writeBytes(b []byte) error { - if len(b) > 0xffff { - return errors.New("gzip.Write: Extra data is too large") - } - put2(z.buf[0:2], uint16(len(b))) - _, err := z.w.Write(z.buf[0:2]) - if err != nil { - return err - } - _, err = z.w.Write(b) - return err -} - -// writeString writes a UTF-8 string s in GZIP's format to z.w. -// GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1). -func (z *Writer) writeString(s string) (err error) { - // GZIP stores Latin-1 strings; error if non-Latin-1; convert if non-ASCII. - needconv := false - for _, v := range s { - if v == 0 || v > 0xff { - return errors.New("gzip.Write: non-Latin-1 header string") - } - if v > 0x7f { - needconv = true - } - } - if needconv { - b := make([]byte, 0, len(s)) - for _, v := range s { - b = append(b, byte(v)) - } - _, err = z.w.Write(b) - } else { - _, err = io.WriteString(z.w, s) - } - if err != nil { - return err - } - // GZIP strings are NUL-terminated. - z.buf[0] = 0 - _, err = z.w.Write(z.buf[0:1]) - return err -} - -// compressCurrent will compress the data currently buffered -// This should only be called from the main writer/flush/closer -func (z *Writer) compressCurrent(flush bool) { - c := z.currentBuffer - if len(c) > z.blockSize { - // This can never happen through the public interface. - panic("len(z.currentBuffer) > z.blockSize (most likely due to concurrent Write race)") - } - - r := result{} - r.result = make(chan []byte, 1) - r.notifyWritten = make(chan struct{}, 0) - // Reserve a result slot - select { - case z.results <- r: - case <-z.pushedErr: - return - } - - z.wg.Add(1) - tail := z.prevTail - if len(c) > tailSize { - buf := z.dstPool.Get().([]byte) // Put in .compressBlock - // Copy tail from current buffer before handing the buffer over to the - // compressBlock goroutine. - buf = append(buf[:0], c[len(c)-tailSize:]...) - z.prevTail = buf - } else { - z.prevTail = nil - } - go z.compressBlock(c, tail, r, z.closed) - - z.currentBuffer = z.dstPool.Get().([]byte) // Put in .compressBlock - z.currentBuffer = z.currentBuffer[:0] - - // Wait if flushing - if flush { - <-r.notifyWritten - } -} - -// Returns an error if it has been set. -// Cannot be used by functions that are from internal goroutines. -func (z *Writer) checkError() error { - z.errMu.RLock() - err := z.err - z.errMu.RUnlock() - return err -} - -// Write writes a compressed form of p to the underlying io.Writer. The -// compressed bytes are not necessarily flushed to output until -// the Writer is closed or Flush() is called. -// -// The function will return quickly, if there are unused buffers. -// The sent slice (p) is copied, and the caller is free to re-use the buffer -// when the function returns. -// -// Errors that occur during compression will be reported later, and a nil error -// does not signify that the compression succeeded (since it is most likely still running) -// That means that the call that returns an error may not be the call that caused it. -// Only Flush and Close functions are guaranteed to return any errors up to that point. -func (z *Writer) Write(p []byte) (int, error) { - if err := z.checkError(); err != nil { - return 0, err - } - // Write the GZIP header lazily. - if !z.wroteHeader { - z.wroteHeader = true - z.buf[0] = gzipID1 - z.buf[1] = gzipID2 - z.buf[2] = gzipDeflate - z.buf[3] = 0 - if z.Extra != nil { - z.buf[3] |= 0x04 - } - if z.Name != "" { - z.buf[3] |= 0x08 - } - if z.Comment != "" { - z.buf[3] |= 0x10 - } - put4(z.buf[4:8], uint32(z.ModTime.Unix())) - if z.level == BestCompression { - z.buf[8] = 2 - } else if z.level == BestSpeed { - z.buf[8] = 4 - } else { - z.buf[8] = 0 - } - z.buf[9] = z.OS - var n int - var err error - n, err = z.w.Write(z.buf[0:10]) - if err != nil { - z.pushError(err) - return n, err - } - if z.Extra != nil { - err = z.writeBytes(z.Extra) - if err != nil { - z.pushError(err) - return n, err - } - } - if z.Name != "" { - err = z.writeString(z.Name) - if err != nil { - z.pushError(err) - return n, err - } - } - if z.Comment != "" { - err = z.writeString(z.Comment) - if err != nil { - z.pushError(err) - return n, err - } - } - // Start receiving data from compressors - go func() { - listen := z.results - var failed bool - for { - r, ok := <-listen - // If closed, we are finished. - if !ok { - return - } - if failed { - close(r.notifyWritten) - continue - } - buf := <-r.result - n, err := z.w.Write(buf) - if err != nil { - z.pushError(err) - close(r.notifyWritten) - failed = true - continue - } - if n != len(buf) { - z.pushError(fmt.Errorf("gzip: short write %d should be %d", n, len(buf))) - failed = true - close(r.notifyWritten) - continue - } - z.dstPool.Put(buf) - close(r.notifyWritten) - } - }() - z.currentBuffer = z.dstPool.Get().([]byte) - z.currentBuffer = z.currentBuffer[:0] - } - q := p - for len(q) > 0 { - length := len(q) - if length+len(z.currentBuffer) > z.blockSize { - length = z.blockSize - len(z.currentBuffer) - } - z.digest.Write(q[:length]) - z.currentBuffer = append(z.currentBuffer, q[:length]...) - if len(z.currentBuffer) > z.blockSize { - panic("z.currentBuffer too large (most likely due to concurrent Write race)") - } - if len(z.currentBuffer) == z.blockSize { - z.compressCurrent(false) - if err := z.checkError(); err != nil { - return len(p) - len(q), err - } - } - z.size += length - q = q[length:] - } - return len(p), z.checkError() -} - -// Step 1: compresses buffer to buffer -// Step 2: send writer to channel -// Step 3: Close result channel to indicate we are done -func (z *Writer) compressBlock(p, prevTail []byte, r result, closed bool) { - defer func() { - close(r.result) - z.wg.Done() - }() - buf := z.dstPool.Get().([]byte) // Corresponding Put in .Write's result writer - dest := bytes.NewBuffer(buf[:0]) - - compressor := z.dictFlatePool.Get().(*flate.Writer) // Put below - compressor.ResetDict(dest, prevTail) - compressor.Write(p) - z.dstPool.Put(p) // Corresponding Get in .Write and .compressCurrent - - err := compressor.Flush() - if err != nil { - z.pushError(err) - return - } - if closed { - err = compressor.Close() - if err != nil { - z.pushError(err) - return - } - } - z.dictFlatePool.Put(compressor) // Get above - - if prevTail != nil { - z.dstPool.Put(prevTail) // Get in .compressCurrent - } - - // Read back buffer - buf = dest.Bytes() - r.result <- buf -} - -// Flush flushes any pending compressed data to the underlying writer. -// -// It is useful mainly in compressed network protocols, to ensure that -// a remote reader has enough data to reconstruct a packet. Flush does -// not return until the data has been written. If the underlying -// writer returns an error, Flush returns that error. -// -// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH. -func (z *Writer) Flush() error { - if err := z.checkError(); err != nil { - return err - } - if z.closed { - return nil - } - if !z.wroteHeader { - _, err := z.Write(nil) - if err != nil { - return err - } - } - // We send current block to compression - z.compressCurrent(true) - - return z.checkError() -} - -// UncompressedSize will return the number of bytes written. -// pgzip only, not a function in the official gzip package. -func (z *Writer) UncompressedSize() int { - return z.size -} - -// Close closes the Writer, flushing any unwritten data to the underlying -// io.Writer, but does not close the underlying io.Writer. -func (z *Writer) Close() error { - if err := z.checkError(); err != nil { - return err - } - if z.closed { - return nil - } - - z.closed = true - if !z.wroteHeader { - z.Write(nil) - if err := z.checkError(); err != nil { - return err - } - } - z.compressCurrent(true) - if err := z.checkError(); err != nil { - return err - } - close(z.results) - put4(z.buf[0:4], z.digest.Sum32()) - put4(z.buf[4:8], uint32(z.size)) - _, err := z.w.Write(z.buf[0:8]) - if err != nil { - z.pushError(err) - return err - } - return nil -} diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml index b3f1db4b35..d2700428ee 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: catalogsources.operators.coreos.com spec: group: operators.coreos.com @@ -150,6 +150,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -180,11 +182,14 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -236,6 +241,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -266,7 +273,10 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic podAffinity: description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). @@ -332,6 +342,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -345,12 +357,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -360,12 +372,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -409,6 +421,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -427,6 +441,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -441,6 +456,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -498,6 +514,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -511,12 +529,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -526,12 +544,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -575,6 +593,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -593,6 +613,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -601,6 +622,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). type: object @@ -665,6 +687,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -678,12 +702,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -693,12 +717,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -742,6 +766,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -760,6 +786,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -774,6 +801,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -831,6 +859,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -844,12 +874,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -859,12 +889,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -908,6 +938,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -926,6 +958,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -934,6 +967,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic extractContent: description: |- ExtractContent configures the gRPC catalog Pod to extract catalog metadata from the provided index image and diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml index c65bc25d36..a3192a66d3 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: clusterserviceversions.operators.coreos.com spec: group: operators.coreos.com @@ -110,7 +110,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -169,7 +169,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -194,7 +194,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -232,7 +232,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -291,7 +291,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -316,7 +316,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -370,7 +370,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -422,7 +422,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -447,7 +447,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -484,7 +484,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -536,7 +536,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -561,7 +561,7 @@ spec: value: description: |- RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can + It implements [Marshaler] and [Unmarshaler] and can be used to delay JSON decoding or precompute a JSON encoding. type: string format: byte @@ -634,6 +634,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic nonResourceURLs: description: |- NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path @@ -642,21 +643,25 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic resourceNames: description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. type: array items: type: string + x-kubernetes-list-type: atomic resources: description: Resources is a list of resources this rule applies to. '*' represents all resources. type: array items: type: string + x-kubernetes-list-type: atomic verbs: description: Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. type: array items: type: string + x-kubernetes-list-type: atomic serviceAccountName: type: string deployments: @@ -750,6 +755,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -898,6 +905,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -928,11 +937,14 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -984,6 +996,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -1014,7 +1028,10 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic podAffinity: description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). @@ -1080,6 +1097,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1093,12 +1112,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1108,12 +1127,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1157,6 +1176,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1175,6 +1196,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1189,6 +1211,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -1246,6 +1269,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1259,12 +1284,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1274,12 +1299,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1323,6 +1348,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1341,6 +1368,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1349,6 +1377,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). type: object @@ -1413,6 +1442,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1426,12 +1457,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1441,12 +1472,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1490,6 +1521,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1508,6 +1541,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1522,6 +1556,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -1579,6 +1614,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1592,12 +1629,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1607,12 +1644,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -1656,6 +1693,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1674,6 +1713,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1682,6 +1722,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic automountServiceAccountToken: description: AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. type: boolean @@ -1711,6 +1752,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic command: description: |- Entrypoint array. Not executed within a shell. @@ -1724,6 +1766,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic env: description: |- List of environment variables to set in the container. @@ -1766,9 +1809,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -1822,13 +1870,21 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map envFrom: description: |- List of sources to populate environment variables in the container. @@ -1849,9 +1905,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -1866,13 +1927,19 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic image: description: |- Container image name. @@ -1916,6 +1983,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -1945,6 +2013,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2020,6 +2089,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -2049,6 +2119,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2119,6 +2190,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -2172,6 +2244,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2323,6 +2396,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -2376,6 +2450,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2564,6 +2639,30 @@ spec: 2) has CAP_SYS_ADMIN Note that this field cannot be set when spec.os.name is windows. type: boolean + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by this container. If set, this profile + overrides the pod's appArmorProfile. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string capabilities: description: |- The capabilities to add/drop when running containers. @@ -2577,12 +2676,14 @@ spec: items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic drop: description: Removed capabilities type: array items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic privileged: description: |- Run container in privileged mode. @@ -2735,6 +2836,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -2788,6 +2890,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -2919,6 +3022,9 @@ spec: name: description: name must match the name of a persistentVolumeClaim in the pod type: string + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map volumeMounts: description: |- Pod volumes to mount into the container's filesystem. @@ -2942,6 +3048,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -2951,6 +3059,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -2963,6 +3094,9 @@ spec: Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. type: string + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map workingDir: description: |- Container's working directory. @@ -2970,6 +3104,9 @@ spec: might be configured in the container image. Cannot be updated. type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map dnsConfig: description: |- Specifies the DNS parameters of a pod. @@ -2985,6 +3122,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic options: description: |- A list of DNS resolver options. @@ -3001,6 +3139,7 @@ spec: type: string value: type: string + x-kubernetes-list-type: atomic searches: description: |- A list of DNS search domains for host-name lookup. @@ -3009,6 +3148,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic dnsPolicy: description: |- Set DNS policy for the pod. @@ -3059,6 +3199,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic command: description: |- Entrypoint array. Not executed within a shell. @@ -3072,6 +3213,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic env: description: |- List of environment variables to set in the container. @@ -3114,9 +3256,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -3170,13 +3317,21 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map envFrom: description: |- List of sources to populate environment variables in the container. @@ -3197,9 +3352,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -3214,13 +3374,19 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic image: description: |- Container image name. @@ -3260,6 +3426,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -3289,6 +3456,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3364,6 +3532,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -3393,6 +3562,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3459,6 +3629,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -3512,6 +3683,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3651,6 +3823,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -3704,6 +3877,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -3879,6 +4053,30 @@ spec: 2) has CAP_SYS_ADMIN Note that this field cannot be set when spec.os.name is windows. type: boolean + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by this container. If set, this profile + overrides the pod's appArmorProfile. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string capabilities: description: |- The capabilities to add/drop when running containers. @@ -3892,12 +4090,14 @@ spec: items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic drop: description: Removed capabilities type: array items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic privileged: description: |- Run container in privileged mode. @@ -4043,6 +4243,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -4096,6 +4297,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -4237,6 +4439,9 @@ spec: name: description: name must match the name of a persistentVolumeClaim in the pod type: string + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map volumeMounts: description: |- Pod volumes to mount into the container's filesystem. Subpath mounts are not allowed for ephemeral containers. @@ -4260,6 +4465,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -4269,6 +4476,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -4281,6 +4511,9 @@ spec: Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. type: string + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map workingDir: description: |- Container's working directory. @@ -4288,25 +4521,35 @@ spec: might be configured in the container image. Cannot be updated. type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map hostAliases: description: |- HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts - file if specified. This is only valid for non-hostNetwork pods. + file if specified. type: array items: description: |- HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file. type: object + required: + - ip properties: hostnames: description: Hostnames for the above IP address. type: array items: type: string + x-kubernetes-list-type: atomic ip: description: IP address of the host file entry. type: string + default: "" + x-kubernetes-list-map-keys: + - ip + x-kubernetes-list-type: map hostIPC: description: |- Use the host's ipc namespace. @@ -4355,10 +4598,18 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map initContainers: description: |- List of initialization containers belonging to the pod. @@ -4394,6 +4645,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic command: description: |- Entrypoint array. Not executed within a shell. @@ -4407,6 +4659,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic env: description: |- List of environment variables to set in the container. @@ -4449,9 +4702,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -4505,13 +4763,21 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map envFrom: description: |- List of sources to populate environment variables in the container. @@ -4532,9 +4798,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -4549,13 +4820,19 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic image: description: |- Container image name. @@ -4599,6 +4876,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -4628,6 +4906,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -4703,6 +4982,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic httpGet: description: HTTPGet specifies the http request to perform. type: object @@ -4732,6 +5012,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -4802,6 +5083,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -4855,6 +5137,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -5006,6 +5289,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -5059,6 +5343,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -5247,6 +5532,30 @@ spec: 2) has CAP_SYS_ADMIN Note that this field cannot be set when spec.os.name is windows. type: boolean + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by this container. If set, this profile + overrides the pod's appArmorProfile. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string capabilities: description: |- The capabilities to add/drop when running containers. @@ -5260,12 +5569,14 @@ spec: items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic drop: description: Removed capabilities type: array items: description: Capability represent POSIX capabilities type type: string + x-kubernetes-list-type: atomic privileged: description: |- Run container in privileged mode. @@ -5418,6 +5729,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic failureThreshold: description: |- Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -5471,6 +5783,7 @@ spec: value: description: The header field value type: string + x-kubernetes-list-type: atomic path: description: Path to access on the HTTP server. type: string @@ -5602,6 +5915,9 @@ spec: name: description: name must match the name of a persistentVolumeClaim in the pod type: string + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map volumeMounts: description: |- Pod volumes to mount into the container's filesystem. @@ -5625,6 +5941,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -5634,6 +5952,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -5646,6 +5987,9 @@ spec: Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. type: string + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map workingDir: description: |- Container's working directory. @@ -5653,6 +5997,9 @@ spec: might be configured in the container image. Cannot be updated. type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map nodeName: description: |- NodeName is a request to schedule this pod onto a specific node. If it is non-empty, @@ -5682,6 +6029,7 @@ spec: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.appArmorProfile - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup @@ -5691,6 +6039,7 @@ spec: - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups + - spec.containers[*].securityContext.appArmorProfile - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities @@ -5767,6 +6116,7 @@ spec: conditionType: description: ConditionType refers to a condition in the pod's condition list with matching type. type: string + x-kubernetes-list-type: atomic resourceClaims: description: |- ResourceClaims defines which ResourceClaims must be allocated @@ -5852,9 +6202,6 @@ spec: SchedulingGates can only be set at pod creation time, and be removed only afterwards. - - - This is a beta feature enabled by the PodSchedulingReadiness feature gate. type: array items: description: PodSchedulingGate is associated to a Pod to guard its scheduling. @@ -5876,6 +6223,29 @@ spec: Optional: Defaults to empty. See type description for default values of each field. type: object properties: + appArmorProfile: + description: |- + appArmorProfile is the AppArmor options to use by the containers in this pod. + Note that this field cannot be set when spec.os.name is windows. + type: object + required: + - type + properties: + localhostProfile: + description: |- + localhostProfile indicates a profile loaded on the node that should be used. + The profile must be preconfigured on the node to work. + Must match the loaded name of the profile. + Must be set if and only if type is "Localhost". + type: string + type: + description: |- + type indicates which kind of AppArmor profile will be applied. + Valid options are: + Localhost - a profile pre-loaded on the node. + RuntimeDefault - the container runtime's default profile. + Unconfined - no AppArmor enforcement. + type: string fsGroup: description: |- A special supplemental group that applies to all containers in a pod. @@ -5991,6 +6361,7 @@ spec: items: type: integer format: int64 + x-kubernetes-list-type: atomic sysctls: description: |- Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported @@ -6010,6 +6381,7 @@ spec: value: description: Value of a property to set type: string + x-kubernetes-list-type: atomic windowsOptions: description: |- The Windows specific settings applied to all containers. @@ -6043,7 +6415,7 @@ spec: type: string serviceAccount: description: |- - DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. + DeprecatedServiceAccount is a deprecated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead. type: string serviceAccountName: @@ -6123,6 +6495,7 @@ spec: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string + x-kubernetes-list-type: atomic topologySpreadConstraints: description: |- TopologySpreadConstraints describes how a group of pods ought to spread across topology @@ -6173,6 +6546,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -6242,9 +6617,6 @@ spec: In this situation, new pod with the same labelSelector cannot be scheduled, because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones, it will violate MaxSkew. - - - This is a beta field and requires the MinDomainsInPodTopologySpread feature gate to be enabled (enabled by default). type: integer format: int32 nodeAffinityPolicy: @@ -6415,6 +6787,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic path: description: 'path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /' type: string @@ -6438,9 +6811,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -6477,9 +6855,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeID: description: |- @@ -6538,12 +6921,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -6577,9 +6966,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic readOnly: description: |- @@ -6619,7 +7013,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -6666,6 +7060,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic emptyDir: description: |- emptyDir represents a temporary directory that shares a pod's lifetime. @@ -6775,6 +7170,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic dataSource: description: |- dataSource field can be used to specify either: @@ -6917,6 +7313,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -6943,7 +7341,7 @@ spec: If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass + More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled. type: string volumeMode: @@ -6979,6 +7377,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic wwids: description: |- wwids Optional: FC volume world wide identifiers (wwids) @@ -6986,6 +7385,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic flexVolume: description: |- flexVolume represents a generic volume resource that is @@ -7025,9 +7425,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic flocker: description: flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running @@ -7202,6 +7607,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic readOnly: description: |- readOnly here will force the ReadOnly setting in VolumeMounts. @@ -7214,9 +7620,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic targetPortal: description: |- @@ -7388,6 +7799,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -7460,12 +7873,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -7484,7 +7903,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -7531,6 +7950,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic secret: description: secret information about the secret data to project type: object @@ -7572,12 +7992,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional field specify whether the Secret or its key must be defined type: boolean @@ -7610,6 +8036,7 @@ spec: path is the path relative to the mount point of the file to project the token into. type: string + x-kubernetes-list-type: atomic quobyte: description: quobyte represents a Quobyte mount on the host that shares a pod's lifetime type: object @@ -7681,6 +8108,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic pool: description: |- pool is the rados pool name. @@ -7704,9 +8132,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -7749,9 +8182,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default false @@ -7826,6 +8264,7 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic optional: description: optional field specify whether the Secret or its keys must be defined type: boolean @@ -7858,9 +8297,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeName: description: |- @@ -7897,6 +8341,9 @@ spec: volumePath: description: volumePath is the path that identifies vSphere volume vmdk type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map permissions: type: array items: @@ -7923,6 +8370,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic nonResourceURLs: description: |- NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path @@ -7931,21 +8379,25 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic resourceNames: description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. type: array items: type: string + x-kubernetes-list-type: atomic resources: description: Resources is a list of resources this rule applies to. '*' represents all resources. type: array items: type: string + x-kubernetes-list-type: atomic verbs: description: Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. type: array items: type: string + x-kubernetes-list-type: atomic serviceAccountName: type: string strategy: @@ -8079,6 +8531,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -8169,6 +8623,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml index afdb6cfd7c..97c4551e04 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: installplans.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml index e90729ad61..21a679ca25 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: olmconfigs.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml index dada8e93b0..571d8f8e6e 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: operatorconditions.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml index 3daddc999c..2061eaa9aa 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: operatorgroups.operators.coreos.com spec: group: operators.coreos.com @@ -83,6 +83,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -341,6 +343,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml index e58f182cf8..0b570b1b2e 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: operators.operators.coreos.com spec: group: operators.coreos.com @@ -84,6 +84,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml index df5ecd967c..e9eedba916 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.15.0 name: subscriptions.operators.coreos.com spec: group: operators.coreos.com @@ -137,6 +137,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -167,11 +169,14 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -223,6 +228,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. type: array @@ -253,7 +260,10 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic x-kubernetes-map-type: atomic podAffinity: description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). @@ -319,6 +329,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -332,12 +344,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -347,12 +359,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -396,6 +408,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -414,6 +428,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -428,6 +443,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -485,6 +501,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -498,12 +516,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -513,12 +531,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -562,6 +580,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -580,6 +600,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -588,6 +609,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). type: object @@ -652,6 +674,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -665,12 +689,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -680,12 +704,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -729,6 +753,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -747,6 +773,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -761,6 +788,7 @@ spec: in the range 1-100. type: integer format: int32 + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -818,6 +846,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -831,12 +861,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. - Also, MatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both matchLabelKeys and labelSelector. + Also, matchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -846,12 +876,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. - Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. + The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. + Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. type: array items: @@ -895,6 +925,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -913,6 +945,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -921,6 +954,7 @@ spec: selected pods is running. Empty topologyKey is not allowed. type: string + x-kubernetes-list-type: atomic annotations: description: |- Annotations is an unstructured key value map stored with each Deployment, Pod, APIService in the Operator. @@ -972,9 +1006,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap or its key must be defined type: boolean @@ -1028,9 +1067,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret or its key must be defined type: boolean @@ -1055,9 +1099,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the ConfigMap must be defined type: boolean @@ -1072,9 +1121,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: Specify whether the Secret must be defined type: boolean @@ -1182,6 +1236,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1251,6 +1307,8 @@ spec: to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: description: This must match the Name of a Volume. @@ -1260,6 +1318,29 @@ spec: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. type: boolean + recursiveReadOnly: + description: |- + RecursiveReadOnly specifies whether read-only mounts should be handled + recursively. + + + If ReadOnly is false, this field has no meaning and must be unspecified. + + + If ReadOnly is true, and this field is set to Disabled, the mount is not made + recursively read-only. If this field is set to IfPossible, the mount is made + recursively read-only, if it is supported by the container runtime. If this + field is set to Enabled, the mount is made recursively read-only if it is + supported by the container runtime, otherwise the pod will not be started and + an error will be generated to indicate the reason. + + + If this field is set to IfPossible or Enabled, MountPropagation must be set to + None (or be unspecified, which defaults to None). + + + If this field is not specified, it is treated as an equivalent of Disabled. + type: string subPath: description: |- Path within the volume from which the container's volume should be mounted. @@ -1377,6 +1458,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic path: description: 'path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /' type: string @@ -1400,9 +1482,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -1439,9 +1526,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeID: description: |- @@ -1500,12 +1592,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -1539,9 +1637,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic readOnly: description: |- @@ -1581,7 +1684,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -1628,6 +1731,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic emptyDir: description: |- emptyDir represents a temporary directory that shares a pod's lifetime. @@ -1737,6 +1841,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic dataSource: description: |- dataSource field can be used to specify either: @@ -1879,6 +1984,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -1905,7 +2012,7 @@ spec: If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass + More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled. type: string volumeMode: @@ -1941,6 +2048,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic wwids: description: |- wwids Optional: FC volume world wide identifiers (wwids) @@ -1948,6 +2056,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic flexVolume: description: |- flexVolume represents a generic volume resource that is @@ -1987,9 +2096,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic flocker: description: flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running @@ -2164,6 +2278,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic readOnly: description: |- readOnly here will force the ReadOnly setting in VolumeMounts. @@ -2176,9 +2291,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic targetPortal: description: |- @@ -2350,6 +2470,8 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic + x-kubernetes-list-type: atomic matchLabels: description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels @@ -2422,12 +2544,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional specify whether the ConfigMap or its keys must be defined type: boolean @@ -2446,7 +2574,7 @@ spec: - path properties: fieldRef: - description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + description: 'Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.' type: object required: - fieldPath @@ -2493,6 +2621,7 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic secret: description: secret information about the secret data to project type: object @@ -2534,12 +2663,18 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" optional: description: optional field specify whether the Secret or its key must be defined type: boolean @@ -2572,6 +2707,7 @@ spec: path is the path relative to the mount point of the file to project the token into. type: string + x-kubernetes-list-type: atomic quobyte: description: quobyte represents a Quobyte mount on the host that shares a pod's lifetime type: object @@ -2643,6 +2779,7 @@ spec: type: array items: type: string + x-kubernetes-list-type: atomic pool: description: |- pool is the rados pool name. @@ -2666,9 +2803,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic user: description: |- @@ -2711,9 +2853,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default false @@ -2788,6 +2935,7 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + x-kubernetes-list-type: atomic optional: description: optional field specify whether the Secret or its keys must be defined type: boolean @@ -2820,9 +2968,14 @@ spec: name: description: |- Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. type: string + default: "" x-kubernetes-map-type: atomic volumeName: description: |- diff --git a/vendor/github.com/operator-framework/api/crds/zz_defs.go b/vendor/github.com/operator-framework/api/crds/zz_defs.go index 8d7b58d404..00e2925ccb 100644 --- a/vendor/github.com/operator-framework/api/crds/zz_defs.go +++ b/vendor/github.com/operator-framework/api/crds/zz_defs.go @@ -85,7 +85,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x73\xdb\xb8\x96\xe8\xe7\xc9\xaf\x40\xf9\x4d\x55\xac\x5c\x49\x4e\xfa\xde\xea\x37\xd7\xb7\x97\xf2\x38\xcb\x73\x75\x16\x57\xec\xee\xa9\x37\xb9\x79\x2f\x10\x79\x24\xa1\x4d\x02\x6c\x00\xb4\xad\x5e\xfe\xfb\x14\x0e\x00\x92\xa2\xc4\x4d\xde\x92\xbe\xc0\x87\xee\x58\x24\xb1\x1c\x9c\x73\x70\x76\xd0\x8c\xfd\x04\x52\x31\xc1\x0f\x09\xcd\x18\x5c\x6b\xe0\xe6\x2f\x35\xbd\xf8\x0f\x35\x65\xe2\xe0\xf2\xd9\xa3\x0b\xc6\xe3\x43\x72\x9c\x2b\x2d\xd2\xf7\xa0\x44\x2e\x23\x78\x0e\x73\xc6\x99\x66\x82\x3f\x4a\x41\xd3\x98\x6a\x7a\xf8\x88\x10\xca\xb9\xd0\xd4\xfc\xac\xcc\x9f\x84\x44\x82\x6b\x29\x92\x04\xe4\x64\x01\x7c\x7a\x91\xcf\x60\x96\xb3\x24\x06\x89\x9d\xfb\xa1\x2f\x9f\x4e\x9f\xfd\x6d\xfa\xf4\x11\x21\x9c\xa6\x70\x48\x22\xaa\x69\x22\x16\x76\x2c\x35\x15\x19\x48\xaa\x85\x54\xd3\x48\x48\x10\xe6\x7f\xe9\x23\x95\x41\x64\x06\x59\x48\x91\x67\x87\x64\xeb\x3b\xb6\x3f\x3f\x17\xaa\x61\x21\x24\xf3\x7f\x13\x32\x21\x22\x49\xf1\xdf\x6e\x8d\x76\xd8\x33\x1c\x16\x7f\x4f\x98\xd2\x3f\x6c\x3e\x7b\xcd\x94\xc6\xe7\x59\x92\x4b\x9a\xd4\x27\x8c\x8f\xd4\x52\x48\xfd\xb6\x1c\xde\x0c\x17\x51\xad\x64\x64\x1f\x33\xbe\xc8\x13\x2a\x6b\xdf\x3e\x22\x44\x45\x22\x83\x43\x82\x9f\x66\x34\x82\xf8\x11\x21\x0e\x52\xae\xab\x09\xa1\x71\x8c\xd0\xa7\xc9\xa9\x64\x5c\x83\x3c\x16\x49\x9e\xf2\x62\x28\xf3\x4e\x0c\x2a\x92\x2c\xd3\x08\xe1\xf3\x25\x90\x4c\x82\xd6\x2b\x04\x09\x11\x73\xa2\x97\xe0\xc7\x2e\xbe\x22\xe4\x67\x25\xf8\x29\xd5\xcb\x43\x32\x35\x10\x9e\xc6\x4c\x65\x09\x5d\x99\xd9\x54\xde\xb2\xdb\xf4\xdc\x3e\xab\xfc\xae\x57\x66\xea\x4a\x4b\xc6\x17\x6d\x53\x31\xef\xf5\x9f\x83\x05\xcd\xf9\x2a\xdb\x9c\x42\xed\xc7\xbe\xe3\x67\xf9\x2c\x61\x6a\x09\xb2\xff\x24\x8a\x4f\x36\xe6\x70\xba\xe5\x49\xc3\x44\x2a\x9d\x7a\xba\x99\x46\x12\x90\x64\xce\x59\x0a\x4a\xd3\x34\xdb\x18\xe0\x68\xb1\xb9\xc6\x98\x6a\xff\xa3\x7d\xe9\xf2\x19\x4d\xb2\x25\x7d\xe6\x7e\x54\xd1\x12\x52\x5a\xe2\x83\xc8\x80\x1f\x9d\x9e\xfc\xf4\xd7\xb3\xda\x03\xb2\x0e\x9d\x35\x3c\x27\x4c\x11\x4a\x24\x64\x42\x31\x2d\xe4\xca\x40\xeb\xf8\xec\x27\x35\x26\xc7\xef\x9f\xab\x31\xa1\x3c\x2e\x08\x8f\x64\x34\xba\xa0\x0b\x50\xd3\x8d\xb9\x8a\xd9\xcf\x10\xe9\xca\xcf\x12\x7e\xc9\x99\x84\xb8\x3a\x0b\x03\x1e\x0f\x93\xda\xcf\x06\xfe\x95\x9f\x32\x69\xc6\xd4\x15\x42\xb6\xad\xc2\xcc\xd6\x7e\xaf\xad\xf0\xf7\x49\xed\x29\x21\x06\x30\xf6\x4b\x12\x1b\xce\x06\x0a\x91\xc2\x51\x1d\xc4\x0e\x9a\x16\x59\x98\x32\x10\x91\xa0\x80\x5b\x5e\x67\x7e\xa6\xdc\xad\x72\xba\xd1\xf9\x19\x48\xd3\x91\x61\x08\x79\x12\x1b\x96\x78\x09\x52\x13\x09\x91\x58\x70\xf6\x6b\xd1\xbb\x22\x5a\xe0\xb0\x09\xd5\xa0\x34\x41\xba\xe6\x34\x21\x97\x34\xc9\x01\x81\xbd\xd1\x77\x4a\x57\x44\x82\x19\x97\xe4\xbc\xd2\x23\x7e\xa2\x36\xe7\xf2\x46\x48\x20\x8c\xcf\xc5\x21\x59\x6a\x9d\xa9\xc3\x83\x83\x05\xd3\x9e\xd9\x47\x22\x4d\x73\xce\xf4\xea\x00\xf9\x36\x9b\xe5\x86\xa1\x1e\xc4\x70\x09\xc9\x81\x62\x8b\x09\x95\xd1\x92\x69\x88\x74\x2e\xe1\x80\x66\x6c\x82\x8b\xe1\xc8\xf0\xa7\x69\xfc\xbf\x24\x54\x39\x60\x1d\x0d\x6a\xd4\x40\x3c\xdf\x1d\xb8\x59\x86\x1f\x5b\xc4\xb4\x1d\xda\xc5\x96\x7b\x62\x7e\x32\x60\x7c\xff\xe2\xec\x9c\xf8\x19\xd9\x7d\xb3\x5b\x54\xbe\xba\x05\x42\x7e\xb7\x0c\x64\x19\x9f\x83\xb4\x5f\xce\xa5\x48\xb1\x57\xe0\x71\x26\x18\xd7\x96\x6b\x24\x0c\xb8\x26\x2a\x9f\xa5\x4c\x2b\x44\x6b\x50\xda\x6c\xe4\x66\xc7\xc7\x78\x38\x92\x19\x90\x3c\x33\xc4\x1b\x6f\xbe\x72\xc2\xc9\x31\x4d\x21\x39\xa6\x0a\xee\x7d\xef\xcc\x1e\xa9\x89\xd9\x90\xde\xbb\x57\x3d\xfa\x37\x3f\xd8\xa0\x7a\x42\xfc\x99\xdd\xeb\xe5\x26\x36\x41\x2c\x4f\xd8\x76\x26\x90\x16\xee\x60\x1a\x8d\x63\x09\x6a\xcb\x83\x6e\xac\x33\xed\xc8\x7e\x6e\x91\x6f\x29\x94\x41\x02\xaa\xc9\xbb\xd7\x6f\x48\x44\x39\xc9\x15\x18\x12\x8e\x04\xe7\x06\xcb\xb4\x20\xd4\x9c\xb9\x13\xb8\x66\x0a\xb1\x52\xc2\x82\x29\x2d\x57\x9b\x7b\x6b\xda\x4b\x21\x53\xaa\x0f\xc9\x37\xfe\xb5\x09\x0e\x21\x24\x61\xd9\x77\x87\xdf\x64\x42\xea\xef\xb6\x7e\xf8\x8e\x27\x2b\x33\x78\x4c\xae\x96\xc0\xc9\x59\x01\x19\xf2\x6d\xe5\x8f\x57\x32\x8b\xb6\x0f\x7c\xb2\xe0\x42\xfa\xaf\x0d\x5a\x9f\xa4\x74\x01\x64\xce\x20\x41\x42\x53\xb0\x85\xab\xb5\xa0\x05\xb1\x82\xdf\x9c\x2d\xde\xd0\x6c\x57\x58\x1f\xfb\x0e\xcc\x0c\xcc\xa4\xaa\x62\x4b\xf9\x50\x0b\xa4\x28\xb3\x78\xf3\x4f\x1a\x5d\x10\xea\x06\x4f\x69\x36\x51\x48\xcd\x1d\x80\xef\x07\xbf\x63\xdf\xa9\xd9\x91\xf2\xe7\x13\xc7\xa5\x07\x43\xa8\x0a\x84\xc1\xdf\x96\x42\x59\x27\x7c\xdf\x6c\x3b\x53\x7b\x8c\xb1\x90\x59\x74\x2a\x62\xbb\xec\x5d\x77\xf1\x55\xb5\x13\x02\xd7\x99\x50\xa0\x48\xcc\xe6\x73\x90\x86\x73\x8a\x4b\x90\x92\xc5\xa0\xc8\x5c\x48\xdc\xda\x4c\xc4\xc8\x26\x8a\xad\x5e\x93\x47\x4e\xc5\x16\xb6\x49\x06\xd1\x00\x0a\x2d\x16\xc3\xbb\x70\x7b\x2b\x53\x22\x1d\x3c\xc6\x34\x3a\x47\xf5\x68\xb5\xfd\x69\x0d\x74\x47\xee\x65\x8f\xe8\x4e\x14\x75\x1c\xee\xb1\x32\x20\x79\xac\x8a\x3e\xb7\xaf\xbf\x73\xca\x7d\xa6\x6d\x1a\x17\x31\x1c\x75\x4c\x7f\x63\x09\xcf\xf1\x8f\x19\x28\xfc\xbc\x98\x2a\x0a\x36\x71\x9e\x20\xef\xcb\x93\xf5\x5d\x6e\x5a\x47\xcf\xb5\xf4\x5d\x8f\x7d\x0f\xe6\x20\x25\xc4\xcf\x73\x83\xea\x67\xc5\xac\x1c\xe7\xb3\x3f\xbf\xb8\x86\x28\x6f\x22\xc7\xc6\xa5\x37\x20\x7e\xb5\x19\x85\xc3\x41\x02\x24\xb9\x62\x49\xe2\x66\x64\x58\x96\x7f\x60\x40\x82\x12\xa0\x81\xa0\xb2\x07\x8b\xa2\x9a\xa9\xf9\xaa\x73\x00\x03\xd1\x02\xe6\x70\x6d\x84\x1b\xd4\x16\x91\x90\xd8\x9c\x41\x4c\x66\x2b\x27\xc7\x18\xa6\x3e\x26\xb3\x5c\x13\xa6\x51\xc8\x89\x96\x42\xa8\xfa\x21\xba\xd9\xa8\xdd\x5a\x9c\xd7\x25\x13\x28\xa3\x12\xc1\xc1\x70\xc3\xd4\x48\x26\x8e\x5e\x2b\xc3\x4f\x71\xe5\xe5\x67\xac\x2e\x58\x6c\xb6\xd4\x9c\x78\xc5\x76\x79\x8a\x30\xc3\x5c\x31\xbd\xc4\x3f\x16\x46\x5d\x32\xf2\xb1\xca\x53\x33\xe8\x15\xb0\xc5\x52\xab\x31\x61\xd3\x2d\x42\x53\xbd\x19\x04\x04\x1a\x2d\x2b\xd3\x4a\x01\xb4\x22\x34\x49\xfc\x12\xaa\x58\x6b\x25\x90\xd4\xc8\x8a\x64\xdf\x0b\x93\x9d\xa3\x38\x41\x70\x5c\x48\x30\x75\xc4\xdb\xba\x5d\x63\x02\x3a\x9a\x8e\xc6\x9d\xdd\x47\x22\xcd\x72\x0d\x46\x02\xce\x53\xb3\xb5\x4c\x1b\x1d\xcc\x0a\xbe\x52\xe4\x0b\x0b\x29\x48\xdc\xc4\xbd\xda\x62\x4f\x74\xc3\xff\x68\x1c\x6f\xe3\xf9\xf5\xb6\x67\x81\xbb\xe7\x35\x13\x33\x1c\xb3\x40\x42\xf8\xa5\x54\x47\x4b\xa7\x2c\x45\x42\x4a\x50\x99\xe0\xa6\x67\xfb\xe4\x45\xb9\xb6\x7f\x98\x77\x3a\xc7\x33\x9d\xee\xab\x51\xb9\xd9\x4b\xb6\x58\xfa\xbd\xa6\x12\xf0\xb7\x75\x1c\xe9\xda\x72\xcb\x4a\xa8\x94\xb4\x8b\x8e\x98\x86\xb4\x83\x91\x90\x1d\xa8\x9f\x90\x23\x4e\x20\xcd\xf4\xaa\x82\xd8\x15\x14\xd3\x20\xd3\x02\x90\x88\x85\xc8\xf6\x94\x05\x02\x4b\xb3\x84\x45\x4c\x3b\x34\x27\x4f\x7b\x8c\xb7\x6f\x28\x81\x30\x6d\x0e\x0d\xc2\xc5\x44\x64\xa3\x29\x39\x22\x3c\x2f\x18\x4f\xdb\x14\xb8\x28\x66\xe0\x3a\x32\xd3\x52\xa2\xec\xab\x9b\x1f\xf5\x63\xdf\xb6\x35\x0b\xf9\x9b\x6d\xe2\xe6\x0f\xbc\x07\x11\x9a\xd7\x2d\xd4\x3a\x5f\xed\x7b\x90\xf8\xb7\xfd\x1c\xfa\xbc\x5d\x3f\xed\x2d\xe5\x28\x48\x20\xd2\xe6\x34\x04\x99\x8e\x09\x55\x4a\x44\xcc\x68\x85\x25\xee\xaf\x13\x94\x5d\x49\x37\xec\xc9\x50\xf8\x93\xc1\xeb\x27\x68\x78\x58\xa7\xef\xbe\xdf\x6d\x40\x23\x61\x46\xc7\x99\xd7\xa0\xb2\xc6\x77\x67\x2b\x7c\xfa\x58\x91\x84\xce\x20\xd9\xa2\xb4\x37\xb5\xfe\xc4\x5f\xb6\x9e\x6c\xa0\x61\x41\xbd\x18\x42\xd9\xea\xd8\x50\x59\xb7\x33\x71\x14\x78\x62\x8e\x2a\xa3\xda\x53\xc6\x95\xb3\xef\x8c\x09\x25\x17\xb0\xb2\x76\x38\xca\x0b\x53\xdc\xa0\x29\x60\xc7\x12\xec\x81\x6e\xf0\xee\x02\x56\xd8\x61\x93\x0d\xa9\xa5\xab\xa1\x78\x67\xdb\x10\x0e\x50\xb6\x89\x99\xe8\xc0\x2f\x76\x00\xd0\x70\xd2\xb0\xed\x02\x5a\xc5\xe7\x6d\x6d\xc3\x4a\x8d\xe8\x8e\xfb\x81\x9b\x84\x27\xb0\xc7\x07\x9a\x65\x09\x83\xed\xa6\xa6\xf6\xd6\xaa\xf5\xb5\x35\x0f\xbd\x1b\xad\x6b\x20\x81\x98\xf6\xbe\x30\xd7\x59\x7c\x7f\xac\x2c\xbe\x1a\xbe\xb3\x64\x99\x35\xb4\x28\x40\x36\x32\x1c\x69\x6d\xfb\x89\x26\xac\xb4\x65\x2b\x14\x36\x4e\xf8\x98\xbc\x15\xda\xfc\xef\xc5\x35\x53\x46\xc6\x7c\x2e\x40\xbd\x15\x1a\xff\x9c\x92\x57\xda\x92\xde\xeb\x9e\x7c\xb9\x6c\x3b\xef\x81\x5d\xdf\x7d\xef\xc0\x11\xb7\x4c\xd4\x40\xb8\x6a\x74\x55\x53\x72\x62\xc5\xc1\xc2\x0b\xc0\x14\x39\xe1\x46\x29\xb0\x90\x1b\x3c\x14\xda\xdd\xb1\x6f\x37\x64\x9a\x2b\xb4\x9a\x72\xc1\x27\x28\x46\x6d\x1d\xd3\x6e\x90\x19\xb7\xba\x45\xb7\x38\x7c\xf3\xd0\xaf\xd0\x46\xf7\x5a\x8f\x2b\x1f\x0f\x1e\xb7\x32\xd8\x92\x5e\xa2\x68\xcf\xf8\x22\x29\x84\xf8\x31\xb9\x5a\xb2\x68\x69\xb5\xc7\x19\x58\xe7\x40\x26\xc1\x48\x0c\x54\x19\xe6\x6f\x7e\x59\x80\x1c\x8e\xfa\xe7\x46\x35\xb0\xe3\x5b\xd7\x46\x42\x23\x88\x49\x8c\x2a\x8b\xb5\xb2\x53\x0d\x0b\x16\x91\x14\xe4\x02\x48\x66\x8e\xfe\xdd\x10\x7e\xd8\x49\x6c\xdb\xe0\xf3\xb8\x3a\xe0\x20\x0a\x43\x99\xe6\xa5\xd1\x91\xee\x49\x9c\x41\x7d\x2c\x88\x33\x41\x9c\x09\xe2\x4c\x10\x67\x82\x38\xd3\xbb\x05\x71\xe6\xc6\xc3\x07\x71\xe6\x4f\x2e\xce\x5c\x4f\x2e\xf2\x19\x48\x0e\x1a\xd4\x24\xa5\xd9\xc4\x4d\x59\x8b\x94\x45\x3d\x7a\xb0\xf6\xa6\x1d\x0c\x5c\xff\x65\x0d\x95\x75\x8b\x16\x0a\x57\x3e\x34\x63\xdd\xb4\x65\x64\x86\x33\x77\x10\x9c\xa3\x39\x8c\x59\x3f\xb4\xa4\x7c\x01\xe4\xd9\xe4\xd9\xd3\xa7\x43\x0c\x5f\x0e\x75\x7a\x7d\x31\x77\x4e\x77\xc6\xf5\x5f\xbf\x6a\xfd\xa2\xc9\x94\x7f\x3f\x3e\x24\x47\xa8\x85\xdb\x60\x4d\xa2\x6c\x70\xf3\x20\xd7\xe7\x42\x93\x14\x34\xa1\xdd\x22\x4c\xd5\x22\xcc\x52\x18\x17\xfe\x58\xa4\x52\x17\xbc\xe2\xfd\x55\x31\x11\xdc\x79\x05\xcc\xfe\x75\xef\xcf\x4e\x2b\x88\x80\xda\xa0\x8a\x19\x98\x55\x74\x7b\xa9\x34\x51\x22\x35\xb3\x66\x5c\x7b\x9a\x37\x4b\x00\xbf\x31\x64\x1f\xa6\x8b\x29\x89\x73\xec\x96\x72\x17\x8d\x33\xb2\xab\x55\x2b\xa5\x21\xed\x76\x53\x99\xb3\x43\xe2\xff\x0c\x58\xb4\x5c\x99\xce\xe0\x12\xb8\xce\x69\x92\xac\x08\x5c\xb2\x48\x17\xf0\xc3\xe0\x21\xa6\x55\x2f\x48\x0d\x90\x3a\xfb\x4b\x9a\x93\x0d\x22\xeb\xe2\xe9\x43\x04\xc5\x8d\xbe\xfb\xb0\x8d\x35\x0a\x78\xef\x56\x32\x6d\x54\xa1\xb4\xe9\xd7\x7a\x14\xf1\x9f\x88\xdc\xef\xde\x77\x3b\x80\xc8\x60\x76\x3d\x80\x45\xef\x26\x89\x38\x5f\x8c\x90\xce\x2f\xb4\xb9\xd2\x2d\xde\x18\xbb\xf6\x35\xaa\x11\xf3\x9e\x03\xea\x25\x58\xff\xd9\xd1\xdb\xe7\xfd\x20\x46\x9c\xdf\xfa\x5c\x64\x22\x11\x8b\x55\x75\x7b\x6d\xf4\x2e\x4b\x33\xef\x5f\xa4\x44\xe5\x33\x27\xb1\x1a\x9c\x7f\x5b\xc3\x87\xe0\xb5\x08\x5e\x8b\xa0\xe6\x63\x0b\x6a\x7e\x50\xf3\x83\x9a\xdf\xaf\x05\x35\xff\xc6\xc3\x07\x35\xff\x4f\xae\xe6\x07\xaf\xc5\x96\x05\x05\x71\x26\x88\x33\xd8\x82\x38\xb3\x7d\x5d\x41\x9c\x21\x41\x9c\x69\x69\x41\x9c\x09\xe2\xcc\x5a\xfb\x12\xbc\x16\xbb\x7d\x9b\x89\xf8\x06\xe9\x2e\x99\x88\x5b\xb2\x5d\xac\xa9\x39\x12\x93\x44\x44\x54\xbb\x1c\x54\xf3\x89\xf3\x6f\x28\x9a\x5a\xeb\xf9\x98\xfc\x2a\x38\xd8\xf8\x7f\x83\x49\x68\xc3\x16\x7a\x09\xd2\xbc\xbe\xaf\x46\xad\x41\xd7\x21\x5b\x26\x64\xcb\x84\x6c\x99\xc6\xf6\xd9\x64\xcb\x2c\xa9\xb2\x78\x6b\x4f\x91\xe6\xe4\x99\x0a\x4f\x3a\x07\x99\xfe\x49\x73\x67\x0c\xba\x3b\x74\xc4\x0a\x0a\x25\x4a\x59\xc8\xc4\xce\x95\x0c\xf1\xe9\x3a\x3c\x9c\x06\x8a\x8b\xa2\x71\x0c\x31\xc9\x40\x4e\x2c\x8a\x0a\x32\x67\x3c\xde\xb2\x56\x0f\x9f\x6e\xf6\x70\x87\xc9\x2b\xeb\xeb\xe8\xf5\xcd\xdd\x64\xb0\xac\x4f\x64\x07\x5f\x57\xd5\x61\xb7\x76\x08\x7e\x16\xf9\x2c\x43\x95\xd9\x09\xd1\xce\xcf\xf5\x43\x4f\x75\x76\xb8\x46\x8a\x7a\xa4\xf7\x8a\xed\x68\xa9\x19\xa4\x35\x1c\x39\xd5\xf5\x97\x1c\xe4\x0a\x33\xad\x4b\x0d\xad\x28\xd4\xe1\x62\x2d\x98\x22\x11\x55\xf6\x58\x1d\x22\x55\x9e\xcc\x6d\x9e\x19\xcf\x93\x64\x6c\xfb\xa9\x13\xab\x67\x73\x88\x07\x5c\x98\xe7\x83\x8d\x47\x03\xad\x19\xbb\x99\x0b\x76\x77\x0e\x92\xfa\x3e\xd5\xbb\xb2\x66\x24\x6f\x65\xb3\xdb\xb2\xd5\xcc\xb6\xc5\xc9\x3b\xd8\x6d\x6b\xdb\xae\xb2\xfe\x4e\x92\xfe\x8d\x55\xdb\x16\x98\xdc\xc0\x04\x87\x2f\x0f\x9e\xcc\xed\x98\xe1\xc8\xee\xa6\x38\xb2\xb3\x39\x8e\xec\x64\x92\x23\xbb\x9a\xe5\xc8\x0d\x4c\x73\x64\x37\xf3\x1c\xa9\x63\x9b\xd9\x21\x27\xf8\xde\x8d\xa5\x8e\xdc\xc4\x52\x44\x6e\x60\xb1\x23\xb7\x40\x58\xd5\xf1\x2b\x65\x8f\xee\xce\x84\x47\xfa\x9a\xf1\x90\xac\xd6\x2c\x79\xf7\xbd\x2f\xbb\x59\xf1\xc8\x2d\xed\x8a\xb3\x6f\x31\x34\x1b\xdd\x97\x5d\x8f\x3c\xbc\x6d\xaf\x75\x0a\x6e\xf8\xde\xc6\xb0\x9d\x46\xbf\x81\x01\x8d\xdc\xc8\x88\x46\x76\x37\xa4\x91\xdd\x91\x1d\x65\x91\xd7\x18\x82\x74\x03\x89\x66\x30\x96\x57\x86\xb5\x27\x38\x56\x4e\x9a\x93\xdf\xcc\x41\x8d\x9b\xff\x07\xc9\x28\x93\xca\x68\x10\xce\xcc\x5a\x7d\xe6\x4c\x64\x95\x6e\x06\x4f\x00\x4b\x47\x99\x73\xf4\x92\x26\x46\x90\xb0\xf1\x9e\x4e\xcf\x37\x73\xa9\x8b\x69\x63\x72\xb5\x14\xca\x9e\xfa\x45\xf5\xab\xbd\x0b\x58\xed\x8d\x7b\xa9\xe0\xeb\xad\x4a\x3d\x7b\x27\x7c\xcf\x8a\x27\x1b\xb8\x5f\xc8\x32\x82\x27\x2b\xb2\x87\xcf\xf6\x6e\x5b\x0e\xdc\x41\x06\xa9\x96\x18\xdd\xf5\x88\xdf\x09\x65\x6f\x1a\xb9\x4e\xd6\xb0\xef\x07\x58\xed\xea\x17\x1f\x84\xf3\x6f\xd6\x46\xf4\x42\x2b\xa2\x99\xd1\x8f\x0b\xd9\x04\xad\x96\x56\x2c\x71\x76\x20\x6b\x12\x62\x49\x32\x60\xb4\x19\x10\x4d\x2f\x00\x1d\x0e\x58\x71\x4e\xb1\x18\x8d\x5a\x82\x5b\xd4\xc1\x91\x0c\xca\xf8\xd2\x68\x89\x10\x17\x79\xe6\x51\xcf\x97\x33\x1c\x30\x24\xe3\x91\x48\x7d\x38\xb5\x0d\x69\x34\x54\xe1\xe8\x65\x62\x8b\x30\xda\xdf\x71\x60\x64\xb3\x4e\xfd\xff\xf4\xba\xaa\xfc\x7e\x22\x54\x91\x4f\x28\xb8\x71\xb2\x8f\x1f\x8e\x3e\x0d\xf1\x70\x17\x00\xb4\x16\x4e\x91\x23\x67\x29\xca\xec\x55\x6c\x6c\x05\x6c\xdb\x20\x36\x60\x68\x5f\xbf\xaa\x0a\x0c\x5b\xa1\x8b\xec\x53\xae\xd9\xa8\x2c\xd3\x45\x10\x0f\x50\x12\x8d\x05\x7f\xac\xed\xfc\x3c\x5f\xf3\x1d\x0c\x71\x82\x17\x70\x2f\x1d\x50\xd6\x22\x6f\xb7\x3c\x86\x39\xcd\x13\xed\xca\x61\x1a\xd6\x87\xa7\xe9\x80\x11\xce\xbd\x4f\xc2\x09\xd5\x73\x21\x67\x2c\x8e\x81\x63\x74\xbb\x9f\xfe\x4c\xe8\x65\x1d\xdd\xd1\x01\x5b\xdd\xe3\x21\xc3\x1e\x25\x4a\x8c\xeb\x3d\x46\x45\xb9\x4c\x43\x45\x58\xd4\x6d\x6d\x00\xc2\x94\x01\x6a\x43\xfd\xb6\xe6\x15\xb2\x42\xe6\x4a\xb2\x25\xad\x18\x79\x1d\xb3\x55\x04\x38\x9d\xa1\xd5\x79\x7d\x46\x27\xbc\x62\xd9\x20\x73\xa0\x3a\x97\x40\x16\x54\xf7\xb0\xa3\xfb\x76\x2f\xa1\x30\x37\x67\xba\x09\x53\x7a\x27\xae\xcb\xd4\x03\x30\xde\xfa\xa0\x81\xf7\xf6\xe2\xbd\x5c\xe8\xc0\x7e\xbf\x58\xf6\xbb\x81\xf4\xb7\xc1\x81\x37\x3a\x0d\x4c\xd8\xb5\x2f\x88\x09\x73\x7f\x6f\xc0\x03\xfb\x1a\xac\xf9\xcd\x86\x95\xfa\x29\xa9\xd2\x32\x87\x59\x4e\xbb\x59\xe5\x7c\x0e\x18\xe2\x10\xf6\x10\x7b\x97\x6b\xce\x5d\x3d\x76\x5f\x31\xd8\x0d\x6b\x19\x56\xdd\xb3\x3f\x60\x4c\xaf\xba\x09\x0e\x0a\x0d\xf9\x50\x44\x71\x54\x86\xc1\x5e\x87\x2c\x05\xf3\xc0\x4a\x23\x25\x8f\xeb\x99\x61\x65\xdf\xe8\x3d\x48\x81\x72\x45\xf6\x7c\x20\xc9\x63\x55\xbe\xb1\x37\x88\xe0\x7d\x49\xc2\x62\xec\xfd\xdf\xfe\x18\xad\x95\x21\x2c\x87\x0e\xde\x9a\xe0\xad\xa9\xb6\xe0\xad\xd9\x9c\x44\xf0\xd6\x34\xb5\xe0\xad\xd9\x69\xfc\xe0\xad\x59\x6f\xc1\x5b\x13\xbc\x35\xc1\x5b\xd3\xdc\x82\xb7\x26\x78\x6b\xbe\x54\x6f\x4d\xa9\x6a\xdc\x87\xae\x5a\x55\x0b\x5d\xc4\xb7\xbd\x4c\x8a\x6a\x16\x95\xa9\x90\xfe\x2d\xfb\xaf\x87\x52\x5c\xab\xaa\xe6\x4d\xd5\xd6\xaa\x12\xbc\x61\x25\x18\xac\xb5\x36\xea\xa8\x85\x16\xbb\x31\xc6\x2d\xa9\xaf\x9f\xab\x01\xa7\x12\x43\x7a\x1f\x78\x7c\xee\xb3\x49\xdc\xc5\x72\x33\x28\x53\x4d\x62\xb2\xef\x2d\xa1\x23\xb3\x53\x5c\xe8\xf5\x87\x5c\xb3\x49\xf9\x46\x11\xa3\x8b\x06\x5b\x5f\xaa\x6b\x08\xb4\xbc\x40\x5f\x5a\x06\x5d\x8a\x4b\x91\x53\x51\xa2\x89\x61\xdc\x20\xd7\x66\xcb\x94\xbb\x78\x0f\x13\xa9\x64\xce\xb9\x91\x1d\x04\x77\x89\x14\x03\x66\x62\xcf\x04\x6b\x84\x75\xe4\x64\x35\x0d\x5c\x23\xaa\x1b\xe5\x36\x55\x62\xf0\xa9\xb6\xd7\xf8\xb9\x6a\x3c\x82\x3b\x13\xb6\xf9\xc5\xf6\x33\x60\x12\x05\xa5\x21\x3c\x59\xb1\xa2\x21\x44\xf6\x02\x89\xab\x3a\x59\xa6\x70\x1f\x69\x92\x88\xab\x21\x07\xcb\x40\x54\xde\xb9\xf2\x5b\x6f\xec\xbd\x1a\x5c\x22\xae\x16\xb0\xde\x57\x90\x0d\x75\xe4\xea\x2d\xd4\x91\xbb\x9b\x3a\x72\x15\x47\x63\xb5\xa0\x5c\x37\xac\xb0\xe0\xdc\x9d\x16\x94\x23\xe4\xbf\xdc\xc5\x7e\x12\xac\x77\x30\x4f\x34\xcb\xca\xb4\x56\x65\x77\x28\xb1\x2a\xe3\xdc\xe5\xd4\xad\x13\xa0\x99\x0d\x8d\x96\x9d\x43\xd5\x08\x15\xc7\xc3\x34\x59\x85\x0c\xd1\xe6\x9d\xa1\x7d\xd9\x56\x71\xf3\xba\xa4\x4d\xde\x63\x0f\x9d\x93\xd4\x8b\x85\x3d\x77\x57\xc4\x56\x9d\xcc\x8a\xec\x9b\x03\x2e\x59\x39\xb7\xec\x1a\x2f\x5b\x3b\x19\x7b\x0c\x60\xed\x3c\x97\xe0\x85\xc3\x05\xbb\x04\x5e\x1e\xa0\xfb\x6a\x34\xf2\xf2\x68\x5d\x04\xe8\xd1\xfb\x4d\x84\x84\x3e\x8c\x77\xe8\xe1\x5e\x3b\xb2\x7b\x8c\xb0\xe5\x50\xff\xa6\x72\x50\x7e\xd7\x7d\xac\xf7\x18\xc4\x92\xb4\x4f\x72\xac\x6c\x74\x79\x9c\x77\xf6\x72\x87\xb9\x64\x43\x12\x96\x86\x59\x7d\x77\x48\x54\xda\xb5\x0c\xe2\xdd\x26\x28\xdd\x69\x72\xd2\x97\x53\xad\xf0\x81\xdd\x5b\x5f\x40\xf9\x9f\xcf\xc4\x9d\x15\xea\xff\x34\xb5\x87\xaa\xff\x73\xe7\xee\xaa\x2f\xae\x0c\xd0\xbd\xba\xa7\xee\xc7\x35\xf5\x85\x95\x01\x7a\x10\x57\xd4\x67\x5e\x10\xe8\xee\x5c\x50\x7f\xea\x6a\x3b\x3b\xba\x9b\x76\xc7\xe0\x07\x75\x33\x3d\xa8\x8b\xe9\xe1\xdd\x4b\x3b\xc9\x05\x37\x75\x2b\xdd\xfb\xb5\x15\xbb\xc4\x9f\xef\x86\xcf\xf7\x97\xf0\x73\xcf\x01\xe7\x9f\x47\xa2\xcf\x03\x45\x99\x3f\x54\x84\xf9\xdd\x46\x97\x3f\x40\x62\xcf\x3d\x25\xf5\x3c\x60\x2c\xf9\xd0\xf3\x7d\xd0\xa9\x7e\x33\xc6\xb9\x4b\xec\xf8\x8e\xc9\x3b\x3b\x32\xcf\xfb\x4c\xda\xf9\x13\xf0\xcf\x9d\x92\x75\x02\x0b\x7d\x20\x16\x7a\x7b\xc9\x39\xf7\x97\x98\x13\x18\xa9\x6b\x37\x66\xa4\x3b\x26\xe0\xdc\x9a\x0d\xfd\x6e\x12\x6f\xee\x3b\xe9\xe6\x0e\x12\x6e\x1e\x22\xd9\xe6\x0e\x12\x6d\x82\xe7\xa1\x67\x0b\x9e\x87\xbe\x2d\x78\x1e\x9a\x5a\xf0\x3c\xd4\x5b\xf0\x3c\x04\xcf\x43\xf0\x3c\x04\xcf\xc3\xe6\x80\xc1\xf3\xd0\x38\x78\xf0\x3c\xfc\xe9\x3d\x0f\x43\x93\x58\x76\xc3\xe5\x87\x49\x5e\xb9\xdf\xc4\x95\xdb\x4f\x5a\x79\xc0\x84\x95\xcf\xc9\xb8\x31\x38\x41\x65\x37\x1c\xfd\x5c\x12\x53\x3e\x8f\xa4\x94\x07\x4f\x48\xb9\x69\x32\xca\xed\x24\xa2\xf4\x42\xd5\x4c\xc4\x47\x5c\xb3\x9b\x5e\xc8\x53\xc5\xa1\xa6\x5b\x79\xe8\xa5\x60\x31\xc9\x72\xed\x2e\x02\x09\x37\xf3\x74\x6e\xe3\xfd\xdc\xcc\xb3\xb6\x79\xe1\x7a\x9e\xb6\xf6\xd9\x5c\xcf\xd3\xb4\x67\xe1\x8e\x9e\xf5\x16\xee\xe8\x09\x77\xf4\x84\x3b\x7a\x6c\x0b\x77\xf4\x84\x3b\x7a\x42\xd5\xb7\x50\xf5\x2d\x54\x7d\xeb\xff\x55\xa8\xfa\xd6\xdc\x42\xd5\xb7\x21\x2d\x54\x7d\xeb\x3d\x7a\xa8\xfa\x16\xaa\xbe\x0d\x1b\x38\x54\x7d\xeb\x3d\x81\x50\xf5\xed\x5f\xb6\xea\x5b\xb8\xa3\xe7\x8b\xb8\x27\x22\x5c\x12\x31\x24\x5c\xec\xb3\xba\x24\x22\xdc\xd1\x13\xae\x87\xa8\xb7\x70\x47\xcf\x17\xc4\x7b\xc3\x1d\x3d\x5f\x32\xfb\x0d\x77\xf4\x04\x26\xbc\xbd\x85\x3b\x7a\xc2\x1d\x3d\x9d\x2d\xdc\xd1\x13\xbc\x35\xc1\x5b\xb3\xde\x82\xb7\xa6\xbd\x05\x6f\x4d\x57\x0b\xde\x9a\xd6\x16\xbc\x35\xc3\x5b\xf0\xd6\x04\x6f\x4d\xaf\x16\xbc\x35\xc1\x5b\xf3\xa5\x7a\x6b\xc2\x1d\x3d\xe1\x8e\x9e\x70\x47\x4f\xb8\xa3\x27\xdc\xd1\x53\x69\xe1\x8e\x9e\x70\x47\xcf\xdd\xdd\xd1\xb3\x96\x55\xf3\xe5\x5e\xd4\x33\x7c\x19\xe1\xb6\x9e\x70\x5b\x4f\x43\x0b\xb7\xf5\x84\xdb\x7a\xb6\xb5\x70\x5b\x4f\xb8\xad\xa7\xa5\x85\x9a\x79\x3d\x5b\xa8\x99\xd7\xb7\x85\x9a\x79\x4d\x2d\xd4\xcc\xab\xb7\x50\x33\x2f\xd4\xcc\x0b\x35\xf3\x42\xcd\xbc\xcd\x01\x43\xcd\xbc\xc6\xc1\x43\xcd\xbc\x3f\x7d\xcd\xbc\x70\x5b\xcf\x67\x79\xdb\x44\xb8\x6a\xa2\xa3\x7d\x3e\x57\x4d\x84\xdb\x7a\xfe\x35\x2f\x99\x08\xb7\xf5\x7c\xc6\xfc\x33\xdc\xd6\xd3\xdd\x3e\x1f\x16\x1a\x6e\xeb\xf9\x57\x66\xa4\xe1\xb6\x9e\x70\x5b\x4f\xd1\xc2\x6d\x3d\xc1\xf3\xd0\xd8\x82\xe7\x81\x04\xcf\x43\xd1\x82\xe7\xa1\xd7\xb8\xc1\xf3\x10\x3c\x0f\xc1\xf3\xd0\x3e\xe9\xe0\x79\x68\x19\x2e\x78\x1e\x82\xe7\x61\x4b\x0b\xb7\xf5\x34\xb7\x70\x5b\x4f\xb8\xad\x27\xdc\xd6\x13\x6e\xeb\xb9\xcb\xdb\x7a\xe0\x5a\x4b\x1a\xe9\x63\xc1\x35\xf0\xc6\x44\x94\xbe\x18\xf9\x62\xad\x37\x73\xba\xcd\xd9\x22\x97\x4e\xc7\x5d\xbc\x3f\x3d\x26\x11\xd5\x34\x11\x0b\x72\x2a\x62\x6b\xc3\xc5\x2f\x8a\x9f\x53\xd0\x34\xa6\x9a\x16\xe6\x7f\xa3\x0b\x5e\xb2\x18\x99\x5a\x0c\xd7\x84\xa5\x74\x01\x86\x79\x34\x4e\x22\x57\x40\x28\xb9\x82\x24\x99\x5c\x70\x71\xc5\xc9\x25\x48\x55\x61\x97\x9f\x44\x96\x7e\x22\x0a\xe4\xa5\xbd\xf1\x06\xae\x33\x83\x2b\x4c\xdb\x73\xd7\xcf\xa4\x3a\x5c\x19\xf6\x7d\x6c\x9f\x9e\x61\x98\x6c\xdb\xe5\x31\xc5\xda\x71\x99\x66\x4e\x4f\x8c\x10\xfb\xc4\xd0\x65\xae\x7c\x8c\xfa\x9c\x25\x30\x99\x51\x05\xb1\x1f\x57\x19\x72\x11\x32\xb6\x73\xcb\x35\x4b\xd8\xaf\xe0\xb8\xb9\xb5\xf1\x36\xed\x7c\x8f\x03\xbf\x5b\xe9\x9f\x90\x88\x46\x4b\x78\xce\x9a\xd5\xf5\x89\x9f\x6a\xf3\x4b\x7d\xf4\x77\x3f\x4e\xef\xcb\xa1\x8e\xdd\x07\x5e\x43\x8f\x99\x44\xfe\xb2\x22\x4a\x0b\xe9\x21\x9a\x49\x98\x44\x34\x89\xf2\x04\xb9\xc9\xd1\xe9\x89\x1d\xa9\xfb\x7a\xa7\x0e\x86\x5e\x2e\x7a\xc0\x8c\xfd\x27\xed\x73\xde\xc4\x02\x14\x0c\xd1\x26\x77\x93\x69\xa7\x90\x0a\xb9\x3a\xa7\x72\x01\x37\x26\xed\x37\x95\xbe\xea\x84\xfd\xef\xaf\xde\xbd\x79\xf1\xe6\xf5\xc9\x9b\x93\x73\xc7\x72\xbd\x37\xaa\x4e\xf2\xd3\xd2\xe3\x41\x94\x98\x6b\x37\x45\x92\xb0\x94\xe9\xe2\x2b\x4b\x9b\xcd\x6a\xa3\x65\xc9\x98\x6d\x96\x73\xcd\x52\xb0\xae\x27\xaa\xb5\x11\x35\x0c\xdd\xa4\x00\x1a\xef\x93\x4a\xe9\x05\x18\xbe\x49\x16\x39\x95\x94\x6b\xf0\x5c\x9e\x69\xfb\x51\x2c\x88\x12\x4e\x99\x65\xaa\x74\x53\x29\xd0\x36\x41\xe7\x54\x34\xb3\x1a\xec\x61\x49\x2f\xed\x85\x3f\x73\x61\x58\xb3\xd9\xd4\x54\xc4\x6c\xce\x22\x6b\x1d\x21\x29\x8d\x8b\xa4\x12\x27\xf0\x83\x2c\x4e\xb6\x72\xc1\x6d\x54\x59\x07\x33\xf0\x4b\x26\x05\x47\x45\xe6\x92\x4a\x46\x67\x09\x14\x0e\x38\x05\xda\x8e\x57\x2e\x88\x93\xd9\x4a\x43\x33\xbb\xb2\x23\xb8\xdd\x70\x37\x45\x35\xf7\xf7\xe8\x51\x63\x47\xe7\x65\xfa\x57\x29\x88\x98\x0e\x98\xcb\x0b\x88\x41\x31\xc7\x15\x25\xc4\x79\xe4\x61\x27\x74\x26\x99\x55\xcb\x68\x81\x32\x8e\x4b\x53\x45\xd2\xdc\x9c\xc2\x46\xc2\x51\x8a\xcd\x12\x18\x1b\x39\x86\x35\xe7\xad\x94\x7d\xcc\xc0\x80\x19\x7b\x42\xe9\xe2\x12\x0c\xc2\x19\x44\xb6\x32\x28\x80\x11\x72\x04\xde\xda\x44\xad\xa8\xe2\x9d\x96\xe6\xac\x8d\x9c\xcb\xfa\x64\x4e\x56\x22\x97\x6b\xe7\xc2\x92\x1a\x44\x46\xf2\x6d\x9c\x88\xcb\x35\x43\x26\x34\x26\x31\x18\x89\x9e\x71\x73\x44\x2d\x84\x88\x8d\x60\x2f\xc5\x35\x4b\x71\x14\x47\x01\xc5\xb6\xcd\x56\x24\x16\xb9\xf5\xfe\x21\x9e\x98\xb3\xc0\x1d\x63\x19\x8d\x2e\xcc\x1c\xb0\xe3\xb6\x2c\xc1\x03\x9d\x66\x07\xf8\x96\xfb\xaf\xfb\x52\x4d\x7f\x56\x82\x97\x6e\xdf\x62\x59\xd3\x7e\xdb\xcb\x14\x99\x81\xd2\x13\x98\xcf\x85\xd4\xff\x30\x1b\x9c\x73\x24\x1b\x2e\x0a\x08\x7a\x14\x42\x1f\x3f\x82\x1b\xd3\x3d\xd6\xe9\x5e\xc8\x2d\x2c\xa4\x82\x7c\x4d\x4c\x30\x33\x14\x2f\xf9\x21\xf9\x7f\xfb\xff\xfc\xcb\xef\x93\xd1\xf7\xfb\xfb\x1f\x9e\x4e\xfe\xfe\xf1\x2f\xfb\xff\x9c\xe2\x3f\x9e\x8c\xbe\x1f\xfd\xee\xff\xf8\xcb\x68\xb4\xbf\xff\xe1\x87\x37\xaf\xce\x4f\x5f\x7c\x64\xa3\xdf\x3f\xf0\x3c\xbd\xb0\x7f\xfd\xbe\xff\x01\x5e\x7c\xec\xd9\xc9\x68\xf4\xfd\xbf\x37\x4c\x88\xf2\xd5\xbb\x79\x2b\x19\xf7\x4a\x76\x9d\xf4\x39\x91\xd6\x34\x67\xc6\xf5\x44\xc8\x89\xfd\xe0\x90\x68\x99\x6f\x97\x53\x8d\x50\xdb\xe5\x20\xed\x7b\x22\xbc\xad\xf4\x55\xf3\x9b\xb8\x4b\xd7\x9c\xd1\xce\xcc\xa6\xe0\xed\x99\x95\xfb\xe6\x66\xdb\xbd\x4c\xdf\x7c\xc8\x9d\x6d\xe9\x11\x85\x75\xf7\xe5\x63\xe5\x83\x0f\x6a\xfd\xd7\x12\x5e\x2d\xcf\x6f\x1b\xab\x87\xf4\x34\xcc\x38\xd2\xb9\x85\x99\x64\x42\x32\xbd\x3a\x4e\xa8\x52\x6f\x69\x0a\x37\xdd\x90\x93\x79\xa9\x63\x8d\x0d\x41\x9b\x13\xc8\x1d\xd1\x2e\x1a\xc4\x0d\xd9\x0c\xf0\x93\x39\x2a\x19\x95\x7e\x3c\x50\xfd\xb7\x05\x61\x7a\x12\x17\x92\xfc\x0a\x52\xb8\xeb\xf7\x24\x58\x45\xa5\x71\x04\xf7\x59\xfb\x3e\xb4\x80\x4d\x41\x94\x23\xd8\x8c\x84\x74\x6d\x74\x8d\x39\x5b\xdc\x14\x74\x67\xdb\x3a\x25\x11\xe5\x66\xa1\x78\xa1\xe4\x9c\x7c\x4a\x60\x41\xa3\xd5\x27\xb3\xe0\x4f\x12\xcc\x14\x8d\x82\xf7\xc9\xaa\x0d\x6b\x8a\x81\x0b\xbc\x61\x8a\x00\xc3\x3b\x46\x19\xff\xd9\x6a\x83\x5e\xb5\x6e\x9c\x89\xc4\x74\xfd\x4c\xc4\x53\xb3\x07\xd3\xda\x6a\x91\x85\x16\x0f\x0b\x61\xe2\xc3\x93\x8f\x1b\x6f\x3a\x3b\xa3\x16\x56\x63\xac\x12\x87\xcc\x91\xed\xb7\x49\x36\x1e\x20\xe4\x28\x4e\x19\x1a\x47\xc9\xfe\xe9\xd9\xd1\x68\x6d\xe5\x46\xce\xb1\x07\x71\x2c\xc0\x87\xbe\x98\x81\x54\x69\xe6\xc4\x43\x14\xd3\x09\x2d\x09\x63\x3e\xa1\x9f\x8b\x01\x30\x5a\x3e\x5b\x52\x68\xfd\x64\xcf\x8e\xc8\x27\x23\x23\x27\x8c\x83\xdd\x83\x4c\xb2\x4b\x96\xc0\xc2\xcc\xa4\xe2\xce\x27\xc7\xb9\x94\xc0\x75\xb2\xf2\x37\x42\x6e\xdf\x5d\xa6\xcc\x79\xb5\x8e\xe8\x0e\x39\x1b\x27\x53\x18\x14\x0a\x64\x30\xbd\x28\x88\xa7\xe4\x0c\x7b\x5a\x59\x07\x84\x7b\x0f\xf7\x1e\xa5\x8a\x26\xe4\x21\x12\x94\x21\x22\xc6\xed\x57\x2c\xb6\x82\x00\x48\xd9\x66\x68\xc3\xdc\x72\xab\x46\x8a\xc4\xe8\x8a\x85\xd6\x6a\x0e\x70\x34\xab\x20\xb0\x51\x00\x73\x31\x4b\x0e\x90\x5b\x36\xb0\x19\x46\xdd\x19\xce\x4e\x36\xf4\xeb\x6b\x93\x1d\x4e\xcc\x1a\xe7\x39\xc6\x29\x79\x9d\x1c\x99\x49\x55\xe4\xaa\xc9\x9c\xd5\xd9\x8e\x4b\x2b\x01\x65\x0e\xf3\x95\x9f\xa2\x84\x59\xce\x12\x34\x61\xb2\x02\x1c\xcd\xf2\x2e\xd2\x21\xad\x9a\x06\x44\x96\xba\x5b\x6e\xf3\x2c\x13\x52\x97\xb6\xa7\x68\x4d\xe7\xb7\xf6\x9c\x2d\x70\x34\xd3\xcd\x24\x64\x54\x16\xa7\x9d\x02\x12\x2d\x29\x37\xb2\x56\x0b\x5c\xde\x08\x4c\xd7\xb7\x65\x2d\xcc\x6c\xe8\x4c\xe4\x1a\x31\xde\x71\xa0\xb9\xc8\x79\x4c\x0c\x73\x3d\x24\x4b\xad\x33\x75\x78\x70\x50\x9e\xfe\x53\x26\x0e\x62\x11\xa9\x83\x48\xf0\x08\x32\xad\x0e\x3c\x2f\x38\xc8\x44\x3c\xf1\x7f\x4c\xa8\x27\xe5\x83\xc7\xbb\x32\xdf\x82\x7d\x1f\x12\xbb\xe1\x0d\x6f\x01\xcf\x5b\x6e\xba\x9c\xb4\x7f\x6c\x5e\x28\x81\xbb\xf5\x25\x2d\x12\x17\x1e\xd9\x78\x02\xaf\xdf\x7f\x5a\xbe\x5f\xdc\xcf\x5a\xe8\x18\x15\x96\xfd\x58\x55\xbb\x6e\x3f\xa3\xda\xac\xcb\x1d\xf6\xe4\xfe\x16\xde\x73\xcf\xb5\x8d\xdc\x5d\xae\x02\xe5\x2d\xad\x29\x5e\xdd\x6a\x54\x33\xfb\xc4\x30\x5c\xbe\x22\x86\x34\xb4\xbb\x47\xd8\x5a\x36\xdb\xac\x08\x4b\x23\xa1\x61\x65\x8a\x6f\x0a\xd7\xdb\x18\xe6\x73\x88\xf4\x77\x15\x53\x55\x51\x5b\xa1\x70\x6d\x7d\xe3\xff\xf5\x5d\x33\xa3\xea\xe5\x85\xea\x17\xee\x61\xa7\xd4\x6e\x42\x1f\x66\x3a\x7f\x81\x3d\xd6\x24\x25\x0b\x3c\x3b\x18\x9a\x12\xd0\x17\xec\xec\xb1\xd6\x33\xe1\x24\x50\xc3\xb9\x2a\x2f\x77\x06\x3c\x20\xd3\xae\x1c\x38\xce\x92\x5b\x7a\x04\x81\xbc\x15\xae\x48\x0d\x8c\xc9\x29\x5e\xa7\x5b\xfe\x82\x67\xff\x5b\x61\xcb\xd5\x74\x04\x79\xf6\x74\x51\x74\xc6\xcb\x0c\x83\xe7\x0f\x65\xf8\x8c\x05\xcc\x5a\xf8\x4c\x49\x58\x55\x5f\x58\x2b\x60\x2f\x60\xd5\x09\x55\x17\x86\xe0\x42\x77\xd0\xd7\x34\x2e\x71\xd4\xeb\x20\x36\x32\xe1\x1f\xae\xa6\x81\x48\x67\x8c\xdb\xa9\xd8\x81\xfd\x3e\xe3\xd8\x7e\x3f\x78\x8c\x7f\x76\x4f\xa2\x27\xb4\xfb\xc5\xf0\x0c\x03\xf9\xbb\x01\xf1\x39\x85\xf7\xb9\x0b\xa4\xdb\xe2\x70\x2a\xc1\x37\x2f\x7e\xc9\x69\x32\x25\xcf\xed\x49\x80\xc0\xb3\x3f\x75\x91\x9b\xed\x62\xc3\x27\x7f\xc5\x92\x38\xa2\x32\xc6\x53\xd3\xb2\x1f\xa2\x84\x45\x1c\xea\xe5\xc4\x8e\xbe\x3d\x03\x2c\x91\xc7\x5e\x74\x4d\x32\x2a\x35\x8b\xf2\x84\xa2\x50\x00\x0b\x21\x3b\x82\xcf\x7b\x6e\x66\x89\xcd\x67\x10\x09\x1e\x77\x78\x0f\x87\xed\xea\x79\xbd\xf3\xea\xf6\xa2\xf0\x0c\x92\xb9\x3a\x29\x2c\x85\x3a\x79\xed\xaf\xe9\xdf\x1d\x63\x89\xb9\x67\x76\x05\x6f\x19\x5b\xc9\xf5\x8a\x29\xa8\x96\x73\x62\xca\x87\xf6\x8f\x2a\x07\x4e\x41\xed\x53\xf2\x9f\x2b\x2f\x1e\x74\x85\xfc\x30\xed\xdd\x59\x68\x30\x72\xf3\x75\xa4\xe8\x76\xb2\x64\x23\x73\x21\xe1\x12\x24\xd9\x8f\x05\x7e\x83\x65\x99\x46\x53\xf2\xdf\x46\xed\x6c\x73\x05\xd9\xc6\x61\x61\x0b\xfb\x38\xc2\x2e\x32\x2e\xf0\xd2\x7e\x74\x33\x3e\x25\xfb\xb6\xd6\x13\x4b\x53\x88\x19\xd5\x90\xac\x46\x36\x82\x1a\x9c\x05\xaf\x0f\xd6\xf4\xa9\x62\x56\xa9\x5e\xf6\xf5\xdf\x5a\xde\xc4\xc9\xde\x26\x52\xfd\xe4\x4d\xdb\x25\x60\xad\x9a\x52\xc3\x9e\xc2\x19\xda\x19\xa8\xd0\x18\x01\x36\x2e\x79\x4d\xc5\x0a\xec\x79\x73\x81\x5b\x3f\x1b\x04\xa5\x44\xc2\x02\xe9\xd3\xd2\xdc\x0d\xa8\x93\x45\xdb\x8b\xb8\x75\x08\x21\xed\x5e\xb1\x09\x31\x5a\xe7\xd7\x7f\x8b\xa9\xa6\x0d\x2f\x58\x94\x59\x65\xdb\x48\xad\x4b\xb6\x29\x3b\x6f\xda\xeb\x1e\x6e\x1e\x37\xfc\x4e\x3d\xa0\xc6\xb8\xed\xcb\x3e\xd8\x75\x82\x66\x70\x1b\x9b\xe8\xd1\x60\x22\x61\xc1\x94\x96\xab\x8a\xb3\xc3\xb9\x51\x05\x61\x5c\x69\xca\x35\x43\x56\x4d\xfc\x9b\x13\x67\xe7\x37\x5a\xd9\xf6\xfd\x7f\xc7\x93\x95\x35\x22\x63\xda\x8d\xd5\xc5\xce\x57\x19\x90\x6f\x2b\x7f\xbc\x92\x59\xb4\xfd\xfb\x93\x39\x71\x0c\xd4\xe2\x26\x8d\x63\x09\x6a\x93\xb3\x6d\xfb\xba\x15\x7c\xde\x2c\xb6\x2b\x04\x4f\xbd\x59\xcd\x65\xfe\x28\xc5\x16\x46\x49\xf1\x85\x1b\xbd\xdf\x68\x4d\x59\xb1\xaa\x26\x7e\x68\xbd\xc3\x90\x16\x27\x26\xd3\x5e\x6b\x8c\x04\x57\x79\xea\x33\x41\x8c\x8a\x9d\x01\x8f\x81\x47\x2b\x2c\xf4\x94\x5c\x42\x83\x85\xe1\x47\xd5\x80\x12\x84\xfc\x1f\xb6\x58\x9a\x8d\xb2\x93\xab\x4a\xce\xde\x43\x5e\x9b\x29\x53\x06\xf0\x73\x90\x12\x62\x9b\x29\x63\x84\x5e\xdf\x43\xc5\xe3\xe9\x2a\x4f\xf9\x20\xce\xfa\x64\xb1\xfc\xdf\xf6\xe9\x9e\x17\x65\x27\xbd\x6b\xc4\xc3\xd4\x72\x20\x03\x8e\x85\xb0\x11\x05\x99\x50\xcc\x17\x79\x2b\xce\x85\xb5\xd2\x95\x62\x6e\x0b\x4b\x36\x8f\xb5\x9e\xd2\x86\x81\xcf\xb5\x45\xa3\x75\x21\xe7\x76\x33\xa1\x6a\x3b\xf5\xbc\xb0\xa1\x38\xe6\xf9\xe6\x56\x17\xc1\x38\x98\x07\xb7\xbe\xb4\xf2\x2c\x93\x94\x5f\x40\x4c\x12\xb8\x66\x91\x58\x48\x9a\x2d\x59\x84\x25\x0c\xad\x5b\xd9\x68\x8c\xda\x86\x51\x35\x63\x78\xd3\xe9\x95\xe5\xb3\x84\xa9\xe5\x76\x07\x65\x2b\x71\x28\x88\x24\xe8\xad\x9c\xaf\x0f\x6d\x9c\xd9\xcf\x4b\xe1\xc7\x07\x98\xbb\x7e\x5d\x7e\x86\xc5\x76\x9f\x45\x4a\xa3\xc8\x10\xb6\x77\xb6\x82\x93\x04\x2b\x44\xd4\xc0\x21\xb4\xf7\x68\x99\x5e\x2e\x00\x32\x8b\xcf\x18\xac\xa6\x52\xb4\x62\x2a\xc6\x23\xc0\x92\x8c\xae\xb4\x26\x80\xf7\x36\x68\xc9\xc0\x4a\xb0\x80\x0e\x46\xbf\x8b\xc0\xf5\x76\x89\xb3\xdd\x88\xd0\x62\x40\x68\x87\x78\xc1\x0b\x3b\x81\x5e\xe1\xa1\x5e\x28\x30\xff\x36\xe0\xc5\x27\x43\x37\xdb\x56\xe0\x3c\xb3\xa1\xd7\x3b\xf3\xc3\x1f\xd7\x7a\x71\xa1\x60\x8a\x2c\xc5\x95\x1b\xa0\xce\x31\x9c\xc9\xd3\xa3\x41\xcc\x54\x64\xd8\x4c\x83\xe1\xe8\x58\x70\xe5\x2b\x6e\x52\x6e\x8b\x64\x5e\xd2\xc4\x65\xc3\xba\xc1\x32\x91\xa0\xcb\x35\xce\xbd\xbe\x6a\x53\x7d\x20\x9d\x41\x1c\x43\xec\xe3\xcb\x57\xa4\xe1\xd0\xef\x10\x38\xba\x64\x02\x7f\x2c\x9e\x8a\x24\x69\x3f\xd3\x5b\x0d\x2b\x7d\xcc\x2a\x1e\x00\xbd\x63\x5a\x3a\xc4\xcc\x13\x0f\x50\x67\x17\x37\xd4\x51\xfa\xbc\x11\xc9\x8c\xc2\x52\xc0\x7d\x06\xfa\x0a\x80\x93\x68\x09\xd1\x85\x2a\x43\xf5\xb4\xa1\xc3\xda\x46\x3b\x63\x6d\xbb\x80\x58\xe5\xa0\x85\x60\x6a\x36\xd4\x65\xb4\x03\x61\x46\x2d\xe4\x70\x55\x8f\x0b\xdb\x3c\xb8\xe8\x25\x65\x09\x9d\x25\x1d\x0a\xf3\xc9\xbc\x7c\x73\x5c\x9d\x3f\xf3\xd2\x51\x96\x27\x89\xf3\x7f\x63\x44\x8c\x96\x74\x3e\x67\x11\xc6\x3a\x62\x44\x50\x19\xd9\xbb\x75\xe9\x3b\x45\x01\x29\x4d\x75\xbe\xb1\xf5\x2d\x78\xd3\x86\x2f\x46\x0b\x65\x8d\xf6\xd6\x3e\x18\xf2\x7e\x5d\x83\x35\xb3\x03\xab\xa2\xaf\xb9\xce\xa6\xe4\xad\xd0\x2e\xe2\xee\x0d\x28\xe5\xa2\xfd\xc8\x7b\xa0\x4a\xf0\xca\x51\x80\x9a\x87\x64\x0b\xc6\xe9\xf6\x92\x04\x76\xfd\x55\xc3\x7a\xa1\x68\xd2\x15\x96\x24\x66\x0b\x49\x75\xc1\xc1\xcb\x25\xba\x43\xd3\x89\x05\xd6\x63\x31\x25\x47\x7c\x85\x68\xe3\xc2\xf0\xb6\xdb\x54\x19\xd7\x52\xc4\x79\x04\xae\xf8\x72\xae\xaa\x1d\xdf\xea\x39\xd0\x8f\x2c\x8f\xfd\xe0\x65\xae\x41\x0c\x9a\x32\xe7\x32\x17\x1c\x08\x55\x99\x51\xff\x3d\x19\x58\xef\x59\xb9\x41\x78\x0a\x1e\x9d\x9e\x90\xf7\xd0\x8e\x8d\x93\x49\xd3\x24\x30\x6a\x44\x69\x99\x47\x78\xc8\x1a\xea\xe7\xb1\x3b\x2e\x2d\x01\xd8\xa8\xcd\x4a\x8e\x93\x33\x1a\x5a\xa9\x38\xa3\x7a\x49\xa6\x76\x43\xa7\x15\x70\x12\xf2\xd2\x1c\xb8\xd7\x34\xcd\x12\x18\x37\xba\x58\xfe\x0d\x0f\xb6\x97\x42\x9c\x59\x94\xb0\x33\xf9\xad\xe9\x6d\xf3\x9f\x83\x83\x3a\xc2\x8a\x99\x51\x52\x9c\x0f\x01\xf1\x76\x2e\xc4\x63\xb5\x0e\xaf\x26\xd0\xf8\x3e\x7f\xc0\x80\xd4\x2d\x2b\xc1\x19\x52\x09\x87\x64\xef\xc8\xf3\x92\xbd\x31\xd9\x3b\x95\x62\x81\xd9\x29\x7c\xe1\x72\x48\xf6\x9e\xc3\x42\xd2\x18\xe2\xbd\x8e\xb1\xfe\x82\x59\x4c\x6f\x40\x2e\xe0\x07\x58\x7d\xdb\x70\x54\x6d\x7e\xe1\xcf\xde\x6f\x31\x17\xaa\xeb\x13\x23\x1e\x19\x19\xe2\xdb\x94\x66\x7d\xde\x7d\x43\xb3\x3e\xb3\x39\x2e\x89\xf1\xc3\xc7\x14\x34\xbd\x7c\x36\x2d\x51\xf9\xd3\xcf\x4a\xf0\xc3\xbd\x12\x7e\x63\x91\x32\x0c\xfe\x5b\xed\x91\xb5\x45\x1c\xee\xe1\x2a\xdc\xaf\x1e\x18\x87\x7b\x66\xfc\x3d\xc3\xf1\xb4\x98\xe5\xf3\xc3\x3d\x8c\x8e\x1b\x3f\x1b\x4b\xc8\xc6\x46\x4a\xfe\xb6\xec\x7b\xef\x53\x33\x62\xb9\x95\x59\x47\x2f\xe2\x6a\x93\xab\xe5\xdf\xfe\x68\x11\xe6\x5a\x8e\xf1\xae\x90\xdd\x09\x49\xa8\xd2\xe7\x92\x72\x85\xd3\x3d\x67\x69\x13\x60\x27\x24\xb5\x0c\xb5\xf1\xb9\x44\x26\xdb\xf8\xd8\xa2\x6d\xe3\xe3\xc6\x3d\xed\x16\x44\x36\xd7\x70\x1b\xce\xb3\xcd\x5e\xcb\xec\x5e\x23\xe6\x7b\xd3\x69\xb1\xd7\xe6\x60\x76\x6f\x83\xab\xf7\x6e\x18\xa4\x3b\x49\x30\x7d\x0c\xb7\xba\xed\x3c\xb6\xbc\xae\x30\x7a\x5d\xb9\x2a\xf0\x24\xe7\x31\xc8\x04\xe3\x03\xca\xf1\xac\x77\x38\x9e\x3a\x5b\x1a\x2d\xcc\xa2\x18\xb9\x8e\xc2\x04\xaf\xf8\xe0\x6c\xac\xab\xef\xd1\xf0\x64\x57\x68\xdf\x76\x83\x32\x4b\x14\x41\xa6\xdb\x85\x96\x5e\x26\x6e\x6f\xa7\x34\x32\xf7\x44\x37\x63\x95\xc3\xa9\xdb\xd8\x2f\xd7\x95\x0d\x26\x5b\xe6\x29\x35\xe7\x3d\x8d\x31\xb6\xb5\x78\x66\x4d\x0e\xd6\x44\x60\xcf\x31\xeb\x2e\xb7\x7e\x4c\xbf\x7d\x9d\x3b\xe4\x64\x00\x5a\x54\x8a\xe8\x30\x3e\xf6\x82\x59\x4a\xaf\x5f\x03\x5f\xe8\xe5\x21\xf9\xeb\x57\xff\xfb\xeb\xff\x68\x78\xd1\x1e\x25\x10\xbf\x02\xee\x8c\xae\xb7\x01\xbd\xcd\x5e\xeb\x5e\x83\xa9\xcf\xae\x98\x2e\xca\x77\x0a\xff\x5c\x89\x95\x57\x14\xe3\x9f\x9d\x18\x94\x67\xed\xe0\x7c\x89\x29\x3e\x4a\x53\x1e\xc1\xd8\x48\xd7\x5b\x87\x61\xc5\x49\x99\xac\xc8\xb3\xaf\xc6\x18\x9d\x8d\x93\xda\x38\x0c\x3f\x5c\x7f\x9c\x6e\x59\x0c\x53\xe4\xef\xe3\xda\x4c\x99\x22\x66\xef\xc5\x1c\xd1\xb4\x65\x92\x68\x45\x91\x60\x25\x1d\x6f\x53\xdb\x94\x74\xa0\x58\x49\x17\x26\x74\x99\xfa\xfb\x99\xf9\x53\xc6\x59\x9a\xa7\x87\xe4\x69\xc3\x2b\x96\x23\xdf\x06\x7a\xd8\x9e\x4a\x29\x90\x1a\xb6\xbc\x90\x34\x4d\x31\x89\x91\xc5\xc0\x35\x9b\x33\x0c\x56\x2b\x48\x0c\xcd\x62\xf6\x43\x1f\x60\x59\x00\x1f\x63\x2f\x0d\x1b\xed\x45\x74\xa7\x56\x2c\x96\x28\x3b\x39\x27\x78\x54\xe5\xbc\xab\x0c\x2c\x55\x5a\x2d\x9c\xc0\x75\x66\x15\xa3\x8a\x3b\x36\x05\xca\x19\x5f\xa8\x32\x4e\x1a\xf9\x5f\x9b\xb7\xc9\x7c\x76\xb5\x04\x17\x89\x05\x55\x67\xbb\x2f\xb3\x65\x34\xb3\x32\x3f\x00\x73\x46\xda\xd9\xc7\xa6\x6b\xc3\x28\x31\x29\x24\xc7\x54\x41\x0f\x37\x46\x25\x88\xda\xdf\x3d\x52\xe4\xb6\xdf\x1a\x03\x7a\xf6\xf4\xab\x56\xbc\x2b\xde\x6b\x7c\xa9\x0c\xaf\xfe\x70\x34\xf9\x6f\x3a\xf9\xf5\xe3\xbe\xfb\xc7\xd3\xc9\xdf\xff\xff\xf8\xf0\xe3\x93\xca\x9f\x1f\x9b\xa3\xa2\xb7\x2b\xa2\x65\x5b\xc3\x61\x77\xd6\x7a\x65\xc4\xe3\xc7\xd8\x47\x61\x9e\xcb\x1c\xc6\xe4\x25\x4d\x14\x8c\xc9\x8f\x1c\xcf\xc9\x1b\x02\xad\x3d\x58\xc9\x48\x36\x7b\x66\xd4\x26\x79\xdb\xbd\x82\x53\x6a\x7f\xc7\x4d\xb7\xcd\xa2\x73\x0b\x84\xee\xad\x78\x15\x2e\xc9\x2b\xe8\x69\x13\x32\xe7\x42\x4c\x9d\xde\x34\x8d\x44\x7a\x50\x3c\x6f\xc3\xdb\x66\x05\x8f\x60\x69\x56\xbe\x22\x25\x1b\xb7\x2a\x4d\x9d\xdc\x14\x26\x06\xd2\x48\x0a\xa5\xca\xeb\x26\x48\xc2\x2e\x80\x1c\x95\x46\x14\x73\x38\xcc\x20\xa2\xa8\x15\xca\x19\xd3\x92\x5a\x7f\x92\x57\x0a\xac\xb5\xaf\x65\x36\xb9\x82\x79\x9e\x90\x7d\x05\x40\xa6\x18\xf8\xbd\x71\xce\x8c\x9c\x2b\x68\xc6\x12\x86\xb9\x96\x24\x86\x48\xf0\x79\xc2\x9c\x9a\x9a\x66\x42\x6a\xca\x5b\x2b\x8c\xd8\x54\xfd\x05\x5c\x13\x56\x44\x5b\x99\x8f\xf7\x63\xae\x9e\x3d\xfb\xea\xaf\x67\xf9\x2c\x16\x29\x65\xfc\x65\xaa\x0f\x46\xdf\xef\xff\x92\xd3\x04\xe3\x7f\xde\xd2\x14\x5e\xa6\x7a\x74\x7b\x12\xc7\xb3\xaf\x7b\x90\xf2\xfe\x07\x4b\xb0\x1f\xf7\x3f\x4c\xdc\xbf\x9e\xf8\x9f\x46\xdf\xef\xff\x73\xda\xfa\x7c\xf4\xe4\x00\x13\x24\x0a\xba\xff\xf8\x61\x52\xf2\x80\xe9\xc7\x27\xa3\xef\x2b\xcf\x46\xdb\x38\xc2\x66\xa5\xb7\x94\x66\x93\x8b\xc6\xd2\x97\x8d\x7a\x45\x53\xc9\xb8\x6d\x8a\xa8\x4d\x58\x7b\x43\xb3\xf7\x30\x07\x09\x3c\xea\x36\x8f\x1f\x6f\x7c\x42\xf6\x63\x23\x4f\x61\x9a\xf2\xc8\x6b\x12\xb2\x78\xea\xa4\x8a\xe2\x3b\x7f\xd4\x16\xb7\xac\xd5\xe3\x0d\x7d\x16\x5d\x61\x9b\x72\x72\xfd\x16\x43\x64\xd9\xeb\x70\x6b\x73\x97\x7b\xdb\xa8\xbb\x2d\x8f\x30\xaa\x7a\x07\x23\xb6\x91\x0d\xac\x31\xbf\x4d\x9d\xeb\x81\xe4\xfd\x14\x11\xde\x92\x40\xd1\x39\x48\xb1\xce\x9d\x7b\xf0\xac\xec\x27\x6b\x53\xde\xb9\x9f\x9c\x35\x6a\xfa\x7d\x4f\x80\x1f\x4f\x9e\x5b\x9c\x41\x06\x8c\xe2\xfd\x52\x24\xb1\x22\x39\x67\xbf\xe4\x40\x4e\x9e\x17\x95\xcc\x18\x8f\x92\x1c\x6f\x1a\xfb\xf1\xc7\x93\xe7\x6a\x4a\xc8\x7f\x3a\xa6\x7b\xd5\xcc\x5b\x6d\xcd\xd0\x77\x6f\x5f\xff\x5f\x34\xda\xe1\x97\xee\xa2\x1f\x5f\xc9\x92\x51\x6b\x6d\xb7\x92\x90\xe9\xd5\x86\xc5\xe3\x8c\x22\x9a\x35\xdb\x4f\x89\xf3\x49\x70\x9b\xea\xb0\x84\x24\x53\x98\xc4\x49\x54\x2e\xdd\x6a\xcc\x80\x36\x97\x0c\xcb\x6c\xb8\xa0\x20\x9f\x97\x8a\x79\xbf\x3b\x65\x97\x44\x82\x73\x88\x30\xea\xca\x68\x04\x7d\x38\x44\xf5\xfd\xba\xb6\xb5\x55\xbd\xa8\xa7\x89\x94\x63\x7a\xfe\xe1\x9d\x3f\xb7\x4f\xe8\x86\x22\xdf\x39\xbd\x0a\x67\xbc\x03\x55\xbb\xb8\x89\x9d\xf1\xdb\xcc\xc1\xc1\xed\xce\x59\xc2\xc6\x7a\x77\x1a\xd1\x3a\x64\x30\xd0\xe5\x7d\x87\x5f\x6e\x3d\xe4\x7c\xc3\xcc\x54\xab\x1d\x80\xce\xa1\x22\x56\x66\x49\x15\x99\x01\x70\xf4\x55\x59\x9f\x04\x70\x87\xf3\x50\x7a\x92\xf2\x6c\xa2\xc5\xa4\x41\xd9\xed\x80\x5c\x37\xd4\x5a\x6c\x39\x6b\x6b\x3b\x1a\x6c\x9d\xb9\x5a\xae\xb6\xc1\x40\x95\xf7\x8c\x15\x72\xe3\xd0\x85\x35\xab\xc8\x6b\x73\x76\x0e\xa4\xe2\xd8\xc6\xbf\x36\xa7\x74\x65\x58\x57\xd5\x0a\xa8\x05\x86\x4e\x74\x9a\xf9\x3b\xe6\x68\xb7\xf9\x0c\xe4\x25\xeb\x21\x7c\xbc\x5f\x7f\xbf\x17\x6b\x79\xf5\xfe\xf4\x18\xd3\x9c\xcd\x07\xde\xf7\x8a\xd8\x5f\x95\x2a\x86\xb3\x95\x2e\x96\x10\xd9\x30\xca\xa3\xbb\x27\x68\x23\x8e\xef\x3c\x08\xda\xfa\x23\xd1\xe1\x50\x6f\x4d\x3c\x44\xd0\xb6\x65\x6a\x0e\xe9\x63\xa8\xbc\x61\xf9\xd8\x5a\x6e\xaf\xd2\x42\x1a\x72\x5d\xfb\x2d\x9f\x15\x6a\x55\xd9\xbb\x53\xc1\xc9\x6f\x7f\x3c\xfa\x9f\x00\x00\x00\xff\xff\x0e\x0a\xc6\x9d\x2b\x56\x01\x00") +var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x69\x73\x1b\x39\xb2\xe0\xe7\xe7\x5f\x81\xd0\xbe\x08\x4b\x1e\x92\xb2\x7b\xde\xf6\xbe\xd1\xf4\x11\x7a\xf2\xb1\x8a\xf6\xa1\xb0\xd4\xfd\x62\xc7\xe3\x5d\x83\x55\x49\x12\xad\x2a\xa0\x1a\x40\x49\x62\x1f\xff\x7d\x03\x09\xa0\x0e\x92\x75\x91\x3a\xec\x1e\xe0\x43\xb7\xc5\xaa\xc2\x91\xc8\x4c\xe4\x0d\x9a\xb1\x9f\x40\x2a\x26\xf8\x11\xa1\x19\x83\x1b\x0d\xdc\xfc\xa5\x26\x97\xff\xa9\x26\x4c\x1c\x5e\x3d\x7b\x74\xc9\x78\x7c\x44\x4e\x72\xa5\x45\xfa\x1e\x94\xc8\x65\x04\xcf\x61\xc6\x38\xd3\x4c\xf0\x47\x29\x68\x1a\x53\x4d\x8f\x1e\x11\x42\x39\x17\x9a\x9a\x9f\x95\xf9\x93\x90\x48\x70\x2d\x45\x92\x80\x1c\xcf\x81\x4f\x2e\xf3\x29\x4c\x73\x96\xc4\x20\xb1\x73\x3f\xf4\xd5\xd3\xc9\xb3\xff\x39\x79\xfa\x88\x10\x4e\x53\x38\x22\x11\xd5\x34\x11\x73\x3b\x96\x9a\x88\x0c\x24\xd5\x42\xaa\x49\x24\x24\x08\xf3\xbf\xf4\x91\xca\x20\x32\x83\xcc\xa5\xc8\xb3\x23\xb2\xf1\x1d\xdb\x9f\x9f\x0b\xd5\x30\x17\x92\xf9\xbf\x09\x19\x13\x91\xa4\xf8\x6f\xb7\x46\x3b\xec\x39\x0e\x8b\xbf\x27\x4c\xe9\x1f\xd6\x9f\xbd\x66\x4a\xe3\xf3\x2c\xc9\x25\x4d\x56\x27\x8c\x8f\xd4\x42\x48\xfd\xb6\x1c\xde\x0c\x17\x51\xad\x64\x64\x1f\x33\x3e\xcf\x13\x2a\x57\xbe\x7d\x44\x88\x8a\x44\x06\x47\x04\x3f\xcd\x68\x04\xf1\x23\x42\x1c\xa4\x5c\x57\x63\x42\xe3\x18\xa1\x4f\x93\x33\xc9\xb8\x06\x79\x22\x92\x3c\xe5\xc5\x50\xe6\x9d\x18\x54\x24\x59\xa6\x11\xc2\x17\x0b\x20\x99\x04\xad\x97\x08\x12\x22\x66\x44\x2f\xc0\x8f\x5d\x7c\x45\xc8\xcf\x4a\xf0\x33\xaa\x17\x47\x64\x62\x20\x3c\x89\x99\xca\x12\xba\x34\xb3\xa9\xbc\x65\xb7\xe9\xb9\x7d\x56\xf9\x5d\x2f\xcd\xd4\x95\x96\x8c\xcf\xdb\xa6\x62\xde\xeb\x3f\x07\x0b\x9a\x8b\x65\xb6\x3e\x85\x95\x1f\xfb\x8e\x9f\xe5\xd3\x84\xa9\x05\xc8\xfe\x93\x28\x3e\x59\x9b\xc3\xd9\x86\x27\x0d\x13\xa9\x74\xea\xe9\x66\x12\x49\x40\x92\xb9\x60\x29\x28\x4d\xd3\x6c\x6d\x80\xe3\xf9\xfa\x1a\x63\xaa\xfd\x8f\xf6\xa5\xab\x67\x34\xc9\x16\xf4\x99\xfb\x51\x45\x0b\x48\x69\x89\x0f\x22\x03\x7e\x7c\x76\xfa\xd3\x5f\xcf\x57\x1e\x90\x3a\x74\x6a\x78\x4e\x98\x22\x94\x48\xc8\x84\x62\x5a\xc8\xa5\x81\xd6\xc9\xf9\x4f\x6a\x44\x4e\xde\x3f\x57\x23\x42\x79\x5c\x10\x1e\xc9\x68\x74\x49\xe7\xa0\x26\x6b\x73\x15\xd3\x9f\x21\xd2\x95\x9f\x25\xfc\x92\x33\x09\x71\x75\x16\x06\x3c\x1e\x26\x2b\x3f\x1b\xf8\x57\x7e\xca\xa4\x19\x53\x57\x08\xd9\xb6\x0a\x33\xab\xfd\xbe\xb2\xc2\xdf\xc7\x2b\x4f\x09\x31\x80\xb1\x5f\x92\xd8\x70\x36\x50\x88\x14\x8e\xea\x20\x76\xd0\xb4\xc8\xc2\x94\x81\x88\x04\x05\xdc\xf2\x3a\xf3\x33\xe5\x6e\x95\x93\xb5\xce\xcf\x41\x9a\x8e\x0c\x43\xc8\x93\xd8\xb0\xc4\x2b\x90\x9a\x48\x88\xc4\x9c\xb3\x5f\x8b\xde\x15\xd1\x02\x87\x4d\xa8\x06\xa5\x09\xd2\x35\xa7\x09\xb9\xa2\x49\x0e\x08\xec\xb5\xbe\x53\xba\x24\x12\xcc\xb8\x24\xe7\x95\x1e\xf1\x13\xb5\x3e\x97\x37\x42\x02\x61\x7c\x26\x8e\xc8\x42\xeb\x4c\x1d\x1d\x1e\xce\x99\xf6\xcc\x3e\x12\x69\x9a\x73\xa6\x97\x87\xc8\xb7\xd9\x34\x37\x0c\xf5\x30\x86\x2b\x48\x0e\x15\x9b\x8f\xa9\x8c\x16\x4c\x43\xa4\x73\x09\x87\x34\x63\x63\x5c\x0c\x47\x86\x3f\x49\xe3\xff\x21\xa1\xca\x01\x57\xd1\x60\x85\x1a\x88\xe7\xbb\x03\x37\xcb\xf0\x63\x8b\x98\xb6\x43\xbb\xd8\x72\x4f\xcc\x4f\x06\x8c\xef\x5f\x9c\x5f\x10\x3f\x23\xbb\x6f\x76\x8b\xca\x57\x37\x40\xc8\xef\x96\x81\x2c\xe3\x33\x90\xf6\xcb\x99\x14\x29\xf6\x0a\x3c\xce\x04\xe3\xda\x72\x8d\x84\x01\xd7\x44\xe5\xd3\x94\x69\x85\x68\x0d\x4a\x9b\x8d\x5c\xef\xf8\x04\x0f\x47\x32\x05\x92\x67\x86\x78\xe3\xf5\x57\x4e\x39\x39\xa1\x29\x24\x27\x54\xc1\xbd\xef\x9d\xd9\x23\x35\x36\x1b\xd2\x7b\xf7\xaa\x47\xff\xfa\x07\x6b\x54\x4f\x88\x3f\xb3\x7b\xbd\xdc\xc4\x26\x88\xe5\x09\x9b\xce\x04\xd2\xc2\x1d\x4c\xa3\x71\x2c\x41\x6d\x78\xd0\x8d\x75\xa6\x1d\xdb\xcf\x2d\xf2\x2d\x84\x32\x48\x40\x35\x79\xf7\xfa\x0d\x89\x28\x27\xb9\x02\x43\xc2\x91\xe0\xdc\x60\x99\x16\x84\x9a\x33\x77\x0c\x37\x4c\x21\x56\x4a\x98\x33\xa5\xe5\x72\x7d\x6f\x4d\x7b\x29\x64\x4a\xf5\x11\xf9\xc6\xbf\x36\xc6\x21\x84\x24\x2c\xfb\xee\xe8\x9b\x4c\x48\xfd\xdd\xc6\x0f\xdf\xf1\x64\x69\x06\x8f\xc9\xf5\x02\x38\x39\x2f\x20\x43\xbe\xad\xfc\xf1\x4a\x66\xd1\xe6\x81\x4f\xe7\x5c\x48\xff\xb5\x41\xeb\xd3\x94\xce\x81\xcc\x18\x24\x48\x68\x0a\x36\x70\xb5\x16\xb4\x20\x56\xf0\x9b\xb1\xf9\x1b\x9a\x6d\x0b\xeb\x13\xdf\x81\x99\x81\x99\x54\x55\x6c\x29\x1f\x6a\x81\x14\x65\x16\x6f\xfe\x49\xa3\x4b\x42\xdd\xe0\x29\xcd\xc6\x0a\xa9\xb9\x03\xf0\xfd\xe0\x77\xe2\x3b\x35\x3b\x52\xfe\x7c\xea\xb8\xf4\x60\x08\x55\x81\x30\xf8\xdb\x52\x28\xeb\x84\xef\x9b\x4d\x67\x6a\x8f\x31\xe6\x32\x8b\xce\x44\x6c\x97\xbd\xed\x2e\xbe\xaa\x76\x42\xe0\x26\x13\x0a\x14\x89\xd9\x6c\x06\xd2\x70\x4e\x71\x05\x52\xb2\x18\x14\x99\x09\x89\x5b\x9b\x89\x18\xd9\x44\xb1\xd5\x35\x79\xe4\x4c\x6c\x60\x9b\x64\x10\x0d\xa0\xd0\x62\x31\xbc\x0b\xb7\x37\x32\x25\xd2\xc1\x63\x4c\xa3\x33\x54\x8f\x96\x9b\x9f\xae\x80\xee\xd8\xbd\xec\x11\xdd\x89\xa2\x8e\xc3\x3d\x56\x06\x24\x8f\x55\xd1\xe7\xe6\xf5\x77\x4e\xb9\xcf\xb4\x4d\xe3\x22\x86\xe3\x8e\xe9\xaf\x2d\xe1\x39\xfe\x31\x05\x85\x9f\x17\x53\x45\xc1\x26\xce\x13\xe4\x7d\x79\x52\xdf\xe5\xa6\x75\xf4\x5c\x4b\xdf\xf5\xd8\xf7\x60\x06\x52\x42\xfc\x3c\x37\xa8\x7e\x5e\xcc\xca\x71\x3e\xfb\xf3\x8b\x1b\x88\xf2\x26\x72\x6c\x5c\x7a\x03\xe2\x57\x9b\x51\x38\x1c\x24\x40\x92\x6b\x96\x24\x6e\x46\x86\x65\xf9\x07\x06\x24\x28\x01\x1a\x08\x2a\x7b\xb0\x28\xaa\x99\x9a\x2d\x3b\x07\x30\x10\x2d\x60\x0e\x37\x46\xb8\x41\x6d\x11\x09\x89\xcd\x18\xc4\x64\xba\x74\x72\x8c\x61\xea\x23\x32\xcd\x35\x61\x1a\x85\x9c\x68\x21\x84\x5a\x3d\x44\xd7\x1b\xb5\x5b\x8b\xf3\xba\x62\x02\x65\x54\x22\x38\x18\x6e\x98\x1a\xc9\xc4\xd1\x6b\x65\xf8\x09\xae\xbc\xfc\x8c\xad\x0a\x16\xeb\x2d\x35\x27\x5e\xb1\x5d\x9e\x22\xcc\x30\xd7\x4c\x2f\xf0\x8f\xb9\x51\x97\x8c\x7c\xac\xf2\xd4\x0c\x7a\x0d\x6c\xbe\xd0\x6a\x44\xd8\x64\x83\xd0\xb4\xda\x0c\x02\x02\x8d\x16\x95\x69\xa5\x00\x5a\x11\x9a\x24\x7e\x09\x55\xac\xb5\x12\x48\x6a\x64\x45\xb2\xef\x85\xc9\xce\x51\x9c\x20\x38\x2a\x24\x98\x55\xc4\xdb\xb8\x5d\x23\x02\x3a\x9a\x1c\x8c\x3a\xbb\x8f\x44\x9a\xe5\x1a\x8c\x04\x9c\xa7\x66\x6b\x99\x36\x3a\x98\x15\x7c\xa5\xc8\xe7\x16\x52\x90\xb8\x89\x7b\xb5\xc5\x9e\xe8\x86\xff\xd1\x38\xde\xc4\xf3\x57\xdb\x9e\x05\xee\x9e\xd7\x4c\xcc\x70\xcc\x02\x09\xe1\x97\x52\x1d\x2d\x9c\xb2\x14\x09\x29\x41\x65\x82\x9b\x9e\xed\x93\x17\xe5\xda\xfe\x6e\xde\xe9\x1c\xcf\x74\xba\xaf\x0e\xca\xcd\x5e\xb0\xf9\xc2\xef\x35\x95\x80\xbf\xd5\x71\xa4\x6b\xcb\x2d\x2b\xa1\x52\xd2\x2e\x3a\x62\x1a\xd2\x0e\x46\x42\xb6\xa0\x7e\x42\x8e\x39\x81\x34\xd3\xcb\x0a\x62\x57\x50\x4c\x83\x4c\x0b\x40\x22\x16\x22\xdb\x53\x16\x08\x2c\xcd\x12\x16\x31\xed\xd0\x9c\x3c\xed\x31\xde\xbe\xa1\x04\xc2\xb4\x39\x34\x08\x17\x63\x91\x1d\x4c\xc8\x31\xe1\x79\xc1\x78\xda\xa6\xc0\x45\x31\x03\xd7\x91\x99\x96\x12\x65\x5f\xdd\xfc\xa8\x1f\xfb\xb6\xad\x59\xc8\x5f\x6f\x63\x37\x7f\xe0\x3d\x88\xd0\xbc\x6e\xa1\xd6\xf9\x6a\xdf\x83\xc4\xbf\xed\xe7\xd0\xe7\xed\xd5\xd3\xde\x52\x8e\x82\x04\x22\x6d\x4e\x43\x90\xe9\x88\x50\xa5\x44\xc4\x8c\x56\x58\xe2\x7e\x9d\xa0\xec\x4a\xba\x61\x4f\x86\xc2\x9f\x0c\x5e\x3f\x41\xc3\x43\x9d\xbe\xfb\x7e\xb7\x06\x8d\x84\x19\x1d\x67\xb6\x02\x95\x1a\xdf\x9d\x2e\xf1\xe9\x63\x45\x12\x3a\x85\x64\x83\xd2\xde\xd4\xfa\x13\x7f\xd9\x7a\xb2\x81\x86\x05\xf5\x62\x08\x65\x5b\xc5\x86\xca\xba\x9d\x89\xa3\xc0\x13\x73\x54\x19\xd5\x9e\x32\xae\x9c\x7d\x67\x44\x28\xb9\x84\xa5\xb5\xc3\x51\x5e\x98\xe2\x06\x4d\x01\x3b\x96\x60\x0f\x74\x83\x77\x97\xb0\xc4\x0e\x9b\x6c\x48\x2d\x5d\x0d\xc5\x3b\xdb\x86\x70\x80\xb2\x8d\xcd\x44\x07\x7e\xb1\x05\x80\x86\x93\x86\x6d\x97\xd0\x2a\x3e\x6f\x6a\x6b\x56\x6a\x44\x77\xdc\x0f\xdc\x24\x3c\x81\x3d\x3e\xd0\x2c\x4b\x18\x6c\x36\x35\xb5\xb7\x56\xad\xaf\xad\x79\xe8\xed\xb4\xae\x81\x04\x62\xda\xfb\xc2\x5c\x67\xf1\xfd\xb1\xb2\xf8\x6a\xf8\xce\x82\x65\xd6\xd0\xa2\x00\xd9\xc8\x70\xa4\xb5\xed\x27\x9a\xb0\xd2\x96\xad\x50\xd8\x38\xe5\x23\xf2\x56\x68\xf3\xbf\x17\x37\x4c\x19\x19\xf3\xb9\x00\xf5\x56\x68\xfc\x73\x42\x5e\x69\x4b\x7a\xaf\x7b\xf2\xe5\xb2\x6d\xbd\x07\x76\x7d\xf7\xbd\x03\xc7\xdc\x32\x51\x03\xe1\xaa\xd1\x55\x4d\xc8\xa9\x15\x07\x0b\x2f\x00\x53\xe4\x94\x1b\xa5\xc0\x42\x6e\xf0\x50\x68\x77\xc7\xbe\xdd\x90\x69\xae\xd0\x6a\xca\x05\x1f\xa3\x18\xb5\x71\x4c\xbb\x41\x66\xdc\xea\x16\xdd\xe2\xf0\xcd\x43\xbf\x42\x1b\xdd\x6b\x3d\xaa\x7c\x3c\x78\xdc\xca\x60\x0b\x7a\x85\xa2\x3d\xe3\xf3\xa4\x10\xe2\x47\xe4\x7a\xc1\xa2\x85\xd5\x1e\xa7\x60\x9d\x03\x99\x04\x23\x31\x50\x65\x98\xbf\xf9\x65\x0e\x72\x38\xea\x5f\x18\xd5\xc0\x8e\x6f\x5d\x1b\x09\x8d\x20\x26\x31\xaa\x2c\xd6\xca\x4e\x35\xcc\x59\x44\x52\x90\x73\x20\x99\x39\xfa\xb7\x43\xf8\x61\x27\xb1\x6d\x83\xcf\xe3\xea\x80\x5b\x50\x18\x21\x37\xe3\xcb\x7c\x0a\x92\x83\x06\x35\x36\xf2\xc9\xd8\xcd\x5e\x8b\x94\x45\xbd\x3b\xbb\x95\x6e\x50\xce\x7a\x69\xf4\xb6\x7b\x12\xb1\x50\x47\x0c\x22\x56\x10\xb1\x82\x88\x15\x44\xac\x20\x62\xf5\x6e\x41\xc4\xda\x79\xf8\x20\x62\x05\x11\xeb\xde\x45\xac\x5a\x17\x29\xcd\x86\xf6\x60\xed\x72\x5b\x18\x02\xff\xdb\x1a\x74\x57\x2d\x7f\x28\xf0\xf9\x10\x96\xba\x09\xd0\xc8\x31\xe7\xee\x70\xba\x40\xb3\x21\xb3\xfe\x7a\x49\xf9\x1c\xc8\xb3\xf1\xb3\xa7\x4f\x87\x18\x08\x1d\x3a\xf7\xfa\x62\xe6\x82\x13\x18\xd7\x7f\xfd\xaa\xe3\x8b\x1d\x76\xa5\xc9\x5f\x72\x3f\x8e\x3a\xc7\x79\x0a\xdf\x4c\x4d\x44\x6e\xf0\xa5\xe1\x31\xc6\x85\x26\x29\x68\x42\xbb\x65\xb2\xaa\xd9\x9d\xa5\x30\x2a\x9c\xde\xc8\x76\x5c\x84\x90\x77\x0a\xc6\x44\x70\xe7\x7a\x31\x9b\xdf\xbd\xb9\x5b\xad\x20\x02\x6a\x23\x57\xa6\x60\x56\xd1\xed\x0a\xd4\x44\x89\xd4\xcc\x9a\x71\xed\x99\x98\x59\x02\xf8\x8d\x21\xfb\x30\x99\x4f\x48\x9c\x63\xb7\x94\xbb\x90\xa7\x03\xbb\x5a\xb5\x54\x1a\xd2\x6e\x5f\xa0\x39\x0c\x25\xfe\xcf\x80\x45\xcb\xa5\xe9\x0c\xae\x80\xeb\x9c\x26\xc9\x92\xc0\x15\x8b\x74\x01\x3f\x8c\xd0\x62\x5a\xf5\x82\xd4\x00\x31\xba\xbf\xe8\x3c\x5e\xa3\xd0\xae\x43\x6a\x88\xe4\xbb\xd6\x77\x1f\x9e\x53\xa3\x80\xf7\x6e\x25\x93\x46\x9d\x50\x9b\x7e\xad\xdb\x16\xff\x89\xc8\xfd\xee\x7d\xb7\x97\x8d\x0c\x3e\x7f\x06\x9c\x39\xdb\x89\x56\xce\xe1\x25\xa4\x73\xbe\xad\xaf\x74\x83\xcb\xcb\xae\xbd\x46\x35\x62\xd6\x73\x40\xbd\x00\xeb\xa4\x3c\x7e\xfb\xbc\x1f\xc4\x88\x0b\x0e\xb8\x10\x99\x48\xc4\x7c\x59\xdd\x5e\x1b\x22\xcd\xd2\xcc\x3b\x71\x29\x51\xf9\xd4\x89\xe0\x06\xe7\xdf\xae\xe0\x43\x70\x0d\x05\xd7\x50\xb0\x5b\x60\x0b\x76\x8b\x60\xb7\x08\x76\x8b\x7e\x2d\xd8\x2d\x76\x1e\x3e\xd8\x2d\x82\xdd\x22\xb8\x86\xd6\x5b\x10\xb1\xba\x5b\x10\xb1\x5a\x5b\x10\xb1\x8a\x16\x44\xac\x20\x62\x05\x11\x2b\x88\x58\x41\xc4\xba\xaf\x6e\x76\x75\x0d\xed\x34\x85\xed\x06\xcf\x44\xbc\x43\xf2\x56\x26\xe2\x96\xdc\x2d\x6b\xd3\x8f\xc4\x38\x11\x11\xd5\x2e\xa3\xda\x7c\xe2\xbc\x50\x8a\xa6\xd6\x4d\x31\x22\xbf\x0a\x0e\x36\x9b\xc5\x90\x07\x3a\x0b\x84\x5e\x80\x34\xaf\xef\xab\x83\xd6\x14\x82\x90\xfb\x15\x72\xbf\x42\xee\x57\x63\xfb\x6c\x72\xbf\x16\x54\x59\xbc\xb5\x47\x63\x73\x2a\x58\x85\x27\x5d\x80\x4c\xff\xa4\x99\x60\x06\xdd\x1d\x3a\x62\x3d\x90\x12\xa5\x2c\x64\x62\xe7\xf0\x87\xf8\xac\x0e\x0f\xa7\x56\xe3\xa2\x68\x1c\x43\x4c\x32\x90\x63\x8b\xa2\x82\xcc\x18\x8f\x37\xac\xd5\xc3\xa7\x9b\x3d\xdc\x61\x2a\x56\x7d\x1d\xbd\xbe\xb9\x9b\x7c\xac\xfa\x44\xb6\x70\x2a\x56\x3d\xa3\xb5\x43\xf0\xb3\xc8\xce\x1a\xaa\xa1\x8f\x89\x76\x0e\xc5\x1f\x7a\xea\xe8\xc3\xd5\x6c\x54\x8e\xbd\xfb\x71\x4b\xf3\xd3\x20\x55\xe8\xd8\xe9\xe3\xbf\xe4\x20\x97\x58\x37\xa0\x54\x3b\x8b\xb2\x33\x2e\x22\x86\x29\x12\x51\x65\x8f\xd5\x21\xa2\xf2\xe9\xcc\x66\x4d\xf2\x3c\x49\x46\xb6\x9f\x55\x62\xf5\x6c\x0e\xf1\x80\x0b\xf3\x7c\xb0\x45\x6c\xa0\x89\x66\x3b\x1b\xc8\xf6\x5e\x58\xb2\xba\x4f\xab\x5d\x59\xdb\x98\x37\x1d\xda\x6d\xd9\x68\x3b\xdc\xe0\x4d\x1f\xec\x1f\xb7\x6d\x5b\x05\x66\x2b\xf5\x65\x67\x7d\xbd\x05\x26\x3b\xd8\x15\xf1\xe5\xc1\x93\xb9\x1d\xdb\x22\xd9\xde\xbe\x48\xb6\xb6\x31\x92\xad\xec\x8c\x64\x5b\x5b\x23\xd9\xc1\xde\x48\xb6\xb3\x39\x92\x55\x6c\x33\x3b\xe4\x04\xdf\xbb\x31\x3f\x92\xdd\x94\xf3\xed\xcd\x90\xe4\x16\x08\xab\x3a\x7e\xa5\x88\xd7\xdd\xd9\x25\x49\x5f\xdb\x24\x92\x55\xcd\x3c\x79\xdf\xfb\xb2\x9d\x69\x92\xdc\xd2\xae\x38\xa3\x1d\x43\x5b\xd8\x7d\x19\x2b\xc9\xc3\x1b\x2c\x5b\xa7\xe0\x86\xef\x6d\xe1\xdb\x6a\xf4\x1d\xac\x82\x64\x27\xcb\x20\xd9\xde\x3a\x48\x76\x45\xf6\x5b\xb3\x12\xde\x6a\x57\x28\x27\xbd\xc6\x38\xb4\x1d\xa4\xad\xc1\x14\x58\x19\xd6\x4a\x17\x58\xa3\x6c\x46\x7e\x33\x42\x04\x22\xe6\x1f\x24\xa3\x4c\x2a\xa3\xdd\x38\xbb\x76\xf5\x99\x33\xdf\x55\xba\x19\x3c\x01\x2c\xd2\x66\xce\xf8\x2b\x9a\x18\x21\xc7\x06\xfd\x3a\x1b\x84\x99\xcb\xaa\x08\x39\x22\xd7\x0b\xa1\xac\x44\x52\xd4\x99\xdb\xbb\x84\xe5\xde\xa8\x97\x79\xa0\xde\xaa\x94\xbd\x77\xca\xf7\xac\xe8\xb4\x46\x97\x85\x9c\x25\x78\xb2\x24\x7b\xf8\x6c\xef\xb6\x65\xd4\x2d\xe4\xa3\x6a\x31\xdf\x6d\xc5\x8f\xad\xc8\x69\x57\x03\x37\xa9\x61\xdf\x0f\xb0\xdc\x36\x10\x61\x10\xce\xbf\xa9\x8d\xe8\x05\x6a\x44\x33\xa3\xbb\x17\x72\x13\x5a\x54\xad\xc8\xe4\x6c\x54\xd6\x5c\xc5\x92\x64\xc0\x68\x53\x20\x9a\x5e\x02\x7a\x78\xb0\xb6\xa3\x62\x31\x1a\xdc\x04\xb7\xa8\x83\x23\x19\x94\xf1\x45\x08\x13\x21\x2e\xf3\xcc\xa3\x9e\x2f\x1c\x3a\x60\x48\xc6\x23\x91\xfa\x98\x7a\x1b\xd7\x6a\xa8\xc2\xd1\xcb\xd8\x96\x3b\xb5\xbf\xe3\xc0\x78\x04\x38\xd3\xc4\xa7\x9a\x62\xfe\x89\x50\x45\x3e\xa1\x50\xc9\xc9\x3e\x7e\x78\xf0\x69\x48\x48\x41\x01\x40\x6b\x7d\x15\x39\x72\x96\xa2\xa0\x65\xc5\xfe\x57\xc0\xb6\x0d\x62\x03\x86\xf6\x95\xe2\xaa\xc0\xb0\xb5\xf0\xc8\x3e\xe5\x9a\x1d\x94\x05\xf1\x08\xe2\x01\x4a\xc9\xb1\xe0\x8f\xb5\x9d\x9f\xe7\x6b\xbe\x83\x21\x51\x07\x05\xdc\x4b\x8f\x9f\xf5\x16\xd8\x2d\x8f\x61\x46\xf3\x44\xbb\xc2\xb3\x86\xf5\xe1\x49\x3f\x60\x84\x0b\xef\x2f\x71\x02\xff\x4c\xc8\x29\x8b\x63\xe0\x98\xe2\xe0\xa7\x3f\x15\x3e\x21\xa8\x44\x77\xc3\xd9\x6a\x7b\x3c\x64\xd8\xe3\x44\x89\xd1\x6a\x8f\x51\x51\x98\xd6\x50\x11\x96\x4f\xac\x0d\x40\x98\x32\x40\x6d\xa8\x94\xd8\xbc\x42\x56\xc8\x83\x49\xb6\xa0\x15\x03\xb4\x63\xb6\x8a\x00\xa7\x53\xb4\x88\xd7\x49\xfa\x94\x57\xac\x2e\x64\x06\x54\xe7\x12\xc8\x9c\xea\x1e\x36\x7e\xdf\xee\x25\xf6\x68\x77\xa6\xbb\x75\xec\x17\x53\x0f\xc0\x78\x57\x07\x0d\xbc\xb7\x17\xef\xe5\x42\x07\xf6\xfb\xc5\xb2\xdf\x35\xa4\xbf\x0d\x0e\xbc\xd6\x69\x60\xc2\xae\x7d\x41\x4c\x98\xfb\x1b\x3a\x1e\xd8\x0f\x62\x4d\x83\x36\x8e\xd7\x4f\x49\x95\x56\x43\x4c\x75\xdb\xce\x62\xe8\x13\x01\x11\x87\xb0\x87\xd8\xbb\x83\x73\xee\x6e\x3e\xf0\xb5\xb9\xdd\xb0\x96\x61\xad\x46\x1d\x0c\x18\xd3\xab\x6e\x82\x83\x42\x27\x03\x14\x11\x26\x95\x61\xb0\xd7\x21\x4b\xc1\x64\xc0\xd2\x80\xca\xe3\xd5\xf4\xc0\xb2\x6f\xf4\x6c\xa4\x40\xb9\x22\x7b\x3e\xc8\xe5\xb1\x2a\xdf\xd8\x1b\x44\xf0\xbe\xf8\x67\x31\xf6\xfe\x6f\x7f\x1c\xd4\x0a\x7e\x96\x43\x07\x4f\x52\xf0\x24\x55\x5b\xf0\x24\xad\x4f\x22\x78\x92\x9a\x5a\xf0\x24\x6d\x35\x7e\xf0\x24\xd5\x5b\xf0\x24\x05\x4f\x52\xf0\x24\x05\x4f\x52\xf0\x24\x05\x4f\x52\xdf\x8f\x6e\xc3\x93\x54\xaa\x41\xf7\xa1\x47\x57\x55\x56\x17\x29\x6f\xaf\x94\xa3\x9a\x45\x65\x5e\xac\x7f\xcb\xfe\xeb\xa1\x94\xea\xaa\x1a\xbc\xab\x4a\x5d\x55\xd0\xd7\x2c\x18\x83\x35\xea\x46\xfd\xb9\xd0\xb0\xd7\xc6\xb8\x25\xd5\xfa\x4f\x6e\x5c\xaa\x84\xf0\xde\x07\x39\x5c\xf8\x64\x1e\x77\x4b\xe5\x14\xca\x4c\x9f\x98\xec\x7b\x63\xef\x81\xd9\x70\x2e\x74\xfd\x21\xd7\x6c\x5c\xbe\x51\x84\x48\xa3\x4d\xda\xd7\xb3\x1b\x02\x74\xaf\xb3\x94\xc6\x4f\x97\x61\x54\xa4\xb4\x94\xd8\x66\xf8\x3f\xc8\xda\x6c\x99\x72\xb7\x78\x62\x72\x9e\xcc\x39\x37\xe2\x91\xe0\x2e\x8f\x65\xc0\x4c\xec\xd1\x62\xed\xcc\x8e\x2a\xad\x32\x85\x6b\x44\x8d\xaa\xdc\xa6\x4a\x0a\x04\xd5\xf6\x4e\x50\x57\x75\x4a\x70\x67\xa5\x37\xbf\xd8\x7e\x06\x4c\xa2\x20\x58\x84\x27\x2b\x56\x34\x84\x56\x5f\x20\x8d\x56\x27\xcb\x14\xee\x23\x4d\x12\x71\x3d\xe4\x7c\x1a\x48\x11\x5b\x97\x47\xec\x8d\xbd\xd7\x83\xeb\x28\xae\xe4\x0b\xf4\x95\xd5\x43\xb1\xc5\xd6\x16\x8a\x2d\x7e\x1e\xc5\x16\x2b\x8e\xd8\x6a\xd5\xc5\x6e\x58\x61\x55\xc6\x3b\xad\xba\x48\xc8\x7f\xbb\x2b\x46\x25\x58\xef\x69\x9e\x68\x96\x95\x79\xd6\xca\xee\x50\x62\x55\xea\x99\xcb\x87\xac\x53\xaf\x99\x0d\x8d\x16\x9d\x43\xad\x50\x39\x8e\x87\x79\xdb\x0a\xb9\xa9\xcd\x19\x44\xfb\xbb\x2d\x75\xe8\x75\x6d\x9b\x78\xc9\x1e\x3a\x9f\xac\x17\xff\x7b\xee\x2e\xab\xae\x3a\xe1\x15\xd9\x37\xa7\x63\xb2\x74\x6e\xeb\x1a\x23\xac\x1d\xab\x3d\x06\xb0\x76\xb0\x2b\xf0\x02\xea\x9c\x5d\x01\x2f\x4f\xdf\x7d\x75\x70\xe0\x65\xe2\x55\xf9\xa1\x47\xef\xbb\x48\x18\x7d\xb8\xf6\x50\xc9\x60\xe5\xbc\xef\x31\xc2\x06\x89\xe0\x9b\xca\x29\xfb\x5d\xb7\x4c\xd0\x63\x10\x4b\xd2\x3e\x41\xb5\xb2\xd1\xa5\x2c\xd0\xd9\xcb\x1d\xe6\x01\x0e\x49\x36\x1b\x66\x15\xdf\x22\xc9\x6c\xdb\x5a\xa1\x77\x9b\x5c\x76\xa7\x89\x65\x5f\x4e\x49\xcf\x07\x76\xff\x7d\x01\xf5\xa8\x3e\x13\x77\x5f\x28\x48\xd5\xd4\x1e\xaa\x20\xd5\x9d\xbb\xf3\xbe\xb8\xba\x54\xf7\xea\xbe\xbb\x1f\xd7\xdd\x17\x56\x97\xea\x41\x5c\x75\x9f\x79\x85\xaa\xbb\x73\xd1\x85\xf2\x4f\x0f\x53\x61\x73\xa8\x1b\x6e\x7b\xaa\x7a\x50\xf7\xdb\x83\xba\xde\x1e\xde\xed\xb6\x95\xac\xb2\xab\xbb\x6d\x30\x99\xec\xea\x66\xdb\x26\x67\x60\x3b\x7c\xbe\xbf\x24\xad\x7b\x4e\x12\xf8\x3c\x92\xb3\x1e\x28\x33\xe0\xa1\xb2\x02\xee\x36\x23\xe0\x01\x92\xb1\xee\x29\x11\xeb\x01\xe3\xff\x87\xca\x1c\x83\x24\x8d\xdd\x18\xe7\x36\xe2\xc0\x96\x09\x57\x5b\x32\xcf\xfb\x4c\xb4\xfa\x13\xf0\xcf\xad\x12\xac\x02\x0b\x7d\x20\x16\x7a\x7b\x09\x55\xf7\x97\x4c\x15\x18\xa9\x6b\x3b\x33\xd2\x2d\x93\xa6\x6e\xcd\xae\x7f\x37\xc9\x52\xf7\x9d\x28\x75\x07\x49\x52\x0f\x91\x20\x75\x07\xc9\x51\xc1\x1b\xd2\xb3\x05\x6f\x48\xdf\x16\xbc\x21\x4d\x2d\x78\x43\x56\x5b\xf0\x86\x04\x6f\x48\xf0\x86\x04\x6f\xc8\xfa\x80\xc1\x1b\x12\xbc\x21\xfd\x5a\xf0\x86\xdc\x8f\x37\x64\x68\xc2\xd1\x76\xb8\xfc\x30\x89\x46\xf7\x9b\x64\x74\xfb\x09\x46\x0f\x98\x5c\xf4\x27\x33\xb8\x0c\x4e\x24\xda\x0e\xcd\x3f\x97\x04\xa2\xcf\x23\x79\xe8\xc1\x13\x87\x76\x4d\x1a\xba\x9d\x84\xa1\x01\xd8\xbe\x25\x9e\x67\x22\x3e\xe6\x9a\xed\x7a\xe9\x55\x15\x01\x9b\x6e\xbe\xa2\x57\x82\xc5\x24\xcb\xb5\xbb\x6c\x27\xdc\x7e\xd5\x89\x03\xf7\x73\xfb\x55\x6d\xf3\xc2\x15\x58\x6d\xed\xb3\xb9\x02\xab\x69\xcf\xc2\x3d\x58\xf5\x16\xee\xc1\x0a\xf7\x60\x85\x7b\xb0\x6c\x0b\xf7\x60\x85\x7b\xb0\x42\xf5\xc2\x50\xbd\x30\x54\x2f\xec\xff\x55\xa8\x5e\xd8\xdc\x42\xf5\xc2\x21\x2d\x54\x2f\xec\x3d\x7a\xa8\x5e\x18\xaa\x17\x0e\x1b\x38\x54\x2f\x24\xa1\x7a\x61\xa8\x5e\xf8\x05\x57\x2f\x0c\xf7\x60\x7d\x11\x77\xb1\x84\x8b\x58\x06\x8c\xfd\x79\x5d\xc4\x12\xee\xc1\x0a\x57\xb0\xac\xb6\x70\x0f\xd6\x17\xc4\x7b\xc3\x3d\x58\x5f\x32\xfb\x0d\xf7\x60\x05\x26\xbc\xb9\x85\x7b\xb0\xc2\x3d\x58\x9d\x2d\xdc\x83\x15\x3c\x49\xc1\x93\x54\x6f\xc1\x93\xd4\xde\x82\x27\xa9\xab\x05\x4f\x52\x6b\x0b\x9e\xa4\xe1\x2d\x78\x92\x82\x27\x29\x78\x92\x82\x27\x29\x78\x92\xc2\x3d\x58\xe1\x1e\xac\x3e\x10\x0c\xf7\x60\x6d\x6e\xe1\x1e\xac\x70\x0f\x56\xb8\x07\xcb\xb6\x70\x0f\x56\xb8\x07\x6b\x73\xf3\xb7\x48\xd5\x32\xa2\xbe\xdc\xcb\xb0\x86\x2f\x23\xdc\x88\x15\x6e\xc4\x6a\x68\xe1\x46\xac\x70\x23\xd6\xa6\x16\x6e\xc4\x0a\x37\x62\xb5\xb4\x50\x03\xb2\x67\x0b\x35\x20\xfb\xb6\x50\x03\xb2\xa9\x85\x1a\x90\xab\x2d\xd4\x80\x0c\x35\x20\x43\x0d\xc8\x50\x03\x72\x7d\xc0\x50\x03\x32\xd4\x80\xec\xd7\x1e\xde\x01\xf7\xaf\x51\x03\x32\xdc\x88\xf5\x59\xde\xe8\x12\xae\x73\xe9\x68\x9f\xcf\x75\x2e\xe1\x46\xac\x7f\xcd\x8b\x5c\xc2\x8d\x58\x9f\x31\xff\x0c\x37\x62\x75\xb7\xcf\x87\x85\x86\x1b\xb1\xfe\x95\x19\x69\xb8\x11\x2b\xdc\x88\x55\xb4\x70\x23\x56\xf0\x86\x34\xb6\xe0\x0d\x21\xc1\x1b\x52\xb4\xe0\x0d\xe9\x35\x6e\xf0\x86\x04\x6f\x48\xf0\x86\xb4\x4f\x3a\x78\x43\x82\x37\xa4\x73\xf0\xe0\x0d\xf9\xd3\x7b\x43\xc2\x8d\x58\xe1\x46\xac\x0d\xed\x4f\x66\x70\x09\x37\x62\x85\x1b\xb1\xfe\x9c\x37\x62\xc1\x8d\x96\x34\xd2\x27\x82\x6b\xe0\x8d\xd9\x46\x7d\xd1\xf9\x45\xad\x37\x73\xba\xce\xd8\x3c\x97\x4e\xef\x9f\xbf\x3f\x3b\x21\x11\xd5\x34\x11\x73\x72\x26\x62\x6b\xd7\xc6\x2f\x8a\x9f\x53\xd0\x34\xa6\x9a\x16\x2e\x11\xa3\x1f\x5f\xb1\x18\x99\x6a\x0c\x37\x84\xa5\x74\x0e\x86\x79\x35\x4e\x22\x57\x40\x28\xb9\x86\x24\x19\x5f\x72\x71\xcd\xc9\x15\x48\x55\x61\xd7\x9f\x44\x96\x7e\x22\x0a\xe4\x95\xbd\x55\x0a\x6e\x32\x83\x68\x4c\xdb\x73\xdf\xcf\xa4\x3a\x5c\x19\x9e\x7f\x62\x9f\x9e\x63\x38\x73\xdb\x05\x4d\xc5\xda\x71\x99\x66\x4e\x4f\x8c\x60\xff\xc4\x10\x75\xae\x7c\x2e\xc1\x8c\x25\x30\x9e\x52\x05\xb1\x1f\x57\x19\x5a\x13\x32\xb6\x73\xcb\x35\x4b\xd8\xaf\xe0\x4e\x13\x6b\xf7\x6e\x42\x9b\x1e\x02\x47\xb7\x21\x64\x4c\x22\x1a\x2d\xe0\x39\x6b\x36\x61\x8c\xfd\x54\x9b\x5f\xea\x63\xd3\xf0\xe3\xf4\xbe\x80\xed\xc4\x7d\xe0\xad\x16\x31\x93\xc8\x9c\x96\x44\x69\x21\x3d\x44\x33\x09\xe3\x88\x26\x51\x9e\x20\x2b\x3a\x3e\x3b\xb5\x23\x75\x5f\xa1\xd6\x41\x62\xe5\xa2\x07\xcc\xd8\x7f\xd2\x3e\xe7\x75\x2c\x40\xc1\x14\xed\x94\xbb\x4c\x3b\x85\x54\xc8\xe5\x05\x95\x73\xd8\x99\xb4\xdf\x54\xfa\x5a\x25\xec\x7f\x7f\xf5\xee\xcd\x8b\x37\xaf\x4f\xdf\x9c\x5e\x38\x7e\xed\x3d\x74\xab\x24\x3f\x29\xbd\x40\x44\x89\x99\x76\x53\x24\x09\x4b\x99\x2e\xbe\xb2\xb4\xd9\xac\x4a\x5b\x7e\x8e\x29\x85\x39\xd7\x2c\x05\xeb\x8e\xa3\x5a\x1b\x51\xc7\xd0\x4d\x0a\xa0\xf1\xce\xb6\x94\x5e\x82\x61\xba\x64\x9e\x53\x49\xb9\x06\x7f\x44\x30\x6d\x3f\x8a\x05\x51\xc2\x29\xf8\x4c\x95\xae\x3b\x05\xda\x26\x52\x9d\x89\x66\x56\x83\x3d\x2c\xe8\x95\xbd\x54\x6b\x26\x0c\x5f\x37\x9b\x9a\x8a\x98\xcd\x58\x64\x2d\x46\x24\xa5\x71\x91\xfc\xe3\x14\x0e\x90\xc5\xb1\x58\x2e\xb8\x8d\x2a\x57\xc1\x0c\xfc\x8a\x49\xc1\x51\x91\xba\xa2\x92\xd1\x69\x02\x85\x53\x52\x81\xb6\xe3\x95\x0b\xe2\x64\xba\xd4\xd0\xcc\xae\xec\x08\x6e\x37\xdc\x6d\x6c\xcd\xfd\x3d\x7a\xd4\xd8\xd1\x45\x99\xa6\x57\x4a\x31\xa6\x03\xe6\xf2\x37\x62\x50\xcc\x71\x45\x09\x71\x1e\x79\xd8\x09\x9d\x49\x66\xd5\x42\x5a\xa0\x8c\xe3\xd2\x54\x91\x34\x37\x47\xb8\x11\x8f\x94\x62\xd3\x04\x46\x46\x08\x62\xcd\xf9\x45\x65\x1f\x53\x30\x60\xc6\x9e\x50\x34\xb9\x02\x83\x70\x06\x91\xad\x0c\x0c\x60\x24\x24\x81\x37\xa3\x51\x2b\xe7\x78\x47\xae\x39\xa8\x23\xe7\xc6\x3f\x9d\x91\xa5\xc8\x65\xed\x5c\x58\x50\x83\xc8\x48\xbe\x8d\x13\x71\x39\x81\xc8\x84\x46\x24\x06\xa3\x51\x30\x6e\x8e\xa8\xb9\x10\xb1\x51\x2c\xa4\xb8\x61\x29\x8e\xe2\x28\xa0\xd8\xb6\xe9\x92\xc4\x22\xb7\x1e\x51\xc4\x13\x73\x16\xb8\x63\x2c\xa3\xd1\xa5\x99\x03\x76\xdc\x96\xcd\x79\xa8\xd3\xec\x10\xdf\x72\xff\x75\x5f\xaa\xc9\xcf\x4a\xf0\xd2\x15\x5e\x2c\x6b\xd2\x6f\x7b\x99\x22\x53\x50\x7a\x0c\xb3\x99\x90\xfa\xef\x66\x83\x73\x8e\x64\xc3\x45\x01\x41\x8f\x42\x18\xf7\x80\xe0\xc6\xb4\x9c\x3a\xdd\x0b\xb9\x81\x85\x54\x90\xaf\x89\x09\x66\x86\xe2\x25\x3f\x22\xff\x77\xff\x9f\x7f\xf9\x7d\x7c\xf0\xfd\xfe\xfe\x87\xa7\xe3\xbf\x7d\xfc\xcb\xfe\x3f\x27\xf8\x8f\x27\x07\xdf\x1f\xfc\xee\xff\xf8\xcb\xc1\xc1\xfe\xfe\x87\x1f\xde\xbc\xba\x38\x7b\xf1\x91\x1d\xfc\xfe\x81\xe7\xe9\xa5\xfd\xeb\xf7\xfd\x0f\xf0\xe2\x63\xcf\x4e\x0e\x0e\xbe\xff\xf7\x86\x09\x51\xbe\x7c\x37\x6b\x25\xe3\x5e\x19\xcd\xe3\x3e\x27\x52\x4d\xd8\x63\x5c\x8f\x85\x1c\xdb\x0f\x8e\x88\x96\xf9\x66\x21\xd7\x48\xc4\x5d\x4e\xe3\xbe\x27\xc2\xdb\x4a\x5f\x2b\xbe\x24\x77\xb1\xa1\x33\x64\x9a\xd9\x14\xbc\x3d\xb3\x72\xdf\xcc\x6c\xbb\x57\x08\x9a\x0f\xb9\xf3\x0d\x3d\xa2\xa4\xef\xbe\x7c\xac\x7c\x40\xc6\x4a\xff\x2b\x89\xc9\x96\xe7\xb7\x8d\xd5\x43\x7a\x1a\x66\x9c\xe9\xdc\xc2\x4c\x32\x21\x99\x5e\x9e\x24\x54\xa9\xb7\x34\x85\x5d\x37\xe4\x74\x56\x2a\x68\x23\x43\xd0\xe6\x04\x72\x47\xb4\x8b\x90\x71\x43\x36\x03\xfc\x74\x86\x1a\x4a\xa5\x1f\x0f\x54\xff\x6d\x41\x98\x9e\xc4\x85\x24\xbf\x82\x14\xee\x8a\x4b\x09\x56\xcb\x69\x1c\xc1\x7d\xd6\xbe\x0f\x2d\x60\x53\x10\xe5\x08\x36\x23\x21\xdd\x18\x5d\x63\xc6\xe6\xbb\x82\xee\x7c\x53\xa7\x24\xa2\xdc\x2c\x14\x2f\x6d\x9d\x91\x4f\x09\xcc\x69\xb4\xfc\x64\x16\xfc\x49\x82\x99\xa2\xd1\x0e\x3f\x59\xb5\xa1\xa6\x18\xb8\x60\x24\xa6\x08\x30\xbc\xc7\x97\xf1\x9f\xad\x2a\xe9\xf5\xf2\xc6\x99\x48\xac\xc9\x90\x89\x78\x62\xf6\x60\xb2\xb2\x5a\x64\xa1\xc5\xc3\x42\x98\xf8\xf0\xe4\xe3\xda\x9b\xce\xce\xa9\x85\x55\x37\xab\xc4\x21\x73\x64\xfb\x6d\x92\x8d\x07\x08\x39\x8e\x53\x86\xc6\x59\xb2\x7f\x76\x7e\x7c\x50\x5b\xb9\x91\x73\xec\x41\x1c\x0b\xf0\xe1\x40\x66\x20\x55\x9a\x59\xf1\x10\xc5\xb4\x4f\x4b\xc2\x98\xf7\xe9\xe7\x62\x00\x8c\x96\xd7\x96\x54\x67\x3f\xd9\xf3\x63\xf2\xc9\xc8\xc8\x09\xe3\x60\xf7\x20\x93\xec\x8a\x25\x30\x37\x33\xa9\x84\x38\x90\x93\x5c\x4a\xe0\x3a\x59\xfa\x5b\x57\x37\xef\x2e\x53\xe6\xbc\xaa\x23\xba\x43\xce\xc6\xc9\x14\xd6\x88\x02\x19\x4c\x2f\x0a\xe2\x09\x39\xc7\x9e\x96\xd6\x29\xe3\xde\xc3\xbd\x47\xa9\xa2\x09\x79\x88\x04\x65\x88\x88\x71\xfb\x15\x8b\xad\x20\x00\x52\xb6\x19\xfa\xb0\x06\x80\x55\x23\x45\x62\x74\xc5\x42\x6b\x35\x07\x38\xda\x64\x10\xd8\x28\x80\xb9\x38\x2e\x07\xc8\x0d\x1b\xd8\x0c\xa3\xee\x4c\x74\x27\x1b\xfa\xf5\xb5\xc9\x0e\xa7\x66\x8d\xb3\x1c\x63\xb7\xbc\x4e\x8e\xcc\xa4\x2a\x72\xad\xc8\x9c\xd5\xd9\x8e\x4a\x2b\x01\x65\x0e\xf3\x95\x9f\xa2\x84\x69\xce\x12\x34\xa1\xb2\x02\x1c\xcd\xf2\x2e\xd2\x21\xad\x9a\x06\x44\x96\xba\x9b\xa4\xf3\x2c\x13\x52\x97\x86\xab\xa8\xa6\xf3\x5b\x63\xd0\x06\x38\x9a\xe9\x66\x12\x32\x2a\x8b\xd3\x4e\x01\x89\x16\x94\x1b\x59\xab\x05\x2e\x6f\x04\x96\x55\xb0\xb5\x4b\xcc\x6c\xe8\x54\xe4\x1a\x31\xde\x71\xa0\x99\xc8\x79\x4c\x0c\x73\x3d\x22\x0b\xad\x33\x75\x74\x78\x58\x9e\xfe\x13\x26\x0e\x63\x11\xa9\xc3\x48\xf0\x08\x32\xad\x0e\x3d\x2f\x38\xcc\x44\x3c\xf6\x7f\x8c\xa9\x27\xe5\xc3\xc7\xdb\x32\xdf\x82\x7d\x1f\x11\xbb\xe1\x0d\x6f\x01\xcf\x5b\x6e\x93\x1d\xb7\x7f\x6c\x5e\x28\x81\xbb\xf1\x25\x2d\x12\x17\x32\xda\x78\x02\xd7\xef\x18\x2e\xdf\x2f\xee\x40\x2e\x74\x8c\x0a\xcb\x7e\xac\xaa\x5d\xb7\x9f\x51\x6d\xd6\xed\x0e\x7b\x76\x7f\xf3\xf0\x85\xe7\xda\x46\xee\x2e\x57\x81\xf2\x96\xd6\x14\xaf\x47\x36\xaa\x99\x7d\x62\x18\x2e\x5f\x12\x43\x1a\xda\xdd\xd5\x6d\xcd\xa2\x6d\x56\x84\x85\x91\xd0\xb0\x82\xc8\x37\x85\xeb\x6f\x04\xb3\x19\x44\xfa\xbb\x8a\xa9\xaa\xa8\x81\x51\xb8\xd6\xbe\xf1\xff\xfa\xae\x99\x51\xf5\xf2\x82\xf5\x0b\x81\xb1\x53\x6a\xb7\xbf\x0f\xb3\xbb\xbf\xc0\x1e\x57\x24\x25\x0b\x3c\x3b\x18\x9a\x12\xd0\x3f\xee\x8c\xb9\xd6\x33\xe2\x24\x50\xc3\xb9\x2a\x2f\x77\x06\x81\x20\xd3\xae\x1c\x38\xce\x0c\x5c\x7a\x24\x81\xbc\x15\xae\x98\x10\x8c\xc8\x19\x5e\x59\x5d\xfe\x82\x67\xff\x5b\x61\xcb\x0a\x75\x04\xbe\xf6\x34\x1a\x77\xc6\x10\x0d\x83\xe7\x0f\x65\x48\x91\x05\x4c\x2d\xa4\xa8\x24\xac\xaa\x2f\xae\x15\xb0\x97\xb0\xec\x84\xaa\x0b\xcd\x70\xe1\x4c\xe8\xeb\x1a\x95\x38\xea\x75\x10\x1b\xad\xf1\x77\x57\x7b\x42\xa4\x53\xc6\xed\x54\xec\xc0\x7e\x9f\x71\x6c\xbf\x1f\x3c\xc6\x3f\xbb\x27\xd1\x13\xda\xfd\xe2\x9a\x86\x81\xfc\xdd\x80\x98\xa5\xc2\xfb\xdd\x05\xd2\x4d\xb1\x49\x95\x80\xa4\x17\xbf\xe4\x34\x99\x90\xe7\xf6\x24\x40\xe0\xd9\x9f\xba\xc8\xcd\x76\xb1\x16\x13\x70\xcd\x92\x38\xa2\x32\xc6\x53\xd3\xb2\x1f\xa2\x84\x45\x1c\xea\xe5\xc4\x8e\xbe\x3d\x03\x2c\x91\xc7\x5e\x26\x4f\x32\x2a\x35\x8b\xf2\x84\xa2\x50\x00\x73\x21\x3b\x02\xf2\x7b\x6e\x66\x89\xcd\xe7\x10\x09\x1e\x77\x78\x2f\x87\xed\xea\xc5\x6a\xe7\xd5\xed\x45\xe1\x19\x24\x73\xf5\x6c\x58\x0a\xab\xe4\xb5\x5f\xd3\xbf\x3b\xc6\x12\x33\xcf\xec\x0a\xde\x32\xb2\x92\xeb\x35\x53\x50\x2d\xbb\xc5\x94\x4f\x77\x38\xa8\x1c\x38\x05\xb5\x4f\xc8\x7f\x2d\xbd\x78\xd0\x15\x06\xc5\xb4\xf7\x85\xa1\xc1\xc8\xcd\xd7\x91\xa2\xdb\xc9\x92\x8d\xcc\x84\x84\x2b\x90\x64\x3f\x16\xf8\x0d\x96\xcf\x3a\x98\x90\x7f\x18\xb5\xb3\xcd\x15\x64\x1b\x87\xb9\x2d\xc0\xe4\x08\xbb\xc8\x42\x91\x80\x3e\x02\xaa\xc8\x53\xb2\x6f\x6b\x72\xb1\x34\x85\x98\x51\x0d\xc9\xf2\xc0\x46\x95\x83\xb3\xe0\xf5\xc1\x9a\x3e\xa5\xea\x2a\x25\xea\xbe\xfe\x8f\x96\x37\x71\xb2\xb7\x89\x54\x3f\x79\xd3\x76\x09\x58\xab\xa6\xac\x60\x4f\xe1\x49\xed\x0c\x94\x68\x8c\x8a\x1b\x95\xbc\xa6\x62\x05\xf6\xbc\xb9\xc0\xad\x9f\x0d\x82\x52\x22\x61\x8e\xf4\x69\x69\x6e\x07\xea\x64\xd1\xe6\x62\x7b\x1d\x42\x48\xbb\x57\x6c\x4c\x8c\xd6\xf9\xf5\x7f\xc4\x54\xd3\x86\x17\x2c\xca\x2c\xb3\x4d\xa4\xd6\x25\xdb\x94\x9d\x37\xed\x75\x0f\x37\x8f\x1b\x7e\xab\x1e\x50\x63\xdc\xf4\x65\x1f\xec\x3a\x45\x33\xb8\x8d\xd7\xf4\x68\x30\x96\x30\x67\x4a\xcb\x65\xc5\xd9\xe1\xdc\xa8\x82\x30\xae\x34\xe5\x9a\x21\xab\x26\xfe\xcd\xb1\xb3\xf3\x1b\xad\x6c\xf3\xfe\xbf\xe3\xc9\xd2\x1a\x91\x31\x15\xc9\xea\x62\x17\xcb\x0c\xc8\xb7\x95\x3f\x5e\xc9\x2c\xda\xfc\xfd\xe9\x8c\x38\x06\x6a\x71\x93\xc6\xb1\x04\xb5\xce\xd9\x36\x7d\xdd\x0a\x3e\x6f\x16\xdb\x16\x82\x67\xde\xac\xe6\xb2\xa1\x94\x62\x73\xa3\xa4\xf8\xea\x9c\xde\x6f\x54\x53\x56\xac\xaa\x89\x1f\x5a\xef\x30\xa4\xc5\x89\xc9\xb4\xd7\x1a\x23\xc1\x55\x9e\xfa\xec\x18\xa3\x62\x67\xc0\x63\xe0\xd1\x12\x0b\x72\x25\x57\xd0\x60\x61\xf8\x51\x35\xa0\x04\x21\xff\x9b\xcd\x17\x66\xa3\xec\xe4\xaa\x92\xb3\xf7\x90\xaf\xcc\x94\x29\x03\xf8\x19\x48\x09\xb1\xcd\x1e\x32\x42\xaf\xef\xa1\xe2\xf1\x74\x15\xc2\x7c\x60\xeb\xea\x64\xb1\x4c\xe3\xe6\xe9\x5e\x14\xb5\x45\xbd\x6b\xc4\xc3\xd4\x72\x20\x03\x8e\xb9\xb0\x11\x05\x99\x50\xcc\x17\xe3\x2b\xce\x85\x5a\x7d\x52\x31\xb3\xd5\x43\x9b\xc7\xaa\xa7\xf9\x61\x30\xf8\xca\xa2\xd1\xba\x90\x73\xbb\x99\x50\xb5\x9d\x7a\x5e\xd8\x50\x01\xf5\x62\x7d\xab\x8b\x48\x1e\xcc\x0d\xac\x2f\xad\x3c\xcb\x24\xe5\x97\x10\x93\x04\x6e\x58\x24\xe6\x92\x66\x0b\x16\x61\xa9\x49\xeb\x56\x36\x1a\xa3\xb6\x61\x5c\xcd\x18\xde\x74\x7a\x65\xf9\x34\x61\x6a\xb1\xd9\x41\xd9\x4a\x1c\x0a\x22\x09\x7a\x23\xe7\xeb\x43\x1b\xe7\xf6\xf3\x52\xf8\xf1\x41\xf7\xae\x5f\x97\xb3\x62\xb1\xdd\x67\xd6\xd2\x28\x32\x84\xed\x9d\xad\xe0\x24\xc1\x0a\x11\x35\x70\x08\xed\x3d\x5a\xa6\x97\x4b\x80\xcc\xe2\x33\x06\xcb\xa9\x14\xad\x98\x8a\xf1\x08\xb0\x74\xa6\x2b\x81\x0a\xe0\xbd\x0d\x5a\x32\xb0\x12\x2c\xa0\x83\xd1\xef\x22\x70\xbd\x59\xe2\x6c\x37\x22\xb4\x18\x10\xda\x21\x5e\xf0\xc2\x4e\xa0\x57\x78\xa8\x17\x0a\xcc\xbf\x0d\x78\xf1\xc9\xd0\xcd\xb6\x95\x52\xcf\x6d\x38\xfa\xd6\xfc\xf0\xc7\x5a\x2f\x2e\x8e\x4c\x91\x85\xb8\x76\x03\xac\x72\x0c\x67\xf2\xf4\x68\x10\x33\x15\x19\x36\xd3\x60\x38\x3a\x11\x5c\xf9\xca\xa8\x94\xdb\x62\xa6\x57\x34\x71\x19\xc2\x6e\xb0\x4c\x24\xe8\x72\x8d\x73\xaf\xaf\xda\xf4\x27\x48\xa7\x10\xc7\x10\xfb\x98\xfb\x25\x69\x38\xf4\x3b\x04\x8e\x2e\x99\xc0\x1f\x8b\x67\x22\x49\xda\xcf\xf4\x56\xc3\x4a\x1f\xb3\x8a\x07\x40\xef\x98\x96\x0e\x31\xf3\xd4\x03\xd4\xd9\xc5\x0d\x75\x94\x3e\x6f\x44\x32\xa3\xb0\x14\x70\x9f\x82\xbe\x06\xe0\x24\x5a\x40\x74\xa9\xca\x38\x3f\x6d\xe8\x70\x65\xa3\x9d\xb1\xb6\x5d\x40\xac\x72\xd0\x42\x30\x35\x1b\xea\xb2\xfc\x81\x30\xa3\x16\x72\xb8\x5e\x8d\x0b\x5b\x3f\xb8\xe8\x15\x65\x09\x9d\x26\x1d\x0a\xf3\xe9\xac\x7c\x73\x54\x9d\x3f\xf3\xd2\x51\x96\x27\x89\xf3\x7f\x63\x44\x8c\x96\x74\x36\x63\x11\x06\x4a\x62\x44\x50\x19\x59\xbc\x71\xe9\x5b\x45\x01\x29\x4d\x75\xbe\xb6\xf5\x2d\x78\xd3\x86\x2f\x46\x0b\x65\x8d\xf6\xd6\x3e\x18\xf2\xbe\xae\xc1\x9a\xd9\x81\x55\xd1\x6b\xae\xb3\x09\x79\x2b\xb4\x8b\xb8\x7b\x03\x4a\xb9\x68\x3f\xf2\x1e\xa8\x12\xbc\x72\x14\xa0\xe6\x21\xd9\x9c\x71\xba\xb9\x4c\x83\x5d\x7f\xd5\xb0\x5e\x28\x9a\x74\x89\xa5\xa3\xd9\x5c\x52\x5d\x70\xf0\x72\x89\xee\xd0\x74\x62\x81\xf5\x58\x4c\xc8\x31\x5f\x22\xda\xb8\x30\xbc\xcd\x36\x55\xc6\xb5\x14\x71\x1e\x81\x2b\x92\x9d\xab\x6a\xc7\xb7\x7a\x0e\xf4\x23\xcb\x13\x3f\x78\x99\xeb\x10\x83\xa6\xcc\xb9\xcc\x05\x07\x42\x55\x66\xd4\x7f\x4f\x06\xd6\x7b\x56\x6e\x10\x9e\x82\xc7\x67\xa7\xe4\x3d\xb4\x63\xe3\x78\xdc\x34\x09\x8c\x1a\x51\x5a\xe6\x11\x1e\xb2\x86\xfa\x79\xec\x8e\x4b\x4b\x00\x36\x6a\xb3\x92\xf7\xe5\x8c\x86\x56\x2a\xce\xa8\x5e\x90\x89\xdd\xd0\x49\x05\x9c\x84\xbc\x34\x07\xee\x0d\x4d\xb3\x04\x46\x8d\x2e\x96\x7f\xc3\x83\xed\xa5\x10\xe7\x16\x25\xec\x4c\x7e\x6b\x7a\xdb\xfc\xe7\xf0\x70\x15\x61\xc5\xd4\x28\x29\xce\x87\x80\x78\x3b\x13\xe2\xb1\xaa\xc3\xab\x09\x34\xbe\xcf\x1f\x30\x20\x75\xc3\x4a\x70\x86\x54\xc2\x11\xd9\x3b\xf6\xbc\x64\x6f\x44\xf6\xce\xa4\x98\x63\x76\x0c\x9f\xbb\x1c\x96\xbd\xe7\x30\x97\x34\x86\x78\xaf\x63\xac\xbf\x60\x66\xd7\x1b\x90\x73\xf8\x01\x96\xdf\x36\x1c\x55\xeb\x5f\xf8\xb3\xf7\x5b\xcc\x0f\xeb\xfa\xc4\x88\x47\x46\x86\xf8\x36\xa5\x59\x9f\x77\xdf\xd0\xac\xcf\x6c\x4e\x4a\x62\xfc\xf0\x31\x05\x4d\xaf\x9e\x4d\x4a\x54\xfe\xf4\xb3\x12\xfc\x68\xaf\x84\xdf\x48\xa4\x0c\x83\xff\x96\x7b\xa4\xb6\x88\xa3\x3d\x5c\x85\xfb\xd5\x03\xe3\x68\xcf\x8c\xbf\x67\x38\x9e\x16\xd3\x7c\x76\xb4\x87\xd1\x71\xa3\x67\x23\x09\xd9\xc8\x48\xc9\xdf\x96\x7d\xef\x7d\x6a\x46\x2c\xb7\x32\xeb\xe8\x45\x5c\x6d\x72\xb5\xfc\xdb\x1f\x2d\xc2\x5c\xcb\x31\xde\x15\xb2\x3b\x26\x09\x55\xfa\x42\x52\xae\x70\xba\x17\x2c\x6d\x02\xec\x98\xa4\x96\xa1\x36\x3e\x97\xc8\x64\x1b\x1f\x5b\xb4\x6d\x7c\xdc\xb8\xa7\xdd\x82\xc8\xfa\x1a\x6e\xc3\x79\xb6\xde\x6b\x99\xf1\x6c\xc4\x7c\x6f\x3a\x2d\xf6\xda\x1c\xcc\xee\x6d\x70\x75\xf9\x0d\x83\x74\x27\x09\xa6\xaf\xe1\x56\xb7\x9d\xc7\x96\xd7\x15\x46\xaf\x6b\x57\xad\x9f\xe4\x3c\x06\x99\x60\x7c\x40\x39\x9e\xf5\x0e\xc7\x13\x67\x4b\xa3\x85\x59\x14\x23\xd7\x51\x98\xe0\x15\x1f\x9c\x8d\x75\xf5\x3d\x1a\x9e\xec\x2e\x44\xb0\xdd\xa0\xcc\x12\x45\x90\xe9\x76\xa1\xa5\x97\x89\xdb\xdb\x29\x8d\xcc\x3d\xd6\xcd\x58\xe5\x70\xea\x36\xf6\xcb\x75\x65\x83\xc9\x16\x79\x4a\xcd\x79\x4f\x63\x8c\x6d\x2d\x9e\x59\x93\x83\x35\x11\xd8\x73\xcc\xba\xcb\xad\x1f\xd3\x6f\x5f\xe7\x0e\x39\x19\x80\x16\xd5\x33\x3a\x8c\x8f\xbd\x60\x96\xd2\x9b\xd7\xc0\xe7\x7a\x71\x44\xfe\xfa\xd5\xff\xfa\xfa\x3f\x1b\x5e\xb4\x47\x09\xc4\xaf\x80\x3b\xa3\xeb\x6d\x40\x6f\xbd\xd7\x55\xaf\xc1\xc4\x67\x57\x4c\xe6\xe5\x3b\x85\x7f\xae\xc4\xca\x6b\x8a\xf1\xcf\x4e\x0c\xca\xb3\x76\x70\xbe\xc4\xfc\x20\xa5\x29\x8f\x60\x64\xa4\xeb\x8d\xc3\xb0\xe2\xa4\x4c\x96\xe4\xd9\x57\x23\x8c\xce\xc6\x49\xad\x1d\x86\x1f\x6e\x3e\x4e\x36\x2c\x86\x29\xf2\xb7\xd1\xca\x4c\x99\x22\x66\xef\xc5\x0c\xd1\xb4\x65\x92\x68\x45\x91\x60\x25\x1d\x6f\x53\x5b\x97\x74\xa0\x58\x49\x17\x26\x74\x99\xfa\xfb\x99\xf9\x53\xc6\x59\x9a\xa7\x47\xe4\x69\xc3\x2b\x96\x23\xdf\x06\x7a\xd8\x9e\x4a\x29\x90\x1a\xb6\x3c\x97\x34\x4d\x31\x89\x92\xc5\xc0\x35\x9b\x31\x0c\x56\x2b\x48\x0c\xcd\x62\xf6\x43\x1f\x60\x59\x00\x1f\x63\x2f\x0d\x1b\xed\x45\x74\x67\x56\x2c\x96\x28\x3b\x39\x27\x78\x54\xe5\xbc\xcb\x0c\x2c\x55\x5a\x2d\x9c\xc0\x4d\x66\x15\xa3\x8a\x3b\x36\x05\xca\x19\x9f\xab\x32\x4e\x1a\xf9\x5f\x9b\xb7\xc9\x7c\x76\xbd\x00\x17\x89\x05\x55\x67\xbb\x2f\x3d\x66\x34\xb3\x32\x3f\x00\x73\x46\xda\xd9\xc7\xba\x6b\xc3\x28\x31\x29\x24\x27\x54\x41\x0f\x37\x46\x25\x88\xda\xdf\x11\x53\xe4\xfb\xdf\x1a\x03\x7a\xf6\xf4\xab\x56\xbc\x2b\xde\x6b\x7c\xa9\x0c\xaf\xfe\x70\x3c\xfe\x07\x1d\xff\xfa\x71\xdf\xfd\xe3\xe9\xf8\x6f\xff\x6f\x74\xf4\xf1\x49\xe5\xcf\x8f\xcd\x51\xd1\x9b\x15\xd1\xb2\xd5\x70\xd8\x9d\xb5\x5e\x19\xf1\xf8\x31\xf2\x51\x98\x17\x32\x87\x11\x79\x49\x13\x05\x23\xf2\x23\xc7\x73\x72\x47\xa0\xb5\x07\x2b\x19\xc9\x66\xcf\x8c\xda\x24\x6f\xbb\x57\x70\x4a\xed\xef\xb8\xe9\xb6\x59\x74\x6e\x81\xd0\xbd\x15\xaf\xc2\x25\x79\x05\x3d\x6d\x36\xe7\x4c\x88\x89\xd3\x9b\x26\x91\x48\x0f\x8b\xe7\x6d\x78\xdb\xac\xe0\x11\x2c\x57\xcb\x97\xa4\x64\xe3\x56\xa5\x59\x25\x37\x85\x89\x81\x34\x92\x42\xa9\xf2\x5a\x10\x92\xb0\x4b\x20\xc7\xa5\x11\xc5\x1c\x0e\x53\x88\x28\x6a\x85\x72\xca\xb4\xa4\xd6\x9f\xe4\x95\x02\x6b\xed\x6b\x99\x4d\xae\x60\x96\x27\x64\x5f\x01\x90\x09\x06\x7e\xaf\x9d\x33\x07\xce\x15\x34\x65\x09\xc3\x44\x4d\x12\x43\x24\xf8\x2c\x61\x4e\x4d\x4d\x33\x21\x35\xe5\xad\x55\x57\x6c\xa9\x80\x39\xdc\x10\x56\x44\x5b\x99\x8f\xf7\x63\xae\x9e\x3d\xfb\xea\xaf\xe7\xf9\x34\x16\x29\x65\xfc\x65\xaa\x0f\x0f\xbe\xdf\xff\x25\xa7\x09\xc6\xff\xbc\xa5\x29\xbc\x4c\xf5\xc1\xed\x49\x1c\xcf\xbe\xee\x41\xca\xfb\x1f\x2c\xc1\x7e\xdc\xff\x30\x76\xff\x7a\xe2\x7f\x3a\xf8\x7e\xff\x9f\x93\xd6\xe7\x07\x4f\x0e\x31\x41\xa2\xa0\xfb\x8f\x1f\xc6\x25\x0f\x98\x7c\x7c\x72\xf0\x7d\xe5\xd9\xc1\x26\x8e\xb0\x9e\xa4\x9a\xd2\x6c\x7c\xd9\x58\x0e\xb4\x51\xaf\x68\xca\x76\xdd\xa4\x88\xda\x84\xb5\x37\x34\x7b\x0f\x33\x90\xc0\xa3\x6e\xf3\xf8\xc9\xda\x27\x64\x3f\x36\xf2\x14\xe6\x38\x1f\x78\x4d\x42\x16\x4f\x9d\x54\x51\x7c\xe7\x8f\xda\xe2\x2a\xbd\xd5\x78\x43\x9f\x45\x57\xd8\xa6\x9c\x5c\xbf\xc1\x10\x59\xf6\x3a\xdc\xda\xdc\xe5\xde\x36\xea\x6e\xcb\x23\x8c\xaa\xde\xc2\x88\x6d\x64\x03\x6b\xcc\x6f\x53\xe7\x7a\x20\x79\x3f\x45\x84\xb7\x24\x50\x74\x0e\x52\xac\x73\xeb\x1e\x3c\x2b\xfb\xc9\xda\x94\xb7\xee\x27\x67\x8d\x9a\x7e\xdf\x13\xe0\xc7\xd3\xe7\x16\x67\x90\x01\xa3\x78\xbf\x10\x49\xac\x48\xce\xd9\x2f\x39\x90\xd3\xe7\x45\x75\x37\xc6\xa3\x24\xc7\x1b\xe1\x7e\xfc\xf1\xf4\xb9\x9a\x10\xf2\x5f\x8e\xe9\x5e\x37\xf3\x56\x5b\x47\xf5\xdd\xdb\xd7\xff\x07\x8d\x76\xf8\xa5\xbb\x90\xc9\x57\xf7\x64\xd4\x5a\xdb\xad\x24\x64\x7a\xb5\x61\xf1\x38\xa3\x88\x66\xcd\xf6\x53\xe2\x7c\x12\xdc\xa6\x3a\x2c\x20\xc9\x14\x26\x71\x12\x95\x4b\xb7\x1a\x33\xa0\xcd\x25\xc3\x32\x1f\x2e\x28\xc8\xe7\xa5\x62\xde\xef\x56\xd9\x25\x91\xe0\x1c\x22\x8c\xba\x32\x1a\x41\x1f\x0e\x51\x7d\x7f\x55\xdb\xda\xa8\x5e\xac\xa6\x89\x94\x63\x7a\xfe\xe1\x9d\x3f\xb7\x4f\xe8\x86\x22\xdf\x39\xbd\x0a\x67\xbc\x05\x55\xbb\xb8\x89\xad\xf1\xdb\xcc\xc1\xc1\xed\xce\x59\xc2\xda\x7a\xb7\x1a\xd1\x3a\x64\x30\xd0\xe5\x7d\x87\x5f\xae\x1e\x72\xbe\x66\x66\x5a\xa9\x1d\x80\xce\xa1\x22\x56\x66\x41\x15\x99\x02\x70\xf4\x55\x59\x9f\x04\x70\x87\xf3\x50\x7a\x92\xf2\x6c\xac\xc5\xb8\x41\xd9\xed\x80\x5c\x37\xd4\x5a\x6c\x39\xb5\xb5\x1d\x0f\xb6\xce\x5c\x2f\x96\x9b\x60\xa0\xca\xfb\xe0\x0a\xb9\x71\xe8\xc2\x9a\x55\xe4\xda\x9c\x9d\x03\xa9\x38\xb6\xf1\xaf\xf5\x29\x5d\x1b\xd6\x55\xb5\x02\x6a\x81\xa1\x13\x9d\x66\xfe\x8e\x39\xda\x6d\x3e\x07\x79\xc5\x7a\x08\x1f\xef\xeb\xef\xf7\x62\x2d\xaf\xde\x9f\x9d\x60\x9a\xb3\xf9\xc0\xfb\x5e\x11\xfb\xab\x52\xc5\x70\xb6\xd2\xc5\x12\x22\x1b\x46\x79\x7c\xf7\x04\x6d\xc4\xf1\xad\x07\x41\x5b\x7f\x24\x3a\x1c\xea\xad\x89\x87\x08\xda\xb6\x4c\xcd\x21\x7d\x0c\x95\x37\x2c\x1f\xab\xe5\xf6\x2a\x2d\xa4\x21\xd7\xda\x6f\xf9\xb4\x50\xab\xca\xde\x9d\x0a\x4e\x7e\xfb\xe3\xd1\xff\x0f\x00\x00\xff\xff\xa8\x80\x25\x6b\xc1\x5f\x01\x00") func operatorsCoreosCom_catalogsourcesYamlBytes() ([]byte, error) { return bindataRead( @@ -105,7 +105,7 @@ func operatorsCoreosCom_catalogsourcesYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\x23\xb9\x91\x2f\xfa\xbf\x3f\x05\x42\x9e\xbd\x92\xd6\x24\xd5\xed\xd7\xdd\xed\xb3\x77\x1d\x3a\xea\x9e\x19\xdd\xe9\x56\x2b\x5a\x72\xfb\x3a\xc6\x3e\x63\xb0\x2a\x49\x62\x55\x05\xd4\x02\x28\x4a\xf4\x99\xf3\xdd\x6f\x20\x01\xd4\x83\xa4\x24\xb2\x00\x49\xd5\x3d\x05\x47\x78\x5a\x64\x11\xc8\xc2\x23\x91\x8f\x5f\x66\xd2\x82\x7d\x06\xa9\x98\xe0\x6f\x08\x2d\x18\xdc\x69\xe0\xe6\x2f\x35\xb9\xf9\x37\x35\x61\xe2\x64\xf9\xfa\x57\x37\x8c\xa7\x6f\xc8\x59\xa9\xb4\xc8\x3f\x81\x12\xa5\x4c\xe0\x2d\xcc\x18\x67\x9a\x09\xfe\xab\x1c\x34\x4d\xa9\xa6\x6f\x7e\x45\x08\xe5\x5c\x68\x6a\x3e\x56\xe6\x4f\x42\x12\xc1\xb5\x14\x59\x06\x72\x3c\x07\x3e\xb9\x29\xa7\x30\x2d\x59\x96\x82\xc4\xce\xfd\xd0\xcb\x57\x93\xd7\xbf\x9f\xbc\xfa\x15\x21\x9c\xe6\xf0\x86\x24\x59\xa9\x34\x48\x05\x72\xc9\x12\x70\x8f\xa9\x89\x28\x40\x52\x2d\xa4\x9a\x24\x42\x82\x30\xff\xc9\x7f\xa5\x0a\x48\xcc\x60\x73\x29\xca\xe2\x0d\xd9\xfa\x8c\xed\xd7\xd3\x44\x35\xcc\x85\x64\xfe\x6f\x42\xc6\x44\x64\x39\xfe\xdb\xbd\xab\x1d\xfe\xca\x0e\xef\x26\x08\xbf\xcf\x98\xd2\x3f\xdc\xff\xcc\x7b\xa6\x34\x3e\x57\x64\xa5\xa4\xd9\x7d\x2f\x82\x8f\xa8\x85\x90\xfa\xa2\x26\xcb\x90\x91\xa8\x65\xf3\xdf\xee\x41\xc6\xe7\x65\x46\xe5\x3d\xbd\xfd\x8a\x10\x95\x88\x02\xde\x10\xec\xac\xa0\x09\xa4\xbf\x22\xc4\x8f\x65\x3b\x1f\x13\x9a\xa6\xb8\x5e\x34\xbb\x94\x8c\x6b\x90\x67\x22\x2b\x73\x5e\x0d\x6e\x9e\x49\x41\x25\x92\x15\x1a\xd7\xe4\x7a\x01\x38\x6b\x44\xcc\x88\x5e\x00\x39\xbb\xfa\x5c\x3d\x4a\xc8\x7f\x29\xc1\x2f\xa9\x5e\xbc\x21\x13\xb3\x00\x93\x94\xa9\x22\xa3\x2b\x43\x42\xe3\x29\xbb\x9a\x6f\xed\x77\x8d\xcf\xf5\xca\xd0\xab\xb4\x64\x7c\xfe\xd0\xf8\xee\x25\x76\x23\x61\xd9\x58\xa7\xe6\xf0\x9f\x37\x3e\xdf\x75\x78\xff\xfa\xd4\x8c\x4c\xf4\x82\x6a\xa2\x17\x4c\x11\xc1\x81\x48\x28\x32\x9a\x80\x7a\x80\xa0\x2d\x8f\x58\x8a\x3e\x6d\x7e\x71\x0f\x49\xcd\x2e\x35\xd5\xa5\x9a\x14\x0b\xaa\x36\xa7\xf8\x72\xed\xd3\x2d\xdd\xd9\x07\x97\xaf\x69\x56\x2c\xe8\x6b\xf7\xa1\x4a\x16\x90\xd3\x7a\x0f\x88\x02\xf8\xe9\xe5\xf9\xe7\xdf\x5d\xad\x7d\x41\xda\xb3\xb3\x75\xf7\x13\xa6\xcc\x54\x21\xa3\x20\x9e\x53\xe0\xda\xad\x0a\x20\xff\xd8\xfa\x9b\xab\x02\x92\x7f\x4c\x36\x28\x17\xd3\xff\x82\x44\x37\x3e\x96\xf0\xdf\x25\x93\x90\x36\x29\x32\x13\xe4\xb9\xcf\xda\xc7\x66\xfe\x1b\x1f\x15\xd2\xb0\x05\xdd\x38\xf2\xb6\x35\xd8\x5f\xeb\xf3\xb5\xb7\xfd\x79\xbc\xf6\x2d\x21\x66\x92\xdc\x5b\xa7\x86\x17\x82\xc2\x1d\xea\xf6\x20\xa4\x6e\x66\xed\xce\x65\xca\x6c\x17\x09\x0a\xb8\xe5\x8e\xb8\xa9\xb8\x7b\xcb\xc9\x46\xe7\x66\x8a\x40\x2a\xc3\x22\xca\x2c\x35\x4c\x74\x09\x52\x13\x09\x89\x98\x73\xf6\xcf\xaa\x77\x45\xb4\xc0\x61\x33\xaa\x41\x69\x82\xe7\x9a\xd3\x8c\x2c\x69\x56\xc2\x88\x50\x9e\x6e\xf4\x9d\xd3\x15\x91\x60\xc6\x25\x25\x6f\xf4\x88\x3f\x51\x9b\xb4\x7c\x10\x12\x08\xe3\x33\xf1\x86\x2c\xb4\x2e\xd4\x9b\x93\x93\x39\xd3\xfe\x7a\x48\x44\x9e\x97\x9c\xe9\xd5\x09\x72\x7a\x36\x2d\x0d\xeb\x3d\x49\x61\x09\xd9\x89\x62\xf3\x31\x95\xc9\x82\x69\x48\x74\x29\xe1\x84\x16\x6c\x8c\x2f\xc3\xf1\x8a\x98\xe4\xe9\xaf\xa5\xdb\x26\x6a\x6d\xe0\xad\xe7\x81\x78\x0e\xbd\xe7\x62\x19\x8e\x6d\x37\xa7\xed\xd0\xbe\x6c\xbd\x26\xe6\x23\x33\x8d\x9f\xde\x5d\x5d\x13\x4f\x91\x3b\xea\xb8\x44\xf5\xa3\x5b\x66\xc8\xaf\x96\x99\x59\xc6\x67\x20\xed\x2f\x67\x52\xe4\xd8\x2b\xf0\xb4\x10\x8c\x6b\xfc\x23\xc9\x18\x70\x4d\x54\x39\xcd\x99\x56\xb8\xad\x41\x69\xb3\x90\x9b\x1d\x9f\xe1\x75\x4a\xa6\x40\xca\x22\xa5\x1a\xd2\xcd\x47\xce\x39\x39\xa3\x39\x64\x67\x54\xc1\xb3\xaf\x9d\x59\x23\x35\x36\x0b\xb2\xf3\xea\x35\x85\x85\xcd\x1f\x6c\x9c\x7a\x42\xfc\xed\xbe\xcf\x72\xdf\xcb\x68\x48\x0a\x49\x46\xa5\x15\x50\x88\x86\x2c\x23\x1f\xdf\x7f\x20\x0b\x71\x6b\x0e\x12\xe3\x4a\xd3\x2c\xc3\x83\xe9\x84\x88\x8d\xae\xf1\x0e\x48\x28\x27\x39\xe5\x74\x0e\x84\x16\x85\x22\x33\x21\x09\x25\x73\xb6\x04\xee\x19\xc0\xfa\x5a\xdc\xfb\x7e\xf7\x71\x36\x62\x6f\xa4\xad\xb7\xaa\xff\xd6\x11\xbc\xf6\xcd\x7d\xbc\xce\xb4\x0d\xf9\x6c\xbf\x89\x35\xed\xb4\xee\x02\x8f\x14\x27\x25\x57\x5a\x96\xb8\x4b\x52\x72\x03\x2b\x77\xba\x72\x5a\x10\xa5\x85\xf9\xf0\x96\xe9\x05\xa1\xcd\x93\x45\x35\x1e\x97\xe9\xe6\x6b\x99\xa6\x40\x93\xe9\x8a\x18\x69\x14\xd9\x99\x16\x22\x43\x5e\x87\xfd\x19\xb6\x46\x24\x68\xc9\x60\x09\x84\xca\x29\xd3\x92\xca\x55\xb5\xb7\x36\xcf\xc1\x83\xf3\x8f\xf3\xd2\x10\x8e\xee\x9f\x3d\xf2\xd0\xce\x26\xf6\x3a\x71\xb2\x59\x5a\xc9\xc7\xdd\x27\xfa\xf2\xdc\xed\xe0\x5a\xd8\x56\x6e\x07\x83\x22\x66\xa7\x3a\xb1\xa8\x92\xda\x91\x00\xb7\x35\x53\x22\x64\xb5\xb7\xc8\x74\xb5\x75\x8c\xc6\x56\x27\x53\x30\x6c\x50\x52\x6e\xa6\x7e\xeb\x11\xea\x30\xb1\x0f\x6d\x46\xd3\xc4\x2d\xdf\xb6\xf3\x9b\x7d\x53\x29\xe9\x76\xea\x09\x61\x1a\xf2\x7b\x7a\x26\xeb\xd3\xdc\x9c\xcf\xea\x63\x43\xe0\x92\xa5\x60\x26\x56\x53\x66\x77\x99\xe1\x09\x74\x2a\x4a\x6d\xe7\xd3\x3d\x92\x92\x25\xa3\x84\xce\xe7\x12\xe6\xb8\xff\xef\x1d\xf6\x91\x39\xb1\xed\xfe\x63\x5f\xb7\xb1\x55\x6a\x1e\x7c\xc2\xb0\xdf\x07\x1f\xe0\xdb\x98\x47\xf3\x81\x4d\xb9\xb9\xdd\x1e\x5b\x43\xdb\x68\x62\xe6\xc4\x4f\xad\x90\x0f\x3e\xbc\xcb\xda\xda\xf6\xc8\x0a\xdb\xd6\x5e\xe7\x35\x42\xdc\xb7\x53\x73\x66\xea\x0b\xc0\x70\x0e\x7c\xb0\x66\xe9\x53\x20\x05\xc8\x99\x90\xb9\x39\x3c\x9c\x50\x92\x58\x51\xb6\xe2\x5b\xc8\x70\x79\xf2\xd0\x74\x92\x5d\xd7\xdf\xb6\x5d\x76\x81\x6d\x63\x52\x50\xbd\x78\xe4\xb1\xdd\x96\xca\xb6\xe6\xa4\x3d\xfa\xf0\x23\x8c\x6f\xa3\xef\xfa\xde\x8a\xde\xb7\x99\x86\xe8\x9d\xe2\x95\xb5\x4b\xaf\xbb\x70\xee\xf5\xf6\x89\xde\x7e\x00\xa5\x8c\xbc\x80\x42\xa8\xa4\xb7\x04\x78\x22\x0c\x4f\xf9\x7f\xaf\x3e\x5e\xd8\xd1\xb7\x71\xd7\xcd\x76\xae\x09\xcb\x8b\x0c\x72\x23\x8b\x92\x0f\x54\xaa\x05\xcd\x40\xe2\x9d\xf8\x67\x9e\xb7\xfe\x4e\xe8\xfd\x87\xba\xd9\x8c\x80\xa9\x20\x35\xac\x2f\x85\x8c\xae\x2c\x51\x29\x24\x22\x35\x57\x82\x90\xa4\x30\x8a\x42\x5e\x94\x1a\x08\xb5\xdf\x22\xfd\x8c\xcf\x77\xa1\x7a\xaf\x95\x20\x46\x9c\xca\xa9\x7e\x43\xa6\x2b\xfd\xd8\x49\x23\xe4\x6e\x9c\xee\xca\x72\x9a\xc4\x3c\xce\x78\x6c\xdb\x89\xfd\x34\x3b\x7e\xf4\x2d\x8d\xac\x4d\x19\x07\x79\x29\xa4\xde\x85\x47\x1a\xa5\x6e\x0e\x9b\xa2\x68\xb3\xf9\x29\x63\x5c\xff\xee\xb7\x0f\x3c\x99\x42\x91\x89\x95\xd9\x3b\x8f\x1f\xcd\x1d\xdf\x67\x67\x36\xb2\x6b\x7f\xbb\xb2\x8e\x1d\xfb\xb3\x66\xc1\x18\x3d\x6d\xd3\x3c\x3b\x75\xc4\x63\xbd\x5b\xa5\x3c\xbf\xd8\x5d\x7b\x79\xee\xed\x3c\x9f\x60\x06\x12\x78\xe2\x79\x5c\xf5\xa7\x16\x84\x92\x1f\xca\x29\x48\x0e\x1a\x54\x43\x0b\x58\x15\xe0\x8d\x6a\x60\x7f\x20\x41\x92\x52\xb3\x8c\xfd\x73\x9b\x29\x62\xdb\x5b\x45\xbf\x65\x1f\x91\xa7\xfc\x63\x8f\x48\x55\xfe\xb1\xc7\x64\x2b\xdb\xf6\xb9\xb6\x1f\xdf\x85\xb6\xb5\xd6\x09\x0d\x20\x4e\x5b\xa8\x56\x26\x6d\x2f\x45\x74\x4e\xfe\xf8\x36\xdf\x42\xe9\x25\x1a\xce\x5b\x86\xe7\xfb\x08\x26\x47\xf7\xf9\x24\x26\x46\xd9\x9f\xa0\x39\xfc\xc7\xbf\x4f\x6c\x97\xc7\x13\xf2\x2e\x2f\xf4\xca\x9b\x80\xd8\x23\x9d\x33\x45\xb8\xd0\x9b\x42\x60\xf4\x69\x5a\x6e\x37\x40\x3e\x3a\x53\xa7\x97\xe7\xde\xb4\xfd\x8c\x4b\xab\x0a\x48\x7a\x20\xe4\x5f\xb5\xc8\x68\x89\xf8\x33\x06\x59\x4a\x98\x91\xdf\x0d\xb1\x64\x9a\x89\xe4\xc6\x59\xf1\x3f\xbd\x25\x4a\x58\x9e\x63\x94\x3c\x23\xf5\x27\x82\xab\x32\x07\xc2\x1e\x63\x22\x83\x54\x3f\x48\xf5\xcd\x36\x48\xf5\x83\x54\x5f\x35\xeb\x9c\xeb\x03\x63\x5c\x23\xe4\x5e\xd6\x88\xcf\x0d\xcc\xf1\xa1\x36\x30\x47\x6c\x03\x73\x1c\x98\xe3\x43\x1d\x3f\xfa\x96\x3b\x49\xb8\x8f\xf6\xf5\x18\xdf\x18\xbc\x05\x83\xb7\x60\xf0\x16\xb8\x36\x5c\x9d\xae\x0d\x57\xe7\x70\x75\xd6\xed\x8b\xbb\x3a\x07\x6f\xc1\xe0\x2d\x18\xbc\x05\x83\xb7\xa0\xd9\x06\x6f\xc1\xe0\x2d\x18\xbc\x05\x83\xb7\xe0\x9e\x36\x48\xf5\x1d\x3b\x1d\xa4\xfa\x41\xaa\xdf\xd6\x06\x6f\xc1\xe0\x2d\x18\x98\xe3\xc0\x1c\x07\xe6\xb8\xa5\xf5\xd1\x5b\x90\x64\x40\xf9\x76\x35\x7e\x2d\x88\x11\x9f\x43\xc1\x8f\xcd\x98\x0b\xe1\x73\xbf\x26\x53\x58\xd0\x25\x13\xa5\x24\xb7\x0b\xe0\x3e\xfe\x94\xcc\x41\x2b\xb3\x0b\x40\xc3\x36\xcd\xef\x11\xd6\xf6\x30\x3b\x1b\x13\xe0\x74\x9a\x6d\xed\xf8\x31\xce\xe5\x7e\xf9\xb0\x77\x64\x2a\x84\x79\xbb\xcd\x19\x43\xad\xc5\x6b\x01\x11\x82\x57\xee\xd3\xb5\xb6\x07\xb0\x9c\x7d\x7a\xfb\xa4\x61\x2b\xbf\xda\xda\xcb\x79\x35\x38\x41\xbf\x0d\xc6\xf7\x99\xfb\xce\x7c\xfa\xf1\x96\x43\x8a\xe1\xde\x23\xc2\xb4\x79\xc0\x70\x15\x96\x30\x9d\xad\x2a\xfa\xbe\xec\x80\x98\xb3\x4f\x6f\x77\xf7\x6d\xf9\x65\xba\xb7\xeb\x88\x6e\xac\xc1\x49\x35\x38\xa9\xaa\x36\x48\x6c\x1d\x3b\x1d\x24\xb6\x41\x62\xdb\xd6\xe2\x4b\x6c\x7d\x77\xea\x0c\xae\x18\x32\xb8\x62\xfc\x63\x83\x2b\xe6\xd1\xc7\x07\x57\xcc\xe0\x8a\x19\x5c\x31\x0f\xb7\x41\x76\x75\x6d\x90\x5d\x07\xd9\xb5\x6e\x5f\x9c\xec\x3a\xb8\x62\x06\xe6\x38\x30\xc7\xba\x0d\xcc\x71\x60\x8e\x55\xfb\x12\x03\x37\x06\xab\xf6\x60\xd5\x1e\xac\xda\xc3\xe5\x37\x5c\x7e\xc3\xe5\xf7\x50\xc7\x83\x55\xdb\xb7\xc1\xaa\x3d\x58\xb5\x5b\x6d\xb0\x6a\x0f\x56\xed\xc1\xaa\x3d\x58\xb5\xef\x69\x83\xec\xda\xb1\xd3\x41\x76\x1d\x64\xd7\x6d\x6d\xb0\x6a\x0f\x56\xed\x81\x39\x0e\xcc\x71\x60\x8e\x5b\x5a\x1f\xad\xda\x8f\x1c\xdc\x5d\x76\x68\xd3\x46\xed\xc4\x65\x0f\x69\x9f\x90\x33\xca\x09\xe3\x49\x56\xa6\x80\xdf\xcc\x80\xea\x52\x82\x1a\x91\x8c\xe5\xcc\x57\xdf\x10\xd2\x6c\x9a\x71\x42\x15\x28\xd7\xc7\xd6\xa1\xaa\x7e\xb7\x7c\xfb\xf0\x6b\x3e\xcc\x43\x1e\xac\x16\x56\xe1\xf3\x19\xf7\xfd\xb8\x6d\xb5\x37\x19\x2c\xd9\x61\x9a\xcd\xf8\xe6\x41\x2c\xc6\x62\x2b\xf7\x3c\xfa\xda\xf7\x6d\xc1\x07\xb6\xdc\xa3\x17\xcb\x63\xd7\xc9\x98\x4c\xa9\x82\x3f\xfe\x7e\xa3\x66\x55\xf3\x91\x1c\x52\x46\xcd\x50\x5b\x9f\x78\xfc\x8a\xa9\x87\xb8\x7f\x93\xef\x70\x58\x2a\x32\x3a\xf6\xe2\xea\xd3\x74\x3d\x22\x66\xdf\xa5\xe7\xb6\x8f\x2b\x2d\xa9\x86\xf9\xaa\x51\x88\x09\xb7\x59\x2d\x30\xf0\x7b\x6a\x92\x79\xcd\x73\xeb\x10\xb7\x0b\x90\xf6\x88\xf9\xe2\x3f\xca\x0f\xc4\x54\x15\x17\xd4\x25\xce\xe3\xb1\x40\x1f\x3f\xce\x96\xaf\x1f\x5b\xdf\x6d\x25\x91\x7c\xdb\xf5\x72\xf4\xf3\xf9\xd6\x7a\xc5\xde\x56\x99\x5e\xd6\x27\xb8\xa0\xd2\x5c\x4c\xde\x7b\x86\xa2\x59\xfd\xf4\xbd\xfd\xaf\x2d\xdb\x7d\x77\xd4\x0e\x72\xda\xe3\xf2\xd9\xb8\x91\xa8\xe6\x3e\x4f\xde\x2e\x62\x99\xab\xae\x78\x09\x32\x67\x4a\xdd\x17\xfd\xd4\x26\xfd\xb1\x5b\x6c\x87\xdb\x6b\x4d\x5e\xf6\xeb\xe2\xdf\xa8\x41\x4e\x25\x3c\x5b\xeb\xca\x94\x26\x44\x96\x99\x11\xa5\x79\x4a\x5c\xe1\x21\x42\x93\x44\x94\x5c\x13\x0e\x90\x62\x04\xd5\xd6\xed\xbd\xc3\xdd\xb7\x83\xf4\xbc\xab\xec\x3c\xb6\x74\x3e\xfa\x94\x7b\x87\x53\xfb\x0a\x5b\xab\x5e\x35\xdb\xee\xb2\x36\x0e\xff\xb8\x10\xb1\x8f\x64\xb2\xb3\x5c\xd2\x45\x5e\xbd\x14\x19\x4b\x56\x9f\xca\x0c\xc8\x42\x64\xa9\xc2\x22\x6e\xe6\xf2\xac\xfc\xa0\x4d\x3d\xaa\xc0\xa7\xf1\x25\x47\x64\x5a\x6a\x92\x0a\xb0\xe6\x42\x97\x3e\xaa\xf9\xf3\x9d\xc6\xb7\xde\xf1\xdb\x85\xad\x2e\x68\x3a\x26\xb4\x28\x32\x0c\x91\x14\x46\xf0\xb8\x5d\xb0\x64\x61\x8b\xaa\x16\x34\x81\x6d\x8f\xed\x2e\x97\xee\xa4\xa7\x91\xbd\x74\x35\xe2\xcd\xdd\xd3\xc7\x76\x1d\xd9\x53\x69\x23\xb6\xce\xd7\x77\x52\x94\xc5\x8e\x8f\x77\xdb\x03\xc4\xd6\x00\xb3\x03\x99\xeb\x48\xaf\x89\x58\xfe\x4b\xe7\x18\xb7\x4b\xad\x9c\xe5\xd5\x79\x62\x26\x18\xe6\x98\x97\x99\x66\x45\x86\x3f\xb1\x29\xae\x14\xa1\x12\xea\x0b\x6e\x44\x28\x5f\x79\x3f\xbb\xab\x49\x08\x29\xa1\x73\xd3\xa3\xc6\x7a\xa7\x62\xb6\x33\xd5\xb6\xe8\x61\x99\x1b\xf9\xab\x61\xfb\x55\xa8\xea\xf3\x55\x4d\x05\xb9\x65\x59\x66\x94\x1f\x9a\x65\xe2\x16\xd2\x09\x39\x38\x58\xbf\x80\x12\x21\x1b\x74\x23\xab\x3b\xf8\xd7\xd6\x53\x86\xaf\xd5\x2f\xb6\x9b\x12\xb7\xaf\x16\x42\xf6\xd3\x44\xc8\xfe\x3a\x17\x21\x5c\x70\xef\x3b\xf8\xf3\xa7\xf7\x4f\xbe\xb7\x2e\xda\xc3\xb9\xfa\x98\xa0\xcd\xf6\x2a\xa8\xd4\x8c\x66\xa4\x94\x99\xb2\xdb\x8b\x1a\x5d\x43\xfa\x8a\xa4\x0b\x8a\xb0\x8c\x04\x14\x9e\x74\x42\xfe\xd5\x6e\x28\xb7\x8e\x96\x0b\x09\x9e\xad\x08\xb5\xab\x38\x2b\xb3\x6c\x44\x66\x8c\x53\x73\x07\x41\xe1\xc3\x6c\x77\xb0\xa8\xd4\xed\x8a\xf1\x04\xcc\x34\x8d\x2b\x77\x02\x52\x6e\x46\x36\xdc\xae\x62\x47\xe9\xc8\x95\xe0\xb4\x06\x26\xe5\x48\x31\xac\x29\xa1\xd3\x0c\x50\x49\x70\xe2\xe2\x27\x91\xa1\x17\xb0\x72\x55\x60\xdd\x4e\xda\xfc\xfa\x7f\x32\xbe\xab\xa2\x6d\xdb\x27\xbc\x95\x13\xca\x09\x30\xbd\x00\x89\x43\xaf\x0c\xeb\x34\xfb\xb4\x3e\x0f\x47\xaa\x4c\x16\x66\x8a\x0e\x0a\x91\xaa\x03\xc3\x58\x0f\x14\x24\x12\xb4\x3a\x38\x36\x7f\xad\xbf\x2b\xce\x57\xf3\x77\x27\xb4\x60\x07\xc7\x23\x82\x13\x8e\xc5\x42\x85\x5e\x7c\xb9\x47\xc0\xbf\x6b\xab\x2c\xf6\x63\xad\x75\x00\x3e\x35\x7b\x70\x05\x2a\x45\x61\x6b\x3b\x9a\x5b\x4b\x03\x06\x75\x9b\x4d\x8e\xdb\xa5\xe1\xf1\x5d\xbb\xbe\x08\x39\xe5\x04\xac\x8f\x0e\x34\xc9\x81\x72\xf7\x34\x2c\x41\xae\xf4\x02\xdd\x76\xaa\xe2\x5d\x5f\xfc\xa4\x87\x4d\xb8\x63\x20\x7e\x72\xeb\x4d\x6e\xcb\x1f\xaf\x4f\xee\xe1\xbf\x1e\xae\xf3\xf0\xfa\xd2\xfa\x62\xa7\x12\x05\x8e\x4e\xd3\xf8\xd9\xfc\xb2\x3d\x85\xf6\x23\xcb\x7d\x2b\xfe\xf1\xfe\xbd\xad\x54\xec\xe6\xea\x07\xc6\x53\x55\x65\x09\x4d\x2d\x5b\x75\xf3\xbd\x75\x92\x91\xc2\x2f\x71\x82\x37\x75\x83\x5d\xe5\xf9\x47\xba\x6f\x28\x8f\x7d\xd0\xf7\xb0\x4e\x71\x4b\x98\x33\x7c\x6a\x64\x9d\xc7\x46\xfa\xc9\xe8\x14\x32\xe5\xec\x5c\xd0\x20\x9f\x9c\xbe\xff\x50\x95\x0c\x97\x40\x1f\xb1\xdd\x3e\x81\x96\xb7\x03\x0a\x65\xa3\x34\xfb\x66\xdb\x5d\x1a\xc7\xa9\xd8\xcf\xcf\x42\xae\x40\xdb\x63\x96\xd3\xc2\x9c\x32\xdb\x87\xb5\xff\xaf\xd9\xf6\xdf\xe3\x4c\x3f\x7e\x58\xf6\xd2\x62\x76\x2f\x35\xbc\x6d\x90\x9d\x8e\xca\x6e\x48\x97\x7d\xce\xde\x03\x16\xa7\xba\xb5\xa6\x79\x6d\x43\x3b\xf5\xc5\x29\x1c\x09\x6d\xda\xbd\x53\x50\x36\xd9\x8b\x4d\xb8\x23\xfd\xe7\x75\x17\x91\x97\x60\x1f\x35\x72\x4c\x14\x64\x90\x6c\xab\x05\xbe\xed\x61\x0d\x79\x91\x3d\x76\xf2\xc8\xde\x2a\x67\xce\xf8\x27\xa0\xe9\xea\x0a\x12\xc1\xd3\x1d\x19\x6c\x37\xc5\xe0\x03\xe3\x2c\x2f\x73\xc2\xcb\x7c\x0a\xb8\x16\xca\x0e\x8a\x1c\xc7\xea\xfd\x94\x70\xb8\xcd\x56\x8e\xcb\xa4\xa4\x10\xa9\x67\x3c\x53\xa3\x7c\xd2\x74\xd7\xfb\xe2\x96\xe9\x05\x96\x4e\xe0\x2b\x33\x14\xd3\xf5\x65\x26\x49\x22\xa9\x32\x52\xd6\x08\x87\x66\xda\x5c\x80\x53\x40\x2f\x30\x4b\xc1\x6c\x19\xba\xa4\x2c\x33\x12\xfd\xae\x37\xda\x5b\x98\xd1\x32\xc3\x7a\xfb\xe4\x15\x39\x32\x84\x7b\x1d\x74\x5b\xb7\x46\xc6\x56\x42\x70\xf3\x5f\x9b\x05\x08\x5f\xee\x78\x0f\x77\xd4\x2e\x09\xb9\x7d\xdb\x35\x31\xb7\x6f\x05\x2d\xd5\xae\xd6\x90\xd6\x6e\x38\xe7\xa9\x39\x84\x4d\xf1\xb7\x71\x8f\x30\xe5\x7a\xde\x6d\x56\x1f\x4e\x2d\xb5\x85\x6a\x29\xe6\x12\x94\x7a\x0b\x34\xcd\x18\x87\x67\xd8\xd4\xd7\x0b\x20\x39\xbd\xc3\x8d\xad\x59\x0e\x46\x4e\x6a\x6e\x6b\xda\x7c\x7d\x2d\x48\x4e\x6f\xa0\xa2\x93\x4c\x61\x26\xe4\x0e\xa8\x03\xdf\x98\x6a\x6e\x26\xbb\x69\x67\x94\x65\x90\x4e\x90\x92\xc6\x58\x66\xb3\x4b\x91\x65\x20\xed\x3e\x34\x7f\x33\x5e\x02\xd1\x62\xc7\xc1\x0a\x29\x50\x0d\xb7\x03\x34\xa5\x19\x94\x16\xa8\xe9\xd2\xde\x38\xbe\x0c\xff\xe5\xda\xfc\xbf\xbb\x4b\xd0\x56\xbc\xe3\x80\x12\xa8\xc2\xce\xec\xb1\x51\xa5\x9c\x19\x95\xdb\x6b\xf4\x8d\x97\xb3\xa0\x8e\x09\xb9\x10\xda\x21\x6b\xab\x29\x35\xbf\xde\x71\x3c\xd4\x6a\x81\x80\xd2\x2c\x47\x6e\x93\x96\x88\x98\x34\x83\xe1\x5a\xd2\xed\x7b\xb7\x75\xd6\xff\xf8\xea\xd5\x8e\x52\xef\xd3\x9f\x5a\x09\x68\x87\x78\xd2\x0d\x7f\x51\x71\x6f\x7f\xbb\x16\x22\x55\x66\xfb\x31\xa7\x65\x14\xc2\xbc\xa3\x44\xc8\x01\x53\x9a\xf1\x79\xc9\xd4\x82\x4c\x41\xdf\x02\x70\x02\x77\x36\xdb\xd9\x8e\xe3\xfd\x13\xa4\xc0\xfd\x66\x56\xab\xf6\x9b\xb5\xd6\xe0\x75\x7f\x16\x60\xc9\x14\x13\xfc\x7b\xa6\xb4\x90\xab\xf7\x2c\x67\x8f\xd4\x56\xf0\xad\x3b\xf7\xa9\xaf\x53\x91\xa5\xe4\x93\xdd\x02\x57\x60\x67\x46\x02\x5a\xe9\xb5\xb0\xc6\x04\x62\x38\xc2\x94\x26\x37\xbb\xde\x6a\x7b\xaf\xea\x7d\xeb\xd5\xe1\x16\x7d\xfd\xaa\x2f\xcb\xea\x05\xb5\xa7\x5c\x4a\x54\x09\xaa\x91\xf0\xee\xb0\x07\xeb\xdd\x9d\x9d\xee\xd6\xd2\xde\x2e\x84\x02\x7c\x80\x50\xf9\xb8\x4c\xd8\x7c\x0d\xef\xba\x63\xaa\xe2\xb4\x08\xab\xe0\xa0\x08\x9d\xcd\xda\x4f\xa4\x7b\x48\xca\xb6\x9d\x6b\x92\x97\x4a\x93\x9c\xea\x64\x61\x2d\xb1\x22\xad\xa4\xd7\x43\xe5\xb4\xcc\x7d\x96\x76\x67\x2f\xce\xfe\xfe\x16\x62\xe9\x7c\x77\x57\x98\xcb\xe3\x31\xcf\x6c\xbb\xb5\xd6\x79\xbd\x9b\xb6\xc1\x25\x6b\x2f\xae\x53\x13\xf0\x2e\xb5\x17\x77\xf3\x13\xb4\x3a\x9f\x5e\xbc\xdd\xfd\xd4\x74\xb1\xa7\xec\x6d\x51\xe9\xee\x0f\x30\xed\xf4\x81\x39\xf0\x0e\x02\xf7\x4d\xdb\xe9\x84\xfa\xb3\x1a\x11\x4a\x6e\x60\x35\xb2\x92\x47\x23\x49\xa7\x79\x78\x2f\x42\x24\x64\x4e\x3c\x05\xd3\x23\x76\x68\xc7\xd8\x7d\xb6\x3b\x6c\x4c\x3f\xf8\x3e\x6e\x46\xdf\xc6\x86\xd0\x3d\x7f\xe1\x27\x68\x8f\x9f\xed\x7f\x76\x6c\xbb\x81\xd5\x7e\x3f\x58\xdb\x49\x66\x15\x9c\x16\x6f\xf7\x88\xf9\xa0\xd2\x1e\xaa\x6d\xb1\x9f\xff\xb7\xd9\xf6\x36\xb6\xfa\xe6\x27\x31\xe8\xf5\xf6\x3c\x28\xcd\x71\x5b\x26\x56\x33\x2d\x87\xca\xee\x5f\xc3\x61\x16\xac\xb0\x21\x67\xce\xb3\xb6\xff\x26\xb6\xed\x33\xcd\x58\x5a\x0d\x69\xb9\xcf\x39\x1f\x19\xd9\xda\xfc\x07\xaf\x1f\x2b\xf1\xbf\x15\xa0\x2e\x84\xc6\x4f\x9e\x6d\x0d\xec\x6b\x3d\xf7\x0a\xd8\x51\x9d\x97\x07\xd9\x2a\xda\x2b\x6c\x44\x95\x9b\x69\x9f\xe6\xb7\x06\x24\x2a\x72\xce\x89\x90\x6e\xea\xf6\x1e\xd4\x74\xe6\x06\xb6\x43\xe2\x45\x3a\xb5\x8e\x49\xf4\x17\x6d\x1d\xd3\xad\x90\x90\xad\x05\x8a\x38\xbc\x1b\x1a\x65\x41\xfb\x0d\x9a\x2b\x8a\x0c\xb5\x33\xa7\x34\x51\x8f\x00\x62\x0f\xdb\x60\xb7\xb5\x1c\xe4\x1c\x3d\xb6\xc9\xce\x1e\xc6\x8a\xe8\x0e\x17\x9f\x6d\x7b\x5f\x7f\xcd\x01\xf7\xda\xc8\x28\x1b\x58\x93\x6f\x47\xe9\x62\xaf\x1d\xdc\x18\xae\x65\x8f\xfe\xdf\xe6\x02\xc5\x05\xfe\x3f\xa4\xa0\x4c\xaa\x09\x39\x25\x8a\xf1\x79\x06\xad\xef\x9c\xba\xdd\xe8\x66\xaf\xc1\x0b\x33\xa8\xb9\xe7\x96\x34\x73\x46\x0f\xca\x09\x58\xd3\xb7\xa1\x63\x5d\x54\x1a\x39\x69\xd6\xb0\xfd\xca\xaf\x7e\x70\x03\xab\x83\xd1\xbd\xc8\xe3\xed\xad\x79\x2a\x0e\xce\xf9\x81\x15\x17\x36\xf6\x75\x25\x5b\xa0\xf3\xfe\x00\xbf\x3b\x88\x29\x87\xed\x29\x17\x74\x35\xdc\xb7\x07\xdd\x63\x4b\xde\x8d\x6f\xaa\x30\xe5\x71\x4e\x8b\xb1\x3b\x45\x5a\xe4\x3b\x9d\x5e\x8f\xf5\xeb\xa0\x0f\x5d\xaf\x1b\x72\x1c\x28\x56\x0b\x52\x2a\xb0\x2a\x2b\x32\x16\x02\x5e\xef\x41\x2d\x07\x2d\x4c\x1c\x6e\x51\x4f\xe9\x8d\xf2\x60\xd4\x69\xc6\xe7\x7f\x2e\x52\xaa\x77\x0a\x31\xb1\xad\xfb\xd9\xfe\x64\x07\x24\x25\x8e\x68\x76\xf2\x8c\xcd\x49\x41\x25\xcd\xd5\x84\x5c\xba\x4c\xf3\xb8\xaf\xd9\xac\xe9\x2a\x71\xf3\x7c\xbd\x2a\x80\xfc\x3f\xfb\x0f\x68\xdf\x70\x1f\xe6\x3c\x1e\xef\xf3\x5e\xd7\x1f\xdf\x7e\x7c\x43\xec\x28\x56\xf3\xd4\x82\xcc\x04\xda\x2c\x44\x29\xcd\x8b\x2e\x81\xa3\xad\xd1\x68\xc6\x82\xc3\xc7\x99\xe1\x1b\x54\xc3\x12\x24\xb9\x35\x9b\x2a\x61\xe9\x1e\xa6\x54\xd3\xd0\x80\xfa\xc4\x87\xbb\x9b\x54\x9d\xd3\xbb\xab\x52\xce\xf7\xd8\x53\x24\x58\xea\x69\x9a\xb2\x6b\xa3\x12\x9e\xbe\x66\x82\x1c\x95\x2c\x20\x2d\x33\x48\x09\x9d\x8a\x25\xb4\x1c\x6d\xd5\xcf\xf6\x1c\x1a\x2d\x1d\x7b\xfe\xe6\xb3\x61\xdb\x9e\x28\x23\xa5\x4d\x95\xc8\x4a\x5d\x19\xc4\x8e\xe0\xee\x0d\xf9\x03\x82\x9d\x28\x29\x40\x26\xc0\x35\x9d\xc3\xba\xe5\xd2\x3e\xf7\xfa\xd5\xbf\x1c\xef\x4b\x00\xca\x43\x66\x7c\x67\x47\x7e\x65\x8e\xdc\x07\x7a\xf7\x67\x5e\x7b\x79\x98\x22\x3b\x5a\xb1\xea\x76\xba\xf6\x22\x38\x4a\x96\x94\x19\xda\xa8\x11\x44\xd6\x78\x9d\xe9\x8a\x48\x51\x22\x8c\x8c\x94\xc5\xbe\x63\x35\xed\x6d\xbf\xfd\xc3\xbf\xec\xfb\xf3\x77\x77\x34\x2f\x32\x78\xe3\x0b\x99\x58\x63\xa1\x51\x48\xb4\x20\xbf\x7b\xf5\x2f\x23\x0b\x33\x80\xdb\x86\xf1\xaa\xde\x47\xd4\x6c\xa2\xb2\x20\x2c\xb7\xf1\x20\x90\xad\xb0\xa3\x7d\x45\x40\x73\x6f\xb7\xf9\xa2\xd2\x54\x6a\x35\x22\x88\x66\xab\x54\x49\x2d\x34\xcd\xd6\xec\xa5\x68\xa9\x84\x5b\xbb\x15\x52\x81\x6b\x09\xe8\xb6\xd8\x93\x8a\xd7\xbf\x7b\xf5\x2f\x9b\x56\xf1\x8f\x3c\x01\x1c\x07\xfb\x47\x70\xe3\x14\x80\x93\x1b\x96\x65\x90\xee\x2b\xa3\x3f\x36\x91\xb3\x52\xea\x05\xc8\x11\x01\xae\xbc\x2b\xc3\xbc\xfb\xda\x7b\x23\x2d\xb2\xe4\x7c\x5f\x5d\x8c\x10\x6a\x1d\xaa\xe8\x1d\x69\x78\x4b\xdc\xb4\x1b\x69\x53\x93\x5c\x28\xbd\x7d\x3a\xf6\x1a\x8c\xf2\xd5\xc7\xd9\xbe\xf2\xf9\xb8\x83\x35\x78\xf3\xd7\x1d\xd4\xd4\x96\x48\xc5\xb8\x1e\x0b\x39\xb6\xdd\xbc\x21\x5a\x96\xfb\x48\xb1\x79\x8b\x85\xf4\xf0\x06\x28\x1b\x0c\x6e\x63\x13\x7c\x71\x6c\xbc\x3b\xbb\x4d\xc5\x2d\x8f\x75\x69\xe0\x6d\xdf\xe9\xba\x78\x16\x16\xde\x76\x2d\xad\x71\x1e\x33\x0f\xe6\xe9\xff\x7b\xf3\xc8\xef\xab\x93\xaf\xdd\x04\xf7\xf3\x76\xc7\x5a\x2b\xd6\x6d\x74\x35\x44\x50\x8c\xd6\x68\xdd\x93\x82\x2d\x6f\x56\x71\x55\x2b\x8f\x5a\xef\x88\x79\xc0\x12\xb5\xe5\x8a\xab\x19\xf0\xde\x57\xd9\x3d\x57\x95\x7d\xc7\x1a\x3c\xa2\x11\x72\x69\xd8\xb0\xba\x8f\x0f\xef\x39\x74\x06\x54\xe9\x6d\x4b\x38\x70\xed\x47\xdb\xc3\x91\xac\xeb\xad\xad\x0f\x1b\x85\x0c\x67\xbc\x72\xb4\x61\x90\xf6\x14\xc8\xc1\x27\xb0\x30\x28\x0b\xdf\x6f\x69\x62\x07\x95\x03\xdc\x2c\x76\x47\x25\x6d\xcf\x69\xf3\x3e\xbc\x27\x75\x68\xbb\x31\x1a\x51\x68\xce\x85\xe8\xae\xa0\x0a\x53\x65\x01\x62\xbb\xfb\xb1\xc1\x85\x6a\xb8\x23\xec\x5f\x66\xa2\x0a\x48\x26\x12\x90\xab\xd8\xe0\x38\x6b\x2c\x42\x1b\xd2\x69\x76\x4b\x57\xea\xa0\x37\xf6\x86\x1c\x34\x7d\x38\xf8\x7a\xbd\x75\x17\x08\xae\x34\xe5\x29\x95\xa9\x7b\xa3\x43\x55\x8d\xbe\x0f\x47\xf8\x80\xf8\x26\x3e\x13\x6f\xc8\x42\xeb\x42\xbd\x39\x39\x99\x33\x3d\xb9\xf9\x37\x35\x61\xe2\x24\x11\x79\x5e\x72\xa6\x57\x27\x08\x57\x62\xd3\x52\x0b\xa9\x4e\x52\x58\x42\x76\xa2\xd8\x7c\x4c\x65\xb2\x60\x1a\x12\x5d\x4a\x38\xa1\x05\x1b\xd7\x86\x00\x35\xc9\xd3\x5f\x7b\x92\x9e\x56\x87\x6f\xb1\x09\xf4\xc8\xc8\x25\x8c\x4b\x7e\xc3\xc5\x2d\x1f\xa3\xcd\x52\xed\xc5\x30\x76\x83\xbd\xfa\x16\xb0\x86\xfb\xa0\x62\x0b\xb1\x87\xa1\xf3\xc9\x57\xd6\x4c\xd1\x98\xf2\x74\x6c\xb1\x5e\x4f\xbb\xc0\x5d\xfc\xb2\xe3\x1a\x4f\xba\x3b\x75\xdd\xac\x41\x34\xd1\x6c\x09\x9d\x50\x8d\xbe\x85\x29\x06\x1f\x7d\x9c\x53\x5a\x4a\xbb\x97\x1a\x30\x47\x8f\xf1\xc8\xe9\x0a\x65\x78\x24\x96\x08\x2b\xbc\x71\x91\x82\xf3\x59\x2e\xf7\xc0\x1e\xfa\x76\x65\xd8\xf2\xb5\xd1\x36\x1d\x54\x12\x5d\xc2\x2b\xa5\x21\xb7\x57\x81\x1d\x2d\x5b\x11\x2d\x57\x16\x5f\x29\x6f\x08\xd3\x1e\xb4\x68\xd4\xfb\x1b\x7c\x4e\x29\x91\x30\x14\xe9\xeb\x65\xeb\xa6\xab\x78\xb7\x18\x25\x85\x50\x0c\xdf\xcb\x09\x2e\xfb\xf5\xd7\x5d\xe6\x69\xe0\x97\xfe\xf8\xfb\x7d\xf6\xd1\x0c\x13\x47\xee\xe9\xae\x6f\xe3\x7b\x67\xcd\xd8\x5e\xb7\xf4\x87\xca\x5b\x05\x8d\x20\x9a\x08\xae\xb4\xa4\xec\xfe\x9c\x09\xdb\x5b\x47\x4c\x45\x77\xe0\x02\xc1\xdd\x79\xda\x69\x52\xc8\x66\x58\x82\x17\x58\x70\xcb\xfb\xa9\x6e\x4e\x8c\x4d\xa9\xe0\xc3\x6b\xf6\x64\xb7\xb6\x75\x9e\x23\x12\x34\x4f\xf6\xd7\x36\x71\x6d\xfa\x16\xf5\x8d\xab\xea\xbd\xce\xe7\x5c\x54\x1f\xbf\xbb\x83\xa4\xdc\x35\xef\xd8\x66\x0b\xf5\xdb\xdb\x66\xa4\x3d\x6f\xa6\x76\xf0\x67\x4b\xbd\xe1\x10\xfe\x0b\x27\x54\x0a\x5c\x2f\x27\x5d\x2a\xaa\x99\x9a\xed\xeb\x49\xf6\xcd\xac\x6a\xb5\xee\xd0\xc0\x82\x55\x27\xa6\xc2\xd5\xa1\xcc\x60\x83\x99\x99\x46\xce\x99\x2c\x84\x50\xfb\x98\x89\x9a\x8d\xda\x4d\x87\xef\xb0\x64\xc2\x22\x9c\x30\xb6\x5e\x92\xdc\xb0\x4d\x77\xc5\x37\x88\xb2\xfe\xce\xfa\x67\x6c\x5f\x5d\xdd\x37\x34\xf7\x55\x9b\xc3\x23\x79\xcc\xe0\xe8\xb3\x33\x7f\xcc\x51\x58\x57\x9a\xa8\x32\x37\xa4\xdc\x02\x9b\x2f\xb4\x1a\x11\x36\xd9\xdb\x5e\xe4\x9b\x39\x46\x40\x93\x45\xe3\x15\x72\x00\xdd\xaa\xfe\xdc\x3c\x7b\x4d\xc7\xee\xd1\x83\xa9\x7b\x1e\x6f\x2e\x8f\xc1\xa8\x92\x1b\xd6\x8f\xc4\xd6\x6d\x30\x22\xa0\x93\xc9\xf1\xfe\xc0\x0c\xdb\xea\x24\x6d\x66\x16\xa7\x2b\xc2\x34\x98\xcb\x18\x55\x7f\x29\xca\xb9\x9d\x6b\xf0\x31\x66\x38\x07\x55\xa8\x3a\xe2\xe6\xd2\x74\x7f\x93\x84\x6f\x07\x76\xd1\x0e\xcc\x89\xc1\xb9\x2d\x73\x9f\x5a\x18\x57\x00\xbd\xfa\x50\x65\x56\x90\xa0\x0a\x61\xcd\x64\xeb\xfe\xfe\xff\xb1\xa7\x57\xbf\xd9\xcc\x50\x47\xea\xb8\xde\x5a\x0b\x36\x5f\xf8\x9d\x45\x9d\x7c\xd0\xde\x91\xdd\x36\x58\x77\x5c\x89\x6d\x1d\xd1\x25\xb6\xc5\xe1\x82\x8d\x30\xf3\xfa\x78\x36\x8e\x84\x06\x99\x57\xcb\x86\xa7\x06\xaf\x15\xe7\x6b\xf7\x45\xc9\xdd\x61\x25\xaf\x3a\x53\x71\x64\x4e\x39\x61\x46\x83\x34\x7c\x6a\x2c\x8a\xe3\x09\x39\x25\xbc\xac\xd8\xf2\x43\x84\x71\x51\xd1\xe5\x3a\x32\xc4\x2a\x51\xf7\xd5\x95\x5b\x87\x5c\xa5\xb6\x75\x83\x73\x36\xdb\xd8\xcd\x00\x3c\x5e\x52\xe4\xa1\x4e\xec\x1a\x75\xec\x20\x4c\x2c\xf0\x7d\xf8\xb7\xe8\xde\xc7\x7a\xda\x6f\xcb\x57\x6a\x58\x30\xc8\x7c\xd4\x94\xe3\x2b\x1e\xd0\x66\x37\x76\x2e\xba\xee\x0a\x12\x67\x67\x90\x48\xf3\x4a\x82\x10\xea\xdb\xdb\xda\x2c\x57\x49\x2b\x5a\xb3\xdd\xba\x2f\xa7\x2b\xfc\x76\x4f\xf0\xfe\xfd\x2d\x94\xb9\xd6\x2d\x88\xcd\xd6\x2d\x16\xc3\xad\xdb\xfa\xee\x8d\x03\x77\x8f\x40\x18\x0e\x17\x07\x04\x7f\xcf\x00\x71\x4e\x8f\x6d\xe1\x1c\xb6\x6e\xfb\xc3\xe8\xef\xeb\x27\xda\x72\xc4\x62\x11\xb6\x75\x00\xe2\x6f\x6f\x1b\x88\xbd\xa7\xc1\xe5\x6f\x6f\x9d\x9d\x39\xdb\x5b\x57\x0c\xff\xf6\x16\x9f\x51\x98\xf6\xe9\x19\x60\xfe\xdb\xdb\x4e\xe0\xff\x51\x1b\xf9\x4f\xbe\xd3\x96\x31\xbd\x0f\xba\x65\xeb\x16\x79\xc5\xbb\x45\x0c\x6c\x6f\x4f\xb3\xde\xa7\xcf\x17\x53\xb0\xbd\xbd\x70\xa4\xc1\x9e\x44\xdd\x4f\xd0\x77\xda\x10\xf3\x5e\x8f\x1a\x3f\x8e\x44\x4d\x83\x04\x9b\x93\xce\x43\xe5\x9d\x82\x3d\x72\x19\x2b\xbc\x43\x12\xa3\x63\x0b\x09\x98\xdd\x10\xc3\x46\x3a\x19\x85\xef\x6f\x3b\x87\x5f\x84\x84\x53\x6c\x6f\xf1\xe4\x35\xdb\x22\x49\x6d\xb6\x45\xe3\x1e\x28\x67\x7f\x6b\x9d\x79\x2f\x28\x62\x5b\x77\xe2\x20\x62\x3f\xda\x06\x11\x7b\x10\xb1\x1f\x6f\x83\x88\xbd\xd9\x06\x11\x7b\x10\xb1\x83\xda\x20\x62\x3f\xda\x06\x11\xfb\xd1\x36\x88\xd8\x75\xfb\x25\x88\xd8\xa1\x61\xa7\xdb\x9b\xb5\xf7\x47\x73\x3b\xfc\xc5\xba\xbb\xd6\xfd\x0c\xa8\x1c\x78\x98\x75\xdb\xe1\x60\xa4\xd0\x2b\x77\x55\x5f\xa3\x93\xc2\x45\x50\x4b\xca\xe7\x40\x5e\x8f\x5f\xbf\xda\x1b\xd4\xdf\x6c\x21\xd8\xe8\x66\xdb\x37\xeb\xd1\x7a\xbb\xcf\xd9\xdd\x3f\xfc\x87\x63\x63\x95\x13\xbe\xa5\x69\xdd\x03\xc6\xa8\x72\xbd\xe7\xa0\xf7\x47\xcf\xfb\xd6\xf4\x62\xb2\x1c\x2a\x84\x94\xe5\x61\x2e\xe6\xa3\x8e\xa0\x14\xdc\x79\xd3\xcd\x1e\xea\xba\x47\x3a\xbd\x6d\x02\xd4\x86\x5b\x4f\xc1\xbc\x71\x57\xdc\x89\x26\x4a\xe4\x60\x93\x83\x79\x3e\x69\x5e\x17\xfc\x36\x20\x47\x30\x99\x4f\x48\x5a\x82\x4b\x04\x60\x43\x14\x8e\x47\x0d\x24\x5f\x57\xe0\x89\xb9\xdd\x25\xfe\xc7\x4c\xac\x03\x00\xc2\x12\xb8\x2e\x69\x96\xad\x08\x2c\x59\xa2\xab\x15\xc0\x48\x1e\xa6\x55\xc0\x5c\x07\xeb\x5d\xa1\xba\xd6\x78\x83\xd9\x74\xbb\x8b\xc3\x95\xa2\x0d\x3a\xba\x33\xe0\xb5\xa4\xef\x76\x86\x26\xf7\x9a\x4d\xb4\x19\xcd\xa2\x97\xf0\x9f\x78\x70\x3f\x7e\xea\x0a\xf4\x20\x91\x2e\xdf\xe0\x0b\x37\xa6\x1c\xec\xd0\x15\x42\x3a\xfc\xc7\xe6\x0c\x6e\xc1\x57\x6c\xc9\x80\xb1\x77\x20\x77\xbb\xe9\x05\xe4\x5d\xb2\x68\x6c\x6b\x86\xb6\x6b\x51\x88\x4c\xcc\x57\xcd\x8d\xe7\x8a\x98\xd7\xb9\xb5\x29\x51\xe5\xd4\x69\x72\xe6\xec\x5f\xac\xed\xd4\x01\x19\x70\x6f\x1b\x90\x01\x1b\x6d\x30\x5b\x0e\x66\xcb\x3d\xfa\x19\xcc\x96\x83\xd9\x72\x30\x5b\x0e\x66\xcb\xae\x6d\x30\x5b\xee\x45\xd4\x60\xb6\x24\x83\xd9\xf2\xde\x36\x20\x03\xb6\xb5\x41\xc4\x1e\x44\xec\xdd\xda\x20\x62\xef\xd1\x06\x11\x7b\x4b\x1b\x44\xec\x87\xda\x20\x62\x3f\xdc\x06\x11\x7b\x10\xb1\x07\x11\xfb\x97\x20\x62\xc7\x47\x06\xc4\xec\xb1\x10\x69\xf4\x24\x11\x85\x48\x1f\xc8\x11\x61\x9d\xa6\x89\x18\x67\x22\xa9\x32\x22\x9b\x9f\x38\x64\x81\xa2\xb9\xf5\x19\x8f\xc8\x3f\x05\x07\x1b\x59\x6e\x4b\x0a\xe6\x40\x04\x56\x06\x2f\x44\x7a\xa4\x8e\x3b\x84\xc7\x0e\x39\x26\x76\x69\x43\x8e\x89\x21\xc7\xc4\x90\x63\xe2\x79\x73\x4c\x2c\xa8\x72\xd5\x00\xf0\xf6\xbf\x3f\xe5\x44\x83\x63\x5f\x83\xcc\x87\x8c\x13\x8f\xb5\x0d\xa5\xd3\x1d\x1f\xb3\xc2\x8d\xcd\x6e\x67\x3c\x75\x20\x39\x48\x2f\xdb\xf3\xec\x2c\x54\x38\x2d\x34\x4d\x21\x25\x05\xc8\xb1\x3d\x3c\x82\xcc\x98\x2b\xc6\xb1\x76\x9a\xdd\x0c\x77\x65\x88\x3d\x49\xe3\xd0\x9e\x89\x80\x9e\x5e\x3e\x97\x43\xfb\x55\xa2\x61\x5a\x9a\xd0\x9e\x96\xf8\xf3\xc5\x65\x76\x88\x63\x18\x1b\x13\xed\xf0\x2c\x3f\x04\x99\xc6\x62\xd9\xb1\xd0\xce\x74\xb5\x57\xa9\xcb\xfb\x5b\x6c\xdd\xdd\xd7\x0f\xfc\xef\x12\xe4\x8a\x88\x25\xc8\xda\x2a\xe3\x6f\x5a\xe5\x90\xb7\x98\x61\xdb\x95\xc7\x0c\xd7\xc1\xce\x67\x36\x77\x0d\x2f\xb3\x6c\x64\x7b\x5f\x67\x7b\xfe\x22\xb2\x45\x6a\x84\xf9\x3e\x92\x99\x3e\x8a\x25\x37\xa6\xa1\x33\x36\xe4\x88\xf4\xac\x90\xe6\xfd\x2d\xae\x1e\x1e\x51\x0b\x7f\x22\x33\x59\x5f\x0a\x76\xde\xdf\x9e\xd2\x91\x42\x62\x3b\x53\x48\x64\x87\x0a\x89\xe8\x54\x21\x71\x1d\x2b\x24\xba\x73\x85\xc4\x74\xb0\x90\x67\x2f\x40\x7a\x7f\x8b\x6c\x7d\x27\xd1\x7d\x2e\xe4\xc9\x18\x0c\x79\xee\x42\xa7\xf7\xb7\xe7\x29\x81\x7a\x7f\x7b\x82\x5d\x10\xd3\x0f\x43\x9e\x74\x0f\xbc\x48\xa9\xd5\xfb\x5b\x2f\xbd\x33\x0f\x12\xf6\xe4\xe5\x59\xef\x6f\xd1\x9d\x1d\xe4\x09\x1c\x1e\x24\xb6\xd3\x83\xc4\x3e\xb2\x9d\x0a\xc4\xde\xdf\x9e\xe2\xac\xbe\x68\x51\xd9\x87\xc8\x7a\xc1\x72\xb3\xf7\xb7\x97\x2f\x44\x7b\x7f\x8b\x2c\xd5\x86\x16\xaf\x7d\x8c\xd0\x28\x47\xec\x69\x22\x8f\x49\xeb\x5c\xfc\x00\xab\xb8\xe8\xc0\x08\x27\xf7\x43\x8b\x3a\xaf\xb6\x69\x57\x51\xaa\x96\x76\xd1\x47\x65\x05\x5d\x67\x5b\x77\x45\x77\xb3\x2c\x98\x86\x29\x10\x4d\x6f\x00\x5d\xf2\x02\x8b\x03\xb0\x14\x6c\x15\x09\xbb\xd5\x71\x7c\xb3\xc5\x4b\x05\xa9\x21\x24\x13\xe2\xa6\x2c\xfc\x51\xc1\xb8\xcd\x18\x07\x93\xf1\x44\xe4\x3e\x40\xd5\x86\x2b\x99\x13\xef\x78\xc1\xd8\x56\xfd\xb1\x9f\x23\x39\x78\xb9\x39\x63\xe4\x3f\xde\x37\x8d\x63\xff\x20\x54\x91\x7f\xa0\xda\xc0\xc9\x11\xfe\xf0\xf8\x1f\xe1\xd8\xbd\x6a\x09\xac\x3f\x4b\x94\xc8\x61\xd7\xea\x20\xb7\x57\xe7\xa1\xd9\x0d\x26\xc8\x57\x2a\x68\x4e\xdc\xa1\xf5\x43\x1f\x51\xae\xd9\x71\x65\xc2\x9d\x10\xdc\x5f\xa8\x33\xa5\x82\x1f\x6a\x4b\xb5\xe7\xfa\xbe\x83\x70\xc8\x5e\xb5\x72\x35\xf4\xc3\x7a\x86\x27\xae\xb2\xb4\xad\x89\x55\x55\x70\xb2\xb2\x51\xf0\xb8\xd7\xde\xe7\xee\x54\xc5\x99\x90\x53\x96\xa6\x80\x65\xef\xaa\x57\x9d\x0a\xbd\x58\x3f\x72\x08\xd5\x6a\xee\x9d\x70\x62\x4e\x33\x25\x46\xeb\xe3\x24\x94\xfb\xe8\x72\xd0\xb6\x76\x5e\x6b\x58\xc2\x94\x59\x16\x05\x11\xd4\x96\x6b\x57\x24\xd0\xc8\xeb\x59\xb1\xa0\x0d\xf7\x9f\xbb\xb6\x14\x01\x4e\xa7\xe8\xa5\x6c\xd3\x79\xce\x1b\xb6\x53\x32\x03\xaa\x4b\x09\x64\xde\xa1\x6e\xe4\x7a\xeb\x1d\xac\xf9\xa9\xae\xaf\x8c\x29\x1d\xf1\xfe\x62\xaa\xe7\x57\xd8\x3a\x81\xc3\x2d\x16\xfd\x16\xe3\x42\x0f\x17\xd9\x70\x91\xad\x5d\x64\x1b\x07\xef\xe9\xee\xb2\x8d\xa1\x86\xeb\x6c\xb8\xce\xba\x34\x4e\x73\x50\x05\x4d\xe0\x0b\xf2\x63\x5b\x27\x83\x0d\x03\xf3\xe4\xab\x46\x29\x60\x90\x79\x54\xdf\x83\xcf\x9c\x82\x7b\x1e\xfb\x4d\x3d\xe0\xaa\xe4\x8d\x3a\x91\x0d\x62\x2c\x3b\x5f\xc7\x16\x06\x53\xe2\x8d\x22\x82\x83\x42\x17\x2f\x54\x08\xd7\xc6\xe0\x38\x56\xf8\x6b\x63\x46\x94\xda\x99\xc3\xd3\xf5\x1c\x29\xf5\x88\xe8\x6d\xce\x81\x72\x45\x0e\x3c\xf4\xf6\x50\xd5\x4f\xec\x58\x10\xf6\xa1\x56\x95\xe6\xa9\x28\x3a\xfa\xdf\xff\xe7\xb8\x55\x8e\xa7\x26\x68\xc0\x12\xec\xdc\x06\x2c\x41\x50\x1b\xb0\x04\x03\x96\x20\x46\x5f\x03\x96\x60\xc0\x12\x6c\x6d\x03\x96\x60\xc0\x12\x0c\x58\x82\x01\x4b\xb0\xd9\x06\x2c\xc1\x80\x25\x18\xb0\x04\x9b\x6d\xc0\x12\x44\x68\x5f\x04\x96\xa0\x56\xf8\xfb\x66\xb5\x6a\x9a\x82\x5c\x9c\x29\x6a\x6d\x9a\x6a\x96\xd4\x49\x8c\xfc\x53\xf6\x5f\xfd\x32\x61\x35\xcd\x4b\x4f\x63\xc0\x6a\x1a\xc9\x36\xec\x90\x91\xec\x57\xf7\x5a\xab\x2a\x7b\xd6\xc6\xc8\x4f\x6a\xc8\xfa\x7a\xcd\xd4\x8d\xd8\xac\xbe\x9d\xc6\x6b\x9f\x0d\x40\x2d\x44\x99\xa5\x46\x6e\xab\x52\x05\xa4\xe4\xc8\xfb\xb2\x8e\xcd\x6e\xe1\x42\xb7\xbf\xe4\x9a\x8d\xeb\x27\xaa\x48\x3b\x74\xc4\xf9\x22\x07\xe1\xab\xe0\xd5\xdf\xda\x5f\xe3\x12\x17\x54\x51\xea\xf5\x06\x36\x97\x28\xc8\xd6\x3b\x30\x45\x52\x98\x31\x6e\xd3\x79\xc8\x92\x73\x23\x77\x0a\xee\x82\xd0\x83\xe9\xb3\xb7\xb6\x75\xae\x39\x56\x61\xb5\x75\x9c\x0f\x54\xd9\xeb\xe5\x6f\xc4\x19\x53\xe4\x73\x94\xbb\x8c\xda\x82\x3b\x37\xa6\xf9\xc4\xf6\x13\x4c\x5a\xc5\x45\x70\x45\x58\xf5\xf6\xe1\x0c\xe4\x1d\x32\x8e\xe6\x8b\x31\x85\xfb\x83\x66\x99\xb8\x0d\x17\x08\xa2\x1c\xbd\xc8\xd5\x3c\x02\x4f\xdb\xed\xde\xc5\x40\xd6\x82\x67\xc3\x94\xb6\xa1\x8e\xc8\x50\x47\x64\xa8\x23\xb2\xad\x8e\x48\x03\xf8\xd3\x2c\x28\xd2\x75\xb6\xb1\x0c\xc9\x0b\x14\x14\x21\xe4\x2f\x0b\xc0\x43\x2e\xc1\xa2\x75\xca\x4c\xb3\xa2\x4e\x74\xa5\xec\xca\x67\xd6\x20\x34\x73\x79\x64\xda\x2c\xc7\xd0\x48\x93\x45\x47\x02\xd6\x18\x16\x52\x81\xe9\xb4\x14\x5e\x43\x36\x7f\x0a\xfa\x23\x6d\xb5\x0d\x6f\x29\xb2\x69\x6c\xd8\x97\x9f\xed\x22\xe0\x8a\x78\x8b\x32\x4a\x1b\x8e\xa6\xc8\x91\x11\x6d\xb2\x95\x03\x65\xb5\xee\x8a\x96\x4c\xd4\x79\x58\x6b\xcd\x5e\x82\x57\x79\xe6\x6c\x09\xbc\x16\xa8\x8e\xd4\xf1\xb1\xd7\xbd\xd6\x05\xc5\xce\x63\x86\x08\x98\xdd\x2f\xc1\x7d\x05\xc3\x35\xc1\xae\xf3\xb8\x5b\x04\xc2\xff\x68\x08\x4e\xff\xf9\xb8\x48\xd8\x79\x68\xcb\xda\x7c\x72\xa1\xc6\xb6\xaa\x45\xc1\x8e\x7d\xf7\x24\x53\x4a\x78\xd2\x8b\x18\xfe\xc0\x68\xc9\x2e\xe2\x96\xed\x79\x89\x24\x17\x2f\x90\xe0\xe2\x97\x54\x47\xa7\x97\x20\x94\xde\xd9\x6d\x9e\x22\x09\x78\xaf\x41\x27\x43\x16\xf0\xa0\x7e\x7e\x51\x59\xc0\x5f\x08\x54\xf2\x0b\x4c\x06\xde\x03\x10\xc9\x4b\x02\x48\x7e\x71\xc9\xc0\x7b\x04\x18\xe9\x25\x58\xa4\x6f\x40\x91\x21\xbb\x76\xa7\x16\x11\x14\x12\xfb\x1c\xf6\x10\x0c\xd2\x43\x20\x48\x5f\x41\x20\x11\x25\xcd\xa7\x01\x7f\xf4\x36\x41\x3d\x89\x9a\x3c\x22\xe6\xa9\x7c\xe9\xa4\x11\xbd\x08\xb5\xed\x73\xb2\x88\x5e\xc5\xd7\xf6\x2b\xb6\xf6\x25\xe2\x6a\x7b\x93\x1c\xe2\x45\x13\x43\xf4\x2e\x8a\x36\x8e\x64\x17\x41\x9e\x7b\x8a\x2b\x28\x5e\xd4\x6c\xd4\x04\x10\x51\xaf\xa1\x97\x4f\xfc\xf0\xd5\xde\x44\x11\x13\x3e\x0c\x97\xd1\xbd\xad\xef\x97\xd1\x53\x27\x78\x78\xe9\xe4\x0e\xc3\x95\xf4\x30\x21\x7d\xbd\x92\xa2\x26\x71\x78\x62\xff\xec\x73\x26\x6f\xe8\x47\xe2\x86\x67\x4b\xda\xd0\x9f\x84\x0d\xcf\x96\xac\x61\xf0\x8b\x0f\x7e\xf1\x76\x1b\xfc\xe2\x83\x5f\x7c\x9f\x7e\x06\xbf\xf8\xe0\x17\x1f\xfc\xe2\x83\x5f\x3c\xb0\x0d\x7e\xf1\x8e\x44\x0d\x7e\xf1\xed\x6d\xf0\x8b\x77\x27\x6d\xf0\x8b\xdf\xdb\x06\xbf\x78\x10\x81\x3d\xf5\x8b\xc7\x49\x84\x10\xf3\x44\xf6\x29\x01\x42\x1f\x92\x1f\x3c\x57\xe2\x83\xde\x25\x3d\xf8\xba\x4c\xb8\x91\x92\x1c\xc4\x3c\x69\xfd\x4e\x6e\xd0\xe7\xc4\x06\x3d\x4d\x6a\xf0\x34\x09\x0d\x9e\x32\x99\x41\xc0\xd1\x2a\x44\x7a\xca\x35\xf3\x9e\xa3\xfd\x0f\x55\xeb\x28\xbd\xc5\x3f\xa6\x60\x0f\x44\x6b\x77\x37\x23\xc4\x65\x99\x81\x72\x01\xd2\x74\x29\x58\x4a\x8a\x52\xbb\xa2\xfd\xee\x30\xf9\x5d\x4a\x73\x1b\x23\x3e\x22\xff\x14\x1c\x46\x04\x74\x32\x31\x3b\x11\xa3\xaf\x85\x5e\x80\x34\x8f\x1f\xa9\xe3\xe3\xfd\x27\x30\x48\xe6\x09\x33\x37\x55\xc5\xe4\xfb\x9f\x53\x00\x1d\xb4\x2e\x70\x5f\x5a\xbf\xb0\xa5\x1e\x3d\xe9\xee\x0b\x7b\x56\xb4\x70\xf1\xde\x78\x46\x6d\xc0\x75\xd7\x5b\x07\x23\xfb\x5b\x1b\x08\x1a\xa6\xf7\x7b\xa2\xfb\x47\x64\x5a\x6a\xc2\x34\x86\xc4\x27\x0b\x21\x54\x57\x56\xe0\xc2\x73\xf1\x45\x96\x4c\x58\x13\xaf\xe0\x80\xf1\xf6\x42\x56\x0c\xab\x41\x94\x15\xcf\xeb\x9f\xb1\xae\x0a\x4c\x2e\x94\xae\x77\x88\x37\x18\x9a\xc1\xab\x0b\x62\x2e\xc1\x50\xa4\x89\x2a\x73\x43\x8a\xcd\xfb\xa1\x6c\xf0\x7b\xc7\x61\x67\x46\x6c\xa1\xc9\xa2\xf1\x0a\x39\x80\xb6\xee\x22\x1f\xdf\xdb\x38\xc4\x4d\x3d\xe4\xc8\x47\x7b\x76\x1c\xdb\x74\x06\x4a\x8f\xee\xcd\xb5\x71\xff\x5e\xb0\x3c\xe1\xb8\xab\xa1\x24\x11\x79\x51\x6a\x30\xb2\x71\x99\x9b\xdd\xc4\x34\x02\x3b\x90\x19\x49\x51\xce\xed\x84\xfb\xf4\x06\x76\x22\xea\xdc\x19\x3c\x45\x7d\xa7\xf3\x2d\x7d\x60\x57\xee\xc0\x0b\xc4\x86\x08\x36\xab\x52\x63\x90\x05\x55\x4d\x44\x4a\x7d\x09\x3e\x92\xc7\xe5\x7f\x04\x5c\x83\x66\xe0\x23\xd5\x10\x47\x16\x6c\xbe\xf0\x9b\xcd\x68\x9c\xa8\xa7\xb7\x36\xe9\x97\x9e\x53\xc1\x9c\x5c\x77\x86\x50\xb6\xa8\x77\xbc\x9d\xf1\x94\xfc\x05\xbf\x85\x74\x3d\xd2\x18\xf7\x81\x55\xc4\x69\x9a\x1a\xa9\x01\xe4\xd8\x9e\x20\x41\x66\xcc\xa9\x1d\x6b\x47\xda\xcd\x70\x57\xd6\xd8\x8f\xb8\xf8\xb5\x1d\x17\xd0\x93\x9d\xf9\x8e\x1d\xc4\xf0\xfb\xac\xbd\x4a\x34\xd5\xe2\x93\x9b\xe6\x09\x39\xb5\x12\x91\xe7\x5f\x46\x1d\x1e\x6d\xa4\x69\xda\x3c\xd5\x76\x66\x7a\xe0\xa1\x8f\xe3\x3c\x8c\x91\x4c\x81\x44\xf4\xf5\x45\x4b\xaa\x40\x9e\xa7\xf2\xca\x33\x24\x57\x20\x2f\x93\x60\x81\x0c\x55\x3f\xfa\x05\x2c\x21\x43\xd5\x8f\x9e\x01\x4d\xc8\x50\xf5\x63\xa8\xfa\xd1\xbd\xf5\x01\x88\x42\x86\xaa\x1f\x3d\x00\xa6\x90\xa1\xea\xc7\x2e\x6d\xa8\xfa\x31\x54\xfd\xd8\x6c\x43\xd5\x8f\xa1\xea\xc7\x50\xf5\x63\xb3\xf5\x15\xd8\x42\x86\xaa\x1f\x91\xab\x7e\xf4\xbc\xfc\xfa\x50\x7b\xbd\x6e\x7d\x4e\x0a\x41\xfa\x16\x8b\x4b\x7a\x17\x8f\x4b\xbe\x90\xc2\xeb\xcf\x55\x75\x7d\x28\xb9\xde\x6a\xbd\x8b\xfd\xfa\x32\x4a\xae\x47\x4d\x20\x41\x9e\xe2\x0a\x7b\xf9\x44\x12\xe4\x6b\xbf\xc5\x22\x26\x94\x20\xc3\x45\xb6\x4b\xfb\x12\x2e\xb2\xa7\x4e\x30\x41\x7a\x90\x64\x82\x0c\xd7\xd9\x5e\x04\xf5\xfd\x3a\x8b\x9a\x7c\x82\x3c\x8f\x1f\xfb\x39\x93\x50\x90\xde\x24\xa2\x20\xcf\x99\x8c\x82\xf4\x2a\x21\x05\x79\xce\xa4\x14\x64\xc0\x12\x0c\x58\x82\x9d\xdb\x80\x25\x18\xb0\x04\x31\xfa\x1a\xb0\x04\x03\x96\x60\x6b\x1b\xb0\x04\x03\x96\x60\xc0\x12\x0c\x58\x82\xcd\x36\x60\x09\x06\x2c\xc1\x80\x25\xd8\x6c\x03\x96\x20\x42\xfb\x22\xb0\x04\x71\x12\x67\x90\x27\x38\xb5\x7d\x4a\xa0\x41\x7a\x92\x44\x83\x3c\x63\x22\x0d\xd2\xc7\x64\x1a\xe4\xab\x36\x53\x47\x4a\xae\x41\x9e\xe0\x34\xf6\x3b\xc9\x06\xe9\x79\xa2\x0d\xd2\xdf\x64\x1b\xe4\xc9\x12\x6e\x90\x27\x4e\xba\x41\x62\x1d\x3d\x1b\xe3\xd9\x97\x74\x36\x96\x9a\x8d\xd0\xd4\x56\x55\xf8\x07\x23\xcf\xc3\x94\x36\x77\x68\x24\xe5\x73\x20\xaf\xc7\xaf\x5f\xbd\x0a\x0f\x7e\x65\x5c\xc3\x1c\x42\x0c\x73\x33\x21\x73\xaa\xb1\xa7\xdf\xfd\xb6\x43\x3f\xf7\x65\x35\xe8\x5f\xb6\x0f\xa7\x9b\xb7\xb3\x2d\xb4\xa4\xe9\x7b\x52\x6f\xa0\x94\x6d\x8e\x56\x0e\x9a\x74\xb6\x51\x37\xf2\x4b\x68\x96\xc3\xc8\x33\x6a\x0b\x19\xf0\xfe\x71\x97\x74\x24\x25\x82\x3b\x11\xc8\xf0\xa6\xae\x1b\xa5\xfb\x2b\x27\x40\x15\xc6\xf9\x4f\xc1\xbc\x76\xc7\xf1\xa9\xb6\xd9\x6c\x0a\xc1\xb8\xf6\x06\x07\xf3\xce\xe0\x37\x84\x4b\x95\x93\x96\x60\x2d\x79\x35\x04\xa8\x2c\x52\xaa\xe1\x38\x44\xf5\x52\x2b\xa5\x21\xc7\x8c\x29\x46\x72\xa2\x88\x8d\x21\x5a\xae\x10\x1f\xb1\x04\xae\x4b\x9a\x65\x2b\x02\x4b\xe6\xe0\x2d\x66\x78\x04\xf7\x30\xad\x82\x66\xfe\x2f\x0b\xc0\xe3\x2e\xc1\xe2\x76\xca\x4c\xb3\x22\xab\x93\x6d\xd8\xe5\xcf\xac\x69\x68\xe6\x72\xcb\xb4\x99\x8f\xa1\x91\x26\x8b\x8e\x04\xac\xb1\x2e\xa4\xc2\x70\x0b\xa9\xf0\x42\xb2\xe9\x54\xd0\x33\x69\x44\x6f\x55\xd9\x8c\x6c\x6a\x1b\xf6\xe5\xe7\xbd\x08\xb8\x2c\xde\xa2\xb4\xd2\x06\xa6\x29\x72\x64\x84\x9c\x6c\xe5\xe0\x59\xad\x5b\xa3\x25\x1d\x75\x1e\xd6\xda\xb5\x97\xe0\x95\x9f\x39\x5b\x02\xaf\x45\xab\x23\x75\x7c\xec\xb5\xb0\x75\x91\xb1\xf3\x98\x21\xa2\x66\xf7\xeb\x70\x5f\x11\x71\x4d\xc4\xeb\x3c\xee\x16\xd1\xf0\x3f\x1a\x22\xd4\x7f\x3e\x2e\x1c\x76\x1e\xda\xb2\x36\x9f\x6b\xa8\xb1\xad\x6a\xa1\xb0\x63\xdf\x3d\xc9\x99\x12\x9e\xfe\x22\x86\x67\x30\x5a\xda\x8b\x27\xae\x55\xf3\x0c\xe9\x2e\x5e\x20\xd5\xc5\x50\x33\x65\xa8\x99\xd2\x6e\x43\xcd\x94\xa1\x66\xca\x3e\xfd\x0c\x35\x53\x86\x9a\x29\x43\xcd\x94\xa1\x66\x4a\x60\xeb\x11\x74\xa4\x97\xb0\x91\xbe\x41\x46\x86\x9a\x29\x9d\xda\x50\x33\x65\x3f\x92\x7a\x07\x09\xe9\x2b\x1c\x64\xa8\x99\x12\x54\xc7\xbd\x9f\x45\xdc\x87\x0a\xee\xfd\x4e\x1b\xd1\xab\x48\xdb\x7e\x45\xd9\xf6\xbd\x7c\xfb\x73\xd4\x6e\x1f\x0a\xb7\x63\xfb\xba\xaa\xfe\x3c\x59\xfc\x6c\xd4\x54\x10\x51\xaf\xa1\x97\x4f\x01\xf1\xd5\xde\x44\x11\x53\x3f\x0c\x97\xd1\xbd\xad\xef\x97\xd1\x53\xa7\x7a\x78\xe9\x34\x0f\xc3\x95\xf4\x30\x21\x7d\xbd\x92\xa2\xa6\x73\x78\x62\xff\xec\x73\xa6\x71\xe8\x47\x0a\x87\x67\x4b\xdf\xd0\x9f\xd4\x0d\xcf\x96\xb6\x61\xf0\x8b\x0f\x7e\xf1\x76\x1b\xfc\xe2\x83\x5f\x7c\x9f\x7e\x06\xbf\xf8\xe0\x17\x1f\xfc\xe2\x83\x5f\x3c\xb0\x0d\x7e\xf1\x8e\x44\x0d\x7e\xf1\xed\x6d\xf0\x8b\x77\x27\x6d\xf0\x8b\xdf\xdb\x06\xbf\x78\x10\x81\x3d\xf5\x8b\xc7\x49\x89\x10\xf3\x44\xf6\x29\x15\x42\x1f\xd2\x20\x3c\x57\x0a\x84\xde\xa5\x3f\xf8\xba\x4c\xb8\x91\xd2\x1d\xc4\x3c\x69\xfd\x4e\x73\xd0\xe7\x14\x07\x3d\x4d\x6f\xf0\x34\xa9\x0d\x9e\x32\xad\x41\xc7\xa3\x45\x4b\x2d\x72\x51\x72\x7d\x05\x72\xc9\x12\x38\x4d\x12\xf3\xd7\xb5\xb8\x81\x3d\xe3\xd9\x5b\xe7\xe9\xf4\x81\x6e\x09\xe3\x29\x4b\xd0\x5e\x76\xbb\x00\xbd\x70\x01\x63\xf8\x1c\xa1\xf6\x41\xa2\xf1\xc9\xfa\x38\x21\x9d\xe6\xde\xc2\x98\x66\xec\x7a\xdf\xf9\xb2\x33\x34\x15\x22\x03\xba\x8f\xc7\xd6\xc9\x61\x20\xf7\x64\x7e\x61\x0c\xe6\xbd\xbb\x9e\xeb\xd1\xc9\x14\x32\xc1\xe7\x2e\x7a\xda\xb1\x88\x7d\xb7\xcc\x59\xdd\x9d\xf3\x68\x26\xa5\x94\xc0\x75\xb6\xc2\x69\xc6\x52\xf8\x68\x32\xc9\xc5\x72\xff\x1d\x79\x8d\xbc\xc3\xeb\x95\x54\x93\x0c\xa8\x79\x0f\x0e\xf5\x8b\x18\xee\x43\xc9\x65\x07\xda\x2b\x17\xac\x0d\x9f\xef\xb4\xfe\xfb\xdf\x82\x9d\xee\xbd\xf6\x69\xf0\xba\x0e\x4a\x3e\x09\x1a\x9e\x1a\xf3\x81\xdc\x6c\x25\x4a\x72\x4b\xad\x7a\x22\x4b\x8e\xfc\x0f\x27\xaa\xc3\x22\x07\x08\xf2\xdd\x0d\xc4\x63\xbc\x44\xf6\xfc\x59\x88\xc1\x96\xca\x79\x27\x71\x24\xc6\xc5\x7f\x2a\xe7\xa5\xd5\xbe\xdc\x51\x04\xae\xe5\x0a\x33\x41\x74\x63\xe2\xd7\x8b\xd6\x09\xc9\xe9\x1c\x0e\x15\x39\xfb\xf0\xd6\x5c\x11\x08\xd4\x61\x33\x2b\x07\xbb\x2b\xa3\x90\x62\xc9\xd2\xae\x77\xc6\x67\x2a\x19\x9d\x66\x46\x93\x9c\x81\x04\x6e\xa4\xd3\x6f\x8e\x3e\x9f\x7e\xfa\xe9\xe2\xf4\xc3\xbb\x63\xd4\x29\xe1\xae\xa0\xdc\xb0\x83\x52\xd5\x09\x64\x1c\x85\x87\x8a\x00\x5f\x32\x29\xb8\x99\x05\xb4\x65\x51\xb2\x74\x9d\x76\xa2\xa8\xc6\x57\x48\x50\x22\x5b\x42\x6a\xb3\x48\x54\x04\xd6\x28\x97\xa2\xd4\xde\xaa\xe7\x21\x2a\x25\x4f\x16\x94\xcf\x21\x9d\x90\xb7\xa2\x34\x2f\xf6\xcd\x37\xf8\x12\x12\xd2\x32\x81\x6e\x7a\x83\x35\x0b\xdb\x93\xfb\xcd\xc8\x0b\x18\xe6\xaa\x46\x88\x0a\x01\x95\xd0\xc2\x4f\x4d\x73\xf6\xd4\x8a\x6b\x7a\xf7\xc6\x66\xa1\x38\xf8\xa6\xf1\xd5\x41\x77\x7c\x57\x21\x85\x79\x15\x2b\xb8\xd9\xb7\xcf\x98\x06\x49\x33\x72\xd0\x1c\x61\x42\xde\x19\xba\x20\x6d\xae\xad\x4d\xc3\x02\x4b\x90\x68\xef\x73\x2b\x3b\x22\x12\xe6\x54\xa6\x19\xa8\x6e\x86\x16\x31\xab\xae\x70\x6b\xbe\x70\xbb\x0a\x2a\x3b\x26\x17\x7a\x12\xca\xb8\x7d\xfb\x20\x30\xcd\xc7\x4c\xbc\x21\x0b\xad\x0b\xf5\xe6\xe4\xa4\x56\xe4\x27\x4c\x9c\xa4\x22\x51\x27\x9a\xaa\x1b\x75\xc2\xb8\x61\x7e\xe3\x94\x6a\x3a\x6e\x70\xdd\x13\x2b\xc8\x8e\x13\x91\xe7\x94\xa7\x63\xea\xce\xf1\xb8\xda\xd9\x27\xbf\x76\xa2\xde\x98\x56\x4f\x31\x3e\xa6\x63\xb5\x80\x4e\x2b\x17\xa6\x7c\x05\x28\x5d\x41\xca\x96\x7b\xf5\x97\xe2\xaf\xef\x2a\x76\x6a\x67\x6e\x42\x2e\x84\x76\x89\x75\x1c\x4e\x10\x2f\x47\x5c\x94\x98\x1c\xf7\xdd\xc5\xf5\xa7\xbf\x5e\x7e\x3c\xbf\xb8\x1e\x18\xef\xc0\x78\xb1\x0d\x8c\x77\x60\xbc\x1d\x06\xee\xc8\x78\x81\x2f\x5f\x8a\xe9\x7a\x95\xb3\xc1\x60\xaa\x9d\xe5\xd0\xea\x15\xd6\xb8\x5a\xb6\x6e\x3b\x2a\xca\xc6\x7c\xb1\x05\x6e\x4d\xf6\x3b\xbe\xfc\x4c\xdb\x18\x03\xbe\x75\x0a\x89\x7b\xc0\xea\xbf\x67\x61\x13\x18\xec\xab\x09\x45\x02\x75\x52\xf7\x6c\x0b\x47\xe9\x98\xa1\xbb\xdb\x7e\x5b\xcb\x77\x41\xf3\xca\xf2\xb8\x6d\xd5\x26\xe4\x83\xb7\x66\x90\xb3\x9f\xce\xdf\xbe\xbb\xb8\x3e\xff\xf6\xfc\xdd\xa7\xee\xb6\xba\x08\x46\x70\xb4\x97\x46\x9a\x80\x20\xd3\xf7\x3e\xe2\x4c\xc0\x30\xb5\x20\x54\x48\x58\x32\x51\xaa\x6c\x55\xd9\xa4\xb7\xb3\xab\x75\x3e\x45\x28\x0f\xa1\x80\xf2\x55\x65\xa3\xdc\x3a\xe0\x9a\x28\xb6\x4d\xac\x0a\xb1\xee\xbe\xac\x40\xe6\x88\x88\x21\x96\x05\x8c\xbf\x45\xa0\xdb\x5d\x38\x0b\x18\xb7\x93\x58\x77\x9f\x88\x16\x40\x47\x5b\xb8\x0b\xe8\xe8\xad\x8d\xe1\xc1\x3b\xfd\x20\x60\x6a\x62\x71\xb2\x6f\xa5\xc8\x23\x71\xb3\x2b\xcc\x37\x57\xc5\x54\x6d\x3b\xaa\x87\x0e\x15\xdc\x12\x8f\x9d\xa2\x57\x45\x35\x99\xcf\x03\x23\x9b\xa2\xc0\x29\xe2\x20\x5a\x13\xc1\x67\x6c\xfe\x81\x16\x3f\xc0\xea\x13\xcc\xc2\x9c\xb8\xed\xf9\x46\x47\x99\xc3\x55\xa2\x4b\xce\x48\x36\x76\xb0\x30\x67\x59\x34\x34\x4a\x2c\xcc\x73\x38\xde\x39\x1e\x3c\x39\x0a\x34\xb9\xb5\x90\x2e\x32\xb4\x0e\x8d\x8c\x85\x5c\x8f\x02\x40\x0d\x13\xf8\x7c\x8b\x0f\x3b\x6d\x4a\x8f\xee\x7a\x88\x82\xde\xdd\x4d\xe3\x4e\x04\x4f\xa0\xd0\xea\x44\x2c\x8d\x68\x02\xb7\x27\xb7\x42\xde\x18\x15\xfa\x96\xe9\xc5\xd8\x9e\x1d\x75\x82\xce\xfd\x93\x5f\xe3\x7f\x22\xd0\x76\xfd\xf1\xed\xc7\x37\xe4\x34\x4d\x89\xc0\xdb\xad\x54\x30\x2b\x33\x8b\xcf\x51\x13\x42\x0b\xf6\x19\xa4\x62\x82\x8f\xc8\x0d\xe3\xe9\x88\x94\x2c\xfd\x53\x9f\x36\x93\x28\x2c\x34\x2d\xf2\x86\xba\x42\x34\xc5\xaa\x75\xeb\x57\xbc\xd0\xdc\xda\x4c\x2b\x3c\x62\xde\x3d\xea\x04\xd8\x48\x53\xb3\xbf\x63\x7b\xb3\x3d\x55\xc1\x20\xdc\x1b\x71\x2f\x9e\xe0\xe3\x5b\xdf\x5c\x16\xe3\xe9\x4e\x71\x21\xd2\x37\x44\x95\x45\x21\xa4\x56\x24\x07\x4d\x53\xaa\xe9\xc4\x1c\x9e\x51\xfb\x4f\xc4\xcb\x8c\xc8\x3f\xaa\x0f\x6d\xd8\xf4\x8f\x87\xff\xf1\xc3\xbb\xbf\xfe\xe7\xe1\xdf\xff\xd1\xfc\x0e\x25\x0d\x1b\x71\xd0\x78\x20\xf0\x15\x54\x01\xc9\x84\x8b\x14\x2e\x90\x3a\xfc\x53\xb5\x00\x17\xee\x0b\x4d\x75\xa9\x26\x0b\xa1\xf4\xf9\x65\xf5\x67\x21\xd2\xf5\xbf\x02\xe3\x1e\x7a\x78\x65\xe3\xda\x5e\x52\xdd\x3d\xb7\x35\x89\x7a\x71\xd7\xdc\x31\x32\xf7\x71\xbd\x56\x49\xb8\x93\x05\xe4\x14\xff\xf9\xad\x9f\x02\x23\xd7\xde\x4a\xa6\x35\x62\x70\x5c\x6a\x7c\x31\x1b\xf9\x98\x7e\xab\x0f\x2c\x5f\x47\xa8\x19\x1e\x91\x5b\x57\x2b\x18\x79\xc2\x70\x46\xdc\x6c\x59\x0e\x50\x67\x85\xd8\xc0\xc7\x9d\x5e\x9e\x93\xa5\x9d\xe1\x1e\x4d\xce\x53\xb1\x6b\x9f\xb6\xfb\xdb\x5e\xb3\x6d\x4f\xa5\x5f\xc4\xca\xd4\xf3\xc6\x22\xe6\xab\xe4\xe3\x24\x63\x39\x73\x61\x56\x86\xb3\x80\xd2\xa1\x72\xd0\x91\xed\x72\x92\x14\xe5\xc8\x75\x3f\xc9\x21\x17\x72\x55\xfd\x09\xc5\x02\x72\x90\x34\x1b\x2b\x2d\x24\x9d\xc3\xa8\x1a\xdc\xfe\xac\xfa\xcb\xfe\xb0\x45\xde\xe6\xaf\xad\x2d\xad\x06\x6b\xb9\x2b\x2a\x14\xf5\xdf\x43\x96\xed\xd7\xad\x27\x1c\xbb\xda\x56\x17\xf1\x75\x90\xc3\xca\x0b\x60\x35\x9c\x6a\x16\xd1\x80\xb1\x14\x59\x99\x83\x1a\x55\x02\xab\xb5\xb2\xf1\x25\x59\x52\xa9\x0e\xfb\xc3\x87\x08\x49\xd9\x92\xa9\x18\xd1\xa0\x5b\x24\x6a\xe6\x02\xab\x45\xa9\x8b\x52\xbb\x9a\x4e\x95\xc9\xfe\xae\x10\x0a\x6d\x73\x55\xa5\x81\xd6\x6d\xf6\xfa\x20\x98\xa4\x82\x6a\x0d\x92\xbf\x21\xff\xeb\xe8\x6f\xbf\xf9\x79\x7c\xfc\xa7\xa3\xa3\x1f\x5f\x8d\xff\xfd\xef\xbf\x39\xfa\xdb\x04\xff\xf1\xaf\xc7\x7f\x3a\xfe\xd9\xff\xf1\x9b\xe3\xe3\xa3\xa3\x1f\x7f\xf8\xf0\xdd\xf5\xe5\xbb\xbf\xb3\xe3\x9f\x7f\xe4\x65\x7e\x63\xff\xfa\xf9\xe8\x47\x78\xf7\xf7\x1d\x3b\x39\x3e\xfe\xd3\x37\xc1\xa4\x53\xbe\xfa\x18\xc8\xbd\x6d\x1b\x47\x2b\xc9\xb5\xde\x63\xa4\xf8\xd4\xd6\x55\xc8\xb8\x1e\x0b\x39\xb6\x5d\xbf\x21\x5a\x96\xa1\x41\x5b\x7e\x7b\xc5\x3e\xff\x9f\x3c\xd7\xac\x6f\xb3\x4a\x0a\xe9\xd1\x01\x7f\x2a\x41\x43\x41\x22\x41\x3f\x87\x51\xd2\x8e\xe4\x05\xbb\xb5\xe0\x9a\xaf\xed\x06\xfd\x25\xd8\x29\xab\x62\x43\xb8\xae\xb5\xe8\x3e\x93\x22\x9f\x90\x86\xd3\x76\x89\x21\xf8\xee\xb9\x1b\x08\x4c\x55\x46\x06\xbb\x66\x48\x1b\xec\x9a\xeb\xed\xcb\xb4\x6b\x5e\xd9\xe3\xf4\x0b\x34\x6a\x02\x5f\x76\x75\x57\xc6\xc4\x68\x79\xd5\x56\x0b\x52\x88\xa2\xcc\xa8\xbe\x07\x97\x10\x09\xb0\x55\x25\x0e\xf5\xa8\x8b\x1a\x82\x6b\xc5\x96\x7c\x3b\x4a\x86\x9c\x66\x19\x61\xdc\x32\x61\xd3\x41\xa7\xd1\x3d\xb8\x41\x82\xd5\x79\x09\xb5\x28\xab\xa5\x79\xd5\x5b\x57\x8d\xb2\x89\xe6\x55\x44\x69\x2a\x35\xe3\xf3\x89\xad\x56\x69\x45\x01\xe7\x41\x67\xbc\xaa\x59\xd9\x89\x9c\x4a\xd5\xa8\x62\xf6\x37\xea\xee\xda\x40\x46\xa5\xfd\xf4\xe0\x1b\x68\x7a\x83\x08\x96\x04\x52\xe0\x49\x47\x2c\xc4\x67\x9b\x23\xc0\xaf\xc3\x74\x65\x66\xe2\x1d\x5f\xda\x71\x29\x49\x4b\x0b\xba\xb4\xd7\x64\xbc\x71\xbf\x2e\xc8\x9e\x39\xc3\x0e\x2b\xd0\x40\xee\xa1\x44\x51\x19\x95\xaa\x9c\x40\x95\x17\xa7\xdb\xee\x0d\x96\x10\xc3\xe5\xb1\x0a\x00\x10\x24\x68\x6f\x08\x62\xb5\x7b\xab\x2d\x80\x7d\x0d\x98\x89\x70\xd1\x2c\xae\x58\xf6\x14\x22\x59\x5f\xc5\xb1\xe7\x17\xc5\x22\x89\x61\x71\x44\xb0\x3d\xdc\xca\x31\xc5\xae\x38\x22\xd7\x53\xd8\x0a\x0a\x09\x33\x76\x17\x89\x71\x9d\xf2\xda\xa0\xca\x52\xe0\x9a\xcd\x98\x99\x57\x61\x86\x29\x80\xa7\xbe\x38\x35\x71\xf5\x2f\x5a\x33\xde\x4b\x3c\xb0\xd5\x6e\xe3\xf2\xf6\xab\x6d\x9a\xf5\xc0\xd8\xc9\xc0\xd8\x03\xda\xc0\xd8\x77\xd2\xab\xbf\x76\xae\x8e\xd1\x96\x2f\xa5\x42\x9f\xb5\x83\x3e\x91\x1f\x3c\x65\x5c\x5c\x75\xca\xea\x54\x1e\x27\x38\x72\xb7\xc3\x74\x5d\x25\xc3\x32\x6a\x6e\x75\x93\x69\x61\xa1\xf8\x64\xc1\xe6\x66\x37\x65\xb0\x84\xcc\xc9\xfd\x24\xa7\x9c\xce\x6d\xbe\x3b\x2d\xaa\x12\x0e\x42\x62\x3a\x78\xc9\x3a\xe6\xf0\x59\x8b\x9e\x45\xbd\xda\x30\x90\x4c\xd0\x14\xbf\x94\x22\xcb\x40\x2a\x92\xb1\x1b\x20\x6f\xa1\xc8\xc4\xca\xa5\xac\xe3\x29\xb9\xd2\x54\x9b\xc3\x7f\x05\xba\x13\xec\x28\xe8\x60\x23\xc1\x97\x65\x96\x5d\x8a\x8c\x25\x9d\x6c\xd4\x31\xb6\xe2\x39\x6e\xc0\xa2\xcc\x32\x52\x20\x21\xdd\xf6\xe1\x47\x8e\x17\xc8\x69\x76\x4b\x57\x6a\x44\x2e\x60\x09\x72\x44\xce\x67\x17\x42\x5f\x5a\xd5\xb6\x5b\xbf\xcd\x38\x01\xdb\x39\x61\x33\xf2\x06\x73\x5d\x6b\xa2\xe9\x1c\x0d\x2d\x1e\x24\x33\x32\x1b\xaa\x39\xa8\xe5\xf1\xb7\x4c\xbd\xa4\xc5\x21\xfc\x94\xfe\x1a\x47\x37\xb7\x62\xe7\x53\x1b\xb4\x57\x33\x36\x83\x64\x95\x64\x2f\xc6\x30\x4f\x13\xc4\x2d\xd6\x99\x01\x1b\xec\x44\xad\x94\x86\xdc\x27\x6a\x42\x43\x13\xe3\x44\x82\x2a\x04\x57\xe8\xcc\xac\xb9\x44\xf5\x22\xd6\x70\xd7\x11\x6c\x18\xd1\x0e\xd5\x59\x1c\x0d\x15\x44\x0b\xa1\xf4\x95\xa6\x52\x77\x15\x27\x62\x49\xa0\x97\x9e\x10\x73\x92\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x21\x5b\x11\x3a\xd3\x98\x9e\xab\x65\x5a\x4d\x24\xe0\xbc\xfb\x0c\xc6\x0b\xca\xd3\x0c\x24\x99\x51\x96\xa9\xee\x98\xd6\x0d\x13\xae\x06\x99\x33\x8e\x36\x55\x8b\x8d\x42\x9b\xae\xf9\x2b\x49\x84\x4c\x5d\x22\x2c\xa6\x95\xff\x2a\x88\x89\x9a\xf6\x11\x05\xb1\xc6\xf6\x5e\x87\x96\x91\x69\x26\x92\x1b\x45\x4a\xae\x59\x66\x5f\x5e\x88\x1b\x92\x88\xbc\xc8\x90\x9d\x74\x1e\xba\x3b\x97\xaa\xfe\x39\xae\x0e\xd8\xd8\x50\xa5\x4e\x7e\x5d\x7f\x85\x1f\x74\x24\x2e\x82\xee\x16\x43\x73\x83\x3b\x48\xa2\x25\x7c\x7c\x77\x07\x49\x23\x2b\xaa\x59\x49\x8a\x6c\x0e\x13\x3a\xd1\x9b\x08\x25\x93\x7a\x53\x11\x25\x20\x97\x4b\xb3\xc5\xf6\x32\x9f\x59\xb2\x7c\x31\x04\x47\x25\xc9\x18\x07\x5b\xf7\x0b\x93\xbd\x10\x86\x75\xd6\xda\xc7\xd0\x7a\x5e\x9c\xb2\x4a\x52\x26\x31\xad\xe5\xca\x87\xfd\x05\x93\xe6\x69\xc1\xcc\x8f\x42\x68\x72\x74\x78\x72\x78\xbc\xe1\x4a\x3b\x34\x82\x78\x06\xf6\x0e\x9c\xb8\x8c\x32\xd5\x4b\x29\x96\x17\xd9\x0a\xdf\xe3\x30\x1d\x11\x66\x78\x6c\x30\x65\xe6\xea\x93\x25\xf7\xb3\xe2\x32\xe0\x8c\x88\x12\x44\x4b\xea\x93\x2e\xdb\x4f\xcd\x43\x5a\x96\xee\xf6\x3e\x3a\xfc\xf9\x70\x44\x40\x27\xc7\xe4\x16\x6b\xc7\x99\xe9\x9b\x90\x6b\x61\x94\xf0\x70\xa4\x99\x27\x64\x25\x4a\xc2\xc1\x66\xf7\x85\xbb\x22\x63\x09\xd3\xd9\x0a\xef\x16\x22\x4a\x6d\xf3\xa5\x51\x1d\x92\xb9\xa7\xd9\xde\xdd\x31\xed\x42\x18\x0c\xb3\x7e\x85\xbb\xc9\xde\x4f\x84\x1a\xcd\x63\x09\x27\x0b\xa0\x99\x5e\x58\x80\x2d\x17\x7c\xfc\x4f\x90\x02\xb3\xfb\x70\xf7\xcd\x57\x57\x80\x27\x8a\xd1\xc3\x5c\x43\xdf\x41\x67\x11\x85\xac\xb3\x8c\xef\xaf\xaf\x2f\xbf\x03\xbd\xc6\x75\xcd\x28\x1e\xf6\x8c\x36\x58\x90\x33\x21\xf3\x1e\xb0\xdf\x38\x78\xac\x31\x29\x84\xec\xc3\x2d\xb0\x10\x2a\x68\x2d\xc9\x13\x5c\x01\xdf\x0b\xa5\xd1\xfe\xe2\x14\x05\x8e\x25\x39\x45\x1b\xc3\xeb\x00\x7b\xe4\xfc\x72\x42\xfe\x2a\x4a\x33\x21\x53\x3a\xcd\x56\x55\xba\x4c\x05\xe1\x85\x91\x0e\x0c\x29\x07\x86\xc3\x9b\x0d\xf9\x3d\xd0\x14\xa4\x42\x06\x0a\x34\x52\x62\xfd\x08\x18\x9f\x06\x6d\x51\x97\xf2\xac\x54\x5a\xe4\x64\xe1\x5e\xbb\x9d\xea\xc7\x1d\xce\x09\x1e\x60\x9f\xef\x41\x42\x61\x99\xac\xfb\xcd\x57\xc7\x42\x37\x58\x97\x9d\x77\xf7\xf9\x14\x33\xe9\x27\xcd\x69\x33\xb3\x56\x65\x12\xe0\x76\xb2\xcc\x56\x8d\x80\x4d\xeb\x71\x09\xb0\xce\x49\x80\xd6\x3b\x42\x18\x4d\x70\x4f\x71\x0b\x80\xc5\x41\x67\x92\x27\x2b\x78\x64\x04\x4e\xb7\xf9\xac\x41\xb8\xbb\x29\x7b\x5b\xe7\xac\x2e\x01\x9c\x50\x2e\x38\x4b\x68\xc6\xfe\x09\x29\x29\x0b\xc1\x5d\x38\x06\x4a\x9e\x09\x55\x30\x46\xc4\x19\xd7\xae\x8a\x44\x9d\x8e\xc6\x70\x07\x2d\x04\x8a\x63\xda\x17\xfa\xb5\x54\xf7\xb7\xce\xd5\x13\xac\xfa\xc6\x62\xc5\xd9\xf1\x24\xe6\x0c\x14\x11\xc2\x2c\x37\x83\x2c\xb5\x20\x34\x49\x30\x27\x8e\xbd\x51\x90\x37\x2a\x90\xcb\xf0\x2d\x10\xef\xd5\x45\x77\x6b\x9c\x6f\xb1\x4f\xb9\xf5\x0c\x4b\xc2\xcb\x7c\x0a\xb2\x8e\x50\x97\x7a\x73\x4e\x03\xf1\x9d\xad\x61\xed\x70\xde\x09\xe9\xc5\x00\xca\xe7\x40\x5e\x9b\x91\xff\xf8\x87\x3f\xfc\xee\x0f\x11\xc6\x31\xaf\x57\xe1\x46\x39\x39\x3f\xbd\x38\xfd\xe9\xea\xf3\x19\xa6\x6c\x0a\xed\x3e\x52\xe8\x53\xec\xc0\xa7\xa8\x61\x4f\x4f\x1a\xf4\x84\x11\xe4\xc1\x8c\x30\xf6\x91\xb8\x42\xaa\xcc\x26\x2c\x95\x4d\xf3\xe4\xd4\x86\x46\x59\x04\xa3\xe9\x84\xef\xce\xa6\xf3\xcb\x30\xac\x5e\x70\x2a\x95\x01\x14\xd1\x34\xf2\x2b\xd3\xdb\x3a\xfe\x35\x2d\xa5\x2d\x50\x50\xb9\x7b\x6a\xeb\xb7\x73\xf3\x20\x15\x64\x0a\x33\x21\x81\x4c\x01\xa7\xbe\xb2\xd5\x7f\x45\x9a\xbb\x82\x44\xf0\x34\x44\x7e\x8f\x25\x8f\x3a\x4a\xa2\x9e\xc6\x2b\xdb\xa7\xb7\xbf\xd6\x97\x8c\x1b\x0c\xd5\x40\xb3\xd2\x71\x76\x7e\x1c\x0e\x6a\xa3\x7f\xb1\xb7\x3f\xfe\xbe\xbb\xab\x29\x29\xae\x44\x72\x13\xd1\xb8\x15\xc8\xda\xde\x9a\x33\x98\x58\xaf\xda\xf5\xd9\xa5\x25\xce\xac\xcc\xc5\xc7\xeb\x3a\xd4\x1f\xc3\x1e\xc8\x7b\xef\xe5\xf9\xde\xf9\xdd\x28\x4f\xc9\x0d\x14\x61\xaa\xa1\xcf\x98\x37\xa5\xc9\xcd\x2d\x95\x29\xfa\xb4\xa8\x66\x53\x96\x31\x5b\x1c\x14\x24\x60\x0e\x02\x2e\x6c\x4c\x9d\xe5\x12\x62\xd6\x28\xcf\x16\x98\x64\xb3\xe1\xeb\x46\xbf\x9a\x53\x23\x66\x94\x65\xe8\x55\x2e\xb9\x66\x39\xb8\x80\x8f\xa4\xa8\x1c\x8f\x4d\x14\xc2\x57\xc4\x7e\xbe\x56\xc3\xe1\xe1\x47\x0f\xa6\xdb\xdb\x00\x18\x1a\x13\xfd\x75\xab\x0b\x8e\x83\xdb\x64\x12\x83\xba\xb0\x4f\x1b\xd4\x85\x8e\xea\x42\x21\xe1\x4a\x8b\xce\x32\x69\x34\x20\x8b\x25\xe3\x1e\x18\x8b\x13\x55\xe9\xbd\xf8\x92\xb4\x04\x5b\x17\xb8\x33\x01\xa7\x97\xe7\x95\x1b\x4b\xb4\x30\x24\x36\x4a\x51\x95\xc9\xc2\x7b\x24\x39\x28\x75\x82\x88\x95\xb2\xb0\x36\x62\xbc\xe3\x4a\x09\xdd\xd1\x33\x85\x04\xc8\x71\x1e\x47\x75\x2e\x09\xf3\xba\xc0\xed\x87\xa0\x13\xeb\xa2\x6e\xdc\x9a\x58\xff\xcd\x4d\x57\x58\xd1\xc4\x7a\x62\x13\x49\xd5\x02\x30\x4d\x31\xdc\x31\xad\xec\xa0\x97\x98\x71\xc1\xcf\xb8\x11\x1c\xe6\x92\x26\x40\x0a\x90\x4c\x18\x61\xa3\xe4\x3a\x15\xb7\x9c\x4c\x61\xce\xb8\xf2\x2b\x16\x42\x92\xdf\x12\x88\xd0\x61\xaa\xaa\x1e\x33\x21\x9f\x5a\x59\x9a\x5d\x6e\x99\x44\xd4\x3c\xd3\x4d\x51\x58\xb9\xe7\x7a\x4a\x50\x8a\xc1\x6d\x50\x62\xf9\xc2\x6a\xe3\xf9\x28\x5a\x7d\xff\x0c\x75\xdf\x10\x76\x66\x8f\x4a\x8e\x2f\x9a\x42\x46\x57\x36\x5e\x74\xc6\x38\x1a\x72\xa5\x3a\x9e\x84\x43\x9e\x3a\x13\x28\x64\xa3\xcf\x7b\x77\x06\x56\xa2\xa7\xc9\x22\x44\xb2\x1b\xb0\x55\x8f\xb5\x01\x5b\xd5\xb1\x0d\xd8\xaa\x7d\xdb\x80\xad\xda\xb7\x0d\xd8\xaa\x3e\x01\x03\x06\x6c\xd5\x60\x22\x59\x6f\x03\xb6\xea\xa1\x36\x60\xab\x06\x6c\x55\xab\x0d\xd8\xaa\x1d\xda\x80\xad\xda\xb1\x0d\xd8\xaa\x01\x5b\x35\x60\xab\x06\x6c\xd5\x7e\x6d\xc0\x56\x75\x6f\x83\xb3\x64\xc0\x56\x05\xb5\x01\x5b\x35\x60\xab\x06\x6c\xd5\x80\xad\xba\xb7\x0d\xd8\xaa\x01\x5b\xb5\xb5\x0d\x86\xc3\x8d\x36\x60\xab\xb6\xb4\x01\x5b\xb5\xdf\x38\x83\xba\x10\xd6\x59\x74\x75\xc1\xe3\x84\x2e\xa5\x98\xbe\x58\xe6\xa7\x4b\xc4\x60\xb0\xc4\x81\x94\xc4\xac\x95\xcd\xc9\x12\xd8\x31\x8b\x53\x1b\x1c\x63\xcb\xe4\xbb\xf4\x3e\xcc\x1d\xae\x0a\x18\xf5\x92\x99\xa2\xf6\x46\x8f\xf8\x0c\x78\xea\xa4\x10\xf6\xff\x6a\xec\x48\x03\x34\xd2\xd9\x7c\xfd\xc2\xa9\xab\x42\x90\x22\xcf\x83\x12\xe9\x09\xa4\x26\x02\x32\x24\xe6\x25\xd6\x53\x44\x48\x3f\xd1\x20\x7d\x44\x82\xbc\x04\x0a\xe4\xc5\x11\x20\x71\x5c\x97\x11\xdc\x96\xc1\xa2\x82\x03\xf8\x5e\x2f\x24\xa8\x85\xc8\x3a\xf3\x85\x58\x3c\xe1\x03\xe3\x2c\x2f\x73\x73\xc4\x94\x39\xfa\x6c\x59\x81\x90\x55\xa5\xb0\xda\x2b\xd8\x3a\x5f\xcd\x83\x2c\x05\x2c\x4e\x49\x59\x66\x76\x00\x26\x07\x5c\xd0\xa5\x61\x0b\xaa\x4c\x12\x80\x34\x44\x49\x6c\x5a\x05\x7f\x37\xa9\x28\xb4\x05\x56\x98\x22\xaf\xc3\x6e\x84\x30\xb9\xb1\x61\x1c\xf9\xdd\x6f\x3b\xf5\x31\x97\x45\x9c\x9b\xf3\xbb\x4f\x97\x67\x8d\x9b\x93\x72\x7f\x71\x32\xbe\x14\x19\xae\x06\xb5\x0f\x19\xfd\xe4\x05\xaf\xd1\x70\x65\x3d\x48\x51\x8f\x71\x8b\x87\xea\xa2\x6d\x8f\x9d\x51\x17\xdb\x0e\xa7\x39\xae\xa5\xad\xd9\x3e\x79\x06\x75\x2f\x96\x0a\x15\x7e\x1c\x08\x9a\x5e\xf1\xc5\xfb\x22\x23\x5d\x59\x72\x2a\xab\x6d\x43\xd3\x77\x94\x22\x8a\x2e\xa3\x49\xb5\x36\xb8\x7e\xdf\xe3\x45\x77\xb6\x80\xe4\xe6\x93\x05\xf4\x04\x91\x71\xa4\x00\x2a\x55\x63\xce\xf4\xa2\x9c\x4e\x12\x91\x9f\x18\x06\x62\xff\x6f\x9a\x89\xe9\x49\x4e\x95\x06\x69\xb4\x0f\x77\x07\x8f\x13\x43\x01\xe3\xf3\x49\x9e\x1e\x4f\x7e\xf5\xab\x20\x22\xce\x9d\xed\xd1\x45\x89\x34\xb2\x3c\xa3\x23\xc3\xa5\x10\x9f\x82\x61\xff\x02\xcd\x84\x8d\x8a\x54\x66\x56\xc2\x77\x69\xc0\x6d\x1b\x88\xaf\x7c\x7e\x6c\xe5\xc0\x6d\x49\x04\x73\x68\x4c\x66\xd0\x0f\xfc\xe4\x93\x61\x27\xa3\xc1\x98\x23\x60\x26\x7b\x84\x97\xec\x8d\xc2\xd1\x17\x8c\x64\x0f\xcb\x1b\x47\xc0\x45\xc6\xc0\x44\xc6\xc3\x43\xf6\xb5\x0a\xf0\x93\x61\x20\xbf\x08\xfc\x63\x44\xef\x40\x24\xdc\xe3\x73\x60\x1e\xa3\xbc\x75\x28\xd6\xf1\xf9\x70\x8e\x71\x5e\x37\xa6\x92\x18\x78\x72\x5f\x00\xd7\xf8\x1c\x4e\xca\x27\x73\x50\x46\x70\x4e\xc6\x74\x4c\x46\x73\x4a\x3e\x19\x7e\x31\x1c\xbb\x18\x55\x65\x7f\x16\xcc\x62\x4c\xbc\x62\xf0\xfa\x32\xce\x34\xa3\xd9\x5b\xc8\xe8\xea\x2a\x0c\xbb\x16\x6b\x25\x2e\x36\xf0\x6d\xd6\x36\xdc\x46\x38\x2e\xa8\x2b\xcb\x0d\xa9\x07\x38\x7a\x27\xb2\x93\x54\x11\x03\x65\xdf\x2f\x08\xed\xd8\x33\x97\x2d\xe9\x8d\x0d\xda\x26\x55\xe8\xc9\xae\xf9\x5e\xdc\x12\x31\xd3\xc0\xc9\x11\xe3\x7e\xe7\x1c\x37\x8c\x29\xb5\x0f\x22\xd8\xa9\x60\x7a\x7d\xfd\xca\x0f\xf2\xf5\x39\x17\xd0\xfd\xa2\x54\xaf\xdd\x4b\x8e\xc6\xc7\xfd\x4b\xee\xc1\x59\x99\xb5\x7d\x4c\xd6\xef\x14\xc7\xc1\xf4\xba\x2e\xe4\xfb\x1a\xe9\xa9\x58\x11\xe5\x29\x71\xc9\x79\xbe\xbe\x7d\x12\x8c\xce\x6d\xeb\x20\x15\x9c\xf6\x31\x77\xd4\xf5\xd9\xe5\xe0\x8d\xea\x97\x7d\xf4\x85\xa0\xa2\x5f\x9f\xc6\xf5\xfc\xd0\xd0\x41\xe3\xfa\xa5\x68\x5c\x8d\xbc\x58\xdf\x49\x9a\xc0\x65\x9f\x04\x38\xcf\x40\xea\xb8\xa6\x5a\x8e\xab\xd8\x05\x07\xb0\xf1\x2e\x75\xd6\x33\x4c\xf0\x35\x2b\xb3\x6c\x65\xcd\x7d\xad\x14\x78\xdd\xb7\xd6\xf5\x02\x36\x72\x87\xb5\xa2\xae\x1a\xd4\xd5\xfa\x49\x21\x85\x93\x4a\x64\xc9\xb9\xb9\xad\xdc\x71\x32\xc4\x1b\x7d\x44\x01\xef\x6e\xf9\xa6\xad\xcc\x66\x8a\xcd\xcd\x74\x19\x09\x03\x93\x9e\xd5\x11\x17\x2d\x42\xcc\xa8\x33\x21\x13\x36\xcd\x56\x64\x41\x33\xa3\x30\xdd\x32\xbd\x20\x94\xdc\xb0\x2c\x73\xdd\x74\x9f\xa8\x2b\xd0\xd6\xb9\x6b\xa5\x9a\x4c\xf0\x39\x4e\x06\xb5\x84\xc0\x5d\x01\x89\x19\x33\xc9\x80\xf2\xb2\xb0\x74\x1a\x19\x69\x25\x4a\xe9\xe9\xec\x3e\xbc\x77\x2d\x57\x32\x15\x67\xd9\xc8\x4f\x79\x3b\x07\xde\xe6\x9e\xaf\xad\xbf\x0a\x52\x97\xbe\xee\x96\x29\x18\x61\x9f\x9d\x69\xb2\xb4\xf8\x72\xd8\x76\xdf\xd8\xcf\x0a\x29\x96\x2c\xb5\x7e\x6d\xbf\x2d\x8c\xb4\xd3\xfd\xfd\x3f\x63\xbf\x9e\xb5\x72\xc1\xc7\x1c\xe6\x14\x45\x64\xc7\xd0\x2c\xc2\xd1\x8e\x6f\xf1\x74\x3c\x65\x09\xd5\x60\x14\x68\x51\xb4\x72\x5b\x2e\x19\xed\x4c\x89\x79\x9f\xc6\x8e\x22\x47\x5c\x10\x81\x01\x51\x25\x67\x7a\x85\xce\xb7\x45\xa9\x49\x2a\x6e\xf9\x71\xc8\xc1\xb4\x40\x02\x4a\xa6\xa0\x69\x1d\xce\xe4\x45\x32\x45\x80\xd3\x69\x66\xce\x1e\xc2\xdd\xaf\xb7\x6e\x00\x32\x03\xaa\x4b\x09\x64\x4e\x75\x00\x97\xd8\x22\xd1\xdb\xf5\x7c\x78\xdb\x31\xe5\x5c\x6b\x33\x52\x72\x05\x81\x82\x6c\x34\x35\xa0\x63\xa0\x9e\x39\xd1\xa2\xd4\x3d\xb9\x47\xee\x33\x1f\xdd\x2e\x58\xb2\x68\x2a\x8a\x2c\x07\x45\x44\x19\x60\xcd\x6b\xa9\x80\x6e\xb8\x98\x5a\xde\x60\x7b\xda\xda\xba\x7a\x38\x63\xec\xb0\x8b\x86\x54\xde\x08\xb7\xf6\x80\x26\x1b\xf8\xf9\xf6\xe2\xea\xa7\xf7\xa7\xff\xf3\xdd\xfb\x6e\x0b\xff\x8e\x26\x8b\x66\x72\x61\x4e\x28\x5e\x14\xc8\xe4\x17\x74\x09\x84\x92\x92\xb3\xff\x2e\x1d\xaa\xec\xa8\x1a\xaf\x23\x5b\x8d\x58\x05\xbd\xa3\xe0\x6b\x6e\x89\x4e\x9c\x23\xc6\x9a\xbe\x67\x0a\x33\xd5\x22\x11\x0e\x08\x2f\x14\x90\x99\x14\xf9\x9a\xa2\x45\x2e\x2a\xf8\xda\xca\xda\x22\x50\x35\x5b\x80\xec\x26\x91\xbf\xfd\xf8\xee\x0a\x43\x87\x0b\x69\x33\x3b\x23\xd8\x1e\xfb\xc4\xd1\x6d\xcc\xbe\xa5\x27\x9d\x90\x53\xbe\xb2\x5f\x5a\x66\xd6\x51\x44\xc9\x98\xd2\x80\xc2\xa9\x53\x24\x3d\x00\xef\xe0\xd5\x04\xff\x77\x40\x68\x9a\x4a\xa3\x69\x56\x31\x0b\xc9\x7a\x88\x55\xa7\x91\xad\xfe\xca\xa6\x59\x63\x72\x39\x68\x0c\x6b\xe8\xd4\xe1\x07\x91\xba\x95\x40\x21\x10\xa1\x36\x56\xba\x55\x5a\x52\x0d\x73\x96\x90\x1c\xe4\x1c\x48\x41\x75\xb2\x20\x39\x5d\x91\x44\x48\x59\x16\x36\x63\x42\x4a\x35\xed\x36\xf2\xb7\x42\x92\xdc\x73\x67\xc3\xcd\x8c\x48\x7e\xb5\x1d\x6b\x59\xb3\xec\xe6\x3f\x99\x52\x25\xa8\x93\xd7\xaf\xfe\xed\xb7\x7f\xe8\xa8\x5e\x47\x3c\xb8\x5d\x51\x4a\x01\xe8\xa4\x36\x52\xcb\x6f\x30\xc4\x35\x37\x52\x5d\x50\xbf\x43\xec\xce\x47\x6e\xa8\x18\x9f\x67\xc1\x06\x90\x60\x33\x60\xa8\x11\x70\x5c\xbf\xc1\x65\x57\x5b\x60\xb8\x25\xb0\x45\x43\x77\x53\x4a\x3c\x2b\x58\x2d\xc1\x79\xbb\x97\x63\xc8\x82\x37\x14\xbb\xf3\x4b\xcf\xa5\x42\xec\x47\xa8\x4d\x54\x86\x29\x9b\x2f\xc1\x0e\x6b\x31\x0f\x23\xf2\x8a\xfc\x07\xb9\x23\xff\x81\x56\xb0\x3f\x76\x1f\x2a\x8e\x8d\x29\x06\x52\x7e\x21\x94\x3e\xbf\x8c\xb4\xd0\x7f\x31\xf7\x95\xe9\xd1\xac\x87\x16\x64\xca\x9c\x39\x02\xee\x34\x48\xa3\x06\xba\x35\x0c\x9d\xb9\x20\x8b\x9a\x21\xf0\x4b\xd9\xdd\xa1\x00\x83\xf3\x59\x1b\x5f\xff\x4c\xfb\x1b\x07\xfe\x5e\x28\x7d\xe1\xb8\x75\x33\xd7\x47\x93\x8e\x1c\x2f\xe2\x16\xbb\x0f\x19\xf5\x83\xd9\x7b\x75\x92\x7d\x92\x0a\x0c\x31\xb0\x31\x8d\x0b\x16\xc0\x1c\xfa\x73\x62\xc3\x20\x9d\xf1\xb6\xee\x43\x5b\x6b\xcd\xa6\x8f\x16\x19\xa7\xa4\x34\xea\x52\x14\x22\x9d\xa0\x7e\x13\x40\x85\x99\x8d\xb4\x21\x0c\x3c\xa0\x1a\x4d\xac\xbe\x56\x79\x88\xf1\xc0\x19\x8e\x95\x50\xde\x55\x86\xb5\x4d\xc2\x0c\xa4\xb4\x71\xb3\xd3\x95\x8f\xe8\x09\xde\x6d\x41\x5c\xae\x90\x42\x8b\x44\x64\x7d\xd8\x2a\x97\x8e\x16\x9c\x7b\xf4\xd5\x56\x1e\xf2\x3f\xbf\xbd\x1c\x91\xeb\xb3\xcb\x11\x11\x92\x5c\x9d\x85\x01\xa0\x9a\x26\x98\x83\xeb\xb3\xcb\x83\x17\x5d\x01\xe2\x55\x29\xf4\x66\x77\xe8\xa4\xe5\xf6\x31\x7a\xda\x38\xa7\xc5\xf8\x06\x56\x1d\xa5\xbb\x18\x12\xe6\xb8\xda\x58\x51\x5e\xc8\x4e\x73\x4e\x8b\xbd\x7b\x93\x40\x53\xd6\xeb\x34\x26\x3e\xb0\xaf\xa2\x34\x5e\x3e\x93\x5c\x2c\x21\xb5\x5a\xb3\x1f\x05\x78\x5a\x08\x66\x74\xa4\x21\xc9\xc9\x43\x6d\x48\x72\xf2\x48\x1b\x92\x9c\x6c\x6b\x43\x92\x93\x3d\xda\x90\xe4\xc4\xb6\x21\xc9\x49\x9b\x90\x21\xc9\xc9\x90\xe4\x64\x48\x72\xb2\x73\xfb\x0a\x60\xa5\x43\x92\x93\xed\x6d\x48\x72\x32\x24\x39\x19\x92\x9c\x0c\x49\x4e\xea\xd6\x3b\x10\xff\x90\xe4\xe4\xa1\x36\x24\x39\xd9\xda\x7a\xa3\x70\x0c\x49\x4e\xee\x69\x43\x92\x93\x7b\xda\x90\xe4\x64\x48\x72\x32\x24\x39\xd9\xb3\x7d\x7d\x21\x77\x43\x92\x93\xbd\xda\x10\x72\xb7\x67\x1b\x92\x9c\x0c\x49\x4e\xd6\xdb\x90\xe4\xe4\xd1\xd6\x0f\x1b\xf4\x90\xe4\x64\x48\x72\xf2\x60\x1b\x92\x9c\x0c\x49\x4e\x1e\x6c\x43\x92\x93\xaf\xc5\x3e\x3a\x24\x39\x19\x92\x9c\x3c\x34\xc6\xa0\x71\xed\xd7\x86\x24\x27\x43\x92\x93\x8d\x36\x24\x39\xd9\x6c\x43\x92\x93\x21\xc9\xc9\x90\xe4\x64\x48\x72\x52\xb5\x21\xc9\xc9\xd7\x6e\x7b\x92\xa0\xd8\x3f\xe1\x52\x64\x2c\x59\x05\x87\xba\x7c\x02\x25\x4a\x99\x98\x1b\x1b\xbb\x25\x05\xf6\x5b\x59\x15\x82\x84\xec\x9e\xe5\x0f\xf8\xd4\x98\xb8\x66\x1e\x01\xe9\xe6\xe0\x29\xa6\xa0\x17\xb9\x04\xfc\x0b\x5e\x74\x77\xf6\x8f\x7d\xe1\x64\x3b\x7d\xdd\x0c\xa6\xc1\x5a\x7b\xf3\x45\xfa\x10\xcb\xd8\xcc\xf9\x53\xed\x22\x2d\x2a\x66\xcb\xee\xdd\x5c\xb4\x28\x32\x16\x12\x15\x4a\xc8\x55\x89\xd2\x05\x38\x6f\xb5\x7a\x43\x92\xa2\x1c\x91\x1c\x72\x21\x03\x02\x05\x22\x68\x70\xad\xad\xd2\x87\x75\xfa\x64\x09\xf2\x93\xaf\x05\xce\xff\xca\xea\x0b\x75\x8a\xa6\x6a\xad\x98\x67\x87\x41\xb0\xb0\xf3\xd9\x3a\xdc\x93\xe9\x96\x15\xe8\x42\xe8\x4f\xee\x70\xbf\xd8\x7a\xdd\x17\x86\x49\xb5\xc8\x59\xd2\xe5\x72\xb2\xf7\xc9\x4b\x05\x61\x9e\x89\xbc\x28\x35\xb4\x2e\x36\x3b\xc5\x56\xe9\x60\x2a\x94\xa1\xbf\x4c\x28\x64\x22\xf8\x8c\xcd\x9d\xf6\x7d\x92\x53\x4e\xe7\x30\xae\x66\x7b\x5c\xe7\x39\x38\xe9\x7c\x51\xbf\x58\x1c\x64\x92\x51\xd6\x1d\xe3\x17\x8b\x4d\x9c\x21\x15\x98\x03\xab\xc6\xac\x63\xac\x56\x35\xcd\xa3\x0a\x98\xcd\x2c\xdf\x98\xf8\xaf\xec\x8f\x47\x01\xda\x23\xd5\x68\xab\x40\xc5\x68\xcb\x4e\xed\x8e\x40\xaf\x34\x46\x4e\x68\x56\x2c\x1e\xd6\x19\x43\x62\x10\xdf\xae\x38\xcd\x59\xe2\x4f\xde\x69\x96\x89\xc4\xda\x6a\xda\xda\x66\xe0\xab\x58\xf2\xcd\x3b\xe5\x79\xa9\xe9\x34\x83\x09\x39\xb7\x89\x1b\x04\xcf\x56\xe6\x60\x2a\xd0\x1e\xbf\xe0\x4e\x45\x98\x8a\x19\x82\x61\x0d\xc4\xaf\x6e\x95\xd6\x71\xb7\xd9\x4c\x13\xc0\x0d\x8f\x13\x1c\x08\x70\x2d\x57\x66\x63\x5e\x8a\xf4\xca\xec\xcd\xd6\xd3\xc1\x09\x28\x02\x61\xab\x31\x20\xab\x81\x70\xd5\x38\x20\xd3\x70\x80\x69\x5c\x70\x69\xed\x5b\xb0\xf9\x73\x9a\xd1\x36\xad\x6d\x51\x88\x74\xb2\x85\x67\x11\x31\x0b\xa4\xc0\x8c\x78\x29\x52\x23\x4d\x49\xb0\x8c\xab\x3a\xa3\xd6\xb2\x78\x6e\x88\xbb\x41\x53\x20\xd5\xb5\x98\x45\x97\x94\x65\xe6\x00\x07\x12\xb0\x99\x8b\x30\xcc\x5d\x13\x41\x04\x8e\x9d\xae\x83\x84\x6e\xff\x98\xe9\x36\x08\xa6\x8a\xcc\x59\xb7\xc4\x9c\x24\xe2\x11\x78\x8f\x54\x34\x80\xfc\x66\x2f\xe6\xf4\x0e\x2d\x50\x34\x17\x25\xd7\x36\x0f\x87\x15\x0a\xab\x8b\xdc\x86\x3b\x3c\x23\x2c\xea\x49\xc5\x37\x12\x87\x49\xd3\xd4\x47\xe3\x5f\xc6\x88\xf6\xa4\x5a\x83\xe4\x6f\xc8\xff\x3a\xfa\xdb\x6f\x7e\x1e\x1f\xff\xe9\xe8\xe8\xc7\x57\xe3\x7f\xff\xfb\x6f\x8e\xfe\x36\xc1\x7f\xfc\xeb\xf1\x9f\x8e\x7f\xf6\x7f\xfc\xe6\xf8\xf8\xe8\xe8\xc7\x1f\x3e\x7c\x77\x7d\xf9\xee\xef\xec\xf8\xe7\x1f\x79\x99\xdf\xd8\xbf\x7e\x3e\xfa\x11\xde\xfd\x7d\xc7\x4e\x8e\x8f\xff\xf4\x4d\x77\x07\x53\xa8\x37\x35\x9e\x2f\x35\x92\x27\xf5\x49\xfc\xa8\x2e\x70\xe8\xc5\x0f\xbf\x8b\x0f\xdd\x38\xfe\xce\x00\xfd\xd0\xf1\x97\xc1\x6a\xf7\xf9\xac\x1e\x9f\x29\x22\x72\xa6\x35\xa4\x28\x75\xd2\x66\xba\x8f\x35\x95\xdf\x31\x2c\x4c\xcb\x43\xb5\xf9\x65\x23\xed\x44\x6d\x29\xe8\x4c\x96\xf0\x3e\x3c\x34\x72\x70\xc2\xf2\x22\x83\x1c\xb8\x46\xc6\x33\xf6\xea\x0b\x5a\x8c\x26\xf5\x1b\x24\x56\xa7\x85\xbb\x04\x20\x75\x44\x0e\xbc\xb1\xd1\x06\xde\x38\xf0\xc6\xc7\x5a\xb0\xd9\x33\x06\x63\xfc\xd4\x24\xc2\x99\x2b\x94\x37\x50\xa3\x11\xb4\x8a\x33\x17\x33\xf4\x85\x2f\x59\x5a\xd2\xac\x99\x29\xd3\x27\x4f\xec\xc6\x01\x1a\x4a\x7a\x4e\x57\x1b\x3a\x39\xe3\xac\x99\x96\x73\x54\x21\x38\xf0\x41\x27\x97\xd5\xde\xc3\x83\xd3\xec\x96\xae\x54\xc7\xec\x7d\xdf\x0a\x89\xa0\x80\xb5\x41\x89\x90\x1e\x2b\xd2\x54\x56\xda\xd6\xda\x6e\xde\x9e\x6d\x13\xdd\x0e\xe8\x77\xea\xd2\xa1\xaa\x1e\xf4\x3e\x01\x37\x11\x35\xca\xdf\xec\xf3\x6e\x2f\x7e\x05\x5a\x3b\x7b\xce\xda\x96\xa0\xf5\x9c\x56\x2e\xae\xf6\xf4\x58\x58\x08\xe6\xcc\x34\x5f\xce\x84\x59\x13\xcc\x36\x3f\x9b\x41\xd2\x11\x2b\x68\x13\x20\x6c\x19\xc7\xc2\x95\x35\xe3\x25\xcd\xb2\x95\x9f\x13\x48\x89\xe0\x9d\x06\x82\x3b\xa6\x49\xc9\x35\xcb\xcc\x66\x22\x12\xe6\x65\x46\x9b\xa6\x20\xf7\x66\x1e\x41\x95\x4e\xc8\x47\x6e\x94\xd1\xfa\xe1\x6e\x46\xcc\xb5\x01\x8c\xd0\x91\x81\x86\x74\x84\x5d\xaf\xef\x40\xc4\x20\xb5\x38\x46\xb5\x2c\x9d\x86\xf7\x73\x59\x61\x4c\x26\xf6\x20\x56\x0e\x70\x92\xb2\xd9\xcc\x8c\x8c\x99\x02\xb9\x90\x39\xdd\xa4\x8a\xf2\xb4\xd3\xe8\x46\x02\xc2\xe8\x83\x66\xf6\x53\xac\x78\x71\x60\x54\xf3\x84\xca\x83\x66\xad\x84\xd3\x4c\x2f\x44\x39\x5f\xd4\xbb\x22\x6c\xca\x89\xd2\x88\xbc\x31\x93\xa9\x3c\xe6\x6c\x6d\xb3\x29\x23\xeb\xf0\x04\xac\x48\x26\xc0\x1e\xf7\x5b\xda\x71\xec\x0d\xef\xb0\x85\xfb\xda\x35\xf7\x21\x39\x08\xef\x82\xb4\x11\x3f\xc5\xe1\x4e\x47\x78\xe1\x09\x39\xb7\x69\x0b\x46\xed\x5e\x5b\x53\x62\x27\xa3\x01\x6f\xf2\x40\xbd\x8e\xd8\xae\xb5\x01\x58\x15\x81\x84\xf9\x5a\x6d\xe7\x94\xaf\x3c\xe0\x1f\xe1\x47\x36\x50\xa9\x8a\x41\xc8\xba\x59\x51\xab\xb3\xf4\xec\xe5\x47\x14\x24\xa5\x64\x7a\x75\x26\xb8\x86\xbb\x4e\xbc\x2f\xc6\xad\x7e\xd5\x26\xa3\x75\xaf\x7b\x12\x89\x28\x6c\xde\xbc\xb5\x0a\x34\x0b\x51\x66\x29\xa6\x0a\x2d\x39\xb2\x9d\x6e\x37\xca\xf9\xcc\x5c\xe1\x76\xbf\xe1\x8d\x89\xae\x91\x75\xc2\x3c\xea\xcf\x82\x1f\xff\xbb\x64\x4b\x9a\x01\xd7\x8d\x5f\x5c\x22\x0e\xac\xf9\xa3\xa7\xf4\x9f\x69\xaa\x6e\x6a\x0d\x03\xc6\x85\x48\x6b\x85\xe2\xc4\x4f\x1d\x7e\x04\x77\xfa\x0b\xf4\x9d\xa1\xc0\x74\x29\xd9\x92\x65\x30\x87\x77\x2a\xa1\x19\xea\x51\x2f\xad\x9c\x9f\xde\x43\x17\xee\x4c\x29\x32\x65\x04\x30\xa3\xac\x1a\x51\xd3\xa2\x60\xd1\x85\x33\xa7\x8c\x63\xf9\x94\x00\x33\xbf\x1b\x54\x59\x18\xae\xd1\xb7\x0b\x2a\xcd\x2e\xf4\x70\x5b\x7b\x35\x4e\x85\xc8\x5c\x0a\xce\x6c\x55\xd3\xc5\xba\xdb\xc3\x91\x17\x8b\x9f\x38\xdc\xfe\x64\xa8\x50\x64\x96\xd1\x79\x7d\x35\x83\xde\x88\x5d\x08\x47\x00\xdf\x3b\xd1\x98\x5f\xb2\x34\x82\x8d\x91\x2a\x6a\x6c\x74\x93\x83\x77\x57\xe8\x5e\x1f\x23\x3f\xa1\x8a\x54\x63\x77\x13\x1d\x4c\xfb\xed\x31\xde\x13\x67\xa7\x97\x3f\x5d\xfd\xf5\xea\xa7\xd3\xb7\x1f\xce\x2f\xba\x23\x20\x85\x06\x6b\x5d\x69\x48\xf7\x49\xe5\xb4\x37\xab\x50\xe1\x3e\x26\x42\x4d\xd0\x59\x82\x39\x34\x78\x2a\x6e\x03\x3d\x85\x66\x4f\x01\xed\x26\xb9\x26\xb4\xa0\x53\x96\xb1\x10\xdb\x42\xac\xe3\x8b\x59\x61\x1b\xf4\xa0\x3c\x97\xa6\x27\xa9\x14\x85\x9d\x3e\x8f\xf0\x0f\xf7\xb1\xb6\x91\xa4\xcd\x94\x68\x78\x62\x66\x6d\x42\xe6\x92\x72\x5d\x6b\x52\xf5\x6e\x96\x46\xe8\x0f\xc9\xa9\xf2\xa2\x1b\xe7\xc5\x73\x2c\xd3\x34\x5e\x7e\xe5\xd3\x34\x85\xb4\xb5\x6c\x01\x3d\xf7\x33\x8d\xd4\x99\x7f\xb9\x06\x94\x94\x5c\x7e\xbc\x3a\xff\xff\xd6\xce\xcd\xaa\x08\x73\x6f\xc6\x29\x3e\x20\x45\x11\x6d\x75\x3f\xb9\x94\xf3\xc3\xfa\xf6\x62\x7d\x2b\x79\xe7\xc5\x03\xd5\x3f\x95\xbc\x5d\x9d\xb2\x26\x8d\xe4\x22\x0d\x60\xcd\x97\x55\x3c\x57\xbb\xd7\xa6\xe9\x42\x02\x31\x8f\x70\xcd\xd0\x90\xd4\x50\x3e\xb4\xb0\xf9\xd0\xa3\xd4\x51\x6a\xde\x55\x33\x9a\xa9\x2f\xf5\xc2\x09\x91\x54\x8c\xd0\xfa\x41\x94\x3c\x4e\xe4\x7b\xc0\x8e\xab\x08\x21\x29\x70\xa1\x9d\x46\x6c\x5e\x10\xcb\x68\x49\x91\x10\xeb\x05\x6c\x24\xb5\x69\x49\x0d\x01\x42\xcb\x75\x43\x50\x61\xca\xef\x8b\xcb\x8a\x22\x0b\x02\x2f\x15\xac\x6b\xe4\x4e\x50\xa9\xfd\x82\x33\xd1\xdd\x1d\x22\x81\xa6\x68\x39\x2f\xa8\x5e\xd8\x84\x0b\x39\x55\x37\x90\xda\x0f\x02\x03\xcd\x2a\x80\x20\x1a\xad\xfd\xab\x5d\x9b\xf9\xf5\x98\x3e\x54\x71\x6c\xda\x09\x44\x11\x86\x38\x55\x5f\xf4\x40\x04\xb0\x60\xb3\x08\x1f\x79\xb6\xfa\x24\x84\xfe\xb6\xaa\xad\xf0\xd2\x87\xe3\x2f\x4e\xc1\x6e\x43\x49\x51\xd3\xa2\x48\xf2\x18\x37\x0e\xb2\xc6\x46\x45\x88\x50\xce\x68\x16\xe4\x97\xca\x18\x65\xc9\x4f\xd5\x77\x52\x94\x9d\xa5\xad\x98\x0a\xdc\x77\xe7\x6f\xf1\xee\x2b\x5d\x2c\x32\xd7\x72\x85\x75\x81\x36\xeb\x54\x07\x9b\x21\xfe\xec\xa2\xbe\x9b\x9c\x2d\x38\xc0\x93\x90\x0f\x74\x45\x68\xa6\x84\x5f\x76\x07\x6f\x5d\x33\x20\x7a\xeb\xa4\xf9\x7a\x2a\xf4\x62\xc3\x2c\xd9\xd5\xaf\x61\xda\xe6\x78\xa3\x46\x48\x73\x1d\x3d\xc2\xf8\xc6\xb0\x1a\x41\x8f\x85\x84\x04\x52\xe0\xc9\x97\x7a\x22\x5e\x3a\xc2\x16\x4f\xd5\x85\xe0\x86\xbd\xbe\xf4\xb9\x3a\xaf\xa2\xc7\xdd\x6a\x34\x4f\x11\xc2\x70\x9d\x59\x8c\xa2\xe3\x19\x99\x6b\xa9\x42\x10\xa9\xe7\x33\xb4\xe3\xd9\x4d\xf7\x43\x39\x85\xcc\x2c\x36\xcb\x32\x5b\xb3\x93\x6a\x6b\x6c\x67\x39\x9d\x03\xa1\xba\x3a\x84\x5a\x10\xe0\xaa\x94\x6e\xdf\x74\x74\x39\x99\x56\x79\xcb\xdc\xab\xfd\xf9\xfc\x2d\x79\x45\x8e\xcc\xbb\x1d\xa3\xc4\x31\xa3\x2c\xc3\x00\x77\x74\x67\xaf\x19\x19\x67\xde\xe1\x16\x34\x05\xc8\x47\x88\x90\xf6\x6a\x19\x11\x2e\x88\x2a\x93\x85\x9f\x03\x26\x78\x65\x67\x75\x19\xcf\x82\xd0\x9d\x03\xdb\x89\x77\x1f\xfe\x59\x81\x7c\xe9\x63\x6b\xae\xc3\x3f\x3f\xe3\x75\xd8\xd4\x12\xcd\xf1\x6f\x2f\x98\x3d\xab\x39\x68\x9a\x52\x4d\xdd\x35\xe9\x1f\x18\x76\xed\x70\x59\x06\x5c\x96\x0a\xde\x33\x5e\xde\xd9\x7c\x42\xbd\xf0\x23\x5c\xbd\x43\x8a\x48\xe2\x17\x1a\x37\xa8\x8d\x80\x4e\xbd\xc9\x3f\x42\xe8\xc6\x79\xeb\x18\x8d\xee\xd1\xba\xf1\x96\xa0\x36\x36\x0d\x8c\x22\x44\x79\x2a\xf2\x0d\x22\x67\x42\x12\x08\x29\x47\xdc\xc0\x6a\x0c\x07\xd3\xb5\x5f\xb6\x87\x25\x83\x25\x04\x94\x60\x5e\x3b\x94\xef\x4d\x6f\x66\x72\xfc\xce\xc5\xee\x49\x46\xa7\x90\xb9\x70\x52\x9b\x63\x20\xe2\x09\x8b\xe4\x8d\x90\x22\x8b\x97\xf4\xfa\x93\xc8\xc0\x26\x44\xf2\x13\x61\xba\xff\x22\xe6\x01\x3b\x89\x35\x0f\x68\x94\x6b\xcd\x03\x9a\x41\xbf\x84\x79\x28\x03\x04\x44\xb2\x3e\x0f\x46\xda\x6c\xcf\x03\xca\x5f\x7d\x9f\x07\x05\x49\x22\xf2\xe2\x52\x8a\x19\xeb\x7e\x3a\x62\x5e\xdb\x8e\xa2\x1a\x56\x66\x4d\xe8\x9b\xb1\xe9\xf6\xda\x6a\x3f\x4c\x83\x00\x3c\x2e\x4b\x1c\xd5\xf6\x1e\xf4\xa9\xe2\xfe\xaf\xc6\x75\x8e\xdc\x6e\xfd\x8e\x77\xa3\x77\x1e\xb9\x85\x5e\x33\x23\xba\x0e\x7f\x89\x37\x5e\x8c\x14\xbf\x01\xce\xd1\x28\x17\xae\x48\x68\xb6\x10\x4a\x07\x9e\x2a\x12\x39\x68\x7b\x9d\xae\x46\x4a\x42\x04\xc3\xe1\x67\x8d\x4c\x13\x14\xcd\xf3\xde\x7d\xc9\x45\x0a\x0d\x54\x27\x46\x58\x07\x91\x73\x6d\x93\xc2\xe1\x18\x3e\x93\xa2\x91\xf6\x3c\x68\x32\x6d\x8d\xac\x85\xad\xc3\x1c\x34\xa4\x4f\x17\x4e\x71\x5e\x81\x23\x44\xba\xa0\x7a\x31\x22\x12\x32\x9b\xbf\xd1\xb1\xe7\x1b\x6b\xf1\x3a\x44\x8e\xe3\x09\xf2\xec\xc6\x93\xed\x33\x4d\xc4\xa1\x0a\x65\xf0\x99\xbd\x3f\x99\x22\x07\xef\xfd\x7a\x1d\xb8\x44\xe7\x17\x1f\xaf\x9b\x21\x2d\x94\xaf\x6c\xe0\x5d\x40\xc0\x86\x6d\xfd\x13\x2b\x02\xb7\xba\x9d\xc3\x6a\x7b\x5b\x9f\xe8\x0d\xe3\xa9\xcb\x50\xd8\x5a\x45\x6f\xc0\x73\xaa\x61\xd8\x62\x7e\xa6\x19\x4b\x9b\xf7\xd1\x9b\xc0\x2a\x9e\xd5\x2e\x20\xe3\x17\x39\xa6\x9f\xac\x02\xeb\xbd\x6c\xe3\x87\xbd\xca\x15\x81\x31\x49\xf8\x33\xc7\x33\x68\xde\x77\x4c\xb8\xd8\x32\x46\x84\xa5\x0b\x3e\x03\xee\xee\xec\x91\x05\xe4\x2f\x96\x22\xaf\x66\x27\x86\x73\x68\xc6\xe7\xaa\x69\x05\xa1\x59\x16\x05\x97\xb0\xcd\x0c\xe2\x8f\x01\xc6\xfe\xb8\x00\xb4\x75\x35\xbf\x95\x0c\x38\x64\xf4\x47\x4c\x18\x5f\xb6\x29\x22\x33\x2a\xc5\x17\x6e\x88\x98\xe7\x8a\x9e\x49\x33\x83\x9a\xd1\xec\xaa\x80\xce\xb5\xd4\x49\xe4\xeb\xe2\xbb\x0f\x57\xa7\x6d\xca\x50\x18\x76\x89\x65\x00\xbf\x27\x34\xcd\x99\x52\xe8\xf1\x81\xe9\x42\x88\x9b\xa0\x21\x8f\xb6\x54\x87\x6e\x04\x06\x2b\x36\x57\x27\x8e\xa3\x8c\xcd\xc4\x1d\x13\xc6\xb3\x2a\xf8\x06\xcd\x85\x5c\x2b\xe7\x42\x08\x7e\x79\x92\x54\x6f\x8f\x5b\x0f\x53\xbe\x54\x60\xe7\xcd\xe9\xc1\xec\x3f\xb8\x79\x5f\x5c\xec\xd8\xdc\x55\x61\x69\x3a\xd7\x2b\xf5\x6f\x7f\xf7\x2d\xf5\xc5\xb7\xce\xa3\xd5\x5e\x5f\x7c\x92\x9c\xd4\x9f\x80\x8a\x57\xe5\x37\x42\x71\x66\x47\x12\x49\xc1\xc6\xc5\x02\xa6\xa8\xa0\xf7\x86\x91\xa1\x7f\xfb\x10\x4b\x9d\xb8\x9f\x1e\xc6\x4a\xbe\x74\x9a\x65\x66\x21\xa9\x8b\x91\x6e\x20\x3c\x51\x37\xa9\xc2\x92\xb1\x3e\xa9\x8d\x48\x36\xda\x42\xf3\x2d\xc2\xab\x77\x1e\x31\xed\x03\xc2\x7d\x44\xba\x16\x76\x6c\x4a\x72\x76\x67\x28\x6c\x8e\xd8\x0e\xa1\x45\xcf\xff\xf6\xaf\x03\x32\xbf\x13\x44\x1f\x54\x99\x28\x46\x66\x85\x9a\x83\xf8\x78\x1f\x6d\xae\x2d\xf3\xc5\x05\x68\xa3\xa9\xd9\x79\x6b\xba\x1f\x8c\x66\x25\xcb\x08\x87\x21\xc4\x35\x4c\x9a\xee\xe1\xa8\x9c\x22\xf0\x3c\xa0\xab\xd8\xd1\x64\x64\x10\x2f\xbc\x3d\x97\xeb\x98\x6c\x09\x88\x79\x36\x17\x32\xd9\xdd\x8d\xfc\x84\xce\x2a\xd2\x17\x87\x55\x68\xf4\x70\x23\x12\xfa\xc5\x42\x87\x9b\xd1\xd8\x6c\x13\xbd\x74\x29\xd2\x8d\x20\x6d\x5f\x17\xb3\x7b\x06\x64\xb3\x39\x6a\x15\x84\x0b\x67\x1f\x69\x94\xa6\x84\x3b\x48\x4a\x0d\xa9\xcb\xd5\xe0\x6c\xca\x36\xce\xbb\x4d\x4d\x67\x0a\xb0\xcf\xba\x20\x8e\x1a\xd5\xa9\x0a\x9d\xae\x53\x65\x9b\x18\x91\xff\x42\x2e\xe9\x52\x33\xd5\xd5\x34\x2f\xab\x9f\x77\x9d\x0a\x04\x52\x27\x94\x57\x15\xe5\xb5\xf0\x26\x6e\x97\x93\xc1\x85\xa6\x4e\x81\x14\x54\xd2\xdc\xdc\xc1\x8a\xb8\xe5\x99\xc2\x9c\xd9\x40\xbb\xc6\xa5\x58\x25\x75\xe8\x96\xa4\x04\x15\x1b\xa6\x49\xce\xe6\x0b\x7b\x5a\x08\xc5\xca\x35\xc4\x03\xc7\x32\x41\x53\x82\x8c\x45\x48\x72\x4b\x65\x6e\x64\x01\x9a\x2c\x10\x85\x46\x39\x49\x4b\x73\x1e\x08\xa6\x20\x58\x8d\x95\xa6\xda\xe8\x98\x20\x03\x8c\x70\x7e\x9a\x5e\x20\xb7\xf2\x53\xd7\x8d\x78\xe1\x10\x71\x73\xd2\xa2\x58\x41\xde\xdd\x41\xd2\xa8\x4e\x68\xb6\xa7\x2b\x4f\x68\xae\x29\x7a\x13\x08\x34\x7b\x71\xbd\x38\x11\x79\x4e\x79\xbc\x30\xc8\x40\x41\xe4\xcc\x92\xe3\x55\x1c\x47\x1d\x31\xca\x27\x82\x3b\x2d\x03\xf5\xd9\x4f\x5b\x52\x88\xe5\x74\x66\x5f\x9b\x63\x6a\x63\xdc\x85\xac\x6a\x5a\x04\x91\xe5\xe9\xc0\x2c\xf9\x42\x68\x72\x74\x78\x72\x78\xec\xb3\xae\x54\x24\x1c\xaa\x66\x50\x81\x0d\x28\xae\x5f\x48\xb1\xbc\xc8\x56\xf8\x0e\x87\x36\x31\x7e\x40\xc1\x29\xd3\x3c\x3c\xb5\xca\x05\xab\x16\x90\x65\x23\xa2\x8c\xac\x4b\x7d\xf2\x36\xfb\xa9\x79\x48\xcb\x32\xb1\x36\xb1\xa3\xc3\x9f\x0f\x47\x04\x74\x72\x4c\x6e\x05\x3f\xd4\xd6\xbd\x41\xae\x51\x61\x0c\xa2\xa9\x22\x62\x25\x4a\xac\xdd\x66\x97\xad\xca\xf7\x97\x50\xa3\xeb\x94\x56\x20\x37\xf7\x31\x3e\x1e\x26\xbc\xbd\xbb\x63\xda\xc8\x1d\xba\x44\x9b\xc4\x2b\xab\x16\x80\xe1\xa5\xe6\x76\x33\xd7\xda\xc9\x02\x68\xa6\x17\xab\x4a\x55\xb1\x65\xb1\x14\x29\xb9\xfb\x26\x5c\x60\xea\x41\x38\x67\xb0\xbe\xee\x8a\xe8\xf5\xba\x0e\xb0\xa3\xf1\xd1\x32\xc0\x56\x80\x69\x97\x00\x46\x19\x0b\xd2\x58\x55\x80\x7f\xf7\xf5\x55\xf8\x9d\xcb\x22\xce\xcd\xf9\xdd\xa7\xcb\xb3\x47\xeb\xfa\xe2\x43\x43\x61\xdf\xe0\xe4\x9a\x31\xeb\xd9\x5e\x0a\xa9\x09\xaf\x6a\xaa\x99\x13\x36\xc7\xb5\x04\xb9\x64\x09\x4c\x9e\xa1\x7c\x6c\xac\xb4\x99\xe1\xc7\x81\x20\x4e\x09\x5f\xbc\x2f\x32\xd2\x95\x25\x67\x9b\x19\xd8\x51\x8a\xea\x56\x46\x93\x6a\x6d\x70\xfd\xbe\xc7\x8b\xee\x6c\x01\xc9\x8d\x4b\x82\x1b\x66\x2f\x54\x00\x64\x8b\x23\xc1\x30\x10\xfb\x7f\xd3\x4c\x4c\x4f\x72\xaa\x34\x48\xa3\x7d\xb8\x3b\x78\x9c\x18\x0a\x18\x9f\x4f\xf2\xf4\x38\xa4\x32\x06\x69\x68\xbc\x1b\x99\x2c\x5b\x39\x55\xee\xc9\x4a\x69\x66\xe5\x45\xad\xe3\x66\xf6\xbe\x8b\x54\x4b\xfd\xfb\xeb\xeb\xcb\xef\x5a\x95\xd4\x31\xee\x5f\xeb\xc2\x27\xaf\xc6\x5d\x61\xe3\x84\x06\x6e\xdb\x9b\x32\xea\x11\x3c\x19\xfb\x94\x5e\x27\x7f\x15\x25\x0a\x4c\x74\x9a\xad\xc8\x2d\xb5\x79\x02\x14\x84\xf1\x82\x03\x43\xc6\x81\xe1\x36\x66\xc3\x7d\x0f\x34\xb5\x39\x75\xd1\x58\xf2\xf2\x0e\xa8\x9a\xa6\x68\xcb\x76\x56\x2a\x2d\x72\xb2\x70\xaf\x6a\xe7\xb0\xba\x0a\xed\x81\x9b\xe0\xa1\xb4\xde\x14\x45\x24\x14\x56\x25\x71\xbf\xf9\x2a\x14\x8e\x0d\x16\x64\xe7\xb9\x91\x9e\x9e\x92\xa4\x39\x55\x4e\x4c\xb7\xb5\x70\xb9\x9d\xa0\xa0\xe2\xa4\xb6\x45\xa9\xd7\x43\x22\xd5\xec\x21\xe1\x75\x7b\x7c\x27\xe1\x6e\xbd\x38\x15\x80\x48\x94\x2a\x40\x24\x7a\x25\x20\xe2\x9c\x57\x6e\x73\x59\x48\x8b\x21\x34\xcc\xa2\xe0\x3b\x66\x75\xbd\xf0\x84\x72\xc1\x59\x62\x1d\x04\xb6\xee\xbc\x28\x75\x51\x6a\xb4\xb7\x24\x54\xc1\x78\x49\x25\x33\x0c\xd5\x16\x51\xab\xb0\x45\xdc\x9c\x76\x2d\x04\x1a\x23\x2a\x37\xae\xa5\x38\x9c\xcc\x28\x1c\xd2\x36\xdc\x6c\x91\x57\x78\x63\x71\xc2\x77\x34\x89\xf5\xd6\x05\xd5\x8b\x78\x5a\x13\xd5\x0b\x84\xb4\xa1\x13\xc7\x23\x22\x91\xbf\x19\xa9\xbc\x07\x21\x27\x51\x95\xc4\xc0\x93\x6b\xab\xc8\xca\x35\x35\xd3\x50\xb8\x39\x87\x91\x40\x16\x4f\xaf\xb5\x36\x0b\x93\x4d\x81\x50\x4e\xce\x4f\x2f\x4e\x7f\xba\xfa\x7c\xf6\xd3\xc5\xe9\x87\x77\x21\x5d\x07\x97\xa2\x88\x59\x8c\x22\x5a\x39\x8a\x27\x2a\xd6\x63\x9a\x4a\x16\xd0\x1f\x7c\xc5\x15\x52\xd3\xcc\xc8\xe5\x44\xf5\x46\x9a\xf4\xb0\x14\x6d\x64\xcd\x32\x69\x18\xcf\x8b\x72\x1c\xe7\x4e\x7f\x0b\x19\x5d\x5d\xd9\xb2\xfc\x2f\x6d\x4c\xbe\xa8\x98\x8d\x2d\xdc\xaf\xaa\xec\xf0\xb0\x96\x2b\xca\xd7\x63\x70\x39\xed\xbd\x63\xbc\xe9\xcb\xb7\xef\xd7\xd9\x5d\x4b\xfa\xe7\xb2\x25\xbd\xb1\x41\x17\x20\x19\x42\x61\xfa\xb0\x6b\xbe\x17\xb7\xae\xd0\xc3\x11\xe3\x7e\xe7\x1c\x37\x8c\x29\xb5\x0f\x22\x3c\x8f\x98\x16\xe4\xf5\x2b\x3f\xc8\xd7\xe7\x5c\x70\x10\x97\x5e\xbb\x97\x1c\x8d\x8f\xfb\x97\x6a\xbc\x4e\xdb\xc7\x14\x02\x9c\x21\x6b\x6c\xfc\xf5\xa4\x8a\xd0\x7a\x8d\xf4\x54\xac\x88\xf2\xd4\x63\xad\xbe\xbe\x7d\xa2\x93\xe2\x4a\x24\x37\x91\x4c\xa3\xd7\x67\x97\xb6\xb7\x47\xdd\x51\xd7\x67\x97\x83\x37\xaa\x5f\xf6\xd1\x43\x1b\xd3\x44\xb3\x37\x7b\xdb\x3a\x0f\x07\x8d\xab\x6e\x5e\xf8\x91\x2d\x87\xd1\xa0\x71\xdd\xd7\x06\x8d\x6b\x8f\xe6\x2b\x8b\x31\xc1\xbf\x93\x34\x81\xcb\x3e\x09\x70\x9e\x81\x90\xd4\xd5\xdb\x24\xb5\x1c\x57\xb1\x0b\x0e\x90\x5a\xfe\xe1\x8b\xa4\x91\xb9\x79\x13\x8b\x0d\x46\x73\x5f\x8d\xaa\x2d\x65\x80\xa8\x77\xbd\x70\x5d\x3b\x31\xd7\xfb\x71\xb7\x51\x57\xeb\x27\x45\x95\x0d\xdc\x17\xa1\x70\xc7\xc9\x10\x6f\xf4\x11\x05\xbc\xbb\xe5\x9b\x36\x57\x90\x28\x36\x37\xd3\xe5\x6b\xf3\xd9\x14\x52\xbe\x94\x4a\x4d\x88\x19\x75\x26\x64\xc2\xa6\xd9\x8a\x2c\x68\x66\x14\x26\x2c\xf1\x46\xc9\x0d\x96\x26\xc3\x6e\xba\x4f\xd4\x15\xb8\x40\x45\x2b\xd5\x64\x82\xcf\x71\x32\xa8\x0b\x48\xb8\x2b\x20\x31\x63\x26\x19\x50\x5e\x16\x96\x4e\x23\x23\xad\x44\x19\x21\x26\xc1\xbb\x96\x2b\x99\x8a\x33\x97\x7c\xa3\x40\x40\xf2\x83\x7b\xbe\x1d\x59\x4a\x3e\xfa\x12\xb5\xa3\xee\xa5\xc8\x88\xb7\xd0\x56\x29\x3b\x54\x23\x38\xa0\x4a\x20\xe2\xc2\xe6\xcc\xb6\xc0\x38\xce\xce\x63\x7d\xc6\x7e\x3d\x6b\xe5\x82\x8f\x39\xcc\x6d\x9a\x02\xc7\xd0\x2c\xc2\xd1\x8e\x6f\xf1\x74\x15\xd4\x5e\x69\x51\xb4\xea\xb0\x2d\x19\xed\x4c\x09\xa6\x44\xa8\x77\x14\x39\xe2\x82\x88\xc2\x5c\x5d\x25\x67\x7a\x85\xce\x37\x5f\x02\x30\x20\xd8\xe8\xda\x01\x09\x28\x99\x82\xa6\xce\x5c\x6d\x0e\x41\x95\x11\x1c\x93\x7d\x9b\xb3\x87\x08\xf9\xeb\xad\x1b\xa0\x4a\x12\x3e\xa7\x3a\x80\x4b\x6c\x91\xe8\xed\x7a\x3e\xbc\xed\x98\x72\xae\xb5\xc0\x2c\xc4\xfd\xc8\xeb\x67\x4e\xb4\x28\x75\x4f\xee\x91\xfb\xcc\x47\x36\xc1\x43\x43\x51\x64\x39\x28\x22\xca\x48\x05\x17\x5e\xbb\xe1\x62\x6a\x79\x83\xed\x69\x6b\x53\x3a\x65\x9d\xaa\xc8\xc5\xd8\x62\xf7\xa4\xae\x77\x41\xa8\x8d\xec\x8d\xd3\x72\x36\x03\x89\x37\x1d\x12\xbc\x01\x43\xaf\xca\x42\xf9\x3b\xac\x9b\x01\xd7\x41\xaa\x40\x8f\x30\x73\xbe\xcb\xa4\x70\xcf\x90\x2e\xc5\x24\x96\x5d\x93\xa0\x30\x13\x3a\x27\xef\x3e\x7e\xdb\x6d\x8b\xc6\xc8\xab\x1f\x16\xaf\x89\xef\xf9\x91\x77\x83\xfd\xc5\xdd\x0f\xdb\x52\x9e\xb8\x6d\x91\x64\x42\xb9\xd8\x60\x5c\x97\x64\x41\x39\x07\x6f\x90\x62\x1a\xad\xd9\x53\x00\x4e\x44\x01\x16\xf6\xd6\x89\x18\x4a\x14\xe3\xf3\x0c\x08\xd5\x9a\x26\x8b\x89\xa1\x8e\xfb\xbd\x50\x07\xe1\xba\x4f\x94\x96\x40\x73\xbb\x27\x24\xe4\x94\xd9\xe1\x09\x4d\xa4\x50\x8a\xe4\x65\xa6\x59\x51\x75\xd6\xcd\x92\x08\x98\x0e\x41\xd9\x98\x4c\xbf\x56\x18\x66\x51\x47\xfb\x8e\x6a\x0a\xdd\xeb\x0b\xbe\x5e\x2e\x76\x64\xbe\x85\xbc\xd0\xab\x2a\x2a\xaf\x9b\x0e\x34\x63\x52\x69\x92\x64\x0c\xb8\x76\x6f\x66\x13\xee\x21\x0d\x55\xcd\x6f\xee\x66\x44\xb9\x29\xe1\x29\x2a\xdf\x85\x56\x36\xf8\xac\x22\xc2\x77\x95\x32\xe5\x6c\x1d\xaa\x5b\xe8\x1b\xf5\x75\x59\xec\xc6\xf1\x33\x82\x5b\xc7\x0b\x38\x96\x22\xf7\x51\x83\x84\x66\xe5\xdb\x2a\x70\x30\x8c\xaf\x60\xf1\x14\x7f\xae\x47\xad\x80\xfb\x5a\xb7\xc0\xd0\x90\x0d\xae\x83\x1b\x8a\xc3\xd2\x9c\x03\x48\xc0\x88\xa2\x34\x22\x93\x79\x76\x1e\xd3\x90\xe5\x3e\x80\x52\x74\x0e\x97\x1d\x21\x09\x31\x18\x4e\x6d\x68\x43\x2c\x43\xbd\x6d\xb0\xfa\x6d\x66\xd3\xa0\x55\x9f\x34\x83\x9e\x9a\xca\x63\x6e\x5f\xa4\x13\x05\x5e\x69\xba\x95\x4c\x6b\xc0\x5d\x8a\xa5\x8c\x10\x2b\xb6\x9e\xba\xb2\x1d\x6c\xd5\x69\x3c\x37\xe9\xcd\xf1\x8c\xf8\xc1\x53\x1b\xb6\x34\x05\x32\x95\x0c\x66\x64\xc6\x30\x8e\x0a\x23\x8c\x46\x36\x07\x3f\xb5\x26\x64\xa5\x40\xe2\x6b\x3b\xb3\x80\x7f\xfd\x6e\xf4\xfc\xc5\xbd\xbf\x96\x25\x4f\x68\xa3\xe2\x23\x26\xd6\x62\x33\x32\xc7\xa8\x26\xa7\x04\xff\xfe\xd5\xbf\xff\x91\x4c\x57\x46\x5e\x43\x45\x4c\x0b\x4d\x33\x4f\x00\xc9\x80\xcf\xcd\x2a\x22\xcb\xed\xc6\x37\x5a\xc9\x99\xaa\xc5\xc9\x58\xce\xb4\x9d\xa0\xd7\xbf\xbd\x99\x06\x1d\x3d\xe4\x8f\x27\x29\x2c\x4f\x1a\x5b\x68\x9c\x89\x79\xb7\x5e\xcf\x62\x84\xd2\x06\xd9\xd9\xb6\x9c\x68\x2c\x74\xff\x52\x67\xda\x97\xee\x20\x0b\x71\x6b\x8d\x39\x9b\x47\xb5\x91\xe7\xa4\x10\x45\x99\xe1\xc4\x91\x6f\xab\xec\x74\xa5\x82\xf5\xbc\x3f\xa1\x46\xc2\x06\xb7\x43\x47\xaa\x1b\x76\xbd\x8c\xb7\x0d\xe9\xf3\x64\x0a\x97\x75\xc1\xf9\xdd\xaa\x2a\x1c\x9d\xad\x71\xdf\xd2\x2c\x9b\xd2\xe4\xe6\x5a\xbc\x17\x73\xf5\x91\xbf\x93\x52\xc8\xf6\x3b\x67\xd4\xdc\xe9\x8b\x92\xdf\x60\x51\xd6\x3a\x15\xab\x98\x3b\xf8\x9f\x0f\x9e\x6f\xbc\x5d\x27\x62\xfc\x5b\xda\xe4\x98\x5e\x24\xf1\x36\xb8\x7a\x64\xb8\x63\xb5\xa1\x8d\x13\x30\x34\x77\x8d\x3e\x87\xd6\x7b\xa8\xe6\xd1\xfe\xed\xab\xdf\xff\x9b\x65\x2e\x44\x48\xf2\x6f\xaf\x30\x04\x57\x8d\xec\x05\x80\x37\xb0\x11\xb5\x72\x9a\x65\x5d\xbd\x04\x4d\x16\x60\x36\xdb\x17\x7b\xe4\xf5\x8b\x9d\xee\x9d\x55\xc6\xeb\xeb\xbf\xa2\xbe\xc8\xb4\x82\x6c\x36\xb2\xa9\x4e\x2a\xb3\xd6\x21\x4a\x57\x87\xee\xca\xeb\x9e\x26\xe7\xe5\x95\xb6\xa5\xc8\xca\x1c\xde\xc2\x92\x25\xdd\x1c\x98\xad\x55\x69\xf5\xe6\xcd\xf4\x19\x53\x98\x01\x67\x9a\x89\xe4\x86\xa4\xee\xcb\x06\xaa\x7d\xbd\x48\x73\xf7\x59\xe8\x8a\xef\x0f\xc0\xf5\xdf\xfb\xfe\x2d\x44\x7f\x4e\x8b\xa2\x4a\xcf\x21\xe9\x6d\x6b\x32\x90\x35\x61\x6a\xd0\x40\x37\x62\xb0\x33\x3d\xd4\x95\x3e\x76\x6f\x64\xae\xa9\xce\x5d\x74\x0e\x03\x08\xf7\xc4\xd7\xd4\x77\xf7\x63\xb6\x36\x44\xdd\xa1\x3f\x0d\x05\xfe\xdb\xe6\x1f\xd8\x48\x0b\x55\xe5\xdb\xa9\x36\x86\x95\x20\xcd\xf6\xc1\x5b\xa6\xbb\xf9\x32\x82\x33\x34\x2c\x9c\xa1\x35\x2f\xbc\x72\x42\xe7\x54\x3b\xfd\xc8\x7b\xd9\x29\x29\x40\x2a\xa6\x8c\xe8\xf4\x19\x0f\xd4\x59\x46\x59\xde\x70\xdf\xbd\xcc\x24\xd8\xc3\x8d\xb5\x4d\xc3\x39\x65\xc7\xfb\xeb\x52\xa4\x8e\x0e\xe4\xa0\xb6\x6c\xed\x93\x68\x7a\x11\xc5\x84\x97\xe6\xca\x9f\xeb\x85\x6b\x33\x65\xf3\x49\xc5\x95\xed\x53\x5f\x13\x2f\xc6\xf7\xfb\x52\x59\x71\x45\x7c\x24\x8e\x13\x04\x06\x42\x06\xee\x76\x46\x9b\x63\xb7\x6c\x3e\xf6\x64\x36\xb4\x43\x67\x8b\x99\xd8\xac\xf1\x01\x04\x98\xa3\xe8\x06\x25\x87\x6f\x0e\x5f\xf4\x1a\xb0\x2b\x23\x45\x41\xe7\xa8\xbc\xf5\x61\x81\xd6\x69\x6a\xe6\x28\x35\x8a\x3c\x7e\x6f\x01\x18\x85\x7b\x0a\xd2\x3a\xd1\xf5\x42\x04\xad\x8e\x05\xd7\xf9\x1d\xe1\x14\x50\x9b\xcb\xee\x96\xae\x08\x95\xa2\xe4\x41\x41\xbd\xe8\x3b\xa8\x7c\x4b\x1f\xd6\x5e\xf6\x42\x70\xf0\x7e\xec\x90\x51\xae\xeb\x1c\xd7\x4c\x59\x97\x3e\xe3\xe4\xf5\xe4\xf5\xab\xaf\x45\xec\xc0\x37\x5c\x13\x3b\x2e\x2a\xb1\xc3\xde\x00\x2f\xfa\xae\xbe\x46\x78\x1f\xce\xd4\x07\x67\x48\xae\x8b\x80\x33\x5f\x64\x16\x3f\xba\x95\x4c\xbb\x6d\x7e\xcb\x14\x90\x23\x54\x61\x89\x90\xcd\x24\xa3\x41\xa9\x6c\x9b\x06\x8f\xc0\x62\xe1\x31\x52\xd1\xaa\x72\xda\xd7\x0b\xc9\xdd\x3c\xc8\xd0\xb6\x7b\x1c\xee\xbd\x9b\x22\xad\xcf\xc1\x01\x39\xb2\x63\x1c\xda\x8c\x6f\x01\x2b\x1f\xe1\x20\xb9\xb5\x7a\x77\x57\x04\x14\x0d\x8b\xb7\x5e\xef\xee\x0a\x8a\x4e\x92\xa2\x17\x0b\xf7\x3f\x61\x41\x97\x80\x09\xf6\x58\x46\x65\x86\x88\xb0\x2b\x3b\x65\x64\x5a\x6a\x02\x7c\xc9\xa4\xe0\x39\x70\x4d\x30\x48\x7b\x9a\x01\x91\x80\x69\x48\x13\x50\xe4\x9b\xa3\xcf\xa7\x9f\x10\x31\x7c\xec\xf2\xb4\xba\xf7\x2b\x15\x06\xe8\xad\xbd\x43\xa3\xbb\x3e\xee\x37\xe2\xdf\xdd\x6c\x17\xbc\xc0\xfd\x5c\x98\x77\xcb\x4b\x5d\xd2\x0c\xf3\x10\x26\x59\xa9\xd8\xf2\xa5\xae\x08\x97\xa9\xf1\x2d\xeb\xb4\xa5\x63\x6c\xe6\xb3\xc6\x9a\x6e\xe4\x8d\xec\x9c\x81\x77\x4b\x1e\xa2\x0d\xf8\xc6\xa1\xaa\x72\x13\x35\x81\xa2\xce\xbc\xde\xcd\x7f\x80\x89\x6d\x6d\x84\x92\x2f\x19\xb5\x21\xdf\x63\x06\xed\x17\xd7\xa0\xf7\xde\x30\x29\x57\x67\xf8\x56\xfb\xed\x94\xb0\x3d\x72\xd5\x4a\xa4\xf4\xf6\xe2\xaa\x99\xa9\xd8\x1a\x76\xc4\xde\x93\x70\x59\x77\x51\xa7\xf3\xc6\x52\x1f\x95\x71\x0c\xe4\xbc\x2e\x11\x3c\x07\x0e\x12\xa5\xfb\xb7\x17\x57\x7b\x8e\xe5\x37\x82\x55\x21\xa6\x54\x59\xfc\xcb\xdb\x8b\x2b\xeb\x93\xdc\x8f\xf6\xce\x16\x80\xee\xca\x33\xe6\xd1\xc0\xdc\x09\x1d\xf4\xee\x70\x06\x71\x5a\xd9\xfa\xcd\xe2\xa3\x3d\xcf\x52\x43\xce\x2f\x09\x4d\x53\x89\x50\x95\x2e\xc7\xa0\x95\x58\x84\x16\x45\x85\x38\xc0\xec\xd7\x54\x41\xf3\xd5\x1b\x7b\x00\xef\xd5\x8e\xeb\x67\xdb\xdb\xb2\xc8\x98\x85\x16\x34\x87\xa8\x73\x83\xe7\x62\xd9\xe5\x68\x87\x98\xc6\x3a\x1b\xc6\x02\xae\x1f\xd1\xb5\x50\x56\xec\x6d\x25\x41\x89\x6c\x59\xd7\xf1\x0c\xde\x4e\x8e\x7f\xa0\x7f\xb8\xda\x4e\xbe\x16\xd6\x13\x6d\x25\xe0\x5a\x32\xd8\xdc\x46\xe4\x93\x79\xbb\x12\xf9\x4f\x45\x02\x5b\x02\xe2\x47\x3f\x76\x2e\x5c\x8a\xc3\x34\xea\x96\x5a\x08\xa4\xad\x72\x0b\x54\xfa\x6b\x0f\xdf\x3c\xe0\x15\x5f\x64\x4f\xaf\x65\xe2\x4c\xdf\x5e\x5c\xd9\xab\xcf\x4e\x97\x4b\x5f\xa8\xb6\xee\x9d\xce\xb7\x12\x79\xf9\x84\xed\x21\x66\x91\x76\x6d\x6c\x67\x68\x0e\x8b\x7c\x08\xd0\xd6\x82\xb2\x28\x05\x8c\xae\x80\xca\x64\xd1\x65\xfe\x63\xf3\x34\x4b\x09\x49\x85\x45\x95\xce\x84\x44\x93\xe4\x18\xaf\xd0\x4c\x88\x9b\xb2\x78\x9a\x5b\xd3\x0d\x6c\xb4\xd2\x27\xe3\x75\xad\x31\x7e\x51\xf7\x66\xca\x55\x17\x30\x5b\xa0\x14\x0e\xda\xca\xde\x38\x72\x9d\x92\x61\x7f\x26\xd7\x52\xb7\xcf\xb2\x52\x69\x90\xdf\x32\xa9\xf4\xc1\xbe\x3d\xd9\x32\xab\x78\xce\xad\x11\xfe\xb0\xd9\xdd\x5f\x98\x5e\xb8\x52\x54\x87\xa3\xf6\x57\xe6\x6f\x47\xc6\x21\x11\x92\x1c\x5e\x08\x0e\x7b\xbb\x3f\xd6\x54\x91\xea\x42\xad\xae\x8a\x7b\x65\x01\x37\x89\x0a\x32\x1b\x39\x89\x5f\x74\x3e\x18\xd7\xae\x3a\x98\xa1\xc7\xdf\x40\x0a\x34\xa1\x58\x56\x05\xfb\x5e\xd4\x25\xb9\x6c\x45\x00\x5b\xca\x4c\x38\xe5\x67\xd5\x58\xda\x3d\x07\x6f\x94\x14\xd0\xe2\xfe\x05\xe8\xa2\xe3\xec\x7d\x30\x30\x2c\x10\x5c\x5a\xe6\xf7\x8c\xdf\xec\x79\x2a\xc3\x4e\xc8\xbb\x8d\xd1\x5b\xc5\x87\x2d\x42\x8c\x71\x1b\x19\x65\x44\x08\x3a\x15\xa5\xf6\xa9\xa2\x55\xc3\x14\xc7\xf8\x7f\xd9\x7d\x81\x2e\x78\x8c\x72\xdd\x77\x55\xb6\x18\xda\xd4\xc8\xba\x27\xbc\x25\x4d\xad\xb8\xa6\x58\x4d\xee\xad\x48\x6e\x40\x92\xcc\xd0\xbc\xef\xe6\xab\xc1\xea\xad\xba\x61\x7b\x63\xd7\xba\x5a\xd2\xa1\x58\x40\x0e\x92\x66\x95\x11\xe9\x59\x17\xfd\xbd\xbb\x6e\x2b\x32\x9a\x48\x6d\x5b\x13\xc4\x95\x82\x12\xe9\x84\xbc\xdb\xf6\x54\x4e\x57\xbe\xb4\x21\xe3\x08\x25\xbd\x63\x4a\xef\x2f\x77\x14\x22\x6d\x26\x43\x2a\x15\xc8\x71\x95\x1c\xcb\x25\x59\x51\x15\x68\x3e\x85\x69\x39\x9f\x33\x3e\x9f\xd8\xfb\x1c\xe5\x86\x46\x0d\xda\xca\x28\x72\xbb\x80\x7d\x3d\x1b\x89\x04\xaa\x6d\x22\x97\x42\xa4\x36\xe2\x86\x35\x7b\xcf\x45\x6a\x3b\x9f\xae\xac\x15\xcb\xef\xc9\x2a\x5a\x9a\x9c\x73\x22\xa4\xcb\x53\x4b\xd3\x94\xec\xed\x5e\xd9\xb2\x22\xd8\x57\x3d\xbf\x96\x38\x8f\x30\xb6\xc1\xe4\xd5\xaf\x1a\x0b\xa4\xca\xa9\x91\xf0\x4b\xb9\x6f\x35\xb7\xae\x42\x45\x27\x81\x22\x54\x78\x3c\xe5\xf5\xf6\x3c\x6b\x86\x1b\x51\xa2\x21\x2f\x84\xa4\x72\xb5\x8e\x29\x33\x37\x89\xd9\xbe\x66\x81\xd6\xe6\xf6\x52\xa4\x46\x48\xd8\x9b\x8c\x2d\xdb\x76\xc9\x8c\x3a\xb3\x6d\xe7\x6e\x3d\x4f\x78\xb5\x71\x41\xfc\x9a\x91\x0e\x54\xa8\x64\x01\x69\x89\x21\xe6\xf3\x92\x4a\xca\x35\x18\xfe\xe9\x9c\xf0\x2b\x17\x00\x65\x37\x73\x15\x8e\x55\xe5\x66\x58\x21\x38\x1c\xcb\x97\x99\x4f\xb0\x72\x5a\x97\x1a\x43\x4e\x9a\x35\x1d\x35\x62\xbe\xae\x17\x40\x6e\xca\x29\x64\xa0\x71\xf2\x61\xc9\x12\xed\x07\x99\xe1\x22\x6c\xd9\xfa\x09\x2d\x6d\x3c\xd7\xfe\xc8\x9b\x4b\xe1\x8a\x07\x25\x60\xee\x24\xad\xea\xa9\x75\xd0\x66\x2c\xbc\xb6\x7f\x01\x81\x6b\x7f\xb4\xb7\x51\x5c\x9f\xcc\x47\xce\x24\x6a\xdb\x9d\xb9\x26\xbe\xde\x03\x9c\xb9\x5a\xe4\x2d\x4b\xb1\xe7\x50\x01\x9a\x7d\x77\xd4\x56\x27\xb4\x55\x88\x11\x81\xca\xf9\x8b\xe1\x18\x4f\xe5\xbc\xcc\x31\x34\xc6\x69\xa3\x75\xb1\xd4\xee\xa1\x19\xe8\xab\x39\x54\xe4\xec\xc3\xdb\x66\x5a\x87\x66\xb9\x0b\x9f\xf4\xa3\xdb\x20\x9f\xe3\x7a\x42\xc9\xf9\x8c\xd0\x4a\xea\xeb\x44\x51\x7d\x53\x3b\xd3\x96\xf3\x9f\x55\x04\x7a\xd3\x1e\xe3\x85\x11\x61\x51\x50\x6f\x24\xda\x4e\x16\x94\xcf\x0d\xaf\x7a\x2b\x4a\xf3\x62\xdf\x7c\x83\x2f\x21\x21\x2d\x13\xe8\x86\xb3\x35\xd7\x8b\x8f\x7d\xfe\xc6\xf9\xe7\x7c\x46\x7f\xa3\x8c\x82\x4a\x68\xe1\xa7\xa6\x39\x7b\x56\xcc\x7d\x43\xd8\x04\x26\xe4\xe0\x9b\xc6\x57\x07\x48\x71\x57\x20\xa2\x79\x15\x17\x6a\x8d\x6f\x9f\x31\x8d\xfc\xe3\xa0\x39\xc2\x84\xbc\x33\x74\x21\xdc\xa5\x5a\xdb\x46\xf4\xec\xb4\x5e\xd9\x11\x91\x30\xa7\x32\xcd\xa0\x63\x98\xa0\x98\x55\x5a\x86\x4d\x47\xe3\x76\x15\x32\x46\x8c\x1e\xe2\x42\x4f\xe2\xf8\x0f\x77\xcd\x5b\xa1\xa9\xba\x51\x27\x56\x9f\x19\xa7\x54\xd3\x31\x2d\xac\x05\x87\x09\x7e\x62\x6d\xa8\x63\x57\x9a\x6f\x4c\xdd\xe9\x1d\x57\x3b\xfb\xe4\xd7\x2e\xc9\xd2\x98\x56\x4f\x31\x3e\xa6\x63\x2c\x56\xd7\xd9\xe2\xf2\x02\xc8\xe1\x20\x6b\x66\x40\x6d\xc8\x18\x5c\xf5\x5d\x5d\x71\x1a\x67\x6e\x42\x2e\x84\xae\x6b\xe8\x56\xd0\xe6\x80\x0a\x82\x4d\x3e\xfb\xee\xe2\xfa\xd3\x5f\x2f\x3f\x9e\x5f\x5c\x0f\xec\x76\x60\xb7\xd8\x06\x76\x3b\xb0\xdb\x0e\x03\x77\x64\xb7\xc0\x97\x2f\xc5\x6a\x2b\x73\xd2\x36\xfb\xdd\x5a\x71\xa3\xc0\x48\x92\xaf\x28\x12\xe7\x1d\x5f\x7e\xa6\x46\x31\x2b\x24\x28\x14\xff\x8d\x3e\xb8\x0d\x6b\xe8\x1e\x40\x43\x5b\x0d\x3b\xfb\x62\x43\x71\x5e\x30\x90\x26\x22\x7c\xfe\xa2\x91\x07\x77\xdb\xaa\xd5\xa9\xb7\x29\x39\xfb\xe9\xfc\xed\xbb\x8b\xeb\xf3\x6f\xcf\xdf\x7d\x7a\x51\x24\x70\x60\x8d\x9e\x78\x18\xe0\x7d\xc4\x99\x80\x61\x6a\x41\xa8\x90\xb0\x64\xa2\x54\xd9\xaa\xaa\xe1\xb8\x9d\x5d\x6d\x46\x35\xf1\x10\x0a\x28\x5f\x55\x75\x35\xb7\x0e\xb8\x26\x8a\x6d\x13\xab\x02\x86\x7f\x61\x81\xcc\x11\x11\x43\x2c\x0b\x18\x7f\x8b\x40\xb7\xbb\x70\x16\x30\x6e\x27\xb1\xee\x3e\x11\x2d\x80\x8e\xb6\x70\x17\xd0\x51\x1b\x73\xfe\xf2\x9c\xec\x5b\x29\xf2\x48\xdc\xec\xca\x5a\x65\x3d\x42\x60\xdb\x51\x3d\x74\xd9\x7c\x5b\xe2\xb1\x53\xf4\xea\x34\xbf\x46\xc9\xcc\x0b\x1d\x50\x11\x3e\x4a\x35\xc2\x38\x85\xfb\x2c\x08\xf8\x03\x2d\x7e\x80\xd5\x27\x08\x4c\x68\xde\x9e\x6f\x44\x11\x28\x42\xc9\x0d\xac\x2c\xf4\xec\xcc\x0f\x16\x96\xd3\xbd\x87\xc5\x1c\x6f\x20\xa4\xd0\x66\xcc\x2a\x8c\x37\x10\x10\x4e\xe7\xdb\x46\x89\x3e\xb3\x84\x28\xe6\x9b\x35\xed\x55\x51\xc2\xbe\x56\x9d\x6c\x4a\x8f\xee\x7a\x88\x30\x71\x7b\x27\xe6\x15\x4b\x23\x9a\xc0\xed\x89\x0b\x60\x19\xdf\x32\xbd\x18\xdb\xb3\xa3\x4e\x10\xe3\x7d\xf2\x6b\xfc\x4f\x04\xda\xae\x3f\xbe\xfd\xf8\x86\x9c\xa6\xa9\x0b\x07\x2e\x15\xcc\xca\xcc\x06\xd9\xaa\x09\xa1\x05\xfb\x0c\x52\x31\xc1\x47\xe4\x86\xf1\x74\x44\x4a\x96\xfe\xa9\x4f\x9b\x49\x78\xd4\x48\xdc\x0d\x75\xe5\xd0\x4c\xcd\x5b\xbf\xe2\x85\xc4\xe6\x5d\xc2\x23\xe6\xb3\xa9\x3b\x01\x36\xd2\xd4\x84\xc5\x81\xda\xd6\x2a\x0b\x91\xd3\x62\xec\x54\x6c\x2d\x72\x96\x04\xf4\x8c\x7b\x23\xee\xc5\x13\x7c\x7c\xeb\x9b\xcb\x86\x87\x57\xb5\x50\xd2\x37\x44\x95\x98\x58\x5e\x91\x1c\x34\x4d\xa9\xa6\x13\x73\x78\x46\xed\x3f\x55\x41\x13\x18\x91\x7f\x54\x1f\x66\x74\x0a\x99\xfa\xf1\xf0\x3f\x7e\x78\xf7\xd7\xff\x3c\xfc\xfb\x3f\x9a\xdf\xa1\xa4\x81\x96\xb0\xe6\x03\x81\xaf\x80\x60\x15\x2e\x52\xb8\x40\xea\xf0\x4f\xa7\xa4\x9c\x26\x89\x28\xb9\x76\x5f\x60\x0a\xbd\xc9\x42\x28\x7d\x7e\x59\xfd\x59\x88\x74\xfd\xaf\xa0\x72\xd4\xbd\xbc\xb2\x71\x6d\x03\xf2\x85\xd8\x16\xef\xe2\xae\xb9\x63\x64\xee\xe3\x7a\xf5\xdb\x18\x2b\x5f\x52\xfc\xe7\xb7\x7e\x0a\x8c\x5c\x5b\x25\x39\xe5\x98\xab\xd0\xa8\x29\xed\xca\x49\x07\xcb\xd7\x41\xca\x92\x6d\x11\xb9\x75\xb5\x82\x91\x27\x0c\x67\xc4\xcd\x96\xe5\x00\x95\xe8\xe3\x15\xec\x1a\x87\x76\x7a\x79\x4e\x96\x76\x86\x7b\x34\x39\x4f\xc5\xae\x3d\xb8\xe5\xdb\x5e\xb3\xed\x26\x04\xa7\x65\xea\x79\x43\x30\xb3\x83\xff\xde\x65\xb4\x54\x55\x15\x0f\x50\x3a\x54\x0e\x3a\xb2\x5d\x4e\x92\xa2\x1c\xb9\xee\x27\x39\xe4\x42\xae\xaa\x3f\x2b\xe0\xd0\x58\x69\x21\xe9\x1c\x53\x4c\xd8\xc1\xed\xcf\xaa\xbf\xec\x0f\x5b\xe4\x6d\xfe\xda\xda\xd2\x92\x52\x1a\x11\x33\x5b\xf9\x2b\x2a\x2c\x66\xbe\x97\x2c\xdb\xaf\x5b\x4f\x38\x76\xb5\xad\x2e\xe2\xeb\x20\x87\x35\xd6\x11\x35\x9c\x6a\x16\xd1\x80\xe1\x92\xa2\x8d\x2a\x81\xd5\x5a\xd9\xf8\x92\x2c\xa9\x54\x21\x75\xed\x6c\x8b\xc8\xa4\x53\xb6\x64\x4a\x04\xa4\xa5\xa8\x3a\xda\x94\xa8\x7d\xf0\xb5\xcb\x50\x6b\x21\xec\x95\xc9\xfe\xae\xc0\x6c\xf5\xd5\x61\x5f\xbb\xcd\x5e\x1f\x04\x93\x54\x50\xad\x41\xf2\x37\xe4\x7f\x1d\xfd\xed\x37\x3f\x8f\x8f\xff\x74\x74\xf4\xe3\xab\xf1\xbf\xff\xfd\x37\x47\x7f\x9b\xe0\x3f\xfe\xf5\xf8\x4f\xc7\x3f\xfb\x3f\x7e\x73\x7c\x7c\x74\xf4\xe3\x0f\x1f\xbe\xbb\xbe\x7c\xf7\x77\x76\xfc\xf3\x8f\xbc\xcc\x6f\xec\x5f\x3f\x1f\xfd\x08\xef\xfe\xbe\x63\x27\xc7\xc7\x7f\xfa\x26\x98\xf4\x08\xe5\xeb\x6c\x8b\x59\xc4\xae\xdd\x63\x94\xed\xf7\x84\x25\xc4\x6d\xf3\xdb\x2b\xf6\xf9\xf7\x71\x8a\x6f\xea\xdb\xac\x92\x42\x7a\x74\xc0\x9f\x4a\xd0\x50\x90\x48\xd0\xcf\x61\x94\xb4\x23\x35\xf2\x6d\x1e\x2a\x52\x29\x71\x5f\xdb\x0d\xfa\x4b\xb0\x53\x7a\x3d\xc7\xae\x6b\x2d\xba\xcf\xa4\xc8\x5d\x6e\x42\xeb\xb4\x5d\x62\x9c\x9e\x7b\xee\x06\x02\x0c\xfa\xbe\x0d\x76\xcd\xce\x6d\xb0\x6b\xae\xb7\x2f\xd3\xae\x79\x65\x8f\xd3\x2f\xd0\xa8\x09\x7c\xd9\xd5\x5d\x19\x13\xa3\xe5\x55\xdb\x66\xdd\x8c\xdd\x80\x10\xdd\x31\xb2\x37\xb0\x52\x15\xea\xa2\x06\xde\x5a\xb1\x25\xdf\x8e\x92\x21\xa7\x59\x46\x18\xb7\x4c\xd8\x74\xd0\x69\xf4\x3a\xc2\xde\xea\xbc\xae\xf0\x0e\x2c\xcd\xab\x56\x45\x69\x5b\x75\xaa\x30\x4c\x06\xe3\xb4\xfe\x62\xc3\xa0\x6e\x6c\x64\x94\xd2\x38\x25\xbe\xfa\x58\x27\x72\x2a\x55\xa3\xae\xbc\x4a\x95\x12\x89\x8d\x1a\xab\x02\xad\xb1\x6c\x88\x9b\x1e\x7c\x03\x4d\x6f\x10\xc1\x92\x40\x0a\x7c\xdf\x78\x3e\xdf\x3e\xdb\x88\x73\xbf\x0e\xd3\x15\x56\xbf\xe2\x4b\x5f\x75\x37\xf5\x59\x0a\xf0\x8d\xe3\x8d\xfb\x75\x41\xf6\xcc\x19\x76\x58\x81\x06\x72\x0f\x25\x8a\x3a\xae\x0b\x01\x8f\x62\x56\x7b\x71\xba\xed\xde\x60\x09\x31\x5c\x1e\xab\x00\x00\x41\x82\xf6\x86\x20\x56\xbb\xb7\xda\x02\xd8\xd7\x80\x99\x08\x17\xcd\xe2\x8a\x65\x4f\x21\x92\xf5\x55\x1c\x7b\x7e\x51\x2c\x92\x18\x16\x47\x04\xdb\xc3\xad\x1c\x53\xec\x8a\x23\x72\x3d\x85\xad\xa0\x90\x30\x63\x77\x91\x18\xd7\x29\xaf\x0d\xaa\x2c\x05\xae\xd9\x8c\xd9\xf0\xfc\x42\x42\x01\xdc\xc6\x1b\xd3\x64\x81\x17\xa8\x13\x9f\x6a\x50\x53\x1f\xf1\xc0\x56\xbb\x8d\xcb\xdb\xaf\xb6\x69\xd6\x03\x63\x27\x03\x63\x0f\x68\x03\x63\xdf\x49\xaf\xfe\xda\xb9\x3a\x46\x5b\xbe\x78\xc2\x67\x4b\x06\xf2\x83\xa7\x8c\x8b\xab\x4e\x59\x9d\xdc\xe1\x04\x47\xee\x72\x98\x82\xb6\x33\x8e\x7a\x59\x66\xd9\x0b\x97\x23\xc5\x69\x2f\xca\x2c\x73\x59\xbf\xba\xcd\xfe\x47\x8e\x6c\xf3\x14\xcb\xcd\x8f\xc8\x05\x2c\x41\x8e\xc8\xf9\xec\x42\xe8\x4b\xab\xd0\x85\x97\xa4\xb4\x9d\x13\x36\x23\x6f\x32\xaa\x41\x69\xa2\x6d\xdd\xea\x46\x6e\x6f\x21\x5b\x83\xd6\xd5\x23\x5e\x50\xcf\x0e\xdf\x9b\xbf\xf6\xa9\x91\xc6\x2f\xb3\x57\x33\x36\x83\x64\x95\x64\xe1\x6c\xe2\xbd\xef\xc9\xe3\xfa\x31\x64\xc5\xf9\xd8\xb7\xa5\xce\xfa\x02\x13\xa7\x16\x42\xe9\x2b\x4d\xa5\x8e\x92\x3d\x35\x40\xa4\xb9\xf4\x84\x60\x71\x79\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x21\x5b\x11\x3a\xd3\x20\x5b\xe5\xde\xcd\x73\x58\xd0\xda\x57\x94\x07\xb2\xa0\x3c\xcd\x40\x62\x5d\xdf\x8e\xe5\xee\x89\x0b\x9a\x6a\x8d\xe3\xab\xf3\x56\x05\xef\x7d\xee\x24\x9a\x24\x42\xa6\x18\xba\x24\x7c\x8e\x21\x7c\x89\x10\xfe\x64\xda\x47\xbc\xd9\x73\xca\xe9\x1c\xd0\x2e\xbb\x51\x1e\x11\x8b\x66\xaa\x46\xb5\xfd\x85\x10\x37\x24\x11\x79\x91\xe1\x49\xed\x3c\x74\x77\x06\x50\xfd\x73\x5c\x1d\xc2\xb1\xa1\x4a\x9d\xfc\xba\xfe\x0a\x3f\xe8\x48\x5c\x04\x65\x20\x86\x2a\x00\x77\x90\x84\xc8\x73\x6d\x9b\xe2\x1d\x24\xd5\xad\x60\x2d\x89\x36\xeb\x1d\x66\x03\xa2\x37\x41\x91\x6f\x91\x7c\xcc\xb1\xfc\xba\x01\x29\x41\x9a\x2d\xb6\xdb\xf2\xcc\x92\xe5\xab\x92\x3a\x2a\xb1\x66\xb5\x4d\x21\x86\x39\x43\x7c\xa1\xd2\xd6\x31\xb4\xa6\xfc\x8d\xf2\x1f\x3e\x8e\x2c\x98\x34\x4f\x8b\xa1\x4d\x0a\xa1\xc9\xd1\xe1\xc9\xe1\xf1\x86\x6f\xa6\x5d\xe3\x12\xd5\xf0\xa4\x7e\x29\xc5\xf2\x02\x4b\xb6\x40\x72\x98\x8e\x08\xd3\x5d\xd2\xba\xad\x37\x73\x21\xda\xec\x8f\x38\x2b\x2e\x91\xca\x88\x28\x41\xb4\xa4\x29\x73\x86\x12\xfc\xd4\x3c\xa4\x65\xe9\x92\x39\x1e\x1d\xfe\x7c\x38\x22\xa0\x93\x63\x72\x2b\xf8\xa1\xc6\xe9\x9b\x90\x6b\x61\xb4\xba\x70\xe8\x92\x27\x64\x25\x4a\xc2\x01\x5c\x16\xb8\x2a\xdf\xab\xb9\x5b\x88\x28\xb5\x4d\xb6\x45\x75\x48\x02\x98\x66\x7b\x77\xc7\xb4\xaf\x39\x2f\x66\xe4\x15\xee\x26\x7b\x3f\x11\xaa\x48\xc6\x96\x70\xb2\x00\x9a\xe9\x85\x45\x6c\x72\xc1\xc7\xff\x04\x29\x30\x5d\x0c\x77\xdf\x84\x92\x11\xe6\x26\x69\xb6\x00\x97\xc9\x26\x41\x81\x5a\xb4\xb9\x86\xbe\x83\xce\x22\x0a\x59\x67\x19\xdf\x5f\x5f\x5f\x7e\x07\x7a\x8d\xeb\x9a\x51\x3c\x8e\xb6\x91\x92\xb4\x07\xec\x37\x0e\xc0\x67\x4c\x0a\x21\xfb\x70\x0b\x2c\x84\x0a\x5a\x4b\xf2\x04\x57\xc0\xf7\x42\x69\x5b\xa4\xc5\xd6\xaf\xe4\x90\x98\x4d\xd0\x06\x85\xfa\x5c\xaf\xe7\x97\x13\xf2\x57\x51\x9a\x09\x99\xd2\x69\xb6\x22\xb7\x94\x3b\x83\x67\x18\x92\xcb\xb4\x03\x43\xca\x81\xe1\xf0\x66\x43\x7e\x0f\x34\x05\xa9\x90\x81\x02\x0d\xc4\x6c\x47\x04\x8d\x34\x68\x8b\xba\x94\x67\xa5\xd2\x22\x27\x0b\xf7\xda\xed\xdc\x31\xee\x70\x4e\xf0\x00\xfb\x04\x02\x12\x0a\xcb\x64\xdd\x6f\xbe\x3a\x16\xba\xc1\xba\xec\xbc\xb7\xaa\x37\x27\xcd\x69\x33\xb3\x56\x85\xa6\x73\x3b\x59\x66\xab\x46\x00\x3b\x45\xc3\x2c\x92\x88\xb8\x45\x12\x96\x55\x66\xbd\x23\xc4\x65\x04\xf7\x14\x0f\x0a\x49\xa2\xc1\xfd\xc8\x93\x40\xfe\x88\x43\xf9\xb8\xcd\x67\x43\xa2\xba\xdb\x46\xb7\x75\xde\xa8\xdc\x91\x50\x2e\x38\x4b\x68\xc6\xfe\x09\x29\x29\x0b\xc1\x1d\xbe\x1f\x25\xcf\x84\x2a\x18\x23\x84\x89\x5b\x76\xae\x1a\xf9\x4d\x0c\x77\xd0\x42\xa0\x38\x86\x80\x0d\xc3\xee\x2d\xd5\x71\x48\x8d\x0a\x4c\x0f\x4e\xd6\xd3\x6c\x1b\x4e\xba\xd6\x62\xc5\xd9\xf1\x24\xe6\x0c\x14\x11\xe2\xf6\x36\xa3\xf6\xb4\x20\x34\x49\x30\xc9\x8a\xbd\x51\x90\x37\xda\x32\x66\xbd\xb9\x5a\x8d\x94\xd6\x37\xf1\xc8\xba\x1a\x25\xe1\x65\x3e\x05\x59\x87\x3c\x4b\xbd\x39\xa7\x81\x80\xc1\xd6\xb0\x76\x38\xef\xd5\xf2\x62\x00\xe5\x73\x20\xaf\xcd\xc8\x7f\xfc\xc3\x1f\x7e\xf7\x87\x08\xe3\x98\xd7\xab\x80\x88\x9c\x9c\x9f\x5e\x9c\xfe\x74\xf5\xf9\x0c\x73\x00\x85\x76\x1f\x29\x96\x26\x76\x24\x4d\xd4\x38\x9a\x27\x8d\xa2\xc1\x90\xe4\x60\x46\x18\xfb\x48\x5c\x21\x55\x66\x13\x96\xca\xe6\x0d\x72\x6a\x83\xb3\x06\xfb\x52\xfa\xe1\xbb\xb3\xe9\x57\x32\x0c\xab\x17\x9c\x4a\x65\x00\x45\x34\x8d\xfc\xca\xf4\xb6\x0e\xa8\x4c\x7d\xf1\x51\x34\xd3\xb4\xad\xdf\xae\xec\x0c\x52\x41\xa6\x30\x13\x12\xc8\x14\x70\xea\x2b\x5b\xfd\x57\xa4\xb9\x2b\x48\x04\x4f\x43\xe4\xf7\x58\xf2\xa8\xa3\x24\xea\x69\xbc\xb2\x7d\x7a\xfb\x6b\x7d\xc9\xb8\xc1\x50\x0d\x34\x2b\x1d\x67\xe7\xc7\xe1\xa0\x36\x9c\x14\x7b\xfb\xe3\xef\xbb\xbb\x9a\x92\xe2\x4a\x24\x37\x11\x8d\x5b\x81\xac\xed\xad\x39\x83\x89\xf5\xaa\x5d\x9f\x5d\x5a\xe2\xcc\xca\x5c\x7c\xbc\xae\x63\xc7\x11\x47\x5f\x3b\x48\xbf\x77\x7e\x37\xca\x53\x72\x03\x45\x98\x6a\xe8\x53\xb0\x4d\x69\x72\x73\x4b\x65\x8a\x3e\x2d\xaa\xd9\x94\x65\x4c\xaf\xd0\xb8\x2d\x01\x83\xda\xb9\xb0\x41\x5a\x96\x4b\x08\x97\x6e\xdb\xca\xb4\x61\x59\x1b\x1b\x6e\x64\xf4\xab\x39\x35\x62\x46\x59\x66\xa4\x10\x57\x87\xdb\x45\x10\x24\x45\xe5\x78\x6c\x3a\xf8\xbf\x22\xf6\xf3\xb5\x1a\x0e\x0f\xeb\x3a\x60\xfb\x1a\x00\x43\x83\x6c\xbf\x6e\x75\xc1\x71\x70\x9b\x9d\x60\x50\x17\xf6\x69\x83\xba\xd0\x51\x5d\x28\x24\x5c\x69\xd1\x59\x26\x8d\x06\x64\xb1\x64\xdc\x03\x63\x71\xa2\x2a\xbd\x17\x5f\x92\x96\x60\x8b\x92\x75\x26\xe0\xf4\xf2\xbc\x72\x63\x89\x16\x86\xc4\x86\xbd\xf9\x8a\x64\x19\x5b\x02\x07\xa5\x4e\x10\xb1\x52\x16\xd6\x46\x8c\x77\x5c\x29\xa1\x3b\x7a\xa6\x90\x00\x39\xce\xe3\xa8\x4e\x4e\x60\x5e\x17\xb8\xfd\x10\x74\x62\x5d\xd4\x8d\x5b\x93\x0b\x5d\x4d\xd7\x2c\xc8\x73\xde\x28\x1e\x26\xa9\x5a\x00\xe6\xbd\x85\x3b\xa6\x95\x1d\xf4\x12\x43\xf8\xfd\x8c\x1b\xc1\x61\x2e\x69\x02\xa4\x00\xc9\x84\x11\x36\x4a\xae\x53\x71\xcb\xc9\x14\xe6\x8c\x2b\xbf\x62\x21\x24\xf9\x2d\x81\x08\x1d\xa6\xaa\x22\x24\x13\xf2\xa9\x95\xf6\xd7\x25\x2b\x49\x44\xcd\x33\xdd\x14\x8d\x22\x4d\x09\x4a\x31\xb8\x0d\x4a\x9a\x65\xab\x7a\xe3\xf9\xb0\x4c\x7d\xff\x0c\x75\xdf\x10\x76\x66\x8f\x4a\x8e\x2f\x9a\x42\x46\x57\x36\x00\x71\xc6\x38\x1a\x72\xa5\x3a\x9e\x84\x43\x9e\x3a\x13\x28\x64\xa3\xcf\x7b\x77\x06\x53\x44\x02\x4d\x16\x21\x92\xdd\x80\xad\x7a\xac\x0d\xd8\xaa\x8e\x6d\xc0\x56\xed\xdb\x06\x6c\xd5\xbe\x6d\xc0\x56\xf5\x09\x18\x30\x60\xab\x06\x13\xc9\x7a\x1b\xb0\x55\x0f\xb5\x01\x5b\x35\x60\xab\x5a\x6d\xc0\x56\xed\xd0\x06\x6c\xd5\x8e\x6d\xc0\x56\x0d\xd8\xaa\x01\x5b\x35\x60\xab\xf6\x6b\x03\xb6\xaa\x7b\x1b\x9c\x25\x03\xb6\x2a\xa8\x0d\xd8\xaa\x01\x5b\x35\x60\xab\x06\x6c\xd5\xbd\x6d\xc0\x56\x0d\xd8\xaa\xad\x6d\x30\x1c\x6e\xb4\x01\x5b\xb5\xa5\x0d\xd8\xaa\xfd\xc6\x19\xd4\x85\xb0\xce\xa2\xab\x0b\x1e\x27\x74\x29\xc5\x34\x3c\xa9\x12\xf6\xa2\xdc\x15\xf3\x55\xa6\x54\x0a\x41\x30\x3c\x0f\x7a\xa1\x27\x50\x8f\x08\x88\x85\x98\xcc\xb5\xa7\x48\x85\x7e\xa2\x14\xfa\x88\x50\x78\x09\x74\xc2\x8b\x23\x13\xe2\xb8\xd4\x22\xb8\xd3\x82\xaf\x30\x07\x3c\xbd\x5e\x48\x50\x0b\x91\x75\xe6\x0b\xb1\x78\xc2\x07\xc6\x59\x5e\xe6\xe6\x88\x29\x73\xf4\xd9\xb2\x02\xc7\xaa\x4a\x91\xb2\x98\x59\xeb\x14\x34\x0f\xb2\x14\xb0\x0a\x1f\x65\x99\xd9\x01\x98\xb4\x6e\x41\x97\x86\x2d\xa8\x32\x49\x00\xd2\x10\xe5\xa5\x69\xad\xfa\xdd\xa4\xa2\xd0\x56\x92\x60\x8a\xbc\x0e\xbb\x11\xc2\xe4\x99\x86\xd2\xfe\xbb\xdf\x76\xea\x63\x2e\x8b\x38\x37\xe7\x77\x9f\x2e\xcf\x1a\x37\x27\xe5\xfe\xe2\x64\x7c\x29\x32\x5c\x0d\x6a\x1f\x32\x72\xf3\x0b\x5e\xa3\xe1\x4a\x64\x90\x02\x19\xe3\x16\x0f\xd5\x91\xda\xd2\xa1\x51\x63\xda\x8e\x90\x39\xae\xa5\x2d\x4e\x3d\x79\x06\x35\x24\x96\x68\x1f\x7e\x1c\x08\x9a\x04\xf1\xc5\xfb\x22\x23\x5d\x59\x72\x2a\x6b\x62\x43\x03\x75\x94\x22\xba\x2b\xa3\x49\xb5\x36\xb8\x7e\xdf\xe3\x45\x77\xb6\x80\xe4\xe6\x93\x05\x9a\x04\x91\x71\xa4\x00\x2a\x00\xf5\x9c\xe9\x45\x39\x9d\x24\x22\x3f\x31\x0c\xc4\xfe\xdf\x34\x13\xd3\x93\x9c\x2a\x0d\xf2\x24\x15\x89\xbb\x83\xc7\x89\xa1\x80\xf1\xf9\x24\x4f\x8f\x27\xbf\xfa\x55\x10\x11\xe7\xce\x26\xe6\xa2\x17\x1a\x89\x7d\xd1\xc0\x6e\x59\x35\x99\x82\x61\xff\x02\xcd\x57\x8d\xd2\x3b\x66\x56\xc2\x77\x69\xc0\x6d\x1b\x88\xfb\x7b\x7e\xcc\xdf\xc0\x6d\x49\x04\x33\x5d\x4c\x66\xd0\x0f\x5c\xdf\x93\x61\xfa\xa2\xc1\x6b\x23\x60\xf9\x7a\x84\xe3\xeb\x8d\xc2\xd1\x17\xec\x5e\x0f\xeb\xb8\x46\xc0\xeb\xc5\xc0\xea\xc5\xc3\xe9\xf5\xb5\xdc\xe9\x93\x61\xf3\xbe\x08\x5c\x5e\x44\xab\x75\x24\x3c\xde\x73\x60\xf1\xa2\xbc\x75\x28\x06\xef\xf9\xf0\x77\x71\x5e\x37\xa6\x92\x18\x78\x72\x5f\x00\x6f\xf7\x1c\xce\xb3\x27\x73\x9c\x45\x70\x9a\xc5\x74\x98\x45\x73\x96\x3d\x19\xae\x2e\x1c\x53\x17\x55\x65\x7f\x16\x2c\x5d\x4c\x1c\x5d\xf0\xfa\x32\xce\x34\xa3\xd9\x5b\xc8\xe8\xea\x2a\x0c\x53\x15\x6b\x25\x2e\x36\x70\x57\xd6\x36\xdc\x46\xde\x2d\xa8\xab\x3f\x0c\xa9\x07\xde\x79\xef\xab\x93\x54\xd1\x71\x6a\xdf\x2f\x08\x85\xb7\x67\x20\xfa\xad\x90\x37\x99\xa0\xa9\x3a\x29\x84\xfd\xbf\x3a\x0c\xbd\x11\x7f\x1e\x24\x4d\xf7\xc3\x06\x6d\x83\xfd\x7b\xb2\x6b\xbe\x17\xb7\x44\xcc\x34\x70\x72\xc4\xb8\xdf\x39\xc7\x0d\x63\x4a\xed\x83\x08\x76\x2a\x98\x5e\x5f\xbf\xf2\x83\x7c\x7d\xce\x05\x74\xbf\x28\xd5\x6b\xf7\x92\xa3\xf1\x71\xff\x92\x7b\x70\x56\x66\x6d\x1f\x93\xf5\x3b\xc5\x71\x30\xbd\xae\x2b\x96\xbe\x46\x7a\x2a\x56\x44\x79\x4a\x5c\xd2\x98\xaf\x6f\x9f\x04\xa3\x46\xdb\x3a\x48\x05\xf3\x7c\xcc\x1d\x75\x7d\x76\x39\x78\xa3\xfa\x65\x1f\x7d\x21\x08\xe3\xd7\xa7\x71\x3d\x3f\x64\x71\xd0\xb8\x7e\x29\x1a\x57\x23\x5f\xd3\x77\x92\x26\x70\xd9\x27\x01\xce\x33\x90\x3a\xde\xa6\x96\xe3\x2a\x76\xc1\x01\x6c\x1c\x46\x9d\x8d\x0b\x13\x4f\xcd\xca\x2c\x5b\x59\x73\x5f\x2b\x35\x5b\xf7\xad\x75\xbd\x80\x8d\x9c\x56\xad\x68\xa0\x06\x75\xb5\x7e\x52\x48\xe1\xa4\x12\x59\x72\x6e\x6e\x2b\x77\x9c\x0c\xf1\x46\x1f\x51\xc0\xbb\x5b\xbe\x69\x2b\xe3\x96\x62\x73\x33\x5d\x46\xc2\xc0\x64\x5c\x75\x24\x40\x8b\x10\x33\xea\x4c\xc8\x84\x4d\xb3\x15\x59\xd0\xcc\x28\x4c\xb7\x4c\x2f\x08\x25\x37\x2c\xcb\x5c\x37\xdd\x27\xea\x0a\xb4\x75\xee\x5a\xa9\x26\x13\x7c\x8e\x93\x41\x2d\x21\x70\x57\x40\x62\xc6\x4c\x32\xa0\xbc\x2c\x2c\x9d\x46\x46\x5a\x89\x52\x7a\x3a\xbb\x0f\xef\x5d\xcb\x95\x4c\xc5\x59\x36\xf2\x53\xde\xce\xcd\xb6\xb9\xe7\x6b\xeb\xaf\x82\xd4\xa5\x55\xbb\x65\x0a\x46\xd8\x67\x67\x9a\x2c\x2d\x62\x09\x52\xb2\xd4\xb9\x78\xed\x67\x85\x14\x4b\x96\x5a\xbf\xb6\xdf\x16\x46\xda\xe9\xfe\xfe\x9f\xb1\x5f\xcf\x5a\xb9\xe0\x63\x0e\x73\x8a\x22\xb2\x63\x68\x16\xe1\x68\xc7\xb7\x78\x3a\x9e\xb2\x84\x6a\x30\x0a\xb4\x28\x5a\x39\x17\x97\x8c\x76\xa6\xc4\xbc\x4f\x63\x47\x91\x23\x2e\x88\xc0\x40\x9d\x92\x33\xbd\x42\xe7\xdb\xa2\xd4\x24\x15\xb7\xfc\x38\xe4\x60\x5a\x20\x01\x25\x53\xd0\xb4\x0e\xb3\xf1\x22\x99\x22\xc0\xe9\x34\x33\x67\x0f\x01\xd4\xd7\x5b\x37\x00\x99\x01\xd5\xa5\x04\x32\xa7\x3a\x80\x4b\x6c\x91\xe8\xed\x7a\x3e\xbc\xed\x98\x72\xae\xb5\x19\x29\xb9\x82\x40\x41\x36\x9a\x1a\xd0\x31\x80\xcc\x9c\x68\x51\xfe\xff\xec\xbd\xff\x73\x1b\x37\xb6\x2f\xf8\xfb\xfb\x2b\x50\x9a\xa9\x27\x69\x42\x4a\x76\x72\x67\x6a\x6e\x5e\x76\x52\x1a\x49\x71\x54\xb1\x65\xae\xa5\x24\x2f\x9b\xe4\xe6\x82\xdd\x20\x89\xa7\x6e\xa0\xa7\x81\xa6\xc4\xd9\xec\xff\xbe\x85\x73\x00\x34\x9a\xa4\x6c\x13\x68\x8b\xb4\xc3\x9e\xaa\x89\x25\x52\x8d\x83\x6f\xe7\xfb\xf9\x1c\xbd\x23\x72\xe4\x31\xf7\xd1\xfd\x8c\x67\xb3\xd0\x50\xe4\x25\x53\x44\x36\x09\xde\xbc\x8e\x09\x68\x87\xeb\xd3\xca\xdb\xfb\x9e\xd6\x3e\xb1\x11\xce\x3e\x4e\xd8\x75\xa0\x95\xaf\x29\xc2\x68\x53\x9b\xb0\x34\xf1\xe2\xfa\xe6\xb7\x97\x67\xff\xbc\x7c\x19\x77\x04\x80\xd7\x89\x50\x77\x6e\x04\xff\x57\xc3\x08\x2d\xa5\xb1\x84\x8b\xb0\xfe\x63\x00\xce\xce\xe0\x17\xc0\x15\xfb\xad\x14\x89\xd4\x6b\x8d\x10\x88\x62\x0c\x2b\x19\x8f\x4f\x51\x0e\x13\x9b\xb0\x91\x90\xa8\xd1\x4d\x5a\x71\x73\x80\x14\xcf\xa0\x1a\x9d\x12\xc1\xb4\xb9\xe3\x68\x10\x72\x41\x28\x51\x5c\x4c\x8b\x64\x5b\x30\xd9\x23\x92\xea\x0f\x19\xb6\x33\x18\xc5\xba\x45\xd2\x9d\x22\x1d\x1a\xe2\xad\xca\xfe\x1c\x02\xad\x30\x73\x2e\x00\xf6\x50\x49\xc5\x9c\x0b\x00\x75\xdc\xab\x11\xa1\x79\x5e\x27\xe9\xd1\x96\xd9\x78\x1b\x1d\x4b\x9a\x71\x58\x0c\xff\x0e\xc8\x33\xf2\x15\x79\x20\x5f\x81\x43\xe0\x6f\xf1\x43\xf5\x63\x6e\xf7\x91\x34\x3c\x93\x4a\x5f\x8d\x7a\xda\xe8\x1f\x67\x54\xc3\x1b\xcd\x7e\x68\x49\xc6\xdc\x5a\x66\xec\x41\xb3\xda\x68\xc4\x76\x0f\x53\x57\x2e\xc9\xb9\x60\x08\xfc\x58\x4e\x77\x6a\xac\xf5\x6a\xd2\x4d\x35\x7e\xa2\xf3\x0d\x03\x7f\x2b\x95\xbe\xb6\xdc\x3a\x2c\xc7\x0f\xe9\x28\xa9\xce\x66\x5d\x76\x9f\x32\xea\x2b\x73\xf6\x02\xf1\x9f\x4b\x10\x94\x58\xde\x35\xe3\x09\xcc\x61\x77\x6e\x6c\x5a\x76\x5b\x7f\x47\xf7\x6d\x47\x6b\xc9\xbd\x09\x6a\x98\xd5\xdb\x02\xe8\xf8\x4a\xe6\x27\xe4\x92\x66\xb3\x04\x2a\xcc\x6a\xe4\x81\x32\x50\xc9\x1c\xc9\x98\xd1\xb9\x39\xe3\x76\x54\xc8\xb4\x43\xd5\xd5\x07\xcb\xe0\xc2\x19\x8e\x95\x51\x41\xc6\x29\xa9\x5e\x35\x9b\xb0\xba\xc6\x12\xc2\xf1\xc2\x15\x37\x24\x9f\xb6\x24\x2e\x57\xd5\x52\xcb\x4c\x16\xbb\x70\x54\x46\x96\x16\x58\x7b\x08\x5b\xf9\x60\xe1\xf7\x17\xa3\x01\xb9\x3d\x1f\x0d\x88\xac\xc9\xcd\x79\x5a\x2e\x48\x68\x8d\x1e\xdc\x9e\x8f\x0e\xb6\xba\x03\xc4\x85\x7b\x20\xb0\x17\xf1\x92\x8e\x07\xbc\xe0\x4a\x0f\x4b\x5a\x0d\xef\xd8\x22\x52\xbb\xeb\x43\xc3\x1c\xfa\x83\xd5\xcb\x84\x70\x99\x4b\x5a\x6d\xfc\xb6\x9a\xd1\x9c\xef\x91\x06\xde\xff\xd9\x23\x0d\xbc\xe7\xb3\x47\x1a\x78\x9f\x67\x8f\x34\xf0\xbe\xcf\x1e\x69\x20\xfa\xd9\x23\x0d\xac\x3e\x7b\xa4\x81\xcd\x9e\x3d\xd2\xc0\xe6\xcf\x27\x90\xdb\xb5\x47\x1a\x58\xff\xec\x91\x06\xf6\x48\x03\x7b\xa4\x81\x3d\xd2\x40\xfb\xec\x5c\x26\xed\x1e\x69\xe0\x6d\xcf\x1e\x69\x60\xed\xb3\x33\x06\xc7\x1e\x69\xe0\x91\x67\x8f\x34\xf0\xc8\xb3\x47\x1a\xd8\x23\x0d\xec\x91\x06\x36\x7c\x3e\xbd\xba\x97\x3d\xd2\xc0\x46\xcf\xbe\xee\x65\xc3\x67\x8f\x34\xb0\x47\x1a\x58\x7e\xf6\x48\x03\xef\x7c\x76\xc3\x07\xbd\x47\x1a\xd8\x23\x0d\xbc\xf5\xd9\x23\x0d\xec\x91\x06\xde\xfa\xec\x91\x06\x3e\x15\xff\xe8\x1e\x69\x60\x8f\x34\xf0\xb6\x31\xf6\x16\xd7\x66\xcf\x1e\x69\x60\x8f\x34\xb0\xf2\xec\x91\x06\x56\x9f\x3d\xd2\xc0\x1e\x69\x60\x8f\x34\xb0\x47\x1a\xf0\xcf\x1e\x69\xe0\x53\xf7\x3d\xd5\x4c\xf1\x7f\xb3\x91\x2c\x78\xb6\x48\x2e\xb2\x78\xc3\x94\x6c\xea\xcc\x48\x6c\x78\x2d\xa9\xe0\xbd\xde\xab\x90\xa4\x64\xef\x58\xe5\xfa\x9b\x60\xe1\xc2\x0a\xf6\xda\xae\xc1\x87\x58\x82\x9d\xa8\x62\x77\x13\xbc\x8e\x0f\xf6\xc3\x4b\x34\xad\x35\x2e\x5f\x9c\xc3\x34\xd9\x6a\x0f\x27\xb2\x0b\x55\x74\x21\xf0\x86\x3f\x45\x5a\x7a\x66\xcb\x1f\x3d\x5c\xb4\xaa\x0a\x9e\x52\x8f\x48\xc8\x8d\x6f\x38\x0e\xac\x56\x7d\x49\xb2\xaa\x19\x90\x92\x95\xb2\x4e\x28\x14\xe8\xc1\x82\xeb\x1c\x95\x5d\xd8\xa7\x37\x48\x90\x5b\x7c\x2d\x61\xfd\x17\x68\x2f\xb4\xe8\x28\x7e\xaf\xb8\x63\x87\x49\x69\x61\x57\x93\xe5\x74\x4f\xae\x3b\x5e\xa0\x6b\xa9\xdf\xd8\xcb\xbd\xb5\xfd\x7a\xac\x00\x90\x6a\x59\xf2\x2c\x46\x38\xa1\x3c\xd9\x16\x16\x4e\x2b\xd0\xde\xbb\x70\x90\x5c\xae\xf9\x2d\xc4\x40\x55\x65\x5e\xe2\xe7\x14\x45\x10\x2d\x6a\x46\xf3\x05\x90\x91\x41\x6a\x5d\xeb\xff\xfb\x08\x6b\x16\xb3\x82\xf2\xf8\x7c\xbc\xbe\xae\xf4\x39\x50\x41\xcc\x79\x6d\xf3\xcb\xa1\xae\xca\x6f\xd6\xc0\x27\x51\x73\xbc\xe3\x27\xee\x23\xfc\xe3\x41\x82\xa5\x47\x35\x9c\x2e\x30\x62\xc0\x94\xe5\x2a\x54\x13\xe2\xb3\xc5\xbd\x75\x27\x08\x2d\xaa\xd9\xdb\xed\xbb\x94\x7a\xc1\x8b\x85\xa0\x25\xcf\xdc\x6d\x39\xc3\xc3\xc9\xa5\x58\xb2\x0c\x13\xa7\x82\xe4\x9b\x39\x95\x65\xa3\xe9\xb8\x60\x27\xe4\x0a\xcb\xfb\xa5\x28\x16\xc6\x66\x57\x4c\xbb\x5c\x83\x84\x4a\x5e\xd2\x4b\xbe\x69\x62\xae\xe9\x5a\xcd\x1a\x4e\x1b\xe2\x11\x30\x61\xf8\x92\x14\x8c\x30\xa1\xeb\x85\x39\x98\x23\x99\xdf\x98\xb3\xd9\xf9\x76\x32\x4c\x41\x62\x8a\x69\x1f\xe9\xa5\x89\xa9\xa5\xfd\x24\x84\xa6\x27\x83\xf6\x9b\x08\xda\xc6\x01\x10\x65\x25\xac\x8c\xe9\x1c\x0b\x23\x1b\xd6\xf0\x2c\x22\x27\x89\x14\x98\x11\x47\x32\x37\x9a\x4f\xcd\x90\x71\xf9\x3b\x8a\x5e\xc0\x2b\x43\xdc\x1d\xb8\xed\xa8\x6e\x55\x22\x3a\xa7\xbc\x30\x17\x38\x91\x00\x5f\x06\xdc\x53\xf8\xa6\x07\x75\xb5\x6f\x50\x07\x92\x7a\xfc\xfb\x04\x65\x30\x4f\xc1\x4b\x1e\x07\x75\x47\x7a\xbc\x02\x2f\x81\x8a\x20\xe9\xde\x9c\xc5\x92\x3e\x80\xb7\x88\x96\xb2\x11\xda\xdc\x83\x4c\x96\x55\xa3\x03\xad\xcb\x29\x70\x4f\xe6\x46\xca\xa4\x98\xf0\xa9\x0d\x74\x9c\x96\x54\xd0\x29\x1b\x7a\x72\x86\xad\xa0\x3a\xdd\x5e\x00\x9e\xe6\xae\x72\x7e\xd4\x47\x65\x26\xd5\x9a\xd5\xe2\x4b\xf2\x5f\x47\xbf\x7c\xf6\xfb\xf0\xf8\xeb\xa3\xa3\x9f\x9f\x0d\xff\xf3\xd7\xcf\x8e\x7e\x39\x81\x7f\xfc\xe5\xf8\xeb\xe3\xdf\xdd\x0f\x9f\x1d\x1f\x1f\x1d\xfd\xfc\xdd\xab\x17\xb7\xa3\xcb\x5f\xf9\xf1\xef\x3f\x8b\xa6\xbc\xc3\x9f\x7e\x3f\xfa\x99\x5d\xfe\xfa\x9e\x2f\x39\x3e\xfe\xfa\xcf\xf1\xc1\xa0\xd4\xc8\x67\x7f\x71\xcf\x9e\xa2\x9e\x1f\x24\xe6\x69\x8b\x7c\xb6\x7e\xf9\x6d\x2d\xe7\xca\xf5\xb7\xce\xe2\xb7\x5d\xff\x3a\xd9\x44\xbe\x9a\xb4\xe3\x73\x45\x64\xc9\xb5\xb6\x06\x21\x0d\xa1\x39\x96\xcc\x73\xcb\xb0\xf8\x04\x45\x21\x57\x21\x44\x44\x6b\xd5\x47\x93\x25\x5d\xbc\x0d\x1c\x12\x82\xf0\xb2\x2a\x58\xc9\x84\x06\xc6\x33\x74\xe6\x0b\x78\x77\x4e\xda\x19\x64\x54\x18\xb3\x96\x3d\x64\x8c\xe5\x96\xc8\x3d\x6f\x0c\x9e\x3d\x6f\xdc\xf3\xc6\x77\x3d\xc9\x2e\xca\x9e\x7c\x55\xa1\x5b\x72\x25\xe0\x60\xf8\x02\x5e\x31\xe7\x61\x86\xaf\xfb\x42\x71\x39\x21\x2c\x16\xab\xaf\x1d\xc4\xc2\xff\xd1\x58\x87\x94\x03\x69\xa5\x8b\x15\x9b\x7e\x09\xfb\x19\xeb\x7a\x2d\xff\x52\x2e\x71\x02\xed\x0f\x29\xa2\x86\xde\x09\x24\x69\xc5\xb2\xa6\xe6\x7a\x71\x2e\x85\x66\x0f\x51\xc9\x74\x7d\x1c\xa7\x36\x07\xf1\xa6\x4b\x90\xf5\x84\xd9\xba\x3e\xfb\x19\x91\x15\xc2\x2c\x3d\x8a\x1a\x3e\x93\x4d\x91\x9b\xed\xac\x1b\x01\xa7\x24\xee\x74\x5c\x4d\xcc\x5e\x63\x52\x0a\xec\x35\xf8\xe9\x96\x49\x74\xe9\x22\x48\xce\xbf\x1a\x3e\xa7\x05\x13\x3a\xf8\x8b\x11\x24\x10\x84\x7f\xf4\x11\xba\x4f\xc1\x96\x19\xd5\x7c\xce\x0b\x36\x65\x97\x2a\xa3\x05\x88\xd2\x6d\xeb\x67\x67\x8f\xd0\x05\xe7\xa1\x96\x85\x22\xf7\x33\x66\xf4\x15\xc3\x27\x30\x69\x09\xbc\x78\x53\xca\x05\x29\x65\x9d\xe2\xe9\xb1\x83\x2a\xcc\x9a\x32\x2a\x57\x45\x6b\xb3\xf7\x2e\x3b\x0a\x19\xcc\x58\xca\xc2\x22\xa6\x15\x8b\x96\x2e\x1e\xef\x12\x01\xf7\x8b\xfc\x4d\xb0\xfb\xdf\x0c\x15\x8a\x4c\x0a\x3a\xf5\x49\x51\x86\x41\x2d\xa7\x9a\xa6\x27\x6c\x3d\xba\xd0\x00\x07\xd6\x30\x42\x8b\x7b\xba\x50\x6d\x2a\x5b\x3b\x36\x4f\xd0\x62\x9e\x1f\xc3\x2d\xa6\x8a\xf8\xb1\xf3\xe8\x97\x7d\x7e\x0c\xf5\x47\xe7\x67\xa3\xdf\x6e\x7e\xba\xf9\xed\xec\xe2\xd5\xd5\x75\x7c\xc2\x8a\xd4\x0c\x15\xec\x40\x1a\x58\x19\x61\x77\xc1\x87\xe9\x4e\xa4\x3a\x01\x7f\x19\x94\x3c\x8b\x5c\xde\x27\x3a\x8b\xcd\x99\x62\x34\x4e\xf4\x64\xb4\xa2\x63\x5e\xf0\x14\xf5\xb2\xaf\xeb\x0b\x20\x7e\x01\x3d\x60\x51\xe4\xf9\x69\x5e\xcb\x0a\x97\xcf\x25\x64\xa6\xbb\xd9\xbb\x89\x3f\x21\x82\x0d\xdc\x98\x49\x97\x90\x69\x4d\x85\x6e\x33\xfe\xda\xd3\x5c\x37\x42\xf3\x94\x12\xf8\xad\x1e\x9c\xad\x43\x62\xd2\xbc\x3f\x38\xcc\xb3\x3c\x67\x79\x67\xdb\x12\xde\xbc\x9b\xa8\x1f\xe7\x6e\x72\x41\xe6\x0f\x19\xbd\xbe\xb9\xfa\xdf\x4b\xf7\x66\x51\xa5\x79\xb8\xfb\x41\x29\xae\x65\xd5\xdb\xee\xbe\x61\xa5\x9c\xef\xf7\x77\x57\xf6\xd7\xeb\x3b\x5b\xaf\x2b\x7c\xd3\x88\x50\xbb\x10\x01\x69\xa4\x94\x79\x02\x6b\x1e\xf9\xf4\xfb\xee\x5b\xc3\x36\x40\x35\x23\xe6\x2b\x42\x73\x5a\x14\x8b\x50\xe5\xd7\x12\xe1\x6b\x7b\x69\xb8\x10\xca\xaa\x09\x2d\xd4\xc7\x2a\x70\x52\x34\x15\xa3\xb4\xbe\x92\x8d\xe8\xa7\x50\x31\xe1\xc4\x79\x42\x48\xce\x84\xd4\xd6\x22\x35\x13\x84\x7e\x1b\xb5\xcc\x08\x3a\x82\x03\x0c\x82\x8e\xd6\x90\xa0\xb4\xdc\x06\x8a\x0a\x57\xee\x5c\x8c\x3c\x45\x98\xb3\xd7\x28\xa6\xd6\x2b\x2a\xad\x6b\x78\x22\xe3\x3d\x62\x35\xa3\x39\x78\x49\x2a\xaa\x67\x58\x1f\x5b\x52\x75\xc7\x72\xfc\x45\x62\x5d\x80\xcf\x11\x81\x30\xaf\x9b\xda\xad\x59\x5f\x97\xd6\x01\x26\x0e\x56\x09\x43\x22\x49\x8a\x5f\x7d\xab\x17\x22\x81\x05\x9b\x4d\x78\x2d\x8a\xc5\x1b\x29\xf5\x37\x1e\x0a\x7b\xdb\x97\xe3\x47\x6b\x60\x77\xb3\x89\xc0\xd2\xa2\x40\xf2\x10\x0e\x0e\xb0\xc6\x00\xc0\x3b\x95\x33\x9a\x0d\xf9\xa3\x32\xc6\xba\x11\x67\xea\x45\x2d\x9b\x68\x6d\xab\x4f\x03\xee\xc5\xd5\x05\xc8\xbe\xc6\x96\x8e\x09\x5d\x2f\x2a\xc9\x31\x2e\xd6\xb3\x1b\xe2\x7b\x5b\xa4\x17\x72\xb6\xe4\x7a\x1c\x42\x5e\xd1\x05\xa1\x85\x92\x6e\xdb\x6d\x86\xd3\x92\xdb\xce\xf9\x04\xcd\xc7\x63\xa9\x67\x2b\xce\x40\x2a\xe2\x9d\x13\xab\xe3\x0d\x82\x0a\xb4\x36\xd9\x97\x8b\x95\x61\x35\xe4\xbd\x54\x35\xcb\x58\xce\x44\xf6\xb1\xde\x88\x6d\x17\x44\xc1\xad\xba\x96\xc2\xb0\xd7\x6d\xdf\xab\x2b\x5f\xec\x67\x77\x23\xbc\x45\x90\x89\x65\xdd\x62\x14\x8a\x07\x81\xb9\x36\x2a\x25\x29\xe9\x6a\x02\x7e\x3c\x3c\x74\xdf\x35\x63\x56\x98\xcd\xe6\x45\x81\xcd\xbd\xa8\x46\x17\x37\x2f\xe9\x94\x11\xaa\xfd\x25\xd4\x92\x30\xa1\x9a\xda\x9e\x1b\x1e\x9f\xbe\x97\x4b\xa6\x7c\xdb\x05\xaa\xc8\xf7\x57\x17\xe4\x19\x39\x32\x73\x3b\x06\x8d\x63\x42\x79\x01\xf5\x88\x10\x4e\x5a\x72\x32\x4e\x20\x0c\x2e\x53\x6a\x13\xae\x2c\x1f\x21\xb2\x46\xd1\x32\x20\x42\x12\xd5\x64\x33\xb7\x06\x5c\x0a\xef\x67\xb5\x00\x35\x49\x09\x3e\x7b\xb6\xd3\x9f\x3c\xfc\x5e\xb1\x7a\xdb\xd7\xd6\x88\xc3\xef\x9f\x50\x1c\x86\x56\xa2\xb9\xfe\xdd\x0d\xc3\xbb\x5a\x32\x4d\x73\xaa\xa9\x15\x93\xee\x0b\xfb\x53\xbb\x17\x96\x09\xc2\x52\xb1\x97\x5c\x34\x0f\x18\xbb\xdd\x89\x38\xc2\xcd\x25\x50\x04\xd7\x0b\x36\x1a\x0e\x28\x16\xac\xf9\xe2\x95\x1e\xb2\x77\xaf\x3a\xd7\x68\xf0\x88\xd5\x0d\x52\xc2\xd5\xce\x18\x43\x88\x8a\x5c\x96\x2b\x44\x42\x71\x4f\x4a\xdf\xc2\x76\x42\xfb\x8b\xe9\x9e\x3f\x76\x84\xa5\x60\x73\x96\xd0\xab\x71\xe9\x52\xbe\x34\x6f\x33\x8b\xe3\x4e\x2e\xbc\x9e\x14\x74\xcc\x0a\x5b\x51\x84\x25\xa1\x3d\xde\xb0\x9e\xa2\x11\xb5\x2c\xfa\xc3\x28\x7d\x23\x0b\x86\xf8\x15\x6e\x21\xcc\xeb\x3f\x8a\x75\x80\x97\xf4\xb5\x0e\xe0\x94\xeb\xac\x03\xb8\x41\x3f\x86\x75\x68\x12\x14\x44\xb2\xbc\x0e\x46\xdb\xec\xae\x03\xe8\x5f\xbb\xbe\x0e\x8a\x65\x99\x2c\xab\x51\x2d\x27\x3c\xfe\x76\xf4\x29\xb6\x2d\x45\x6d\x5a\x17\xba\xd0\x57\xcb\x13\x51\x6c\x75\xbf\x4c\x93\x12\x78\x2c\xa8\x0f\xd5\x28\x07\x1d\xb2\xcf\xff\x0c\xc4\x39\x70\xbb\x65\x19\x6f\x47\x8f\x4f\xa0\x0e\x73\xc6\xcc\x88\xf6\x85\x7f\x44\x89\xd7\x07\x22\x63\x42\x70\xb4\x17\x81\x2b\x33\x5a\x40\x2b\xf8\xb4\x5b\x45\x7a\xae\xdb\x5b\xa6\x2b\x40\x90\x82\x64\x38\xf8\x5d\x50\x6c\x4c\xc1\x3d\xef\xc2\x97\x42\xe6\x2c\xc8\xa5\x84\x22\xbb\x24\x72\x6e\x11\xc3\x07\xc6\x70\xc0\x57\x46\xdb\xb3\x99\xf9\x2c\xef\x8c\xac\x25\xb6\xcd\x4c\x1a\xf2\x95\x6f\x50\x6f\xd6\x95\x89\x9c\x8b\x29\x04\xac\x06\xa4\x66\x05\xc2\x6d\x59\xf6\x7c\x87\x1e\xaf\x43\xe0\x38\x8e\x20\xc7\x6e\x1c\xd9\xae\xd8\xb8\x1f\xaa\x40\x07\x9f\xa0\xfc\xe4\x8a\x1c\xbc\x74\xfb\x75\x60\x71\x69\xaf\x5f\xdf\x86\x59\xc9\x54\x2c\xb0\xf6\x02\xfe\x64\xeb\xe2\xb4\x57\xb5\x22\xf1\xa8\xe3\x1a\xfa\xe3\x8d\x31\xd1\x3b\x2e\x72\x0b\x28\xd5\xd9\x45\xe7\xc0\xb3\xa6\x61\xda\x66\xfe\x40\x0b\x9e\x87\xf2\xe8\xcb\xc4\xa6\x6b\xfe\x14\x90\xe1\x56\xae\xe9\x1b\x34\x60\x5d\x94\x6d\xf8\xf6\xa8\xb2\x27\xb0\x4f\x12\xbe\x17\x70\x07\xcd\x7c\x87\x44\xc8\x35\x63\xf4\xb0\x75\xc9\x77\xc0\xca\xce\x1d\xf2\x80\xfc\x88\x14\x39\x33\x3b\x33\x9c\x43\x73\x31\x55\xa1\x17\x84\x16\xa9\x35\x07\xf8\xac\x73\x83\xb8\x6b\x30\xa9\x65\xe9\x4a\xb6\x97\xcd\xfc\x0e\x76\x63\xca\xe8\xef\x70\x61\x7c\xdc\xae\x88\xc2\x98\x14\x1f\xb9\x23\x62\x5a\x2a\x7a\x5e\x9b\x15\xd4\x9c\x16\x37\x55\x7c\xd3\x78\xd2\xb3\xb8\x78\xf1\xea\xe6\xac\x4b\x19\x28\xc3\x16\x5b\x80\xc1\xe7\x84\xe6\x25\x57\x0a\x22\x3e\x6c\x3c\x93\xf2\x2e\x69\xc8\xa3\x35\xcd\x3c\x83\xda\x30\xc5\xa7\xea\xd4\x72\x94\xa1\x59\xb8\x63\xc2\x45\xe1\x8b\x5f\xc0\x5d\x28\xb4\xb2\x21\x84\xe4\xc9\x93\xcc\xcf\x1e\x8e\x1e\x54\xfd\xfb\x64\xe7\xd5\xe5\x01\x00\x08\x38\xbc\x5b\x57\x3b\x56\x4f\x55\x1a\xaa\xda\x72\x63\xe5\xf5\x73\x5f\xd3\x0e\x76\xed\x3a\xa2\xf5\xba\xf5\x45\xb2\x5a\x7f\xc6\x54\x7f\x4d\x19\x7b\xe8\xa5\x69\x49\x22\x39\x43\xa0\x55\x06\x55\xca\xf4\xd1\xe2\x2d\x88\x6f\x1f\x02\x32\xbd\xfd\xd3\xc3\xbe\xf0\x37\xce\x8a\xc2\x6c\x24\x35\x62\xe2\x50\x85\x19\x9e\x60\x9b\xcc\xe8\x9c\xb5\xed\xe4\xd8\x64\xc2\x32\xb0\x16\xc2\x59\xa4\x37\x5b\x3b\xe2\xda\x35\xd7\x75\x68\x5f\x5a\xe2\xd8\x94\x94\xfc\xc1\x50\x18\x8e\x18\xe6\xa1\xda\x56\xfb\xeb\x3f\x4e\x00\xea\x25\x90\x7d\xe0\x8b\x91\x07\x66\x87\xc2\x41\x5c\xbd\x8f\x36\x62\xcb\x7c\x70\xcd\xb4\xb1\xd4\x70\xdd\xc2\xf0\x83\xb1\xac\xea\xa6\x87\xcb\x90\x12\x1a\x26\x61\x78\xb8\x57\x4e\x91\x78\x1f\x20\x54\x6c\x69\x32\x3a\x88\x53\xde\x9e\x2a\x74\x4c\xd6\x14\xc4\x3c\x59\x08\x99\xbc\x7f\x18\xf9\x03\x06\xab\xc8\xae\x04\xac\x52\xeb\x78\xb1\x53\x0d\xe0\x66\x27\x17\xf1\x8e\xda\x2e\x5c\xef\x85\x42\x18\x31\xde\x96\x6b\x59\xd9\x43\xbc\x26\xda\x59\xaa\xcb\x07\x96\x2d\xb5\x04\xb7\x6d\x6f\xcc\x7d\xa2\x77\x89\x19\x31\x5b\x57\xe0\x33\x59\x96\x54\xf4\x57\xaf\x95\xc8\x31\xcf\x91\x1c\xa7\x8b\x59\xea\x8c\xa9\x84\x59\x68\x0f\x2c\x6b\x34\x73\x48\x5d\x1d\x76\x89\x77\xda\x88\x29\x2e\xa6\xb6\x18\x57\xd6\x1e\xba\x20\x89\x2c\x47\x07\xa0\xaf\x4a\xa9\xc9\xd1\xe1\xe9\xe1\xb1\xeb\x20\xe1\x49\x38\x54\x61\xf6\x33\x56\x3e\xb6\x13\x52\xbc\xac\x8a\x05\xcc\xe1\x10\x01\x57\x13\x1a\x19\x98\xc7\xe5\xd1\x79\xdc\x32\x35\x63\x45\x01\xed\x74\x75\x4d\x1d\xd0\x08\xfe\x16\x7a\x89\xd7\x4d\x86\xc6\xfb\xd1\xe1\xef\x87\x03\xc2\x74\x76\x4c\xee\xa5\x38\xd4\xe8\x87\x25\xb7\xa0\xd9\x26\xd1\xe4\x89\x58\xc8\x06\x7a\x82\xe0\xb6\x79\x6c\x9a\x8c\x1a\xa5\xac\x41\xcd\xc1\xd8\xcc\xf0\xf5\x34\x29\x73\xf9\xc0\xb5\x61\x90\xba\x01\xe3\xe9\x19\xea\x2f\xd8\x2b\x9c\x2a\xe8\xf8\x75\x3a\x63\xb4\xd0\xb3\x85\xd7\xa9\xb0\xdd\x82\x22\x8d\xb0\x9f\x7c\x12\xdd\xc4\x93\x0d\x0b\xdb\x9c\x65\xa7\xfb\xcb\x59\x1a\xdf\xd9\x5e\x0e\xdb\xc8\x75\x5b\xcb\x41\xcb\x39\x96\xf7\xd5\x5d\xee\x8b\x4f\xaf\x73\xdc\xb4\xae\xfa\x91\x9c\x2f\xde\x8c\xce\xdf\xd9\x2f\x0e\xbe\xb4\x6f\x18\x97\x0c\x04\xd5\x67\x9f\xb4\x91\xac\xf5\x52\x5f\xe9\x29\xec\x25\xab\xe7\x3c\x63\x27\x4f\xd0\x96\xac\x2f\x88\xa7\xf4\xeb\x40\x20\xa1\x02\x26\xbe\x2b\x3a\xd2\x0d\x92\xb3\xce\x5f\x65\x29\x85\xde\xaa\x05\xcd\xfc\xde\xc0\xfe\x7d\x0b\x82\xee\x7c\xc6\xb2\x3b\x0b\xd8\x96\xe6\xd8\x50\x8c\x91\x35\x1e\x4f\xc3\x40\xf0\xff\xc6\x85\x1c\x9f\x96\x54\x69\x56\x9f\xe6\x32\xb3\x32\x78\x98\x19\x0a\xb8\x98\x9e\x94\xf9\x71\x0a\x8a\x33\x09\x7a\x4c\x59\x0f\xcb\x52\xac\xc2\x05\xb0\x3c\x2a\x15\x57\x3e\xca\x36\x5e\xc0\xaa\x6c\xd5\x8d\x67\x56\xef\x45\x4f\x3d\x3a\xbf\xbd\xbd\x1d\xbd\xe8\x74\xe8\x84\x02\x65\xad\x2b\x07\xb4\x18\x74\xdc\xdd\x73\xdb\x9d\x69\xcf\xd9\x83\xcb\x75\x93\x96\x9e\x00\x73\x66\x14\x26\x3a\x2e\x16\xe4\x9e\x62\x41\xb3\x62\x69\xbc\xe0\xc0\x90\x71\x60\xb8\x8d\x39\x70\xdf\x32\x9a\xb3\x5a\x81\xc9\xc1\xe8\xf6\xc3\x09\x01\x4d\xbd\x6d\xdb\x79\xa3\xb4\x2c\xc9\xcc\x4e\x15\xd7\xd0\x8b\x42\xbc\x70\x27\x70\x29\xd1\xbd\xa2\x48\xcd\x2a\x34\x49\xec\xdf\x7c\x12\x06\xc7\x0a\x0b\xc2\x75\x0e\xa0\x54\x29\xc9\xc2\xa5\xb2\x6a\x3a\xf6\x58\x13\xb8\x40\x49\x4d\xaf\xf0\xe9\x05\x5b\x9e\xf4\x84\x2f\x4f\xd2\x31\xe6\xdd\x4b\xd2\xe3\x0f\xfd\xa0\xd5\x93\x5e\x10\xeb\x49\xef\xa8\xf5\xc4\x7a\xd9\xed\xe1\xc2\xd8\xbb\x21\x34\xcd\xa3\xe0\x5e\xcc\xdb\x3e\x94\x19\x15\x52\xf0\x8c\x16\xfc\xdf\x2c\xc7\x7e\xa6\xb2\xd1\x55\xa3\xc1\xdf\x92\x51\xc5\x86\x73\x5a\x73\xc3\x50\xb1\xe1\x87\x4f\x82\x10\xe6\xb6\x6b\x29\xc1\x19\xe1\xe3\x4d\x48\x71\x3a\x99\x3d\x75\xb5\x25\xae\x39\x66\xcf\x3b\xbc\xb2\x39\xe9\x27\x9a\xf4\xd6\x5d\x9a\xea\x59\x7f\x56\x13\xd5\xb3\xd5\x46\xd0\xc0\xdf\x8c\x56\xbe\x03\xb9\xf1\x3b\xd5\x4c\x1b\x8c\x96\x7a\xc9\xcc\xdc\x37\xd3\x7e\xec\xd9\x37\xd3\xde\xf0\x51\xd9\x8c\xed\x4e\x20\xf8\x06\xa8\x09\xa1\x83\xac\xaa\x0e\xbd\x92\x64\x0f\x58\x52\x64\xc9\x33\x69\x18\xcf\x56\x39\x0e\x17\x5c\x73\x5a\x5c\xb0\x82\x2e\x76\xbc\xff\x6c\x37\xea\x3e\xa3\x0a\xa3\xad\x2c\x27\x63\x36\x91\x35\x83\x08\x82\x30\x1c\xa9\x6a\x03\xa7\x38\x3f\xfd\x84\xbd\x3f\xfe\x18\x2d\x64\xcd\x53\xed\x52\xf7\xfb\x6f\xe5\x3d\x91\x13\xcd\x04\x39\x6a\x1b\xcb\x1f\x07\xce\x94\x36\x06\x91\x0e\x78\xa4\x25\x79\xfe\xcc\x0d\xf2\xe9\x05\x17\x20\xfc\xa2\xd4\x4e\x87\x97\x2c\x8d\xef\x8e\x2f\xd9\x2f\x4e\x9a\xa2\x1b\x63\xc2\xb8\x53\x4f\xbd\xab\x4f\x7c\x29\xc9\x73\xa0\xc7\xb3\x22\x2a\x72\x97\x14\xf2\xe9\x9d\x13\x9d\x55\x37\x32\xbb\xeb\xc9\x35\x7a\x7b\x3e\xc2\xb7\xbd\x33\x1c\x75\x7b\x3e\xda\x47\xa3\x76\xcb\x3f\x7a\xd8\xb6\x0e\xd8\xd4\xd7\x79\xb8\xb7\xb8\xda\xc7\x29\x3f\x75\x27\x60\xb4\xb7\xb8\x1e\x7b\xf6\x16\xd7\x06\x0f\xa6\x7a\x43\xdd\xe4\x8b\x9a\x66\x6c\xb4\x4b\x0a\x9c\x63\x20\x24\xb7\xbd\xa1\x48\xab\xc7\x79\x76\x21\x18\xcb\x91\x7f\xd8\xa9\x30\x32\x35\x33\x99\x34\x45\xb1\x40\x77\x1f\xaa\x01\x36\xfb\x24\x0d\xec\x15\x5e\x6d\xd5\x5c\x17\xc7\x5d\x47\x5d\x6b\x9f\x54\x1e\xb6\xd8\xa1\xe5\xdb\xeb\x64\x88\x37\xf6\x88\x62\x22\xde\xf3\x4d\xc3\x1d\x24\x8a\x4f\xcd\x72\x19\x0d\x03\x30\x70\x01\xeb\xc6\xf5\x7c\x68\x09\x31\xa3\x4e\x64\x9d\xf1\x71\xb1\x20\x33\x5a\x18\x83\xe9\x9e\xeb\x19\xa1\xe4\x8e\x17\x85\x7d\x4d\xfc\x42\xdd\xb8\x2e\x3c\xa8\xd5\x14\x52\x4c\x61\x31\xa8\xcd\x9c\x7e\xa8\x58\x66\xc6\xcc\x0a\x46\x45\x53\x21\x9d\x46\x47\x5a\xc8\xa6\x87\xe4\x69\x17\x5a\xf6\x3a\x95\xe0\x16\x25\xa0\x82\x72\x82\xb7\x9e\xf9\x6e\x09\x1c\x79\xed\xda\xa9\x0d\xe0\x9d\xd1\x34\x21\x2d\x0e\x5b\x40\x05\x59\xcc\x1e\xe9\xc0\xd6\xf7\x98\x63\x01\x05\x67\xd1\x63\xfd\x00\xef\x75\xac\x55\x48\x31\x14\x6c\x8a\xf5\xd4\x96\xa1\x61\x86\x23\x8e\x8f\xf9\x74\xbe\x3a\x57\x69\x59\x11\x5e\x96\x2c\x37\x36\x72\xb1\x20\x73\x4e\xa3\x29\x81\xda\xed\xf6\x44\x91\x23\x21\x89\xac\x8c\xe8\x6a\x04\xd7\xd0\x33\x5f\xcd\x1a\x4d\x72\x79\x2f\x12\xaa\x22\x7c\x83\x6b\x32\x66\xfa\xed\xed\xad\x21\x81\xfa\x76\xed\x01\x58\x6a\x52\x1d\x4b\xcc\x1a\x8d\x1e\xf7\xf3\xed\xc7\xce\xb6\xca\x4d\x86\x4b\xdd\x0d\x00\x32\x73\xa3\x65\xa3\x77\x44\x8e\x3c\xe6\x3e\xc2\x4a\xf4\xc0\x50\xe4\xd0\xef\xbd\xe9\x09\x19\xfe\xb9\x1d\xae\x4f\x2b\x6f\xef\x7b\x5a\xfb\x28\x9d\xf3\xa8\x76\x57\x7d\x1c\xb1\x47\x30\xb6\x6d\xb5\x5c\x00\x33\x37\x6e\x26\x13\x56\x83\xa4\x03\x82\x57\xd2\xd0\x7d\xff\x1a\x27\xc3\xe2\x1c\xb8\x36\xa5\x8a\xe9\x01\x40\x7c\xdb\x92\xef\x47\x86\xb4\x58\x78\xd0\x1f\xaa\x66\x0a\x20\x9b\x05\xb9\x7c\xfd\x4d\xdc\x11\xed\x03\x00\x3c\xad\xb0\x0c\xe6\xf9\x5a\xc4\xa5\xfd\xf5\x7b\x1e\xd6\x61\x33\xd8\x63\x91\x15\x52\xd9\x22\x46\xd8\x97\x6c\x46\x85\x60\xce\x21\xc5\x35\x78\xb3\xc7\x8c\x09\x22\x2b\x86\x69\x6f\x51\xc4\x50\xa2\xb8\x98\x16\x8c\x50\xad\x69\x36\x3b\x31\xd4\x09\x77\x16\xda\x6a\x41\xfb\x1b\xa5\x6b\x46\x4b\x3c\x13\x35\x2b\x29\xc7\xe1\x09\xcd\x6a\xa9\x14\x29\x9b\x42\xf3\xca\xbf\x2c\xce\x93\xc8\xa0\x6e\x5b\x61\xf1\x98\xdb\x2b\x28\xb3\x68\xcb\x12\x07\x2d\x85\x76\xfa\x32\x6c\x2b\x02\xee\xb3\x01\x34\xcf\x2d\x2b\xbd\x20\x66\x69\x8b\xe8\x5a\x91\x09\xaf\x95\x26\x59\xc1\x99\xd0\x76\x66\x88\x0c\x06\x34\x0c\x9c\x3a\x2d\xec\x8a\x28\xbb\x24\x22\x07\xe3\xbb\xd2\x8a\x40\xf9\x9d\x27\xc2\xbd\x2a\xe7\xca\xfa\x3a\x54\x5c\x3f\x5f\xea\x1a\x48\xe0\xc1\x71\x2b\x02\x47\xc7\x29\x38\x48\x91\xfd\x55\x40\x42\xd0\xe0\xcd\xf5\xf8\x84\x46\xfc\x09\x7c\x05\xba\x3c\xb8\x7b\x3d\xe8\x54\x06\xb7\xb6\x85\x6d\xf0\xbf\xc4\x75\xe0\x40\x09\x36\x37\xf7\x80\x65\xcc\xa8\xa2\xb4\x47\x26\xf3\xe4\x3c\x46\xd3\x7a\xca\xf4\xb9\x9b\x7f\x6c\xe9\x6a\x1f\xdc\x26\xec\x84\x19\x3a\x88\xda\xcd\x81\x7d\x18\xc9\x1c\xa0\x14\x5a\xb8\x8b\x75\xed\x39\x71\x5e\x91\xb6\xd7\xed\x23\x3d\x3f\x9d\x45\x85\x15\x4f\x9e\x50\x55\xd1\x8c\x29\x72\x74\x35\x3a\x1f\x90\xd1\xd5\x85\x2d\x6b\x92\x93\x65\x6c\xb9\xd8\x65\x69\x1b\xc2\x5a\x0b\x78\x1d\x71\xbe\x37\x4b\x40\x52\x00\x32\x65\xe9\x1d\x79\xa3\x2c\x2e\xeb\xf9\x76\xad\x28\x00\x13\xcd\x37\xe8\x26\xaa\x01\xd3\xc8\x46\x2f\xcc\xd9\x46\x83\xc4\xde\x5a\xd6\xc2\xfb\x58\x2c\xf6\xc8\x48\x0e\x8e\xe2\xe7\x6b\x37\x1d\x02\xda\x6e\xa5\xac\x22\x00\x1a\xb3\xb6\x1f\x79\x84\x14\x28\xbe\xb2\xd9\xd8\x4f\xde\x16\x37\xb0\xa2\x5e\x31\xa5\xe8\x94\x8d\x22\x93\x81\xfa\xed\x8e\x0b\x59\x44\x2d\xc3\x86\xb6\xb4\x05\x22\xa5\xf9\xdf\x84\xe5\x86\xa1\xdb\xa6\xc4\x89\x44\x51\xe0\x2e\xd7\x7d\xcd\xb5\x66\x20\x1f\xa0\xdb\x11\x9c\xdd\x65\x74\xcb\x6e\x99\x63\xd4\x78\x76\xd1\xc3\xf1\x8c\xe2\x2f\x72\x2c\x18\x1c\x33\x32\xae\x39\x9b\x90\x09\x87\x0a\x46\xa8\xed\x1b\x20\x4c\x3f\xc5\xe0\x8d\x52\xac\x86\x69\x5b\x87\x9c\x9b\x7e\x1c\x3d\x3f\xda\xf9\xeb\xba\x11\x19\x0d\x9a\x42\x02\xf6\x16\x9f\x90\x29\xd4\x13\x5a\xf7\xd3\x7f\x3c\xfb\xcf\xbf\x91\xf1\xc2\x58\x4a\x70\x27\xb5\xd4\xb4\x70\x04\x90\x82\x89\xa9\xd9\x45\x50\x76\xe2\x24\x76\x07\xbf\xc9\x6f\x4e\xc1\x4b\xae\x71\x81\x9e\x7f\x7e\x37\x4e\x12\x7a\xa0\x99\x9c\xe6\x6c\x7e\x1a\x1c\xa1\x61\x21\xa7\x71\x6f\x3d\xf7\x70\x47\x4d\x95\xc7\x66\x45\xf4\x7d\xa3\xb7\xda\x40\xdd\x75\xf7\x20\x33\x79\x8f\x6e\xd4\xd5\xab\x1a\x40\xa1\x54\xb2\x6a\x0a\x58\x38\xf2\x8d\x07\xb0\x6b\x14\x5b\x86\x06\x4a\x75\xcf\x07\xdc\x0e\x52\x18\xec\xb0\x4b\xb2\xde\x16\xd3\x3a\x32\xa5\x05\x66\xb0\x11\x6f\xdf\xa8\x23\xda\x0f\xfe\x0d\x2d\x8a\x31\xcd\xee\x6e\xe5\x4b\x39\x55\xaf\xc5\x65\x5d\xcb\xba\x3b\xe7\x82\x1a\x6d\x7a\xd6\x88\x3b\xe8\xdb\xda\xa2\xb5\xca\xa9\x4d\xbc\x05\x60\xc5\xee\xc2\x46\x11\xe3\x66\x89\xf8\x99\xce\x18\x70\xde\xef\x76\x64\xf6\xc0\x5b\x17\xb7\x20\xcc\xd0\x1c\xaf\xe2\x84\xf3\x50\xe1\xd5\xfe\xfc\xd9\x7f\xfc\x1d\x99\x0b\x91\x35\xf9\xfb\x33\x28\x7e\x57\x03\x14\x00\xa0\xfb\x1a\x23\xa7\xa4\x45\x11\xab\xd4\x84\x2c\xc0\x1c\xb6\x8f\xf6\xca\xeb\xad\xdd\xee\xf7\x76\xd6\xdc\xde\xfe\x04\x9a\x18\xd7\x8a\x15\x93\x01\xa2\xa1\x78\x87\xf2\x21\xd8\x35\x87\x56\xe4\xc5\x23\xe9\x6c\xdf\x5d\x32\x97\x45\x53\xb2\x0b\x36\xe7\x59\x5c\xea\x40\x67\x57\x3a\x6f\x73\x01\xb2\x82\x2b\xd0\x25\xc7\x85\xcc\xee\x48\x6e\x3f\x0c\xea\x49\x96\xfb\x38\xc7\xaf\x42\x6c\x65\x4d\x42\x45\xcd\xa3\xf3\xef\xd4\xd2\x94\xb4\xaa\x8c\x1e\x0d\xb0\x56\x35\xbd\xef\x2c\x06\xb0\x26\x40\x0f\x4d\xb4\x7a\x92\xd3\x58\x52\x93\x58\x86\x76\x46\x46\x4c\x45\xbf\x22\xba\x00\x27\x3d\x07\xa6\xa5\x3e\x3e\x83\xa0\x73\x20\xda\x17\xba\xdb\x50\xc1\xbf\x11\xf9\x63\xc5\x56\xf7\x0d\xc5\xfc\xc1\x40\x0d\xd2\x1c\x1f\x90\x32\xf1\x81\x83\x1e\xd2\x10\xd2\x0a\x89\x3a\xeb\x22\x7c\xfa\x47\x49\xb5\xb5\x8f\x9c\xfb\x82\x92\x8a\xd5\x8a\x2b\xa3\x3a\xfd\x00\x17\xea\xbc\xa0\xbc\x0c\x02\xe7\xdb\x59\x04\xbc\xdc\xd0\xfe\x34\x9d\x53\x46\xca\xaf\x91\xcc\x2d\x1d\xc0\x41\xb1\xb3\xed\xbb\x2c\x3d\x72\xd3\x8c\xe1\xd8\xc1\xd7\x3f\x2c\x7e\x54\xaf\xfa\xc5\xb6\xd9\xf9\x0f\xed\x8e\x77\xb9\xb9\xf9\x8d\x67\xe7\xf8\xad\x4f\x89\x89\xc3\xfc\x3e\x56\x1e\xee\x89\xef\x89\x55\x25\xe5\xef\x01\xe7\xb7\x27\xa3\xcb\xea\x3b\xce\x22\xbc\xd2\x81\x59\x69\x9d\x38\x27\x88\x48\x9f\x40\x80\xb9\x8a\x76\x50\x72\xf8\xe5\xe1\x56\xe5\x07\xee\x4c\x2d\x2b\x3a\x05\xab\x6f\x17\x36\x68\x99\xa6\x10\xff\x74\x26\xef\x43\x96\x59\xd9\x6f\x19\x8e\xe9\x40\xb4\x67\x32\x69\x77\x30\x1f\xd6\x9d\x08\x6b\xb9\x62\x1f\x81\x7b\xba\x20\xb4\x96\x8d\x48\xaa\xc3\x87\x70\x9f\x0f\x07\xbf\x5a\x9a\xec\xb5\x14\xcc\xa5\x9e\xa4\x8c\x72\xdb\xf1\x0e\x43\x16\x0e\x17\xe4\xf9\xc9\xf3\x67\x9f\x8a\xbe\x02\x33\x5c\xd2\x57\xae\xbd\xbe\x82\x12\x60\xab\x73\x75\xfd\xc7\x77\xe1\x4e\xbd\xb2\x1e\xe8\xb6\xc1\x38\x77\x0d\x6c\xe1\x57\xf7\x35\xd7\xf6\x98\xdf\x73\xc5\xc8\x11\xd8\xbe\x44\xd6\x21\x80\x69\x12\x4c\x6e\xe8\x29\x49\x6c\x44\xde\x07\xcc\xad\x6a\xc6\xbb\x2a\x90\xac\xe4\x01\x86\xb6\x3e\x54\xf1\xa8\x6c\xea\x69\x7f\x0e\x0e\xc8\x11\x8e\x71\x88\x20\x8d\x09\x3b\xdf\xc3\x45\xb2\x7b\x75\xf9\x50\x25\x34\x24\xeb\x6f\xbf\x2e\x1f\x2a\x0a\xd1\x95\x6a\x27\x36\xee\x9f\x6c\x46\xe7\x0c\x30\x31\x79\x41\xeb\x02\x92\x38\x6f\x70\xc9\xc8\xb8\xd1\x84\x89\x39\xaf\xa5\x80\x88\x26\xe0\x2a\x8c\x0b\x46\x6a\x36\x61\x35\x13\x19\x53\xe4\xcf\x47\x3f\x9c\xbd\x81\x24\xff\x63\x10\xaa\xcc\xcd\xaf\x51\x36\x04\xd9\x99\x43\xf0\xba\x5d\x3c\x6f\xc4\xcd\xdd\x1c\x17\x10\xe0\x6e\x2d\xcc\xdc\xca\x46\x37\xb4\x00\xe8\xd0\xac\x68\x14\x9f\x6f\x4b\x44\x58\x70\xd5\x0b\x1e\x75\xa4\xfb\x38\xcc\xe7\xc1\x9e\xae\x40\xbd\xa6\x85\xf8\xdf\xd1\xed\xf5\x50\x79\x38\xb1\x30\xb7\xdb\xfa\xe5\xe3\x02\x0f\x7c\x3a\xd3\xb6\xa8\x70\x29\x53\x20\x48\xbc\x29\xa3\x83\x9a\xdb\xf4\xd0\x1b\x85\xf6\xac\xe0\x54\x6d\x6a\x80\xa5\x9d\x92\x6f\xdb\x61\x21\x95\x5b\xd8\x7e\x35\xb4\xf0\xee\x63\x43\x19\x86\xb0\xae\x46\x36\xd1\xc8\x6d\x28\x17\xff\x07\x4b\x0a\xbc\x27\x04\x53\xfd\xe1\x4f\x36\xa4\x04\xa3\x49\x93\xf6\x5c\x9d\xf8\x04\x73\x50\x65\xa0\xdb\x3c\xb8\x4c\x84\x14\xc3\x59\x00\xb2\x5f\xc9\x7c\x43\x97\x49\xac\x97\x23\xca\xbf\x91\x7a\x8d\xfd\x16\x91\x99\x2c\x6c\x05\x8e\x73\x6b\x8f\x99\xbe\x67\x4c\x90\xab\x11\x6c\x90\x59\x15\x04\xd3\x59\xbf\x4d\x98\x0a\x00\x10\xfa\xf6\xe2\x6c\x4c\x4d\xb0\xc1\xb0\x65\x9b\x5e\x91\x04\x2f\x4b\x8a\x8b\xc2\xaf\x4c\x32\x23\xfe\xd6\xaf\xb1\x2b\x77\xa6\x63\x39\x67\xb0\x05\x79\x5e\x47\x96\xd0\x6c\xcd\xef\x96\x24\xdf\x78\x95\xbc\x9c\xed\xb2\x39\xaf\x3c\xf4\x79\x03\x6e\x00\x07\xf5\x89\x79\xf0\xd5\xe8\xfc\x29\xf9\xef\xf7\x36\x7a\x6f\x86\x3e\x54\x84\x57\x59\x9b\x21\xb6\xe9\xcc\xdb\xac\xa8\x00\x1d\x21\xc2\x0a\x8b\xb5\xbc\x02\x9e\xfc\xd4\x22\x8c\x08\x1c\xd7\xf0\x44\x0b\x26\x68\xfd\xeb\x10\x70\xae\x64\x7e\xb2\xbc\xd4\xf6\x2f\xe2\x97\xdb\xd5\xbb\xa1\xc0\xb4\x99\xd4\x03\x5f\x25\xbc\xc4\x83\x21\xe0\xea\x8a\xc3\xa2\xbb\x85\x6c\x6f\x63\x47\x57\x17\x5b\xbc\x17\x15\xcf\x3f\xee\x7b\xf1\xbd\xda\x18\x4c\xb3\xd7\x05\x84\x2e\x36\xfd\xae\x60\x4c\xf6\x85\x6d\x5c\x63\xff\x1a\x8a\xeb\xa5\x26\x55\xcd\x14\x13\xfe\xee\xe4\xeb\x52\x97\x41\x2a\x74\x67\x31\x30\x3f\x4f\x9a\x62\x53\x45\x53\xd6\x41\x75\xae\x2f\x65\xa6\xbe\x10\x11\xd4\x4d\x3a\xa7\xbc\x00\x23\x3a\x80\x9b\x5a\x21\xc0\x26\x58\x6e\x48\x41\x21\x69\x8e\xf8\x19\x77\xac\x16\xac\x20\xa5\xcc\x9b\x02\x23\x59\xe4\xfc\x6c\xf4\xdb\xcd\x4f\x37\xbf\xbd\x7a\x7d\xf1\xfd\xcb\x8d\x2b\xf2\xb1\xcc\x84\xb5\x47\x7c\x40\x28\x11\xec\x1e\x28\x17\xa0\x4d\x67\xb6\xd3\x83\x47\x6b\x31\xcc\xf1\xc6\xe6\x1b\xa3\x47\x10\x5d\xd3\x93\xa6\x30\x5f\xda\x90\x82\x92\x6b\x3e\xa5\xf0\xb2\xd6\x28\x1b\xd7\x8c\xde\xc9\x46\x93\x79\x53\x08\x56\xd3\x31\x2f\xb8\x51\xe4\x08\x9b\x33\x81\xf1\x50\xf3\x07\x86\xc8\xb0\xdb\x13\xdf\x74\xf0\xb0\x19\x98\xed\x3c\x62\x16\xd5\x8c\x4c\x33\xeb\x14\xb0\xa8\x33\xf0\x61\x55\xf3\x39\x2f\xd8\x94\x79\x28\x87\x18\x54\xb1\xae\x1b\x9e\x16\xd5\x8c\x0e\xa1\x49\x3a\xb1\x9d\x4c\xe0\x44\xcd\xa4\x90\x35\x66\xdd\x20\xc0\xa1\x95\x10\x50\x24\x8b\x97\xd5\xf5\xbe\xc2\x84\xf8\x1b\x97\x98\x6e\xf3\xd1\x9f\x8c\x59\x6d\xee\xbf\x4f\xe3\x55\x37\x5d\x08\x6e\x4b\x81\xd3\x07\x47\x1b\xe7\x1d\xac\xf7\x50\xb4\x96\x0b\xbc\xdd\xf1\x18\x7b\x59\x28\xc1\xa0\xfd\xd0\xe1\x9d\x43\xd1\x68\xcc\x9a\x6f\xac\x76\x82\xc7\x62\xd4\x14\xc5\x0d\xcb\x6a\xb6\x69\x8e\x43\xda\xd2\x5f\x2d\x8d\xfd\x98\x13\x20\xf0\x24\x02\x74\xb3\xfd\xb2\x68\xf1\x59\x83\xc2\x86\x16\xb5\xaf\x6a\x0a\xa8\xff\x86\x36\xdd\xb8\x9d\x30\x5b\x15\x24\xa0\x71\xe5\xaa\x64\x62\xa4\x49\x67\x8f\x15\xf3\xa4\xb9\xed\xad\xa8\x52\x98\x27\xca\x45\xce\xe7\x3c\x6f\x68\x01\x64\x81\xab\xc8\xd6\x80\x50\xdb\xa2\x17\x39\x62\x19\xd9\xb1\x72\xc3\x12\xe1\x96\x57\x9d\xe2\x9a\xfc\x09\x27\xb3\xe0\x62\x3a\x84\xdf\x18\x32\xed\x7c\x86\x52\x0c\xe9\x70\xd3\x14\x9c\x8f\xca\xcf\x01\x4d\xbe\x5f\x83\x63\xe0\x8d\x3b\x6d\x8e\xa1\x2b\xc2\x84\x6c\xa6\x33\x58\xde\xba\xa4\xae\xa1\x58\xc1\x34\x34\x4e\xb2\xe9\xa3\x31\x0e\x0d\x7f\xb2\x73\xeb\x95\x08\x9b\x65\x75\x4f\xf6\x47\xe2\xeb\x88\x0d\xbf\xf6\xe1\x6f\xbe\x0e\x18\xb7\x5d\xd9\xc8\x00\xc2\x86\xb7\x49\xce\x59\x3d\xe7\xec\xfe\xd4\x9a\x81\x43\x23\xf7\x87\xb8\xf6\xea\x14\xb6\xf0\xf4\x4f\xf0\x9f\x28\x6a\x6e\x5f\x5f\xbc\xfe\x92\x9c\xe5\xb9\xcd\x12\x70\xea\x91\x11\xfa\xea\x84\xd0\x8a\xff\xc0\x6a\x05\xbd\x41\xef\xb8\xc8\x07\xa4\xe1\xf9\xd7\x4f\xe7\xb9\x20\xcb\x40\x45\x25\xad\x86\xf6\xf6\x6b\x59\xf2\x6c\x13\x71\x24\x78\x5b\x62\xf9\xa4\xc2\xe8\xa5\x15\x36\x16\x0a\x95\xff\x1b\xef\x79\xa0\xd4\x8d\x59\x21\xc5\x34\x00\x81\x35\xca\xeb\xa6\x52\x43\x70\xdd\x51\x14\x21\x1a\x06\x7d\xf2\x20\x9c\x20\xeb\x1c\x4a\x6b\xb9\xac\x3b\x79\x22\x66\x74\x68\x89\x15\x14\xf5\x52\xb1\xa9\xbb\x8e\x77\x46\x87\xaa\x10\xd5\x1a\x3e\x98\x1c\xef\x00\x13\x5d\xdf\x5b\xd7\x98\x0b\x95\xc9\x19\x15\x39\xfc\x98\x65\xb2\xce\x37\x3f\x27\x46\x14\x6a\x5f\x9d\x8c\x45\x3f\x58\x96\x05\x7a\x91\x11\x82\x54\x2c\xd3\x09\x96\x5a\x5d\x76\x6a\x38\xad\x37\x63\xc3\xe1\x1b\xc1\xff\xd5\x30\x42\x4b\x69\xf4\x82\xa4\xc6\xfb\xcb\x3b\x59\xd2\x05\x28\x7e\xb0\x68\x2f\x1d\xdc\x86\xc5\x2d\x54\x03\xf2\x86\x19\xbb\xab\xc5\xa5\x1d\x90\x97\x5d\xa0\xda\x81\x99\xe7\x0d\x82\x44\xda\x5f\x6d\x6e\x0b\x40\x19\xa7\x6c\xea\x8c\xbd\xc1\x84\xc0\xd2\x75\x29\x5f\x5d\x56\x73\xf6\x34\xbd\x63\x02\x23\x28\x66\x4b\x21\xe7\xb1\xa9\xe1\xa4\x65\x33\x96\x37\xc5\xe6\x5b\x3c\x5e\x90\x89\x51\x77\x6c\x60\x77\xc6\xa7\x33\xa6\xb4\xf3\x8c\x9d\x42\xf1\x0c\x66\x9f\xd2\x6c\xe6\xc9\x05\xe6\x13\xd4\xdd\xb7\x91\xe1\x92\x3e\x6c\x5e\x4a\x05\x52\x80\x6a\x87\xc1\x84\xc6\xa6\x6a\x4a\x27\x1e\x96\xcf\x93\x3a\x21\x2f\x0d\x61\x78\x23\x69\x55\x15\xdc\x29\x6e\x9d\x6d\xde\xf8\xc2\x01\x18\x03\x84\xcd\xc9\x84\xaa\x19\x97\x22\xf5\xa0\x65\x18\x28\xcc\x9a\xda\xc8\xb7\x62\x01\x58\x7a\x79\x6e\x54\x88\x9a\xd4\xac\x94\xf3\xcd\x5d\x7b\xc9\xc1\xc7\x34\x84\x1a\xb3\xc8\xc3\x40\x25\xfd\x48\xf4\xcc\x33\x8f\xb3\x61\xce\x4b\xb6\x24\x30\xf0\x00\x1a\x05\xd1\x35\xee\xa9\x1b\xd1\x26\x0c\x47\x08\x8f\x04\x95\x2e\x3e\x3d\x38\x2a\xad\x37\x45\x83\xa4\xf5\x74\x6b\x99\xf6\x67\xf5\xb4\x41\x8e\x69\x45\x7c\xdb\xf1\x3b\xbe\x78\x70\x29\x3d\xe0\x50\x91\xf3\x57\x17\x21\xf8\x57\xd8\x14\xcd\x41\xc3\xc5\x0d\xf7\x43\xbf\xc9\x37\xa0\x65\xf8\x8c\x9e\x28\x8a\x32\xcf\x59\x0c\xa7\x2f\xe6\xce\x21\xe2\x09\x74\x76\x3c\x17\x55\xa3\xad\xf2\x19\xb4\x63\xc9\x66\x54\x4c\x8d\xc2\x73\x21\x1b\x33\xb1\x3f\xff\x19\x26\x51\xb3\xbc\xc9\x58\x5c\x4d\x08\x3a\x5c\xf0\xe6\xfe\xd9\xa6\x84\xb8\xbe\x4f\x20\x97\x54\x46\x2b\xb7\x34\xe1\xea\xa9\x85\xd0\xf4\xe1\x4b\xc2\x4f\xd8\x09\x39\xf8\x73\xf0\xd1\x01\x50\x1c\x45\x4d\x55\x4b\x33\x15\x0b\xc8\x03\xb3\x2f\xb8\x86\xa2\x8c\x83\x70\x84\x13\x72\x69\xe8\x82\x0c\x4b\xbf\xb7\x01\xc6\xca\xb8\xdd\xd9\x01\xa9\xd9\x94\xd6\x79\xc1\x22\x4b\xda\xe5\x84\xdc\x07\x80\x46\x3e\xa5\x8b\x3d\x70\xa5\x95\xf5\x9c\x9f\xf4\x93\xb2\xf2\xbe\xb2\x43\x53\x75\x67\x24\x85\x61\x7e\xc3\x9c\x6a\x3a\x0c\xb8\xee\x29\x3a\xce\x86\xb6\x81\xf3\x90\xda\x7b\xdc\x0a\x95\xd3\x3f\x59\x28\xce\x21\xf5\xdf\xe2\x62\x48\x87\xd0\xd2\xf8\x0f\x13\x34\x4f\xe8\x20\xde\x07\x7f\xbd\xf4\xec\x14\x57\xee\x84\x5c\x4b\xdd\x1a\x40\x5e\x38\x26\xf4\x99\x5e\xcf\x71\x2f\xaf\x6f\xdf\xfc\x34\x7a\x7d\x75\x7d\xbb\x67\xbc\x7b\xc6\x0b\xcf\x9e\xf1\xee\x19\x6f\xc4\xc0\x91\x8c\x97\x89\xf9\xb6\x98\xae\xf3\x6c\xad\xcb\xd2\x5e\x6e\x86\x99\x58\xc6\xf8\x09\x95\x81\x5e\x8a\xf9\x0f\xd4\x18\xd4\x36\x41\xc0\x66\x2f\xae\x49\x74\xb7\x5f\x40\x63\xff\xfc\xa3\xaf\x03\xdd\x62\x15\x67\x8f\xb5\x5b\x61\x2c\x60\xdd\xae\xb5\xad\x5a\x28\x39\xff\xed\xea\xe2\xf2\xfa\xf6\xea\x9b\xab\xcb\x37\x5b\x2d\x43\x49\xec\xe9\xd8\x5f\x01\xca\x26\xea\x4c\xc2\x30\xad\x22\x54\xd5\x6c\xce\x65\xa3\x8a\x85\xef\xf9\xbd\x9e\x5d\xad\x96\xd4\x8a\x14\x0a\xa8\x58\xf8\x3e\xec\x6b\x07\x5c\x52\xc5\xd6\xa9\x55\x09\xc3\x6f\x59\x21\xb3\x44\xf4\xa1\x96\x25\x8c\xbf\x46\xa1\x7b\x7f\xe5\x2c\x61\xdc\x28\xb5\xee\x31\x15\x2d\x81\x8e\xae\x72\x97\xf0\xa2\x6e\xc1\xd3\xf6\x39\xd9\x37\xb5\x2c\x7b\xe2\x66\x37\x18\x24\x70\x69\x63\xeb\xae\xea\xa1\xed\xfe\xd0\x51\x8f\xad\xa1\xd7\xb6\x85\x30\xe6\x66\x59\xe9\xc8\xf2\x23\xd2\x57\xf7\xea\x7e\x1a\x3d\x63\x29\xd2\x2b\x5a\x7d\xc7\x16\x6f\x58\x62\x03\x9c\xee\x7a\xb3\x82\x65\x46\xe7\x21\x77\x6c\x81\xf5\xce\xe7\x6e\xb0\xb4\x1e\x40\x3b\xd8\xfc\xfb\x8e\xa5\x34\x66\xef\xb3\x6b\xf7\x1d\x4b\xa8\xe5\x76\xcf\x4a\x4b\x67\xb3\x85\xa0\xe6\x9b\x3d\xdd\xa9\x26\xd6\xbb\xda\xa5\xbc\xbf\x4c\x92\xee\xb3\x5b\x79\x25\xdd\xe7\xa9\xb2\x4c\xba\x4f\x8f\x87\xc9\xe5\x0d\xf6\x7c\xa0\x30\x41\x74\xd1\x91\xfa\x9e\x17\x12\x44\x0b\x84\x2b\xe6\x0a\x2c\xac\x02\xdb\xd3\xd2\xa4\x81\x10\xe0\xd3\x57\x76\xce\xf2\x03\x67\xa3\x5f\xc1\x93\x7c\x7d\x5b\xc9\x85\x49\xd1\xbe\x77\x5e\xfe\xa5\xc3\xc1\x56\xa4\x64\x9a\xe6\x54\xd3\x13\x73\x79\x06\xdd\x1f\x6d\x76\xfd\x7f\xfb\x5f\x16\x74\xcc\x0a\xf5\xf3\xe1\x57\xdf\x5d\xfe\xf4\x8f\xc3\x5f\xff\x3b\xfc\x0c\x34\x0d\xcc\xe0\x0c\xbe\x90\x38\x05\x40\x1d\x17\x32\x67\xd7\x40\x1d\xfc\x68\x8d\x94\x33\x4c\xd2\xb0\x1f\x00\xf0\xeb\x09\x56\x8e\xf9\x1f\x2b\x99\x2f\xff\x94\xd0\x58\x8b\xec\xa6\xc8\x86\xbd\x4d\x00\xab\xc2\xa7\x3f\xc1\xdd\x72\xc7\x9e\xb9\x8f\x7d\xab\x3b\xc6\xd0\x29\x9d\xc2\x3f\xbf\x71\x4b\x60\xf4\x5a\x0f\xcd\x2d\x00\x61\xd7\x98\x29\xdd\x4e\x9b\x07\xf3\xe7\x49\xc6\x12\x3e\x3d\x72\x6b\xbf\x83\x3d\x2f\x18\xac\x88\x5d\x2d\xe4\x00\x5e\xf5\xf1\x29\xe3\x2e\x6f\x9b\x9c\x8d\xae\xc8\x1c\x57\x78\x87\x16\xe7\x43\xb1\x6b\x97\x6b\xf5\xcd\x4e\xb3\x6d\x9f\x11\xb6\x0c\x94\xf9\x25\x96\xb2\xb8\xcf\x2d\x0e\xb3\xf2\x5d\xdf\xd8\xe6\x75\xff\xcb\xcf\x11\xbe\xf2\x24\xab\x9a\x81\x7d\xfd\x49\xc9\x4a\x59\x2f\xfc\x8f\x1e\x33\x71\xa8\xb4\xac\xe9\x14\xf0\x8d\x70\x70\xfc\x33\xff\x13\xfe\x61\x87\xbc\xd5\xbf\x46\x5f\x5a\x9b\xcc\x65\x45\x54\x1a\x60\xcb\x4e\xb2\x6c\xb7\x6f\x3b\xc2\xb1\xb3\xd4\x46\x2e\xdd\xa7\xdb\x06\xd9\x47\x01\xd0\xc2\xf1\xab\x08\x0e\x0c\x0b\xe5\x39\x68\x0b\x5d\xc0\xcb\x26\xe6\x64\x4e\x6b\x95\xd2\x07\x19\x9f\x1e\x99\x74\xce\xe7\x5c\xc9\x04\x4c\x24\xff\xa2\x55\x8d\xda\x95\x5c\x59\x5c\x75\x2c\xad\xf0\x2e\xfb\x87\x0a\xba\x1b\xf9\xcb\xbe\x24\xcd\x9e\x1f\x24\x93\x54\x51\xad\x59\x2d\xbe\x24\xff\x75\xf4\xcb\x67\xbf\x0f\x8f\xbf\x3e\x3a\xfa\xf9\xd9\xf0\x3f\x7f\xfd\xec\xe8\x97\x13\xf8\xc7\x5f\x8e\xbf\x3e\xfe\xdd\xfd\xf0\xd9\xf1\xf1\xd1\xd1\xcf\xdf\xbd\x7a\x71\x3b\xba\xfc\x95\x1f\xff\xfe\xb3\x68\xca\x3b\xfc\xe9\xf7\xa3\x9f\xd9\xe5\xaf\xef\xf9\x92\xe3\xe3\xaf\xff\x9c\x4c\x7a\x0f\xed\x8e\xf1\xe9\xb3\xe9\x71\xf7\x8d\xbd\x1c\xbf\x0f\xd4\x00\xb9\x7d\xdc\xf1\xea\xfb\xfe\xbf\x71\x5c\x33\xc8\x6f\x76\x5a\xc8\x0e\x5d\xf0\x0f\xa5\x68\x60\xdd\xd8\x53\x38\x25\x71\xa4\x00\x25\xfa\x50\xb5\x25\x53\x9f\x9a\x04\xfd\x23\xf8\x29\x9d\x9d\x83\xfb\xda\xaa\xee\x93\x5a\x96\x16\x18\x17\x83\xb6\x08\xc9\x64\xbf\x77\xc7\x12\x1c\xfa\xee\xd9\xfb\x35\xa3\x9f\xbd\x5f\x73\xf9\xf9\x38\xfd\x9a\x58\x88\xfd\x47\x74\x6a\x32\x31\x8f\x0d\x57\xf6\x99\xa3\xe5\x4c\xdb\xb0\xdb\xd3\xfb\x25\x42\xc4\x67\xcb\xde\xb1\x85\xf2\x59\x17\x6d\x0a\x2e\xaa\x2d\xe5\xfa\x2c\x19\x72\x56\x14\x84\x0b\x64\xc2\xe6\x05\x51\xa3\x7b\xa8\x15\x86\x36\xaf\xc3\x88\x9b\x9b\xa9\x7a\x98\x94\x4e\x5f\x53\xa8\x1b\xe4\x62\x6a\x9b\xda\xa2\x2a\x60\x23\xe8\x5c\xf8\x6e\xb5\x51\xe4\x78\x53\xa3\xed\xd4\x4f\x95\x92\x19\xa7\xbe\x95\x94\x6f\x76\x65\x97\x07\x66\xa0\xe9\x1d\x64\xb0\x64\x2c\x67\x62\xf3\x4a\x6d\x7c\xa0\x83\x7f\xbb\x0f\xe3\x05\x74\x4b\x15\x73\xdb\xc2\x8a\xe4\x0d\x26\x5d\xa2\x98\xec\x6f\xdc\x4f\x2b\x65\xcf\xdc\x61\x9b\x2b\x10\x64\xee\x81\x46\xe1\x9d\x4a\x14\x12\x1e\xe5\xa4\x8d\xe2\xc4\x9d\xde\x64\x0d\x31\x5d\x1f\xf3\x09\x00\x49\x8a\xf6\x8a\x22\xd6\x86\xb7\xba\x0a\xd8\xa7\x90\x33\x91\xae\x9a\xf5\xab\x96\x7d\x08\x95\x6c\x57\xd5\xb1\xa7\x57\xc5\x7a\x52\xc3\xfa\x51\xc1\x36\x08\x2b\xf7\xa9\x76\xf5\xa3\x72\x7d\x08\x5f\x41\x55\xb3\x09\x7f\xe8\x89\x71\x9d\x05\xc8\x41\x3c\x67\x42\xf3\x09\x67\x80\xa2\x50\xd5\xac\x62\x02\x02\x41\x50\x73\x6e\x04\xa8\x55\x9f\xda\xa4\xa6\x5d\xcc\x07\x46\xeb\xb6\x5f\xde\x7e\xb3\xce\xb2\xde\x33\x76\xb2\x67\xec\x09\xcf\x9e\xb1\xbf\x97\x5d\xfd\xa9\x73\x75\xa8\xb6\xdc\x7a\xb7\x01\x24\x03\xf8\xc1\x93\xa0\x3f\xad\x60\xa9\x45\x5a\xe2\x21\x8e\xa3\x97\x64\x5a\x62\x2a\x3e\xe2\xa8\xd4\x04\xa1\x1d\x51\xef\x27\x25\x15\x74\x0a\x10\x2f\xe6\x7b\xae\xe3\x81\xac\x89\xb9\xf8\x35\xcf\x23\x2b\x47\xbb\x0b\x09\x76\xb5\x03\xec\x80\x0f\x6b\x59\x14\xac\x56\xa4\xe0\x77\x8c\x5c\xb0\xaa\x90\x8b\xd2\x56\x48\xe5\xe4\x46\x53\x6d\x2e\xff\x0d\xd3\x09\x60\xe4\xb1\x98\xe0\x0e\x51\x70\xcb\xed\xc4\xe1\x00\x56\x4d\x51\x90\x0a\x21\x8e\xa2\x5e\xf3\x5a\x80\x00\x39\x2b\xee\xe9\x42\x0d\xc8\x35\x9b\xb3\x7a\x40\xae\x26\xd7\x52\x8f\xd0\xb4\x4d\x6f\x29\x8d\x2f\x27\x7c\x42\xbe\x2c\xa8\x66\x4a\x13\x4d\xa7\xe0\x68\x69\xc1\x0d\x65\xdd\x19\xb4\x6d\xe2\xb4\x45\x8f\x43\x0f\x88\x87\x30\xba\xc7\x3b\x8c\xb9\xb5\x49\x67\xb5\x70\x18\x51\x5b\x03\x3b\x41\x68\xaa\xb6\xff\x6c\xc0\x4e\x10\x8f\xd4\xb5\x11\x02\x47\x13\x17\xa4\x66\xaa\x92\x42\xb1\x6e\x0b\x3b\x3f\x11\x74\xdc\x6d\xbf\x83\x68\xb4\x3a\x9a\xaa\x88\x56\x52\x69\x40\xf0\x8a\x6f\x45\xdc\x8f\x06\x3a\x72\x84\x00\xa8\x1b\x2d\x0a\x96\x13\x5e\x96\x2c\xe7\x54\xb3\x62\x41\xe8\x44\xb3\x3a\xec\x5a\x1a\x60\x33\x9f\x20\xb8\x3c\xb3\x58\x6f\x0e\x26\x2e\xde\x44\x58\x76\xe1\x62\xab\x45\xf0\xa9\x62\x6e\x94\x05\xb5\x6b\x41\xe5\x96\x60\xe2\x92\x98\xa8\x79\x5e\x83\x22\x16\x1c\xef\x95\x1e\xcc\xd0\x99\x5b\x91\x46\x68\x5e\x58\x20\x60\x79\x47\x32\x59\x56\x05\xb0\x93\xe8\xa1\xe3\xb9\x94\xff\xe7\xd0\x5f\xb0\xa1\xa1\x4a\x9d\xfe\xa9\xfd\x08\x7e\x11\x49\x5c\x0f\xb6\x5b\x1f\x96\x1b\x7b\x60\x59\x8a\xfa\xdd\x75\x01\x3f\xb0\xcc\x8b\x2e\x74\xfc\x22\x02\x1f\x00\x3a\xd1\xbb\xa4\x42\xc5\x9e\x52\x02\xfa\x0a\xc3\x27\x60\xb9\x84\x4f\xdf\x51\xe6\x73\x24\xcb\xb5\x3e\xb7\x54\x92\x82\x0b\x90\x1b\x16\xec\x25\x04\xba\xf5\xc7\x19\x23\x2f\x2b\xad\xc2\x5c\xd9\x5f\x32\x69\x8e\x16\x43\x1b\x40\xb0\x1f\x1d\x9e\x1e\x1e\xaf\x84\xd2\x96\x1a\x69\xdf\x06\xb3\xe0\xd0\x05\xaf\x82\xf6\x6e\x2c\x3b\xcc\x07\x84\x1b\x1e\x9b\x4c\x99\x11\x7d\xd8\x70\x00\x56\xc5\x22\xe0\x0c\x88\x92\x44\xd7\x34\xe7\xd6\x1a\x80\xdf\x9a\x2f\xe9\xba\xb1\xd2\xfb\xe8\xf0\xf7\xc3\x01\x61\x3a\x3b\x26\xf7\x52\x1c\x6a\x58\xbe\x13\x72\x0b\x28\xd2\xe9\x99\x66\x8e\x90\x85\x6c\xa0\x57\x01\x6e\x61\x55\xf0\x8c\xeb\x62\x01\xb2\x85\xc8\x06\xbb\x2a\x18\x3d\x22\x01\xb9\x27\x7c\x2e\x1f\xb8\xb6\x25\x0c\x86\x59\x3f\x83\xd3\x64\x7b\x07\x50\x63\x79\xcc\xd9\xe9\x8c\xd1\x42\xcf\x30\xc1\x56\x48\x31\xfc\x37\xab\x25\xa0\xfb\x08\xfb\x49\x2a\x19\x69\x51\xad\xf0\x49\x88\x70\xad\x12\x94\xe8\xf4\x30\x62\xe8\x05\x8b\x56\x51\xc8\x4a\x4f\xaa\xdb\xdb\xd1\x0b\xa6\x97\xb8\xae\x19\xc5\xa5\x3d\x83\x0f\x96\xd5\x13\x59\x97\x3b\xc0\x7e\xfb\xc9\xc7\x1a\x42\x9f\x9d\x1d\x90\x02\x33\xa9\x92\xf6\x92\x7c\x00\x11\x80\x5d\x91\x68\xe9\x0c\x05\xc1\x32\x73\x08\xba\x39\xbc\x0e\x76\xf8\x6a\x74\x42\x7e\x92\x0d\x40\xde\xd2\x71\xb1\xf0\x70\x99\x8a\xa5\x25\xde\x99\xe7\xc0\x90\x72\x60\x38\xbc\x39\x90\xdf\x32\x9a\xb3\x5a\x01\x03\x65\x34\x31\xc5\xbe\xc7\x1c\x9f\x80\xb6\x5e\xb7\xf2\xbc\x51\x5a\x96\x64\x66\xa7\xdd\x85\xfa\xb1\x97\xf3\x04\x2e\xb0\xc3\x7b\xa8\x59\x85\x4c\xd6\xfe\xcd\x27\xc7\x42\x57\x58\x17\xae\xbb\xfd\xfd\x98\x29\x63\x15\x85\xcb\x66\x56\xcd\x23\x09\x08\x5c\x2c\x44\x67\xee\x89\x9d\xf7\x90\x62\x4a\x7a\x4c\x33\x25\x69\x20\x40\xcb\x2f\x82\x34\x9a\xe4\x37\xf5\x97\xb9\x4a\x7a\xcb\xce\x24\x1f\x24\x43\x93\xd8\xa4\x2c\x7b\xf8\xd0\x21\x1c\xef\xca\x5e\xf7\x72\xde\x36\x28\xc9\xa8\x90\x82\x67\xb4\xe0\xff\x66\x39\x69\x2a\x29\x6c\x39\x06\x68\x9e\x19\x55\x6c\x08\x19\x67\x02\xd9\xb9\x0a\xe0\x68\x0c\x77\xd0\x52\x82\x3a\xe6\xbb\x55\x20\xd5\xfd\x90\xda\x6b\x1d\x41\x32\xb6\x52\xf8\xac\xc4\x54\x3b\x9b\xd5\xcf\x89\x27\x7d\xae\x40\xd5\x43\x99\xe5\x6a\x91\x25\x62\xc6\x03\x26\x0e\x4a\x14\xe0\x8d\xd8\x5e\x6a\x67\x44\xab\xd1\xd2\x76\x4d\x3d\xc2\xc8\x70\x4d\x44\x53\x8e\x59\xdd\x56\xa8\xd7\x7a\x75\x4d\x13\xf3\x3b\x3b\xc3\xe2\x70\x2e\x08\xe9\xd4\x00\x2a\xa6\x8c\x3c\x37\x23\xff\xed\xaf\x7f\xfd\xe2\xaf\x3d\x8c\x63\xa6\xe7\xf3\x46\x05\xb9\x3a\xbb\x3e\xfb\xed\xe6\x87\x73\x80\x6c\x4a\x7d\x7d\x4f\xa5\x4f\x7d\x17\x3e\xf5\x5a\xf6\xf4\x41\x8b\x9e\xa0\x82\x3c\x99\x11\xf6\x7d\x25\x6e\x80\xaa\xb0\x7b\x97\x35\x1b\x82\x76\x2b\x31\xdd\xf1\x56\x9f\x30\xf8\x65\x18\xd6\x4e\x70\x2a\x55\x30\x16\xd5\xce\xd8\x3d\xdd\x0c\x04\xf3\xb6\xe5\xfc\xd7\xbc\xa9\x6d\xe7\x2a\x17\xee\x69\xbd\xdf\x36\xcc\x03\x54\x90\x31\x9b\xc8\x9a\xd9\x7e\x33\xad\xaf\xfe\x13\xb2\xdc\x15\xcb\xa4\xc8\x53\xf4\xf7\xbe\xf4\x51\x4b\x49\xaf\xb7\xf1\x06\xdf\xe9\xfc\xaf\xad\x90\xb1\x83\x81\x19\x68\x76\xba\x9f\x93\xdf\x0f\x07\xc5\xea\x5f\x78\xdb\xdf\xfe\x23\x3e\xd4\x94\x55\x37\x32\xbb\xeb\xd1\xb9\x95\xc8\xda\x2e\xcc\x1d\xcc\x30\xaa\x76\x7b\x3e\x42\xe2\xcc\xce\x5c\xbf\xbe\x6d\x4b\xfd\xa1\xec\xa1\xed\x19\xf4\xad\x8d\xbb\x51\x91\x93\x3b\x56\xa5\x99\x86\x0e\x31\x6f\x4c\xb3\xbb\x7b\x5a\xe7\x10\xd3\xa2\x9a\x43\x13\x54\x6c\xbd\x54\x33\xc0\x20\x10\x12\x6b\xea\x90\x4b\x48\x8b\x8e\x8e\x3a\x6d\x1a\xc8\x66\x10\xeb\x86\xb8\x9a\x35\x23\x26\x94\x17\x10\x55\x6e\x84\xe6\x25\xb3\x05\x1f\x59\xe5\x03\x8f\x61\x16\xc2\x27\xc4\x7e\x3e\x55\xc7\xe1\x61\xdb\xa9\x79\x53\x07\x60\x6a\x4d\xf4\xa7\x6d\x2e\x58\x0e\x8e\x60\x12\x7b\x73\x61\x93\x67\x6f\x2e\x44\x9a\x0b\x55\xcd\x6e\xb4\x8c\xd6\x49\x7b\x4b\x64\x41\x32\x1e\x49\x63\xb1\xaa\x2a\x7d\x34\xbf\x24\x6f\x80\x03\x25\x24\xc8\x9e\x8d\xae\x7c\x18\x4b\x76\x72\x48\xb0\x4a\xd1\x36\x61\x87\x88\xa4\x60\x4a\x9d\xaa\xb0\x83\x1f\xc8\xb8\xa6\x66\xf1\xd9\x33\x55\xcd\x58\x09\xeb\x38\x68\xb1\x24\xcc\x74\x99\xc0\x5f\x32\x9d\x61\x88\x3a\x90\x9a\xd0\x1f\xce\x2e\xd7\x24\x29\x72\xde\x2e\x6c\x56\x53\x35\x63\x00\x53\xcc\x1e\xb8\x56\x38\xe8\x08\x10\x17\xdc\x8a\x1b\xc5\x61\x5a\xd3\x8c\x91\x8a\xd5\x5c\x1a\x65\xa3\x11\x3a\x97\xf7\x82\x8c\xd9\x94\x0b\xe5\x76\x2c\x85\x24\x77\x24\x20\x43\x87\x2b\xdf\x3d\xe6\x84\xbc\xe9\xa0\x34\x5b\x6c\x99\x4c\xb6\x3c\xd3\x2e\xd1\xa0\xa7\x25\x01\x2d\x06\x8e\x01\x36\x77\xf7\x07\xcf\x55\xd1\xea\xc7\x57\x28\xfe\x40\xe0\xca\x1e\x35\x02\x26\x9a\xb3\x82\x2e\xb0\x5e\x74\xc2\x05\x38\x72\x6b\x75\x7c\x92\x9e\xf2\x14\x4d\xa0\xac\x83\x77\x3e\x7a\x32\xb8\x22\x35\xa3\xd9\x2c\x45\xb3\xdb\xe7\x56\xbd\xeb\xd9\xe7\x56\x45\x3e\xfb\xdc\xaa\x4d\x9f\x7d\x6e\xd5\xa6\xcf\x3e\xb7\x6a\x97\x12\x03\xf6\xb9\x55\x7b\x17\xc9\xf2\xb3\xcf\xad\x7a\xdb\xb3\xcf\xad\xda\xe7\x56\x75\x9e\x7d\x6e\xd5\x7b\x3c\xfb\xdc\xaa\xf7\x7c\xf6\xb9\x55\xfb\xdc\xaa\x7d\x6e\xd5\x3e\xb7\x6a\xb3\x67\x9f\x5b\x15\xff\xec\x83\x25\xfb\xdc\xaa\xa4\x67\x9f\x5b\xb5\xcf\xad\xda\xe7\x56\xed\x73\xab\x1e\x7d\xf6\xb9\x55\xfb\xdc\xaa\xb5\xcf\xde\x71\xb8\xf2\xec\x73\xab\xd6\x3c\xfb\xdc\xaa\xcd\xc6\xd9\x9b\x0b\x69\x2f\xeb\xdd\x5c\x70\x79\x42\xa3\x5a\x8e\xb7\x86\xfc\x34\x82\x1c\x0c\x9e\xd9\x24\x25\x39\xe9\xa0\x39\x21\x81\x91\x28\x4e\xdd\xe4\x18\x6c\x93\x6f\xe1\x7d\xb8\xbd\x5c\x3e\x31\x6a\x9b\x48\x51\x1b\x67\x8f\x38\x04\x3c\x75\x5a\x49\xfc\xbf\x36\x77\x24\x48\x1a\x89\x76\x5f\x6f\x19\xba\x2a\x25\x53\xe4\x69\xb2\x44\x76\x24\xa5\xa6\x87\xcc\x90\x3e\x85\xd8\x8e\x66\x84\xec\x66\x36\xc8\x2e\x66\x82\x6c\x23\x0b\x64\xeb\x19\x20\xfd\x84\x2e\x7b\x08\x5b\x26\xab\x0a\x36\xc1\xf7\x76\x56\x33\x35\x93\x45\x34\x5f\xe8\x8b\x27\xbc\xe2\x82\x97\x4d\x69\xae\x98\x32\x57\x9f\xcf\x7d\x12\xb2\xf2\x06\x2b\x8a\x60\x0c\xbe\x9a\x2f\xf2\x9c\x41\x73\x4a\xca\x0b\x73\x02\x00\x1c\x70\x46\xe7\x86\x2d\xa8\x26\xcb\x18\xcb\x53\x8c\xc4\xd0\x2b\xf8\xc5\x89\xa7\x10\x1b\xac\x70\x45\x9e\xa7\x49\x84\x34\xbd\x31\x70\x8e\x7c\xf1\x79\xd4\x3b\xa6\x75\xd5\x8f\xe4\x7c\xf1\x66\x74\x1e\x48\x4e\x2a\x9c\xe0\xe4\x62\x2e\x0b\xd8\x0d\x8a\x5f\x32\xf6\xc9\x16\xc5\x68\xba\xb1\x9e\x64\xa8\xf7\x21\xc5\x53\x6d\xd1\x6e\xc4\xce\x98\x8b\xdd\x80\xd3\x14\xf6\x12\x7b\xb6\x9f\x3c\x81\xb9\xd7\x97\x09\x95\x7e\x1d\x08\xb8\x5e\x61\xe2\xbb\xa2\x23\xdd\x20\x39\xde\x6b\x1b\x58\xfa\x96\x52\xc8\xa2\x2b\x68\xe6\xf7\x06\xf6\xef\x5b\x10\x74\xe7\x33\x96\xdd\xbd\xc1\x84\x9e\x24\x32\x8e\x14\x63\xde\xd4\x98\x72\x3d\x6b\xc6\x27\x99\x2c\x4f\x0d\x03\xc1\xff\x1b\x17\x72\x7c\x5a\x52\xa5\x59\x6d\xac\x0f\x2b\x83\x87\x99\xa1\x80\x8b\xe9\x49\x99\x1f\x9f\xfc\x8f\xff\x91\x44\xc4\x95\xf5\x3d\xda\x2a\x91\x00\xe5\x19\x02\x19\x16\x42\x7c\xcc\x0c\xfb\x97\xe0\x26\x0c\x3a\x52\x99\x55\x49\x3f\xa5\x09\xd2\x36\x31\xbf\xf2\xe9\x73\x2b\xf7\xdc\x96\xf4\xe0\x0e\xed\x93\x19\xec\x46\xfe\xe4\x07\xcb\x9d\xec\x2d\x8d\xb9\x87\x9c\xc9\x1d\xca\x97\xdc\x19\x83\x63\x57\x72\x24\x77\xb0\xbd\x71\x0f\x79\x91\x7d\xe4\x44\xf6\x97\x0f\xb9\xab\x5d\x80\x3f\x58\x0e\xe4\x47\x91\xff\xd8\x63\x74\xa0\xa7\xbc\xc7\xa7\xc8\x79\xec\x65\xd6\xa9\xb9\x8e\x4f\x97\xe7\xd8\xcf\x74\xfb\x34\x12\x13\x6f\xee\x16\xf2\x1a\x9f\x22\x48\xf9\xc1\x02\x94\x3d\x04\x27\xfb\x0c\x4c\xf6\x16\x94\xfc\x60\xf9\x8b\xe9\xb9\x8b\xbd\x9a\xec\x4f\x92\xb3\xd8\x67\xbe\x62\xf2\xfe\x72\xc1\x35\xa7\xc5\x05\x2b\xe8\xe2\x26\x2d\x77\xad\xaf\x9d\xb8\x5e\xc9\x6f\x43\xdf\x70\x37\xc3\x71\x46\x6d\x5b\x6e\x96\xbb\x04\x47\x17\x44\xb6\x9a\x2a\xe4\x40\xe1\xfc\x92\xb2\x1d\x77\x2c\x64\x4b\x76\xc6\x07\x8d\xa0\x0a\x3b\x72\x6a\xbe\x95\xf7\x44\x4e\x34\x13\xe4\x88\x0b\x77\x72\x8e\x03\x67\x4a\x1b\x83\x48\x0e\x2a\x98\xb7\x3e\x7f\xe6\x06\xf9\xf4\x82\x0b\x10\x7e\x51\x6a\xa7\xc3\x4b\x96\xc6\x77\xc7\x97\xec\x17\x27\x4d\xd1\x8d\x31\x61\xdc\xa9\x9f\x00\xd3\xf3\xb6\x91\xef\x73\xa0\xc7\xb3\x22\x2a\x72\x62\xc1\x79\x3e\xbd\x73\x92\x9c\x9d\xdb\xb5\x41\x7c\x3a\xed\xbb\xc2\x51\xb7\xe7\xa3\x7d\x34\x6a\xb7\xfc\xa3\x5b\x4a\x15\xfd\xf4\x2c\xae\xa7\x4f\x0d\xdd\x5b\x5c\x7f\x14\x8b\x2b\xc0\xc5\x7a\x51\xd3\x8c\x8d\x76\x49\x81\x73\x0c\xa4\xad\x6b\x6a\xf5\x38\xcf\x2e\x04\x63\x58\xef\xd2\xa2\x9e\x01\xc0\xd7\xa4\x29\x8a\x05\xba\xfb\x3a\x10\x78\xf1\x47\xeb\x76\xc6\x56\xb0\xc3\x3a\x55\x57\x01\x75\xad\x7d\x52\xd5\xd2\x6a\x25\x75\x23\x84\x91\x56\xf6\x3a\x19\xe2\x8d\x3d\xa2\x98\x88\xf7\x7c\xd3\x0e\xb2\x99\xe2\x53\xb3\x5c\x46\xc3\x00\xd0\xb3\xb6\xe2\xa2\x43\x88\x19\x75\x22\xeb\x8c\x8f\x8b\x05\x99\xd1\xc2\x18\x4c\xf7\x5c\xcf\x08\x25\x77\xbc\x28\xec\x6b\xe2\x17\xea\x86\x69\x0c\xee\xa2\x56\x53\x48\x31\x85\xc5\xa0\x48\x08\x7b\xa8\x58\x66\xc6\xcc\x0a\x46\x45\x53\x21\x9d\x46\x47\x5a\xc8\xa6\x76\x74\xc6\x0f\xef\x42\xcb\x5e\xa7\x12\xbc\x18\xb8\x25\xef\x62\xe0\xad\x9e\xf9\xd6\xfb\xab\x58\x6e\xe1\xeb\xee\xb9\x62\x03\x78\x67\x34\x4d\x48\x8b\x6b\x87\x8d\xe7\x06\x7f\x57\xd5\x72\xce\x73\x8c\x6b\xbb\x63\x61\xb4\x9d\xf8\xf9\xff\x00\xef\x75\xac\x55\x48\x31\x14\x6c\x4a\x41\x45\xb6\x0c\x0d\x33\x1c\x71\x7c\xcc\xa7\x13\x39\xcf\xa8\x66\xc6\x80\x96\x55\x07\xdb\x72\xce\x69\x34\x25\x66\x3e\xc1\x89\x22\x47\x42\x12\x09\x05\x51\x8d\xe0\x7a\x01\xc1\xb7\x59\xa3\x49\x2e\xef\xc5\x71\xca\xc5\xc4\x44\x02\x4a\xc6\x4c\xd3\xb6\x9c\xc9\xa9\x64\x8a\x30\x41\xc7\x85\xb9\x7b\x90\xee\x7e\xbb\xf6\x00\x90\x09\xa3\xba\xa9\x19\x99\x52\x9d\xc0\x25\xd6\x68\xf4\xb8\x9f\x6f\x3f\x76\x5c\xd9\xd0\xda\x84\x34\x42\xb1\x44\x45\xb6\x37\x33\x20\xb2\x50\xcf\xdc\x68\xd9\xe8\x1d\x91\x23\x8f\xb9\x8f\xee\x67\x3c\x9b\x85\x86\x22\x2f\x99\x22\xb2\x49\xf0\xe6\x75\x4c\x40\x3b\x5c\x9f\x56\xde\xde\xf7\xb4\xf6\x89\x8d\x70\xf6\x71\xc2\xae\x03\xad\x3c\x28\xb7\x76\x09\x4d\x58\xf8\x79\x71\x7d\xf3\xdb\xcb\xb3\x7f\x5e\xbe\x8c\xdb\xf8\x4b\x9a\xcd\x42\x70\x61\x41\x28\x08\x0a\x60\xf2\x33\x3a\x67\x84\x92\x46\xf0\x7f\x35\x36\xab\xec\xc8\x8f\x17\xc9\x56\x7b\xec\x82\x1e\xa9\xf8\x1a\x29\x11\xc5\x39\xfa\xd8\xd3\x97\x5c\x01\x52\x2d\x10\x61\x13\xe1\xa5\x62\x64\x52\xcb\x72\xc9\xd0\x22\xd7\x3e\x7d\x6d\x81\xbe\x08\x30\xcd\x66\xac\x8e\xd3\xc8\x2f\x5e\x5f\xde\x40\xe9\x70\x55\x23\xb2\x33\x24\xdb\xc3\x3b\x61\x74\xac\xd9\x47\x7a\xf2\x13\x72\x26\x16\xf8\x21\x32\xb3\x48\x15\xa5\xe0\x4a\x33\x50\x4e\xad\x21\xe9\x12\xf0\x0e\x9e\x9d\xc0\xff\x0e\x08\xcd\xf3\xda\x58\x9a\xbe\x66\x21\x5b\x2e\xb1\x8a\x1a\x19\xed\x57\x3e\x2e\x82\xc5\x15\x4c\x43\x59\x43\xd4\x0b\x5f\xc9\xdc\xee\x04\x28\x81\x90\x6a\x83\xda\xad\xd2\x35\xd5\x6c\xca\x33\x52\xb2\x7a\xca\x48\x45\x75\x36\x23\x25\x5d\x90\x4c\xd6\x75\x53\x21\x62\x42\x4e\x35\x8d\x1b\xf9\x1b\x59\x93\xd2\x71\x67\xc3\xcd\x8c\x4a\x7e\xb3\x3e\xd7\xb2\x65\xd9\xe1\x3f\xb9\x52\x0d\x53\xa7\xcf\x9f\xfd\xfd\xf3\xbf\x46\x9a\xd7\x3d\x5e\xdc\xd8\x2c\xa5\x84\xec\xa4\x6e\xa6\x96\x3b\x60\x90\xd7\x1c\x40\x5d\x50\x77\x42\xf0\xe4\x03\x37\x54\x5c\x4c\x8b\x64\x07\x48\xb2\x1b\x30\xd5\x09\x38\x6c\x67\x30\x8a\xf5\x05\xa6\x7b\x02\x3b\x34\xc4\xbb\x52\xfa\xf3\x82\xb5\x1a\x9c\xf3\x7b\x59\x86\x2c\x45\x60\xd8\x5d\x8d\x1c\x97\x4a\xf1\x1f\x81\x35\xe1\x1d\x53\x88\x97\x80\xc3\x62\xce\xc3\x80\x3c\x23\x5f\x91\x07\xf2\x15\x78\xc1\xfe\x16\x3f\x54\x3f\x3e\xa6\x3e\x32\xe5\x67\x52\xe9\xab\x51\x4f\x1b\xfd\xa3\x91\x57\xe6\x8d\x66\x3f\xb4\x24\x63\x6e\xdd\x11\xec\x41\xb3\xda\x98\x81\x76\x0f\x53\x57\x2e\xc9\xa3\x66\x08\xfc\x58\x4e\x77\x6a\x82\xc1\xd5\xa4\x9b\x5f\xff\x44\xe7\x1b\x06\xfe\x56\x2a\x7d\x6d\xb9\x75\x88\xf5\x11\xd2\x51\x82\x20\xee\xb0\xfb\x94\x51\x5f\x99\xb3\xd7\x82\xec\x93\x5c\x42\x89\x01\xd6\x34\xce\x78\x02\x73\xd8\x9d\x1b\x9b\x96\xd2\xd9\xdf\xd1\x7d\xdb\xd1\x5a\xf2\xe9\x83\x47\xc6\x1a\x29\x41\x5f\x8a\x4a\xe6\x27\x60\xdf\x24\x50\x61\x56\x23\x0f\x94\x81\xb7\x98\x46\x27\x68\xaf\xf9\x08\x31\x5c\x38\xc3\xb1\x32\x2a\x62\x75\x58\x7c\x6a\x36\x61\x75\x8d\x75\xb3\xe3\x85\xab\xe8\x49\x3e\x6d\x49\x5c\xae\xaa\xa5\x96\x99\x2c\x76\xe1\xa8\x8c\x2c\x2d\xb0\xf6\x10\xab\xf5\x11\xf2\xef\x2f\x46\x03\x72\x7b\x3e\x1a\x10\x59\x93\x9b\xf3\xb4\x04\xa8\xd0\x05\x73\x70\x7b\x3e\x3a\xd8\xea\x0e\x10\x67\x4a\x41\x34\x3b\xe2\x25\x9d\xb0\x8f\xb1\xd3\x86\x25\xad\x86\x77\x6c\x11\xa9\xdd\xf5\xa1\x61\x0e\xfd\xc1\xea\x65\x42\xb8\xcc\x25\xad\x36\x7e\x5b\xcd\x68\xce\x77\x1a\xc6\xc4\x15\xf6\x79\x4a\xfb\xc3\x33\x29\xe5\x9c\xe5\x68\x35\xbb\x51\x98\xc8\x2b\xc9\x8d\x8d\xb4\x07\x39\x79\xdb\xb3\x07\x39\x79\xc7\xb3\x07\x39\x59\xf7\xec\x41\x4e\x36\x78\xf6\x20\x27\xf8\xec\x41\x4e\xba\x84\xec\x41\x4e\xf6\x20\x27\x7b\x90\x93\xf7\x7e\x3e\x81\xb4\xd2\x3d\xc8\xc9\xfa\x67\x0f\x72\xb2\x07\x39\xd9\x83\x9c\xec\x41\x4e\xda\x67\xe7\x92\xf8\xf7\x20\x27\x6f\x7b\xf6\x20\x27\x6b\x9f\x9d\x31\x38\xf6\x20\x27\x8f\x3c\x7b\x90\x93\x47\x9e\x3d\xc8\xc9\x1e\xe4\x64\x0f\x72\xb2\xe1\xf3\xe9\x95\xdc\xed\x41\x4e\x36\x7a\xf6\x25\x77\x1b\x3e\x7b\x90\x93\x3d\xc8\xc9\xf2\xb3\x07\x39\x79\xe7\xb3\x1b\x3e\xe8\x3d\xc8\xc9\x1e\xe4\xe4\xad\xcf\x1e\xe4\x64\x0f\x72\xf2\xd6\x67\x0f\x72\xf2\xa9\xf8\x47\xf7\x20\x27\x7b\x90\x93\xb7\x8d\xb1\xb7\xb8\x36\x7b\xf6\x20\x27\x7b\x90\x93\x95\x67\x0f\x72\xb2\xfa\xec\x41\x4e\xf6\x20\x27\x7b\x90\x93\x3d\xc8\x89\x7f\xf6\x20\x27\x9f\xba\xef\xa9\x66\x8a\xff\x9b\x8d\x64\xc1\xb3\x45\x72\xa9\xcb\x1b\xa6\x64\x53\x67\x46\x62\xc3\x6b\x49\x05\xef\xf5\x5e\x85\x24\x25\x7b\xc7\xf0\x03\xde\x04\x0b\x17\xe2\x08\xd4\x76\x0d\x3e\xc4\x12\xec\x04\x96\x80\x9b\xe0\x75\x7c\xb0\x7f\xe8\x1a\x27\xe3\xf2\xc5\x39\x4c\x93\xad\xf6\x70\x22\xbb\x50\xcb\x18\x62\xfe\xf8\x53\xa4\xa5\x67\xb6\xfc\xd1\xc3\x45\xab\xaa\xe0\x29\x55\xa1\x84\xdc\x34\xa0\x5d\x30\x1b\xad\x56\x5f\x92\xac\x6a\x06\xa4\x64\xa5\xac\x13\x0a\x05\x7a\xb0\xe0\x3a\x47\x65\x17\xf6\xe9\x0d\x12\xe4\x16\x5f\x4b\x58\xff\x05\xda\x0b\x2d\x44\x93\xdf\x2b\xee\xd8\x61\x52\x5a\xd8\xd5\x64\x39\xdd\x93\xeb\x8e\x17\xe8\x5a\xea\x37\xf6\x72\x6f\x6d\xbf\x1e\x2b\xc3\xa4\x5a\x96\x3c\x8b\x11\x4e\x28\x4f\xb6\x55\x84\x79\x2e\xcb\xaa\xd1\xac\x23\xd8\x70\x89\xd1\xe8\xe0\x2a\x95\xa1\x6f\xa7\x14\x32\x93\x62\xc2\xa7\xd6\xfa\x3e\x2d\xa9\xa0\x53\x36\xf4\xab\x3d\x6c\x71\x0e\x4e\xa3\x05\xf5\xd6\xea\x20\xb3\x82\xf2\xf8\x1c\xbf\xbe\xd8\xc4\x39\x50\x01\x18\x58\x6d\xce\x3a\xd4\x6a\xf9\x65\x1e\xf8\xc4\x6c\x8e\x7c\xe3\xc4\x7d\x84\x7f\x3c\x48\xb0\x1e\xa9\x06\x5f\x05\x18\x46\x6b\x4e\x6a\x7c\x06\xba\xb7\x18\x05\xa1\x45\x35\x7b\xbb\xcd\x98\x52\x83\x78\xb1\x10\xb4\xe4\x99\xbb\x79\x67\x45\x21\x33\xf4\xd5\x74\xad\xcd\xc4\xa9\x20\xf9\x66\x4e\x65\xd9\x68\x3a\x2e\xd8\x09\xb9\x42\xe0\x06\x29\x8a\x85\xb9\x98\x8a\x69\x97\xbf\x60\x6f\x45\x9a\x89\x99\x92\xc3\x9a\x98\xbf\xba\x56\x5b\x87\xd3\x86\x48\x13\x4c\x18\x1e\x27\x05\x23\x4c\xe8\x7a\x61\x0e\xe6\x48\xe6\x37\xe6\x6c\x76\xbe\x9d\x0c\x40\x91\x98\xb6\xda\x47\xca\x6a\x62\xba\x6a\x3f\x49\xa6\xe9\x09\xa6\xfd\x26\x97\xb6\xb1\x05\xc4\xcf\x09\xab\x6d\x3a\xc7\xa2\x92\xf9\xc9\x1a\x9e\x45\xe4\x24\x91\x02\x33\xe2\x48\xe6\x46\x9b\xaa\x19\x32\x2e\x7f\x47\xd1\xb3\x78\x65\x88\xbb\x03\x57\x20\xd5\xad\x9a\x45\xe7\x94\x17\xe6\x02\x27\x12\xb0\x8a\x45\x98\x16\xae\xe9\x41\x05\xee\x1b\xae\x83\xa4\x1e\xff\x3e\xe1\x36\x08\x40\x45\x96\x3c\x0e\x98\x93\xf4\x78\x05\x5e\x02\x15\x41\x22\xbf\x39\x8b\x25\x7d\x00\x0f\x14\x2d\x65\x23\x34\xe2\x70\xa0\x52\xe8\x05\x39\x96\x3b\x3c\x61\x5a\xd4\x07\x55\xdf\x48\x3f\x4c\x9a\xe6\xae\x1a\x7f\xd4\x47\xb5\x27\xd5\x9a\xd5\xe2\x4b\xf2\x5f\x47\xbf\x7c\xf6\xfb\xf0\xf8\xeb\xa3\xa3\x9f\x9f\x0d\xff\xf3\xd7\xcf\x8e\x7e\x39\x81\x7f\xfc\xe5\xf8\xeb\xe3\xdf\xdd\x0f\x9f\x1d\x1f\x1f\x1d\xfd\xfc\xdd\xab\x17\xb7\xa3\xcb\x5f\xf9\xf1\xef\x3f\x8b\xa6\xbc\xc3\x9f\x7e\x3f\xfa\x99\x5d\xfe\xfa\x9e\x2f\x39\x3e\xfe\xfa\xcf\xf1\x01\xa6\xd4\x68\x6a\x7f\xb1\xd4\x9e\x22\xa9\x1f\x24\x8e\x6a\x0b\x87\xb6\x7e\xf9\x6d\x7d\xe8\xca\xf5\xb7\x0e\xe8\xb7\x5d\xff\x3a\xd9\xec\xbe\x9a\xb4\xe3\x73\x45\x64\xc9\xb5\x66\x39\x68\x9d\x34\x84\xfb\x58\x32\xf9\x2d\xc3\x02\x58\x1e\xaa\xcd\x5f\x06\xb0\x13\xad\xa7\x20\x9a\x2c\xe9\x62\x78\xe0\xe4\x10\x84\x97\x55\xc1\x4a\x26\x34\x30\x9e\xa1\x33\x5f\xc0\x63\x74\xd2\xce\x20\x43\x9b\x96\x3d\x64\x8c\xe5\x96\xc8\x3d\x6f\x0c\x9e\x3d\x6f\xdc\xf3\xc6\x77\x3d\xc9\x6e\xcf\x3e\x18\xe3\x9b\x90\x08\xeb\xae\x50\xce\x41\x0d\x4e\x50\x5f\x67\x2e\x27\x10\x0b\x9f\xf3\xbc\xa1\x45\x88\x94\xe9\xc0\x13\xe3\x38\x40\x60\xa4\x97\x74\xb1\x62\x93\x73\xc1\x43\x58\xce\x81\xcf\xe0\x80\x2f\x5a\xbd\xac\x8d\x1e\x1e\x9c\x15\xf7\x74\xa1\x22\xd1\xfb\xbe\x91\x35\x24\x05\x2c\x0d\x4a\x64\xed\x72\x45\x42\x63\xa5\xeb\xad\x8d\x8b\xf6\xac\x5b\xe8\x6e\x41\xbf\x35\x97\x0e\x95\xff\xa2\x8b\x09\xd8\x85\x68\xb3\xfc\xcd\x39\x8f\x9b\xf8\x0d\xd3\xda\xfa\x73\x96\x8e\x04\x6d\xd7\xd4\x87\xb8\xba\xcb\x83\x69\x21\x80\x99\x69\x3e\x9c\x48\xb3\x27\x80\x36\x3f\x99\xb0\x2c\x32\x57\x10\x01\x10\xd6\x8c\x83\xe9\xca\x9a\x8b\x86\x16\xc5\xc2\xad\x09\xcb\x89\x14\x51\x03\xb1\x07\xae\x49\x23\x34\x2f\xcc\x61\x22\x35\x9b\x36\x05\x0d\x5d\x41\x76\x66\x2e\x83\x2a\x3f\x21\xaf\x85\x31\x46\xdb\x2f\xc7\x39\x31\x97\x06\x30\x4a\x47\xc1\x34\xcb\x07\xf0\xea\xe5\x13\x08\x39\x48\x1d\x8e\xe1\xb7\x25\x6a\x78\xb7\x96\x3e\xc7\xe4\x04\x2f\xa2\x0f\x80\x93\x9c\x4f\x26\x66\x64\x40\x0a\x14\xb2\x2e\xe9\x2a\x55\x54\xe4\x51\xa3\x1b\x0d\x08\xaa\x0f\x42\xf4\x53\xe8\x78\x71\x60\x4c\xf3\x8c\xd6\x07\x61\xaf\x84\xb3\x42\xcf\x64\x33\x9d\xb5\xa7\x22\x6d\xc9\x89\xd2\x90\x79\x63\x16\x53\xb9\x9c\xb3\xa5\xc3\xa6\x8c\xae\x23\x32\x86\x2a\x99\x64\x78\xdd\xef\x69\xe4\xd8\x2b\xd1\x61\x4c\xf7\xc5\x3d\x77\x25\x39\x90\xde\xc5\xf2\xa0\x7e\x4a\xb0\x07\xdd\xc3\x84\x4f\xc8\x15\xc2\x16\x0c\xba\x6f\xed\x2c\x09\x2e\x46\x90\xde\xe4\x12\xf5\x22\x73\xbb\x96\x06\xe0\xbe\x02\x09\xf0\x5a\xf1\xe5\x54\x2c\x5c\xc2\x3f\xa4\x1f\x61\xa1\x92\xaf\x41\x28\xe2\xbc\xa8\xfe\x2e\x3d\x79\xfb\x11\xc5\xb2\xa6\xe6\x7a\x71\x2e\x85\x66\x0f\x51\xbc\xaf\x0f\xa9\x7e\xd3\x25\xa3\x23\xd7\x1d\x89\x44\x56\x88\x9b\xb7\xd4\x81\x66\x26\x9b\x22\x07\xa8\xd0\x46\x00\xdb\x89\x93\x28\x57\x13\x23\xc2\xf1\xbc\x81\xc4\x84\xd0\xc8\x32\x61\x2e\xeb\x0f\x93\x1f\xff\xd5\xf0\x39\x2d\x98\xd0\xc1\x5f\x8c\x20\x0f\x2c\xfc\xa3\x0f\x19\x3f\xd3\x54\xdd\xb5\x16\x06\x1b\x56\x32\x6f\x0d\x8a\x53\xb7\x74\xf0\x2b\xf6\xa0\x3f\xc2\xd8\x19\x28\x4c\xa3\x9a\xcf\x79\xc1\xa6\xec\x52\x65\xb4\x00\x3b\x6a\xdb\xc6\xf9\xd9\x23\x74\xc1\xc9\xac\x65\xa1\x8c\x02\x66\x8c\x55\xa3\x6a\x62\x16\x2c\x84\x70\xa6\x94\x0b\x68\x9f\x92\xe0\xe6\xb7\x83\x2a\x4c\xc3\x35\xf6\x76\x45\x6b\x73\x0a\x5d\xba\x2d\x8a\xc6\xb1\x94\x85\x85\xe0\x2c\x16\x2d\x5d\x3c\xde\x1f\x0e\xbc\x58\xfe\x26\xd8\xfd\x6f\x86\x0a\x45\x26\x05\x9d\xb6\xa2\x99\xe9\x95\xda\x85\xf4\x0c\xe0\x47\x17\x1a\xf0\x25\x1b\xa3\xd8\x18\xad\xa2\xcd\x8d\x0e\x39\x78\xbc\x41\xf7\xfc\x18\xf8\x09\x55\xc4\x8f\x1d\xa7\x3a\x98\xe7\xf3\x63\x90\x13\xe7\x67\xa3\xdf\x6e\x7e\xba\xf9\xed\xec\xe2\xd5\xd5\x75\x7c\x06\xa4\xd4\x0c\xbd\x2b\x81\x76\x9f\xf9\xa0\xbd\xd9\x05\x9f\xf7\x71\x22\xd5\x09\x04\x4b\x00\x43\x43\xe4\xf2\x3e\x31\x52\x68\xce\x14\xa3\x71\x9a\x6b\x46\x2b\x3a\xe6\x05\x4f\xf1\x2d\xf4\x75\x7d\x01\x15\x36\xa0\x07\xf4\xb9\x3c\x3f\xcd\x6b\x59\xe1\xf2\xb9\x0c\xff\xf4\x18\x6b\x37\x93\x34\x84\x44\x83\x1b\x33\xe9\x12\x32\xad\xa9\xd0\xad\x25\xd5\x9e\xe6\xda\x28\xfd\x29\x98\x2a\x5b\x3d\x38\x5b\xc7\x58\xa6\x79\x7f\xf8\xca\x67\x79\xce\xf2\xce\xb6\x25\xbc\x79\x37\x61\xa4\xce\xdd\xe4\x82\x54\x52\x32\x7a\x7d\x73\xf5\xbf\x97\xee\xcd\xa2\x4a\x0b\x6f\xf6\xd3\x7c\xa0\x96\x55\x6f\xbb\xfb\xc6\x42\xce\xef\xf7\x77\x27\xf6\xd7\xeb\x3b\x5b\x2f\x54\x7f\xd3\x88\x6e\x77\xca\x96\x34\x52\xca\x3c\x81\x35\x8f\x7c\x3d\x57\xf7\xad\xa1\xeb\xa2\x66\xc4\x7c\x45\x68\x0e\x8e\xa4\xc0\xf8\xd0\x12\xf1\xd0\x7b\xe9\xa3\x14\xca\xaa\x09\x2d\xd4\xc7\x2a\x70\x52\x34\x15\xa3\xb4\xbe\x92\x8d\xe8\xa7\xf2\x3d\xe1\xc4\x79\x42\x48\xce\x84\xd4\xd6\x22\x36\x13\x84\x36\x5a\xb5\xcc\x08\x46\x01\x03\x50\x9b\x8e\xd6\x90\xa0\xb4\xdc\x06\x8a\x0a\x57\xee\x5c\x8c\x3c\x45\x98\x04\xde\x28\xb6\x6c\x91\x5b\x45\xa5\x8d\x0b\x4e\x64\x7c\x38\xa4\x66\x34\x07\xcf\x79\x45\xf5\x0c\x01\x17\x4a\xaa\xee\x58\x8e\xbf\x48\x2c\x34\xf3\x09\x82\xe0\xb4\x76\x53\xbb\x35\xeb\xeb\x72\xfa\xc0\xc4\x41\xd8\x09\xc8\x22\x4c\x09\xaa\x6e\xf5\x42\x24\xb0\x60\xb3\x09\xaf\x45\xb1\x78\x23\xa5\xfe\xc6\xf7\x56\xd8\xf6\xe5\xf8\xd1\x1a\xd8\xdd\x54\x52\xb0\xb4\x28\x90\x3c\x84\x83\x03\xac\x31\xe8\x08\x91\xca\x19\xcd\x86\xfc\x51\x19\x63\xdd\x88\x33\xf5\xa2\x96\x4d\xb4\xb6\xd5\xa7\x01\xf7\xe2\xea\x02\x64\x5f\x63\x6b\x91\x85\xae\x17\xd0\x17\x68\xb5\x4f\x75\xb2\x1b\xe2\x7b\x5b\xf5\x1d\x72\xb6\xe4\x02\x4f\x42\x5e\xd1\x05\xa1\x85\x92\x6e\xdb\x6d\x7a\xeb\x92\x03\xd1\x79\x27\xcd\xc7\x63\xa9\x67\x2b\x6e\xc9\xd8\xb8\x86\x79\x56\xc7\x1b\x04\x25\xcd\x6d\xf5\x08\x17\x2b\xc3\x6a\x48\x7a\xac\x6a\x96\xb1\x9c\x89\xec\x63\xbd\x11\xdb\xae\xb0\x85\x5b\x75\x2d\x85\x61\xaf\xdb\xbe\x57\x57\xbe\x7a\xdc\xee\x46\x78\x8b\x20\x0d\xd7\xba\xc5\x28\x04\x9e\x81\xb9\x36\x2a\x25\x23\xf5\x6a\x02\x7e\x3c\x3c\x74\xdf\x35\x63\x56\x98\xcd\xe6\x45\x81\x3d\x3b\xa9\x46\x67\x3b\x2f\xe9\x94\x11\xaa\xfd\x25\xd4\x92\x30\xa1\x9a\xda\x9e\x9b\xc8\x90\x93\x79\x7c\xb4\xcc\x4e\xed\xfb\xab\x0b\xf2\x8c\x1c\x99\xb9\x1d\x83\xc6\x31\xa1\xbc\x80\x02\x77\x08\x67\x2f\x39\x19\x27\x2e\xe0\x96\xb4\x04\xc0\x47\x88\xac\x51\xb4\x0c\x88\x90\x44\x35\xd9\xcc\xad\x01\x97\xc2\xfb\x59\x2d\xe2\x59\x52\x76\xe7\x9e\xed\xf4\x27\x0f\xbf\x57\xac\xde\xf6\xb5\x35\xe2\xf0\xfb\x27\x14\x87\xa1\x95\x68\xae\x7f\x77\xc3\xf0\xae\x96\x4c\xd3\x9c\x6a\x6a\xc5\xa4\xfb\xc2\xfe\xd4\xee\x85\x65\x82\xb0\x54\xec\x25\x17\xcd\x03\xe2\x09\xed\x44\x1c\xe1\xe6\x12\x28\x22\x99\xdb\x68\x38\xa0\x58\x01\x9d\x3b\x97\x7f\x0f\xa5\x1b\x57\x9d\x6b\x34\x78\xc4\xea\x06\x29\x41\xb1\x36\x8d\x19\x43\x88\x8a\x5c\x96\x2b\x44\x4e\x64\x4d\x58\x4a\x3b\xe2\x20\x57\x63\x7f\x31\xed\xf3\xc7\x8e\xb0\x14\x6c\xce\x12\x5a\x30\x2f\x5d\xca\x97\xe6\x6d\x66\x71\xdc\xc9\x85\xd7\x93\x82\x8e\x59\x61\xcb\x49\x11\x63\xa0\xc7\x1b\xd6\x53\x34\xa2\x96\x45\x7f\xa0\xd7\x6f\x64\xc1\x10\x10\xc9\x2d\x84\x79\xfd\x47\xb1\x0e\xf0\x92\xbe\xd6\x01\x9c\x72\x9d\x75\x00\x37\xe8\xc7\xb0\x0e\x4d\x82\x82\x48\x96\xd7\xc1\x68\x9b\xdd\x75\x00\xfd\x6b\xd7\xd7\x41\xb1\x2c\x93\x65\x35\xaa\xe5\x84\xc7\xdf\x8e\x3e\xc5\xb6\xa5\xa8\x4d\x2b\x43\x17\xfa\x6a\x6d\x3a\x8a\xad\xee\x97\x69\x52\x02\x8f\x45\x89\xa3\x1a\xe5\xa0\x83\x8a\xfb\x9f\x81\x38\x07\x6e\xb7\x2c\xe3\xed\xe8\xd1\x23\x77\xb2\xd7\xcc\x88\xf6\x85\x7f\x44\x89\xd7\x07\xc4\x6f\x42\x70\xb4\x17\x81\x2b\x33\x5a\xcc\xa4\xd2\x89\xb7\x8a\xf4\x5c\xb4\xbd\x4c\x57\x00\x49\x08\xc9\x70\xf0\xbb\x00\x69\x82\x82\x7b\xde\x85\x2f\x85\xcc\x59\x90\xd5\x09\x15\xd6\x49\xe4\xdc\x22\x28\x1c\x8c\xe1\x90\x14\x8d\xb6\xe7\x92\x26\xf3\xce\xc8\x5a\x62\x1f\xe6\xa4\x21\x1d\x5c\x38\x85\x75\x65\x02\x52\xa4\x2b\xaa\x67\x03\x52\xb3\x02\xf1\x1b\x2d\x7b\xbe\x43\x8f\xd7\x21\x70\x1c\x47\x90\x63\x37\x8e\x6c\x87\x34\xd1\x0f\x55\xa0\x83\x4f\x50\x7e\x72\x45\x0e\x5e\xba\xfd\x3a\xb0\x40\xe7\xd7\xaf\x6f\xc3\x92\x16\x2a\x16\x58\x78\x97\x50\xb0\x81\xcf\xee\xa9\x15\x89\x47\x1d\xd7\xd0\x1f\x6f\x8c\x89\xde\x71\x91\x5b\x84\xc2\xce\x2e\x3a\x07\x9e\x35\x0d\xd3\x36\xf3\x07\x5a\xf0\x3c\x94\x47\x5f\x26\x76\xf1\xf4\xa7\x80\x0c\xb7\x72\x4d\xdf\xa0\x01\xeb\xa2\x6c\xc3\xb7\x47\x95\x3d\x81\x7d\x92\xf0\xbd\x80\x3b\x68\xe6\x3b\x24\x42\xae\x19\xa3\x87\xad\x4b\xbe\x03\x56\x76\xee\x90\x07\xe4\x47\xa4\xc8\x99\xd9\x99\xe1\x1c\x9a\x8b\xa9\x0a\xbd\x20\xb4\x28\x7a\xc9\x4b\x58\xe7\x06\x71\xd7\x00\x6a\x7f\x6c\x01\xda\xb2\x99\xdf\x01\x03\x4e\x19\xfd\x1d\x2e\x8c\x8f\xdb\x15\x51\x18\x93\xe2\x23\x77\x44\x4c\x4b\x45\xcf\x6b\xb3\x82\x9a\xd3\xe2\xa6\x62\xd1\xbd\xd4\x49\xcf\xe2\xe2\xc5\xab\x9b\xb3\x2e\x65\xa0\x0c\x5b\x60\x19\x06\x9f\x13\x9a\x97\x5c\x29\x88\xf8\xb0\xf1\x4c\xca\xbb\xa4\x21\x8f\xd6\x74\x87\x0e\x0a\x83\x15\x9f\xaa\x53\xcb\x51\x86\x66\xe1\x8e\x09\x17\x85\x2f\xbe\x01\x77\xa1\xd0\xca\x86\x10\x92\x27\x4f\x32\x3f\x7b\x38\x7a\x00\xf9\xe2\x93\x9d\x57\x97\x07\xd0\x7f\xe0\xf0\x6e\x5d\xed\x58\x3d\x55\x69\x30\x9d\xcb\x9d\xfa\xd7\xcf\x7d\x4d\x7f\xf1\xb5\xeb\x88\xd6\xeb\xd6\x17\xc9\x6a\xfd\x19\x53\xfd\x75\xf9\xed\xa1\x39\xb3\x25\x89\xe4\x0c\xeb\x62\x19\x40\x54\xd0\x47\xcb\xc8\x20\xbe\x7d\x08\xad\x4e\xec\x9f\x1e\xf6\x05\xbe\x74\x56\x14\x66\x23\xa9\xad\x91\x0e\x32\x3c\xc1\x36\xf1\x65\xc9\xd0\x9f\x14\x2b\x92\x8d\xb5\x10\xce\x22\xbd\x7b\xe7\x11\xd7\xae\x20\xdc\x55\xa4\x6b\x89\x63\x53\x52\xf2\x07\x43\x61\x38\x62\xb7\x84\x16\x22\xff\xeb\x3f\x4e\x40\x7e\x27\x90\x7d\xe0\x91\x28\x06\x66\x87\xc2\x41\x5c\xbd\x8f\x36\x62\xcb\x7c\x70\xcd\xb4\xb1\xd4\x70\xdd\xc2\xf0\x83\xb1\xac\xea\xa6\x87\xcb\x90\x12\x1a\x26\x61\x78\xb8\x57\x4e\x91\x78\x1f\x20\x54\x6c\x69\x32\x3a\x88\x53\xde\x9e\x2a\x74\x4c\xd6\x14\xc4\x3c\x59\x08\x99\xbc\x7f\x18\xf9\x03\x06\xab\xc8\xae\x04\xac\x52\xab\x87\x83\x4a\xe8\xad\x95\x0e\x87\xd5\xd8\x7c\x35\x7b\x69\x24\xf3\x95\x22\x6d\xd7\x17\x33\x1e\x01\xd9\x1c\x8e\xd6\x04\x11\xd2\xfa\x47\x82\xd6\x94\xec\x81\x65\x8d\x66\xb9\xc5\x6a\xb0\x3e\x65\xac\xf3\xee\x52\x13\x4d\x01\xbc\xb3\x6d\x88\xa3\x06\x2d\x54\xa1\xb5\x75\x3c\xda\xc4\x80\xfc\x1f\xe0\x92\x16\x9a\xa9\xed\xa6\x39\xf2\x7f\x1e\xbb\x14\x90\x48\x9d\x51\xe1\x3b\xca\x6b\xe9\x5c\xdc\x16\x93\xc1\x96\xa6\x8e\x19\xa9\x68\x4d\x4b\x23\x83\x15\xb1\xdb\x33\x66\x53\x8e\x85\x76\x81\x50\xf4\xa0\x0e\x71\x20\x25\x60\xd8\x70\x4d\x4a\x3e\x9d\xe1\x6d\x21\x14\x3a\xd7\x10\x97\x38\x56\x48\x9a\x13\x60\x2c\xb2\x26\xf7\xb4\x2e\x8d\x2e\x40\xb3\x19\x64\xa1\x51\x41\xf2\xc6\xdc\x07\x02\x10\x04\x8b\xa1\xd2\x54\x1b\x1b\x93\xd5\x09\x4e\x38\xb7\x4c\x5b\xc0\x56\xfe\xd0\x7d\x23\xb6\x5c\x22\x6e\x6e\x5a\x2f\x5e\x90\xcb\x07\x96\x05\xdd\x09\xcd\xf1\xb4\xed\x09\x8d\x98\xa2\x77\x89\x89\x66\x5b\xb7\x8b\x33\x59\x96\x54\xf4\x57\x06\x99\xa8\x88\x9c\x23\x39\xce\xc4\xb1\xd4\x11\x63\x7c\x42\x72\x27\x32\x50\x87\x7e\xda\xd1\x42\x90\xd3\x99\x73\x6d\xae\x29\xd6\xb8\xcb\xda\xf7\xb4\x48\x22\xcb\xd1\x01\x28\xf9\x52\x6a\x72\x74\x78\x7a\x78\xec\x50\x57\x3c\x09\x87\x2a\x2c\x2a\xc0\x82\xe2\x76\x42\x8a\x97\x55\xb1\x80\x39\x1c\x22\x30\x7e\x42\xc3\x29\xf3\xb8\xf4\x54\x8f\x05\xab\x66\xac\x28\x06\x44\x19\x5d\x97\x3a\xf0\x36\xfc\xad\xf9\x92\xae\x9b\x0c\x7d\x62\x47\x87\xbf\x1f\x0e\x08\xd3\xd9\x31\xb9\x97\xe2\x50\x63\x78\x83\xdc\x82\xc1\x98\x44\x93\x27\x62\x21\x1b\xe8\xdd\x86\xdb\xe6\xf1\xfe\x32\x6a\x6c\x9d\x06\x15\x72\x23\x8f\xe1\xeb\x69\xca\xdb\xe5\x03\xd7\x46\xef\xd0\x0d\xf8\x24\x9e\xa1\x59\xc0\x0c\x2f\x35\xd2\xcd\x88\xb5\xd3\x19\xa3\x85\x9e\x2d\xbc\xa9\x82\x6d\xb1\x14\x69\x84\xfd\x24\x5d\x61\xda\x81\x72\xce\x64\x7b\xdd\x36\xd1\xdb\xe9\x3e\xc0\x96\xc6\x77\xb6\x01\x46\x05\xa6\xdb\x02\x18\x74\x2c\x96\xf7\xd5\x05\xf8\x8b\x4f\xaf\xc3\xef\xb4\xae\xfa\x91\x9c\x2f\xde\x8c\xce\xdf\xd9\xd7\x17\xbe\xb4\x6f\xec\x9b\x0c\xae\xd9\x67\x3f\xdb\x91\xac\x35\x11\xbe\xa7\x9a\xb9\x61\x53\xd8\x4b\x56\xcf\x79\xc6\x4e\x9e\xa0\x7d\x6c\x5f\xb0\x99\xe9\xd7\x81\x40\x9e\x12\x4c\x7c\x57\x74\xa4\x1b\x24\x67\x9d\x1b\xd8\x52\x0a\xe6\x56\x41\x33\xbf\x37\xb0\x7f\xdf\x82\xa0\x3b\x9f\xb1\xec\xce\x82\xe0\xa6\xf9\x0b\x15\x63\x64\x4d\x20\xc1\x30\x10\xfc\xbf\x71\x21\xc7\xa7\x25\x55\x9a\xd5\xc6\xfa\xb0\x32\x78\x98\x19\x0a\xb8\x98\x9e\x94\xf9\x71\x4a\x67\x0c\x12\x58\xbc\x2b\x48\x96\x1d\x4c\x95\x47\x50\x29\xcd\xaa\x6c\xd5\x3b\x6e\x56\xef\x45\x4f\xbd\xd4\xbf\xbd\xbd\x1d\xbd\xe8\x74\x52\x87\xba\x7f\xad\x2b\x07\x5e\x0d\xa7\x02\xeb\x84\xf6\xdc\x76\x67\xda\xa8\xf7\x10\xc9\xd8\xa4\xf5\x3a\xf9\x49\x36\xa0\x30\xd1\x71\xb1\x20\xf7\x14\x71\x02\x14\x4b\xe3\x05\x07\x86\x8c\x03\xc3\x6d\xcc\x81\xfb\x96\xd1\x1c\x31\x75\xc1\x59\xb2\xfd\x00\x54\x4b\x53\x6f\xdb\x76\xde\x28\x2d\x4b\x32\xb3\x53\xc5\x35\xf4\xa2\x10\x2f\xdc\x09\x5c\x4a\x8c\xa6\x28\x52\xb3\x0a\x4d\x12\xfb\x37\x9f\x84\xc1\xb1\xc2\x82\x70\x9d\x03\x78\x7a\x4a\xb2\x70\xa9\xac\x9a\x8e\xbd\x70\x05\x2e\x50\x52\x73\x52\x7c\x7a\xe9\xd7\x43\x7a\xea\xd9\x43\xd2\xfb\xf6\xb8\x97\xa4\x87\xf5\xfa\xe9\x00\x44\x7a\xe9\x02\x44\x7a\xef\x04\x44\x6c\xf0\xca\x1e\x2e\x4c\x69\x31\x84\xa6\x79\x14\xdc\x8b\x79\xdb\x2f\x3c\xa3\x42\x0a\x9e\x61\x80\x00\xfb\xce\xcb\x46\x57\x8d\x06\x7f\x4b\x46\x15\x1b\xce\x69\xcd\x0d\x43\xc5\x26\x6a\x3e\xb7\x48\x98\xdb\xae\xa5\x04\x67\x84\x0f\xe3\x22\xc5\xe9\x64\xf6\xc2\x21\xf1\x81\xc3\xd6\xf3\x0e\xaf\x6c\x4e\xfa\x89\x26\x7d\xcd\xba\xa2\x7a\xd6\x9f\xd5\x44\xf5\x0c\x52\xda\x20\x88\xe3\x32\x22\x81\xbf\x19\xad\x7c\x07\x4a\x4e\x7a\x35\x12\x13\x6f\x2e\x76\x91\xad\x97\xcc\x4c\x43\xe1\xea\x1a\xf6\x94\x64\xf1\xe1\xad\xd6\xb0\x31\xd9\x98\x11\x2a\xc8\xd5\xd9\xf5\xd9\x6f\x37\x3f\x9c\xff\x76\x7d\xf6\xea\x32\xe5\xd5\xc9\xad\x28\xfa\x6c\x46\xd1\x5b\x3b\x8a\x0f\xd4\xac\xc7\x3c\x2a\x9b\xb1\xdd\xc9\xaf\xb8\x01\x6a\x42\x44\x2e\xab\xaa\x07\x30\xe9\x69\x10\x6d\x64\xc9\x33\x69\x18\xcf\x56\x39\x8e\x0d\xa7\x5f\xb0\x82\x2e\x6e\xb0\x2d\xff\xb6\x9d\xc9\xd7\x9e\xd9\x60\xe3\x7e\xe5\xd1\xe1\xd9\x12\x56\x94\xeb\xc7\x60\x31\xed\x5d\x60\x3c\x8c\xe5\xe3\xfc\xa2\xc3\xb5\x64\xf7\x42\xb6\x64\x67\x7c\xd0\x15\xab\x39\xa4\xc2\xec\xc2\xa9\xf9\x56\xde\xdb\x46\x0f\x47\x5c\xb8\x93\x73\x1c\x38\x53\xda\x18\x44\x3a\x8e\x98\x96\xe4\xf9\x33\x37\xc8\xa7\x17\x5c\xb0\x29\x2e\x3b\x1d\x5e\xb2\x34\xbe\x3b\xbe\xd4\xe6\xeb\x74\x63\x4c\x29\x89\x33\x64\x89\x8d\x3f\x3f\xf1\x15\x5a\xcf\x81\x1e\xcf\x8a\xa8\xc8\x5d\xae\xd5\xa7\x77\x4e\x74\x56\xdd\xc8\xec\xae\x27\xd7\xe8\xed\xf9\x08\xdf\xf6\xce\x70\xd4\xed\xf9\x68\x1f\x8d\xda\x2d\xff\xe8\x21\xd6\x34\xd1\xe2\xcb\x8d\x7d\x9d\x87\x7b\x8b\xab\x7d\x9c\xf2\x53\x77\x02\x46\x7b\x8b\xeb\xb1\x67\x6f\x71\x6d\xf0\xb8\xce\x62\x5c\x8a\x17\x35\xcd\xd8\x68\x97\x14\x38\xc7\x40\x48\x6e\xfb\x6d\x92\x56\x8f\xf3\xec\x42\x30\x96\x23\xff\x70\x4d\xd2\xc8\xd4\xcc\x04\x73\x83\xc1\xdd\xd7\x66\xd5\x36\x75\x82\xaa\x77\x3b\xb3\xaf\xb6\x6a\xae\x8b\xe3\xae\xa3\xae\xb5\x4f\x2a\x8f\x06\xee\x9a\x50\xd8\xeb\x64\x88\x37\xf6\x88\x62\x22\xde\xf3\x4d\xc3\x1d\x24\x8a\x4f\xcd\x72\xb9\xde\x7c\x08\x21\xe5\x5a\xa9\xb4\x84\x98\x51\x27\xb2\xce\xf8\xb8\x58\x90\x19\x2d\x8c\xc1\x04\x2d\xde\x28\xb9\x83\xd6\x64\xf0\x9a\xf8\x85\xba\x61\xb6\x50\x11\xb5\x9a\x42\x8a\x29\x2c\x06\xb5\x05\x09\x0f\x15\xcb\xcc\x98\x59\xc1\xa8\x68\x2a\xa4\xd3\xe8\x48\x0b\xd9\xf4\x50\x93\xe0\x42\xcb\x5e\xa7\x12\xdc\x82\x6f\x54\x90\x90\xfc\xd6\x33\xdf\xad\x2c\x25\xaf\x5d\x8b\xda\x41\x7c\x2b\x32\xe2\x3c\xb4\x1e\xb2\x43\x05\xc5\x01\x1e\x40\xc4\x96\xcd\x99\x63\x01\x75\x9c\xd1\x63\xfd\x00\xef\x75\xac\x55\x48\x31\x14\x6c\x8a\x30\x05\x96\xa1\x61\x86\x23\x8e\x8f\xf9\x74\x3e\xd5\x5e\x69\x59\x75\xfa\xb0\xcd\x39\x8d\xa6\x04\x20\x11\xda\x13\x45\x8e\x84\x24\xb2\x32\xa2\xab\x11\x5c\x2f\x20\xf8\xe6\x5a\x00\x26\x14\x1b\xdd\xda\x44\x02\x4a\xc6\x4c\x53\xeb\xae\x36\x97\xc0\x23\x82\x03\xd8\xb7\xb9\x7b\x90\x21\x7f\xbb\xf6\x00\x78\x90\xf0\x29\xd5\x09\x5c\x62\x8d\x46\x8f\xfb\xf9\xf6\x63\xc7\x95\x0d\xad\x25\xa2\x10\xef\x06\xae\x9f\xb9\xd1\xb2\xd1\x3b\x22\x47\x1e\x73\x1f\x21\xc0\x43\x60\x28\xf2\x92\x29\x22\x9b\x9e\x1a\x2e\x3c\xb7\xc3\xf5\x69\xe5\xed\x7d\x4f\x6b\x1f\xa5\x73\x1e\xd5\x45\xae\x8f\x23\xf6\x08\x74\xbd\x2d\x42\x0d\xd0\x1b\xc7\xcd\x64\xc2\x6a\x90\x74\x40\xf0\x4a\x1a\xba\x6f\x0b\xe5\x64\x58\x9c\x03\xd7\xa6\x54\x31\x3d\x00\xe4\x7c\x8b\xa4\xf0\xc8\x90\x16\x62\x12\xda\xae\xd5\x4c\x01\x12\xba\x20\x97\xaf\xbf\x89\x3b\xa2\x7d\xe0\xea\xa7\xd5\x6b\xc2\x3c\x5f\x8b\xb8\xb4\xbf\x7e\xcf\xc3\x3a\xc8\x13\x7b\x2c\xb2\x42\x2a\x5b\x1b\x0c\xfb\x92\xcd\xa8\x10\xcc\x39\xa4\xb8\x06\x6f\xf6\x98\x31\x41\x64\xc5\x30\xed\x2d\x8a\x18\x4a\x14\x17\xd3\x82\x11\xaa\x35\xcd\x66\x27\x86\x3a\xe1\xce\x42\x5b\x84\x6b\x7f\xa3\x74\xcd\x68\x89\x67\xa2\x66\x25\xe5\x38\x3c\xa1\x59\x2d\x95\x22\x65\x53\x68\x5e\xf9\x97\xc5\x79\x12\x19\xc0\x21\x28\xac\xc9\x74\x7b\x05\x65\x16\x6d\xb5\xef\xa0\xa5\xd0\x4e\x5f\x8a\xe5\x76\xb1\x03\xf3\x29\x2b\x2b\xbd\xf0\x55\x79\x71\x36\xd0\x84\xd7\x4a\x93\xac\xe0\x4c\x68\x3b\x33\x04\xdc\x03\x1a\x7c\xcf\x6f\x61\x57\x44\xd9\x25\x11\x39\x18\xdf\x95\x56\x58\x7c\xe6\x89\x70\xaf\xca\xb9\xb2\xbe\x0e\x15\x57\xfa\x46\x5d\x5f\x16\x3c\x38\x6e\x45\xe0\xe8\x38\x05\x07\x29\xb2\xbf\x0a\x48\x08\x3b\xdf\xfa\xc2\xc1\x34\xbe\x02\xcd\x53\xdc\xbd\x1e\x74\x0a\xee\x5b\xdb\x02\x4a\x43\x56\xb8\x0e\x1c\x28\xc1\xe6\xe6\x1e\xb0\x8c\x19\x55\x94\xf6\xc8\x64\x9e\x9c\xc7\x04\xba\xdc\x2b\xa6\x14\x9d\xb2\x51\x64\x4a\x42\x1f\x0c\xa7\x75\xb4\x41\x2e\x43\x7b\x6c\xa0\xfb\x6d\x81\x30\x68\xfe\x37\x61\xd1\x53\x68\x3c\x96\x38\x91\x28\x0a\x9c\xd1\x74\x5f\x73\xad\x19\x9c\x52\x68\x65\x04\xb9\x62\xcb\xd0\x95\xdd\x62\xab\xa8\xf1\xec\xa2\x87\xe3\x19\xf5\x43\xe4\x58\xb6\x34\x66\x64\x5c\x73\x36\x21\x13\x0e\x75\x54\x50\x61\x34\x40\x0c\x7e\x8a\x2e\x64\xa5\x58\x0d\xd3\xb6\x6e\x01\x37\xfd\x38\x7a\x7e\xb4\xf3\xd7\x75\x23\x32\x1a\x74\x7c\x04\x60\x2d\x3e\x21\x53\xa8\x6a\xb2\x46\xf0\x7f\x3c\xfb\xcf\xbf\x91\xf1\xc2\xe8\x6b\x60\x88\x69\xa9\x69\xe1\x08\x20\x05\x13\x53\xb3\x8b\xc0\x72\xe3\xf8\x46\x07\x9c\xc9\x6f\x4e\xc1\x4b\xae\x71\x81\x9e\x7f\x7e\x37\x4e\xba\x7a\xc0\x1f\x4f\x73\x36\x3f\x0d\x8e\xd0\xb0\x90\xd3\xb8\xb7\x9e\xf7\x51\x4a\x9b\xe4\x67\x5b\x73\xa3\xa1\xd1\xfd\xb6\xee\xb4\x6b\xdd\x41\x66\xf2\x1e\x9d\x39\xab\x57\x35\xc0\x39\xa9\x64\xd5\x14\xb0\x70\xe4\x1b\x8f\x4e\xd7\x28\xb6\x8c\xfb\x93\xea\x24\x0c\xb8\x1d\x04\x52\xed\xb0\xcb\x6d\xbc\xb1\xa4\xcf\x91\x29\x2d\xea\x82\x8d\xbb\xf9\x2e\x1c\xd1\xde\xb8\x6f\x68\x51\x8c\x69\x76\x77\x2b\x5f\xca\xa9\x7a\x2d\x2e\xeb\x5a\xd6\xdd\x39\x17\xd4\xc8\xf4\x59\x23\xee\xa0\x29\x6b\x0b\xc5\x2a\xa7\x36\xfd\xcf\x15\xcf\x07\xb3\x8b\x22\xc6\xcd\x12\xc1\x31\x9d\x4a\xe2\x7c\x70\xed\xc8\xec\x81\xb7\x8e\x36\x41\x98\xa1\x39\xb6\xfa\x9c\x75\xe6\xa1\xc2\xab\xfd\xf9\xb3\xff\xf8\x3b\x32\x17\x22\x6b\xf2\xf7\x67\x50\x82\xab\x06\x28\x00\x40\x02\x1b\x55\xab\xa4\x45\x11\x1b\x25\x08\x59\x80\x39\x6c\x1f\xed\x95\xd7\x5b\xbb\xdd\xef\x6d\x32\xde\xde\xfe\x04\xf6\x22\xd7\x8a\x15\x93\x01\x42\x9d\x78\xb7\xd6\x21\x68\x57\x87\x56\xe4\xc5\xc3\xe4\x6c\xdf\x68\x9b\xcb\xa2\x29\xd9\x05\x9b\xf3\x2c\x2e\x80\xd9\xd9\x95\xce\xdb\x9c\x9b\xbe\xe0\x0a\x10\x70\xc6\x85\xcc\xee\x48\x6e\x3f\x0c\xb2\xda\x97\x9b\x34\xc7\xaf\x42\x6c\x7e\x7f\x42\x5e\xff\xa3\xf3\xef\x64\xf4\x97\xb4\xaa\x3c\x3c\x47\x4d\xef\x3b\x8b\x01\xac\x09\xa0\x41\x13\xc3\x88\xc9\xc1\xf4\xd4\x50\xfa\xd0\xce\xc8\x88\xa9\xe8\x57\x44\x97\x01\xa4\x47\xe2\x5b\xea\xe3\xe3\x98\x9d\x03\xd1\xbe\xd0\xdd\x86\x0a\xfe\x8d\xf8\x03\x2b\xb0\x50\x1e\x6f\xc7\x1f\x0c\xd4\x20\xcd\xf1\x01\x29\x13\xef\xbe\xec\x21\x18\x9a\x56\xce\xd0\x59\x17\xe1\x83\xd0\x25\xd5\xd6\x3e\x72\x51\x76\x4a\x2a\x56\x2b\xae\x8c\xea\xf4\x03\x5c\xa8\xf3\x82\xf2\x32\x08\xdf\x6d\x67\x11\xf0\x72\x43\x6f\xd3\x74\x4e\x19\x29\xbf\x46\x32\xb7\x74\x00\x07\xc5\xb6\xb5\x1f\xc4\xd2\xeb\x51\x4d\xd8\x36\x57\xfe\xa1\xdd\xb8\x2e\x53\x36\xbf\xf1\x5c\x19\xbf\xf5\x29\xf1\x62\x98\xdf\xc7\xca\x8a\x3d\xf1\x3d\x71\x9c\xa4\x64\x20\x60\xe0\xf6\x64\x74\x39\x76\xc7\xe7\x83\x37\x33\xb0\x0e\xad\x2f\xe6\x04\x51\xe3\x13\x08\x30\x57\xd1\x0e\x4a\x0e\xbf\x3c\xdc\xaa\x18\xc0\x9d\xa9\x65\x45\xa7\x60\xbc\xed\xc2\x06\x2d\xd3\x14\x62\x94\x1a\x43\x1e\x3e\xc7\x04\x8c\xca\x7e\x8b\xe5\x2d\xd0\xf5\x4c\x26\xed\x0e\x26\xd7\xb9\x13\x61\x0d\x50\xc4\xb2\xbb\xa7\x0b\x42\x6b\xd9\x88\xa4\xa2\x5e\x88\x1d\xf8\xd8\xd2\xab\xa5\xc9\x5e\x4b\xc1\x5c\x1c\x3b\x65\x94\xdb\x16\xe3\x9a\x2b\x0c\xe9\x73\x41\x9e\x9f\x3c\x7f\xf6\xa9\xa8\x1d\x30\xc3\x25\xb5\xe3\xda\xab\x1d\x28\x01\xb6\x3a\x57\xd7\x23\x7c\x17\xee\xd4\x2b\xeb\x48\x6e\x9b\x80\x73\xd7\x64\x16\x7e\x75\x5f\x73\x6d\x8f\xf9\x3d\x57\x8c\x1c\x81\x09\x4b\x64\x1d\x82\x8c\x26\x41\xd9\x86\x0e\x8f\xc4\x66\xe1\x7d\x40\xd1\xaa\x66\xbc\xab\x02\xc9\x4a\x1e\x60\x68\xeb\x23\x0e\x8f\xca\xa6\x9e\xf6\xe7\xe0\x80\x1c\xe1\x18\x87\x88\xf8\x96\xb0\xf3\x3d\x5c\x24\xbb\x57\x97\x0f\x55\x42\xd3\xb0\xfe\xf6\xeb\xf2\xa1\xa2\x10\x24\xa9\x76\x62\xe3\xfe\xc9\x66\x74\xce\x00\x60\x8f\x17\xb4\x2e\x20\x23\xec\x06\x97\x8c\x8c\x1b\x4d\x98\x98\xf3\x5a\x8a\x92\x09\x4d\xa0\x48\x7b\x5c\x30\x52\x33\x80\x21\xcd\x98\x22\x7f\x3e\xfa\xe1\xec\x0d\x64\x0c\x1f\x5b\x9c\x56\x3b\xbf\x46\x41\x81\xde\xd2\x1c\x82\xd7\xed\xe2\x79\x23\x6e\xee\xe6\xb8\x80\x00\x77\x6b\x61\xe6\x56\x36\xba\xa1\x05\xe0\x10\x66\x45\xa3\xf8\x7c\x5b\x22\xc2\x22\x35\x5e\xf0\xa8\x23\xdd\xc7\x61\x3e\x0f\xf6\x74\x05\x37\x32\x1a\x81\x77\x0d\x0e\xd1\x4a\xfa\xc6\xa1\xf2\xd8\x44\x61\xa2\xa8\x75\xaf\xc7\xc5\x0f\x00\xd8\x16\x2b\x94\x5c\xcb\xa8\x15\xfd\x1e\x10\xb4\xb7\x6e\x41\x6f\x7c\x60\x84\xcc\xd9\xe6\x70\xe9\x69\x47\xe4\xda\x8e\x89\x19\xa1\x01\x84\x92\xca\x66\x2c\x6f\x0a\x66\xa1\x96\x65\x4e\xa4\xd0\x92\xd0\xb6\xd3\x8d\x21\x17\x72\x24\x1c\xa2\xbe\x18\x42\x34\x67\xd3\xf4\x0d\x48\xa8\xb1\xa3\xd5\x0e\x3e\xd4\xfd\x42\x2d\x8d\x0f\xce\x36\x33\xf2\x80\x50\xa5\x9a\x12\x19\x17\x34\xc1\x27\x13\xae\x21\x7d\x43\x36\x75\xb6\xa9\x05\x6c\x0d\x77\xc3\xec\x36\x4c\xa6\x4e\xd8\xec\x1b\x56\xc0\x2d\x7c\xea\x0d\x77\xe3\xe2\xa6\x2b\xf7\x13\x8a\x32\x97\x0a\x0d\xc9\x4e\xbe\x36\x50\x42\xb8\x6c\xc2\x35\x91\x82\x50\xdc\xfb\x0d\x47\xbe\x59\x33\x0e\x6a\xf4\xf8\xbe\x43\x85\xad\x3c\xd5\xf2\xa8\xe3\xf6\x7c\xd8\x86\x75\xf6\x0c\x6c\x4a\xc1\x86\xd9\xa0\x8e\xc5\x80\xbd\x76\x4a\x95\xe2\x53\x31\xac\x64\x3e\x34\x63\x9f\x46\x1c\x92\x08\xc7\x92\xeb\x09\x41\x8b\x51\xb4\x77\x26\x5a\x7e\x75\x8a\x68\x4a\x5a\x0d\xad\x6b\x50\xcb\x92\x67\x1b\xbc\x49\x6e\x48\x72\xda\x09\xbf\xe9\x40\xc3\xbd\xbe\x59\xf1\xd8\xab\xc0\x2b\xbd\xf1\x21\x96\xa5\x2d\x46\x11\x79\x20\x71\xc0\x00\x47\x57\x45\xcd\xcc\x4a\x43\xc9\x06\x6f\x61\xfb\x20\x49\x7d\x53\x10\xc0\xab\x89\x9b\x82\x37\xf0\x6d\xda\x1f\xf4\xaa\x42\xa9\x3b\x91\x45\x21\xef\xa1\x22\x17\x89\x70\x17\x18\x32\xe3\x37\x3d\x2b\x43\xb5\xd4\x0c\xa2\xdb\x72\xad\xc7\x29\xd8\x17\x0f\xfa\x9e\x00\xd6\x0f\x40\x37\x9e\xab\x8b\xf8\x3f\xbe\x1a\x9d\xc7\xff\xf1\xf7\x8a\xd5\x9b\x66\x23\xd9\x3f\x5f\x5e\xff\x6e\xd3\xff\xbe\xde\x19\x76\x24\xee\xe7\x9d\x13\xf5\xa2\x96\x4d\xd5\xeb\xcb\xce\x67\x54\xb8\xd4\xa2\x9e\x66\xbe\x50\x99\x2e\x62\x97\x71\x46\x6b\x66\x7b\xf2\x18\x9d\x49\x55\x74\x63\x3d\xe3\x11\xba\x7c\xbb\x9c\x1e\x5f\xd7\xe3\x7e\xa8\xa6\xaa\x0a\x50\x8e\x68\x01\xaf\x8d\x5c\xc1\x96\x05\xff\xfc\x97\x5f\x3f\xc8\x51\x7f\xd7\x08\xe9\x07\xff\xed\x23\x64\xb4\xa2\x63\x5e\x70\x23\xa7\x3f\xc4\xfb\x9d\xaf\xf1\x8d\x94\xfa\x1b\x1f\x2d\xfc\x10\x23\x55\x35\x9f\xf3\x82\x4d\xd9\xa6\x91\xdb\xf7\x7a\x3b\xa0\x45\x8e\xdc\x10\x97\x2a\xa3\x45\x4c\x52\xd9\x7b\xce\x44\x66\xe0\x17\xfd\x20\x1b\x92\x76\x73\xdf\xe3\xe5\x9b\xdf\xe3\x68\x6d\x33\x36\x7c\x19\x11\x74\x8c\x0f\x36\xc6\x85\x16\xd2\x3d\x29\x8f\x35\x25\xb4\xdd\x71\xc4\x94\x74\x3a\x62\x34\x75\xcd\x84\x36\xa6\x6c\x03\x45\x9c\xcc\x82\x02\xa2\x96\x08\x0a\x1c\x28\x91\x09\xfd\xe0\xcf\xbc\x71\x60\x8b\xe5\x4a\xba\x30\x8a\x53\xd0\xb9\x78\xd2\x40\x95\x26\x68\xab\xd8\xa8\x48\x0a\x43\x79\x8c\x33\x6a\x0d\x0a\xb6\xac\x98\x68\x8f\xf0\xa9\xf5\xfb\x0c\xcd\xd1\xee\xe0\x62\xa3\x29\x75\x52\xe6\x7f\xaa\x0a\xaa\x27\xb2\x2e\x87\xce\x8f\x30\xec\x98\x59\x11\x64\x9d\x43\x01\x89\x72\xce\x56\x2c\x98\xc6\xa6\x7e\x22\x2f\x58\x60\x42\xf9\x0d\x10\x39\x76\xce\x20\x8d\xa8\x59\x26\xa7\x02\xd0\x2e\xed\xa7\x60\x1c\xf8\xa0\x1a\x55\xc6\x7c\x21\xa2\x29\x8a\xcd\x73\x26\xe3\x0c\x2f\x39\x67\xf5\x8c\xd1\x0d\x6f\x61\xda\x01\x7f\x6d\xc7\x24\x35\xab\x6a\xa6\x60\x41\x11\xe3\x17\xdd\x29\x9e\x28\x42\x95\x92\x19\x40\x82\x61\x76\xae\x2b\xd4\xa7\x60\x16\x41\xd3\x74\x32\xe5\x73\x26\x5c\x5b\xeb\xf3\x82\x6e\x5e\xa0\x1e\x84\x35\x7d\xef\xf0\x46\x4b\x9f\xb9\x4d\xa8\x0e\xba\xc5\x42\xc9\x8f\xcd\x48\x0c\x47\x0d\xbe\x62\x4e\x69\x2d\x21\x8f\x97\x5c\x6d\x9a\xd9\xfd\x5e\xef\x85\x74\x66\x41\xc7\x05\xcb\x07\xed\x72\x81\x31\x13\xb4\x1e\xc6\x96\x7b\x24\x83\x12\x07\xe7\x70\x8b\x58\x9e\xf7\x21\xc8\x56\xa6\x19\x31\xb0\x6e\x50\xeb\x88\xf1\x7d\x37\xdb\x2d\x2e\x8c\x9a\xb1\xa9\xca\x6d\x4c\x5c\x63\xef\x75\xe8\xe2\x9d\xe6\xfe\x80\xe6\x04\x6e\xa0\xd6\x6d\x3b\x92\xb9\xb1\xd8\x07\xed\x11\x74\x1b\xee\x4a\xdc\x5c\xf5\xfd\x86\xf4\x04\x5c\x10\xcd\xff\xba\x66\xaa\x92\x22\x37\xa7\x35\x24\x72\x10\xc4\x43\xb9\xee\xd4\xf3\x81\x09\xda\xf2\x0b\xec\xb4\xf3\x6f\x56\x6f\x9c\xd3\xb7\xc6\xf5\x34\xe5\xfa\xe4\xee\xef\xe0\x77\x62\x62\x46\x45\x86\xde\xc7\xd3\x3b\x56\xa9\x53\xc5\xa7\xe8\x66\xfa\xdb\xdf\xff\x0e\x3e\x27\xb7\x39\xa7\x6f\x2e\xcf\x2e\x5e\x5d\x9e\x94\x9b\xa9\x65\x5b\x75\x40\x55\x54\x6b\x56\x8b\x2f\xc9\x7f\x1d\xfd\xf2\xd9\xef\xc3\xe3\xaf\x8f\x8e\x7e\x7e\x36\xfc\xcf\x5f\x3f\x3b\xfa\xe5\x04\xfe\xf1\x97\xe3\xaf\x8f\x7f\x77\x3f\x7c\x76\x7c\x7c\x74\xf4\xf3\x77\xaf\x5e\xdc\x8e\x2e\x7f\xe5\xc7\xbf\xff\x2c\x9a\xf2\x0e\x7f\xfa\xfd\xe8\x67\x76\xf9\xeb\x7b\xbe\xe4\xf8\xf8\xeb\x3f\x6f\x48\x68\x24\x1a\x4e\x2a\x02\x4e\x12\xea\x4d\x8f\x48\x37\x55\xcd\x58\x09\x12\x24\xa6\x9c\x27\x4d\x00\x8d\x96\xc6\x76\x9a\x96\xfd\xc9\xc8\x15\x47\x9e\x98\x1a\x51\xa3\x50\xfc\x14\xf2\x1e\x4a\x2a\xb9\x34\x8a\xf3\xa6\xd7\xf2\x35\x28\x43\xe4\x9a\xcd\x59\x3d\x70\x34\xbc\x34\xaf\x1c\x45\xbe\x31\x0c\x77\xae\x7b\x5f\x24\x66\x45\xe4\x01\x71\xeb\xf2\x94\x3b\x79\x0b\x10\x11\x76\xb6\xc0\xb8\x4f\xc8\x0f\xb4\xe6\xb2\x51\x56\x43\x86\x6e\xa0\x52\x80\x92\x81\x25\x48\x5e\xd8\x43\x90\x01\x93\xb1\x36\x65\x32\x6e\x48\x8f\xf9\x95\xdb\xfa\x6d\xbf\xf4\x67\x5e\x48\x9e\xaf\x97\xda\x7c\x53\x13\xb1\xaa\xd9\xdc\x4d\xa3\x76\x45\xbc\x4c\x23\xe0\xad\x9f\x15\x5a\x04\x6b\x45\xb4\x53\x68\x36\x75\x16\x04\x4b\x06\x83\xba\x39\x82\x40\xbb\x8e\x40\x86\x07\x04\x73\x3e\x75\xa5\xf8\xb0\x6f\xe8\x60\x0e\x7e\x1b\x77\xcd\xe2\x99\x63\x2c\xce\x45\xb5\xbc\x1a\x4f\x79\xfe\xbb\x0d\x72\xc3\xbe\xbc\x0e\x53\xc9\x2f\x23\x39\xc0\x0b\x01\xa2\x7e\x98\xd5\x5c\xf3\x8c\x16\x07\x11\x1d\x96\xdd\x8b\xb2\xa2\x31\x06\x57\xf8\xae\x9a\x11\x7d\x2f\x91\x26\x5a\x90\x3b\xb6\xb8\x97\x75\xee\xb4\x3f\x47\x5f\xc4\x8d\x83\x83\xa1\xb4\x9b\x0e\x67\x96\x25\x63\x54\xa2\x2e\x59\x4d\xc6\xcc\x65\x96\x2c\x7d\x79\x71\x42\xce\xc4\x02\x15\xaf\x08\xfb\xdf\xc7\x08\x82\x3e\x47\xa0\xdd\xa2\x25\xd2\xb9\x0d\x56\xeb\x71\xb4\x51\x1d\xd5\x39\x61\x7d\xca\x83\x31\x79\x3c\xe3\x71\x7a\xab\xcb\x79\x90\xb5\xc5\x8b\x02\x86\x54\x23\xba\x96\xdc\x5c\x8b\x35\x2f\x7b\x12\x69\x61\xb4\x7e\x2e\x98\x52\x2f\xcc\x81\xdd\xde\x9d\xa1\xa0\x80\x5b\x5a\x00\x61\xaa\xad\xcb\x66\x86\x33\x61\x22\xb0\x51\x09\x64\xde\x7e\x73\xd3\x2d\x3d\x83\x3f\x07\xc8\x07\x9a\x2f\x10\xfb\xcd\x0c\xcd\x75\xb7\xed\x3f\x04\xf5\xcc\x37\xce\xae\x37\x0d\x28\xd9\xe2\x72\x54\xa1\x55\xb7\xb7\x39\x9a\xd7\xdd\x59\x82\x2d\x66\x0b\x82\xd9\xbf\x1a\x5a\x40\xd6\xd4\x6d\xdd\xb0\x83\xa7\x30\x38\x98\xbe\x97\xf5\xdd\xe9\x5f\xff\xfe\x0c\x6c\x0e\x4f\xdd\x70\xba\xb1\x88\x8a\xad\x22\x89\xaa\x1f\x59\x6a\xec\x97\xbf\x09\x0f\xb2\xdb\x4b\xe7\xd0\xb0\xf9\x70\x80\x07\x0a\x27\xc0\x6f\x50\x54\x5c\x3d\xaa\x5a\x24\xbe\x4e\x64\xd8\x92\x7b\xbb\xa8\x36\x57\x92\xe2\x4b\x3c\x3a\xe3\x26\x27\xb3\x9d\x87\x6f\xc3\x5d\x51\xb8\x25\x7e\x9c\x20\x4c\x7f\xa8\x82\x5f\x43\x6d\x2a\x70\x73\x48\x1f\x01\x09\xb3\xa8\x12\xea\x70\x23\x18\x25\x7a\xc5\xa0\xc6\xed\x49\x19\xe5\x9b\xce\xc8\x56\xfc\x39\x59\xbe\xf4\xa1\xc7\x8b\xb5\x15\xd2\x9b\xea\x14\x88\x99\x03\x6d\x5d\x7c\x8f\x00\xd7\x66\x9f\x2b\x6c\xf8\x85\x65\xf4\x80\x98\x83\x5a\xae\x5b\x9a\x4d\x15\xda\xb6\x6a\x32\x67\x84\xce\x29\x2f\x20\x7d\x15\xfc\x3f\x52\x75\xb2\x37\x70\xb2\x99\x14\xaa\x29\x81\xa2\x4d\xe3\x5f\xe3\x85\x55\x01\x36\xcd\x66\xf0\xd8\x89\x46\x50\x54\xb3\xb7\xa3\x27\x6e\xae\x50\x5d\x2c\x04\x2d\x79\xe6\xb6\xf1\x0c\xf7\x0d\x70\x57\x3a\x68\x8b\x51\x64\xfb\xfc\x0b\x5e\x96\x8d\x36\x8b\x1b\xa3\x53\x6c\x83\xa1\x47\x44\x6b\x40\x06\x04\x97\x21\x4c\x83\x66\x0f\x34\xd3\xc5\x02\x02\x21\xdd\x2f\xe9\x59\x2d\x9b\xe9\x8c\x50\x02\x3f\xdf\xc0\x47\x9b\xb3\x95\x2b\x4d\x68\x9e\x2b\x42\x3d\x8a\x37\xd7\xa8\x78\x36\x82\xff\xab\x61\xc5\x82\xf0\x9c\x09\xdd\x26\x29\x75\xc9\x08\xda\xbe\x8f\x36\xcf\x50\x0a\x12\x7e\x2d\xc0\x14\xf4\x27\xb7\xd0\xd7\xd6\x9f\xfa\xc8\xe2\xa0\xfb\x13\xd4\x64\xa3\xab\x46\xa8\xc9\x5b\x92\x89\x11\x35\x8f\x29\xa2\x30\xb6\xba\xa9\x8f\x74\x6e\x08\x43\xae\x3f\x48\xbc\x4d\x7f\x25\xd9\xf2\x51\x8a\x48\x76\xc3\xa7\xad\xbf\x32\xb2\x84\x5c\x5c\xdf\xfc\xf6\xf2\xec\x9f\x97\x2f\x9f\x1c\x82\x04\x67\x96\xbc\xee\x78\xad\x83\xa2\xe2\x7b\x30\xce\x02\xcf\x53\xf7\x7a\xc4\xcf\x33\xba\x90\x38\xb5\x12\xb7\xa3\x9f\x6c\xee\xff\x68\x9f\xbe\x8a\x69\xde\x2c\x13\xb4\x1c\x48\xa7\x4b\x2c\xc9\xda\xec\x56\x03\x54\x29\x4d\x26\x85\x4b\xd5\xc2\xc6\x84\x98\x4d\x9e\x86\x18\x9c\x50\xe5\xd4\xd9\x9a\x5b\x56\x56\x05\xd5\x11\x59\xff\xed\xf3\x41\xb6\x28\x24\xec\x1d\x5b\xe5\xbe\x1a\x3d\xf0\xea\x56\x3f\xb6\x65\xf1\x4d\xb4\x01\x38\xce\x12\xda\xa9\x45\x81\x32\x60\x0c\x8b\x52\x22\xd8\x7d\x77\x6e\xb6\x52\x05\xfe\x22\x7a\xec\x31\x23\x63\xd9\x88\x1c\x65\xaf\x9d\x0b\x7a\xa6\x7d\x6d\x03\x74\xec\x2e\x98\x76\x7e\xa5\x0e\x15\xd1\x23\x5b\xb4\x5a\x25\xd1\x2b\x05\xef\x47\x2d\x1d\x7a\x01\x98\x95\xb6\x3a\x3e\xb2\x44\xf3\x9b\x01\xa1\x85\x14\x53\x8b\xbc\x15\x3d\xf4\x94\x09\x56\x83\x9b\xc6\xfb\xfa\x07\x2b\x0b\x0f\x6d\xa5\xa8\x15\x66\x48\x8f\x4d\xfd\xef\xe7\x14\x87\xdb\x67\xc6\xad\x59\x26\xeb\x1c\xbd\x2f\x66\x13\xd0\xd1\x72\xd2\xb9\x92\x37\xf0\x3b\xa6\xd2\x4e\xdb\x5a\x7d\x1b\x16\x5b\x48\x40\xaf\x9d\x06\x2e\x2d\x30\x79\x50\x31\x8b\x1e\x72\x29\xba\xdd\xe1\xa5\x01\x54\x53\x2d\x0b\x52\x15\x54\x30\x0b\x9d\xeb\x7d\xa6\xbd\xad\xf9\x93\x33\xd6\x4e\xfc\xb3\xe0\x4a\x43\xa5\xc2\x1d\x5b\x6c\x2c\x3b\x23\xd4\xc8\xd5\xc1\x71\x1e\x25\xdd\x24\x63\xcf\x42\xce\x3e\x7d\xd0\xf5\x0d\x0e\x4c\xaa\x36\xc8\xba\x02\x87\xe9\xab\x5e\x23\xa4\xa6\x0d\xaf\x9e\x01\x60\xf6\x80\xbc\x16\xdf\x20\x90\xe1\x00\x23\xae\x27\xe4\x4a\x10\x25\x4b\x0b\xba\xf8\xa0\xd5\x80\x40\xcd\x3a\x25\xaa\x19\x2b\xa6\x31\x96\x67\xcc\x7f\x9b\x9b\x65\x13\xdc\x2a\x56\x97\x5c\x47\x54\xe7\x05\x0d\xe8\x90\xa8\x0f\x5c\x42\xf4\x36\x40\xf9\xd3\x3f\xd9\x7d\x1f\x56\x9b\x67\xb8\xc7\x3a\xae\x82\xb4\x97\xa7\x8e\x8b\xbd\x59\x1a\xbb\xe3\xf4\xeb\x24\x0d\x75\x35\x02\xa8\xf4\x42\xbf\x35\x99\xd6\xb2\xa9\x1c\x5b\x6f\xab\xab\x8d\x40\xd9\xd4\x50\x95\x66\x31\x02\x81\x8c\x11\x9e\x2e\x21\x5e\x32\x82\xa3\x91\xb5\x7a\x50\x6e\xec\x2b\xa5\xda\x20\x10\x62\x36\x63\x9a\x57\xdd\x88\x88\xe8\x12\xa6\x1a\xc9\x1a\x21\x31\xf1\xcd\x07\x05\x9b\xd2\x6c\x71\xd0\xa5\x6a\x4d\x2d\xad\x75\x4a\xf1\xb2\x2a\x78\xc6\x35\x52\xe7\xd0\x33\x37\xa4\x05\x21\x39\xc1\xb3\x88\xfe\x56\x74\x5d\x28\x3b\x7d\x17\xdd\x72\x10\xed\x98\x65\xb9\x31\xe0\x52\x74\x42\xd4\x5f\xff\xfe\xd7\xa1\xcb\x33\x85\x69\x3e\xc5\xbd\xf1\xf5\xa9\xdb\x0d\x26\x77\x4e\x9b\xd1\xe9\xb8\xaa\xe0\x64\x42\x00\xb4\x8d\x2e\x79\x72\xfb\x8b\x72\xae\x1f\xd2\x1d\x86\xc8\x01\xd3\x76\x83\x8b\xe9\x93\x07\x2a\x6f\xba\x43\xdb\x7b\x27\x2b\x6a\x34\x58\x07\x9a\x69\x85\x15\xd6\x25\x07\x1b\x68\x17\x11\x50\x24\xdb\x39\xc4\x0a\x57\x73\x34\x56\xa9\x31\xdb\x17\x70\x10\xbf\x75\x4a\xd3\x85\xe3\xa8\xdd\x49\x40\x83\x4d\xcd\x1c\x06\xd2\xa6\x59\x9f\xbe\x72\xdb\xb3\x40\xaa\x8d\xa9\xb5\x5c\x45\xce\xe2\x6c\xb8\xe5\x05\xcf\xcc\x72\x1b\x1d\xc1\x26\x88\x52\x8d\x31\x3c\x50\x64\x6d\x2a\x30\x76\x21\x00\x85\xbf\x94\x73\x28\x1a\x36\x4a\x85\xd1\x78\xef\x69\x9d\x47\xe8\xf6\xcb\x4d\x93\xac\x3b\xde\x26\x0e\x39\x0d\x7b\x24\xf3\x96\x5c\x1f\x83\x4c\x68\x95\xb4\xd5\x20\x6a\x77\xe5\x61\xf6\x6d\xea\x37\x08\xed\x11\xd6\x67\x4f\x1b\x5a\xe7\x10\x35\x6f\xcf\xe3\xde\x6f\xbc\xee\xd9\xba\xdf\xd8\xe6\xc6\x05\xcc\x27\xbe\x7f\xd7\x25\x35\x3a\x58\xf7\x4d\xe8\x27\x86\x2c\x86\x25\xbb\x1e\xf2\xe0\x9e\xd2\x63\xfc\x09\xd8\x85\x4b\xe5\x60\x4f\x2a\xe7\xba\x43\x93\x99\x2c\x72\x50\x94\x87\x05\x9b\xb3\xc2\x93\x66\x98\x7d\xcd\xc7\x8d\xb6\x65\x35\x99\x2c\xcb\x6e\xf7\x19\xcc\x86\xdc\xd8\xd0\x6a\xdb\x74\x84\x19\xb5\x20\xd9\x4e\x0c\x79\x0c\x4e\x46\x38\x4b\x30\x5f\x9d\x42\x62\x45\xb0\x9c\x10\x66\x8e\x69\xc4\xf1\x8b\xe6\x48\xf1\x0c\xc2\x96\x3d\x6f\xa3\xb8\xed\xcc\xe7\x07\x86\xb5\xbe\x68\x6f\xa1\x22\x43\xab\xaa\xe0\x88\x60\xbb\xe4\x23\x00\xe4\xd5\x48\x9f\x3a\xe0\x29\x58\xb4\x2c\xb3\xe2\x36\xad\x00\xb8\xd4\x77\xcd\x98\x15\x58\x03\x82\x2e\x33\xac\x52\xb9\x37\x83\xce\x78\x85\xcc\x8c\x6a\xfb\xe7\x31\xbc\x05\x1c\xa3\xe6\x85\x61\x43\xc9\x2f\xa3\x3c\x7f\xcf\xd1\xb1\x2a\xef\xa1\x18\xea\xc5\xd5\x85\xd7\x98\xcd\x6b\xbf\xb9\x89\xa9\xc6\x36\xcf\xe7\xf8\x5e\xc5\xf4\x94\xe7\x64\x8c\x58\x3b\x46\xf1\x39\x12\xec\x1e\x01\x83\xad\x03\xdb\x27\x95\xcd\x1d\x28\x2e\x8e\xef\xe7\x67\x89\x38\x8e\xa0\xe2\x0b\xeb\x36\x66\xb5\xcb\x61\x1e\x73\x0b\xcd\xf9\xfa\xcd\xa1\xab\x04\xbb\x1f\xd6\xf7\xc3\xe1\x70\x18\xb5\x80\xce\x04\x1e\x74\xf6\xde\x2b\x95\xa5\xcc\xf9\x64\xb1\x74\x02\x0c\xc7\x69\x69\x82\xeb\x4e\xc5\xc2\x2e\x40\xcc\x71\xbc\x96\x90\x09\x4b\x75\x98\x60\x9d\x79\x4c\x28\xb3\xee\x90\x26\x08\xb5\xbb\x52\x9d\x08\x1b\x1f\x89\x2e\xe2\x4c\x2b\x1c\x49\xe9\x3d\xb9\x06\x63\x61\x1b\x8c\x67\x0d\x19\x3e\xab\x69\xcc\x66\x74\xce\x25\x34\xa3\x04\x0e\x00\xb8\xcf\x8f\xec\xbe\xd3\x6d\xa2\xb9\x81\xcd\x70\xc2\x94\x65\xf6\x50\x41\x93\x30\x1b\x40\x1f\x49\x08\x9c\x74\x6b\x12\xd1\xaa\xa8\x2a\x40\xe2\x8b\x18\xb0\xc3\xf6\xac\x4b\x0b\x6b\x85\xdd\xaa\x90\x31\x35\x44\xf8\x29\x1f\x2d\x1d\xf8\x28\xf8\xbc\x2b\x7b\xab\x40\x4b\x13\x92\xb0\xc9\x84\x65\x80\xeb\xc4\xaa\x19\x2b\x59\x4d\x8b\x2e\x69\xb6\x13\xd4\x97\x46\xe8\xd7\xe6\x82\x62\x45\x5f\x49\x37\x86\x81\x20\x36\xab\x0c\xc4\x78\xce\xa3\x50\xba\x7f\xa0\x05\xef\x94\x52\x1f\xbc\x16\x6f\xa4\xd4\xaf\xb8\x02\x2f\x1d\x64\xcf\x93\x03\x74\xef\x1e\x9c\xac\x71\x69\xb8\xcf\x52\xe0\x77\xb7\xc4\x28\xa2\x02\xcf\x2d\x8a\xc0\x36\x2e\xb8\x91\x1b\x46\x1c\x7a\x87\xab\x31\x9b\x75\xbd\xa8\x24\x17\x7a\xb5\x9b\x42\x42\x43\xeb\xef\x6d\xdf\x70\x70\x4b\x3a\x45\x30\xa5\x45\xf0\x2b\xba\xf0\xe1\x53\x5b\xbb\xbb\xa4\x17\xa3\xdb\xd8\x7e\x06\x6d\x9b\x96\x15\xe7\xcd\x4b\x39\x08\xe6\xaf\x2d\xbd\x68\x10\x74\xc1\xee\xa4\x91\x2f\x0f\xa8\xe9\x1d\x53\xa4\xaa\x59\xc6\x72\x26\x36\x06\xa8\x21\x28\x56\xf0\x6c\x27\xc1\xe9\xff\x81\x64\x29\xdc\xb0\x6b\x09\x7c\x68\x1b\x77\xec\x2a\x28\x32\xb2\xcd\x48\xda\x1b\x05\x26\xb9\xb9\x7a\x14\x52\x12\xa5\x18\xd6\x52\x82\x43\x3f\x6a\x5b\xaf\x1c\x9e\xf4\x8a\x9a\x36\x37\x9c\xd9\xf5\x37\x03\x0c\x4e\x42\xdb\x38\x81\xb1\xde\x84\x6a\x6a\xe6\xf0\x1a\x63\xfc\x20\x92\xa1\x87\xd3\x4e\xe7\xfb\xab\x0b\xf2\x8c\x1c\x01\x92\xac\x6f\x94\xe6\x13\x92\x97\x51\x41\x01\xa9\xd2\xbc\x22\x72\xda\x3e\x42\x63\x7b\x7a\x0a\x89\xa2\xd1\xce\xdb\xe8\x20\x4e\xe7\xae\x58\x0d\x15\x50\x51\xb2\xe5\x93\x60\x3b\xb1\xd7\x37\x0e\xed\xdb\xa3\xf0\x6c\x4b\xc2\x7d\xff\x24\x12\x2e\x74\x85\x98\xfb\xdb\xdd\x12\xbc\x72\x25\xd3\x14\x5a\xec\xa2\xe4\x73\x5f\xf8\xc3\x1e\xc4\xbd\xfc\x7b\xbf\x27\x45\xfe\x75\x91\xdb\xb6\x75\x07\x6f\x2e\x81\x0a\x97\x4c\x62\xdd\x3b\xe8\xb7\xca\x57\xfd\x56\xf1\x52\xe0\x1d\xb0\xd7\x2e\xef\xce\xf7\x25\xac\xa9\xc8\x65\xb9\x42\x9f\x39\x66\x2c\xae\x33\x78\x7b\x30\x37\xbd\xa5\x31\x86\xf1\x23\xf7\x3a\xe1\x96\xc6\x38\xeb\x96\xee\xf5\xc7\x7d\x4b\x23\x53\xc3\xd3\x12\xc3\xc1\x75\xdf\x43\x6f\xae\x97\x10\x02\xe0\xca\x9f\x68\x8c\x09\x00\x7a\xf3\x8a\xb3\x38\xb9\x4b\x64\x72\xd2\x75\x2d\x8b\xc8\xec\xea\xce\xac\xdf\xc8\xc2\xc2\xa4\xbb\x69\x9b\x17\xef\xec\xac\x75\x64\x95\xe6\x72\xf7\x9d\x45\xb5\x34\x6b\x88\xbb\xec\xea\xac\x9b\x28\x1d\x90\x2c\xcf\xda\xa8\x92\xdd\x59\x83\xba\xb5\x8b\xb3\xee\x62\x9a\x6e\x4b\xf6\x5a\x2a\x88\x44\x15\xc0\x2a\xa8\x2b\x5d\x62\x5b\x74\xbd\xc8\x78\xd1\xc7\xc5\xae\x53\xda\x01\x22\x28\xd4\x53\x4b\x08\x99\xd1\x02\xb0\xb3\x63\x8f\x13\xe9\xad\x24\x65\x99\x96\x00\x4a\x85\x9a\x69\xc2\xef\x02\x90\x37\x8a\x4d\xc5\x65\x9b\x35\xba\x94\x21\x1a\x9b\x9a\x8e\x80\x46\x38\x9e\xab\x83\x33\x7a\x48\x8b\x6b\x17\x8e\xa9\x25\x74\x59\x89\x1d\xec\x95\x2f\xb4\x33\xab\xc8\x30\x9f\xbf\xa2\x7a\x36\x20\x35\x2b\xa8\xe6\x73\x57\x2b\x40\xee\xd0\xf9\x72\xd8\x81\xd8\x73\x17\xd1\x11\xec\x4a\x88\x53\xe9\x01\xed\x71\x82\xcc\x9f\x2b\x72\xf0\xd2\xed\xce\xc1\x09\x7e\xe7\xfa\xf5\xad\xfb\x1e\xe4\x91\x3b\x74\x97\xe8\xda\xfc\x5d\x91\x80\xd1\x07\x18\xd7\xca\x1f\x5a\x8c\xf0\xdc\x71\x91\x13\x39\x59\xd9\x27\x8f\x72\x89\xe6\x4a\xec\x76\x61\x74\xc4\x71\x61\x5a\xb3\xb8\x68\xb6\x79\xfc\x0e\x93\xe1\x13\x5f\x38\x9b\xed\xec\x92\xf5\x87\x8f\x98\x59\xce\xc5\xef\x48\xeb\x67\xf0\xef\x05\xdc\x26\x33\xc7\x21\x11\x72\xcd\xdb\x93\xb6\x28\x45\xd2\xaf\xa0\xb0\x6f\x27\x53\xc4\xa5\xb9\x42\x72\x88\x0a\x0d\x6c\x40\x7e\xe2\x35\xc0\x3c\x81\x93\x0b\x1c\x62\x5c\x60\x12\x8e\xdf\xc1\x01\x9c\x9e\x3c\x0a\x74\x85\x60\xde\xc6\x72\xb3\xb2\xaa\xe6\x25\xad\x17\xe4\xc5\xd5\x85\x6d\x8b\x61\x23\xa8\x47\x61\x02\xee\x31\x66\x86\x62\x56\x4b\xc9\xca\x31\x86\x55\x63\xc2\x98\x2b\xe8\xa2\x9d\xe6\x53\xbe\x85\x4d\xc3\xf3\xc7\x3d\x80\xcb\xee\x84\x08\x32\x84\x0c\xf1\x8d\xdd\x8e\xd4\x80\x7a\x6c\x9d\x1e\x62\x11\xba\x0b\x5a\x05\x6a\x47\x56\x01\xa8\x55\xda\xb0\x3f\x8c\x44\xf3\x39\x8b\x59\x09\x36\x67\xc2\x42\x6d\x2d\xe0\x9d\x46\x25\xe4\x22\x2b\x9a\xdc\x11\xc8\x15\x9c\xdd\x8f\x48\xef\x8c\xeb\xc2\x1d\xdd\x83\x3b\xcd\x83\x98\xe8\x43\xc4\xd6\x1c\xdb\x60\x69\x37\x38\x34\x24\x39\x12\xea\xf9\x9b\xaf\x42\xce\x1d\x71\x58\xb9\x1a\xb4\xa7\x3a\x21\x23\x8f\x44\xda\x08\x8f\xf4\x1e\x41\x83\x1b\xe1\x68\xd9\x64\x72\xe2\xee\xd8\xf6\xbe\x73\x21\xae\x82\x36\x22\x9b\xed\xcf\xf2\x63\x4f\x17\xf3\x01\x56\xd7\x27\x16\x51\x72\xc7\x6a\xc1\x0a\x52\xd1\x9a\x96\x4c\x1b\x2d\xd5\xf9\x4f\xa3\xaf\x4d\x34\xda\x43\x5a\xd3\xf8\x84\x86\xef\xc3\x28\x5c\x6d\xd2\x03\x40\x45\x4a\x7b\xe8\xce\xc6\xb6\x8d\xa0\x2d\x49\xd0\x15\x35\x6e\x1b\x49\x1f\xf8\x0e\xb0\xa2\xbd\x4c\xed\x07\xf0\xa2\xef\xc6\xdc\xba\x5d\xc0\xb6\xe5\x64\xfa\x11\xa9\x68\x5b\x50\xba\xe4\xf2\x0f\x1f\xe4\x71\x16\x95\xad\x87\xa6\x1d\xe5\x73\x39\x36\x12\x16\x68\x46\x12\xf0\x8e\x90\xea\x76\x23\xf5\xf1\x22\x04\xda\x9e\x7c\x54\x31\x93\x69\xa9\xe8\x79\xcd\x00\x66\x89\x16\x37\x15\xcb\xb6\xe9\x52\x78\xf1\xea\xe6\xac\x4b\x0d\x08\x66\x04\x30\x9a\x31\xf8\x3c\x00\x9a\xbe\x67\xe3\x99\x94\x77\x91\x83\x1d\xad\x69\xf8\x12\x94\xb5\x28\x3e\x55\xa7\x96\x31\x0c\xcd\x32\x1d\x13\x2e\x0a\x90\xaf\x4e\x81\x01\x68\x6c\x54\xfc\x13\x26\x4c\x32\x3f\x63\x38\x50\xb6\x02\xdb\x2a\x4a\xab\x4b\x72\x9d\x54\x70\x94\x2c\x03\x56\x4f\x4c\x3c\xbc\x4f\xe7\xd4\x3c\x32\xd3\x35\x2d\x89\xd6\xae\x1a\xba\xe4\xb7\xb2\x24\xd6\x8b\x6b\xcc\xbd\x6d\xde\x9e\x6f\x5b\x32\x48\x6e\xb4\xbe\x12\x4e\x2b\x9f\x84\xfc\x3c\x70\xf4\xf8\xa4\xb9\x43\xf3\x97\xc4\xfe\xe9\x61\x6a\xb0\x87\x90\xb3\xa2\x40\xc1\x3e\x72\xd0\xa6\x2e\x3c\xd2\xd6\xcf\x79\x30\x24\x6f\x15\x77\xe8\x8f\xd5\xdc\xcc\x73\xe4\x3a\x36\xeb\x10\xc4\xd3\x56\xed\x95\xfc\xc1\xd0\x16\x8e\x15\x82\x21\x03\x84\x8d\x18\xae\xff\x38\xba\x9d\xfb\x55\xeb\x0f\x1a\x98\xfd\x08\x5f\x6f\xce\x77\xdd\xc0\x82\x08\xf8\xe0\x1a\x61\x8a\x71\xad\xc2\xcc\x07\x2d\xe1\x9b\x29\x47\x3c\x2e\xfd\x8c\x84\x29\x68\x3d\xdd\xf6\xe8\x53\x0e\xe9\x68\x96\x0e\x23\xff\x9d\xd6\xf4\xe1\xd3\xd3\xc8\x52\x8a\x1a\xb8\x7e\x3e\x7c\x9a\x1a\x59\x9f\xaa\xb6\xaa\x22\x9d\x7c\x98\x64\x35\xb2\xed\xcc\x49\x92\x00\xa5\xc0\xea\x39\xcf\xd8\x59\x96\xc9\x46\x3c\x69\x85\xe9\x05\x33\x53\xa6\x9a\xe5\x37\x1d\x1a\x30\xec\x9e\xc3\xa7\x58\x6b\x4e\x0b\x4e\xb1\x29\x78\xf7\x9b\x31\x6d\x2e\xda\x51\x21\xc8\xbf\x34\x7f\x7b\x65\x94\x66\x34\xaa\x5a\x34\x71\xf9\x9f\x1a\x5c\x64\x75\x39\xd7\x29\x13\x4b\xdb\x63\x23\xfb\xcb\xf8\x39\x1b\x0e\xfd\x7e\x38\x4a\x9a\xaa\xbb\xb6\x0f\x3b\x03\x50\x7a\xcf\xa9\x82\xdf\xdb\x65\x1c\x52\xa4\x31\xa6\x37\x7b\xc4\xd6\x69\x23\x8c\xcc\x4a\x9d\xa9\x6f\xfe\xef\x8b\xeb\x27\x86\x85\x71\x32\xd1\xc2\xa3\xcf\x2c\x2d\xde\xf8\x0c\xdb\xae\x85\xcd\x47\x0c\xa9\x03\x52\x53\x8c\xcd\xce\x28\x4a\x84\x82\x51\x74\x78\x92\xa3\x00\xe4\x67\x63\x79\x7e\x25\x48\x9b\xe3\x88\x3a\xc1\x00\xcf\x48\xc9\xa8\x50\x41\x6f\x1c\x06\x84\xb8\xc0\x81\xa7\x1e\x2d\x49\x7b\xf2\xac\x93\xee\xc8\x85\x17\xbb\xdf\x50\xba\x6e\x32\x4d\x1a\xad\xcc\xef\x63\x48\x75\x92\xf1\x3d\x88\xad\xd9\x94\x2b\x5d\xdb\x86\x46\x66\xf8\x96\x64\xeb\x0e\xf6\x5f\xb9\x63\x0b\xf2\xed\x77\x97\x3f\xfd\xf6\xf2\xf5\xf9\xd9\xcb\xdf\x5e\x9d\x9d\x7f\x7b\x75\x7d\xf9\xcb\x2f\x37\x3f\xdd\xdc\x5e\xbe\xfa\xe5\x97\x73\x6c\x0d\x6a\x7b\x10\xdd\x30\xfd\xcb\x2f\xf6\x8e\xa9\x5f\x7e\xb9\xcd\x2a\x5e\xfd\xf2\xcb\xc8\x39\x26\x41\x90\x9a\xa5\x8a\x80\x87\xc1\xf6\x06\xbe\x68\x02\x14\x3c\xdc\x7e\x98\xe5\x8c\xaa\xb6\xfe\x2f\x01\x49\x0d\xca\x21\x62\xd8\xe5\xe6\xca\xd6\xda\x16\xdc\x4f\xca\x32\x67\x10\x5c\x23\x8a\x8b\x69\xc1\x7c\x0c\xab\x05\x2c\x1d\x33\x7d\xcf\x6c\x23\x91\x65\xdd\x2a\xbe\x54\xbe\x45\x0b\xb5\xd5\xdf\x1d\x88\x3e\x9b\x39\x60\xf1\xf2\xe7\x9c\xdd\x63\xa7\x45\x3e\x15\xb4\x70\x34\x32\xdb\x9e\x0a\x93\x32\xda\xbf\xdf\x90\x92\x10\xa6\xb5\x92\xf9\xc0\xc1\x06\x2d\xc5\x7d\x57\x62\xbe\x1d\x84\x34\xaa\x0c\x6d\x2c\x27\xa3\xab\x0b\xf2\x7c\xd3\xc5\xf8\x16\x7b\xfb\xc3\xc8\x37\xeb\x0e\x84\xf7\x44\x19\x1d\x0f\x15\xc2\x64\xf8\x89\xa7\x3e\xe8\xcd\x38\x97\x25\xe5\x62\xbb\x60\x63\x93\xa6\x28\x16\xe4\x5f\x0d\x2d\x50\x7d\x1d\xc9\x7c\x55\xd2\x1c\x7c\xe5\x7e\xf5\x8f\x93\xaf\x3c\xe1\xff\x38\xf9\xca\xa1\xcc\xc2\xa6\xfc\xe3\x44\xcd\xb3\x93\xaf\x6c\x83\x2a\x62\xbf\x74\xd0\x33\x42\x99\xe7\x73\xd4\x8e\x80\x28\xb7\x60\xe8\x3e\x89\x46\x87\x5e\x05\x48\xb9\x7a\x51\xd3\x8c\x8d\x58\xcd\xc1\x36\x90\x22\x7f\x52\xa4\x32\x77\x82\x49\x6e\x5b\x2b\x9b\x3b\xa9\x90\x0e\xbf\x66\x82\xb1\x1c\x4d\x35\x4b\x36\x23\x53\x43\x35\xec\xfb\x09\x58\x55\x00\x1d\x9c\xd5\x8c\x62\x39\xbc\xc5\x11\x76\x4d\x64\x37\xdd\x3e\x0c\x6a\xb8\x2c\x3a\x21\xc5\x50\xb0\x29\x66\xb5\xd9\xb0\x33\x22\x4d\xa0\x98\xc5\xf6\x59\x3e\x83\x4a\x69\x59\x11\x5e\x96\x2c\x37\x86\x41\xb1\x20\x73\xbe\x29\x42\x31\xa8\x15\x80\x87\x86\xcc\xf1\x48\x48\x22\x21\x6a\xdb\x08\x6e\x03\x2c\xb3\x46\x93\x5c\xde\x8b\xcd\x55\x8a\x09\xf2\x68\x24\x9e\x2b\x22\x78\x31\xe8\x80\x26\xc2\xe2\x92\x0a\xce\x44\x17\x0e\x39\xca\xea\x40\x63\xbf\xf3\x52\xab\xc0\xaf\xdb\x74\x84\xfc\xc5\x3e\x7e\x4e\x24\xb8\xee\xcd\x2d\xc6\x2b\xe6\x63\xb0\x8d\xbb\xe5\xd3\xf0\xe8\xbb\xe5\x75\xc2\x01\xcb\x62\x50\x88\x85\xc3\x9b\xb1\x26\xb2\xce\xf8\xb8\x58\x90\x19\x2d\x7c\x57\x69\x1a\xee\xd2\xa6\x8b\x72\xc3\x74\xb8\x11\x85\x14\xd3\x50\xd7\xc5\x0e\xe1\x80\xe1\xc9\xa8\x68\x2a\xa4\xce\xa8\x71\x0b\xd9\x44\x3b\x40\x42\xc7\xc7\x17\xcf\xdc\xa2\x6f\xa1\x53\xe2\x46\x99\x17\x5a\x16\x0c\x4f\x4a\x0a\x73\x5a\x8b\x52\x79\xa8\xc2\xb7\x7f\x2c\xc0\x77\x11\x6e\x37\x07\xa8\x0e\x47\xee\xd6\x4f\x19\x1c\x19\x5a\x53\xc0\xca\x34\x2c\x16\x3f\x01\xa0\xac\x05\x31\x5a\x91\xed\x0a\x63\xc1\x65\x37\x8f\x8a\x99\x8b\x55\xf3\xaa\x60\xe4\xab\x3b\xb6\x18\x60\xcf\x4e\x54\xe7\xff\x41\x1a\xe5\x6c\x17\xdf\x25\x4b\x56\x86\x00\x59\x93\xaf\xdc\xbf\xfe\xf1\x84\x38\x7d\x29\x71\x38\x9c\xd4\xb6\xa0\xf3\x2e\x11\x21\xa5\xdb\xca\x13\x37\xd0\x82\xa7\x68\x89\xab\x7c\x42\x2e\x01\x3d\x17\x0d\x48\xf8\x15\x58\x02\xe1\x97\x23\x5d\xab\x3f\xba\x78\x6a\xdb\x24\x11\x3c\xf7\x01\x12\xca\xb5\xb4\x98\x8d\x0c\x7a\x19\x4f\x58\xdd\xfe\x06\x58\xf1\xb5\xbc\x7c\x60\x59\x13\x87\xf8\x97\x14\x03\xba\x63\x11\xe8\x42\xfd\xec\xde\x77\xcc\x37\x93\xc6\x6d\x30\xf6\xb9\xc7\x49\x68\x59\x54\x50\xd2\xf3\xf6\x6d\xbc\x63\x9b\xe3\x86\xe3\x73\xe5\xfc\x1a\x40\x91\x85\x69\xf5\xb7\xd2\x69\x45\x97\x0f\x5c\x69\xf5\xbf\x90\x9f\x64\xb2\x1c\x3b\xa1\x8a\xe4\xb8\xb3\x06\x14\xb9\xdd\x17\x39\xfc\x18\x4b\x5a\xd2\xde\xba\x09\x6c\x6b\x83\x5f\xbb\x05\xac\x59\x55\x33\x05\x41\x67\x6a\x96\xe2\x50\xd9\x9a\x09\x29\x00\x30\xca\x86\x24\xb0\x27\x75\xd4\x50\x2e\xbd\x1e\x07\xc4\x5b\x87\xdb\x05\x5b\x70\x69\x2c\xa5\x93\x8e\x2a\x80\xbf\x8a\x63\x3b\xf8\x62\x0e\xad\x40\xf9\x9c\x16\x0c\xdd\xaf\xf7\xbc\xc8\x33\x5a\x63\x22\xa2\x6d\xd4\xac\xa4\x2d\x4b\x43\x34\xdc\xa8\x08\x96\xd7\x06\x58\x7b\xd8\x95\x4d\x40\xa2\xb5\xe6\x59\x53\xd0\x9a\x18\x0e\x38\x95\xf5\xc6\x8d\xd1\x49\xea\x31\x6b\x6f\x6a\x94\x35\x85\x4f\x1f\xe7\xed\x76\x99\x90\xf0\xe0\xe9\x99\x57\xc5\xe5\x04\x35\xcb\x25\x36\x73\x84\x85\x20\xf6\xb6\x47\x51\x20\x27\x4e\xf0\x78\x8e\x3e\x40\xc7\xce\x3d\xef\xf6\x53\xe7\x8a\xf0\xa9\x90\x35\xcb\x8f\x03\x05\xc4\xf3\xc2\x13\xf2\x4f\x0f\xe2\x1d\x93\x74\x6d\x34\x2e\x17\x4a\x06\xec\x3e\x3b\x37\xcb\xa8\xec\x69\x6a\x59\xef\x44\xd6\x6c\xce\x6a\x72\x94\x4b\x44\xaa\x9e\xf3\x4c\x1f\x9f\x90\xff\xc7\x18\x7a\xb1\xd1\x37\x6f\x41\x5a\x66\xe8\x81\x17\x2d\x2c\x22\x55\xe4\x19\x39\x82\xa1\x42\xeb\xf1\xd8\x65\x90\x60\xeb\xec\xf8\xf3\xbc\x9d\x7c\xe9\x84\x54\xc3\x3e\x2e\xc1\x0f\xce\xc6\x6d\x37\x17\xad\xad\xa5\xd3\xee\x3b\x27\xc8\x24\x91\xe9\x85\x24\x57\x96\x2f\x76\xe2\xab\x3e\x65\xc3\xc9\x54\x7f\x17\xfe\x0f\x24\x09\x90\x9a\x4d\x81\x7b\x21\xef\x79\x42\xde\xa5\x65\x25\x0b\x39\x5d\xdc\x54\x35\xa3\xf9\xb9\x14\x4a\xd7\xc0\x58\x9f\xd2\x17\x74\xfb\x18\x11\x41\x17\xbc\x99\xbc\x27\xd4\x16\x85\xc8\x89\x11\x23\x8a\xc8\x66\x3a\x43\x1c\x77\xf8\x43\x42\xb3\x5a\x42\x13\x49\x7c\xdd\xa6\x76\x16\x38\xe4\xd4\x89\xc3\x74\x77\x4e\x61\x0f\x12\x0f\x63\x82\x8b\xfc\x9e\x2e\x2c\x2b\xa1\x63\x9e\x33\x15\x14\x12\x3b\xd2\x37\xee\xf6\x6d\x44\xda\xa3\xeb\x60\x04\xf9\xd9\xf5\xc5\xa6\x09\x08\xdb\xb3\x53\x1f\xdb\x52\x6f\x22\xe0\x8e\xb6\x7b\xe7\xad\x40\x58\x65\x5a\x4a\x6b\x1d\x4e\xf9\x9c\x09\xbf\x32\x1f\x09\x6e\x7b\x49\x1f\x6e\xee\xd8\x7d\xc4\x5f\xba\x89\x7e\xc7\x36\xaf\x45\x18\x82\x0b\xeb\x7b\xa1\xa8\xe6\x6a\xc2\xe9\xb8\x78\x4a\xf0\x78\x00\x1f\xb8\x61\x05\xcb\xb6\xa8\x6b\xbf\x0c\x89\x70\x00\x9a\xbe\x77\x66\xe7\x8c\xc5\xf1\x7b\xa8\xa7\x69\xdd\x22\xb6\x6a\x0b\x70\x17\x94\x1b\xd6\x5c\x56\x08\xf4\xe3\xd0\x3e\x95\x0f\x53\x17\x9a\x72\xcc\x6a\xc7\xc2\xe2\x74\x1a\xf0\x13\xf2\x7a\xa9\xab\x9a\x3b\x3a\x96\x91\x7d\x84\x7d\x41\x61\x49\x2f\x1f\x8c\xb2\xaa\xe2\x12\xf9\xf1\xe9\x9c\xa4\xe5\x97\x62\x02\x8f\x2b\xa2\x5a\xda\x3a\x7b\xe9\xa1\xb1\x8f\x6b\x18\xde\xfe\x26\x96\x0d\xb7\x4f\x4a\xa9\x11\x3e\xd1\x05\x47\xf8\xf4\xd5\x8e\x13\x0a\x6d\x1f\x5d\x3b\x5c\x63\xff\x49\x08\x83\x64\xbd\xde\x6a\x80\x36\x30\x06\x68\xa1\x47\x8d\xd5\xa0\xcc\x97\x13\xc8\x02\x8b\xda\xda\x10\x77\x6c\x01\xaf\xc7\x11\x63\xf7\x2c\xf9\x5a\x38\xc2\x52\xca\xa8\xf0\x19\x9a\x29\x25\xfd\xbd\x5b\xe6\xe8\x97\xa4\xde\x71\x7c\x22\xfd\x6d\xed\xd3\x39\xc7\x77\xad\x0b\x0d\xcf\x64\xc7\x85\xd6\xf2\xe5\xd6\x81\x96\x34\x76\x72\x11\x16\x3e\x29\x7e\xa9\xf6\xe9\xef\x42\x87\x34\xbd\x8f\xaf\x8a\x12\xdb\x02\x31\xf5\x7a\xe1\xb3\xce\x77\x75\x25\x06\xe4\x5a\x6a\xf3\x9f\xc0\x8d\x75\x21\x99\xba\x96\x1a\x7e\xb3\x13\x3b\x89\x0b\xb0\x4b\xfb\x68\x5d\x0d\xd8\xfe\x0b\xc4\x8d\x4d\x49\x33\x8a\x82\xdd\xaf\x75\xb6\xeb\x95\x20\xb2\xb6\x4b\x9e\x48\x82\x37\x7f\x95\x25\x20\x8c\xaa\xdb\x46\x29\x8f\x5a\xcf\x86\x8a\x70\x9b\x3f\x18\x31\x96\x10\xc0\xce\xc7\x4f\xa0\x4b\x7d\x55\x40\x5d\x75\xde\xc0\x82\x51\xb3\x72\x54\xb3\x29\xcf\x12\xe9\x28\x59\x3d\x65\x04\x3a\xd4\xf5\x71\x72\x53\x14\x09\x7c\x12\xd5\x89\x90\x98\x84\x6b\x04\x3a\x1a\xe8\xee\xfd\xe8\x7c\x09\xf7\x27\x20\x05\xb5\x98\x92\x82\xc3\xe1\xff\xf5\x21\xcc\xff\x8f\x54\x94\xd7\xea\x84\x9c\xb9\x34\xbb\xf0\x33\x9b\xa9\x10\xbc\x26\x81\x94\x6a\xd5\xbb\x4e\x05\x61\x88\xb2\x62\xa8\x5a\x56\x6e\x07\xe4\x1e\xfa\xd1\x1a\x01\xe8\x3d\xac\x07\x77\x6c\x71\x30\x48\xea\xa1\x1c\xde\xd0\x83\x2b\x71\xd0\xe6\xd5\x75\x6e\x95\xd7\xf1\xa0\xf7\xc4\x01\x7c\x76\xf0\xe1\xf4\xe8\x24\x8d\xac\xc5\x25\x19\xf5\xa0\xd2\x24\x5e\x81\x4e\x43\xae\x92\x56\xb6\x1f\x17\xd5\xb2\x8c\xe0\x39\xed\xe1\xfb\x2e\xa2\x9f\x18\xe9\xe9\x36\xbd\xea\x50\xe1\x4c\x02\x6d\x4d\xdf\x56\x53\x53\x58\x36\x5e\x40\xa0\x7a\x66\xdd\x6c\x72\xce\x6a\x74\xb1\x45\x8d\x8d\x4e\x25\x0e\x8d\xe2\x6d\xbe\x39\x2d\xb2\xc6\x98\x06\xb6\xc5\x3c\x0c\x6c\xce\xa1\xf3\x10\x14\x52\xde\x35\x95\x3b\xcf\x90\x8b\x1a\x7b\x63\xb8\xc8\x64\x69\xfd\x0c\x38\x4f\x70\x07\xdb\x8b\x39\xb4\x69\x3f\xc8\x63\xfc\x55\xc0\xc4\xa2\x8e\x17\x25\x32\x48\x16\x2e\xa6\x77\x98\x32\x23\x46\xbd\x7f\xad\x5d\xde\xb7\x2e\x55\x14\x01\x2e\xe1\x3c\x5c\x05\xdb\x25\x8a\x96\x3e\xba\x3c\x91\xf5\x98\xe7\x39\xf8\xf6\x90\x38\x5f\xf6\xb4\x74\x70\x0c\xa7\xe9\xf8\x75\xe2\x98\xc6\xd2\x5b\xd7\x54\x83\x2f\x3b\x8f\xc4\xa1\x8e\xc9\xcd\xc5\x07\x06\x01\x1b\x24\x97\xe6\x45\x7e\x8a\xcb\x4b\xe3\x0e\x82\x59\xfd\xa8\x91\xc6\xcc\xc5\xd0\x8c\x48\x12\x4d\x51\xf8\x36\xcd\xe8\xe6\xc0\x70\x17\xb0\x64\x1b\x99\x9f\x1a\x26\xad\xbb\x87\x6d\xf3\xae\xa3\xf8\x2c\xf7\x1e\x05\xa9\x63\xf6\xcc\x72\x7c\xb4\xcb\xba\xab\x7f\x25\x46\x32\xef\xba\x88\x3b\x6d\x48\x2d\xdc\x89\xeb\x5f\x7a\x14\x34\x32\x8d\x2d\xfd\x20\xc9\x4a\x53\x82\xaa\xd4\xa7\x74\x08\xda\x35\x46\x8b\x07\xf0\x4e\x6f\x4f\x2e\xc0\xf0\x41\x6c\x07\x53\x50\xa7\x35\x43\x78\x4a\x60\x4b\xc0\xa6\x6c\x3f\xfd\x46\xb0\x39\x33\xc7\x37\xe7\xca\xb6\x73\x8c\xd4\x1c\x20\x4b\xe9\xbf\x57\xdc\xe4\xff\xd7\x85\xbc\x96\xda\xc5\x7d\xfe\x7b\x60\xc3\xc6\xa8\xc8\x3d\xf0\xb2\x29\xdb\x9e\xfe\x24\xe7\x93\x09\xab\x23\xb1\xfb\x89\xaf\xc0\xe8\x3a\x83\xbb\xe1\x0f\xcb\x26\x34\xad\xa7\x50\x37\x6c\x1d\xbb\x4e\xe7\x9a\x16\x72\x4c\x0b\x52\x72\x61\x48\x8b\x5b\x89\xdb\x95\xf7\xf8\x19\xdb\x1f\xdf\x42\x1c\x28\xa1\x7c\xca\xc7\x05\xb3\xde\xe6\xb8\x3c\x81\xda\xa6\x50\x4f\x96\x56\x63\xe9\xe5\xc0\x5f\x0a\xa6\x14\x26\xc9\xbe\xe2\xe2\xc2\xc6\xea\xa2\x86\xfd\xc6\xb0\xc7\x07\x5a\x56\x05\x43\xa8\x3f\xf2\xc5\xf0\xdf\x52\x30\x62\x93\xff\x07\xfe\x88\xda\x6a\x16\x2d\xc9\x73\xd4\x78\x2b\x0f\xa7\xe5\xaa\x4c\xa2\x28\xe8\x30\x5e\x1f\xbd\x54\xe4\xf3\xd3\xcf\x4f\x9f\xc7\xb1\x98\x2b\x5b\x80\x93\x51\x65\x9b\xdf\xac\xee\xee\xc6\xa5\x2c\xf8\xfc\x4e\xcc\xea\x3c\xb7\xff\xfd\xdc\xfe\xf7\x0b\xf2\x7b\xe4\xdb\xc8\x88\x8c\x3a\xff\x35\xff\x89\x7c\xdb\xd0\x1c\x9e\x60\xbb\x9e\x0f\xba\xc2\xb5\xd3\x8f\xdb\xde\x6f\x50\xf7\x70\x0a\x20\x67\x32\x59\x32\x58\xfa\xcf\xff\x57\x9c\xb2\xd9\x36\x19\xe6\x9a\x48\x61\xdf\xfe\xfc\x08\x96\xeb\x98\xdc\x43\xf4\xbf\xa4\x77\x18\x01\x3a\xcb\x74\x43\x0b\x43\xf0\xd1\x17\xc3\xe7\xc7\x44\x8a\xce\xd7\xa3\x48\x98\x73\x69\x14\x36\xb7\x12\x47\xcf\x23\xa1\x0e\x96\x97\xf3\xf3\x35\xcb\xd9\x59\x49\x98\x2d\x15\x0b\x98\x42\xbf\x3c\xd9\xb1\xe3\x33\xb1\xb8\xa7\x0b\xcf\x94\x9d\xbe\x3e\xe5\x73\x46\x66\x7c\x3a\x03\x50\x80\x84\x76\x2a\x08\xd8\x89\x3c\x96\xbb\x1e\x55\x48\xc8\x82\xf0\x48\xf5\xef\x4a\x1f\x2a\xc8\xeb\x40\xa7\xbf\xc5\x7b\xf1\xd5\x5a\xbe\x04\xe3\x39\xb0\x95\x67\x4b\x78\x17\x5b\x4e\xf6\xf9\xe2\xf3\xcd\x75\x0a\xcf\x93\xb7\xa6\x56\x78\x0a\x3a\x48\xdc\xab\xd2\x6c\x59\xb8\x24\x9c\xda\x77\x48\x2d\x10\x14\x5e\x78\x7a\x31\x7e\x67\xcd\xe1\x56\xa2\xb5\xab\x17\xe7\xe8\x1c\xc9\xdc\x67\x5c\x10\xab\x4f\x43\x7a\x99\x22\x07\x5d\x31\x70\x00\xe9\x66\xde\x7d\x63\x71\x51\xad\xc1\x67\xdb\x94\xba\xcb\x9f\xd4\x25\x8c\x90\x33\x91\xb7\x35\x35\x91\xab\xc4\xfe\xd5\xd0\x02\xbc\xc1\x53\xc8\x96\xab\xfb\x59\xaf\xa0\xfa\xa6\x53\x65\x6c\x78\x71\xcb\xcd\x23\xa7\x8d\xf7\x5e\x35\x05\xe4\x1b\xbe\x7b\xfe\xbd\x9e\x04\xd5\xe6\x2e\x81\xd9\xe9\x93\x97\x4a\x89\xad\xed\x84\x53\xff\x6d\x2a\x83\xb4\x8e\x89\xa4\xcb\x70\x35\x59\x53\x54\xd6\x26\x43\x61\xa7\x5c\x73\x1d\x01\xcd\x28\xbc\xa9\x76\x8b\x41\xc5\x4a\xc9\x79\x0e\xca\x0c\x2c\x0b\x54\xdd\x23\xf3\x2c\xe1\x9a\xb7\x73\x93\x1a\xe7\xf7\xe3\xb2\xb4\xf2\x01\x85\x8e\x25\x11\x6b\x53\xc7\x68\xa8\x9f\x0f\x96\x16\xd6\xfe\xfe\xaf\x4f\xa5\xb8\x7e\x1e\xa7\xb8\x7e\x70\xed\x12\xff\x1b\x6d\x24\xb5\x37\x77\xed\x85\xfd\xeb\x51\xbb\xea\xc7\x90\xe8\xbe\xc2\x71\x01\x21\xaa\xcd\xf5\x8d\xbc\x62\x56\xbf\x57\x5c\x37\x14\x81\xa8\x04\xbb\xb7\x95\xc5\xc1\xb6\x2e\x6d\x51\xe0\xe6\x72\x3a\x5b\x1c\x63\x19\xb3\x8c\x36\xca\xdc\xea\xb2\x32\xf6\x37\x51\xe6\xf8\x39\x97\xe1\x17\x47\x5f\x90\x21\x79\x76\x6c\xae\xb7\x40\xde\x02\x47\x30\xd4\xb8\xa1\xe5\x02\x5a\x7a\x7a\x66\x6c\x7d\xb3\xcf\x91\x6c\x8e\xbb\x9e\x9e\x5d\xbd\xf7\x03\xfb\xb0\xfc\x46\x6f\xd5\x7f\xb5\x2d\x15\x4f\xc8\x9c\x9d\x4d\x26\x5c\x70\xbd\x88\x6d\xc8\xde\x8f\xaa\x77\xbd\x42\x49\xa0\xf2\xcd\xe4\x3d\xb9\xb7\xd5\xff\x70\xed\x2c\x8a\x5d\x48\xfe\xa9\xf9\x21\xc9\xcb\x0e\x82\xdd\xeb\x4d\xd6\x3a\xf2\xba\x8b\x65\x8c\xe6\x8a\x9c\xd8\x4a\x77\xdb\xed\x22\x66\xac\x21\xf9\x56\x0a\x59\x7f\x89\x86\xac\x21\x5d\xb5\xfa\xd2\xa3\xd3\xb2\xb2\x30\x04\x98\xef\x68\x7a\x91\xa2\x7e\x48\xae\xc0\xd9\xfc\xe5\xbb\x46\xf6\x2e\x69\x80\x3d\xc8\xbd\x70\x7e\x1b\x41\x71\xb7\xf7\xf1\xba\x76\xdf\xa1\x7f\x25\x8c\x6a\x3e\x85\x55\x25\x15\x1c\xa0\x58\x27\x5a\xc8\x37\x86\xd8\x67\xce\x31\x02\x57\x54\x1f\x5c\x7e\x33\xaa\x39\xbc\x57\x66\x15\x14\x97\x02\x4f\xef\xdb\xd8\xc9\xa4\xa0\x4f\x59\x0f\x80\x8f\xd9\xaf\x5b\xc8\x3c\xdf\xfe\x45\x0f\xe9\x78\xeb\x35\xc7\xf6\x46\x98\x2f\xbf\x7c\x3d\xa3\x46\x7f\x8a\x2b\x8d\x37\xc3\x48\x70\xd9\x68\x4b\xfd\x80\xd0\x42\x42\x3c\xce\xc8\x75\xf3\x2b\x96\xdb\x2f\x4e\xa4\x0b\xdb\x2d\x87\x91\xa2\xc8\x98\x01\x7c\x68\x5b\x0e\x33\xe8\xdc\xd1\x3e\x18\x84\xdb\x90\xf7\x60\x09\x4f\x7d\xfd\x91\xcc\xfd\xfd\x5f\xf7\xc7\x6d\x15\xc2\xf6\xaa\x18\x3d\x09\x2e\x30\x71\xc7\x40\x81\x84\x63\x85\x41\xd3\x13\x58\x4d\xeb\xb2\xb3\xb8\x3a\x98\x57\x60\x75\x62\xae\xa2\x33\x66\x8d\xfa\xc7\x01\xa1\x38\xa3\x45\x68\x5f\x1a\xbb\x96\xe7\xac\x46\xad\x76\xcc\x3a\x98\x53\xb1\x85\x2a\xf8\xfc\xd8\xbe\x1d\xf1\xa9\x00\x38\x01\x07\xff\x07\x62\xfd\x1e\x8c\x9b\xec\x8e\x69\x97\x81\x53\x03\x26\x4c\xd5\x68\x32\xa6\x05\x15\x99\xe1\x14\x60\xb0\xc4\x05\x64\x26\x2e\xc4\xa3\x25\x12\x80\xa3\x45\xcf\x06\x3b\x5a\x78\xb4\x23\x9c\x42\x50\xad\xcb\x85\xd2\x86\x6a\x2c\xe3\x4d\x5b\xbc\xb3\x42\xc9\x81\x91\x09\x6e\xd0\x95\x20\x15\x0e\x6f\xff\x8d\x89\x52\x56\x9b\x62\x4c\x5b\x90\xbc\x20\x4b\x49\x4e\xa2\xe8\x58\xd5\x93\x2d\x2c\x71\x57\x96\xc5\x4d\x92\x9d\x4c\x21\x6d\x72\xe9\x7a\x1c\x74\xd1\x29\x1d\xe0\xd5\xc1\x00\x77\xd1\xdc\x12\x0b\x5c\x8a\x93\x07\x3b\x8c\xea\xd4\x15\x17\x39\xc0\x21\x2f\x13\xe3\xdf\xda\xa5\xca\xd8\x7b\x8e\x22\xf0\x66\xf4\x4f\xd1\x7a\xb7\xfb\x53\xb3\xcf\x95\x58\xc6\xb6\x98\xe8\xaa\x9b\xaa\xab\x40\x41\x75\x12\x2d\x1c\xa6\x91\x51\x78\xf8\xc4\x18\xd7\xb9\x64\x98\xfe\x82\x61\x90\x48\x27\x2b\x73\x5a\x53\xeb\x0a\x8c\xd5\x29\x3a\x6e\x35\x72\xe4\xac\x68\xa2\x59\x51\xa0\x74\x68\x3d\x9f\x42\x62\x51\xa8\xfb\x76\x6c\x0c\x67\x48\xba\x21\xa8\xb5\x83\x85\x03\x39\x88\x2a\x88\x90\x2f\x7c\x6f\xcb\xd8\xe4\xe5\x71\xa3\xc9\x94\xcf\x8d\x82\xb7\x12\xe7\x5a\x17\xb3\xc2\x38\xe3\x8c\x15\x15\xa9\x59\xde\x64\x2c\x21\xe5\x13\xf4\xdc\x38\xa6\x10\x3a\x7e\x01\x21\xc4\x8b\xcb\x83\xce\x59\x3c\xb0\x8d\x38\xd3\xd5\x58\x3e\x01\x0e\x0b\xe6\x31\x9f\x10\x36\x67\xf5\x82\x54\x52\x29\xe0\xfd\xa0\x2f\x20\xa4\x23\xa4\xcd\xfa\xc6\xec\xe0\x3b\x83\x35\xb3\x6e\xa4\xa8\xc1\x0f\xac\xef\xe9\x00\x82\x07\x32\x59\x07\xd8\xdd\xec\x84\x2f\x4e\x9f\xc7\x66\x27\xf4\xed\xe4\x1d\xc1\xff\x7c\xea\x40\x52\x0a\xc1\xd5\x64\x1d\x9f\xf4\x6b\xdb\xe1\x3c\xef\x93\x5d\x10\x1b\x82\x86\x95\x81\x24\x80\x2f\x8e\x83\xc4\x84\x2f\x4e\x3f\x3f\x7d\x7e\x64\xd6\xfe\xf3\x63\xb3\x0b\x41\xfa\xc0\xe7\x41\xfa\x80\xff\x4b\x3b\x8b\x08\xc0\x2e\xd2\x26\x67\x1d\x3d\x3f\x3e\x81\x62\x10\x40\x63\xbd\x97\x75\x6e\x01\x0d\x1c\x3e\xa6\x99\x39\x76\x45\x34\x0a\x70\xe9\x94\xcf\x01\x30\x2d\xcf\x1d\xe3\x5c\x6b\x10\xb8\x82\x74\x09\xae\xc9\x5f\x4a\x59\xb3\xbf\x04\x43\x7c\xac\x8a\xc1\x6a\x12\x5f\x49\xab\xe1\x5d\x44\x82\x76\x4a\x95\x78\x6a\x8d\xf8\x63\xa9\x88\x25\xad\x36\x78\xcf\x5c\x16\x4d\xb9\x69\xba\x7d\x9a\x42\xf4\xd2\x16\xfc\xda\xa1\x6d\x4d\x2a\xa6\xb3\x94\xb6\x58\x7b\xbc\x08\x81\x8b\xc7\xac\x90\x62\x8a\x31\x69\xdf\x50\x71\xc3\x51\xdf\x0f\x47\x3e\x93\x22\x63\x95\x56\xa7\x4a\xcb\x9a\x4e\xd9\xa9\x25\x72\xa3\xc1\xb6\x87\xf5\xf0\x03\x50\xdb\x2d\x19\xc4\x1e\x48\x38\x0f\x0f\x2b\xed\x0a\xe7\x81\x5f\xd2\x0c\x40\x36\x61\xd5\x3b\x4d\x60\x03\xb0\xcf\x8f\x04\xee\x21\xa2\xc3\x61\x4a\x19\x2d\xbd\x57\x97\x05\x55\x9a\x67\xff\x2c\x64\x76\x77\xa3\x65\x9c\x1b\xb2\x0f\x0b\x63\x1d\x2d\x9d\x93\x20\xc8\xd9\x8f\x37\xe4\x82\xab\x3b\x52\x33\x25\x9b\x3a\xb3\x9d\xd9\x96\xe0\x27\x37\x45\xca\xc5\xa7\xed\x31\x0f\x9d\xc0\x4b\x9a\xcd\xd0\xf4\xb7\xd9\x2d\xec\xa1\x92\xaa\x6d\xfe\x1c\x71\xa4\xf0\x49\xbb\xc7\x7f\xa2\xf7\x8a\xe1\x2a\x8d\xcd\x2a\x99\x8f\x63\x54\xb3\x2d\x37\xf2\xc4\xd9\xfc\xff\xec\x7d\x6b\x73\x23\x37\x92\xe0\xf7\xf9\x15\x08\xcd\x45\x48\xf2\x90\xec\xf6\xad\xe7\x71\x1d\x1b\x3b\x21\x4b\xea\x59\x9d\xfb\xa1\x93\x64\x3b\x2e\x66\xe7\xd6\x60\x15\x48\x62\x54\x04\xca\x00\x4a\x6a\x7a\xbd\xff\xfd\x02\x99\x00\x0a\x45\x51\x14\x55\x80\x9a\x54\x5b\xf8\xe0\xb6\xc8\x22\x90\x05\x24\xf2\xfd\x38\x3b\xe9\xf1\xf3\xd4\xac\xf1\x89\xbe\xea\xdd\x2d\x3f\x5f\x6e\x20\x42\xe1\xcd\x91\x13\x5e\x31\xac\xcd\x85\xad\xf4\x9d\x6f\xdb\xd1\x3c\xc0\xf1\x85\x6c\xc8\x2d\x45\x93\x33\x30\x99\xfe\x49\x9f\x57\xbc\x7e\x43\x4e\x85\x6e\x14\x6b\x53\xdb\x97\x41\xb0\x52\xab\x6f\xf2\xeb\xed\xcd\x70\x31\x30\x7f\xcf\xf2\xb2\xfe\xd5\xc4\x70\x9c\xa2\x6a\xa2\xdf\x90\x3d\xf6\xc9\x7c\xb3\x37\x20\x7b\x9f\x26\xda\xfe\x23\xcc\x44\xef\x8d\xc8\xd9\xbc\xae\x78\xc1\x8d\xd5\xc5\xc4\x84\xa9\xd6\x4e\x8a\x3f\xc8\xd4\x51\x69\x57\xee\x24\x8e\xab\x8f\x27\x1f\xdf\x80\x49\xa5\x94\xe4\x96\x59\x45\xfd\xc6\xea\x9a\x4c\x29\xa9\x42\x3c\x7f\x74\x5c\x90\x5f\x56\xc8\x79\xad\xe4\x9c\x47\xa5\x70\x81\x7e\xf5\x04\x23\x39\x0d\x17\x0c\xb3\x70\x4b\xb6\x7c\xd1\x02\x20\xfe\xae\x45\x1f\x88\xa7\xbc\x65\x67\x13\x22\x31\xcd\xa3\x5b\x18\x9d\xeb\x30\xb9\xbd\x57\x6e\x75\xd1\xa3\xc3\x53\x3b\xda\x9b\x64\x55\x7e\x37\xe5\xab\x92\xdd\xbc\xd2\x25\xfd\x7a\x00\xaf\x85\xd7\x64\xb1\xb4\x07\x54\x93\xbd\xaf\x1f\xdd\x9a\xa0\x1d\x97\x7c\xce\x2b\xaa\xaa\xc5\x20\xde\xcb\x76\xfe\x89\x54\x01\x10\x30\xe8\xbe\xde\x23\x07\x58\x7f\x1c\x44\xe6\x8a\xf9\x0e\x80\xa1\xf3\x2f\xa4\x9b\xf5\xee\xaf\x97\x1a\xd8\x42\x92\x83\x5b\x08\xf0\x47\x5a\x7e\x14\x55\xef\xca\x24\xb9\xb0\xdf\xc3\xe1\x2b\x16\xaa\xc6\xf9\xb9\x27\x12\xa5\x27\xd6\x3e\xe2\x9b\x00\x71\xe1\xc4\xf0\xf7\x16\x47\x13\x8a\x71\xec\x0e\x55\x4d\xed\x78\x48\x82\xc0\xb2\xed\x03\xf5\x70\x40\xfa\x82\xe0\x3f\x37\x8c\x9c\x9d\x78\x79\xa1\x66\x4a\x73\x6d\x2c\xb7\x28\x3b\x52\x32\x47\xd1\xf9\xe0\x68\x4e\x7f\x91\x82\x9c\x7e\x7b\xe9\x26\xea\x7d\xcd\x76\xef\x74\x7b\x32\x2b\xfa\x4b\xa3\x98\xd5\x29\x92\xd5\x9e\x30\xd3\xb2\xd2\x62\x3f\x27\x27\xd4\x50\xd4\x5d\x90\xf4\xcb\xb6\x1d\x18\xe8\x18\x63\xa8\x2a\xe7\xfb\xce\x25\x68\x18\x5b\x96\xec\x2d\xe2\x7d\xe8\xdf\xa6\xdf\xfe\xfc\xfb\x8b\xb3\x2d\xe8\x05\x05\x08\x4c\xd3\xf7\xb2\xcc\xa3\x1c\xec\x47\x13\x7a\xd9\x03\x9a\xeb\x1e\xe3\xe7\x64\x6e\x57\x22\x1f\xa4\x60\x03\x72\xc1\x68\x49\x2c\x15\x76\xff\xfb\xa3\xe2\x86\x8d\xf6\xb7\x25\xbd\xf9\x43\xcc\xb2\x11\x7e\x32\xbf\x09\x1f\xa2\x8e\x8b\xd0\x17\x15\x68\x95\x13\xc6\xc6\x95\x1c\x13\x47\x2b\xb6\xf9\xf6\xdf\x5f\x9c\x65\x7b\xf9\xef\x2f\xce\xfc\xbb\xdb\xff\x95\x93\xdd\x7c\xed\x5d\x53\x8c\xdf\x2e\x69\xa4\xe9\x22\xf9\x7b\x97\x58\x41\xef\x68\xbb\x4f\xaf\xea\x8e\xb6\xac\xe4\x26\xa3\xc7\x35\x17\xbd\x0b\x0e\x76\x09\xa3\x9d\xa9\x6d\x4d\x14\x85\x43\x41\x8b\xbb\xf2\x0d\x99\x37\x95\x81\x66\x2f\x70\x2d\xec\x3d\x81\x0c\x32\x7f\x41\x88\x6b\x7e\x4a\xc8\x09\xc3\x10\x84\xf2\x8d\xaf\x9f\x14\x7e\xb1\xfa\x07\xef\xa9\xa0\x53\xfb\x38\x30\x6b\x32\xc7\x3f\xa3\xfb\x78\x80\x9e\x5f\x11\xbe\xa2\x37\x94\x57\x74\xcc\x2b\x6e\x40\x44\x3e\x1c\x79\x4d\x0e\x8b\xcd\x00\xc8\x5b\x23\xd4\x3b\xa7\x67\xc4\x0d\x21\xa0\x89\x20\x39\xb0\xdf\xbd\xba\xb5\x0c\xed\x70\x04\xdc\x0d\x1e\x9c\x31\x15\xab\x22\xbd\x57\xb6\x97\xf5\xe2\x89\x54\x98\x34\xb5\x01\x50\xcc\x12\xb1\x3c\x92\xa5\x9d\x69\xa5\x64\x09\x5f\xb8\xb6\xaa\x5f\xb8\x70\xa9\x59\xa1\x98\x49\x10\x2f\xe1\xba\xf6\xfc\x7d\xaa\x80\xb9\x73\x77\xb5\x7c\xb9\xab\xf1\x68\x91\x2b\xcb\x09\xb5\xd3\x79\xe1\x2f\xf4\x1a\xc7\xaf\x96\x6a\x19\xe3\x65\xbe\x74\x1c\xcb\xf7\x20\x87\xdf\xdb\x2b\xdc\xa7\x8a\x3b\x8e\x64\x26\x13\x2e\x4d\x9e\x7d\xf1\xb3\xf9\x6d\x41\x56\x0c\x1f\x93\xde\x57\x3b\xf1\x35\x0b\x56\xcf\x26\xe9\xf5\x06\xec\x34\x6f\x2f\xbb\xee\xeb\x63\x56\xcf\xc8\xdb\xcb\x15\x94\x19\xab\x43\xd8\xf7\xd6\xe8\xd4\xde\xd7\xa4\xe2\x13\x66\x78\xaf\x4d\xd8\x32\x6d\x9e\x4b\xc1\x8d\x7c\x74\x97\x65\x92\xa3\xd8\xbb\x5b\x7a\xdb\x94\xd5\xc3\x61\x31\xfb\xc2\x6f\x27\x79\x1f\x7d\x4a\x49\x21\xab\x8a\x15\xbe\x3e\x02\x20\x47\xc2\xce\xe1\x58\x61\x8a\x73\x61\x7f\x7a\x74\xfd\x17\x30\xc6\x39\xb3\xdb\x2b\x44\xf4\x57\x17\xa7\x47\x27\xef\x4f\x47\xf3\xf2\xf7\x33\x79\x3b\x34\x72\xd8\x68\x36\xe4\x7d\xeb\x5f\x6e\xbd\x14\x7d\x06\x77\x95\x99\xe5\x51\x6e\xec\x4c\xf6\xa4\xdb\xb6\xda\xdf\x6b\xcc\xd6\x06\xaf\x9c\x0b\x0f\x52\x52\x9a\x01\x51\x14\x62\xe2\x42\xbb\xd6\x49\x53\x55\x88\x12\x46\x31\x36\x88\x5d\x46\xaf\x5e\x54\x0c\x2f\x38\x74\x36\xf7\x8b\xd2\x37\x76\xe5\x26\xa7\x4b\x51\x7d\xd5\x1e\x92\x11\x61\x5a\x48\xba\x28\x73\xd9\xf9\x1c\xdd\xa1\x66\x66\x11\xe8\x9a\x2d\x08\x54\xe9\x9e\x48\x65\xaf\xad\xea\x5e\x41\x66\x0a\xd8\xf5\x57\x8d\x66\x6a\x84\xd3\x3f\xf3\x93\x4e\x91\x0a\xe1\xfd\x2f\xd8\x64\x37\xce\xf9\x82\x4d\x56\x1d\xb3\xfb\x18\x5a\xc4\x86\x64\x07\x2b\x74\x36\x66\x86\x09\x79\xd8\xc4\x1b\x25\xf2\x95\xe7\x8e\x75\xdd\x9f\xf9\x41\x27\xd5\xb7\xce\xd1\xa8\x43\x24\xe8\x0f\x24\x73\x53\x83\xd8\x03\xe1\x30\x23\xb1\xfb\xc3\x23\x9d\xa1\xf2\x86\xa9\x1b\xce\x6e\x5f\xdd\x4a\x75\xcd\xc5\x74\x78\xcb\xcd\x6c\x88\x67\xa4\x5f\xd9\xad\xd2\xaf\x7e\x0f\xff\x24\x41\x85\xa1\x44\x47\x65\xe9\x82\xef\x1b\xcd\x26\x4d\x85\x01\xeb\x7a\x44\x68\xcd\x7f\x60\x4a\x43\xb2\xf6\x35\x17\xe5\x80\x34\xbc\xfc\x6b\xc2\x8a\x19\x7a\x60\xe4\xad\x5e\x6e\x87\x25\xd6\xdb\x26\x51\x16\x06\x4b\x4a\x64\x2c\x14\x2a\xcf\x7e\x14\x2d\xa5\xc6\x67\xec\x99\x77\x88\x0f\x2d\xe7\x3d\x2b\xa2\x92\x9d\xa1\x3d\x7d\x75\x72\x2e\xca\x7e\x47\x97\xe3\xd8\x70\xf5\xae\x2a\xef\x3e\x73\x41\x4e\x21\xe4\x98\x7a\xe3\x2a\x14\xb1\xf4\x81\xc4\xdd\x38\xe2\x6c\xb1\xc2\xcb\xe7\x37\x5f\xe8\x9f\xab\x21\x42\x36\xac\xcb\xf6\x00\x9f\x9f\x05\xe1\x25\x28\x78\x6d\x50\xf0\xf3\xf6\x7f\xee\x70\xa8\xef\x53\x5e\x29\xf2\x45\xaa\xe0\x5f\x94\xe7\x60\x8b\x38\x91\xae\x68\xef\x9a\xfe\xd5\x4a\x38\xb5\x84\x6a\x3d\xae\xbb\x1b\xa8\x57\xc8\x59\xbc\xcb\x03\x32\x5f\xa9\xa2\x73\x66\x98\x6a\x8b\x31\x17\x52\x88\x94\xe6\x88\x46\x92\x8f\x35\x13\x97\x86\x16\xd7\x5b\xec\x09\xf4\xa2\x33\x3d\x34\x5e\x74\x26\xb2\xab\x3a\xd3\xce\x45\x3b\x7b\xe2\x80\x55\x94\x5c\x16\x43\x9b\x12\x8a\x74\xf9\x19\x32\x80\xbe\xaa\x91\x14\x13\x3e\x7d\x4f\xeb\x74\x8f\xa5\x9f\x69\x49\xd3\x09\x1f\x3b\x27\x25\xd4\xb6\xa8\x65\x0d\xcd\x9c\x5c\x91\x34\xd8\xfe\xcf\xaf\x66\xa4\x52\x56\x27\xbc\x64\x0b\xf4\x4d\xc0\xef\x08\x94\x2e\xf3\x9c\xdb\x4f\xc6\xdc\xb4\x6c\x51\x33\x83\x8d\x63\x5c\xeb\x69\x29\x48\xe1\x2a\x01\x83\x30\x1f\x15\x84\xcd\xa0\x20\x08\x22\x0b\xe3\x6b\x95\x85\x3e\x33\xaf\x5f\xbf\x7e\x8d\x4d\x06\xfe\xfc\xe7\x3f\x13\xa9\x08\x25\x25\x2b\xf8\xfc\xee\x83\xf0\xd4\x1f\xbf\xee\x59\x87\xdb\x8e\xff\x7b\xf4\xfe\x1d\x24\x76\xd7\x46\x63\x2f\x2f\x84\xc8\x4e\xdc\x59\x54\x0f\xc8\xff\xbe\xfc\xf8\xa1\xad\xaf\xdb\xfd\x16\x6c\xba\x61\x3b\xfb\xc3\x13\x3b\x9a\x5e\xff\xe9\x9b\x6f\x12\x66\xe2\x0a\xca\xa1\x70\x57\xad\xd1\xe7\xa8\x53\x33\x83\x28\x48\x68\xde\x00\x35\xe4\xbd\x3a\x86\x15\x44\x4c\xef\x3a\xf2\xc4\xd7\x17\x9c\xf3\xe9\xcc\xb8\x3a\x73\xf6\x8a\x57\xbc\x30\x58\xe5\x05\x99\x9d\x74\xc5\x28\xe1\xd2\x23\x0c\x41\x15\x4d\xf0\x8a\x97\x6c\x40\x2a\x7e\xcd\xc8\x44\xff\x4d\xc9\xa6\x6e\x5b\x3e\x62\x71\x7b\x5f\x3c\x01\x81\x68\x71\xbf\x77\xc7\xb4\x5d\x49\x03\x4b\x72\x6b\xe7\x22\x32\x00\xc4\x92\xfe\xec\x4a\xa7\xb5\x2d\x04\x6b\xca\x43\xb5\x04\x48\x55\xc1\xc2\xd5\x5d\x81\xaf\xe8\x59\x91\xc6\x8e\xe3\xc0\x51\x7c\xa1\xef\x5a\xc9\x7f\x22\x92\x43\x8d\xc0\x88\xa3\x43\x6d\x3d\x8b\x73\xbe\xb2\x5e\x1b\x2d\xd4\x7b\x7d\xdf\xc0\xdd\x2a\x1f\xae\xad\x7c\xe8\x39\x0a\x65\xf0\xa2\xbd\x81\xee\xdf\x5c\x5b\xd0\xa0\x75\x84\x83\xb8\xf7\xda\x2b\xde\x34\xac\x06\xf7\x5e\xe3\x8d\x68\xc4\x9d\x55\xb1\xe2\x7a\xc2\xca\xc0\xd2\xe1\x05\xa9\xef\x97\xd8\xae\x8d\xf5\x5f\x5d\x37\x02\xf7\xac\xc7\x82\x70\x60\xfd\x1b\x26\x47\x47\xaa\x99\x69\xdc\xd1\x43\x22\xb3\x7d\x57\xa6\xb5\x6b\xc4\x33\xa7\xea\x9a\x95\x81\xff\x8d\xc8\xb9\xdd\x14\xdf\x08\x21\xc1\x5e\x51\x51\xc3\x6f\x30\x80\x6e\x4e\x17\xf0\x9a\x4e\xfb\x04\xe0\xf6\x47\xa3\x7d\x24\xbc\x52\x11\x6d\xa8\x72\xd4\xd0\x7e\x9e\x46\x79\xb6\x18\x0c\xd3\xa1\x1b\xef\x69\xad\xb1\xe9\xb4\x55\xb7\xa1\x99\xbd\x84\xba\x99\x66\xe6\x99\x0f\x75\x67\xd4\x9f\xb7\x64\x50\x97\x53\xad\xc7\x38\x86\xbd\x4b\xb4\xfa\xdf\xdb\x8d\x49\xb9\xe7\xc9\x3a\x3f\x50\xaa\x8c\xfd\xdf\xaf\xbb\x45\x6f\x8d\xf4\xd4\x68\x27\xda\xdd\xcf\x13\x84\x70\x1c\x79\x9b\xdd\xcf\x9d\x24\xfe\xf1\x71\x92\x38\x88\x68\x96\x61\xa5\x6d\xea\x4e\x09\xe0\x38\x76\x4d\x0c\xc7\x71\x36\x01\x52\xbe\xc4\xb2\x1d\xab\x89\x95\x2a\x2f\x6b\xd8\xb3\x4b\x5d\x74\x7b\x12\x34\x8e\xad\xc8\xd1\x38\x72\x48\xd3\x38\xd2\x65\x6a\x1c\x29\x01\x9b\x38\xf2\x12\x0e\x1f\xf6\x89\x87\xe1\xc4\x0e\x94\x2c\x26\x01\x01\xc0\x85\x07\x36\x15\x4f\x8c\x93\xe9\x85\x13\x6a\x90\x64\xd0\xb1\x96\x55\x63\x70\xe1\x5c\x53\xc7\xf2\x12\xbc\x10\xab\xa0\xa8\x75\x92\x90\xb4\xbc\x48\x24\x7b\x81\x74\x8c\xe2\x4a\xfa\x0a\xc9\x6c\x2a\xc5\x04\x9f\x0b\xc3\xf2\x9a\xde\x77\xcf\xec\xfe\x39\x4d\xee\xc9\x08\x11\x6c\x74\x39\x90\xc2\x4f\x16\x8a\xf3\xdc\xce\x98\x0b\x09\x8f\x14\x30\xcb\xe8\x2d\x19\x07\xad\xd0\x37\x87\xc3\xca\xf4\xdb\x72\x3f\xe6\x75\x39\x14\x9a\xa7\x1b\xb2\x35\x27\x07\xc7\xa1\xf0\xa3\xcf\xa3\x3a\x13\x86\xa9\x09\x2d\xd8\x61\x6c\xe0\x66\xf5\x8c\xcd\x99\xb2\x1b\xef\x9e\xf3\x75\x04\x67\x54\x94\xae\xc3\x46\xc1\x14\x10\x3e\xf6\xc9\x30\x65\x0f\xe9\xf8\xf2\x8c\x94\x8a\xdf\x30\xa5\xc9\xc1\xb7\xd0\xdd\x0b\x3b\x6b\x24\x74\xe0\xda\x5e\x9d\x0e\x78\x91\x6d\x98\xdf\x61\xe1\x6d\xd3\x54\x84\xc2\x73\x6c\x11\x51\xd8\xf6\x94\x7d\x2f\x10\x8b\x11\x3a\xf6\x79\xf4\x27\xbe\xc7\x52\x80\xa0\x06\x9c\x6e\x21\x1b\x85\x01\x7e\xae\x90\x38\x23\x85\x54\xca\x8a\x8c\x00\x10\xd5\x44\xb1\x29\xd7\x06\x2a\x9e\xfb\x2e\x57\x58\x35\x79\x6b\x65\x00\x76\x2a\x52\x2a\x84\x44\xad\x29\xb0\xd0\x7b\x0d\xa7\x64\xd4\x4a\xde\xf0\xd2\xeb\x18\x10\x0c\xde\xf6\x07\xaa\xa9\x8e\x6a\x82\x52\xad\x65\xc1\xc1\x27\xd3\x62\x51\xef\xf5\xd1\x38\x07\x1a\x4c\xc9\x8c\x55\x38\x05\xeb\x54\x92\x8b\x83\xb8\x24\xa1\x75\x5d\xf5\x0e\x53\x4f\x97\x93\x64\xc9\xce\x9b\x71\xc5\xf5\xec\x72\x57\x02\x53\x56\xc1\x84\x49\x78\x77\xd2\x01\xee\x0b\x50\x49\x08\x8a\x11\x9a\x83\x12\x60\x45\x2d\xab\xf3\x70\x29\xc0\xfa\x42\xb5\xf6\xab\xc6\xa4\x46\x42\x09\xc7\x8a\x19\xe6\xbf\xea\x2f\x2f\xb6\xef\xed\xea\x29\x5b\x35\xd1\x7e\xfa\xbd\xa8\x3b\x9f\x17\xb4\xaa\x12\x94\xf1\x2b\x34\x7b\xb0\xaa\x8c\xbd\x97\xa8\x95\xfa\xda\xcc\x78\x61\xb8\xbd\x4b\x7e\x97\x21\x1f\x03\xb9\xd7\x08\x5b\x6e\xf5\x57\x8d\x57\x1e\x9c\x8e\x5a\x14\x4b\xe1\x4f\x77\x40\x68\x55\xf9\x1f\x04\x0c\xc0\xca\x23\x78\x8f\x5f\xc2\x85\x5e\xc2\x85\x1e\x39\x5e\xc2\x85\x76\x31\x3e\xd5\x1b\x06\x91\xd6\xd3\x72\x08\x55\x7d\x30\xa8\xa5\xc1\xfe\x84\x41\xe4\x4a\x15\xe9\x1e\xc8\x40\xdd\x5a\x7c\x28\xbe\xd7\x91\x31\x8a\x8f\x1b\xd3\x9f\xae\xe4\x8d\xe5\x6a\xe1\x01\xd5\x8b\x69\xc7\x00\x87\xee\xc8\x8a\x88\x12\x3a\x23\x6a\x20\xcf\x11\xdb\x4c\x94\xfb\x47\x41\x10\x07\x19\x1c\x3f\xdc\xd7\xa4\x94\x45\x33\x67\xc2\xb4\x18\xd2\x06\xc6\xa3\x1d\x7b\x8b\x2c\x82\x96\x25\x47\x0e\x7b\x9e\x81\x59\x24\x11\x92\x52\xde\x8a\x5b\xaa\xca\xa3\xf3\x5e\x55\xf2\xba\x15\xf2\xda\xb9\x62\x15\xdd\x7f\x4c\xec\xe7\x74\x0c\x2d\x4d\x5d\x4f\xac\x97\x90\xb4\x95\x53\xe4\xb9\xa6\xab\x3c\x5f\x46\x5a\xbe\xb6\x36\xe4\xac\xf5\x5c\x65\x5d\xf9\x25\xfa\x6d\x37\xdc\x6e\x2f\xd1\x6f\x7d\x57\x7e\x89\x7e\xeb\xb7\x7c\x87\x9e\x9d\x61\x08\x9b\x15\xe7\x2a\xd7\x7c\xa9\xc3\x1f\x9c\xe7\x37\xe1\xa0\x76\x2b\x6a\xe7\xa4\xe5\x89\xa8\xa9\x2f\x17\xff\x5b\x32\x2a\x20\x2d\x6c\xfd\x8c\x51\x86\x8d\x67\x9a\xa0\x91\x7c\x09\x11\x3e\x3b\x10\xa1\x03\x7b\x99\x60\xe0\xc2\xd1\xad\x1b\xd4\xd6\x8b\xc2\x76\x89\x18\x02\x19\xc5\x60\xd6\xb2\x7c\x83\x1d\x02\xa9\x10\x12\x45\x54\x3d\x70\xdd\xab\x07\xce\x62\x2c\x4a\xf8\x1f\x5d\xd3\x82\x01\x39\x0d\xf2\x6b\xef\x62\xd2\x38\xb2\x20\x00\xc9\x84\x04\x04\x10\x01\x76\xe7\x3c\x05\x1b\x48\x36\x8c\xb0\xa3\xd5\xf5\x53\x67\x5a\x6e\x8a\x86\xb3\x7a\x44\xd0\xc5\x8c\xcd\x29\xfc\xef\x5b\xbf\x05\x96\x36\x5a\x85\xd3\x30\x6c\x6b\xc2\xd4\x5c\x13\x39\x19\x74\x32\x35\xf7\x6e\x52\x3a\x7d\xf8\x91\x29\xf2\x8b\xf8\x7b\x74\x9e\x1c\xc9\x41\x96\x37\xec\xbc\x13\x77\x61\xef\x10\x88\x90\xf6\x5a\x85\x0e\xeb\x21\x06\x16\xf8\x07\xee\xf0\x0e\x6d\x4e\x7e\x23\x0d\x8e\x5d\x0b\xb8\xeb\x1b\x68\x37\x08\x8e\xf0\xae\xb4\x9e\x08\xce\x4b\xa0\x5d\x77\xbc\x04\xda\xbd\x04\xda\x65\x0d\xb4\x8b\xe4\x1c\xcf\xb7\x56\xc4\xcc\xc5\xfe\x78\x1f\x38\x37\x66\x5e\xe5\x77\xc6\x06\x1f\xf7\xe6\x83\xde\xa4\xea\xc6\xf6\xef\x8f\x46\xfb\x18\xdd\xdf\x5a\x27\x1a\x33\x19\xfe\x85\x30\x51\xc8\xd2\xce\x73\x05\xf3\x2b\x6d\x40\x7a\x6f\xfd\x15\x31\x2c\x73\xbf\x56\x9c\x1f\x00\x73\xe7\x90\xa8\x92\x59\x85\xef\xf1\xf3\x36\xbf\x4c\x9a\x4c\xdc\x5b\x49\x36\x74\x22\x72\x5b\x1c\x3a\xb4\x3a\x91\xd6\x7f\xaf\x49\xc5\xe7\x1c\xaa\x9b\x97\x40\xe1\x98\x36\x69\x0e\x1a\x42\x0e\x70\xca\x51\x51\x37\x03\x37\xfd\x68\xce\xe6\x52\x2d\x06\x61\x09\xfb\x65\x67\x4d\xf7\xc4\x21\x08\xd1\x45\xa3\x14\x13\xa6\x5a\x44\xe2\xf4\x97\x26\x4d\xfb\x13\xd8\x11\x61\x3a\x20\x48\x4a\xdd\xe9\x76\x74\x69\x50\x1b\x26\x06\x2e\xd3\xa8\x95\x77\xe8\x9e\xa7\x07\x6d\x70\x9e\xfd\x94\x89\x1b\x72\x43\x95\x4e\xbb\xf3\x24\xaf\xfc\x5c\xf2\x1b\xae\x65\xef\x58\xaa\x68\xa2\x78\x7b\x2e\x83\xf3\xcc\xde\x54\xd9\x98\xba\x31\x8e\x9d\xf8\xeb\xeb\x7b\xe1\x86\x6b\xbb\xa4\x68\x7c\xbd\x97\x0c\x52\x4d\x8d\x61\x4a\xbc\x21\xff\xef\xe0\x3f\xfe\xf0\xeb\xf0\xf0\xaf\x07\x07\x7f\x7f\x3d\xfc\x5f\xff\xf8\xc3\xc1\x7f\x8c\xe0\x7f\xbe\x3a\xfc\xeb\xe1\xaf\xfe\x8f\x3f\x1c\x1e\x1e\x1c\xfc\xfd\xbb\xf7\x7f\xbb\x3a\x3f\xfd\x07\x3f\xfc\xf5\xef\xa2\x99\x5f\xe3\x5f\xbf\x1e\xfc\x9d\x9d\xfe\x63\xc3\x49\x0e\x0f\xff\xfa\x3f\x92\x41\xa7\x62\xf1\x31\x91\x0e\xe3\x18\x66\x94\x07\xba\x33\x66\x41\xbf\x25\x2d\x85\x0b\x33\x94\x6a\x88\x53\xbf\x81\x5e\x83\x89\x0b\x78\xf4\xca\x7d\xff\x5b\x19\xa4\xed\x23\xed\x15\xc4\x1d\xba\xe0\x79\x75\x40\x08\xc4\x39\xe1\x5b\x2b\xa8\xe7\xd7\xef\x16\x9a\x30\x6c\x5e\x4b\x45\xd5\x82\x94\xce\x31\xb0\x58\x5b\x17\x7f\x2b\x3d\xb7\x01\xf4\x92\xf7\xb9\x80\x5b\x76\x2c\xce\x59\xc9\x9b\xf9\xb6\x7d\x8a\x08\x45\x7c\xf0\xb7\xd0\x76\xda\xb5\xba\xf6\x31\xd8\xee\x31\xe7\xd9\x1d\xd3\xe2\x1a\xf5\xfd\x80\x19\x29\xfe\x9f\x4e\x03\xde\xbd\x3d\x17\x5d\x39\x67\x54\x04\xff\x26\x44\x02\xcb\x92\xed\xeb\xf0\x2c\x82\x94\xc5\xa5\x88\x81\x70\x2e\xb3\xe5\xc0\x2d\x70\x68\xb5\x96\xf7\x20\x6a\x6e\xad\x13\x67\x02\x76\x93\x2c\x85\xa4\xf9\x2f\xec\x9d\x15\xcb\xb7\x8d\xa6\x01\x10\x1f\x16\x6e\x24\x58\x60\x5c\xe7\x8e\x09\xa9\x64\x11\xa5\x0c\x74\xa4\x46\x40\xd4\x53\x4f\xe2\x52\x63\x8a\x2c\xba\x5a\x68\x50\x5d\x01\xc7\x57\xa5\x31\xc4\x97\x17\x74\x5c\x31\xb4\xf2\x00\xde\x24\xe3\xe8\x15\x74\x0b\xff\xc4\xe7\xcd\x9c\x34\xda\xbe\x99\x14\xdd\xb9\xdb\x17\xbb\xc5\xab\x89\x77\x65\xce\x05\xfc\xa8\x63\x11\xeb\xef\x62\x9a\x31\x72\x19\x4e\xa0\xb5\xcf\x42\x09\x41\x6f\x7e\xd1\x0d\x68\xe9\x0e\x3a\xa7\x2b\xca\x09\x44\x76\x06\x95\x01\x9a\xa4\xd3\xbe\x2d\xae\xda\x4d\x89\x08\x86\xe0\x55\x97\x62\xf8\xb6\xf9\xe1\x80\x1a\xe1\x32\x72\x9e\xeb\x3d\x7e\x76\x02\x77\xa2\x98\x9d\x4b\xb8\xce\x22\x52\x67\x17\xa4\x43\x86\xd3\xd6\xc4\xbd\x90\x62\xd5\x91\xf7\xe2\x66\xfb\xdd\x74\x2b\xea\x53\x5b\x02\x81\x75\xb1\x7a\xbd\x96\xbf\x0a\x66\x6a\x27\x3c\x16\x8b\xc2\x35\x7c\xe0\x6d\x24\x61\x88\x26\xc3\xbb\x0b\xe5\x48\x86\xf6\x3f\xde\x9c\xed\x83\x8c\xc6\x6c\x82\x11\xe5\xf8\x1b\x30\x05\xea\x7e\x85\x51\xd0\xa0\x5f\x31\x03\xf5\x57\x98\x08\x93\x42\x58\xfc\x5c\xde\x58\x12\xf2\xbb\x5e\x53\x7f\xaf\x5d\x1c\x1c\xef\x79\x2f\xe8\x61\xa7\xb0\x9e\x46\xe3\x9c\x60\xac\xc4\x62\x31\x55\xbb\x05\xaa\x11\x3d\x37\x60\x7c\xe8\xf3\xe6\x80\x74\x0b\xa9\xc0\x7b\x81\x54\x0c\xcd\xee\x8a\x59\x1c\x80\x4e\x1c\x4a\xce\x89\x16\xb4\xd6\x33\x69\xc0\xc4\x4b\x6b\x5a\x70\xd3\xbb\xca\x87\x51\xb4\xb8\xb6\x33\x43\xb0\x11\xbc\x59\xbf\xd7\x28\x0e\x5d\xaa\x72\x8c\xac\xdd\xf2\x3a\x66\xa6\x64\x33\x9d\x41\xfd\x15\x7c\xaa\xa8\xa8\xc6\x62\x3f\xfd\xe2\x04\x57\xae\xe9\x8c\x92\x9a\x94\x0b\x41\xe7\xbc\xf0\xe7\x07\x99\x4b\x9a\x4b\x17\x07\x02\xb0\xf4\xdd\x36\x4a\xce\x43\x73\x79\x0c\x49\x39\xae\x28\x9f\x93\x03\xcd\x18\x39\xf5\x77\x1d\xbf\xb9\x44\x95\x1a\x1d\x51\xbd\xbb\xba\x77\x62\x5c\x5c\xdb\x34\x57\x1b\xd6\x7e\xe2\x1d\x70\x51\xdc\x27\x10\xe2\xde\x2f\x28\xca\xd5\xaf\x78\x98\x72\x1b\x57\x6f\x9a\x54\x90\x96\xe2\x8c\x69\x37\x4c\x94\xb2\x0d\x80\xee\xb5\xd6\xd1\xf9\x99\x8e\xad\x97\x48\xd5\x6a\x5c\x1d\xbe\xa8\xa4\x98\xc6\xbd\xa6\x02\x4d\xec\xb5\x9e\x15\xb9\x04\xe1\xa2\xe4\x37\xbc\x6c\x68\x85\xc2\x56\xff\x7d\x3a\xbe\x3c\x43\x28\xf9\x74\x66\x86\xb7\x0c\x9c\x7f\x28\x6e\xb7\x8c\xc4\xbf\x1b\xbf\x93\xa8\xc9\x35\xc8\x65\x86\x18\xd9\x8f\x24\x31\xe7\x74\xb6\xbb\x76\x4b\x17\xd0\x6a\xd4\x25\xdb\x75\x42\xc2\x7d\xdb\x72\x5c\x76\x22\xfb\x89\x0d\x73\x2f\xe8\x39\xf4\xee\xbb\x73\x47\x40\x89\x0b\x2a\x40\x7d\x05\xa7\xb1\xbd\x02\x40\x56\xef\x6e\x5b\x5f\xa2\x53\x07\x1c\x6e\xa7\x42\xe1\x57\x53\x7b\xe9\x7a\x5a\x65\xb6\x6c\x19\xb9\x69\xef\xe3\x15\x9b\xd7\x15\x35\x5b\x0f\xbd\xfe\x31\xf2\xa1\x47\x51\x7d\x96\x7b\x50\x51\x0e\x69\x65\x89\xc6\xf9\x0f\xc7\xae\x88\x13\xd2\xf6\x2c\x39\x2c\x57\x5e\x04\x11\x4e\xcb\x41\x75\x76\x25\x59\x87\x8e\x48\x63\x56\x82\x48\xe0\x20\x4e\xc9\xe0\x93\xb7\x82\x29\x7f\xb1\xce\x7f\x38\x1e\x10\x3e\x62\x23\xff\x57\x58\xc2\x8b\x4c\x46\x4e\xb1\x44\x82\x2f\x16\xd2\x3f\x16\x50\x96\x23\x7c\xf5\xd8\xdd\x1c\xaf\xf9\xd3\xbf\xda\x4d\xb1\xdf\xfe\xdb\xf0\x5f\x1d\x8f\x81\xbf\x7e\xb2\x92\x5b\x7f\xce\x46\x7e\x5a\x9a\x2d\x4e\x43\x07\x89\xc7\xfe\xf5\xd3\xb9\x2c\x2f\x6b\x56\x8c\x70\xfb\xf5\x4f\x49\xe1\xa9\x84\x30\x61\xd4\x62\x44\xce\x25\xe4\xb2\xf0\x12\x29\x1a\xbc\xab\x62\xff\xf4\xf1\x13\x80\x06\xc1\x49\x5b\x50\xc3\x04\x48\xc0\xa2\x7f\x67\x56\xe2\x2b\x0c\xc2\xb2\x40\xe7\x29\xec\xf3\x01\x78\xd6\xb0\xd0\xf2\x80\x18\x29\x81\x4b\xf5\x66\xb8\x76\x1c\x09\xc2\x3e\x71\x0d\xfd\x01\xf0\x28\x01\x4b\xa8\x4b\xa9\xf7\x7a\x87\x85\xc6\x22\x5e\xe8\x77\x51\xcb\xfe\xc1\xb1\xb0\x85\x5f\x09\x69\xbe\x0a\xb7\xd7\x27\x97\x81\x82\x21\x09\xbd\x91\xbc\x24\x8d\x06\xb9\x53\x90\x46\x40\x88\x41\x42\x35\x4d\x87\x3e\xe3\x05\x99\x73\x6d\xe8\x35\x1b\x91\x4b\xab\x93\xc4\x11\xbf\x88\x54\x82\x8c\x2b\x59\x5c\xb3\x92\x34\xc2\xf0\x2a\xc9\x3c\x13\xe0\x86\xad\x8d\xf4\x15\xa8\x9f\xd9\x14\x56\xd2\xad\x15\x1b\x7a\xad\x09\x9f\x4a\x30\x1b\x23\x4b\x0f\xbb\xda\x9e\xd5\x20\xdc\xd5\x19\x45\xfb\x6d\x5d\xc2\x92\x70\xde\x3d\x33\xe6\x48\xa0\x46\x77\xf2\xc3\xed\x7e\x4a\xf8\xdb\xfd\x01\x48\xa6\x47\xe4\x03\x68\x2f\x55\xff\x5b\x89\xf9\x0d\x68\xf2\x76\x11\x2d\x82\x15\x4c\x6b\xaa\x16\x03\x32\x6e\x8c\x55\x47\x5d\x2e\xb5\x4b\x2e\xb5\x5a\x63\xff\x4d\xa5\xa2\xb1\x00\x13\xc5\x0a\x29\xb4\x51\x4d\x01\x58\x43\xc9\x58\xc9\x6b\x26\xda\x02\x13\xfd\x2f\x61\x37\x2f\xbc\x4d\xc0\x84\xf0\x64\x49\x8a\x19\x15\x53\x16\xca\xaa\x92\x39\x2d\x01\x95\xbf\x0b\x26\x90\xfe\xbb\x29\x03\x62\xd0\x89\xb1\x92\xa1\x01\x0c\x19\x5b\x55\xc1\x87\x0f\x25\xbc\x99\xf7\x1c\x0e\xda\xb0\x20\x7b\x60\xbc\xda\x62\x5e\x60\x7a\x0c\xc8\x10\x74\xd6\xbe\x76\xc3\x0c\x31\x1f\x73\x66\x68\x49\x0d\xdd\x95\xec\xf5\xf7\x74\x11\x62\xc9\x30\xc0\x1e\x70\x37\x0a\xbc\x77\xaa\x82\x37\x13\xc9\x9a\xc7\xd5\x7d\xcf\x7f\x38\x4e\x5a\x1f\xec\x42\x80\xae\xd0\xe7\xc6\x58\x3a\xe3\x82\x0d\x31\xb3\x1c\xac\x17\xb4\xaa\xe4\xad\xeb\x3f\xe6\x21\x41\x4e\xce\x4a\x52\x36\xc9\xfe\xe7\x56\x4a\x48\x89\x76\xca\x12\xeb\x64\xf1\x73\x57\x90\xe3\xaa\x0d\x1f\x2f\xba\xa9\xe4\x2b\xb5\x7d\x8c\x32\x64\xc2\x70\xc5\xa2\xea\xd3\x49\x20\x38\x7c\x6b\x04\x92\xd2\x2e\xe6\x21\x6a\x4e\x99\xd1\x6d\x8e\x24\xca\x94\x89\xab\x1a\xa7\x27\xe1\x1b\x81\xf2\xe7\xb1\xd1\xb9\x5c\x56\x6e\x40\xd2\x9a\x88\xe7\x5a\x3a\xd9\xd1\x4a\xdd\x5b\x47\xc6\x7c\x71\x6e\xb4\xb0\x9c\xfe\xbd\x2c\xd3\x03\xe6\xf2\x46\x6e\x76\x40\x6b\xcb\xaa\x60\xf5\x21\x0d\x5e\x4f\x7c\x00\x82\x9f\x75\xa7\xd2\x37\xca\x32\x33\x7a\x93\x5c\x0d\xb7\xb7\x4b\xac\x35\x59\x0c\xbd\x77\x0c\xc1\x1d\x02\xb8\xc3\xaf\x13\x01\x4b\xcf\x16\xf4\x23\x31\x6b\xb0\x0b\x50\x86\x98\x23\xcb\x85\x2f\xb3\x04\x5d\xe5\x46\xc8\x16\x32\x27\x5a\xba\x18\xfc\x90\x2d\xe2\x4a\x28\x32\x6e\xf9\x64\xfa\x96\x7e\xd5\xd1\x25\x9d\x09\x24\x38\x22\xb0\xde\xd0\x81\xf7\x4c\x8c\x1c\xe6\xf9\x6e\x41\xdd\xc7\x0f\x33\x03\x03\xba\xf3\x6a\x63\x75\xf2\x4a\x67\x2e\xdb\xd0\xdb\x97\x98\x82\xf4\x97\xa8\x0c\xa2\xa5\x06\x4a\x56\x15\x53\x70\x04\xce\xfb\xb0\x94\x55\x65\x4f\x8b\x60\x6c\x5d\xff\xfe\x01\x7e\x78\x87\x5c\x30\x88\x09\x76\x1b\x54\x60\xaa\xb1\xed\xaa\x0f\x2b\x07\x47\xa3\x4f\x95\x5b\x05\x4f\x3a\x55\xfa\xd1\xbb\xed\x8e\xc4\x02\x37\xff\x24\x42\x4e\xf4\x6d\x91\xa9\x05\x95\x6b\xc2\x04\x1d\x57\x56\x63\x88\x10\x38\xc0\xb9\x24\x40\x1a\x19\x3d\x75\xc1\x26\xe9\x5b\x07\xde\xc6\x78\xca\xcd\xd6\x46\x09\xb4\xf3\xc3\x51\x9b\x58\xea\x0c\x28\x19\xba\x71\xfa\xe1\xb0\xae\xb3\x44\x37\xe9\x68\x09\x9a\xb8\x3b\xc6\xca\x37\x48\x85\x29\x5b\x88\x7e\xbe\x20\x7d\xe8\x6f\xc0\x7b\x5a\xf1\xbb\xd3\x24\x59\xf3\x70\xe4\x8b\xf5\x87\xd4\x59\xc8\xb3\xca\x11\x34\x9d\x9b\xef\x10\x74\xaf\x01\x7c\xde\x50\x3b\x85\x3f\xbc\xd8\x1f\x82\x88\xc7\xcc\x52\xe7\xb6\x59\x4e\xfa\xbd\x20\x78\x37\xe2\xf5\x57\xe4\xe3\xb5\x64\xee\x3b\x2e\xca\x90\x19\xe9\x2b\x86\x5a\x19\xea\xe8\xfc\x0c\xa1\xce\x03\xd3\x5b\xe0\x09\x0b\xa7\x93\x9a\x19\x57\xe5\xb0\xa6\xca\x2c\xd0\x01\x35\xe8\x40\x1c\x8a\xfd\x65\x58\x3a\x6b\xf8\xba\xbd\x4c\xd9\x51\x0e\x8e\xc0\x07\x10\xba\x08\xd7\x7b\x31\x64\xd7\x76\x24\xb5\x84\xa0\x1f\x9d\x1d\xf9\xd0\xb6\x6f\x0a\xae\x96\x67\xb2\x23\x4f\x95\x86\x4d\xba\xdc\x6c\x77\x65\x6d\xcb\x6a\x75\x37\x21\x08\x45\x5f\x30\x29\x38\x67\xa1\x8c\xcb\x70\x05\x45\x10\x4c\xf1\x76\xa6\x01\xe1\x13\x2b\xb4\x49\x31\x84\x18\xc5\x64\xf0\xda\xf8\x24\xa7\x8c\x8e\x5c\xce\x30\x9a\xc9\x81\x30\x45\x50\x46\x4b\xb7\x74\x90\x1c\x08\xd9\xdf\x8a\xee\x07\xd0\x56\x5c\xeb\x10\xd3\xc4\xef\x89\xf8\x18\xa7\xb7\xdc\x21\xad\xe4\x19\x9b\xd7\x23\x5e\xe0\x45\x62\x2e\x4a\x7b\xa9\x40\x44\x02\xc3\xbb\x6e\x8a\x82\xb1\xe0\xd8\x73\x64\x29\x5d\xeb\xec\xf0\x1e\xb7\xe5\x73\x6a\x8a\x19\xd3\x44\x4b\xe8\xcd\xaa\x0d\xad\x2a\x56\x86\x98\x24\x44\x14\x09\x5a\x85\x8b\x57\x4a\x86\x23\x52\x56\xd2\xb7\x38\x72\x5e\x38\xdf\x68\x5d\x51\xe7\xf9\x99\x34\xa2\xc0\xa4\x40\x6e\x16\x21\x18\x64\x59\x31\x05\x53\xb1\x06\x87\x58\xba\xea\x33\xc1\xb8\x8e\xc8\xec\x1b\x90\x19\x98\xff\x02\xd9\xfd\x8c\xde\xb0\x36\x26\xc3\x75\xb5\xb3\x5c\x7a\x4c\x8b\xeb\x5b\xaa\xca\xd4\x2c\x5a\x02\xf5\x89\xa9\xe1\x63\x6e\x5f\x7e\x80\x1a\x42\x2c\xb0\x8b\xfd\x38\x6c\x9b\x8b\xdc\xaa\x4c\xbc\x0f\x07\xd1\xa6\xdf\x51\x71\x0e\x83\x6a\xa3\x99\x09\x15\x9e\xd3\x25\x5e\xe2\x22\xdd\x69\x63\xe4\x9c\x1a\x5e\x80\x1f\x8d\x4f\xa2\x60\xae\x39\x86\x47\x58\x4a\xe3\x43\xd6\x51\x44\x02\xc1\xcd\x9d\x5b\x26\x32\xb0\x5a\x59\x7a\x82\x8d\x8f\xf6\xda\x9d\x72\x77\x5b\xfd\xb6\x44\xa2\x67\xa6\xf7\xbc\xc2\xe0\x7f\x88\xbc\x55\x8c\x11\x3e\xaf\xa5\x32\x54\x18\x52\xf2\x49\x28\xe0\xec\x43\x01\xd7\xe1\x44\x0e\x7b\xd0\x8f\x10\x00\x1b\xad\x82\x4e\xcd\xaa\x92\xb7\x9a\x98\x5b\x19\xbc\x02\x6d\x14\x96\xab\x37\x3c\xe8\x02\x93\x41\xc6\x71\xab\x5a\x56\x67\xf1\x2a\xe2\x43\x03\x4b\x7b\x6e\x59\x55\xd9\x7f\xd7\x71\xa3\xe4\xe2\x20\x2b\xf7\x84\x4f\x05\x96\x75\xe5\xda\xfb\xa7\x5c\x61\x92\x83\x52\xc9\xba\x76\x11\x0a\xf3\xc3\xfc\x7b\x02\x61\xe6\xea\x86\x69\x48\x07\xf1\xc5\x52\x2c\x2a\x4c\x99\x60\x8a\x1a\x08\x82\x73\xfd\x27\x41\x24\x59\x06\x32\xd5\x2f\x83\x23\xa3\x5d\xe4\x01\xa4\xc3\x08\xc9\xd5\x48\xe6\x9f\x71\xdf\x66\x78\x2f\x2e\x10\xdf\x3c\xdd\xc9\x80\x40\xd0\x46\xe5\x90\x7c\xaf\x11\x2d\x02\xe7\x0d\xc5\x6d\x36\xb2\xb2\x61\x88\x88\x33\xb4\x65\x00\xea\xa8\xaa\x67\x11\x54\xb1\x5d\x2a\x94\x64\xeb\xee\x75\x07\xde\x63\x25\xb5\xfe\xe0\x7f\xf2\x19\x41\x7f\xb1\x59\x3d\x30\x5e\x6c\x56\x2f\x36\xab\x17\x9b\x15\x8c\x17\x9b\xd5\xf2\xf8\x52\x6c\x56\xa4\x65\x57\xbb\x4a\x9b\x3e\xc4\xaa\x4b\x97\xc1\x3e\xf1\x3e\x13\xf2\x41\x1a\x17\x07\x0c\x1a\x2c\xbd\xd7\xe9\x44\x81\x43\xdf\xd2\xc5\x48\x30\xe3\xba\x88\x78\xff\xee\x85\x87\xe9\x6f\xca\x6a\x23\xce\xf4\x11\xd1\x0d\x4f\xc8\x7c\xef\x93\x68\x15\x23\x51\x34\x6b\xc3\x92\xe1\xf3\x7d\xed\x82\x4f\xed\xf7\x50\x07\x90\x74\x5a\xef\x8f\xc8\xa5\x4b\x49\x59\x5a\xfc\x6e\xd3\x82\x92\x19\xca\x53\x1a\xfb\xc4\xc3\x4b\x43\x57\xf7\x48\x67\x5b\x93\x76\x48\xce\x6b\x13\x2a\x19\xed\x9a\x29\xb6\xad\x8c\x16\xe5\xd1\xc6\xd9\xf7\xed\x03\x4f\x15\x84\x73\x36\x21\x17\xac\x90\x37\x4c\xe1\xe9\x9e\x7e\xaa\xa9\xd0\x5c\x8a\xb7\x94\x57\xf6\x6c\xfd\x19\xb7\xde\x6e\xd2\x68\xa6\xba\x51\x8a\x51\x88\x46\xb8\xe0\x0e\x91\x2c\xf6\xa6\x2b\x28\xa1\x5b\x88\x5d\xcf\x65\xba\xd5\x8a\xdd\x70\xd9\x68\x5f\xa3\xa0\x31\x28\x69\x68\xe3\x2c\x44\x33\x3e\x9d\xf9\x87\x7d\x6a\x29\x84\x46\xab\x32\x5c\xe2\x64\xc8\xb4\xa1\xa6\xd1\xdd\x72\xce\x05\xc4\x06\xee\x50\x80\x54\xc0\xa3\xdd\x51\x42\x72\x8a\xeb\x58\x2b\x62\x57\x19\xe2\x3b\xac\x64\x81\x53\x8f\xdd\x5d\xf6\x45\x39\xda\x02\x24\x85\x9c\xd7\x8d\x61\xd1\x9d\x77\xb7\x2b\x0f\xa9\x7f\x24\x32\x75\xfa\x29\xbd\x9a\x53\x41\xa7\x6c\x18\x40\x1b\xb6\xf5\x38\x5e\x65\xa3\xf4\x59\xd0\x8a\x64\x6f\xa6\x13\x8f\x67\x57\x47\xa3\x3b\xb2\x15\xaf\x23\x4f\x52\xc0\x8e\xe4\x2f\x62\x47\x9e\xbe\x90\x1d\x09\x75\x45\x77\x95\x00\x5d\x38\xf8\x96\x49\x90\x13\x32\xd6\x91\xa0\x9c\xaa\xb2\x13\x36\x1c\x2c\x5c\x13\x39\xe7\xc6\x30\x9f\x34\x18\x48\xca\x80\x70\xd3\x29\x39\xe9\x08\x28\x38\x38\x31\xc5\x8f\x7d\xaa\x2b\x5e\x70\x13\xb5\x83\xeb\x59\xe9\x61\x79\x80\x01\xe1\x96\x6b\x14\xe5\x05\xe1\xf3\x1a\x5b\xe2\x03\x21\x1c\xba\x3a\x40\xde\x09\x17\xde\xa6\x80\xf4\x11\xc2\x3e\x81\x2b\x16\x01\x7e\xa1\xdb\x8f\x1c\x2f\x74\xfb\x9e\xf1\x42\xb7\xb3\xd3\x6d\x2c\x08\x9a\x5e\x5f\xb7\x43\xaf\xfd\xa4\xae\x9b\x11\x1d\xb3\x8a\xfc\xdc\x30\xb5\x20\x56\xc1\x6a\xeb\x77\x48\x4b\xec\x34\x2f\xb1\xcc\x84\x8f\xe9\xd8\x21\x0f\x41\x4e\xe1\x1c\x62\x46\x4e\x3f\x59\xfd\x16\x5a\x3d\x64\xe7\x92\xcb\x0b\x74\x7b\x49\xe1\x29\x84\x93\x89\xb5\x52\xcc\x75\x8a\x3f\x01\x15\xf3\xe8\xc3\x49\x4e\x03\x46\x8e\x4c\x12\x92\x2f\x9b\x84\x3c\x91\x90\x41\xc8\xd1\x9a\xbd\xc6\x33\x09\xdf\x00\x1f\x0f\x99\x47\xc1\x9b\x4b\xae\xd9\x62\xe0\xb2\x31\x89\xc5\x40\xea\x1f\xce\x04\x22\xa6\xb8\xa3\xf8\x73\xcd\x30\x8e\x23\xad\xf7\x67\x77\x64\x66\x88\x39\x5d\x75\x38\x86\xf6\xb5\xb3\xcd\xe5\x8f\x28\x0f\x8f\xce\xcc\xf3\x89\x7d\xd5\x5c\x53\x2d\xdd\x19\x8b\x3b\xce\xba\x8d\x38\x6f\x3f\x08\x75\x23\x03\x9a\x43\x4d\x4f\x20\xf8\x79\xd0\x8b\xe4\x76\x26\xe0\xf0\xc7\xf8\x44\x9b\x95\x8d\xc0\x90\x08\xd6\x6e\xe5\xc1\x6b\xb6\xd8\xd7\xae\xb7\x87\x14\x7a\xc6\x6b\x10\xdf\x21\x98\x49\x4e\xb2\x5e\x71\x1c\x3f\x40\xc6\xaa\x07\x06\xf9\xc6\x99\x18\x90\x0f\xd2\xd8\x7f\x4e\xa1\x82\x04\x90\x97\x13\xc9\xf4\x07\x69\xe0\x93\x9d\xc6\x02\xdc\xa4\xe7\x80\x03\x2e\xe6\x88\x43\xc4\x0f\xb0\x57\xac\x34\x0d\x45\x05\xdd\x59\xfb\xac\xa3\x80\x2f\x5c\x93\x33\x41\xa4\x72\x47\x94\x11\x1c\x30\xcd\x23\x48\x08\x8c\xf7\x77\xb7\x41\x81\xab\xa0\x71\x38\x22\x55\x07\x45\x3e\x0b\x60\x0e\x28\xf0\xfa\xe0\x37\xe0\xdd\x82\x58\x58\x5f\x5d\x00\x4a\x53\x29\x6a\xd8\x34\x43\x10\x6f\x3b\xe6\x4c\x4d\xa1\xf9\x4e\x31\xcb\x7d\x1b\x72\x09\x5a\x38\x32\x8a\x5b\x38\xb2\x5e\x59\x90\x79\xdf\x41\xf5\x8a\x5d\xb5\x3a\x45\x20\xa2\xf4\x37\xa7\xb5\xbd\xa7\xff\x65\x85\x3c\x40\xcb\xff\x26\x35\xe5\x4a\x8f\xc8\x11\xd1\x5c\x4c\x2b\xd6\xf9\xce\x39\x59\xa3\x69\x32\x81\x05\x31\x20\x56\xae\xba\xa1\x15\xc3\x22\x44\x54\x10\x86\x66\x1e\xa8\x40\xbd\xa4\x50\x0c\xc8\xed\x4c\x6a\x94\x18\x43\x68\xfe\xde\x35\x5b\xec\x0d\xb2\xb8\x90\x48\xcc\xd7\xec\xd4\x67\x62\xaf\xed\x4a\xd6\xb9\xc1\x41\x66\x86\x48\xc1\x3d\xf8\x6e\xef\xf3\xe8\x31\xcf\xc0\xcc\xf3\x2c\x92\x83\x9c\x9b\xee\xb8\xa2\xe8\x5a\xdf\x35\xa7\xf4\x32\x7c\xcb\x91\x32\x50\xcb\x3d\x7a\xa6\x0d\x8b\x70\x25\xbc\x76\xce\xfb\x09\x85\x79\x33\xd5\x85\xc8\x80\x5c\x08\xd6\x91\x31\x8a\x8f\x1b\xc3\xf4\xce\x62\xc2\xbd\x80\x46\x35\xcb\x42\x33\x4f\x7b\xf2\x3f\xac\xfa\x41\x54\xde\x8d\xeb\x5c\xc8\x71\x36\x59\x8e\x39\x8c\x2a\xc6\xc6\xf5\x04\xa4\x72\xe5\xe3\xee\x64\xaf\xd9\xbf\x69\x00\xd5\x55\x09\x4f\x0f\x43\x6a\x83\x1c\x15\xd3\xb5\xc4\x6c\xad\x95\x1b\xe3\x04\xb0\x19\xd5\x10\xad\x3e\x71\xc1\x44\x75\xa3\x6a\x09\xc5\xbe\xa9\xb8\x73\x19\xb3\xd4\x5b\x70\xc5\x35\x7c\x7d\x21\x2c\xa6\x16\x6e\xae\xbd\xef\xa1\x19\xe3\xd1\x52\x6f\x13\x0c\xb5\x88\xfa\x24\x08\xb9\xfa\xe5\x92\xe1\xf4\x69\x3e\xa8\x43\x87\xaa\xee\x08\x22\x96\xce\xdb\xc7\xe0\xd3\x28\x08\xc5\x6a\x84\x26\x8e\x35\x37\xb2\x0b\x3f\xd4\xf9\xc3\xa6\x0e\xc9\xfd\x3c\x09\xe2\x61\x23\xda\x70\x57\xcf\xb3\x57\xa7\x66\x40\x27\x89\xb1\x6c\x84\x43\x59\xdf\x83\xe2\x69\x37\xd0\xee\x88\x2f\xae\x18\xc0\x72\x17\x21\x2a\xf7\xc1\x27\x76\x5f\x5c\xe9\xc3\x1c\xfb\xd2\x89\x44\x86\x48\x37\x85\x87\x34\x5e\xac\xa6\x2c\xa4\x94\x0c\x4f\x14\xa0\x18\xe0\x39\xae\xde\x4a\xf7\x72\xe9\xcc\x0e\xb3\x9d\x28\x39\x67\x78\x53\xb5\xa1\x86\x41\x9a\x8d\x62\x93\x0a\xcb\xad\xb9\xdd\x9b\xcb\x92\x4f\x5c\xb6\xc2\x65\x14\xf5\x33\xc0\xea\x9b\xae\x48\x66\xdc\x11\x33\x19\xbc\x5c\xc7\x91\x8f\x97\xe2\xbf\x2d\xdd\x2c\xb2\xe0\xea\x72\x56\xc6\xea\x68\xc4\xd5\xec\xe5\xa9\x53\x2e\xb2\x71\xfc\xf7\xc9\xed\xb9\x9f\x8a\xc5\x43\x97\x67\xdf\x26\xa3\xd3\xbe\xab\xcd\xc6\x7e\x22\x29\xef\x07\x60\x28\x72\x42\xde\xf2\x8a\xe9\x85\x36\x98\x66\xc9\xe7\x48\xf5\x31\x11\x55\x1a\xc2\x45\x51\x35\x2e\x6c\x0f\x79\x80\xa5\xba\x3b\x76\xc2\xd9\x85\xb8\x76\x5a\x2f\x85\xfb\xfc\xef\x3b\x55\x6c\x97\xe9\x24\x24\x07\x87\xdb\x94\xe5\xb4\x92\x76\x6b\xd2\xab\xc6\x63\x67\x37\x26\x45\xd7\xea\xfb\x96\x8f\x15\x23\xc7\x33\x2a\x04\xab\xa2\x76\x8f\x2e\x48\x84\x1a\x43\x8b\x19\xf2\x1c\x4a\x2c\xbd\xab\x98\x95\x19\x66\x52\x1b\x32\xa7\xc5\x8c\x8b\xd0\x7c\x4a\x84\xb6\xa7\x6d\x51\xe0\x67\x58\xf8\x7e\xa2\xaf\x2c\x00\x3d\xcf\x39\x17\x71\x41\x28\x3c\xc6\x4e\xda\x8b\x0d\x54\xc5\x48\x02\x01\x47\x19\x1a\xef\xdd\x99\x3b\xb4\x70\xf6\x54\x0a\xce\x1a\x6d\x2b\xc0\xdd\xe1\xd9\xfe\x2b\x9f\x7e\x1a\x91\x3d\xf6\xc9\x7c\xb3\x37\x20\x7b\x9f\x26\xda\xfe\x23\xcc\x44\xef\x8d\xc8\xd9\x3c\x84\x24\x71\x11\x09\x3b\xcc\xfd\xc0\x0a\x58\x91\xa8\x98\x50\xcf\xff\xe3\xc9\xc7\x37\x64\x26\x6f\x49\x29\xc9\x2d\x83\x30\x68\xab\x37\x40\xea\xab\xf6\xfa\x47\xb4\x33\x50\x27\xa3\x90\xf3\x5a\xc9\x39\x0f\x69\x8f\xee\x02\xf4\x04\x23\x99\x70\x56\x8d\xc8\x82\xa6\xfb\x55\x23\x2c\xa6\x7d\x74\x0d\x9d\xdf\x90\xb7\xc7\xc4\x50\x35\x65\xc6\xae\x41\x44\x33\x1f\x33\xd5\xb7\xf1\x6b\x8e\x48\x99\xf4\x66\xfd\x8a\xd1\xf2\xa3\xa8\x7a\x3b\x33\x73\xdd\x6b\x0f\x47\x77\xbf\x4f\xa2\x48\xbd\x09\xad\x34\x23\x07\xf6\xc1\x57\xb7\x8a\x1b\x76\x38\x22\x17\xfe\x57\x90\xef\x0f\x82\xfb\x44\xa6\x08\xc7\x98\x26\xe3\x26\xd5\xcc\x60\x1d\x65\xe1\xc4\xc3\xf7\x96\xb6\xf4\x16\x99\xf1\xc0\xc7\x52\x56\xac\x67\xa1\x79\xc4\xbd\x1f\x7f\xfc\xd0\xdb\xa6\xd9\xc5\xef\x76\xbe\xfb\xd0\xfc\x56\xaa\xaa\xbc\xe5\xa5\xcb\xb4\x22\x07\xf6\xe1\xc3\x34\x94\x4f\xf1\xa5\x24\x7a\x4e\x92\x49\xcb\xed\x2d\x2f\xf3\x6c\x7e\xc2\x5d\x01\x20\xba\xc7\xe5\x8d\x4f\xf6\xb8\x08\x9c\x17\x2f\x99\x30\x96\x1d\x28\x4d\x0e\xe0\x17\xfd\x6b\x7c\x9e\x72\xec\x9c\x02\xeb\x4a\x65\x09\xfe\x98\x8b\xb6\xb3\x51\x8b\x46\x56\xe4\xb1\xa4\xd1\x7b\x03\x35\x33\xd8\x8c\x00\x2a\x2e\x4a\x33\x23\x9a\xcf\x9b\xca\x50\xc1\x64\xa3\xab\xde\xa5\x3e\x9e\x37\x26\x4d\x2a\xf6\x09\x29\xca\xb6\xba\x2c\xb6\x10\x74\xc5\x5e\x28\x78\xd1\x76\x82\x5b\x96\x7b\x7b\xad\xd5\x56\x59\x2a\x5f\x05\xb9\x39\xf4\x34\x61\x9f\x58\xe1\x8a\xb1\xd6\x55\x33\xe5\xbd\x6a\xc6\x27\x8a\xc6\x69\x91\x50\x43\x67\x1b\xde\x82\x4c\x8e\x0b\x67\xa1\x47\x6d\x47\xb4\x65\x87\x8c\xfb\xc6\x35\xbb\x0e\x4d\x8b\xd3\x7a\x47\x25\x53\xe2\x17\x75\x64\x6b\xea\x48\xdc\xe3\x38\x02\xab\x64\x35\x13\x96\x41\x08\xf2\xb6\x25\x2f\xb8\xcf\x5b\x43\x13\x09\x67\x9c\x49\x5e\x72\x93\x75\x85\xa5\xc8\xa2\x38\x93\x55\xa9\x09\xfb\x64\x14\xb5\x3c\x72\x6e\xb9\x61\xf8\xcd\x84\x50\xb1\x18\xa5\x89\x4e\x49\x7e\xf2\xbc\xbe\xf1\xe4\x93\xd9\x6d\xcd\xa3\x7c\xd1\x3c\xe2\xa1\x59\xa1\x98\x49\xa8\x87\x96\xad\xd7\xbe\x07\xa4\x7b\x5c\x9d\x8f\xef\xd8\x2f\xf1\x5b\x5f\x6d\xc1\xc5\xb9\xa4\x98\x65\x35\x13\x9a\x1b\x7e\xd3\xe9\xc6\x09\xf5\x4c\xa9\xd6\xc1\xcc\x07\xe2\x8c\x23\x80\xba\x53\x6a\xb4\xf7\xc2\xe8\x70\xe4\x13\x22\xe4\xd2\x5b\xc5\x35\x28\x42\x4c\x60\xe7\x91\xde\x8b\x86\xc0\xa0\x39\xf6\xb2\xa6\x02\x2a\x17\xe2\xe4\x03\x28\x9a\x86\xff\x8f\xb1\x41\x76\x0f\x22\x63\x27\xec\x42\xff\x9d\x76\xbb\xb7\x3d\xb2\x99\x23\x76\x3c\xb5\xd4\x4c\x4e\xd7\xcc\x87\x48\xb4\xf3\x55\x46\xd2\xac\xf7\x8f\xf4\x00\xca\x1b\xa6\x6e\x38\xbb\x7d\xe5\x6a\xa3\x0c\x6f\xb9\x99\x0d\x5d\xb9\xb9\x57\x60\x67\x78\xf5\x7b\xf8\x27\x09\x2a\xb4\x65\x1e\x95\xa5\x2b\xdc\xe4\x9a\xe0\x61\x21\xd0\x11\xa1\x35\xff\x81\x29\xab\x96\x0c\xa0\x36\xd2\x80\x34\xbc\xfc\x6b\xc2\x8a\xb9\xbb\xf9\x27\x07\x86\x4d\xa0\x7f\x63\x2f\xed\xa0\xeb\x1a\xc1\x79\x96\xfc\x23\xee\x43\xa7\x28\x6e\xe2\x0f\x71\x14\x30\x12\x13\x2d\x0a\xfa\x89\x5c\xb8\x00\xd1\x16\x39\xda\x1a\x3e\x8d\xe8\x49\xa8\xb7\xec\x2d\x29\xa9\xa1\x9a\x99\x14\xaf\x5d\xae\x4b\x1f\x81\x62\xb9\x44\x7c\xff\xdd\x57\x10\x0a\xc4\xa0\xf8\xb0\xef\xa8\x47\x86\xff\xe6\x94\x40\xd1\x79\xd2\xaa\x7f\xee\xc8\xfa\xd3\x74\x2c\x32\x03\x0d\x38\x30\x55\x11\xd7\x2e\x2d\x82\x15\x09\xfd\x4d\x93\xaf\xa0\x7b\xcb\xef\xbf\x3f\x3b\xc9\xa3\x54\xb7\xf3\x79\x1d\x11\xfe\xbf\xbb\xfd\xee\x62\x40\x08\x0f\xff\xb9\x89\x6d\x77\xd0\x30\x3d\xdc\x11\xf7\xfc\x36\x76\x67\x5a\xb0\xd6\x0b\x7c\xc2\xf5\xf5\xb6\x2c\x57\x77\x00\xe9\xd2\xa5\xbf\x1d\x9f\x12\xf7\xe9\x3a\x97\x6d\xaf\xa5\x3f\x8f\x9b\xb7\x77\x44\x8d\x0f\xa3\x99\x16\xac\x0d\xae\x29\xb9\xbe\x7e\x7e\x06\xb5\xba\xfc\xd0\xaf\x68\xe7\x97\xe6\xe4\x5e\xb6\xfa\x38\xc2\xe1\xb8\x2e\xa0\xf6\x42\x36\xe4\xd6\x35\x3c\x4e\xb4\x36\x5d\xf1\xfa\x0d\x39\x15\xba\x51\xac\xcd\x38\x5c\x06\xc1\x2a\x1a\x4f\x6e\x7b\x82\xd6\xde\xfa\xcd\xd6\x1d\xe2\x3b\x70\x15\x71\x7c\x19\x9e\xf9\x9a\x2a\x03\x36\xa8\x6d\xdf\xb0\x00\x88\x67\xcb\xd1\x07\xe2\x29\xaf\xd8\xd9\xc4\x97\xa6\xe9\xc6\xe9\x72\x1d\x26\x6f\x83\x58\x41\x02\xcb\x71\x8d\xde\xca\x20\xa9\xbf\x2a\xd9\xcd\x2b\x5d\xd2\xaf\x07\xf0\x5a\xbe\xb4\x5e\x77\x0f\xa8\x26\x7b\x5f\xef\xf5\x5f\xf9\x92\xcf\x79\x45\x55\x85\xad\x26\x42\x0f\x8f\x30\xbf\x95\x22\x3d\x20\x90\x95\xf4\x7a\x8f\x1c\x48\x05\x10\x15\x54\x90\x8a\xf9\xb6\x14\x8e\xa0\x2f\xd0\xf2\x71\xf8\xec\x6f\xf2\x6e\x44\x7d\x20\x7f\xdd\xfa\x25\x2c\xbd\x4e\xe2\xe4\xde\xd8\xeb\x74\x7e\xd2\x8a\x70\x5c\x58\xb9\x6e\x44\xbe\x77\xd2\x95\x93\x8f\x11\x6b\xed\x61\xf8\x27\xbe\x0c\xec\xf8\x92\x8c\xea\x4b\xe6\xf1\x27\x35\x73\x93\xbb\xf1\x42\x5f\x08\x46\xf4\x35\xdd\x4f\xb9\xb9\x60\xb5\xdc\x9a\xae\x86\xcb\x2f\x85\x18\x70\x63\x3f\x90\x9a\x1b\xa9\x16\x84\x1a\x42\x91\x33\x14\x4d\x45\x15\x51\x0c\x83\x05\xfa\x9d\xdc\xc9\xe9\xf9\xc5\xe9\xf1\xd1\xd5\xe9\xc9\x1b\xf2\x37\xb7\x3a\x8f\x2d\x0b\x23\x72\x25\xdb\x88\x84\xb8\x34\x1c\x66\x6e\xb5\xf0\x0d\x1c\x37\xee\xe9\x31\x39\xb5\xfc\xea\x84\x2b\x6c\xb1\x4e\x05\x39\x13\xdc\x1c\x87\xc5\xb0\x4a\x4d\x25\x85\xcb\x3f\xb0\x2b\xba\xa0\x88\x29\x37\xae\x73\x29\x02\x60\xbf\xf6\xb3\xf5\x02\xa5\x6d\xf2\x2e\xcb\x7d\xdd\xbe\xf1\x33\x8c\xb4\x68\x11\x67\x1b\x36\x3d\xae\xa0\xf6\xca\xd6\xa9\x6b\x00\x24\xd4\xde\xc7\x68\xbd\xf6\xf3\x34\xc1\x11\xa2\x0e\x84\x0c\xae\x32\x22\x15\xd1\x86\x2a\x83\x77\x64\x7f\x34\xda\x1f\x81\x28\xbb\x3f\xda\xf7\xfa\x60\x15\xb2\x25\x9d\xb4\xd7\x02\xe3\xb3\xc5\x52\xf2\xd9\xbb\x54\x63\x44\xc8\x47\x5f\x4c\x11\xba\x04\x2e\x25\x6c\x86\x5c\xcc\xaa\x0a\xef\x00\xbd\x2c\xba\xb4\x27\xc1\x2f\x05\xde\xb5\x66\x1c\xbf\xa4\xcb\xfb\x9c\xf2\x1b\xd7\x64\x6b\x6b\x41\x0f\xed\x2b\x66\xc1\xd4\x78\xc7\x9c\x11\xf3\xe2\xdd\xf6\xde\x0d\x49\x77\xa6\x37\x73\x7c\xc0\xbd\x57\x21\xe7\x73\x6e\xc8\x8c\xea\x59\xe8\x78\xd2\x66\x60\xa6\xb1\xa6\x54\x03\x6c\xd5\x68\xc3\xd4\xa4\x17\xed\xca\xc2\xcc\x3d\x00\x4b\x06\xd7\xf0\xb1\x2b\xf5\x2a\x5a\x8b\x10\x30\x39\x3d\xa3\x8a\xd9\x27\x6b\xe0\x3e\x15\x9f\x30\xc3\xfb\x5e\x8e\x15\x52\x19\x73\x5a\xae\x6f\xb1\xe0\x24\xb0\x57\x01\xde\x57\x17\xa7\x47\x27\xef\x4f\x47\xf3\x3e\x6e\x85\x2d\xf3\x3b\x26\xca\x5a\xf2\xbe\x55\xee\x87\xa4\xa6\xa6\x4f\x2f\xc9\x54\x4e\x19\xc0\xde\x36\xa7\x0c\x80\xf8\x1b\xee\x3f\x40\x5d\x13\x10\xd4\x75\xbd\x88\x30\xd9\xc8\x5a\x56\x72\x9a\xd0\x88\x30\x0d\x4f\x7f\x8f\x39\xf2\x43\x3a\xac\xe5\xd6\x7c\x61\x16\x75\xb6\x7d\x7c\x16\x06\x7f\x72\xed\xf1\x04\x73\x92\x49\xa8\xf3\xf4\x05\x9c\xd0\xb3\x50\xf6\xef\x1c\x1b\xda\xe9\x81\x59\xb0\x12\xc5\x26\x3b\xc1\x10\xaa\x0e\xd5\x4c\xcd\x39\x56\x46\xda\x55\x2b\xc0\x56\xb0\xa4\xaf\x01\xc0\xb2\xe1\xf3\x9e\x17\x39\x07\x7a\xf8\xf5\xbb\x32\x43\xad\xd8\x10\xca\x0f\x58\x75\x77\xc2\x2b\x28\xa5\xd2\x8a\xd2\x91\x08\xd1\x6b\x51\xef\x98\xf5\x9e\x5f\x9c\xb9\x5a\x2c\x3b\x68\x5b\x45\x38\x38\xe0\xb1\xe1\x67\x55\xf5\xcb\x2a\x81\x6a\x34\x56\x6e\x74\x3e\x18\x3a\x85\x17\x96\xca\x85\x20\xd5\x8a\xdf\xf0\x8a\x4d\x2d\x08\x33\x2e\xa6\xba\xed\x3d\xe3\x0a\x8d\xf4\x5a\x16\xaa\xe4\xb0\x56\xec\x0a\xf1\x36\xef\xed\x5f\x6d\x59\x76\xbc\x9a\x1f\x3e\x5e\x11\xc1\x10\x84\x9e\x97\x2c\xd1\x36\x66\x81\xec\x29\x98\x10\x32\x1c\xf6\xc3\xc4\xab\x8f\x27\x1f\x0f\xfe\x29\x05\xd3\x65\x75\x48\x7e\x64\x6e\x0f\xa0\xae\x8b\x51\xbc\x30\xe4\x76\x26\xc1\xf9\xd0\x68\xb7\x8f\x2d\x46\x02\xb5\xc2\xec\x26\xf7\xd4\x2b\xfb\xa4\x90\x3d\x11\x14\x24\xe5\xce\x1a\xdc\x8a\xc8\x9a\xb4\x31\xc6\xcf\xd0\x38\xb3\x25\x61\x73\x67\x04\x15\x1f\xd5\xb3\x8a\x90\x25\x79\x0c\xd1\x39\x87\xa2\x10\x25\x7a\x31\xaf\xb8\xb8\x86\x56\x16\x8e\xd9\xba\xb6\x70\x8c\xd8\x2f\x3c\x79\x53\x8c\x56\xf9\x85\xa4\xcf\x76\xd1\x33\x08\x48\x66\x07\x62\x39\x20\x66\xc2\xf2\x84\x7f\xf7\xac\x10\x5d\x1d\x59\xa4\x9b\xbd\xbd\xdf\xe2\xd1\x72\x5d\x68\xbe\x2d\x89\x06\x16\xef\x88\x33\x82\x9c\x5d\x1e\x5f\x9e\x7d\x89\x61\x67\xf7\xc9\xba\xb0\x09\xcf\xd9\xae\xc2\x7f\xee\x67\xfa\x1d\x92\xaa\xe9\xfb\x4b\x34\xd2\x9f\x4b\x65\x68\xb5\x05\x36\x59\xcc\x68\x7d\xd4\x98\xd9\x09\xd7\xd0\x93\x31\x8f\xda\x78\x67\xd6\xa8\xd6\x13\x03\xa1\xd7\x05\x8b\x11\xee\x2f\x89\x7b\xee\xf8\xdf\x8f\xce\x09\x6d\x2c\x0a\x1b\x5e\x40\x06\xcd\x56\x54\x24\x12\xed\xcd\x25\x56\xe5\xcd\xba\x33\x6e\xce\x07\xf6\xc5\x3f\xb5\x4b\xbb\xb2\x6b\xc1\x90\xab\xa2\x11\x5f\x02\x22\x9f\x55\x40\x24\x30\x8e\xdf\x78\x10\x24\x17\xdc\x70\x6a\xa4\xda\x85\x18\xac\x0e\x30\xc1\x0d\xd6\x68\x23\xe7\x8e\x32\x9d\xf9\x27\x20\x73\x24\x49\x8f\xb9\xb3\x58\xeb\x5b\x03\x3b\x20\x60\xc7\x99\x30\x4c\x4d\x68\xc1\x96\x4a\x85\x0c\x88\x60\xb7\x0e\x26\xee\x9f\xe9\x0d\xcd\xbf\x3a\x97\x79\x0d\xec\xf8\xdf\xde\xfc\x6b\x14\x71\xf9\x6f\xc1\x63\xed\x6a\xd5\x06\x5f\x60\x21\x85\x60\x85\xd9\x96\x0f\xd0\x0e\xfe\x73\x1e\xf6\xc4\x7f\x16\x4b\xd1\x03\xb8\xb5\xff\xa7\xa1\x15\x1e\x49\xca\x71\xa7\xbf\x66\x07\x15\xb6\x7e\x4b\xba\x88\xe9\xf6\x2d\x60\x21\xe6\x54\x01\x83\x68\x34\x03\x95\x00\x37\xd3\x28\x2a\xb4\x45\xb1\x3c\xc6\xec\x7d\x17\x2d\xbc\x4f\x0e\x4c\x51\xf7\x0e\x86\xdd\x99\x02\x6b\x55\x23\x62\x4d\x0a\xf7\xec\x0a\xb1\xf1\x5d\x28\xb0\x96\xf6\x9a\x5b\x0f\xb5\x05\x02\xb3\x75\x47\xa8\x03\x23\xa0\x6e\xbc\xd5\xa8\x92\x90\x77\x5c\x1b\x2c\xee\x81\x0f\x43\x2b\x0b\xac\xfc\x64\x75\xdc\x73\x22\x15\xe1\xf5\x7f\xd2\xb2\x54\x6f\x50\x72\x75\x96\x29\xa9\xfa\xe7\x96\x73\xed\x6c\xe3\x90\x56\xee\xa3\xe1\x0f\xcc\xa2\xe6\x05\xad\xaa\x05\xb9\x3a\x3e\x87\x15\x34\xf9\xcb\x9f\x5e\x83\xd2\xfb\x2f\xff\xf3\x4f\xaf\x13\x71\xff\xb9\x16\x8e\x22\xcf\xc5\xeb\xf7\x0c\x42\x7c\x77\xad\x28\x46\xa7\x84\x05\x74\x1d\xb0\xaa\xe0\x25\x56\x70\xb0\x02\x88\x63\x29\x78\x67\xed\x45\x08\xe2\x54\x4e\x85\xf1\xa5\x56\x42\x34\x5e\x6a\x25\xfc\x46\x6a\x25\x90\x50\x5d\x13\x99\xe1\xb6\x89\x6b\x0c\x0b\xd4\x2c\xbf\xcb\xaf\x91\x55\x9f\x7f\xe9\xac\xba\x27\x92\xf4\xa5\x22\x39\x0e\x30\x4e\x63\x4a\xa9\x92\xd7\x16\x7f\x3b\xf9\x70\xf9\x9f\xef\x8e\xbe\x3d\x7d\x07\xbb\xea\xb2\xa5\x2c\x29\x70\x26\x8f\xcf\x95\x6a\xfe\xa4\xe4\x28\xed\xbc\xb7\x17\x18\x2b\x96\x42\x62\x05\xf9\xf0\xf6\xf2\x91\xd1\xb0\xdb\x08\xc3\x10\x93\xfe\xa7\xf4\xdc\x62\x0c\xec\x4f\x35\x53\xdb\xa9\xd2\xb9\x33\x01\x0a\xde\x27\xc9\x3e\x75\xad\xd5\x16\x5f\x71\x77\xb6\x66\x18\xee\x87\x8c\xe4\x37\xa3\x50\xd9\x23\xc2\x63\x7b\xf6\x01\x94\x9f\x13\x2d\xd2\xd4\x3b\x95\xab\xb8\x6e\x52\xc1\x43\x15\xd5\xe5\xb5\x8c\x04\xc5\x0b\x65\xc5\x3c\x2b\xe0\x31\xad\xbd\xb0\xf1\xdb\xbd\xc7\xf5\xaa\x4e\x5e\xdb\x12\x08\x56\x02\xe3\x7a\x7b\xf9\x96\x65\x51\x34\x6c\xa7\x5c\x65\xbf\x10\x91\x7b\x7a\xc2\xa1\xf0\xa1\xa9\xf3\x6b\xe8\x9a\x16\xf9\xf2\x6e\x7a\x36\xf9\x5a\xee\x13\x07\xdd\x83\x9e\xa1\x20\x02\x70\x6f\xa9\x4a\x51\x58\x7b\xdb\xc4\x29\x00\xb2\x5c\x37\x9c\x3e\x06\x25\x09\xd5\x5e\x8b\x71\x29\xd0\x19\x0a\x8c\xef\x24\xce\x92\x2f\x52\x5e\xf9\xf1\x33\xdb\x7e\xb7\x69\xf7\xad\x67\xd2\x48\x91\xb9\x14\xde\xaa\x49\xbb\x3c\xe2\x1c\x9e\x38\x6e\x5b\x6a\xb6\x28\x89\x05\x50\x42\x98\x21\x15\x65\x90\x0d\xa5\xf0\xc1\x83\xdd\xd8\xc1\xe7\x47\x6d\xeb\xf2\xec\x64\x0b\x84\xf6\x39\x44\x40\x7d\xa1\x4d\x06\x3e\x53\x44\x53\x7a\x9a\x64\x99\xa9\x56\xa8\x9d\xc8\x9f\xf1\xd9\x89\xd3\xd5\x7d\x21\x50\xed\x28\x00\xb9\x9f\x04\x6c\x45\xec\x96\xca\xdc\x4a\x95\xab\x99\x4d\x77\xba\xa5\x9c\x31\xf7\xdd\x9d\x8a\xc3\x5f\x26\xc1\xc3\xb7\xfc\x2d\x13\xbd\x4b\x20\x7a\x11\x0e\xac\x23\x7e\x5f\x02\xed\x7b\x3e\x34\x6f\xe7\x24\xd0\x97\x6e\x1d\x9d\xe1\x89\x47\x96\xf3\xf1\x93\x39\xb7\x93\xc5\xcd\x96\x2b\x51\x70\x40\x46\x74\x79\x2b\x5c\x48\xc9\x7f\x42\x37\xf5\x74\x06\xe4\x67\xc2\x28\x1f\x08\xbb\xa0\x55\x65\x4f\x56\x8a\xb6\x1d\x9a\xf6\xfd\x2e\x06\xa4\x90\x62\xc2\xa7\x73\x5a\xeb\x01\x70\xa2\x52\xde\x8a\x5b\xaa\x4a\x72\x74\x7e\xf6\xf9\xb9\x4e\x72\x85\x2b\xbc\x47\x29\xdd\xc4\xb3\xd5\xb8\x6a\x41\x81\x04\x69\xd7\x25\x9f\x91\x31\x37\x1a\x33\xad\x21\xef\xd9\xc4\x26\x6f\x2b\x00\x84\x98\x5d\x4b\xcf\x2d\xed\x76\x33\x65\x90\x8f\x05\x91\x85\xa1\x15\xb9\x81\xc6\xe2\x63\x66\x6e\x19\x13\xe4\xf5\xeb\xd7\xe8\xed\x7e\xfd\xe7\x3f\xff\x99\x58\x8c\x21\x25\x2b\xf8\xfc\xee\x83\xf0\xd4\x1f\xbf\xfe\xba\x3f\x28\xff\xf7\xe8\xfd\x3b\x42\x0b\xb0\x58\x60\x3f\x45\x84\x08\x50\x2f\x5e\x54\x0f\xc8\xff\xbe\xfc\xf8\xa1\x6d\x72\xdf\xfd\x16\x30\x3b\x6c\x67\x82\x46\x1e\xa5\x2f\xc7\xfe\x68\x6a\x66\x70\x6a\x42\x1a\x42\x27\x13\xbc\x53\xc0\x47\xb9\xf6\xf4\x32\x21\x2d\x03\x3a\xe9\xf0\xe9\x0c\x8e\x85\x0b\xb8\x85\x15\xe4\x70\x73\xbb\x25\x10\xa5\xe0\x1b\x6f\x61\x8a\x3d\xc0\x10\x44\x88\xde\x2b\xdb\x2d\x1b\x90\x8a\x5f\x33\x32\xd1\x7f\x53\xb2\xa9\x07\x3e\x11\xcf\x52\x87\xa6\x32\x90\x42\x3e\x66\x0e\x88\x16\x63\x35\x4b\x6c\x82\xb6\xed\x40\x56\x47\xfa\xf2\xc4\xba\x39\x32\xea\xd4\x9d\x8a\x5b\xc9\x6a\x12\x0a\xbb\x20\x15\xb6\xa7\xf7\x5c\xa3\x3c\x3b\x6f\x7b\x1e\xde\x07\x91\x11\x7b\x40\x45\xcc\x86\x56\x52\x4c\x63\xdc\x6d\x65\x4f\x9f\xd8\xb4\xa8\x13\x42\xbc\x32\x44\xf6\xe5\x89\xed\x23\xa4\xc0\x2a\x29\x57\xaa\xd1\xe6\xdb\x46\x94\x55\x52\xac\x5f\xde\x68\x3f\x42\x8e\xef\x40\x87\x85\x39\x5c\xc0\x06\x38\x68\x8a\x82\x69\x44\xdb\x9f\x46\x56\x14\x1f\x99\xf6\xe9\x9f\x30\x64\x2e\x11\x0a\x39\x59\x05\x88\x8b\xb2\xb1\xe4\x8e\x0a\x42\x1b\x23\x87\x4d\x5d\xd2\x50\x43\x65\xf4\xbb\xdf\x25\xae\x7b\x54\xd5\x33\x3a\x20\x53\x1a\x29\x3d\x77\x01\x89\xb0\x79\xc2\xa8\x69\x14\x83\x5f\xa4\x2f\xbf\xe6\x9d\x2d\x4d\x75\xf1\x6d\xd0\x54\xb8\x0a\x0c\x45\xd0\x39\x1b\x58\xa6\x8b\xf0\x26\x82\xb0\xd4\xd8\x58\xf3\xa9\x60\x0a\x9d\x1a\x96\xca\x53\x52\xd1\x31\xab\x1c\x00\x52\xa5\xbf\xf3\x77\x68\xad\xb0\x32\x8c\xa5\xd0\x9a\xd0\xe9\x54\x31\xad\xf9\x8d\xe5\x9d\x6a\x4e\x2b\xfe\x4b\xdb\x67\x79\xc6\xc8\xf9\xe9\x7b\xa8\xe8\x02\x1a\xb1\x55\x6f\x0c\xeb\x5f\xc4\x12\x47\x28\x0f\x6b\x31\xbc\xd5\x82\x47\x84\x9c\x6a\x69\xa0\x1d\xb0\x5d\xd5\x1d\xb6\x26\xba\x29\x66\x84\x6a\x4c\x7f\x19\x8e\x2b\x59\xf4\x6f\x6b\x80\xa3\x90\xf3\x39\xf3\x05\x56\x60\x42\x32\x63\xb4\x64\x0a\x1b\xca\x59\xb5\xa0\xae\x59\x39\x22\xe4\xd8\x52\xa0\x09\x2f\xa8\x61\xf8\x5d\xc9\xca\xc6\x2a\xcd\x50\xdb\x37\x11\x8c\xab\x19\x23\x52\x95\xcc\x2a\x21\x76\xbf\x8b\x78\xb1\x48\xba\x81\x8a\x45\xdc\xae\x3f\xe6\x46\x51\xb5\x40\x19\xc0\x9d\x65\x22\x10\x96\x39\x14\x33\x2a\xa6\x28\xf2\x02\x3c\x44\x42\x03\xde\xde\x55\x13\xfd\xc8\xc2\x07\x48\xb2\x75\xab\x1d\x09\xf1\x5c\x7e\xe4\x61\x4b\x76\xc0\xdd\xbe\x74\x57\x3b\x75\xb2\xdc\x9c\xc9\x0e\x84\x0d\x14\xd2\xbb\xb4\x52\x7b\xd9\xc2\x14\x33\x14\xb3\x97\x68\x15\x21\x68\x01\xa1\x69\xa1\xe2\x38\x18\xca\xd3\xdc\xd3\xc8\x90\xd0\xc9\xcc\xc8\x2a\x4c\xa6\xa1\x55\xb5\x18\xb2\x4f\x96\xdf\x5b\x62\x06\xc2\x0d\x14\xc5\x85\x4c\xd0\x46\x68\x66\x06\x19\x00\x01\x22\x54\x2b\x66\xb0\x85\xd8\x1e\xbe\xbf\x90\x50\x5f\x6b\x0f\x17\xb3\x4a\xe2\xb8\x31\xd8\x42\x62\xb0\xfa\x27\x39\xf6\xe4\x86\xa9\x85\x5b\x37\x79\xba\x6c\x57\x95\x64\xbd\x23\x04\x28\x94\x29\x66\xa7\x9f\x6a\x85\x25\x0b\xb2\xcc\xb9\x74\x5d\x96\x97\xc0\xc2\x47\x5e\x4d\xe8\x22\xb6\x27\x46\xc0\x41\x30\x28\x3e\xfe\x04\xb8\xc4\xd1\x87\x93\x74\xf6\x80\x23\x5d\xb5\xe8\x8e\x44\x45\xa3\x3b\xf2\xd3\x1c\x1c\x47\x6b\xf6\xdc\x15\xa5\xf2\xdf\x60\x61\x7b\xdf\x31\xd6\xdb\x22\x28\xb9\x66\x8e\x4d\x52\xe1\x8c\xe8\xee\xe1\x6c\x40\x2a\x56\x01\xa7\xb6\x6c\xf3\x9a\x2d\x60\x31\x5c\x3f\xcf\xc9\x67\xbe\x94\x38\x72\x71\xd2\x76\x0c\xed\xcb\x67\x9c\xcd\x1f\x56\xa6\x29\xf3\xd2\x22\x1c\xd7\xac\xb7\x2b\x62\xd5\xe8\xdc\x22\x8b\x49\xde\x4c\x01\x77\xc0\x7e\x10\x6a\x81\x04\xb4\xa7\x50\x01\x5f\x13\x23\x73\x21\x1b\xc9\x93\x27\x75\x77\xf8\x03\x7d\xb2\x2d\xcb\x48\x78\x48\x04\x6f\xd7\x1f\x7c\xcd\x16\xfb\x1a\xef\xbc\xe5\x10\x33\x5e\x63\xef\x59\xcb\xec\xe5\x24\xf3\xc5\xc7\xf1\x03\xad\x78\x19\xc0\x41\xce\x72\x26\x06\xe4\x83\x34\xf6\x9f\xd3\x4f\x5c\x3b\x1d\xe6\x44\x32\xfd\x41\x1a\xf8\x64\xe7\xf1\x01\xb7\xea\xb9\x60\x83\xb3\x5f\x73\x48\xb4\x01\x36\x0c\x9a\x3a\x6c\x89\x3f\x75\x5f\x33\x31\x60\x0e\xd7\xe4\x0c\xba\x58\xe0\x51\x65\x05\x08\xb2\xbc\x10\x28\x04\x67\xee\xdc\x05\x42\x8a\x21\x88\x9c\x2b\xe1\x71\xd8\x22\x55\x07\x59\x3e\x13\x68\x0e\x2c\xb0\xa3\xe3\x37\xd0\x36\xbf\xae\x68\xc1\x4a\x52\x36\xb0\x99\xd4\xee\x2a\x35\x6c\xda\x33\x9f\xf2\xbe\x31\x67\x6a\x0a\x2e\x82\x22\xa1\x32\xe5\xdd\x91\x5b\x30\xc3\x91\x55\x3c\xc3\x91\xf9\x12\x83\xac\xfc\xce\xb2\xa6\xa7\x90\xc4\xb3\xdd\xde\x08\x4c\x94\x18\xe7\xb4\xb6\x37\xf7\xbf\xac\x60\x08\x48\xfa\xdf\xa4\xa6\x5c\xe9\x11\x39\x22\x9a\x8b\x69\xc5\x3a\xdf\x39\xdb\x4b\x34\x4d\x36\xc0\x6a\xc8\x89\xfa\xb9\xe1\x37\xb4\x62\x58\x37\x8c\x0a\xc2\x2a\x14\x6f\xe5\xe4\x8e\x3a\x32\x20\xb7\x33\xa9\x51\xca\x04\x83\x2f\xf4\x30\xbc\x66\x8b\xbd\x41\x06\x23\xa4\x1f\x31\xb5\xd8\x3b\x13\x7b\xad\xa7\xa9\x73\xa7\x83\xac\x0d\xf9\x3f\x7b\xf0\xdd\xde\xe7\xd2\x83\x32\xca\xc2\xb4\x2c\xa1\x39\x24\xad\xce\xb3\x8b\x88\x59\xaf\x5c\xfe\xcc\xf3\x76\xa4\x16\x3f\xc0\xf1\x74\xa6\x27\x7f\x33\x57\xd8\xea\xc7\x0b\x87\x0d\xde\xcc\x73\xd7\x0a\x94\x01\x10\xb0\x23\x45\x36\x27\x7b\x25\x3a\x86\xbb\x5c\xa6\x97\x2c\xc8\x82\x3e\xe8\xfe\xe5\x04\xda\x91\xff\x48\xad\x4c\xa2\x1a\x36\x20\xa5\x14\xfb\xc6\x99\xdd\x6b\x59\x62\xa7\xaf\xa6\xf6\x35\x03\x42\x7a\x52\xb9\xe2\xd4\x0f\xf4\x61\x06\x50\xa8\x62\x16\x04\x7a\x43\x79\x45\xc7\x95\xb7\x11\x42\x2a\x08\x3a\x78\xa0\xd0\xad\x4f\x30\x59\x05\x08\xe1\x39\xf8\x81\xab\xc2\x0f\x61\x0b\x46\x12\xe8\x51\x10\x03\xd3\x22\x5e\x04\x52\xd7\x69\x94\x01\x8a\x75\xe8\x0d\xbc\xd3\x41\x69\xa4\x33\xf7\xfe\xc2\x94\xcc\xb0\xee\x0a\xa3\x72\xae\xdb\x94\x12\xcd\xd6\x8e\x94\x44\xea\x76\x74\xae\xd2\x05\x28\x90\x37\x2e\x64\x05\xea\x45\x46\xf5\x44\x95\x44\x44\x80\x38\x42\xf8\x62\x0c\xfb\xb2\x53\x44\xa6\x45\x97\x5d\x24\x33\x8f\x74\x5a\x44\x2e\xd7\x1c\x72\xca\x03\x9e\x88\x2b\xd7\x05\x04\xdb\x74\x4c\x00\x4a\xef\x5d\x7e\x9a\x0b\x15\x4a\x4b\x36\x02\xab\x2c\x62\xe4\x56\x3e\x27\x66\x36\xd4\xc2\xc8\xc6\xf7\xb4\xce\x18\xa0\x11\xe6\x84\xbc\x3c\x35\x47\xa2\x49\xc7\xb2\x31\xbe\xbe\xa6\xfb\xbe\xa4\x86\xda\x9b\xe7\x82\x64\x76\xc3\xed\x99\xcf\x76\x99\x49\xad\xcc\x7f\x5d\x31\xee\xb5\x1b\x67\x3e\x20\x8c\x16\x33\xab\xed\x0c\x31\xa0\xd1\xea\x69\x5e\x21\x3b\xb1\x07\x85\x4a\x90\x5c\x16\x18\x72\x5c\xa1\x80\x11\xfe\xe2\x44\x31\xba\x3e\x70\xc1\xa7\x84\x68\x17\xc6\xef\xd4\x33\xd1\x26\xa6\x66\x80\xc4\xbb\x14\x1c\xbd\xf0\x46\x61\xd8\x11\xb0\xf0\x2c\xf5\x20\xad\xb8\xb6\x40\x5e\xb3\x45\xb8\xf4\x19\xa0\x58\xf1\xf6\x6d\x11\x5d\xcb\xc3\x5c\x1c\x72\x23\xee\xac\x6f\x85\x9a\x4c\x30\x80\x15\x16\x5e\x9a\x7a\x03\x79\x54\xca\x77\xc6\x0b\x68\x55\x62\x17\x74\xcf\x7a\x6c\x09\xc7\x99\xc3\xd0\x15\x1d\xbd\x66\x56\x62\x85\xd7\x84\x62\xd0\xf6\xfd\x99\xd6\x84\xc3\x39\xcd\xa9\xba\x66\x65\x90\xc6\x47\xe4\xdc\x6e\x94\xb7\x86\x65\x80\x44\x79\x29\x02\x92\x91\xe8\xa2\xd3\x3c\xd7\x82\xb9\x3f\x1a\xed\xbb\x26\x31\x77\x5b\xe9\x66\xa2\xf8\x79\x4c\x5f\xd9\x0c\x5e\x1d\xda\xf4\x9e\xd6\x1a\x0d\x8a\x56\x8c\x06\x17\x8a\x84\xbe\xdf\x66\xe6\x23\x6b\x68\x72\xc2\x77\x3b\x32\x1b\x27\xf2\x3a\xe9\xf2\x39\xe8\x32\x84\xcf\xe0\xc8\xed\x94\xcb\xe8\x90\xbb\xcf\x19\xe7\x70\xc8\xd1\xc3\xbc\x1e\xde\x8c\x0e\x96\x79\x42\x2a\xc5\xf2\x78\x2a\xb7\x0a\x04\xa9\x73\x4d\x3e\x7a\x6b\xc5\x66\x89\x16\x20\xaf\x63\xe4\x69\x2e\x48\x76\x28\xd3\x62\x79\xec\x5a\xe6\xc5\xf2\x38\x9b\x00\xd3\x59\xdd\x08\x3d\x4e\xa6\x09\x0a\x88\xce\x65\x0a\x26\x5b\x4d\xc9\x58\x1e\x5b\x49\xd1\x58\x1e\x39\x52\x36\x96\x47\x7a\x0a\xc7\xf2\xc8\x63\x4f\xc1\xf1\x54\xc4\x29\x6e\x01\xac\x3a\xc6\x1a\xa7\x6e\x80\xc0\x0f\xa6\xb0\x3a\x62\x0c\x19\x69\x92\x13\xe7\x90\x2c\xd1\xb1\x96\x55\x63\x52\xbb\x0f\xdf\xb7\x48\x2c\x33\xc2\x4b\x7a\x2f\x54\x1e\x41\x71\x79\xb9\x48\x12\x05\x4d\x02\xc5\xb3\x9c\x6b\x65\x64\xa8\xbb\xea\x1b\xc9\x5f\x24\x1a\xc7\x2e\xd5\x66\x5d\x1e\x9f\xbb\x60\x34\x8e\xdd\xf7\xcc\xf8\x69\x1d\x1f\x5e\x84\x6e\x5f\x1d\xe5\x17\xca\x33\x1b\x8d\xba\xb9\x8f\xc9\xc0\xfe\x60\xe9\x36\x93\x7c\x06\xf7\xa7\x72\x74\xfa\x1c\xe9\xa3\xf3\xb3\x8c\xb6\xc5\x68\xd6\x7b\xac\x8b\xf1\x13\x2f\xf6\xc5\x4d\x46\x67\x83\xcf\xd0\x34\x18\x47\x62\x9f\xb4\x3b\xea\x6a\xb6\x64\x11\xe5\x76\xdf\x9e\x71\xe7\xc5\xdf\x5a\x29\x24\xee\x65\x13\x61\xa0\x91\x2e\x29\xbd\x95\x57\x1c\x9f\xf7\x1d\xc9\x30\xf3\x2a\x3d\x73\x90\xec\xbe\xed\x63\x47\x2d\x16\xb0\xfb\x09\xad\x3c\x96\x47\x07\x5b\xf6\x2f\xfc\x26\x3a\x77\x18\x1a\xaa\x23\x9b\x79\x2d\xcb\x37\x18\xc0\x43\x85\x90\x06\x63\x5a\x07\xe8\xfa\xd5\x83\x36\x03\x31\xaa\x99\xa8\xa2\x12\x35\xa3\xfd\xdf\x56\x84\x3b\xec\xdd\x79\x1e\x4c\x22\x4f\x14\x94\xde\xca\x40\x4f\x16\x5a\xeb\xe6\xf7\x48\xa4\x8b\x19\x9b\x53\xf8\xdf\xb7\x7e\x83\x2c\xbd\x76\x69\xa2\x60\x83\x67\x6a\xae\x89\x9c\x0c\x3a\x25\x73\xf6\x6e\xbe\xce\x90\xb2\xd4\x8e\x27\x09\x53\x0e\x67\xfe\x64\xdb\x79\xde\xd1\x2a\xed\xed\x04\xc3\x17\xf8\xaf\x7d\xe1\xd2\xe0\xe5\xb0\x42\xc4\x0d\xee\xff\x8e\x6f\xdd\x53\xc6\xab\xe1\x78\x0e\x46\xce\xbe\xc6\xcd\x41\x10\xd0\xbb\x46\xc9\x6c\x80\xbd\x18\x37\x1f\x1e\x2f\xc6\x4d\x37\x5e\x8c\x9b\x1b\x8f\x27\x33\x6e\x46\xd2\x9c\xe7\xb0\x2b\xac\x93\x71\x13\x20\x6f\xa2\x6c\x3b\xca\x8e\xd0\xd5\xe1\xed\x8a\xde\xa8\x28\x55\xd7\x6b\xbc\x3f\x1a\xed\xa3\xdf\x78\x14\x7c\x23\x8d\x99\x0c\xff\x42\x98\x28\x64\x69\xe7\xb9\x82\xf9\x95\x36\xa0\xe9\xb4\x76\xa8\x18\x96\xb9\x5f\x2b\xf6\x3c\xc3\xdc\x79\xe5\xc6\x8c\x6c\xcb\x97\x5a\x7b\xfb\x94\x72\x79\x46\xf6\xd2\xca\xf5\x1e\x72\x7f\x14\xee\x40\x99\x72\x02\x7e\x5b\x44\xae\xe2\x73\xee\x12\xc6\x2c\x3d\x65\xda\xe4\xca\x69\x20\xe4\x00\x27\x1f\x15\x75\x33\x70\x0b\x8d\xe6\x6c\x2e\xd5\x62\x10\x16\xb3\x5f\x76\x56\x77\x4f\x1c\x82\x72\x51\x34\x4a\x31\x61\xaa\x45\xa4\x66\xfc\xb6\xb4\x0c\x7f\x52\x3b\xac\x64\x04\xe4\xca\x13\xfe\xd9\x8e\x2e\xc5\x3b\xf6\xcb\xa0\x11\x3e\xec\x36\xf0\x7b\x57\x25\x7f\xd0\x1a\x3f\xed\xa7\x4c\xdc\x90\x1b\xaa\x74\x2e\x0a\x43\x9e\x4a\xaf\x28\xf9\x0d\xd7\x4f\x98\x0d\x7b\xe9\x84\x16\x74\x61\xc9\xc6\xd4\x8d\x71\xec\xce\x93\x08\xf6\xa9\x96\x56\x14\x0d\xa4\x61\x49\x3d\xfb\x7a\x2f\x23\x70\x35\x35\x86\x29\xf1\x86\xfc\xbf\x83\xff\xf8\xc3\xaf\xc3\xc3\xbf\x1e\x1c\xfc\xfd\xf5\xf0\x7f\xfd\xe3\x0f\x07\xff\x31\x82\xff\xf9\xea\xf0\xaf\x87\xbf\xfa\x3f\xfe\x70\x78\x78\x70\xf0\xf7\xef\xde\xff\xed\xea\xfc\xf4\x1f\xfc\xf0\xd7\xbf\x8b\x66\x7e\x8d\x7f\xfd\x7a\xf0\x77\x76\xfa\x8f\x0d\x27\x39\x3c\xfc\xeb\xff\xc8\xf8\x12\x54\x2c\x3e\x66\xe3\x09\x38\x86\x4f\x22\xd7\x74\xe7\xce\x8c\xba\x4b\xba\x1d\x17\x66\x28\xd5\x10\x17\x79\x03\xd9\x1d\xd9\x96\xf2\xa8\xf9\x74\x34\xa6\x95\xaa\x02\x07\x0d\xea\xf7\x8e\x13\x91\xa7\xd2\xb0\xb1\xca\x6c\x46\x1f\x09\x4e\x78\x8f\x7b\xc4\x7d\xf9\xe2\x19\xd9\x64\x7c\xf9\x91\xd7\xae\xf3\xf4\x4b\xd8\x35\x79\xfe\x61\xd7\x78\x96\x2f\x31\xd7\x2f\x31\xd7\x2f\x31\xd7\xc9\x33\xed\xa8\x07\xf3\x25\xe6\xda\x8f\xe7\xe0\x8e\x78\x89\xb9\xde\x60\xbc\xb8\x25\xd6\x8e\x17\xb7\x44\x67\xfc\xc6\xdd\x12\x2f\x31\xd7\x3d\x17\x79\x89\xb9\xbe\x7f\xbc\xc4\x5c\xbf\xc4\x5c\x3f\x9b\x98\x6b\xb4\x85\xac\x8a\xbc\x76\xb6\x8c\x36\xec\xfa\x37\x18\x75\xad\x2d\xaa\x16\xec\xa8\x28\x64\x23\xcc\x95\xbc\x66\x89\x81\x69\x4b\x96\xc5\x3b\xb3\x5b\x0e\x72\x9f\xa5\xf1\xee\xc3\x3b\x69\x76\xfc\x22\xeb\xdc\xd3\xa6\xe4\x4c\xe4\x30\xe5\xe7\xa7\xeb\x1e\x36\x2f\x7d\x58\x69\x4e\x94\xac\x6c\xbf\x70\x44\xdf\x58\xa4\x19\x91\x23\xa2\x58\xc1\x6b\xee\x0a\xf5\x51\xfc\x3c\x03\x20\x40\x1f\x5c\xa3\xbb\x85\xa5\x1a\xac\x9a\x20\xd3\xa6\xa2\x6d\x80\xa7\x22\xfb\x9b\x93\x20\x96\x00\xcd\x61\x58\xb1\xaf\x84\xf2\x34\x10\xfe\x5b\xae\x19\xd1\x33\xd9\x54\x25\x51\xec\x9f\x5e\xa0\x77\x3b\x72\x15\xc3\x10\x7b\x11\xf3\x00\x13\xbd\xba\x3b\x09\x5a\x73\x7b\x9f\xd9\x6e\x55\x5e\x63\x9f\x6a\xae\x80\xee\x5c\xb2\x42\x8a\x72\x27\x4d\xfe\x77\x80\x6c\x85\x6e\x08\xc8\xc0\x5a\xac\xa1\xff\xcb\x0d\xad\x78\xc9\xcd\x22\xc4\xfb\x22\x19\xcd\x71\xed\x90\x12\x87\x5b\xa5\x5b\x8c\x22\xb4\xae\x95\xa4\xc5\x8c\xe9\x08\x5e\xd4\x74\x5d\xaf\xdd\xb4\xd6\x8f\xf1\xa8\xab\x66\xca\x05\xaa\xcb\xb0\xaa\xd5\x3c\xaa\x05\x51\xd2\xf8\xf4\x09\xf7\xd2\xcb\x20\x5f\x45\xe0\xd8\x9f\x67\x00\x06\x05\x75\xa3\x16\x90\xa5\x21\x63\x20\x70\x67\xf8\x24\xfe\x43\x13\x59\x95\x20\x6f\x50\x41\xfe\xf2\x9a\xd4\x4c\x15\x48\x96\xb2\x38\x87\x34\xf4\x7f\xb1\x70\x54\x56\x1b\xb3\xa2\xcc\xfd\xcb\xff\xcf\x6f\xc8\x4c\x36\x4a\x8f\x4e\x22\x02\xf0\x35\x7c\x96\x03\x5b\x44\xd9\x06\xc5\x1a\x52\x31\xaa\x0d\xf9\xfa\x35\x99\x73\xd1\x98\x7c\x35\xe3\x72\x69\xf2\x91\x0e\xff\xa7\x6f\x12\x67\x7b\x82\x0a\x74\x59\x28\x49\xac\xb1\xc3\xff\x07\xb5\xdd\x79\xab\xa0\x4b\x32\xa9\x25\x17\x66\x59\x89\x77\x12\x57\x4e\x6e\x05\x5e\xb2\x2d\xf3\x83\x9f\x1b\x39\x5e\x98\xf4\xa6\xe4\x6e\x9e\x6e\xf5\xf9\xff\xe3\x3e\xc4\x6d\x95\xa2\x6d\x10\x0d\x76\x36\x3d\xa3\x8a\xb9\xa6\x71\xfb\x9a\x54\x7c\xc2\xec\xed\xed\x01\xca\x96\xdb\x90\x2b\x36\xe5\xda\xa8\x7e\xae\x93\x61\x7f\xc6\x90\x2a\xed\x4e\x95\x6c\x7a\x17\xae\xcb\x75\x3d\x01\x08\x6f\x26\xf3\xce\x72\xd7\x3e\xb0\x7f\xbd\x4e\x47\xd2\xd1\xd3\x8b\x6b\xf4\x9c\xeb\xcb\xeb\x03\xbe\xd4\xde\x1b\x6e\xa5\xbf\xaa\xbe\x93\x26\x84\x61\xc3\xbd\x65\x25\x4a\xf4\xf6\xe7\x43\x88\xcd\x8d\xbc\x2d\x09\x3d\x71\x97\x9b\x91\x6f\xaf\x11\xb8\xbf\xbe\xdb\x3f\x20\x84\xa3\x4b\x44\x5d\x2d\x69\xa9\xc8\xbc\xa9\x0c\xaf\xab\xf6\xb0\x2e\xfc\x0f\x9c\xb8\xd7\xdf\x7e\xd6\x2a\x68\x34\xf2\x86\x53\x0d\xd4\xfa\x4d\x2d\x95\xc1\xa0\x9a\x83\x00\x03\x13\x06\xfa\x19\x43\x86\x25\xab\xa9\xa2\x01\x53\x0a\x39\x9f\xd3\x84\x92\xc7\x18\xa3\x41\x21\x50\x1c\x99\xb5\x15\x11\x15\xad\xda\x1d\x8a\x22\x6a\xb7\x75\xad\x0d\x13\x54\xf4\x0e\x3b\xcb\x85\x33\x08\x05\x91\xb7\x21\x4b\x7a\xca\x6f\x98\x58\xbe\xcf\x4e\xed\xfe\x96\x16\xd7\x4c\xf4\xb7\xe3\x7d\xaf\xfd\x19\x97\x0b\x41\xe7\xbc\xa0\x95\xa5\x07\x4a\xde\x70\x4b\x0e\x58\xb9\xb4\xae\x1e\x38\xf7\x27\x36\xbd\xf3\xed\x52\x51\x81\xd9\xd6\xc1\x35\x9a\xf5\x8e\x63\xce\x75\x6c\x16\x86\xa7\xe2\x79\x1a\xbd\xe2\x8a\xdf\x14\xcc\xeb\x7f\x76\xbd\x6d\xed\x37\xbe\x5f\x96\x1d\xf7\xd8\x1c\xd1\x28\x90\x24\x43\x48\x1f\xf6\xbb\xa9\x2c\xaf\x5a\x84\x1e\xf7\x4b\x77\xc1\xf5\xc3\x4d\xe3\x37\x3d\xf7\x43\x8d\x7b\x09\x99\x39\xd0\x4e\x8d\xcb\x2e\x63\xb9\xa0\xa5\xd4\xe4\x5b\xa8\x68\x7f\xc2\xc0\x5c\xf0\x38\x41\xbd\xdf\x0e\xae\x70\x1e\xb1\x4f\x74\x5e\x57\x4c\x8f\xae\xff\x02\xee\x23\x47\x3c\x5e\xa9\x71\xf9\xea\xe2\xf4\xe8\xe4\xfd\xe9\x68\xde\x87\x68\x6d\x59\x2d\xe0\x73\x3a\xed\xa7\x2c\x0e\xc9\x5c\x0a\x6e\xa4\xea\xc3\xdd\x52\xb5\x82\x89\xbe\xb2\xfb\xb6\x65\x0a\x89\x50\x78\x6d\xbd\x6d\xb8\x0c\x87\xea\x95\x73\x2f\xad\x5a\x24\x5d\xc8\x86\xdc\x52\x6c\x4c\x03\x78\xdc\x5f\x36\xbd\xe2\xf5\x1b\x72\x2a\x74\xa3\x58\xdb\xc4\x6e\x19\x04\xcb\xd2\x42\x03\x7a\xc7\xd8\xe0\xca\x60\x47\x1a\x68\x84\x80\x2d\xa2\x7b\xc3\x71\xea\xee\xc5\x1b\xb2\xc7\x3e\x99\x6f\xf6\x06\x64\xef\xd3\x44\xdb\x7f\x84\x99\xe8\xbd\x11\x39\x9b\xd7\x15\x2f\xb8\xa9\x16\xf6\x46\x31\xa5\x30\x24\x6a\xcc\xdc\x0f\x96\x02\xa5\xfb\x43\xf2\x48\x8f\xaf\x36\x52\xd1\x29\xf3\x17\xf9\xf7\x6a\xdc\x5f\xe6\x40\x87\xee\x4c\xde\x92\x52\x92\x5b\x46\x6a\xc5\x6e\x98\x30\x18\x4d\xab\x49\xd4\x6d\xda\x9d\x0e\xb4\x27\x28\xe4\xbc\x56\x72\xce\xb5\x17\x8b\xe6\xb4\x98\x71\xd1\xd7\x76\x93\xcc\x04\x81\x16\x6c\xfb\x4e\x01\x10\xc1\x7a\x0e\xe4\x1f\x3f\x4a\x6b\x24\xd0\x97\xa2\xff\x7e\x26\x6f\x87\x46\x0e\x1b\xcd\x86\xbc\xaf\x0b\x32\xf9\x64\xae\xd9\x02\x32\x81\xb6\x7c\x36\x0e\x8c\x8e\x79\xd2\x48\xf0\xc2\xc3\xe7\x56\xe3\xb9\xf8\xf6\xe4\x7b\x9d\xe2\x42\x8a\xac\x22\xaf\x98\x29\x5e\x15\xac\x9e\xbd\x72\x2b\xff\x56\xcf\xdf\x73\xda\x6d\x23\x80\x87\x03\xa5\xdb\x42\x56\x15\x2b\xbc\x4f\xeb\x98\xd5\xb3\xf0\xc0\xb3\x3e\xa8\x94\x54\x80\xc4\x04\x80\x64\x4c\xa9\xa5\xec\x1d\x95\x93\x0b\x4b\x2c\x0c\x5d\x0a\x0e\x9f\xa4\x11\xf0\x88\x2c\xa8\x71\x5e\x29\xe1\x19\x11\x82\x67\x61\xa7\xbd\xf0\x5f\x6a\x66\x40\xc6\xe4\x82\x60\x6d\xbd\xf7\x56\xe6\xdd\x05\x83\xec\x4e\xe0\x41\x8a\x3d\x18\x53\x3c\x13\xca\x69\xe4\xc2\x84\x00\x08\xb8\x31\xa2\x60\x4e\xda\x98\x19\x13\x86\x17\x18\xf5\xe0\x72\x52\x63\x11\x81\x9c\x4d\xd0\x2e\x57\x26\x84\xed\xc9\x1b\xa6\x14\x2f\x99\x26\xc9\x32\x42\xec\x8f\xe1\xd5\xb3\x46\xad\xa4\x88\xb9\x1c\x01\x6a\xa9\xe1\xc6\x39\x1d\xeb\xf9\x43\x8c\x77\x33\xb8\xf8\x73\x87\x15\x67\x08\xf2\xca\x1f\x22\xbb\x33\x96\xf3\x8e\x00\x04\x9f\x64\x13\x80\x68\x39\xe7\x09\xb5\x0a\x77\x80\x3e\xf5\x44\x1a\x5d\xd0\x8a\x9d\x7d\x4c\x36\x4f\xbb\x79\xba\xb6\xe6\x4b\xf7\x61\x6d\x2f\x89\x86\x14\x75\xef\xf6\x30\x86\x16\x33\xd7\xe2\xcf\x3b\x9c\xa5\x20\xdf\x05\xdc\x25\x42\x96\xfd\xe2\xa5\xb6\x6c\xff\x9d\x52\xc3\x6e\x7b\x6a\x3b\xc3\x96\xf9\xf7\xfd\x3d\x58\xc3\x5e\xec\xc7\x2b\x8d\xb7\xe9\x36\xe2\x90\x10\x7a\x67\xee\xa7\xb7\x0a\x8f\xee\xb1\x07\xe7\xa0\x7f\x30\xe3\x56\x7c\x63\x76\xb8\x2b\x93\x05\x79\xdc\x5c\x1e\x05\xe0\x14\x68\x59\x2a\xa6\xb5\x97\x58\x3c\x59\x3a\x3a\x3f\x23\x7f\xc3\xc7\xb7\xf6\xea\xb5\x92\x06\x2d\x3e\x27\x72\x4e\x79\xef\xb4\x93\xce\x1e\x2c\x4f\xea\x37\x23\x56\x26\xfc\x26\x9c\x87\x67\x89\x7b\xd8\x2a\x14\x6d\xc3\xd1\x46\xb1\x92\x38\xcb\xfe\xd6\x76\x69\xe7\x94\xf4\x3b\x6a\x33\x39\xb0\xdf\xbd\x82\x66\xc8\x87\xa3\x56\x61\x5f\xd2\xe6\xfb\x9b\xb1\x9e\xd0\x0a\xf0\x45\xea\xce\x51\x70\x80\x2f\x4a\xd3\xea\xcb\x1e\xf9\x41\x88\x0c\xc9\x23\x09\xab\x0a\xcd\x21\xa2\x38\xca\xe9\x02\x65\x1c\x6a\x12\x84\xba\x33\xa8\x98\x0f\xc8\x3b\x39\xe5\xc2\xf3\x06\xe9\x62\xfa\x27\xb4\xbf\x86\xfc\xa2\xa2\xde\x19\x2f\x2a\xea\x6f\x48\x45\xd5\xba\x3a\x15\x74\x5c\xf5\xcf\x46\xec\x2a\x33\x61\x3a\xf2\xb6\xa2\x53\xc2\xe0\x8f\x57\x25\xd7\xf6\x5f\x72\x79\xf9\x0e\xa2\x1d\x1b\xe1\x4d\x71\x10\x1c\xe7\x44\x89\x50\x9f\x12\x19\xc3\xf6\x68\x32\xf2\xec\xf7\x09\x05\x5f\xb2\x51\xe5\x16\x14\xc2\x45\x09\xcd\xdc\x75\x27\x09\xd9\x3d\x01\xc4\x99\x86\x22\x5a\x98\xc7\x37\x66\xe4\x6a\xc6\x8b\xeb\xf3\x28\xe0\x50\x2a\xfb\x99\x88\x3e\xca\x22\x06\x67\x9a\x33\xf9\x8e\xb8\xed\x38\xcf\xe5\x7a\x8a\xe6\xf3\xb2\xa0\x67\x81\x97\x6e\xe7\xe1\x3b\xaa\xb5\x2c\x78\x1b\xd3\x0b\x3e\xe9\x56\x40\x2c\x41\x40\xdc\xde\xae\x80\x0a\x95\x67\x43\x50\x73\x5b\x21\x17\x7b\x4c\x74\x4f\x50\x1d\xcb\xc1\x5c\xf8\x7d\xdb\xda\x26\xe0\xdd\x48\x29\x69\x9c\xeb\x56\xb7\x90\x2c\xef\x63\xb8\xc1\xcb\x31\x99\xbe\xe4\x9e\xc3\xbd\xde\xc6\x0a\x1c\x10\xa4\xc5\xf5\x0a\xac\xe5\x3a\xd0\x10\xa8\x96\xba\x95\xd3\xea\x5f\xa1\x34\xc7\x09\x39\x69\xb7\x9b\x54\x80\x9f\xb9\xe8\x4e\x20\xae\xb5\xac\x9b\x0a\x53\x37\xc3\xa6\x65\x8b\xf0\x7c\x4c\xb0\x18\xc2\xf6\xf9\xcd\x7d\xa9\x72\x6f\x54\xca\x6a\xdb\x17\x32\xae\xaa\xf5\xf8\xf2\x69\xfe\x8e\x82\x61\x8b\x8c\x17\x7e\xba\x0c\xc6\xb2\xed\x57\x4f\xcb\x55\x2d\xad\xbf\x61\xb2\x53\x65\xad\x63\x3f\x78\xfd\xa7\x6f\xbe\x49\x90\x5e\xb8\x62\x85\x91\x90\x95\xe3\x2a\x57\x86\x48\x32\xaa\x18\x68\x9e\x58\xda\xcc\x9b\x26\x31\x2b\xc3\x24\x39\x76\xb7\x57\x5e\x6d\x2b\xe5\xd4\x72\x24\x5d\xa7\x97\x4b\x4b\x8a\x84\xca\x16\x4d\x0a\xa5\x98\xcf\xb6\x5c\x8a\x79\xab\x05\x98\xb7\x59\x76\x79\x7b\xc5\x96\xb7\x58\x62\x79\xdb\x85\x95\xb7\x52\x4e\x79\xeb\x91\x93\x9f\xbf\x60\x72\x96\xda\x54\x39\xea\x52\xa5\x96\x44\x4e\xac\x69\x95\xa7\x9e\x55\x72\xd1\xe3\xcf\x51\xea\x38\x53\x59\xa3\xf4\xb2\xc6\x79\xeb\x8e\x6c\xbb\x84\xf1\x0e\x89\xde\x38\x76\xb3\x5c\xf1\x56\x8a\x14\x6f\xbb\x34\xf1\x16\x0b\x12\xe7\x2b\x5e\x94\xab\xf8\x70\x7a\xd1\xa2\xbc\x84\x63\x4b\xe5\x85\x9f\xb0\xa8\xf0\x67\x29\x25\xfc\xd4\x05\x84\x93\xd9\x54\x6a\x7d\xd7\xe4\xaa\xae\x3a\x53\x59\xd7\x5c\xc1\x02\xbb\x60\xc1\x6e\x21\x59\xe9\x09\xf0\x0d\xa1\x7c\x17\xfa\x7d\x1d\xf5\x98\x37\xd2\x32\x83\xad\xe5\xd6\xf6\x36\x97\x92\x64\xb3\x36\x42\x22\x7b\xc9\xa6\xab\xbc\x52\x1f\x2f\x97\xa2\x46\xc3\xc7\xbb\x1f\x2c\xfa\x12\x35\xb9\xc9\xd8\xc5\xa8\xc9\xcf\x95\x45\xff\xe5\xc5\xbe\x95\x2f\xb1\x6f\xf1\xd8\xc1\xd8\x37\xdd\x69\xab\xea\xbd\x7e\xc0\xb0\x40\x7f\x92\x63\x2b\x89\xf9\x1a\x09\x2d\xbd\x3d\x3a\x3f\xeb\xbd\x7a\xa1\x18\x94\x3f\xa6\x95\x1e\xad\x52\xac\x7c\x50\x8c\x53\xe3\xbc\x42\x45\x8d\x61\xf3\x3a\xa1\x7f\xf2\x4b\xe8\xdb\x9d\xf1\x12\xfa\xf6\x1b\x0a\x7d\xdb\xe5\x78\x90\x59\x33\xa7\x62\x68\x99\x03\xc4\xcd\x75\xc2\xcf\x97\x84\xbc\x11\x71\xe4\x3c\xe9\x06\x62\x61\x42\x28\x57\xd9\x08\xfe\x73\xc3\x5a\xdb\x74\x90\xdc\x77\x20\x72\x07\xe0\xd8\x9d\xe3\x42\x85\x66\x89\x69\x14\xf2\x4e\xc1\x25\xb7\x97\xe1\xe8\x3c\x9d\x4f\x3b\x32\x58\xbc\xe3\x4a\x32\x33\x86\x3a\xd7\xf9\x92\xce\xd5\xb1\xc2\x39\x43\x1a\xad\x2a\x79\x9b\xe6\xcf\x8b\xf5\x08\x8b\xa2\xf6\xdd\x5d\x5d\xf3\x31\x23\x73\xae\x94\x54\x2e\xb6\x28\x7e\x7d\x4c\x94\xe0\xd3\x99\x61\x0a\x6d\x5a\x18\xce\xdd\x9f\xd4\x5e\x32\xe3\x6e\x01\xdc\x22\x23\x09\x15\x58\xb6\xce\xfe\xbf\xcf\xcb\x86\xad\xf1\xec\x74\xcc\x66\xf4\x86\xcb\x26\xa1\x3c\xcc\x25\x0a\x07\x7b\x6e\x4a\x10\x7c\x17\xb2\x09\xd1\x03\x0d\x54\x53\x0a\xa7\xa0\xef\xe2\x41\xef\xa5\x3f\xb4\x93\x82\xa1\xb3\x94\xde\x7d\x38\x64\x9f\xb8\x36\x77\xf7\xdc\xa3\x80\x8b\x56\xd9\xca\x65\xbe\xd1\xb5\x15\x6d\x7f\xe8\x5d\xe1\xb0\x5b\xdd\x30\x9e\xad\xab\x09\xdf\x5c\xc2\x57\x0f\xe9\xc1\xae\xb6\x3f\x96\x6d\x4d\x28\x79\xb5\xe5\xc4\x49\x7c\xcb\xf3\x7e\x8e\xb3\x2f\x4d\x11\x7f\x51\xc2\x77\x4a\x09\x0f\x01\xd4\x15\x2f\x16\x67\x27\x79\x83\xb2\x71\x4e\x2f\x34\xe9\x10\x90\x6d\x3f\x27\xdf\x52\xcd\x4a\xf2\x9e\x0a\x3a\x45\x73\xf9\xc1\xe5\xf9\xb7\xef\x0f\x2d\xc2\x83\x2b\xe0\xec\x64\x65\xd4\xf6\x65\x3c\xf9\x87\x6d\x15\x3e\x25\xcb\x5b\x97\x4d\x4e\xbd\x33\x6b\xcf\xed\xdb\x5a\x4d\x58\x12\x44\xb0\xf3\x04\x17\xd4\x8a\x3a\xb9\xe7\xcb\xed\x2e\x30\x4c\xda\xf7\x26\xd2\xcb\x5c\xe5\x66\x5e\x5e\x3f\xe5\x06\x44\x2e\xee\x75\x6f\xb9\x59\xb8\xcb\x06\x21\x2d\x9d\x2d\xb9\x34\x8a\x1a\x36\x5d\x9c\xb0\xba\x92\x0b\x8b\x00\xe7\x91\xc7\x1d\x1f\x1d\xa3\x44\xa5\xc6\xb4\x20\xaa\xa9\xa0\x9a\x70\x79\xa7\x97\x8e\x60\xac\x6c\x29\x24\x17\xda\xd0\xaa\xb2\xef\x0e\xf3\xaf\x85\x68\x63\xbe\xba\x29\x07\x1d\x22\x9c\x0f\x3e\xd5\xed\x25\x67\x6f\xc9\xda\x9f\x6c\xce\x43\x61\xf9\x87\x71\xf6\x31\x21\x4c\x1b\x07\x2b\xf5\xe1\xb5\x48\x0c\x2e\x9a\xca\xf2\xb6\xaa\xec\xf6\xde\x43\xc9\xd3\xa1\x02\xd6\x3b\x06\xd2\x61\x5f\x72\x40\xc6\x8d\x15\x4b\x99\xee\xf8\x30\xa3\x9f\x6f\xb4\x3e\xb6\xf7\xbb\x9d\x61\xc0\x9e\x9d\x98\xd0\xba\xae\x38\x26\xa7\x4a\xe5\xa2\xe7\x22\xef\xd2\xdd\xc7\x36\xa1\x52\x8f\x94\xe0\x1e\x27\xb1\x0d\xc9\x0d\x53\xe3\x4d\x4c\x36\x8f\x15\xc6\x68\xcd\x21\x0e\x61\x63\xd9\xad\xaf\xbc\x75\x74\x7e\x86\x0b\xad\xf2\xf7\xf9\x2f\x11\x21\xdc\x51\x7b\x4f\x3c\xe6\x91\x38\xd3\x66\x68\x87\x70\x74\x7e\x86\x5d\x46\x5c\x47\x84\xd6\xdc\x69\x15\x37\x8a\x59\x53\x6d\xc3\x32\x3a\xb5\x33\x1a\x22\x05\x7b\x4c\xeb\x2b\x0b\x01\x13\xcd\x9c\x61\xb7\x85\x00\x0c\xe1\x02\xd6\x09\x50\xb4\x56\x55\xab\x14\x5b\x1d\x79\x6f\x2f\xd6\x28\x30\xab\x5f\x45\x70\x03\xa9\xdb\xfb\xaa\xf3\x94\xa5\x6b\xed\x8b\x6d\xca\x1c\x1f\x1f\xae\xf8\xc8\xf0\xc4\x47\x73\x5b\x21\xc5\x85\xdb\xaa\xef\x2f\xde\x3d\x39\x6e\x7d\xe8\x2e\xe7\xca\xd5\x33\x68\x29\x55\x53\x65\x38\xad\x48\xa3\x2a\x1f\xd2\x83\xb9\xe7\x2e\x0b\x67\x46\x6f\xa2\x56\x00\x23\x42\xbe\x42\x84\x72\xe7\x88\x54\x08\xcc\x5a\xae\x35\xc6\xa4\xa9\xaa\x01\x99\x70\x41\x2d\x0f\x62\x35\x89\x02\x2b\x36\x86\xf8\x92\x8b\xc2\xaa\xf8\x62\xe8\x51\x8a\x00\xe4\x5e\xf1\x0f\xe4\x08\xe2\xa2\x40\x29\x61\x55\x09\xed\xd4\x00\x14\x4b\x9a\x0a\xb0\xec\x4d\xa4\x22\xc7\x55\xa3\x0d\x53\x17\xd2\x72\xd0\x36\xc4\x1b\x0b\x33\xd3\xf8\xeb\x6f\xb9\x28\x1f\x95\x7d\x70\x01\x5c\xb9\xa0\x82\x30\x0e\x96\x5e\xbb\x34\xc4\x20\x5a\x3c\x6d\xef\xc3\x81\x6e\x8a\x99\xdd\xa2\xbd\x5a\x96\x7a\xcf\x12\xd6\x3d\xf4\x7e\xe8\xbd\x43\xfb\xd7\xf2\xbb\x62\xc4\x74\xf4\xbb\x57\xb4\xe6\x7b\x87\x03\x02\x1b\x0e\x01\x31\x72\xf3\x08\x98\xdd\xbb\x02\xfe\x5d\xc1\xce\xd2\xeb\x02\x5c\xc4\x33\x00\x4e\x8b\x36\xfc\xe4\x76\xc6\x0d\x86\xb7\x5b\x24\x47\x03\x6c\xa8\x9c\xbe\xcc\xbe\x08\x39\x12\x84\xcd\x6b\x03\x3e\x3c\x32\x67\xd4\x87\xb7\xb1\x1b\xa6\x16\x66\xe6\xea\x20\x7b\xda\xf5\xec\x37\x3d\x6d\xc3\x1d\x01\xf1\x9b\xdb\x22\x39\xdc\xc4\x3b\x9b\xbb\xff\xd5\xfe\x32\x0d\x6f\x99\xd6\xb3\xdd\x4a\x10\x38\x7a\x6d\xe3\x0f\xf6\x97\xdd\x2d\xc4\x8f\x90\xfa\x06\xfa\xf1\xee\x9d\x73\x2f\xe3\x5e\x7d\xc7\x45\xa9\x3d\xef\xf7\x09\xab\x6e\xbf\x57\x6e\x32\x40\xf8\x1c\x37\xf8\xae\x6e\xb0\xa9\x3c\xbf\x66\x7a\xaf\x0e\xdd\x37\xd5\xda\x09\x9c\x4e\xf5\x5e\x96\xab\xaf\x4e\xe7\x7c\xcf\xa2\x87\x43\x00\x5c\x6b\xc8\x72\x73\x39\x01\x7f\x51\xaf\x54\x96\xd6\x1f\xc7\x9a\xad\xbf\x0f\x92\xd6\x12\x03\x74\x32\xfa\x06\xcc\x7a\xd8\x22\x99\x4c\x2a\x3a\x6d\xd1\x08\xa8\x1e\x0a\xa0\xc7\x97\x3f\xf8\x57\xd0\xe4\x9e\x72\x80\x0f\x4a\xf8\x0f\xc9\xf4\xc3\x76\x97\xee\x7d\xc2\x2e\xb2\xf2\xcb\x87\x05\xfb\x30\xf9\xfd\xd8\xb4\x49\xc8\x85\x59\x6b\x8c\xbd\x6f\xff\xbd\xf1\x94\x46\x98\xe0\x1b\x87\x78\x8d\x1d\xa2\x99\x41\x5e\xb9\xfc\xa1\x83\x26\x0f\xc0\x7b\x0f\xd2\x5e\xb3\xc5\xad\x54\xab\x5b\x28\x77\xc0\x3c\x0a\x74\xc8\xff\xc4\xeb\x9c\x3e\x0e\x03\x0d\xae\x72\xa5\x27\xa7\x37\xaa\xae\x05\xbe\xa2\x63\x56\x3d\x0c\xfa\x3d\x42\xf0\x7b\x5a\xdb\xd7\x69\x53\x82\xd0\x70\xe2\x02\x3c\x50\x89\xc2\x38\x72\x9f\xf1\x20\xd5\x94\x0a\xfe\x0b\xe6\x51\x15\x96\x52\x48\xc5\x7f\x59\x8d\x6a\x07\xe8\x81\x44\x53\x4c\xc5\x0a\x73\xe8\xb0\x7e\x25\xb5\x7d\xe0\x5a\xd0\xb2\xe4\x28\xb3\x9c\x3f\x80\xc1\xeb\xf7\x8b\x8b\xeb\xc7\x9c\x34\x3c\x8f\x61\xdc\xb8\x01\x4f\x7c\xcc\x6b\xc8\xc2\xc3\x37\x77\x7d\x04\xcb\x06\x9c\xa5\x51\x6b\xa2\x9b\xd7\xfe\x7e\x4e\x39\x32\xdc\xd5\xfd\x18\xee\xd9\x5d\x87\x4d\xd4\x09\xa3\x96\x96\xda\xf7\x0b\xb3\x7d\x86\x7b\x95\xb4\xe1\x6c\x4e\x79\xdf\x1d\xc3\x91\x70\x64\x73\x6a\x1a\xc5\xcd\x4a\x4e\xbd\xfe\x87\x5c\x7c\xd7\x8c\x99\x8b\xac\x79\xf4\xcf\x05\x64\x34\x1c\x9d\x9f\xad\xdc\x96\x3c\x1c\xf9\x5e\xa5\x1d\xcc\x3b\x0e\x72\x2b\xe9\x91\x46\xd0\xf9\x98\x4f\x1b\xd9\xe8\x6a\x11\xdb\xc8\x29\x44\x0c\x8d\x08\x39\x43\xeb\x9f\xd8\x37\x84\x0a\x29\x16\x73\xf7\xa8\x28\xaa\xa6\x64\x9d\x19\xef\x63\x65\x92\xd0\x1b\xc9\x4b\x42\x1b\x23\xe7\xd4\xf0\x82\x14\x92\xa9\x02\x4a\xc4\xc5\xf3\x37\x9a\x11\xda\x99\xb1\xfd\x6d\xd1\x68\x23\xe7\x64\x4e\x95\x9e\xd1\xaa\xba\x0f\x25\x32\x48\x07\xeb\x9a\xe6\x0e\x61\x57\xee\xfd\xf2\x66\xcd\x3e\x3c\x7c\x1d\x1e\x68\x4b\xbc\xc1\x75\xb0\xc0\x25\x4d\x70\x73\x3f\x52\x6f\x30\x87\xab\xef\xb7\xb2\x56\x76\x07\x3f\xaf\x66\x8c\xd4\xcd\xb8\xe2\x1a\x74\x5e\x20\x5c\x0b\x32\x66\x33\xee\xb2\xb0\x1e\xa6\x58\xf7\x1e\xf1\x43\xfb\xbc\x8e\x64\x3c\xb8\x43\x6b\x28\xfc\xda\xdf\x3a\x0e\x78\x36\xa7\xd3\x0d\x44\xfb\x7b\xae\xef\x3b\x4b\xf6\xa9\x58\x04\x7e\x0a\x4d\xac\xf4\x80\x48\xe5\xe2\xff\xbc\xda\xa6\xdc\x57\xa1\x43\x9c\x22\x1f\xdd\x8e\xba\xbc\x3b\x77\x0d\x20\x8b\x95\xa9\x89\x54\x73\xbb\xef\x5c\x91\x49\x23\xc0\x68\x7b\x8f\x4a\x07\x11\x47\xc0\x7f\x9c\xe1\x8e\x56\x5a\x06\x62\x00\xc7\x26\x3c\x60\x84\x6a\x72\xcb\xaa\x6a\x44\x8e\xaa\xca\x75\xdc\x8a\x8a\x52\xb6\xc5\xcd\xda\xc0\xa7\xf1\x6a\xb5\xb0\xe4\x53\xa6\x0d\x39\xb8\xfc\xf7\xa3\x43\x10\x88\xc0\x30\xb5\x20\x86\x4e\x47\x08\x52\xd7\x30\x07\xe2\x56\xd9\x80\x58\x56\x50\x43\x2b\x39\xc5\x78\x19\x4b\x52\xec\xef\xeb\x8a\x2e\xa0\x43\x76\x4d\x15\x24\xb8\x14\x68\x9c\x23\xaa\x11\xf7\xb5\x78\x7c\x3a\x4e\xf9\x30\x4d\x5a\xd7\x52\x71\x08\x28\xdd\x93\xe6\x3c\xd0\x9f\xed\x69\x59\xb0\x62\x75\x45\xef\x31\x13\xdd\xa1\x17\x6d\x69\x2d\xab\xb7\x80\x4d\x42\x0a\x16\xe6\x18\x91\x4b\xc4\xa7\x39\x35\x05\x46\x00\xfc\x34\x67\x86\x96\xd4\xd0\x91\x55\xee\x7f\xea\x96\xe0\x90\x55\x69\x27\xba\xff\xa0\xef\x81\x19\x45\x71\xf9\x30\x8d\x7b\x67\x55\x8b\xf0\x38\x28\x5c\xfe\xde\xae\xb5\x4b\x25\x92\x37\x78\xfd\xd3\x4f\x56\xb7\x5e\xeb\x71\xee\xc0\xba\xfc\xa3\xae\xd9\xa8\xea\xbe\x89\xc3\xd6\x39\x13\x46\x8f\xe0\x68\xe2\x4f\xc0\x76\x7e\xf4\xe1\xe4\x7e\xfb\xe5\xc3\x36\xa0\x07\x6c\x3e\x9b\xfb\x27\x8e\xd6\xc0\xee\xdd\x13\xee\x9b\xae\xcb\xcb\x27\x62\x43\x99\x0f\x4c\x0e\xa6\x22\x70\x25\x78\x78\xcd\xb2\x78\xce\x6d\xa9\x80\x56\x29\xbc\xdf\x4e\xb6\x91\xe3\x72\x13\x77\xe5\x43\x95\x1b\x86\xe1\x35\xee\x7d\x68\x33\xef\xe5\x83\xd5\x15\xee\xab\x9e\x80\x67\x02\x69\xbb\xde\x54\x1e\x8e\x61\x53\x6f\xef\x86\x76\x3e\xff\xaa\x8f\x00\xf4\x41\x87\x57\xc0\x82\x4e\xa4\xe2\x35\x5b\xec\x3b\x4d\xd7\xde\xa0\x19\xaf\xb1\x3e\x88\xf3\x7f\x3d\x74\xfc\x38\x7e\xa0\x15\x2f\xc3\x02\x78\x97\xce\xc4\x80\x7c\x90\xc6\xfe\x73\xfa\x89\x6b\x83\x36\x86\x13\xc9\xf4\x07\x69\xe0\x93\x2c\x3b\x85\x00\xe6\xdc\x27\x67\x06\x41\x8f\x09\x5c\xf7\xc8\x58\xe2\xf6\x03\x2b\x44\xb7\xf2\x9e\x7d\xfa\x4c\x58\x81\x06\x5f\xf9\x81\x25\x42\xd1\x21\xed\x16\xf0\x19\xbe\x42\x8a\x21\x78\x5a\x56\xae\xe0\xf6\x51\xaa\xce\x36\xf6\x5e\xcc\x2d\x84\xc1\xd8\xf0\x0d\xd7\x9e\x2f\x05\x31\x84\x7a\xd3\xf0\x83\x59\x0e\x73\xa6\xa6\xe0\xc7\x2c\x1e\xf0\xbb\x6d\x6a\x4c\xdf\xc8\x84\xfe\x20\x9a\x00\x8f\x78\x77\xaf\xbd\x8c\x3c\x02\x3f\xa2\xa9\x90\x0a\xcf\xd1\x90\xf6\x5f\x96\xd8\xc2\x16\xff\x37\x14\xd0\xd2\x23\x72\x44\x34\x17\xd3\x8a\x75\xbe\x73\xae\xde\x68\x9a\x35\x4b\xd5\x76\x09\x4b\x37\x6f\x68\xc5\xb0\x4d\x32\x15\x21\xf5\x5e\x4e\xee\x30\xbf\x81\x2b\x94\x65\x09\x54\x10\x2b\xf7\xae\xd9\x62\x6f\xb0\x36\xc8\x3e\xc6\xb0\xbd\x33\xb1\xd7\xd6\x94\xe8\x60\x4d\xe0\x31\x20\xa9\xee\xc1\x77\x7b\xfd\xf9\xe8\x5a\x8e\xb1\xb9\xd5\x8f\x3c\x8c\x02\x8f\xcb\xdc\xd1\xd7\x7c\x75\x34\xcb\x26\x48\xe2\xe5\xbd\x03\x7d\x08\x76\x2e\xc1\x08\x14\x3d\x51\xe0\x22\xb0\x9f\xc6\x15\x3c\xad\x06\x71\xcd\xeb\xba\x2d\xaf\xda\xd4\x53\x45\x4b\x46\xa6\x8a\xd6\xf7\x5c\xa2\xc7\x49\x8b\x28\x72\xae\x5a\x72\x8d\x9a\xb4\xfb\x3a\xc9\x3d\x67\xbd\xc6\x0a\xb0\xf6\x77\xb7\x6c\x3c\x93\xf2\x1a\xca\x2b\x00\xde\x3d\xa1\x89\xeb\x47\x5c\xeb\xa4\xfd\xcc\x9b\x1f\x34\x29\x99\xa1\xbc\x82\xc8\xb2\x8f\xef\xde\xbb\xd8\x33\x2f\x3b\x79\x28\x57\xd3\x8c\x0c\xba\x1a\x2d\x5d\x78\xe5\x05\xbb\xe1\xec\xd6\x59\xb2\xee\x23\x51\x43\x32\x65\x02\xe2\x9a\xd6\x44\x27\x0e\x89\xe6\x25\x3b\x85\x22\x38\xf7\x4f\x94\xe0\xb4\xba\x07\xe6\x87\x68\xc5\x7a\xde\xf3\x20\xdf\xd9\x40\x34\x09\x16\x8d\x73\xa9\xd6\x54\x12\xde\xac\xac\xce\x66\x25\x73\x5c\x16\xd0\x1b\xf2\xcd\x37\xff\xb2\x86\xaf\x7c\xe2\xf3\x66\xfe\x86\xfc\xe9\x8f\x7f\xfc\x97\x3f\xde\xff\x18\x17\xf8\xd8\xd7\xf7\xbf\x9f\xbb\x6d\xc7\x17\x27\x3b\xb0\xdf\x65\x08\x13\x5e\xef\x10\xdf\x60\xaa\x09\xe5\x55\xa3\x5c\x80\xfa\x86\xda\xdc\xdb\xf8\x37\xe0\xcc\x6c\x93\xf2\xa8\x9f\xd1\x87\xa7\xba\xb0\xd5\x09\x17\x4c\x43\xa3\xfc\x46\x28\x56\xc8\xa9\xe0\xbf\xb0\xd2\xf7\xc9\x87\xe0\x2b\xe8\x1d\xea\x51\x9c\x30\x51\xd6\x92\x0b\x03\x2c\x76\x46\x45\x59\xad\x0b\xb6\xd9\xe0\x4d\xe3\x1b\x9c\xb4\x65\xc0\x8d\x1e\xb5\x61\xef\xdb\x5f\x2c\x6d\x97\x7d\x67\xef\xfa\x45\x2e\x87\xdb\x96\xf4\xa6\x48\x18\x2f\xd7\xd8\x40\x56\xc0\xf8\x38\x15\x1d\x4d\x0f\xf0\xd9\xcf\x0d\x53\x0b\xc8\xfa\x6b\x15\xa9\x28\x10\xf5\xaa\x2d\xd7\xe5\xdf\xd1\x09\x95\xf4\x5e\x1b\x3d\x59\x61\x22\x89\x44\xad\x36\x42\x6b\x09\x2a\xf8\x0d\xc3\x88\x17\xef\x85\x25\x47\x44\x34\x55\xb5\x66\xa5\x7b\x26\x11\x72\x9d\x27\x17\xc7\x46\xf6\x80\xcd\x14\xf5\x4d\x4d\x42\x38\xb6\x67\x18\x8a\x5f\x3c\x93\x56\xf3\xd8\x50\xd6\x2d\x19\x8c\x70\xf4\x31\x1b\xe1\x78\x44\xd4\xfb\xe6\x11\xef\x9b\x95\x00\xdd\xc0\x9c\x84\xe3\x31\x21\xf1\x1b\x16\xee\x7c\x4a\x03\x13\x8e\x47\xc5\xeb\x6d\x66\x6c\x5a\x01\xfa\x86\x31\xd6\x4f\x68\x78\xc2\xf1\x14\xe6\x27\x1c\x8f\xda\xc7\x4d\x4c\x51\x38\xfa\xec\xe2\x67\x30\x4b\xb9\x77\xfe\x9c\xc6\xa9\x07\x96\xcc\x6c\xa2\xc2\xb1\xb1\xa1\xca\x01\xf7\xa8\xd8\xcf\x47\xc4\x7d\x6e\x88\x5c\x1b\x18\xb0\x70\x3c\x0e\xab\x3e\xa3\x31\xcb\x2f\xf8\xd9\x4c\x5a\x38\x3e\xb7\x61\x0b\xc7\xc6\x3c\xed\x71\x46\xae\x78\xf2\x07\x50\xa6\x4f\xa9\x1a\xc5\xb8\xb8\x91\xd8\x14\xed\x51\x82\xfc\xc5\x9d\x1f\x2e\xc9\xf3\xb7\xc0\xca\x9c\x40\x1f\x34\xa0\x58\xaf\x99\x49\x79\x4d\x1a\xfd\xb0\x97\x69\xed\x7b\x3f\x90\xd9\x98\x45\x11\x7d\xcc\x0d\xbb\x68\x2a\xf6\x23\x37\xb3\x8f\xbe\x59\xa4\xbb\x66\xa6\xa9\x2b\xd8\x8b\xe8\x0b\x8b\x97\x17\xad\x82\x70\x66\x90\xcc\x15\x72\x3e\x67\xa2\xc4\x08\xc4\x39\xbd\x5e\x8f\xf0\xda\xaa\x98\x18\x24\x5f\x55\xa8\x46\xc1\x52\xec\x53\x4d\x45\xab\x30\xdc\x58\x66\xb9\x0e\x85\x37\x44\xe0\x4d\xe5\xa2\x8d\x53\x04\x1f\x2d\xf3\x2e\xa7\x04\x46\x39\x7d\x9d\xd4\x3f\x32\x66\x95\x84\xaa\x30\x98\x08\x80\xa9\x2a\x1b\x67\xc9\x9d\x4d\xfc\xaf\x9c\xf4\xe2\x7a\x43\x30\x31\x6d\x8b\xfb\xea\x8a\x17\x2c\xb0\x2d\x29\x36\x48\x4d\xbf\x70\x12\xed\x66\x42\xf2\x26\xfc\x67\x43\xde\xf3\x08\xa1\xa6\x43\x4a\xac\xfa\xb4\x79\xd9\xab\xb6\x88\xd7\x53\x9c\xbc\x9f\x3a\x3e\xfb\x1b\xff\xd9\x26\xa7\xef\x1f\x7e\x39\xff\x75\x23\xe1\xfc\x43\x93\xdc\xec\xc7\xdf\xa5\xa8\xad\x1c\x1a\xce\x7e\x89\xb5\x14\x54\x59\x66\x0f\xd6\xf4\x21\x39\xbe\x38\x3d\xba\x3a\x1d\x90\xef\xcf\x4f\xe0\xdf\x93\xd3\x77\xa7\xf6\xdf\xe3\x8f\x1f\x3e\x9c\x1e\x5f\x59\x01\xf6\xab\x07\x41\x80\x6e\x97\x55\x85\xa7\x6f\x25\x14\xd9\x25\xe6\x54\x2c\xc8\xa4\x31\x96\x22\xb7\xc0\x74\xa0\xa4\x68\xc6\xa3\x65\xb9\x49\xc6\xdc\x17\x87\x83\x9d\x33\x0f\x07\xba\x6c\x39\x8d\x5b\x2d\x63\x83\x51\x97\x92\xfd\xf0\x9b\x7d\x1e\x24\xdf\x38\x63\xf0\xb1\x38\xde\x2f\x99\xf0\x77\xbf\x7b\x70\xe2\xb7\x52\x11\xf6\x89\xce\xeb\x6a\x83\xb4\xb1\xfd\x5a\x96\x7a\xdf\x65\x7c\xda\xff\x7f\x78\xdf\xe1\x27\xaf\x2a\x39\xdd\x0f\x89\xa2\x8c\x54\x72\x4a\x74\x33\x0e\x09\xbc\x20\x09\x6e\x34\xdb\x57\x7e\x9a\x4e\x5e\xe4\x20\x64\xf9\x46\xb3\x6e\x0c\x5c\x67\xce\x78\x82\xc7\xc0\xf5\x4a\x17\xb4\x62\x9d\x99\xec\x07\x8f\x05\xe8\xab\x57\xab\xdf\xd0\xab\x2a\x5c\x2d\xcd\xf8\xf0\x09\x9f\x4d\xc8\x2d\xaf\xca\x82\xaa\xf2\x0e\xc1\x00\xe1\x0f\xef\x13\xe0\x0e\xb6\x63\x12\x20\x3a\xb6\x6b\x63\x31\xb7\x87\xed\x46\x37\x4c\x55\xb4\xc6\xec\x38\xe8\x23\x06\xd1\xbc\x9b\xc0\x78\xc2\x6a\x06\xa9\xe4\xd8\x3b\x85\x11\x26\x8a\x4a\x42\xb9\x3a\x14\x3c\x07\xdd\x83\xc1\xe0\x5f\xdf\xe7\x60\xd3\x3c\xe3\x2f\x9c\xc3\x42\x9e\x55\x6e\xc2\x83\xc9\x5b\xf7\x96\x94\xf4\x19\xb5\x0f\xce\x83\x36\xb9\xa0\x68\x33\xb2\xe7\xea\x08\xec\x0d\xc8\x5e\xa8\x1e\x58\x3a\xa5\x7c\xef\xab\xbd\x07\x67\x0c\x13\xc4\x19\xe8\xa0\xb3\xbb\x80\x83\x21\xc0\x19\x97\xd9\x00\xf4\xf6\xa1\x12\x1b\x83\xde\x56\xd6\xb4\x52\xa5\xf3\x78\xc0\x3b\x74\x17\x7a\x78\xa6\xf8\x45\xef\x40\xdd\x16\x69\x48\x86\x78\xef\xab\xce\xf4\x06\xaa\x44\x61\x31\x08\x77\x78\x8a\x59\x6c\x5c\x17\x21\x1f\x8f\xcb\xce\xdd\x0b\xa1\x26\x71\x69\x51\xae\x48\x4d\x15\x13\x26\x00\xff\xf0\xb4\x51\xbf\xee\xbd\xaf\xf6\x36\xbb\x95\x6b\x2f\x51\x14\x5d\xb0\xa1\xb9\xe2\x32\xfc\xe2\xb8\xa2\x5a\xaf\xf0\x3b\x02\x17\xb0\x13\x13\x86\x33\x13\xea\x43\x2f\xa0\x83\xdc\x8c\xde\xac\x79\xd5\x0d\x80\x36\x54\x4d\x99\x59\x1f\x17\x40\xc5\xe2\xe3\xda\xb2\xe4\xc3\x8d\x3b\xf2\x0c\x7b\x18\x8d\xb8\x30\x43\xa9\x86\xf8\x93\x37\xc4\xa8\xe6\x3e\xd3\x83\xe1\x73\x26\x1b\x73\xc9\x0a\x29\x56\xe7\xd2\xba\xe7\xb2\x05\x3a\x3c\x22\xc1\xd8\xc5\xda\x1c\x79\x09\x3c\xee\x95\xe0\x2d\x52\xad\x78\xee\xe3\x6b\xba\x55\x15\x3f\xbe\x7b\x9f\x72\xd8\x04\xea\xff\xac\x3f\xc9\x1f\x1c\x53\x16\xd3\x00\xa9\x83\x7c\xed\xcf\xde\x37\xe6\xf1\x3f\x3a\x0e\x71\x1b\xeb\x9f\x76\x9b\xb1\xbe\xc2\xdd\xbd\xef\xaf\x0d\x35\xcd\x1d\x6c\x78\x88\x15\x39\xfa\x7e\x89\xf5\x0d\x9c\x86\x7f\x09\x53\xc5\xae\xa3\xb8\x02\x18\x2a\x75\x58\x3d\x10\x9e\xf3\x89\x16\x23\xe2\x7e\x68\xaf\xac\x51\x94\xa3\x45\x8c\x16\xa6\xa1\x77\x3d\xdf\xf6\xc7\x2e\x49\x63\x75\xc9\xcc\x35\x36\xb1\x75\x76\xb0\x82\x29\xa3\xdf\x51\x6d\xbe\xaf\x4b\x7a\x4f\x6a\xfd\x52\xf2\x85\x36\x70\xa7\x50\xad\xbd\x15\xac\xb4\x4c\xc8\x6d\x09\xce\x47\x6e\x2d\x75\x6f\x70\xc6\x15\x13\x3e\x80\x95\xfe\x8e\xd9\x9f\x0f\xed\x52\xab\xa1\xbe\x90\x76\x4f\x8e\x56\xd2\xa8\x6e\x8e\xcb\x43\xd0\x5a\x8e\xa6\x60\x36\x22\xd8\xa7\x55\x62\x65\x3a\xc4\x15\xa3\x62\x75\x0e\x62\x07\xd6\x63\x7c\xee\xf1\x38\xe5\x16\x20\xb7\x33\x6e\x35\x2e\x2c\x41\xa0\x89\x17\x62\x4b\x56\xb1\x7b\x2a\x11\x24\xa6\xc5\xb8\x15\x4e\xdc\x02\xa9\x11\xcc\xe7\xdd\xe9\x82\xe3\xd9\xa9\x97\x2e\x59\xb5\xd5\xd3\x9c\xec\x13\xcc\x15\xcb\x2f\x0c\xc2\xdb\xb8\x92\xc5\x35\x16\x34\x86\xba\x56\xfc\x17\xa6\xd6\x08\x19\xe0\xcc\xe3\xa2\xe4\x45\x88\x1a\xa8\x95\x9c\x2a\xa6\x3b\x5b\x8d\xc5\x2f\x35\xce\x6e\xd7\xb4\x7b\x1e\xd6\x95\xaa\x75\xef\x34\xc2\x55\x83\xf8\x3c\x99\x3b\x5e\x35\x87\xb4\xc6\x8e\x4b\xfb\xae\x96\x8e\xd5\x01\xa1\xb4\xbd\xb3\xd1\xd0\xb9\xcb\x3d\x7e\xf5\xdd\xfd\x19\xb9\x59\xd3\x6a\xd6\xe5\x05\xe3\x13\xb0\x7d\xa2\x58\x5b\x97\x72\x6d\x06\xf1\xa6\xde\x80\x07\x32\x85\xc9\xe6\xaa\x53\x00\x79\x93\xd9\xb2\xa6\x1a\x64\x8f\x56\xb9\x37\x0b\xb2\x1d\x8f\x89\x41\xd9\xb4\x9f\xc9\xa3\x42\x1b\xc4\x63\x7a\x1f\x74\x6e\x4b\xab\x4c\xb9\x92\x22\x18\xa6\x36\x91\xea\x5e\xb5\x2d\x1f\xf0\xeb\xf3\xca\x1f\x9c\xc8\xca\xb4\xf7\xc7\x83\x77\x19\xb7\xa7\xa0\xe1\x27\x03\x42\xc9\x8c\x6b\x23\x95\x0b\xd4\xb0\x0c\xd0\x28\x2a\x34\x7e\x7f\x2f\xaf\x48\x8d\x30\x3f\x0e\x20\x10\x5a\xd7\x8c\x86\x7e\xee\x8e\x9d\x41\x63\x75\xc5\x0a\xa9\xca\x95\x80\x79\x93\xcc\x4a\x71\x6c\xe5\xf2\x19\x4a\x6a\x54\x54\x9b\xab\x00\x83\x95\x29\x36\xa4\xc6\x5d\x89\xc9\xbd\x62\xfb\x36\xbe\x8c\xa1\x14\xed\x97\x92\x50\xe1\x2c\x55\xf7\x2d\xb1\x11\x7e\x3d\x2c\x97\xb4\xef\x86\x02\x60\xaf\xf7\xba\x0d\xc2\x5e\xf4\x8a\x9f\x07\xf2\x39\xd3\x7a\x6d\x9e\xf5\x52\x81\x17\x68\x1b\x43\x42\xdb\x18\xf7\x73\xcf\xec\x51\x70\xc0\x14\x07\x5f\x57\x77\x71\x3f\xaa\x11\x10\x13\xd0\x0c\x12\xae\x55\xd2\x91\xd5\x33\xaa\x37\x7d\x99\x70\x8b\x42\x2a\xcd\xc6\xd7\x61\x43\x68\x14\xa3\x7a\x5d\xc9\x8a\xc7\xc4\x22\x8f\x15\x67\x13\x72\x4c\xe7\xac\x3a\xa6\x3a\xe7\xce\x03\x79\x58\x67\xaa\x61\xa3\xe9\x88\xec\x5f\x44\x91\x32\x1f\xa4\x79\xcf\xcc\x7e\xbf\xbd\xd9\x8c\x10\x3c\x29\x09\x48\x56\x47\x1e\xbe\xf0\x89\x57\x3d\x19\xc2\x35\x17\x7b\x27\xae\xf4\xfa\x72\x2d\xf7\x5d\xe3\xee\x05\x6e\x14\x98\x27\x8b\xbe\x17\xf9\x81\x12\x10\xf7\x5d\xde\x4d\xae\xed\x96\x2e\xec\x63\xae\xea\x03\x6f\x1f\xa6\xb8\x5c\x69\xea\xb9\xb3\x11\x57\x1d\x75\x1a\x9c\x45\x71\x88\x3a\x34\x64\xb2\xd0\x1f\x5f\xfe\x90\x53\x30\xda\x6e\x59\x25\x77\xa8\xf7\x7e\xbf\x46\xf2\x1f\xae\xe7\xf3\xa9\x25\x9b\x4a\xf0\xbf\x59\x0c\xf8\x9c\x11\x73\x27\x7e\x55\x67\x80\x09\x8d\x3f\xe0\x2f\x74\xf0\x07\xc8\x3a\xf8\x71\x60\x24\xa9\x15\xbb\x81\x74\x06\x01\x69\x9a\x8c\x08\xa6\xed\x45\x39\x5c\xb3\xfc\x86\x2a\xdb\x66\xea\xda\xc3\xaa\xf4\x83\x6a\x32\x79\xf8\x68\xfd\x43\xeb\x0e\x18\xc7\xa6\x5a\xe1\x06\x5a\xf7\x23\xd4\xc1\x87\x75\xaa\x47\x4c\xf6\xa0\x80\xf9\xc8\xf9\x56\x1b\x9e\x97\xc7\x52\xa3\x11\xfb\x93\x0b\xa0\xe7\x18\x6c\x51\x58\xaa\x5c\x40\xfb\x19\x24\xf3\x8e\x3c\x75\x8d\xcc\x17\xcb\x34\x10\x42\xdf\xbb\x18\x9e\xeb\xb5\x9a\x86\xe7\xdb\xf3\x07\x6b\xa5\x6d\x3c\xdf\x0e\x14\x7e\x7b\x10\x81\x9e\xb6\x12\x14\x8e\x87\xb0\x6e\xfb\xf8\xb6\x49\x11\xd0\xb5\x38\xf6\x44\x35\xf8\x34\x53\x37\xac\xec\x78\x18\x5d\x1b\xa8\xee\x67\x91\x3f\xba\x9d\xdf\x6d\x3b\xf9\xaf\xff\xfe\xdd\xff\x0f\x00\x00\xff\xff\x53\xa3\xb6\xb2\x02\xf0\x0a\x00") +var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x77\x1b\xb9\x95\x2f\xfa\x7f\x3e\x05\x96\xd3\x73\x25\x4d\x48\xca\x4e\x26\xb9\x19\x9f\xb9\x93\xa5\x23\xbb\xbb\x75\xbb\x2d\x6b\x59\x8a\x73\xb3\x3a\x7d\xba\xc1\xaa\x4d\x12\xa3\x2a\xa0\x06\x40\x51\x66\x4e\x9f\xef\x7e\x17\x36\x80\x7a\xf0\x21\x91\x05\x48\x2a\xbb\x0b\x59\x2b\x6d\x91\x45\x60\x17\x1e\x1b\xfb\xf9\xdb\xb4\x60\x1f\x41\x2a\x26\xf8\x6b\x42\x0b\x06\x9f\x34\x70\xf3\x97\x9a\xdc\xfe\x59\x4d\x98\x38\x5d\xbe\xfa\xcd\x2d\xe3\xe9\x6b\x72\x5e\x2a\x2d\xf2\x0f\xa0\x44\x29\x13\x78\x03\x33\xc6\x99\x66\x82\xff\x26\x07\x4d\x53\xaa\xe9\xeb\xdf\x10\x42\x39\x17\x9a\x9a\x8f\x95\xf9\x93\x90\x44\x70\x2d\x45\x96\x81\x1c\xcf\x81\x4f\x6e\xcb\x29\x4c\x4b\x96\xa5\x20\xb1\x73\x3f\xf4\xf2\xe5\xe4\xd5\x1f\x27\x2f\x7f\x43\x08\xa7\x39\xbc\x26\x49\x56\x2a\x0d\x52\x81\x5c\xb2\x04\xdc\x63\x6a\x22\x0a\x90\x54\x0b\xa9\x26\x89\x90\x20\xcc\x7f\xf2\xdf\xa8\x02\x12\x33\xd8\x5c\x8a\xb2\x78\x4d\xb6\x3e\x63\xfb\xf5\x34\x51\x0d\x73\x21\x99\xff\x9b\x90\x31\x11\x59\x8e\xff\x76\xef\x6a\x87\xbf\xb6\xc3\xbb\x09\xc2\xef\x33\xa6\xf4\x77\xbb\x9f\xf9\x9e\x29\x8d\xcf\x15\x59\x29\x69\xb6\xeb\x45\xf0\x11\xb5\x10\x52\x5f\xd6\x64\x19\x32\x12\xb5\x6c\xfe\xdb\x3d\xc8\xf8\xbc\xcc\xa8\xdc\xd1\xdb\x6f\x08\x51\x89\x28\xe0\x35\xc1\xce\x0a\x9a\x40\xfa\x1b\x42\xfc\x58\xb6\xf3\x31\xa1\x69\x8a\xeb\x45\xb3\x2b\xc9\xb8\x06\x79\x2e\xb2\x32\xe7\xd5\xe0\xe6\x99\x14\x54\x22\x59\xa1\x71\x4d\x6e\x16\x80\xb3\x46\xc4\x8c\xe8\x05\x90\xf3\xeb\x8f\xd5\xa3\x84\xfc\x97\x12\xfc\x8a\xea\xc5\x6b\x32\x31\x0b\x30\x49\x99\x2a\x32\xba\x32\x24\x34\x9e\xb2\xab\xf9\xc6\x7e\xd7\xf8\x5c\xaf\x0c\xbd\x4a\x4b\xc6\xe7\xf7\x8d\xef\x5e\x62\x3f\x12\x96\x8d\x75\x6a\x0e\xff\x71\xe3\xf3\x7d\x87\xf7\xaf\x4f\xcd\xc8\x44\x2f\xa8\x26\x7a\xc1\x14\x11\x1c\x88\x84\x22\xa3\x09\xa8\x7b\x08\xda\xf2\x88\xa5\xe8\xc3\xe6\x17\x3b\x48\x6a\x76\xa9\xa9\x2e\xd5\xa4\x58\x50\xb5\x39\xc5\x57\x6b\x9f\x6e\xe9\xce\x3e\xb8\x7c\x45\xb3\x62\x41\x5f\xb9\x0f\x55\xb2\x80\x9c\xd6\x7b\x40\x14\xc0\xcf\xae\x2e\x3e\xfe\xe1\x7a\xed\x0b\xd2\x9e\x9d\xad\xbb\x9f\x30\x65\xa6\x0a\x19\x05\xf1\x9c\x02\xd7\x6e\x55\x00\xf9\x79\xeb\x6f\xae\x0b\x48\x7e\x9e\x6c\x50\x2e\xa6\xff\x05\x89\x6e\x7c\x2c\xe1\xbf\x4b\x26\x21\x6d\x52\x64\x26\xc8\x73\x9f\xb5\x8f\xcd\xfc\x37\x3e\x2a\xa4\x61\x0b\xba\x71\xe4\x6d\x6b\xb0\xbf\xd6\xe7\x6b\x6f\xfb\xcb\x78\xed\x5b\x42\xcc\x24\xb9\xb7\x4e\x0d\x2f\x04\x85\x3b\xd4\xed\x41\x48\xdd\xcc\xda\x9d\xcb\x94\xd9\x2e\x12\x14\x70\xcb\x1d\x71\x53\x71\xf7\x96\x93\x8d\xce\xcd\x14\x81\x54\x86\x45\x94\x59\x6a\x98\xe8\x12\xa4\x26\x12\x12\x31\xe7\xec\x9f\x55\xef\x8a\x68\x81\xc3\x66\x54\x83\xd2\x04\xcf\x35\xa7\x19\x59\xd2\xac\x84\x11\xa1\x3c\xdd\xe8\x3b\xa7\x2b\x22\xc1\x8c\x4b\x4a\xde\xe8\x11\x7f\xa2\x36\x69\x79\x27\x24\x10\xc6\x67\xe2\x35\x59\x68\x5d\xa8\xd7\xa7\xa7\x73\xa6\xfd\xf5\x90\x88\x3c\x2f\x39\xd3\xab\x53\xe4\xf4\x6c\x5a\x1a\xd6\x7b\x9a\xc2\x12\xb2\x53\xc5\xe6\x63\x2a\x93\x05\xd3\x90\xe8\x52\xc2\x29\x2d\xd8\x18\x5f\x86\xe3\x15\x31\xc9\xd3\xdf\x4a\xb7\x4d\xd4\xda\xc0\x5b\xcf\x03\xf1\x1c\xfa\xc0\xc5\x32\x1c\xdb\x6e\x4e\xdb\xa1\x7d\xd9\x7a\x4d\xcc\x47\x66\x1a\x3f\xbc\xbd\xbe\x21\x9e\x22\x77\xd4\x71\x89\xea\x47\xb7\xcc\x90\x5f\x2d\x33\xb3\x8c\xcf\x40\xda\x5f\xce\xa4\xc8\xb1\x57\xe0\x69\x21\x18\xd7\xf8\x47\x92\x31\xe0\x9a\xa8\x72\x9a\x33\xad\x70\x5b\x83\xd2\x66\x21\x37\x3b\x3e\xc7\xeb\x94\x4c\x81\x94\x45\x4a\x35\xa4\x9b\x8f\x5c\x70\x72\x4e\x73\xc8\xce\xa9\x82\x27\x5f\x3b\xb3\x46\x6a\x6c\x16\x64\xef\xd5\x6b\x0a\x0b\x9b\x3f\xd8\x38\xf5\x84\xf8\xdb\xfd\x90\xe5\xde\xc9\x68\x48\x0a\x49\x46\xa5\x15\x50\x88\x86\x2c\x23\xef\xbf\x7f\x47\x16\xe2\xce\x1c\x24\xc6\x95\xa6\x59\x86\x07\xd3\x09\x11\x1b\x5d\xe3\x1d\x90\x50\x4e\x72\xca\xe9\x1c\x08\x2d\x0a\x45\x66\x42\x12\x4a\xe6\x6c\x09\xdc\x33\x80\xf5\xb5\xd8\xf9\x7e\xbb\x38\x1b\xb1\x37\xd2\xd6\x5b\xd5\x7f\xeb\x08\x5e\xfb\x66\x17\xaf\x33\x6d\x43\x3e\x3b\x6c\x62\x4d\x3b\xab\xbb\xc0\x23\xc5\x49\xc9\x95\x96\x25\xee\x92\x94\xdc\xc2\xca\x9d\xae\x9c\x16\x44\x69\x61\x3e\xbc\x63\x7a\x41\x68\xf3\x64\x51\x8d\xc7\x65\xba\xf9\x5a\xa6\x29\xd0\x64\xba\x22\x46\x1a\x45\x76\xa6\x85\xc8\x90\xd7\x61\x7f\x86\xad\x11\x09\x5a\x32\x58\x02\xa1\x72\xca\xb4\xa4\x72\x55\xed\xad\xcd\x73\x70\xef\xfc\xe3\xbc\x34\x84\xa3\xdd\xb3\x47\xee\xdb\xd9\xc4\x5e\x27\x4e\x36\x4b\x2b\xf9\xb8\xfb\x44\x5f\x5d\xb8\x1d\x5c\x0b\xdb\xca\xed\x60\x50\xc4\xec\x54\x27\x16\x55\x52\x3b\x12\xe0\xb6\x66\x4a\x84\xac\xf6\x16\x99\xae\xb6\x8e\xd1\xd8\xea\x64\x0a\x86\x0d\x4a\xca\xcd\xd4\x6f\x3d\x42\x1d\x26\xf6\xbe\xcd\x68\x9a\xb8\xe3\xdb\x76\x7e\xb3\x6f\x2a\x25\xdd\x4e\x3d\x21\x4c\x43\xbe\xa3\x67\xb2\x3e\xcd\xcd\xf9\xac\x3e\x36\x04\x2e\x59\x0a\x66\x62\x35\x65\x76\x97\x19\x9e\x40\xa7\xa2\xd4\x76\x3e\xdd\x23\x29\x59\x32\x4a\xe8\x7c\x2e\x61\x8e\xfb\x7f\xe7\xb0\x0f\xcc\x89\x6d\xbb\x8f\x7d\xdd\xc6\x56\xa9\xb9\xf7\x09\xc3\x7e\xef\x7d\x80\x6f\x63\x1e\xcd\x07\x36\xe5\xe6\x76\x7b\x68\x0d\x6d\xa3\x89\x99\x13\x3f\xb5\x42\xde\xfb\xf0\x3e\x6b\x6b\xdb\x03\x2b\x6c\x5b\x7b\x9d\xd7\x08\x71\xdf\x4e\xcd\x99\xa9\x2f\x00\xc3\x39\xf0\xc1\x9a\xa5\x4f\x81\x14\x20\x67\x42\xe6\xe6\xf0\x70\x42\x49\x62\x45\xd9\x8a\x6f\x21\xc3\xe5\xc9\x7d\xd3\x49\xf6\x5d\x7f\xdb\xf6\xd9\x05\xb6\x8d\x49\x41\xf5\xe2\x81\xc7\xf6\x5b\x2a\xdb\x9a\x93\xf6\xe0\xc3\x0f\x30\xbe\x8d\xbe\xeb\x7b\x2b\x7a\xdf\x66\x1a\xa2\x77\x8a\x57\xd6\x3e\xbd\xee\xc3\xb9\xd7\xdb\x07\x7a\xf7\x0e\x94\x32\xf2\x02\x0a\xa1\x92\xde\x11\xe0\x89\x30\x3c\xe5\xff\xbd\x7e\x7f\x69\x47\xdf\xc6\x5d\x37\xdb\x85\x26\x2c\x2f\x32\xc8\x8d\x2c\x4a\x7e\x78\x47\xa5\x5a\xd0\x0c\xe4\x8f\x78\x2b\xfe\xf0\x57\x9e\xb7\x3f\x49\xe8\xee\x83\xdd\x6c\x46\xc8\x54\x90\x1a\xf6\x97\x42\x46\x57\x96\xb0\x14\x12\x91\x9a\x6b\x41\x48\x52\x18\x65\x21\x2f\x4a\x0d\x84\xda\x6f\xf1\x1d\x18\x9f\xef\x43\xf9\x41\xab\x41\x8c\x48\x95\x53\xfd\x9a\x4c\x57\xfa\xa1\xd3\x46\xc8\xa7\x71\xba\x2f\xdb\x69\x12\xf3\x30\xf3\xb1\x6d\x2f\x16\xd4\xec\xf8\xc1\xb7\x34\xf2\x36\x65\x1c\xe4\x95\x90\x7a\x1f\x3e\x69\x14\xbb\x39\x6c\x8a\xa3\xcd\xe6\xa7\x8c\x71\xfd\x87\xdf\xdf\xf3\x64\x0a\x45\x26\x56\x66\xff\x3c\x7c\x3c\xf7\x7c\x9f\xbd\x59\xc9\xbe\xfd\xed\xcb\x3e\xf6\xec\xcf\x9a\x06\x63\xf4\xb4\x4d\xfb\xec\xd4\x11\x8f\xf5\x6e\x95\x02\xfd\x6c\xf7\xed\xd5\x85\xb7\xf5\x7c\x80\x19\x48\xe0\x89\xe7\x73\xd5\x9f\x5a\x10\x4a\xbe\x2b\xa7\x20\x39\x68\x50\x0d\x4d\x60\x55\x80\x37\xac\x81\xfd\x81\x04\x49\x4a\xcd\x32\xf6\xcf\x6d\xe6\x88\x6d\x6f\x15\xfd\xa6\x7d\x40\xa6\xf2\x8f\x3d\x20\x59\xf9\xc7\x1e\x92\xaf\x6c\x3b\xe4\xea\x7e\x78\x17\xda\xd6\x5a\x27\x34\x82\x38\x8d\xa1\x5a\x99\xb4\xbd\x14\xd1\x39\xf9\xc3\xdb\x7c\x0b\xa5\x57\x68\x3c\x6f\x19\x9f\x77\x11\x4c\x8e\x77\xf9\x25\x26\x46\xe1\x9f\xa0\x49\xfc\x87\x1f\x27\xb6\xcb\x93\x09\x79\x9b\x17\x7a\xe5\xcd\x40\xec\x81\xce\x99\x22\x5c\xe8\x4d\x41\x30\xfa\x34\x2d\xb7\x1b\x21\x1f\x9c\xa9\xb3\xab\x0b\x6f\xde\x7e\xc2\xa5\x55\x05\x24\x3d\x10\xf4\xaf\x5b\x64\xb4\xc4\xfc\x19\x83\x2c\x25\xcc\xc8\xf0\x86\x58\x32\xcd\x44\x72\xeb\x2c\xf9\x1f\xde\x10\x25\x2c\xcf\x31\x8a\x9e\x91\xfc\x13\xc1\x55\x99\x03\x61\x0f\x31\x91\x41\xb2\x1f\x24\xfb\x66\x1b\x24\xfb\x41\xb2\x6f\x35\xeb\xa4\xeb\x03\x73\x5c\x23\x64\x27\x7b\xc4\xe7\x06\x06\x79\x5f\x1b\x18\x24\xb6\x81\x41\x0e\x0c\xf2\xa1\x8e\x1f\x7c\xcb\xbd\x24\xdd\x07\xfb\x7a\x88\x77\x0c\x9e\x83\xc1\x73\x30\x78\x0e\x5c\x1b\xae\x4f\xd7\x86\xeb\x73\xb8\x3e\xdb\xed\xb3\xbb\x3e\x07\xcf\xc1\xe0\x39\x18\x3c\x07\x83\xe7\xa0\xd9\x06\xcf\xc1\xe0\x39\x18\x3c\x07\x83\xe7\x60\x47\x1b\x24\xfb\x8e\x9d\x0e\x92\xfd\x20\xd9\xef\x6a\x83\xe7\x60\xf0\x1c\x0c\x0c\x72\x60\x90\x03\x83\xdc\xd1\xfa\xe8\x39\x48\x32\xa0\x7c\xbb\x3a\xbf\x96\xdc\x88\xcf\xa1\x00\xc8\x66\xcc\xa5\xf6\xb9\x5f\x93\x29\x2c\xe8\x92\x89\x52\x92\xbb\x05\x70\x9f\x97\x4a\xe6\xa0\x95\xd9\x05\xa0\x61\x9b\x06\xf8\x00\x7b\xbb\x9f\xa5\x8d\x09\x70\x3a\xcd\xb6\x76\xfc\x10\xf7\x72\xbf\xbc\xdf\x53\x32\x15\xc2\xbc\xdd\xe6\x8c\xa1\xf6\xe2\xb5\x81\x08\x49\x2d\xbb\x74\xae\xed\x89\x2d\xe7\x1f\xde\x3c\x6a\x3a\xcb\x6f\xb6\xf6\x72\x51\x0d\x4e\xd0\x87\x83\x79\x7f\xe6\xce\x33\x9f\xbe\xbf\xe3\x90\x62\x1a\xf8\x88\x30\x6d\x1e\x30\x9c\x85\x25\x4c\x67\xab\x8a\xbe\xcf\x3b\x51\xe6\xfc\xc3\x9b\xfd\xfd\x5c\x7e\x99\x76\x76\x1d\xd1\xa5\x35\x38\xac\x06\x87\x55\xd5\x06\xa9\xad\x63\xa7\x83\xd4\x36\x48\x6d\xbb\x5a\x7c\xa9\xad\xef\x0e\x9e\xc1\x2d\x43\x06\xb7\x8c\x7f\x6c\x70\xcb\x3c\xf8\xf8\xe0\x96\x19\xdc\x32\x83\x5b\xe6\xfe\x36\xc8\xaf\xae\x0d\xf2\xeb\x20\xbf\xb6\xdb\x67\x27\xbf\x0e\x6e\x99\x81\x41\x0e\x0c\xb2\x6e\x03\x83\x1c\x18\x64\xab\x7d\x8e\x09\x1d\x83\x85\x7b\xb0\x70\x0f\x16\xee\xe1\x02\x1c\x2e\xc0\xe1\x02\x7c\xa8\xe3\xc1\xc2\xed\xdb\x60\xe1\x1e\x2c\xdc\xad\x36\x58\xb8\x07\x0b\xf7\x60\xe1\x1e\x2c\xdc\x3b\xda\x20\xbf\x76\xec\x74\x90\x5f\x07\xf9\x75\x57\x1b\x2c\xdc\x83\x85\x7b\x60\x90\x03\x83\x1c\x18\xe4\x8e\xd6\x47\x0b\xf7\x03\x87\x77\x9f\x5d\xda\xb4\x57\x3b\xb1\xd9\x87\xba\x4f\xc8\x39\xe5\x84\xf1\x24\x2b\x53\xc0\x6f\x66\x40\x75\x29\x41\x8d\x48\xc6\x72\xe6\xab\x75\x08\x69\x36\xcd\x38\xa1\x0a\x94\xeb\x63\xeb\x50\x55\xbf\x5b\xbe\xbd\xff\x35\xef\xe7\x23\xf7\x56\x17\xab\xe2\xf6\x19\xf7\xfd\xb8\x6d\x75\x30\x19\x2c\xd9\x63\x9a\xcd\xf8\xe6\x41\x2c\xde\x62\x2b\xfd\x3c\xf8\xda\xbb\xb6\xe0\x3d\x5b\xee\xc1\xcb\xe5\xa1\x2b\x65\x4c\xa6\x54\xc1\x9f\xfe\x6d\xa3\xc6\x55\xf3\x91\x1c\x52\x46\xcd\x50\x5b\x9f\x78\xf8\x9a\xa9\x87\xd8\xbd\xc9\xf7\x38\x2c\x15\x19\x1d\x7b\x71\xf5\x6c\xba\x1e\x11\xb3\xef\xd2\x0b\xdb\xc7\xb5\x96\x54\xc3\x7c\xd5\x28\xdc\x84\xdb\xac\x16\x1a\xf8\x8e\x1a\x66\x5e\x03\xdd\x3a\xc4\xdd\x02\xa4\x3d\x62\xbe\x58\x90\xf2\x03\x31\x55\xe5\x0b\x75\xc9\xff\x78\x28\x01\xc8\x8f\xb3\xe5\xeb\x87\xd6\x77\x5b\x09\x25\xdf\xf6\xbd\x20\xfd\x7c\xbe\xb1\x1e\xb2\x37\x15\x12\xcc\xfa\x04\x17\x54\x9a\x8b\xc9\x7b\xd2\x50\x3c\xab\x9f\xde\xd9\xff\xda\xb2\xed\xba\xa3\xf6\x90\xd5\x1e\x96\xd1\xc6\x0d\x20\x9b\x5d\x5e\xbd\x7d\x44\x33\x57\x8d\xf1\x0a\x64\xce\x94\xda\x95\x15\xd5\x26\xfd\xa1\x5b\x6c\x8f\xdb\x6b\x4d\x66\xf6\xeb\xe2\xdf\xa8\x41\x4e\x25\x40\x5b\x2b\xcb\x94\x26\x44\x96\x99\x11\xa7\x79\x4a\x5c\xa1\x22\x42\x93\x44\x94\x5c\x13\x0e\x90\x62\x66\xd5\xd6\xed\xbd\xc7\xdd\xb7\x87\x04\xbd\xaf\xfc\x3c\xb6\x74\x3e\xf8\x94\x7b\x87\x33\xfb\x0a\x5b\xab\x64\x35\xdb\xfe\xf2\x36\x0e\xff\xb0\x10\x71\x88\x64\xb2\xb7\x5c\xd2\x45\x66\xbd\x12\x19\x4b\x56\x1f\xca\x0c\xc8\x42\x64\xa9\xc2\xa2\x6f\xe6\xf2\xac\x7c\xa2\x4d\x5d\xaa\xc0\xa7\xf1\x25\x47\x64\x5a\x6a\x92\x0a\xb0\x66\x43\x07\x2f\xd5\xfc\xf9\x5e\xe3\x5b\x4f\xf9\xdd\xc2\x56\x23\x34\x1d\x13\x5a\x14\x19\xa6\x4e\x0a\x23\x78\xdc\x2d\x58\xb2\xb0\x45\x58\x0b\x9a\xc0\xb6\xc7\xf6\x97\x4b\xf7\xd2\xd5\xc8\x41\xfa\x1a\xf1\x66\xef\xe9\x43\xbb\x8e\x1c\xa8\xb8\x11\x5b\x17\xec\x1b\x29\xca\x62\xcf\xc7\xbb\xed\x01\x62\x6b\x86\xd9\x81\xcc\x75\xa4\xd7\x44\x2c\xff\xa5\x73\x92\xdb\xa5\x56\xce\x02\xeb\x3c\x32\x13\x4c\x7f\xcc\xcb\x4c\xb3\x22\xc3\x9f\x58\x08\x2c\x45\xa8\x84\xfa\x82\x1b\x11\xca\x57\xde\xe7\xee\x6a\x18\x42\x4a\xe8\xdc\xf4\xa8\xb1\x3e\xaa\x98\xed\x4d\xb5\x2d\x92\x58\xe6\x46\xfe\x6a\xd8\x80\x15\xaa\xfb\x7c\x55\x53\x41\xee\x58\x96\x19\xe5\x87\x66\x99\xb8\x83\x74\x42\x5e\xbc\x58\xbf\x80\x12\x21\x1b\x74\x23\xab\x7b\xf1\xaf\xad\xa7\x0c\x5f\xab\x5f\x6c\x3f\x45\xee\x50\x2d\x84\x1c\xa6\x89\x90\xc3\x75\x2e\x82\xaa\xd4\x6d\xe5\xa0\x1a\x67\x4c\xe9\xb1\xa3\x52\x8b\x9c\x25\x7b\x75\xc2\x05\xf7\x8e\x88\xbf\x7e\xf8\xfe\xd1\x37\xe8\x65\x7b\x38\x57\x94\x13\xb4\xd9\xa3\x05\x95\x9a\xd1\x8c\x94\x32\x53\x76\x8f\x52\xa3\xb0\x48\x5f\x06\x75\x41\x31\xce\x23\x01\x85\xec\x82\x90\x7f\xb5\xbb\xd2\x6d\x06\xcb\xca\x04\xcf\x56\x84\xda\xad\x30\x2b\xb3\x6c\x44\x66\x8c\x53\x73\x91\x41\xe1\x73\x78\xf7\x30\xcd\xd4\xed\x9a\xf1\x04\xcc\x34\x8d\x2b\xdf\x04\x52\x6e\x46\x36\x2c\xb3\xe2\x69\xe9\xc8\xd5\xfd\xb4\x96\x2a\xe5\x48\x31\xfc\x2d\xa1\xd3\x0c\x50\xd3\x70\x32\xe7\x07\x91\xa1\x4b\xb1\xf2\x7b\x60\xb1\x50\xda\xfc\xfa\x7f\x32\xbe\xaf\xb6\x6e\xdb\x07\xbc\xda\x13\xca\x09\x30\xbd\x00\x89\x43\xaf\x0c\xff\x35\x9b\xbd\x3e\x54\xc7\xaa\x4c\x16\x66\x8a\x5e\x14\x22\x55\x2f\x0c\x77\x7e\xa1\x20\x91\xa0\xd5\x8b\x13\xf3\xd7\xfa\xbb\xe2\x7c\x35\x7f\x77\x4a\x0b\xf6\xe2\x64\x44\x70\xc2\xb1\x42\xa9\xd0\x8b\x5f\xf9\x39\xf2\x13\xd6\x2a\xe8\xfd\x50\x6b\x9d\xa2\x0f\xcd\x1e\x5c\x69\x4d\x51\xd8\xaa\x94\xe6\xfe\xd4\x80\x69\xe7\xe6\xa4\xe0\x9e\x6b\xf8\xa0\xd7\x2e\x52\x42\xce\x38\x01\xeb\x35\x04\x4d\x72\xa0\xdc\x3d\x0d\x4b\x90\x2b\xbd\x40\x47\xa2\xaa\xb8\xe8\xb0\x72\x7b\x44\x23\xd4\x6d\xeb\xaa\x39\x56\xe6\x57\xa8\x3e\x6e\xb6\xfa\xf3\xfa\x0a\x1d\xfd\xeb\xd1\xfa\x95\x54\xdf\xc1\xbf\xee\xf5\x40\x21\xac\xd3\x5a\x7c\x34\xbf\x6c\xaf\x83\xfd\xc8\x5e\x26\x15\x3b\xfc\xfe\x7b\x5b\xed\xd9\x4d\xf8\x77\x8c\xa7\xaa\x42\x56\x4d\xed\x2d\xe1\x16\x6d\xeb\x4a\x21\x85\xbf\xda\x55\xda\x54\xba\xf6\x55\x94\x1e\xa0\xb1\xa1\x95\xf7\x41\x91\xc6\x82\xd1\x2d\x29\xd9\xb0\xdd\x91\xf5\xce\x1b\xb1\x32\xa3\x53\xc8\x94\x33\x20\x42\x83\x7c\x72\xf6\xfd\xbb\xaa\x76\xbb\x04\xfa\x80\x51\xfc\x11\xd4\xe7\x3d\xc2\x7c\x36\x6a\xe4\x6f\xb6\xfd\xd5\x1c\x9c\x8a\xc3\x9c\x58\xe4\x1a\xb4\x3d\xab\x39\x2d\xcc\x51\xb5\x7d\x58\xe7\xca\x9a\xe3\xe4\x7b\x9c\xe9\x87\x4f\xdc\x41\xea\xe1\xfe\x35\x9f\xb7\x0d\xb2\xd7\x79\xdb\x2f\x94\xe8\x80\x0e\xef\x33\xe5\xd5\xad\x35\xcd\x6b\x1b\xda\xe9\x85\x4e\x93\x4b\x68\xd3\xa1\x90\x82\xb2\xe8\x3a\x16\xe1\x48\xfa\xcf\xeb\x2e\x22\x2f\xc1\x21\xfa\xf9\x98\x28\xc8\x20\xd9\x56\x94\x7d\xdb\xc3\x1a\xf2\x22\x7b\xe8\xe4\x91\x83\x75\xf9\x9c\xf1\x0f\x40\xd3\xd5\x35\x24\x82\xa7\x7b\x72\xe9\x6e\xca\xd2\x3b\xc6\x59\x5e\xe6\x84\x97\xf9\x14\x70\x2d\x94\x1d\x14\x39\x8e\x35\xa8\x50\xc2\xe1\x2e\x5b\x39\x2e\x93\x92\x42\xa4\x9e\xf1\x4c\x8d\x56\x4f\xd3\x7d\x2f\x9d\x3b\xa6\x17\x58\xb7\x82\xaf\xcc\x50\x4c\xd7\x37\xa2\x24\x89\xa4\xca\x08\x8d\x23\x1c\x9a\x69\x73\x8b\x4e\x01\x5d\xec\x2c\x05\xb3\x65\xe8\x92\xb2\xcc\x68\x39\xfb\x5e\x8b\x6f\x60\x46\xcb\x4c\xa3\x7d\xe8\x25\x39\x36\x84\x7b\xe5\x7e\x5b\xb7\x46\xef\x50\x42\x70\xf3\x5f\x0b\xbb\x84\x2f\x77\x72\x80\x9f\x6f\x1f\x24\x74\xdf\xf6\x45\x44\xf7\xad\xa0\xa5\xda\xd7\xcc\xd4\xda\x0d\x17\x3c\x35\x87\xb0\x29\xcd\x37\xee\x11\xa6\x5c\xcf\xfb\xcd\xea\xfd\x58\x5e\x5b\xa8\x96\x62\x2e\x41\xa9\x37\x40\xd3\x8c\x71\x78\x82\x4d\x7d\xb3\x00\x92\xd3\x4f\xb8\xb1\x35\xcb\xc1\x08\x5b\xcd\x6d\x4d\x9b\xaf\xaf\x05\xc9\xe9\x2d\x54\x74\x92\x29\xcc\x84\xdc\x23\xa4\xc3\x37\xa6\x9a\x9b\xc9\x6e\xda\x19\x65\x19\xa4\x13\xa4\xa4\x31\x96\xd9\xec\x52\x64\x19\x48\xbb\x0f\xcd\xdf\x8c\x97\x40\xb4\xd8\x73\xb0\x42\x0a\x34\x4d\xd8\x01\x9a\xd2\x0c\x4a\x0b\xd4\x74\x69\x6f\x1c\x3c\x6c\x84\x92\xab\xb5\xf9\x7f\xfb\x29\x41\x23\xfc\x9e\x03\x4a\xa0\x0a\x3b\xb3\xc7\x46\x95\x72\x46\x13\x2f\xbf\xb6\x5e\xce\x46\xcc\x4c\xc8\xa5\xd0\x2e\x74\xb9\x9a\x52\xf3\xeb\x3d\xc7\x43\x4d\x1f\x08\x28\xcd\x72\xe4\x36\x69\x89\x21\xa9\x66\x30\x5c\x4b\xba\x7d\xef\xb6\xce\xfa\x9f\x5e\xbe\xdc\x53\x74\x7e\xfc\x53\x2b\x01\x6d\x33\x8f\xba\xe1\x2f\x2b\xee\xed\x6f\xd7\x42\xa4\xca\x6c\x3f\xe6\x54\x95\x42\x98\x77\x94\x18\xcb\xc1\x94\x66\x7c\x5e\x32\xb5\x20\x53\xd0\x77\x00\x9c\xc0\x27\x0b\x2f\xb7\xe7\x78\xff\x04\x29\x70\xbf\x99\xd5\xaa\x1d\x92\xad\x35\x78\xd5\x9f\x05\x58\x32\xc5\x04\xff\x96\x29\x2d\xe4\xea\x7b\x96\xb3\x07\x8a\x5a\xf8\xd6\x9d\xfb\xd4\xd7\xa9\xc8\x52\xf2\xc1\x6e\x81\x6b\xb0\x33\x23\x01\xdd\x1f\x5a\x58\xdb\x08\x31\x1c\x61\x4a\x93\xdb\x7d\x6f\xb5\x83\x57\x75\xd7\x7a\x75\xb8\x45\x5f\xbd\xec\xcb\xb2\x7a\x41\xed\x31\x97\x12\x55\x82\x6a\x24\xbc\x3b\xec\xc1\x7a\xfb\xc9\x4e\x77\x6b\x69\xef\x16\x42\x01\x3e\x40\xa8\x7c\x58\x26\x6c\xbe\x86\xf7\x89\x32\x55\x71\x5a\x8c\x57\xe1\xa0\x08\x9d\xcd\xda\x4f\xa4\x07\x48\xca\xb6\x5d\x68\x92\x97\x4a\x93\x9c\xea\x64\x61\xad\xd3\x22\xad\xa4\xd7\x23\xe5\xb4\xcc\x43\x96\x76\x6f\xf7\xd8\xe1\x8e\x2c\x62\xe9\x7c\xfb\xa9\x30\x97\xc7\x43\x2e\xef\x76\x6b\xad\xf3\x7a\x37\x6d\xab\x4d\xd6\x5e\x5c\xa7\x26\xe0\x5d\x6a\x2f\xee\xe6\x27\x68\x89\x3f\xbb\x7c\xb3\xff\xa9\xe9\x62\x94\x39\xd8\x2c\xd3\xdd\x47\x62\xda\xd9\x3d\x73\xe0\x9d\x26\xee\x9b\xb6\x37\x0f\xf5\x67\x35\x22\x94\xdc\xc2\x6a\x64\x25\x8f\x06\x2a\xaa\x79\xf8\x20\x42\x24\x64\x4e\x3c\x05\xd3\x23\x76\x68\xc7\xd8\x7f\xb6\x3b\x6c\x4c\x3f\xf8\x21\xfe\x5b\xdf\xc6\x86\xd0\x03\x7f\xe1\x27\xe8\x80\x9f\x1d\x7e\x76\x6c\xbb\x85\xd5\x61\x3f\x58\xdb\x49\x66\x15\x9c\x16\x6f\xf7\x88\xf9\xa0\xd2\x1e\xaa\x6d\x71\x98\x63\xbd\xd9\x3a\x18\x14\x6d\xf3\x93\x18\xf4\x7a\x07\x1e\x94\xe6\xb8\x2d\x3b\xad\x99\x96\x23\x65\xf7\xaf\xe1\x30\x0b\x56\xd8\x9c\x3e\xe7\x6d\x3c\x7c\x13\xdb\xf6\x91\x66\x2c\xad\x86\xb4\xdc\xe7\x82\x8f\x8c\x6c\x6d\xfe\x83\xd7\x8f\x95\xf8\xdf\x08\x50\x97\x42\xe3\x27\x4f\xb6\x06\xf6\xb5\x9e\x7a\x05\xec\xa8\xce\x69\x85\x6c\x15\xed\x15\x36\x65\xcd\xcd\xb4\xc7\x55\xae\x23\x3d\x15\xb9\xe0\x44\x48\x37\x75\x07\x0f\x6a\x3a\x73\x03\xdb\x21\xf1\x22\x9d\x5a\x67\x2d\xba\xbf\xb6\x8e\xe9\x56\x48\xc8\xd6\x02\x45\x1c\xde\x0d\x8d\xb2\xa0\xfd\x06\xcd\x15\x45\x86\xda\x99\x53\x9a\xa8\x0f\xad\xda\xd3\x2b\xd2\x6c\x39\xc8\x39\x7a\xb1\x93\xbd\xbd\xae\x15\xd1\x1d\x2e\x3e\xdb\x0e\xbe\xfe\x9a\x03\x76\xd8\xc8\x51\x7c\x49\xd1\xba\x41\x79\xc5\x9a\xa1\x3b\x4a\x3c\x07\x9d\xaa\xc6\x70\x2d\x1b\xf9\xff\x36\x97\x3a\x6e\xba\xff\x43\x0a\xca\xa4\x9a\x90\x33\xa2\x18\x9f\x67\xd0\xfa\xce\x99\x00\x1a\xdd\x1c\x34\x78\x61\x06\x35\x77\xef\x92\x66\xce\x10\x43\x39\x01\x6b\x8e\x37\x74\xac\x8b\x6f\x23\x27\x61\x9b\xab\xa8\x8a\x7f\x78\x71\x0b\xab\x17\xa3\x9d\x61\xe6\xdb\x5b\xf3\xa4\xbe\xb8\xe0\x2f\xac\x08\xb3\x71\xd6\x2a\x79\x07\x83\x2c\x5e\xe0\x77\x2f\x62\xca\x86\x07\xca\x2a\x5d\x9d\x09\xed\x41\x0f\x38\x26\xad\x5d\x9d\xd3\xe2\xd0\x4d\xed\x03\x3b\x3b\xe8\x68\x37\xeb\xc6\x25\x17\x01\xad\x05\x29\x15\x58\x35\x1a\x99\x1d\x01\xaf\x8b\xa1\xe6\x85\x56\x2f\x0e\x77\xa8\x3b\xf5\x46\xa1\x31\x2a\x3e\xe3\xf3\xbf\x16\x29\xd5\x7b\xe5\x14\xd9\xd6\xfd\x6c\x7f\xb0\x03\x92\x12\x47\x34\x3b\x79\xc6\xe6\xa4\xa0\x92\xe6\x6a\x42\xae\x5c\xb9\x01\xdc\xd7\x6c\xd6\x74\xdf\xb8\x79\xbe\x59\x15\x40\xfe\x9f\xc3\x07\xb4\x6f\x78\xc8\x85\x31\x1e\x1f\xf2\x5e\x37\xef\xdf\xbc\x7f\x4d\xec\x28\x56\x1b\xd6\x82\xcc\x04\xda\x51\x44\x29\xcd\x8b\x2e\x81\xa3\xfd\xd3\x68\xeb\x82\xc3\xfb\x99\xe1\x1b\x54\xc3\x12\x24\xb9\x33\x9b\x2a\x61\xe9\x01\xe6\x5d\xd3\xd0\xa8\xfb\xc8\x87\xbb\x9b\xa4\x9f\xd3\x4f\xd7\xa5\x9c\x1f\xb0\xa7\x48\xb0\x24\xd6\x34\xaf\xd7\x86\x2e\x3c\x7d\x4d\x64\x24\x95\x2c\x20\x2d\x33\x48\x09\x9d\x8a\x25\xb4\x9c\x7f\xd5\xcf\x0e\x1c\x1a\xad\x2f\x07\xfe\xe6\xa3\x61\xdb\x9e\x28\x23\x39\x4e\x95\xc8\x4a\x5d\x19\xe9\x8e\xe1\xd3\x6b\xf2\x47\x0c\x4a\xa3\xa4\x00\x99\x00\xd7\x74\x0e\xeb\xd6\x54\xfb\xdc\xab\x97\xff\x72\x72\x28\x01\x28\xa3\x99\xf1\x9d\x6d\xfb\xa5\x39\x72\xef\xe8\xa7\xbf\xf2\xda\xf3\xc4\x14\xd9\xd3\xb2\x56\xb7\xb3\xb5\x17\xc1\x51\xb2\xa4\xcc\xd0\x6e\x8e\xc1\x7e\x8d\xd7\x99\xae\x88\x14\x25\x86\xfb\x91\xb2\x38\x74\xac\xa6\x0d\xf0\xf7\x7f\xfc\x97\x43\x7f\xfe\xf6\x13\xcd\x8b\x0c\x5e\xfb\x6a\x36\xd6\x80\x69\x94\x24\x2d\xc8\x1f\x5e\xfe\xcb\xc8\x86\x3e\xc0\x5d\xc3\xa0\x56\xef\x23\x6a\x36\x51\x59\x10\x96\xdb\xe4\x1f\xc8\x56\xd8\xd1\xa1\x62\xa9\xb9\xb7\xdb\x7c\x51\x69\x2a\xb5\x1a\x11\x8c\x3a\xac\xd4\x5b\x2d\x34\xcd\xd6\x6c\xb8\x68\x3d\x85\x3b\xbb\x15\x52\x81\x6b\x09\xe8\x4a\x39\x90\x8a\x57\x7f\x78\xf9\x2f\x9b\x96\xfa\xf7\x3c\x01\x1c\x07\xfb\xc7\x20\xd4\x29\x00\x27\xb7\x2c\xcb\x20\x3d\x54\x6f\x78\x68\x22\x67\xa5\xd4\x0b\x90\x23\x02\x5c\x79\xf7\x8a\x79\xf7\xb5\xf7\x46\x5a\x64\xc9\xf9\xe1\x62\x35\xb5\x4e\x5e\xf4\xd8\x34\x3c\x38\x6e\xda\x8d\xb4\xa9\x49\x2e\x94\xde\x3e\x1d\x07\x0d\x46\xf9\xea\xfd\xec\x50\x9d\x61\xdc\xc1\x42\xbd\xf9\xeb\x0e\x1a\x47\x4b\xa4\x62\x5c\x8f\x85\x1c\xdb\x6e\x5e\x13\x2d\xcb\x43\xa4\xd8\xbc\xc5\x42\x7a\x78\x03\x94\x0d\x06\xb7\xb1\x09\x3e\x3b\x36\xde\x9d\xdd\xa6\xe2\x8e\xc7\xba\x34\xf0\xb6\xef\x74\x5d\x3c\x09\x0b\x6f\xbb\xbb\xd6\x38\x8f\x99\x07\xf3\xf4\xff\xbd\x79\xe4\x0f\xb5\x13\xac\xdd\x04\xbb\x79\xbb\x63\xad\x15\xeb\x36\xba\x1a\x46\x75\x8c\xd6\x68\x3d\x90\x82\x2d\x6f\x56\x71\x55\x2b\x8f\x5a\x8f\x8d\x79\xc0\x12\xb5\xe5\x8a\xab\x19\xf0\xc1\x57\xd9\x8e\xab\xca\xbe\x63\x1d\xd0\xa2\x31\x96\xd4\xb0\x61\xb5\x8b\x0f\x1f\x38\x74\x06\x54\xe9\x6d\x4b\x38\x70\xed\x07\xdb\xfd\x69\xcb\xeb\xad\xad\x0f\x1b\x85\x0c\x67\xbc\x72\xfe\x61\x46\xfe\x14\xc8\x8b\x0f\x60\x43\xb3\x6c\x9a\x45\x4b\x13\x7b\x51\x39\xe5\xcd\x62\x77\x54\xd2\x0e\x9c\x36\xef\x57\x7c\x54\x27\xbb\x1b\xa3\x91\x72\xe8\xdc\x9a\xee\x0a\xaa\xe2\xbc\x6c\xd0\xda\xfe\xbe\x75\x70\x29\x35\xee\x08\xfb\x97\x99\xa8\x02\x92\x89\x04\xe4\x2a\x36\x13\xd2\x1a\x8b\xd0\x86\x74\x96\xdd\xd1\x95\x7a\xd1\x1b\x7b\x43\x0e\x9a\xde\x9f\x69\xbf\xde\xba\x0b\x04\xd7\x9a\xf2\x94\xca\xd4\xbd\xd1\x91\xaa\x46\x3f\x84\x23\xbc\xc3\x98\x2b\x3e\x13\xaf\xc9\x42\xeb\x42\xbd\x3e\x3d\x9d\x33\x3d\xb9\xfd\xb3\x9a\x30\x71\x9a\x88\x3c\x2f\x39\xd3\xab\x53\x0c\xa1\x62\xd3\x52\x0b\xa9\x4e\x53\x58\x42\x76\xaa\xd8\x7c\x4c\x65\xb2\x60\x1a\x12\x5d\x4a\x38\xa5\x05\x1b\xd7\x86\x00\x35\xc9\xd3\xdf\x7a\x92\x1e\x57\x87\x6f\xb1\x09\xf4\x12\xc9\x25\x8c\x4b\x7e\xcb\xc5\x1d\x1f\xa3\xcd\x52\x1d\xc4\x30\xf6\x0b\xc5\xf5\x2d\x60\x0d\x0f\x89\xd4\x2d\xc4\x01\x86\xce\x47\x5f\x59\x33\x45\x63\xca\xd3\xb1\x8d\x3f\x7b\xdc\x05\xee\xe2\x2b\x1e\xd7\x31\xae\xfb\x53\xd7\xcd\x1a\x44\x13\xcd\x96\xd0\x29\xd2\xd2\xb7\x30\xc5\xe0\xbd\x4f\x25\x4b\x4b\x69\xf7\x52\x23\xf4\xd2\xc7\x9d\xe4\x74\x85\x32\x3c\x12\x4b\x84\x15\xde\xb8\x48\xc1\xf9\x51\x97\x07\xc4\x43\xfa\x76\x6d\xd8\xf2\x8d\xd1\x36\x5d\xf8\x26\xba\xa9\x57\x4a\x43\x6e\xaf\x02\x3b\x5a\xb6\x22\x5a\xae\x6c\xcc\xa7\xbc\x25\x4c\xfb\x40\x4a\xa3\xde\xdf\xe2\x73\x4a\x89\x84\xa1\x48\x5f\x2f\x5b\x37\x5d\xc5\xbb\xea\x28\x29\x84\x62\xf8\x5e\x4e\x70\x39\xac\xbf\xee\x32\x4f\x23\xa6\xea\x4f\xff\x76\xc8\x3e\x9a\x21\x5a\xe8\x81\x21\x04\xed\x98\xe3\x59\x33\x91\xdb\x2d\xfd\x91\xf2\x56\x41\x23\x88\x26\x82\x2b\x2d\x29\xdb\x0d\x90\xb1\xbd\x75\x8c\xf3\xe8\x1e\x4c\x41\x70\x77\x9e\x75\x9a\x14\xb2\x99\x2a\xe1\x05\x16\xdc\xf2\x7e\xaa\x9b\x13\x63\xf1\x33\x7c\xca\xcf\x81\xec\xd6\xb6\xce\x73\x44\x82\xe6\xc9\xfe\xda\xa2\x15\xa7\x6f\x50\xdf\xb8\xae\xde\xeb\x62\xce\x45\xf5\xf1\xdb\x4f\x90\x94\xfb\x02\xcd\x6d\xb6\xd0\x58\x02\xdb\x8c\xb4\xe7\xcd\xd4\x2e\x24\xdb\x52\x6f\x38\x84\xff\xc2\x09\x95\x02\xd7\xcb\x49\x97\x8a\x6a\xa6\x66\x87\x7a\xb7\x7d\x33\xab\x5a\xad\x3b\x34\xe2\xd3\xaa\x13\x53\xc5\xfa\xa1\xcc\x60\x93\xce\x99\x46\xce\x99\x2c\x84\x50\x87\x98\x89\x9a\x8d\xda\x4d\x87\xef\xb0\x64\xc2\x46\x5d\x21\x90\x82\x24\xb9\x61\x9b\xee\x8a\x6f\x10\x65\xfd\x9d\xf5\xcf\xd8\xa1\xba\xba\x6f\x68\xee\xab\x36\x87\x8f\x2e\x32\x83\xa3\xcf\xce\xfc\x31\x47\x61\x5d\x69\xa2\xca\xdc\x90\x72\x07\x6c\xbe\xd0\x6a\x44\xd8\xe4\x60\x7b\x91\x6f\xe6\x18\x01\x4d\x16\x8d\x57\xc8\x01\x74\xab\x04\x78\xf3\xec\x35\x1d\xbb\xc7\xf7\xe2\x34\x3d\xdc\x1c\x68\xc5\xa8\x92\x1b\xd6\x8f\xc4\xd6\x6d\x30\x22\xa0\x93\xc9\xc9\xe1\xc1\x22\xb6\xd5\x88\x7c\x66\x16\xa7\x2b\xc2\x34\x98\xcb\x18\x55\x7f\x29\xca\xb9\x9d\x6b\xf0\x79\x6f\x38\x07\x15\xa4\x00\xc6\xf2\xa5\xe9\xe1\x26\x09\xdf\x5e\xd8\x45\x7b\x61\x4e\x0c\xce\x6d\x99\x7b\x3c\x69\x5c\x01\xf4\xea\x43\x05\xa3\x21\x41\x15\xc2\x9a\xc9\xd6\xfd\xfd\xff\xe3\x40\xaf\x7e\xb3\x99\xa1\x8e\xd5\x49\xbd\xb5\x16\x6c\xbe\xf0\x3b\x8b\x3a\xf9\xa0\xbd\x23\xbb\x6d\xb0\xee\xb1\x2e\xb6\x75\x8c\x78\xb1\x2d\x0e\x17\x6c\x64\xf2\xd7\xc7\xb3\x71\x24\x34\xc8\xbc\x5a\x36\x3c\x35\x78\xad\x38\x5f\xbb\xaf\x4c\xef\x0e\x2b\x79\xd9\x99\x8a\x63\x73\xca\x09\x33\x1a\xa4\xe1\x53\x63\x51\x9c\x4c\xc8\x19\xe1\x65\xc5\x96\xef\x23\x8c\x8b\x8a\x2e\xd7\x91\x21\x56\x89\xba\xaf\xae\xdc\x3a\xe4\x2a\xb5\xad\x5b\x88\x69\xb3\x8d\xdd\x0c\xc0\xc3\xb5\x64\xee\xeb\xc4\xae\x51\xc7\x0e\xc2\xc4\x02\xdf\x87\x7f\x8b\xee\x7d\xac\x63\xbd\x5b\xbe\x52\x87\x2a\x83\xcc\x47\x4d\x39\xbe\xe2\x01\x6d\x76\x63\xe7\xa2\xeb\xae\x20\x71\x76\x06\x89\x34\xaf\x24\x28\x6a\x7e\x7b\x5b\x9b\xe5\x0a\x17\xa4\x35\xdb\xad\xfb\x72\xba\xc2\x6f\x0f\x4c\x28\xd8\xdd\x42\x99\x6b\xdd\x82\xd8\x6c\xdd\x62\x31\xdc\xba\xad\xef\xde\x38\x21\xf8\x11\x08\xc3\xe1\xe2\x04\xe6\xef\x18\x20\xce\xe9\xb1\x2d\x9c\xc3\xd6\xed\xf0\xd0\xfe\x5d\xfd\x44\x5b\x8e\x58\x2c\xc2\xb6\x0e\xc9\x01\xdb\xdb\x46\xc4\xde\xe3\xe4\x0a\x6c\x6f\x01\x41\xbf\xdb\x5a\xd7\xbc\x82\xed\x2d\x3e\xa3\x30\xed\xc3\x13\xa4\x1e\x6c\x6f\x7b\x25\x24\x8c\xda\xd9\x08\xe4\x1b\x6d\x19\xd3\xf7\x41\xb7\x6c\xdd\x22\xaf\x78\xb7\x2c\x86\xed\xed\x71\xd6\xfb\xec\xe9\xf2\x1c\xb6\xb7\x67\xce\x7e\x38\x90\xa8\xdd\x04\x7d\xa3\x0d\x31\xdf\xeb\x51\xe3\xc7\x91\xa8\x69\x90\x60\xb1\x03\x7d\xa8\xbc\x53\xb0\x47\x0e\x45\xc3\x3b\x24\x31\x63\xb7\x90\x80\x50\x96\x98\xca\xd2\xc9\x28\xbc\xbb\xed\x9d\x12\x12\x92\xe2\xb1\xbd\xc5\x93\xd7\x6c\x8b\x24\xb5\xd9\x16\x99\x7b\x44\x4b\x1d\x79\xf2\xce\x51\x4f\xf8\xda\x3a\x23\x9f\x51\x45\xb0\xee\xd0\x41\x45\x78\xb0\x0d\x2a\xc2\xa0\x22\x3c\xdc\x06\x15\x61\xb3\x0d\x2a\xc2\xa0\x22\x04\xb5\x41\x45\x78\xb0\x0d\x2a\xc2\x83\x6d\x50\x11\xea\x36\xa8\x08\xfd\x57\x11\x42\xd3\x7e\xb7\x37\xeb\x6f\x89\xe6\xf6\xf9\x9b\x75\x37\xae\xfb\x79\x50\xb9\xf1\x61\xee\x6d\x87\x8f\x91\xa2\xaf\x9d\xa8\x71\x83\x4e\x22\x97\xc1\x2e\x29\x9f\x03\x79\x35\x7e\xf5\xf2\xe0\xa4\x8a\x66\x0b\x89\x4d\x6f\xb6\x43\x91\xb0\x36\x5b\xf4\x9d\xb1\x2b\x7e\xa1\x7f\x21\x3d\x8e\xb3\x57\x71\x15\x2d\xe5\x73\x47\x7c\x4d\x55\x66\x21\x07\x7d\x78\x42\x84\x6f\x4d\xc7\x34\xcb\xa1\x0a\x7a\xb3\x6c\xdd\xa5\xf1\xd4\x49\xb1\x82\xbb\x00\x09\xb3\x2d\xbb\x6e\xbb\x4e\x6f\x9b\x00\xb5\x19\xf4\x53\x30\x6f\xdc\x35\x94\x48\x13\x25\x72\xb0\x18\x74\xfe\xea\x30\xaf\x0b\x7e\x1b\x90\x63\x98\xcc\x27\x24\x2d\xc1\x61\x3b\xd8\xac\x93\x93\x51\x23\x38\xb3\x6b\x2c\x91\x11\x78\x24\xfe\xc7\x4c\xac\x8b\xe9\x84\x25\x70\x5d\xd2\x2c\x5b\x11\x58\xb2\x44\x57\x2b\x80\xc9\x59\x4c\xab\x80\xb9\x0e\x56\x45\x43\xd5\xcf\xf1\x06\xff\xea\x26\x9e\x84\xeb\x89\x1b\x74\x74\xe7\xe9\x6b\x55\x0e\xec\x0c\x4d\x76\x5a\x92\xb4\x19\xcd\x06\xa4\xe1\x3f\xf1\xe0\xbe\xff\xd0\x35\x76\x87\x44\x92\x47\x82\x65\x90\x98\xaa\x81\x0b\x98\x11\xd2\x85\xf4\x6c\xce\xe0\x96\x90\x99\x2d\xa0\x26\x07\xe7\xe6\xb7\x9b\x5e\x40\xde\x05\x18\x65\x5b\x33\xb4\xdd\x88\x42\x64\x62\xbe\x6a\x6e\x3c\x5c\xbc\x26\x84\x3b\x25\xaa\x9c\x3a\xe5\xd6\x9c\xfd\xcb\xb5\x9d\x3a\x04\x7b\xec\x6c\x43\xb0\xc7\x46\x1b\x2c\xb9\x83\x25\xf7\x80\x7e\x06\x4b\xee\x60\xc9\x1d\x2c\xb9\x83\x25\xb7\x6b\x1b\x2c\xb9\x07\x11\x35\x58\x72\xc9\x60\xc9\xdd\xd9\x06\x4b\xae\x6b\x43\xb0\xc7\xd6\x36\xa8\x08\x87\xb6\x41\x45\x08\xef\x67\x50\x11\x06\x15\x61\x50\x11\x06\x15\xa1\x6b\x1b\x54\x84\x83\x88\x1a\x54\x04\x32\xa8\x08\x3b\xdb\xa0\x22\x6c\x76\x1c\x2d\xd8\xe3\x11\xc8\x8d\x49\x68\x21\xd2\xe8\x70\x2e\x85\x48\xef\x41\x73\xb1\xbe\xf0\x44\x8c\x33\x91\x54\xd8\xe5\xe6\x27\x2e\x06\x45\xd1\xdc\x86\x02\x8c\xc8\x3f\x05\x07\x8b\x01\x61\x0b\x92\xe6\x40\x84\x5e\x00\xd6\x1e\x3b\x56\x27\x1d\x12\xd9\x07\x34\x98\x7d\xda\x80\x06\x33\xa0\xc1\x0c\x68\x30\x4f\x8b\x06\xb3\xa0\xca\xd5\xed\x40\xa1\x68\x37\x38\x4c\x83\x63\xdf\x80\xcc\x07\x6c\x98\x87\xda\x86\x2e\xee\x8e\x8f\x59\xe1\xc6\x66\xb7\x33\x9e\xba\x70\x4a\x48\xaf\xda\xf3\xec\x0c\x77\x38\x2d\x34\x4d\x21\x25\x05\xc8\xb1\x3d\x3c\x82\xcc\x98\x2b\x9b\xb3\x76\x9a\xdd\x0c\x77\x65\x88\x3d\x01\x5c\x69\xcf\x44\x40\x4f\xcf\x8f\xba\xd2\x7e\x95\x68\xa1\x4a\xcd\x88\xad\x96\xf8\xf3\xd9\x61\xb0\xc4\xb1\x17\x8e\x89\x76\x61\x4a\xdf\x05\x59\x0c\x63\x99\xf7\xd0\xfc\x76\x7d\x50\xa1\xdc\xdd\x2d\xb6\x49\xc3\x57\x1f\xfd\xef\x12\xe4\x8a\x88\x25\xc8\xda\x58\xe5\x6f\x5a\xe5\x62\xb4\x11\x0b\xdf\x15\xd7\x0d\x57\x4d\x2f\x66\x16\x65\x8a\x97\x59\x36\xb2\xbd\xaf\xb3\x3d\x7f\x11\xd9\x72\x52\xc2\x7c\x1f\xc9\x7b\x11\xc5\xc0\x1d\xd3\xfe\x1b\x3b\x92\x8c\xf4\xac\x0c\xef\xee\x16\xd7\x3c\x11\xd1\x38\xf1\x48\xd6\xc3\xbe\x94\xfb\xdd\xdd\x1e\xd3\xbf\x44\x62\xfb\x98\x48\x64\x3f\x13\x89\xe8\x6b\x22\x71\xfd\x4d\x24\xba\xcf\x89\xc4\xf4\x3b\x91\x27\x2f\x5f\xbc\xbb\x45\x37\x2b\xc6\x76\x45\x91\x47\x63\x30\xe4\xa9\xcb\x24\xef\x6e\x4f\x53\x40\x79\x77\x7b\x84\x5d\x10\xd3\x3d\x45\x1e\x75\x0f\x3c\x4b\xa1\xe6\xdd\xad\x97\x4e\xab\x7b\x09\x7b\xf4\xe2\xce\xbb\x5b\x74\x1f\x10\x79\x04\x3f\x10\x89\xed\x0b\x22\x8f\x73\x64\x1f\xd9\x27\xf4\x04\x03\x74\x2a\x49\xbd\xbb\x3d\x06\xcf\x79\xd6\x32\xd6\xf7\x91\xf5\x8c\x05\xae\x77\xb7\xe7\x2f\x7d\xbd\xbb\x45\x96\xce\x43\xcb\x65\x3f\x44\x68\x14\x56\xf1\x38\xee\x57\xd2\x3a\x17\xdf\xc1\x2a\x6e\xf0\x67\x84\x93\xfb\xae\x45\x9d\x57\x3f\xb5\xab\x61\x57\x4b\xed\xe8\x6b\xb3\x02\xbb\xf3\x11\xb8\x32\xdf\x59\x16\x4c\xc3\x14\x88\xa6\xb7\x80\x11\x17\x02\xcb\x91\xb0\x14\x6c\xdd\x1a\xbb\xd5\x71\x7c\xb3\xc5\x4b\x05\xa9\x21\x24\x13\xe2\xb6\x2c\xfc\x51\xc1\xb4\xe2\x18\x07\x93\xf1\x44\xe4\x3e\x7f\xda\x66\xd3\x99\x13\xef\x78\xc1\xd8\xd6\x19\xb3\x9f\x23\x39\x78\x49\x3b\xa3\xea\xcf\x2d\x23\xdf\xcf\x84\x2a\xf2\x33\xaa\x3f\x9c\x1c\xe3\x0f\x4f\x7e\x0e\x0f\xcd\xac\x96\xc0\xfa\xe5\x44\x89\x1c\x76\xad\xf2\x7a\x7b\x75\xee\x9b\xdd\x60\x82\x7c\x6d\x94\xe6\xc4\x1d\x59\x7f\xfa\x31\xe5\x9a\x9d\x54\xa6\xe8\x09\xc1\xfd\x85\xba\x5f\x2a\xf8\x91\xb6\x54\x7b\xae\xef\x3b\x08\x8f\xc8\xac\x56\xae\x8e\xec\xb1\x1e\xee\x89\xab\x65\x6f\xab\xf0\x55\x35\xe3\xac\x8c\x17\x3c\xee\x8d\x8f\x1d\x70\x2a\xef\x4c\xc8\x29\x4b\x53\xc0\x42\x9b\xd5\xab\x4e\x85\x87\xc6\xa8\x8f\x9c\xe1\xfb\xad\xbd\x13\x4e\xcc\x59\xa6\xc4\x68\x7d\x9c\x84\x72\x0f\x7e\x00\xda\x56\xeb\x6c\x0d\x4b\x98\x32\xcb\xa2\x20\x82\xfa\x75\xe3\xca\x92\x1a\xbd\x23\x2b\x16\xb4\xe1\xc6\x74\xd7\x96\x22\xc0\xe9\x14\xbd\xad\x6d\x16\x74\xc1\x1b\x36\x60\x32\x03\xaa\x4b\x09\x64\xde\xa1\x52\xed\x7a\xeb\x5d\xd4\xfa\x63\x5d\x5f\x91\x33\x17\x98\xea\xf9\x15\xb6\x4e\xe0\x70\x8b\x45\xbf\xc5\xb8\xd0\xc3\x45\x36\x5c\x64\x6b\x17\xd9\xc6\xc1\x7b\xbc\xbb\x6c\x63\xa8\xe1\x3a\x1b\xae\xb3\x2e\x8d\xd3\x1c\x54\x41\x13\xf8\x8c\xfc\xf1\xd6\x59\x62\xb3\xfc\x3c\xf9\xaa\x51\x7c\x1c\x64\x1e\xd5\x87\xe2\x81\x7d\x70\xcf\x63\xbf\xa9\x0f\x1c\x2b\x79\xa3\x32\x6d\x83\x18\xcb\xce\xd7\x63\x24\x83\x29\xf1\x46\x11\xc1\x41\xa1\xab\x1a\xaa\x48\xdd\xc6\xe0\x38\x56\xf8\x6b\x23\x60\x4f\xed\x94\xe2\xe9\x3a\x84\x4f\x3d\x22\x7a\xcd\x73\xa0\x5c\x91\x17\x3e\x84\xf8\x48\xd5\x4f\xec\x59\x82\xfa\xbe\x56\x15\x03\xab\x28\x3a\xfe\xdf\xff\xe7\xa4\x55\x00\xac\x26\x68\x88\x89\xd8\xbb\x0d\x31\x11\x41\x6d\x88\x89\x18\x62\x22\x62\xf4\x35\xc4\x44\x0c\x31\x11\x5b\xdb\x10\x13\x31\xc4\x44\x0c\x31\x11\x43\x4c\xc4\x66\x1b\x62\x22\x86\x98\x88\x46\x1b\x62\x22\xba\x93\x35\xc4\x44\x1c\xd8\x86\x98\x88\x98\x31\x11\xb5\xe1\xa2\x6f\xd6\xb7\xa6\x49\xcb\xe5\xfd\xa2\xf6\xa9\xa9\x66\x49\x8d\xb5\xe5\x9f\xb2\xff\xea\x97\x29\xae\x69\x26\x7b\x1c\x43\x5c\xd3\xd8\xb7\x61\x4f\x8d\x64\x87\xdb\x69\x75\xab\xec\x72\x1b\x23\x3f\xaa\x41\x6e\x30\xb7\x77\xa3\xb2\x4e\xc4\xeb\xdb\x51\xbf\xf1\xd0\x0f\x6a\x21\xca\x2c\x35\xc2\x6d\x85\x0b\x91\x92\x63\xef\xf0\x3b\x31\x5b\x91\x0b\xdd\xfe\x92\x6b\x36\xae\x9f\xa8\xd2\x2a\xd1\x5b\xe9\x6b\x9f\x84\x2f\xb1\xb7\x11\xd4\x4e\x2d\x87\x52\x51\x41\x12\xd4\xa7\xc3\xdc\xd0\x20\x5b\xef\xc0\x14\x49\x61\xc6\xb8\x85\xb4\x91\x25\xe7\x46\x38\x17\xdc\x21\x0e\x04\xd3\x67\x45\x02\xeb\x81\x74\x7c\xc8\x9a\x34\x70\x3e\xd0\xae\x51\x2f\x7f\x23\xa9\x9c\x22\x13\xa5\xdc\xa1\xe2\x0b\xee\x7c\xbd\xe6\x13\xdb\x4f\x30\x69\x15\x8b\xc2\x15\x61\xd5\xdb\x87\x73\xa7\xb7\xc8\x95\x9a\x2f\xc6\x14\xee\x0f\x9a\x65\xe2\x2e\x5c\xda\x88\x72\xae\x23\x17\xf9\x09\x3c\x6d\x77\x07\xd7\x08\x5a\xcb\x94\x0e\xd3\x6c\x87\xf2\x42\x7b\xb6\xa1\xbc\xd0\xc3\x6d\x28\x2f\x74\x7f\x79\xa1\x46\xc0\x55\xb3\xce\x50\xd7\xd9\xc6\xea\x44\xcf\x50\x67\x88\x90\xbf\x2d\x00\xf9\x86\x04\x1b\x25\x55\x66\x9a\x15\x35\x7e\x9c\xb2\x2b\x9f\x59\x43\xdc\xcc\xe1\x10\xb5\xb9\x98\xa1\x91\x26\x8b\x8e\x04\xac\xf1\x40\xa4\x02\x51\xea\x14\xde\x6c\x16\x7f\x07\xfd\xc0\xb6\x08\x8f\xb7\xd0\x59\x18\x24\xf6\xf9\xa3\xa5\x04\xdc\x3a\x6f\x50\xec\x69\x87\x01\x2a\x72\x6c\xa4\xa5\x6c\xe5\x82\xe1\x5a\xd7\x4f\x4b\xcc\xea\x3c\xac\xf5\x22\x2c\xc1\xab\x68\x73\xb6\x04\x5e\xcb\x68\xc7\xea\xe4\xc4\xeb\x8a\xeb\xb2\x67\xe7\x31\x43\x64\xd6\xee\xf7\xea\xa1\xb2\xe6\x9a\xac\xd8\x79\xdc\x2d\x32\xe6\x7f\x34\x64\xb1\xff\x7c\x58\xca\xec\x3c\xb4\x65\x6d\x1e\x9c\xaa\xb1\xad\x6a\xe9\xb2\x63\xdf\x3d\x41\xda\x09\x07\x4d\x89\xe1\x87\x8d\x06\x96\x12\xb7\x9a\xd7\x73\x80\xa4\x3c\x03\x40\xca\xaf\xa9\xbc\x56\x2f\x83\x7f\x7a\x67\x67\x7a\x0c\x6c\xfd\x5e\x07\xfb\x0c\xe0\xfa\x41\xfd\xfc\xaa\xc0\xf5\x9f\x29\x98\xe7\x57\x88\xb1\xdf\x83\xe0\x9d\xe7\x0c\xdc\xf9\xd5\x61\xec\xf7\x28\x50\xa7\x97\x41\x3a\x7d\x0b\xd0\x19\x40\xeb\x83\xda\xe7\x09\x5a\x1f\x35\x08\x27\x36\x1f\xe9\x61\xf0\x4d\x0f\x03\x6f\xfa\x1a\x74\x13\x51\x52\x7e\x9c\x60\x9b\x48\x2c\xe0\x71\x82\x6c\xe2\x65\x6c\xc7\x3c\x95\xcf\x0d\x36\xd2\x8b\x14\xed\x3e\x83\x8c\xf4\x2a\x2f\xbb\x5f\x39\xd9\xcf\x91\x8f\xdd\x1b\x50\x91\x67\x05\x14\xe9\x5d\xf6\x75\x1c\xc9\x34\x82\x3c\xfa\x18\x57\x50\x3c\xf1\x30\x2a\x70\x48\xd4\x6b\xe8\xf9\x01\x43\xbe\xd8\x9b\x28\x22\x50\xc8\x70\x19\xed\x6c\x7d\xbf\x8c\x1e\x1b\x18\xe4\xb9\x41\x41\x86\x2b\xe9\x7e\x42\xfa\x7a\x25\x45\x05\xff\x78\x64\xff\xf2\x53\x82\x7e\xf4\x03\xf0\xe3\xc9\xc0\x3e\xfa\x03\xf4\xf1\x64\x20\x1f\x83\x5f\x7f\xf0\xeb\xb7\xdb\xe0\xd7\x1f\xfc\xfa\x87\xf4\x33\xf8\xf5\x07\xbf\xfe\xe0\xd7\x1f\xfc\xfa\x81\x6d\xf0\xeb\x77\x24\x6a\xf0\xeb\x6f\x6f\x83\x5f\x7f\xf0\xeb\x0f\x7e\xfd\x8d\x36\xf8\xf5\x83\x08\xec\xa9\x5f\x3f\x0e\x70\x46\xcc\x13\xd9\x27\xc0\x8c\x3e\x80\x65\x3c\x15\x50\x46\xef\x40\x32\x06\x13\xf4\x7e\xd4\xc5\x01\xc4\x88\x79\x84\xfb\x0d\x84\xd1\x67\x10\x8c\x9e\x02\x60\x3c\x0e\xf8\xc5\x63\x02\x5f\x04\x9f\xd9\xa8\xa7\xb5\x10\xe9\x19\xd7\xcc\x7b\xe9\x0e\x3f\xa7\xad\xd3\xf9\x06\xff\x98\x82\x3d\x63\xad\x03\xd3\x44\x13\x90\x65\x06\xca\x25\xd3\xd3\xa5\x60\x29\x29\x4a\xad\x6d\x7e\xb2\x3b\x9f\x7e\xe3\xd3\xdc\xe2\x09\x8c\xc8\x3f\x05\x87\x11\x01\x9d\x4c\xcc\xe6\xc6\x4c\x7d\xa1\x17\x20\xcd\xe3\xc7\xea\xe4\xe4\xf0\x35\x09\x92\xcf\xc2\x4c\x7b\x85\x84\x19\xc8\xcf\x02\x7f\x02\x9d\xe1\x0e\xe4\x41\x5a\x1f\xbc\xa5\x1e\xa3\x16\xdc\x17\xf6\xf8\x69\xe1\xb0\x01\xf0\xd8\xdb\xe4\xfc\xae\x37\x24\xa2\x40\xb4\x36\x10\x34\xdc\x1c\x3b\x90\x20\x46\x64\x5a\x6a\xc2\x34\xc2\x27\x24\x0b\x21\x54\x57\xee\xe2\x52\xb9\xf1\x45\x96\x4c\x58\x73\xba\xe0\x80\xd8\x0c\x42\x56\x3c\xb0\x41\x94\x55\x25\xea\x9f\xb1\xae\xca\x56\x2e\x94\xae\x77\x88\x37\xce\x9a\xc1\xab\x3b\x67\x2e\xc1\x50\xa4\x89\x2a\x73\x43\x8a\x85\x9d\x51\x16\x28\xa1\xe3\xb0\x33\x23\x62\xd1\x64\xd1\x78\x85\x1c\x40\x5b\xd7\x9c\xcf\x05\x6f\x1c\xe2\xa6\xce\x74\xec\x33\x83\x3b\x8e\x6d\x3a\x03\xa5\x47\x3b\x71\x59\x76\xef\x05\xcb\x13\x4e\xba\x1a\xa5\x12\x91\x17\xa5\x06\x23\xc7\x97\xb9\xd9\x4d\x4c\x63\x10\x0d\x32\x23\x29\xca\xb9\x9d\x70\x0f\x85\x61\x27\xa2\xc6\x59\xe1\x29\xea\x66\x9d\x2f\xfe\x17\x76\xe5\x5e\x78\xe1\xdd\x10\xc1\x66\x15\x8c\x0a\x59\x50\xd5\x8c\xfe\xa9\xef\xd5\x07\x60\x84\xfe\x47\xc0\xcd\x6a\x06\x3e\x56\x0d\x09\x67\xc1\xe6\x0b\xbf\xd9\x8c\x76\x8c\x36\x85\xd6\x26\xfd\xdc\xf1\x37\xcc\xc9\x75\x67\x08\xc5\x95\x7a\xc7\xdb\x19\x4f\xc9\xdf\xf0\x5b\x48\xd7\xb3\xd2\x71\x1f\x58\xa3\x01\x4d\x53\x23\x88\x80\x1c\xdb\x13\x24\xc8\x8c\x39\x15\x69\xed\x48\xbb\x19\xee\xca\x1a\xfb\x81\xa1\xb0\xb6\xe3\x02\x7a\xb2\x33\xdf\xb1\x83\x18\x3e\xb6\xb5\x57\x89\xa6\xad\x7c\x70\xd3\x3c\x21\x67\x56\x22\xf2\xfc\xcb\xa8\xee\xa3\x0d\x94\xb0\xcd\x53\x6d\x67\xa6\x07\xd1\x10\x71\x1c\xb5\x31\x80\x37\x48\x44\xbf\x6a\x34\x00\x0e\xf2\x34\xd5\x91\x9e\x00\x88\x83\x3c\x0f\x18\x07\x19\x2a\xf3\xf4\x2b\x88\x87\x0c\x95\x79\x7a\x16\xd4\x43\x86\xca\x3c\x43\x65\x9e\xee\xad\x0f\x41\x3f\x64\xa8\xcc\xd3\x83\x20\x20\x32\x54\xe6\xd9\xa7\x0d\x95\x79\x86\xca\x3c\x9b\x6d\xa8\xcc\x33\x54\xe6\x69\xb4\xa1\x32\x4f\x77\xb2\x7a\x17\x48\x44\x7a\x1c\x4c\x44\x86\xca\x3c\x91\x2b\xf3\xc4\xcb\xd8\x26\x8f\x70\x72\x9f\x1b\x40\x84\xf4\x25\x75\x9b\xf4\x1c\x48\x84\xf4\x2d\x7f\x9b\xf4\x2e\x87\x9b\x3c\x53\x1e\x37\xe9\x13\xb0\x08\x79\x6e\x70\x11\xd2\xc7\x6c\x6e\xd2\xc7\x7c\xc1\xcf\xa3\xde\x54\x54\xd0\x11\xf2\x18\x57\xd8\xf3\x83\x8f\x90\x2f\xfd\x16\x8b\x08\x42\x42\x86\x8b\x6c\x9f\xf6\x39\x5c\x64\x8f\x0d\x4a\x42\x7a\x00\x4c\x42\x86\xeb\xec\x20\x82\xfa\x7e\x9d\x45\x05\x2c\x21\x4f\xe3\x8f\x7f\x4a\xe0\x12\xd2\x1b\xf0\x12\xf2\x94\x00\x26\xa4\x57\x20\x26\xe4\x29\x81\x4c\xc8\x10\x13\x31\xc4\x44\xec\xdd\x86\x98\x88\x21\x26\x22\x46\x5f\x43\x4c\xc4\x10\x13\xb1\xb5\x0d\x31\x11\x43\x4c\xc4\x10\x13\x31\xc4\x44\x6c\xb6\x21\x26\x62\x88\x89\x68\xb4\x21\x26\xa2\x3b\x59\x43\x4c\xc4\x81\x6d\x88\x89\x88\x19\x13\x11\x07\x74\x85\x3c\xc2\xa9\xed\x13\xf8\x0a\xe9\x09\x00\x0b\x79\x42\x10\x16\xd2\x47\x20\x16\x32\x98\xdb\x3b\x53\x19\x07\x9c\x85\x3c\xc2\x51\xef\x37\x48\x0b\xe9\x39\x50\x0b\xe9\x2f\x58\x0b\x79\x34\xc0\x16\xf2\xc8\xa0\x2d\x24\xd6\xb9\xb6\x09\xbd\x7d\x81\x43\xb2\xd4\x6c\xe4\x21\xfb\x73\xf2\x30\xcc\x40\x98\x66\xeb\x0e\x8d\xa4\x7c\x0e\xe4\xd5\xf8\xd5\xcb\x97\xe1\x99\xce\x8c\x6b\x98\x43\x88\xf5\x72\x26\x64\x4e\x35\xf6\xf4\x87\xdf\x77\xea\x27\x3a\xdb\xde\x85\x8a\xd1\x3f\xb4\x18\x67\x13\x69\xa3\x75\xb4\xa4\xff\x1d\xd0\x2d\xa8\x15\x98\xd3\x9a\x83\x26\x9d\x7d\x03\x0d\x7c\x12\xcd\x72\x18\x79\xde\x6f\x43\x35\x7c\x5c\x82\x03\xad\x49\x89\xe0\x4e\x64\x33\xec\xae\xeb\xde\xeb\xfe\xca\x09\x50\x85\x38\x11\x53\x30\xaf\xdd\x71\x7c\xaa\x2d\x1a\x52\x21\x18\xd7\xde\xd0\x63\xde\x19\xfc\x86\x70\x50\x4b\x69\x09\xd6\x82\x5a\x87\x5e\x95\x45\x4a\x35\x9c\x84\xa8\x8a\x6a\xa5\x34\xe4\x88\xb8\x63\x24\x3d\x8a\x31\x49\x44\xcb\x15\xc6\xa5\x2c\x81\xeb\x92\x66\xd9\x8a\xc0\x92\xb9\xb0\x22\x33\x3c\x06\x55\x31\xad\x82\x66\xfe\x6f\x0b\x40\x0e\x22\xc1\xc6\x4b\x95\x99\x66\x45\x56\x83\xb5\xd8\xe5\xcf\xac\x49\x6e\xe6\xb0\x89\xda\xfc\xcc\xd0\x48\x93\x45\x47\x02\xd6\xb8\x21\x52\x61\x18\x90\x54\x78\xc7\x59\x38\x1e\xf4\x08\x1b\x55\x41\x55\xb6\x3a\x0b\x8d\xc4\x3e\x7f\xdc\x94\x80\xfb\xe7\x0d\x0a\x40\xed\x80\x40\x45\x8e\x8d\xdc\x94\xad\x5c\x58\x5c\xeb\x22\x6a\x09\x5c\x9d\x87\xb5\xfe\x84\x25\x78\x65\x6d\xce\x96\xc0\x6b\x69\xed\x58\x9d\x9c\x78\xad\x71\x5d\x0a\xed\x3c\x66\x88\xf4\xda\xfd\x86\x3d\x54\xea\x5c\x93\x1a\x3b\x8f\xbb\x45\xda\xfc\x8f\x86\x54\xf6\x9f\x0f\xcb\x9b\x9d\x87\xb6\xac\xcd\x63\x55\x35\xb6\x55\x2d\x67\x76\xec\xbb\x27\x98\x3b\xe1\xf0\x29\x31\x3c\xb2\xd1\x60\x53\x1e\xb9\xae\xd4\x13\xc0\xa5\x3c\x03\x54\xca\x50\xdf\x68\xa8\x6f\xd4\x6e\x43\x7d\xa3\xa1\xbe\xd1\x21\xfd\x0c\xf5\x8d\x86\xfa\x46\x43\x7d\xa3\xa1\xbe\x51\x60\xeb\x51\xc8\x4e\x2f\xc3\x75\xfa\x16\xaa\x33\xd4\x37\x0a\x6a\x43\x7d\xa3\xa1\xbe\xd1\x50\xdf\xa8\xd1\x86\xfa\x46\x21\x47\x33\x5e\xee\x76\xcc\x53\xf9\xdc\xb0\x23\xbd\x48\xd6\xee\x33\xdc\x48\xaf\x32\xb4\xfb\x95\x9d\xfd\x1c\x99\xd9\xbd\x81\x17\x79\x56\x68\x91\xde\xe5\x61\x0f\x15\xba\xf6\x6a\x51\x21\x44\xa2\x5e\x43\xcf\x0f\x1d\xf2\xc5\xde\x44\x11\x21\x43\x86\xcb\x68\x67\xeb\xfb\x65\xf4\xd8\x10\x21\xcf\x0d\x0f\x32\x5c\x49\xf7\x13\xd2\xd7\x2b\x29\x2a\x0c\xc8\x23\xfb\x97\x9f\x12\xfe\xa3\x1f\xd0\x1f\x4f\x06\xfb\xd1\x1f\xc8\x8f\x27\x83\xfb\x18\xfc\xfa\x83\x5f\xbf\xdd\x06\xbf\xfe\xe0\xd7\x3f\xa4\x9f\xc1\xaf\x3f\xf8\xf5\x07\xbf\xfe\xe0\xd7\x0f\x6c\x83\x5f\xbf\x23\x51\x83\x5f\x7f\x7b\x1b\xfc\xfa\x83\x5f\x7f\xf0\xeb\x6f\xb4\xc1\xaf\x1f\x44\x60\x4f\xfd\xfa\x71\x20\x34\x62\x9e\xc8\x3e\x41\x67\xf4\x01\x36\xe3\xa9\x20\x33\x7a\x07\x97\x31\x98\xa0\xf7\xa3\x2e\x0e\x34\x46\xcc\x23\xdc\x6f\x48\x8c\x3e\xc3\x61\xf4\x14\x0a\xe3\x71\x60\x30\x1e\x13\x02\x23\xf8\xcc\x46\x3b\xad\xb4\xd4\x22\x17\x25\xd7\xd7\x20\x97\x2c\x81\xb3\x24\x31\x7f\xdd\x88\x5b\x38\x10\xfb\xa0\x75\x44\xcf\xee\xe9\x96\x30\x9e\xb2\x04\x6d\x93\x77\x0b\xd0\x0b\x97\x5c\x88\xcf\x11\x6a\x1f\x24\x1a\x9f\xac\x4f\x28\xd2\x69\xee\x58\xcc\x7f\xc7\xae\x0f\x5d\x02\x3b\x43\x53\x21\x32\xa0\x87\x78\xc7\x9d\xcc\x08\xf2\x40\x46\x1d\xc6\xb3\xbe\x77\xa2\x44\x3d\x3a\x99\x42\x26\xf8\xdc\x65\xda\x3b\xae\x73\xe8\x2e\x3c\xaf\xbb\x73\xde\xe3\xa4\x94\x12\xb8\xce\x56\x38\xcd\x69\x0a\x29\x41\xf3\x54\x2e\x96\x87\x6f\xf2\x1b\x64\x47\x5e\x87\xa7\x9a\x64\x40\xcd\x7b\x70\xa8\x5f\xc4\x30\x34\x4a\xae\x3a\xd0\x5e\xb9\xbb\x2d\xd4\x42\xa7\xf5\x3f\xfc\xc6\xee\x74\x47\xb7\x4f\x83\xd7\xcb\x50\x4a\x4b\xd0\xc8\xd7\x98\x0f\x64\x90\x2b\x51\x92\x3b\x6a\x55\x29\x59\x72\x64\xa9\x38\x51\x1d\x16\x39\x40\xe9\xe8\x6e\x8c\x1f\xe3\xbd\x74\xe0\xcf\x42\x8c\xe3\x54\xce\x3b\x89\x4e\x31\x64\x89\x33\x39\x2f\xad\xa6\xe8\x8e\x22\x70\x2d\x57\x88\x1a\xd2\xed\x5e\xb8\x59\xb4\x4e\x48\x4e\xe7\x70\xa4\xc8\xf9\xbb\x37\xe6\xd6\xc1\xa0\x28\x36\xb3\x32\xbb\xbb\x85\x0a\x29\x96\x2c\xed\x7a\x0d\x7d\xa4\x92\xd1\x69\x66\xb4\xde\x19\x48\xe0\x46\x92\xfe\xea\xf8\xe3\xd9\x87\x9f\x2e\xcf\xde\xbd\x3d\x41\xfd\x17\x3e\x15\x94\x1b\x76\x50\xaa\x1a\xbf\xc8\x51\x78\xa4\x08\xf0\x25\x93\x82\x9b\x59\x40\xbb\x21\x25\x4b\xd7\x69\x27\x8a\xea\x58\x16\x09\x4a\x64\x4b\x48\x2d\xe2\x48\x45\x60\x1d\x51\x54\x94\xda\x5b\x50\x7d\x38\x50\xc9\x93\x05\xe5\x73\x48\x27\xe4\x8d\x28\xcd\x8b\x7d\xf5\x15\xbe\x84\x84\xb4\x4c\xa0\x9b\x8e\x63\x4d\xf0\xf6\xe4\x7e\x35\xf2\x32\x8b\xb9\xfd\x31\x1c\x88\x80\x4a\x68\xe1\xa7\xa6\x39\x7b\x6a\xc5\x35\xfd\xf4\xda\x22\x96\xbc\xf8\xaa\xf1\xd5\x8b\xee\xb1\x74\x85\x14\xe6\x55\xac\x2c\x68\xdf\x3e\x63\x1a\x24\xcd\xc8\x8b\xe6\x08\x13\xf2\xd6\xd0\x05\x69\x73\x6d\x2d\x64\x0f\x2c\x41\xa2\x6d\xd5\xad\xec\x88\x48\x98\x53\x99\x66\xa0\xba\x19\x85\xc4\xac\xba\xc2\xad\xa9\xc5\xed\x2a\xa8\x6c\xc6\x5c\xe8\x49\x28\xe3\xf6\xed\x9d\x40\x48\x98\x99\x78\x4d\x16\x5a\x17\xea\xf5\xe9\x69\x2d\x05\x4d\x98\x38\x4d\x45\xa2\x4e\x35\x55\xb7\xea\x94\x71\xc3\xfc\xc6\x29\xd5\x74\xdc\xe0\xba\xa7\x56\x36\x1e\x27\x22\xcf\x29\x4f\xc7\xd4\x9d\xe3\x71\xb5\xb3\x4f\x7f\xeb\xa4\xc7\x31\xad\x9e\x62\x7c\x4c\xc7\x6a\x01\x9d\x56\x2e\x4c\x51\x0c\x50\x10\x03\x85\xcc\xc8\x0a\xa1\x9b\xcb\xe7\x62\xd8\x6f\x2b\xfe\x6c\x97\x62\x42\x2e\x85\x76\xa8\x4e\x2e\xc8\x13\x6f\x5b\x5c\xe5\x98\x2c\xfc\xed\xe5\xcd\x87\xbf\x5f\xbd\xbf\xb8\xbc\x19\x38\xf9\xc0\xc9\xb1\x0d\x9c\x7c\xe0\xe4\x1d\x06\xee\x0b\x27\x07\xbe\x7c\x2e\x2e\xee\x95\xe2\x06\xc7\xaa\xb6\xaa\xcb\x5d\xa8\x22\xcf\xab\x7d\xd0\x6d\x8b\x46\xd9\xe9\xcf\xb6\x63\x5a\x93\xfd\x96\x2f\x3f\xd2\x76\xc4\x09\xdf\x3a\x85\xc4\x3d\x60\x35\xf4\xf3\xb0\x09\x0c\xf6\x7c\x85\xc6\x85\x75\x52\x48\x6d\x0b\x8f\xd9\x32\x43\x77\x37\x78\xb7\x96\xef\x92\xe6\x95\xb9\x75\xdb\xaa\x4d\xc8\x3b\x6f\x6f\x21\xe7\x3f\x5d\xbc\x79\x7b\x79\x73\xf1\xf5\xc5\xdb\x0f\xdd\x0d\x94\x11\x5c\x0a\x68\x24\x8e\x34\x01\x41\xf6\xfe\x43\xe4\xa3\x80\x61\x6a\xc9\xaa\x90\xb0\x64\xa2\x54\xd9\xaa\x32\xc4\x6f\x67\x57\xeb\x7c\x8a\x50\x1e\x42\x01\xe5\xab\xca\x8a\xba\x75\xc0\x35\xd9\x6e\x9b\x9c\x16\x62\xd2\x7e\x5e\x09\xcf\x11\x11\x43\xce\x0b\x18\x7f\x8b\x84\xb8\xbf\xb4\x17\x30\x6e\x27\x39\x71\x97\xcc\x17\x40\x47\x5b\x5a\x0c\xe8\xe8\x8d\xcd\xe8\xc2\x3b\xfd\x45\xc0\xd4\xc4\xe2\x64\x5f\x4b\x91\x47\xe2\x66\xd7\x88\x9e\x58\x65\xd8\x6d\x3b\xaa\x47\x2e\x46\xbc\x25\x6f\x3b\xcd\xb1\xca\x71\x33\x9f\x07\xe6\xb9\x45\x09\x4e\x89\x13\xdf\x9c\x08\x3e\x63\xf3\x77\xb4\xf8\x0e\x56\x1f\x60\x16\xe6\x12\x6f\xcf\x37\x7a\x07\x5d\x94\x2d\xfa\x21\x8d\x64\x63\x07\x0b\xf3\x10\x46\x8b\xed\x89\x15\x01\x1f\x1e\xfd\x1e\x2f\x58\x3d\x4a\xa0\x7a\x6b\x21\x5d\x9e\x70\x9d\x28\x1b\x2b\x8f\x21\x4a\xfc\x63\x98\xc0\xe7\x5b\xfc\x20\xe4\xa6\xf4\xe8\xae\x87\x28\xb1\xdc\x37\x35\xf4\x3a\x53\x04\x66\x33\x48\x34\x5b\x42\x56\xc1\xb5\xa7\x23\x32\x2d\xb5\x07\x4a\x9f\xd2\xe4\xf6\x8e\xca\x54\x91\x44\xe4\x05\xd5\x6c\xca\x32\xa6\x57\x84\xc5\x28\xf6\xe5\x3c\xf2\x0e\xfd\xdd\x87\x32\x73\xa5\x29\x5e\x85\xc2\xd9\xdb\xcc\x6a\xdb\x50\x05\xea\xf3\xd0\x2c\x37\xf5\xa8\xe7\x51\x48\xc9\x85\xd2\x24\x01\x69\x84\xba\x6c\x45\xee\xa4\x88\x51\x90\x83\x90\x9b\xf7\x6f\xde\xbf\x26\x67\x69\x4a\x04\x5e\xd9\xa5\x82\x59\x99\xd9\x25\x50\x13\x42\x0b\xf6\x11\xa4\x62\x82\x8f\xc8\x2d\xe3\xe9\x88\x94\x2c\xfd\x4b\x84\x71\xf7\xb3\xd5\x24\x82\x27\x50\x68\x75\x2a\x96\x46\x06\x85\xbb\xd3\x3b\x21\x6f\x19\x9f\x8f\xcd\x84\x8f\x2d\x93\x54\xa7\x18\xba\x72\xfa\x5b\xfc\x4f\xb4\x39\x79\x23\x45\x41\x7e\x36\x44\x4d\x4b\x96\xa5\x20\x5f\xbb\x84\xf0\x9f\x6d\x4e\xb4\x91\xb0\xa5\xc8\x32\x90\xe3\x39\x70\x92\x0a\xc0\xb4\x68\x0e\xe6\x46\xd5\xd5\x5b\xcd\x99\x5e\x94\xd3\x49\x22\xf2\xc6\x0b\x8e\x15\x9b\xab\xd3\x46\xdf\xa7\x4c\xa9\x12\xd4\xe9\x1f\xfe\xfc\xef\x7f\xea\x15\x03\x22\x3e\x0d\xfe\x35\x79\xf1\x22\xb0\x2f\x51\xd8\x40\xd3\xc8\x0c\xed\x1a\x43\x98\x56\x2d\xa9\xb3\xba\x8b\x8d\xd4\xc8\xb4\x42\x16\xef\x03\x08\x9c\x02\x15\x69\x9a\x0f\x0f\xfd\xd8\x6c\x8f\x55\x2e\x0e\x8f\x71\x5c\xc1\x27\xf8\xfa\xa8\x25\x27\xcb\xe7\xdd\x2d\x52\x88\xf4\x35\x51\x65\x51\x08\xa9\x15\xc9\x41\xd3\x94\x6a\x3a\x31\x67\x7a\xd4\xfe\x13\x83\xd4\x46\xe4\xe7\xea\x43\x0b\xe2\xf0\xc3\xd1\x7f\x7c\xf7\xf6\xef\xff\x79\xf4\xe3\xcf\xcd\xef\x50\xd2\xb5\xf9\x4f\x8d\x07\x02\x5f\x41\x15\x90\x4c\xb8\x48\xe1\x12\xa9\xc3\x3f\x55\x2b\x24\xc9\x7d\xa1\xa9\x2e\xd5\x64\x21\x94\xbe\xb8\xaa\xfe\x2c\x44\xba\xfe\x57\x60\x16\x56\x0f\x45\x46\x5c\xdb\x2b\xaa\xbb\x57\x0a\x20\x51\x05\xc7\xfa\x22\x8b\xcc\x7d\x5c\xaf\x55\x49\x83\x64\x01\x39\xc5\x7f\x7e\xed\xa7\xc0\x88\x32\x77\x92\x69\x8d\x51\x6a\xae\xd0\x88\x98\x8d\x3c\x6b\xb5\xfa\xe8\xf2\x55\x70\xa1\xbd\xa8\x9c\xbf\x5a\xc1\xc8\x13\x86\x33\xe2\x66\xcb\x72\x80\x1a\xa3\x66\x23\x28\xf5\xec\xea\x82\x2c\xed\x0c\xf7\x68\x72\x1e\x8b\x5d\xfb\x22\x08\x5f\xf7\x9a\x6d\x7b\x2a\xfd\x22\x56\xa6\xc6\xd7\x36\xff\xa5\x2a\xe5\x40\x32\x96\x33\x97\xf4\x69\x38\x0b\x28\x1d\x2a\x9e\x1d\xdb\x2e\x27\x49\x51\x8e\x5c\xf7\x93\x1c\x72\x21\x57\xd5\x9f\x50\x2c\x20\x07\x49\xb3\xb1\xd2\x42\xd2\x39\x8c\xaa\xc1\xed\xcf\xaa\xbf\xec\x0f\x5b\xe4\x6d\xfe\xda\xda\x72\xeb\x70\x46\x77\x45\x85\xe6\xf0\xf4\x90\x65\xfb\x75\xeb\x09\xc7\xae\xb6\xd5\x65\x7c\x1d\xf8\xa8\xf2\x42\x59\x0d\xbb\x9a\x45\x34\xa0\x2d\x45\x56\xe6\xa0\x46\x95\xc0\x6a\xad\xbc\x7c\x49\x96\x54\xaa\xa3\xfe\xf0\x21\x42\x52\xb6\x64\x2a\x46\x6e\xfa\x16\x89\x9a\x39\x98\x07\x51\xea\xa2\xd4\xae\xe8\x5e\xe5\x32\xfa\x54\x08\x85\xb6\xe1\xaa\x6e\x4b\xeb\x36\x7b\x15\xaa\x2c\x10\x52\x50\xad\x41\xf2\xd7\xe4\x7f\x1d\xff\xe3\x77\xbf\x8c\x4f\xfe\x72\x7c\xfc\xc3\xcb\xf1\xbf\xff\xf8\xbb\xe3\x7f\x4c\xf0\x1f\xff\x7a\xf2\x97\x93\x5f\xfc\x1f\xbf\x3b\x39\x39\x3e\xfe\xe1\xbb\x77\xdf\xdc\x5c\xbd\xfd\x91\x9d\xfc\xf2\x03\x2f\xf3\x5b\xfb\xd7\x2f\xc7\x3f\xc0\xdb\x1f\xf7\xec\xe4\xe4\xe4\x2f\x5f\x05\x93\x4e\xf9\xea\x7d\x20\xf7\xb6\x6d\x1c\xad\x66\xe2\x7a\x8f\x91\xb4\xc3\xd6\x55\xc8\xb8\x1e\x0b\x39\xb6\x5d\xbf\x26\x5a\x96\xa1\xc6\x0f\xbf\xbd\x62\x9f\xff\x0f\x9e\x6b\xd6\xb7\x59\x25\x85\xf4\xe8\x80\x3f\x96\xa0\xa1\x20\x91\xa0\x9f\xc2\x28\x6e\x47\xf2\x82\xdd\x5a\xaa\xdc\x97\x76\x83\xfe\x1a\xec\xe4\x55\xe9\x36\x5c\xd7\x5a\x74\x9f\x49\x91\x4f\x48\x23\x68\x60\x89\x80\x20\xee\xb9\x5b\x08\x04\x4e\x24\x83\x5d\x3d\xa4\x0d\x76\xf5\x1d\xa4\x0c\x76\xf5\xc1\xae\xbe\x77\x1b\xec\xea\xd7\x96\x9d\xff\x2a\x8d\xea\x9b\x01\xaf\xa6\xd3\xdb\xce\x98\xdc\x9d\x23\x09\x77\x45\xde\xe6\xb4\xe8\x12\x76\xdb\x35\x0a\x25\x66\xe8\xad\xb7\x18\x69\x41\x0a\x51\x94\x19\xd5\x3b\xc2\xcd\x22\xc5\xe1\x56\xe8\xe0\x3e\x98\xae\x4e\xd5\xb0\xda\x40\xbe\x3d\xf8\x91\x9c\x65\x19\x61\xdc\xca\x36\xa6\x83\x4e\xa3\xfb\x98\x35\x09\xd6\x94\x44\xa8\x0d\x9e\x5d\x9a\x57\xbd\x73\x25\xb3\x9b\x59\x1f\x8a\x28\x4d\xa5\x66\x7c\x3e\xb1\x25\xb5\xad\x84\xed\x02\xa3\x18\xaf\x0a\x6b\x77\x22\xa7\xd2\xe0\x2b\x60\x1b\x42\x95\x12\x09\xa3\x3e\x89\xc5\x25\xe5\x2b\xed\xa7\x07\xdf\x40\xd3\x5b\x0c\x4c\x4c\x20\x05\x9e\x74\x0c\x71\xfb\x68\x81\x74\xfc\x3a\x4c\x57\x66\x26\xde\xf2\xa5\xbb\xfa\x49\x5a\xda\xe0\x7c\x2b\x7d\xc6\x1b\xf7\xcb\x8a\xc4\x36\x67\xd8\x85\x80\x35\x02\xb2\x51\x50\xaf\x6c\xb5\x15\xf0\x5f\xe5\x1c\xed\xb6\x7b\x83\x15\xaf\x70\x35\xa7\x8a\xeb\x0a\xd2\x5f\x37\xf4\x9b\xda\x6b\xdc\xd6\x6b\xbe\x84\x50\xb8\x70\x8d\x27\xae\xb6\xf3\x18\x9a\x4e\x5f\xb4\x9c\x9e\x68\x38\x8f\xa3\xdd\x3c\x87\x66\xd3\x57\xad\xe6\xb3\xd6\x68\xa2\x69\x33\x71\x34\x99\x38\x5a\xcc\x01\x91\x41\x31\x35\x97\x38\x5a\xcb\x63\x98\x7b\x0b\x09\x33\xf6\x29\xd2\x25\x79\xc6\x6b\x9f\x18\x4b\x81\x6b\x36\x63\x66\x5e\x85\x19\xa6\x00\x8e\x2c\x0f\x68\x62\x61\x9b\x9c\xa8\x5e\xc7\x45\xf7\x31\xa5\xc8\x1a\x28\xe3\xca\x11\xd7\xdb\x8c\xa3\x83\x10\x41\x06\x21\xe2\x80\x36\x08\x11\x83\x10\x31\x08\x11\x07\xb6\x27\x12\x22\x1c\x83\xff\xf2\x25\x88\xc8\x49\xfe\x08\x5f\xf2\x5c\xb6\xc6\xf3\x36\x8a\x0a\x5e\x66\x8f\x09\x34\x51\x71\x92\x1a\x6c\xef\x14\x47\xee\xc6\x30\xda\xf7\x52\x25\x86\x69\x61\x6f\x0a\xb2\x60\x73\xb3\x3d\x33\x58\x42\xe6\x0c\x24\x24\xa7\x9c\xce\x2d\x7a\xb6\x16\x55\x41\x3b\x21\xb1\x38\x96\x64\x1d\x81\x3b\xd7\xe0\x68\xd0\x00\x69\x98\x64\x26\x68\xda\xe0\x53\x8a\x64\xec\x16\xc8\x1b\x28\x32\xb1\x72\x00\xd8\x3c\x25\xd7\x9a\x6a\xc3\xec\xaf\x41\x77\x0a\x7b\x0e\xe2\x38\x48\xf0\x55\x99\x65\x57\x22\x63\x49\x27\x1f\x79\x8c\xad\x78\x81\x1b\xb0\x28\xb3\x8c\x14\x48\x48\xb7\x7d\xf8\x9e\xa3\xf4\x73\x96\xdd\xd1\x95\x1a\x91\x4b\x58\x82\x1c\x91\x8b\xd9\xa5\xd0\x57\xd6\x06\xd8\xad\xdf\x66\x9e\xac\xed\x9c\xb0\x19\x79\x8d\x95\x7f\x34\xd1\x74\x8e\x16\x69\x1f\xa4\x3b\x32\x1b\xaa\x39\xa8\xbd\xd3\xef\x98\x7a\x4e\xd3\x6c\xf8\x29\xfd\x2d\x8e\x6e\x6e\xfe\xce\xa7\x36\x68\xaf\x66\x6c\x06\xc9\x2a\xc9\x9e\x8d\x61\x9e\x25\x98\x37\x51\xe3\x8c\x37\xd8\x89\x5a\x29\x0d\xb9\x87\x52\x45\x8b\x3c\xe3\x44\x82\x2a\x04\x57\x28\x18\xd7\x5c\xa2\x7a\x11\xeb\xe1\xe8\x98\xec\x10\xd1\x60\xdf\x59\x97\x0a\xd5\xa2\x0a\xa1\xf4\xb5\xa6\x52\x77\x95\x4f\x62\xa9\x4f\x57\x9e\x10\x73\x92\x13\x9a\x65\x46\x8a\xcc\x73\x48\x19\xd5\x46\xd5\xa1\x33\x8d\x00\xba\x2d\x1f\x54\x22\x01\xe7\xdd\xd7\x73\x59\x50\x9e\x66\x20\xc9\x8c\xb2\x4c\x75\xcf\xa9\xd9\xf0\x75\x69\x90\x39\xe3\xe8\x7c\xb2\xb1\xd9\xe8\xfc\x32\x7f\x25\x89\x90\xa9\x83\xaa\x65\x5a\xf9\xaf\x82\x98\xa8\x69\xef\x51\xb2\x6b\x6c\xef\xf5\xd0\x76\x32\xcd\x44\x72\xab\x48\xc9\x35\xcb\xec\xcb\x0b\x71\x8b\x2a\x5f\x86\xec\xa4\xf3\xd0\xdd\xb9\x54\xf5\xcf\x71\x75\xc0\xc6\x86\x2a\x75\xfa\xdb\xfa\x2b\xfc\xa0\x23\x71\x11\x0c\x0f\x31\xcc\x0e\xf0\x09\x92\x68\x28\xef\x6f\x3f\x41\xd2\xa8\xb1\x60\x56\x92\x22\x9b\x43\xc8\x55\x7a\x1b\xa1\x80\x6c\x6f\xea\x43\x06\x80\x23\x36\x5b\xec\x28\xb7\x73\x4b\x96\x2f\x0d\xe7\xa8\x24\x19\xe3\x60\xab\x20\x23\x7a\x22\x61\x58\x75\xba\x7d\x0c\xad\x8b\xda\x29\xe4\x24\x65\x12\xb1\xec\x57\x1e\xf6\x22\x98\x34\x4f\x0b\xc2\xbd\x0b\xa1\xc9\xf1\xd1\xe9\xd1\xc9\x46\xcc\xc1\x91\x11\xc4\x33\xb0\x77\xe0\xc4\x41\x34\x56\x2f\xa5\x58\x5e\x64\x2b\x7c\x8f\xa3\x74\x64\x94\xf3\x08\x61\x73\xe6\xea\x93\x25\xf7\xb3\xe2\x20\x25\x47\x44\x09\xa2\x25\xf5\x25\x5c\xec\xa7\xe6\x21\x2d\x4b\x77\x7b\x1f\x1f\xfd\x72\x34\x22\xa0\x93\x13\x72\x87\x95\xb4\xcd\xf4\x4d\xc8\x8d\x20\xa5\x0a\x9f\xb1\x8a\x90\x95\x28\xad\x31\x02\x97\xb0\xc8\x58\xc2\x74\xb6\xc2\xbb\x85\x88\x52\x5b\x44\x63\xaa\x43\xa0\x30\x9b\xed\xed\x27\xa6\x5d\x0a\xa5\x61\xd6\x2f\x71\x37\xd9\xfb\x89\x50\xa3\x79\x2c\xe1\x74\x01\x34\xd3\x0b\x9b\xe0\xc3\x05\x1f\xff\x13\xa4\x40\xb8\x4c\xee\xbe\xf9\xe2\xca\x91\x46\x0c\x50\x7b\xa4\xca\x1d\xe6\x8e\xfb\x06\x3a\xcb\x3f\x64\x9d\x1f\x7d\x7b\x73\x73\xf5\x0d\xe8\x35\x96\x6e\x46\xf1\x39\x5d\xe8\x9d\x00\x39\x13\x32\xef\x01\x6f\x8f\x13\x6c\x3e\x26\x85\x90\x7d\xb8\x62\x16\x42\x05\xad\x25\x79\x84\xfb\xe5\x5b\xa1\x34\x1a\x77\x9c\x16\xc2\x21\x31\x9b\xa0\x9d\xa0\xe4\xb2\x11\xc8\xc5\xd5\x84\xfc\x5d\x94\x66\x42\xa6\x74\x9a\xad\x2a\xb4\x7c\x05\xe1\x35\x68\x5f\x18\x52\x5e\x98\xeb\xc3\x6c\xc8\x6f\x81\xa6\x20\x15\x72\x67\xa0\x91\x6a\x80\x45\x38\xeb\x0d\xda\xa2\x2e\xe5\x79\xa9\xb4\xc8\xc9\xc2\xbd\x76\x1b\x47\xd3\x1d\xce\x09\x1e\x60\x0f\xa6\x26\xa1\xb0\x1c\xdc\xfd\xe6\x8b\xe3\xcf\x1b\xac\xcb\xce\xbb\xfb\x7c\x8a\x45\xbf\x92\xe6\xb4\x39\xef\x8f\x85\xe9\xe2\x76\xb2\xcc\x56\x8d\x10\x8f\xdd\xe3\x6a\xcb\x9d\x11\x36\xd7\x3b\x42\x4f\x58\x70\x4f\x71\x6b\x2d\xc7\x49\x3d\x21\x8f\x56\x5b\xd6\x48\xb3\x6e\xf3\x59\x6b\x73\x77\x3b\xf9\xb6\xce\x99\xaa\xc2\x5f\x13\xca\x05\x67\x09\xcd\xd8\x3f\x21\x25\x65\x21\xb8\xcb\x35\x45\xb1\x36\xa1\x0a\xc6\x18\xf7\xcb\xb5\x2b\x78\x57\x63\x3d\x1a\xee\xa0\x85\x40\x59\x0f\xa3\x1c\x0d\xbb\xb7\x54\xf7\xb7\xa4\xf0\x23\xac\xfa\xc6\x62\xc5\xd9\xf1\xe4\xb3\x90\x25\x89\x4d\x12\x0e\x06\xa8\xd8\x84\xa7\xd0\x82\xd0\x24\x41\x34\x4b\x7b\x5d\x21\xe3\x55\x20\x97\xe1\xfb\x2b\xda\xbc\x1a\x11\xb0\x6f\xb2\x97\x0d\xc8\x90\x84\x97\xf9\x14\x64\x8d\xed\x23\xf5\xe6\x9c\x06\x86\xf0\xb7\x86\xb5\xc3\x79\x7f\xac\x97\x31\x28\x9f\x03\x79\x65\x46\xfe\xd3\x1f\xff\xf8\x87\x3f\x46\x18\xc7\xbc\x5e\x95\x1a\xc0\xc9\xc5\xd9\xe5\xd9\x4f\xd7\x1f\xcf\x11\x6c\x35\xb4\xfb\x48\x49\xe3\xb1\x53\xc6\xa3\x26\x8c\x3f\x6a\xba\x38\x62\xef\x04\x73\xd9\xd8\x47\xe2\x1a\xa9\x32\x9b\xb0\x54\x16\xa0\xd5\xe9\x24\x8d\x92\x6b\x46\x8d\x0a\xdf\x9d\x4d\xb7\x9d\x61\x58\xbd\xe0\x54\x2a\x03\x28\xa2\xa9\xfb\xd7\xa6\xb7\xf5\x14\x87\xb4\x94\xb6\xf8\x59\xe5\xa8\xaa\xed\xf6\xce\x41\x85\x54\x90\x29\xcc\x84\x04\x32\x05\x9c\xfa\xca\xcb\xf0\x05\x99\x05\x14\x24\x82\xa7\x21\xca\x41\x2c\x61\xd7\x51\x12\xf5\x34\x5e\xdb\x3e\xbd\xe5\xb8\xbe\x64\xdc\x60\xa8\x63\x9a\x95\x8e\xb3\xf3\xe3\x70\x50\x8b\x9b\x82\xbd\xfd\xe9\xdf\xba\x3b\xc9\x92\xe2\x5a\x24\xb7\x11\x2d\x67\x81\xac\xed\x8d\x39\x83\x89\xf5\x07\xde\x9c\x5f\x59\xe2\xcc\xca\x5c\xbe\xbf\xa9\x41\x92\x30\xb3\x8d\x7c\xef\xfd\x53\xdf\x3a\x8f\x21\xe5\x29\xb9\x85\x22\x4c\xef\xf4\x58\xd7\x3e\x02\xb3\x1d\x80\x39\x71\x55\x23\xa9\x04\xc2\x85\x45\x23\xb0\x5c\xc2\x47\x4e\x5a\x81\x39\x0c\x1e\xbf\xe1\xa5\x47\x8f\xa0\xd3\x51\x66\x94\x65\xe8\x0f\x2f\xb9\x66\x39\xb8\x9c\xbe\xa4\xa8\x5c\xa6\xcd\xf8\x89\x2f\x88\xfd\x7c\xa9\x56\xc9\xa3\xf7\x3e\xae\xf0\x60\xeb\x62\x28\x9a\xcc\x97\xad\x2e\x38\x0e\x6e\x61\xb8\x06\x75\xe1\x90\x36\xa8\x0b\x1d\xd5\x85\x42\xc2\xb5\x16\x9d\x65\xd2\x68\x21\x38\x96\x8c\x1d\x01\x38\x4e\x54\xa5\x3b\x23\x63\x5c\xfa\x41\x40\xac\xf0\xd9\xd5\x45\xe5\x23\x13\xad\xe8\x17\x9b\x88\xae\xca\x64\xe1\x7d\xa9\x1c\x94\x3a\xc5\x58\x9b\xb2\xb0\x06\x68\xbc\xe3\x4a\x09\xdd\xe3\x7e\x0a\x09\x90\xe3\x3c\x8e\x6a\x14\x2e\xf3\xba\xc0\xed\x87\xa0\x13\xeb\x5c\x6f\xdc\x9a\x58\x5b\xda\x4d\x57\x58\x8d\xf7\x7a\x62\x13\x49\xd5\x02\xb0\xc0\x08\x7c\x62\x5a\xd9\x41\xaf\x10\xab\xca\xcf\xb8\x11\x1c\xe6\x92\x26\x40\x0a\x90\x4c\x18\x61\xa3\xe4\x3a\x15\x77\x9c\x4c\x61\xce\xb8\xf2\x2b\x16\x42\x92\xdf\x12\x18\x5b\xc4\x54\x55\x48\x72\x42\x3e\xb4\xea\xab\x38\x54\xbe\x44\xd4\x3c\xd3\x4d\xd1\x28\xd2\x94\xa0\x14\x83\xdb\xa0\xc4\xd2\xe8\xd5\xc6\xf3\x40\x09\x7a\xf7\x0c\x75\xdf\x10\x76\x66\x8f\x4b\x8e\x2f\x9a\x42\x46\x57\x16\x12\x60\xc6\x38\x5a\x89\xa5\x3a\x99\x84\x07\x6b\x75\x26\x50\xc8\x46\x9f\x3b\x77\x06\x53\x44\x02\x4d\x16\x21\x92\xdd\x10\x15\xf6\x50\x1b\xa2\xc2\x3a\xb6\x21\x2a\xec\xd0\x36\x44\x85\x1d\xda\x86\xa8\xb0\x3e\x45\x1d\xf4\xdf\x93\x37\x44\x85\x0d\xf6\x97\xb5\x36\x44\x85\x75\x6a\x43\x54\xd8\x83\xad\x77\xfc\x79\x88\x0a\xdb\xa3\x0d\x51\x61\x7b\xb6\x21\x2a\x6c\x88\x0a\x1b\xa2\xc2\x86\xa8\xb0\x80\x36\x44\x85\x1d\xfe\x7a\x83\x9b\xa7\x7b\x1b\xa2\xc2\x86\xa8\xb0\x03\xdb\x10\x15\xb6\x77\x1b\xa2\xc2\x86\xa8\xb0\xfb\xda\x10\x15\x36\x44\x85\x6d\x6d\x83\x55\x72\xa3\x0d\x51\x61\x5b\xda\x10\x15\x76\xd8\x38\x83\xba\x10\xd6\x59\x74\x75\xc1\x47\x38\x5d\x49\x31\x7d\x36\xb4\xad\x2b\x8c\x1e\x61\x89\x0b\xaf\x12\xb3\x16\x82\x96\x25\xb0\x23\x72\x56\x3b\xac\x07\x0b\x8f\x78\x48\x25\xe6\x0e\x57\x15\xd2\xf5\x9c\xe8\x5c\x07\xc7\xbd\x78\xd4\x41\x75\x5a\x08\xfb\x7f\x75\xd4\x4b\x23\xdc\xa5\xb3\x6d\xfc\x99\xe1\xc2\x42\x62\x5c\x9e\x26\xbe\xa5\x27\xc1\x40\x11\x62\x5a\x62\x5e\x62\x3d\x8d\x65\xe9\x67\x1c\x4b\x1f\x63\x58\x9e\x23\x7e\xe5\xd9\x63\x57\xe2\xf8\x45\x23\xf8\x44\x23\x89\x0a\x8f\xe0\x5f\x70\x31\xcf\x37\x0b\x09\x6a\x21\xb2\xce\x0c\x27\x16\xb3\x79\xc7\x38\xcb\xcb\xdc\x9c\x5d\x65\x78\x0a\x5b\x56\x71\xd9\xaa\xd2\x84\xed\xdd\x6e\x5d\xc6\xe6\x41\x96\x02\x56\x3a\xa7\x2c\x33\x5b\x0b\x91\x1e\x17\x74\x69\xf8\x8d\x2a\x93\x04\x20\x0d\xd1\x3e\x9b\xe6\xc6\x3f\x4c\x2a\x0a\x2d\x26\x3d\x53\xe4\x55\xd8\x55\x13\x26\x90\x36\xac\x2e\x7f\xf8\x7d\xa7\x3e\xe6\xb2\x88\x73\x25\x7f\xf3\xe1\xea\xbc\x71\x25\x53\xee\x6f\x64\xc6\x97\x22\xc3\xd5\xa0\xf6\x21\xa3\xf8\x3c\xe3\xfd\x1c\x6e\x05\x08\xb2\x00\xc4\x10\x0f\x42\x95\xdc\xb6\x2b\xd0\xe8\xa1\x6d\x4f\xd6\x1c\xd7\x12\xe4\x92\x25\x30\x79\x02\x3d\x32\x96\x6e\x16\x7e\x1c\x08\xda\x74\xf1\xc5\xfb\x22\x7c\x5d\x5b\x72\x2a\x73\x70\xc3\x84\xe0\x28\xc5\xd8\xbf\x8c\x26\xd5\xda\xe0\xfa\x7d\x8b\x37\xe8\xf9\x02\x92\xdb\x0f\x36\x0c\x29\x88\x8c\x63\x05\xb0\xad\x2a\x83\x61\x20\xf6\xff\xa6\x99\x98\x9e\xe6\x54\x69\x90\x46\xad\x71\x97\xfb\x38\x31\x14\x30\x3e\x9f\xe4\xe9\xc9\xe4\x37\xbf\x09\x22\xe2\xc2\x19\x35\x5d\xe2\x4c\x03\xb2\x1b\x3d\x24\x0e\x0f\x7e\x0a\x86\xfd\x0b\xb4\x3f\x36\xea\x30\x9a\x59\x09\xdf\xa5\x01\xd7\x78\x60\x54\xe8\xd3\x47\x84\x0e\xdc\x96\x44\xb0\xb3\xc6\x64\x06\xfd\x88\xfa\x7c\xb4\x88\xcf\x28\x92\x72\xa4\x48\xcf\x1e\x45\x79\xf6\x46\x93\xe9\x4b\x64\x67\xb4\xa8\xce\x58\x11\x9d\x51\xa2\x39\x63\x44\x72\xc6\x8b\xe2\x8c\x13\xc1\x19\x3f\x7a\xf3\xd1\x22\x37\x3f\x8b\xa8\xcd\x88\x6e\x87\x48\xd1\x9a\x4f\x11\xa9\xd9\x5f\x0b\x0a\x89\x10\x9d\xf9\x74\x91\x99\x51\xe6\x31\xaa\xf6\x19\xc8\x12\x9e\x21\x12\xf3\x29\xdc\xaa\x8f\xe6\x52\x8d\xe0\x4e\x8d\xe9\x4a\x8d\xe6\x46\x7d\xb4\x88\xcb\xf0\x68\xcb\xa8\xb6\x80\x27\x89\xb2\x8c\x19\x61\x19\xbc\xbe\x8c\x33\xcd\x68\xf6\x06\x32\xba\xba\x0e\x8b\xb6\x8b\xb5\x12\x97\x1b\x11\x79\xd6\xe8\xdc\x8e\xc9\x5c\x50\x45\xbc\x57\xda\x85\x64\x7a\xb7\xb7\x13\x81\x31\x6a\xcb\xbe\x5f\x50\x7c\x66\xcf\x9c\xcc\xa4\x37\xc6\x6d\x0b\x60\xd1\x93\x5d\xf3\xad\xb8\x23\x62\xa6\x81\x93\x63\xc6\xfd\xce\x39\x69\x58\x69\x6a\xe7\x46\xb0\xb7\xc2\xf4\xfa\xea\xa5\x1f\xe4\xcb\xf3\x5a\xa0\x5f\x47\xa9\x5e\xfb\xad\x1c\x8d\x0f\x3b\xae\xdc\x83\xb3\x32\x6b\x3b\xaf\xac\x43\x2b\x8e\xe7\xea\x55\x5d\xab\xfc\x15\xd2\x53\xb1\x22\xca\x53\xe2\x80\x90\xbe\xbc\x7d\x12\x1c\x4f\xdc\x56\x6e\xaa\x00\xe0\x87\xfc\x5c\x37\xe7\x57\x83\x9b\xab\x5f\x86\xd7\x67\x0a\x6e\xfd\xf2\x34\xae\xa7\x0f\x66\x1d\x34\xae\x5f\x8b\xc6\xd5\xc0\x20\xfb\x46\xd2\x04\xae\xfa\x24\xc0\x79\x06\x52\x67\x62\xd5\x72\x5c\xc5\x2e\x38\x80\xcd\xd0\xa9\x11\xe6\x10\x4c\x6d\x56\x66\xd9\xca\xda\x11\x5b\x70\x83\xdd\xb7\xd6\xcd\x02\x36\x70\xda\x5a\x79\x62\x0d\xea\x6a\xfd\xa4\x90\xc2\x49\x25\xb2\xe4\xdc\xdc\x56\xee\x38\x19\xe2\x8d\x3e\xa2\x80\x77\x37\xa9\xd3\x16\x8a\x9c\x62\x73\x33\x5d\x46\xc2\x40\x80\xb9\x3a\x47\xa4\x45\x88\x19\x75\x26\x64\xc2\xa6\xd9\x8a\x2c\x68\x66\x14\xa6\x3b\xa6\x17\x84\x92\x5b\x96\x65\xae\x9b\xee\x13\x75\x0d\xda\x7a\x8d\xad\x54\x93\x09\x3e\xc7\xc9\xa0\x96\x10\xf8\x54\x40\x62\xc6\x4c\x32\xa0\xbc\x2c\x2c\x9d\x46\x46\x5a\x89\x52\x7a\x3a\xbb\x0f\xef\x7d\xd6\x95\x4c\xc5\x59\x36\xf2\x53\xde\xc6\x1b\xdc\xdc\xf3\xb5\x59\x59\x41\xea\xa0\x02\xef\x98\x82\x11\xf6\xd9\x99\x26\x4b\x8b\x2f\x9a\x6e\xf7\x8d\xfd\xac\x90\x62\xc9\x52\xeb\x30\xf7\xdb\xc2\x48\x3b\xdd\xdf\xff\x23\xf6\xeb\x59\x2b\x17\x7c\xcc\x61\x4e\x51\x44\x76\x0c\xcd\xc6\x64\xda\xf1\x6d\x04\x20\x4f\x59\x42\x35\x18\x05\x5a\x14\x2d\x1c\xd1\x25\xa3\x9d\x29\x31\xef\xd3\xd8\x51\xe4\x98\x0b\x22\x30\x85\xab\xe4\x4c\xaf\xd0\xab\xb7\x28\x35\x49\xc5\x1d\x3f\x09\x39\x98\x36\x42\x81\x92\x29\x68\x5a\x27\x60\x79\x91\x4c\x11\xe0\x74\x9a\x99\xb3\x87\x01\xfa\x37\x5b\x37\x00\x99\x01\xd5\xa5\x04\x32\xa7\x3a\x80\x4b\x6c\x91\xe8\xed\x7a\xde\xbf\xed\x98\x72\x3e\xbb\x19\x29\xb9\x82\x40\x41\x36\x9a\x1a\xd0\x31\xb5\xd0\x9c\x68\x51\xea\x9e\xdc\x23\xbb\xcc\x47\x77\x0b\x96\x2c\x9a\x8a\x22\xcb\x41\x11\x51\x06\x58\xf3\x5a\x2a\xa0\x1b\x2e\xa6\x96\x37\xd8\x9e\xb6\xb6\xae\xae\xd3\x18\x3b\xec\xb2\x21\x95\x37\x12\xc4\x7d\xa4\x94\x4d\x55\x7d\x73\x79\xfd\xd3\xf7\x67\xff\xf3\xed\xf7\xdd\x16\xfe\x2d\x4d\x16\x4d\x20\x67\x4e\x28\x5e\x14\xc8\xe4\x17\x74\x09\x84\x92\x92\xb3\xff\x2e\x5d\xb8\xda\x71\x35\x5e\x47\xb6\x1a\xb1\x56\x7e\x47\xc1\xd7\xdc\x12\x9d\x38\x47\x8c\x35\xfd\x9e\x29\x44\x05\x46\x22\x5c\xe8\xbe\x50\x40\x66\x52\xe4\x6b\x8a\x16\xb9\xac\xe2\xe2\x56\xd6\x16\x81\xaa\xd9\x02\x64\x37\x89\xfc\xcd\xfb\xb7\xd7\x98\xec\x5c\x48\x8b\xa2\x8d\xe9\x01\xd8\x27\x8e\x6e\x51\x06\x2c\x3d\xe9\x84\x9c\xf1\x95\xfd\xd2\x32\xb3\x8e\x22\x4a\xc6\x94\x06\x14\x4e\x9d\x22\xe9\x23\xfb\x5e\xbc\x9c\xe0\xff\x5e\x10\x9a\xa6\xd2\x68\x9a\x55\x96\x45\xb2\x9e\x14\xd6\x69\x64\xab\xbf\xb2\x69\xd6\x98\x5c\x0e\x1a\x13\x31\x3a\x75\xf8\x4e\xa4\x6e\x25\x50\x08\xc4\x18\x1e\x2b\xdd\x2a\x2d\xa9\x86\x39\x4b\x48\x0e\x72\x0e\xa4\xa0\x3a\x59\x90\x9c\xae\x48\x22\xa4\x2c\x0b\x8b\xf1\x90\x52\x4d\xbb\x8d\xfc\xb5\x90\x24\xf7\xdc\xd9\x70\x33\x23\x92\x5f\x6f\x0f\xe2\xac\x59\x76\xf3\x9f\x4c\xa9\x12\xd4\xe9\xab\x97\x7f\xfe\xfd\x1f\x3b\xaa\xd7\x11\x0f\x6e\xd7\xf0\xa7\x80\xb0\xa7\x76\x08\x98\xdf\x60\x18\x30\xdd\x00\xe7\xa0\x7e\x87\xd8\x9d\x8f\xdc\x50\x31\x3e\xcf\x82\x0d\x20\xc1\x66\xc0\x50\x23\xe0\xb8\x7e\x83\xab\xae\xb6\xc0\x70\x4b\x60\x8b\x86\xee\xa6\x94\x78\x56\xb0\x5a\x82\xf3\x76\x2f\xc7\x90\x05\x6f\x28\x76\x17\x57\x9e\x4b\x85\xd8\x8f\x50\x9b\xa8\x0c\x53\x16\xe1\xc1\x0e\x6b\x63\x1e\x46\xe4\x25\xf9\x0f\xf2\x89\xfc\x07\x5a\xc1\xfe\xd4\x7d\xa8\x38\x36\xa6\x18\x21\xf8\x0b\xa1\xf4\xc5\x55\xa4\x85\xfe\x9b\xb9\xaf\x4c\x8f\x66\x3d\xb4\x20\x53\xe6\xcc\x11\xf0\x49\x83\x34\x6a\xa0\x5b\xc3\xd0\x99\x0b\xb2\xa8\x19\x02\x3f\x97\xdd\x1d\x1a\x60\x70\x31\x6b\x07\xee\x3f\xd1\xfe\xc6\x81\xbf\x15\x4a\x5f\x3a\x6e\xdd\x44\x27\x69\xd2\x91\xe3\x45\xdc\x62\xf7\x21\xa3\xbe\x33\x7b\xaf\x2e\x68\x40\x52\x81\xb9\x0b\x36\x0b\x73\xc1\x02\x98\x43\x7f\x4e\x6c\x58\xac\x68\xbc\xad\x7b\xdf\xd6\x5a\xb3\xe9\xa3\x45\xc6\x29\x29\x8d\x1a\x20\x85\x48\x27\xa8\xdf\x04\x50\x61\x66\x23\x6d\x08\x03\xf7\xa8\x46\x13\xab\xaf\x55\x1e\x62\x3c\x70\x86\x63\x25\x94\x77\x95\x61\x6d\x93\x30\x03\x29\x6d\xa6\xef\x74\xe5\x53\x85\x82\x77\x5b\x10\x97\x2b\xa4\xd0\x22\x11\x59\x1f\xb6\xca\x95\xa3\x05\xe7\x1e\x7d\xb5\x95\x87\xfc\xaf\x6f\xae\x46\xe4\xe6\xfc\x6a\x44\x84\x24\xd7\xe7\x61\x01\x50\x4d\x13\xcc\x8b\x9b\xf3\xab\x17\xcf\xba\x02\xc4\xab\x52\xe8\xcd\xee\xd0\xc9\x66\x08\x6d\x4e\x8b\xf1\x2d\xac\x3a\x4a\x77\x31\x24\xcc\x71\xb5\xb1\xa2\xbc\x90\x9d\xe6\x9c\x16\x07\xf7\x26\x81\xa6\xac\xd7\xc0\x2b\x3e\x63\xb0\xa2\x34\x1e\x02\x4b\x2e\x96\x90\x5a\xad\xd9\x8f\x02\x3c\x2d\x04\x33\x3a\xd2\x00\xcb\x72\x5f\x1b\x60\x59\x1e\x68\x03\x2c\xcb\xb6\x36\xc0\xb2\x1c\xd0\x06\x58\x16\xdb\x06\x58\x96\x36\x21\x7d\x4c\x2a\x1a\x60\x59\x1e\x6c\x03\x2c\xcb\xce\x36\xc0\xb2\x74\x68\x03\x2c\xcb\x66\x1b\x60\x59\xee\x69\x03\x2c\x4b\xdd\x06\x58\x96\x01\x96\xe5\xa0\xd6\xbb\xec\x80\x01\x96\xe5\xbe\x36\xc0\xb2\x6c\x6d\xbd\xd1\x64\x06\x58\x96\x1d\x6d\x80\x65\xd9\xd1\x06\x58\x96\x01\x96\x65\x80\x65\xb9\xbf\x0d\xb0\x2c\x9d\xdb\x00\xcb\x72\x58\x1b\x92\x04\x0f\x6c\x03\x2c\xcb\x00\xcb\xb2\xde\x06\x58\x96\x07\x5b\x3f\x8c\xdb\x03\x2c\xcb\x00\xcb\x72\x6f\x1b\x60\x59\x06\x58\x96\x7b\xdb\x00\xcb\xf2\xa5\x18\x5e\x07\x58\x96\x01\x96\xe5\xbe\x31\x06\x8d\xeb\xb0\x36\xc0\xb2\x0c\xb0\x2c\x1b\x6d\x80\x65\xd9\x6c\x03\x2c\xcb\x00\xcb\x32\xc0\xb2\x0c\xb0\x2c\x55\x1b\x60\x59\xbe\x74\xdb\x93\x04\xc5\xfe\x09\x57\x22\x63\xc9\x2a\x38\x39\xe7\x03\x28\x51\xca\xc4\xdc\xd8\xd8\x2d\x29\xb0\xdf\xca\xaa\x10\x24\x64\xf7\x0c\xf1\xe0\x43\x63\xe2\x9a\xc8\x07\xd2\xcd\xc1\x63\x4c\x41\x2f\xd0\x0f\xfc\x0b\x5e\x76\x8f\x22\x18\xfb\xe2\xd4\x76\xfa\xba\x19\x4c\x83\xb5\xf6\xe6\x8b\xf4\x21\xfb\xb2\x89\x52\x54\xed\x22\x2d\x2a\x66\xcb\x76\x6e\x2e\x5a\x14\x19\x0b\xc9\x63\x25\xe4\xba\x44\xe9\x02\x9c\x1b\x5c\xbd\x26\x49\x51\x8e\x48\x0e\xb9\x90\x01\xa9\x0d\x11\x34\xb8\xd6\x56\xe9\xc3\x3a\x7d\xb0\x04\xf9\xc9\xd7\x02\xe7\x7f\x65\xf5\x85\x1a\x54\xaa\x5a\x2b\xe6\xd9\x61\x50\xbc\xd9\xc5\x6c\x3d\x8e\x94\xe9\x96\x15\xe8\x52\xe8\x0f\xee\x70\x3f\xdb\x7a\x45\x8e\x5a\xf0\x53\xf8\x6c\x20\x53\xe7\x22\x2f\x4a\x0d\xad\x8b\xcd\x4e\xb1\x55\x3a\x98\x0a\x65\xe8\xcf\x93\xbc\x99\x08\x3e\x63\x73\xa7\x7d\x9f\xe6\x94\xd3\x39\x8c\xab\xd9\x1e\xd7\xc8\x0c\xa7\x9d\x2f\xea\x67\xcb\xdc\x4c\x32\xca\xba\x07\x0f\xc6\x62\x13\xe7\x48\x05\xa2\x76\xd5\xc1\xf0\x98\x5d\x56\x4d\xf3\xa8\x8a\xf8\x66\x96\x6f\x4c\xfc\x57\xf6\xc7\xa3\x00\xed\x91\x6a\xb4\x55\xa0\x62\xb4\x65\xa7\x76\x0f\x6d\xaf\x34\x46\x4e\x68\x56\x2c\xee\xd7\x19\x43\xb2\x26\xdf\xac\x38\xcd\x59\xe2\x4f\xde\x59\x96\x89\xc4\xda\x6a\xda\xda\x66\xe0\xab\x58\xf2\xcd\x3b\xe5\x79\xa9\xe9\x34\x83\x09\xb9\xb0\x50\x13\x82\x67\x2b\x73\x30\x15\x68\x1f\xbf\xe0\x4e\x45\x98\x8a\x19\x12\x1c\x1b\x18\x18\xbb\x55\x5a\xc7\xdd\x66\xb1\x31\x80\x1b\x1e\x27\x38\x10\xe0\x5a\xae\xcc\xc6\xbc\x12\xe9\xb5\xd9\x9b\xad\xa7\x83\x21\x33\x02\xe3\x61\x63\xc4\xc2\x06\xc6\xc1\xc6\x89\x5e\x0d\x8f\x5c\x8d\x1b\xb5\x5a\xfb\x16\x2c\xe2\x4f\x33\x8d\xa7\xb5\x2d\x0a\x91\x4e\xb6\xf0\x2c\x22\x66\x81\x14\x98\x11\xaf\x44\x6a\xa4\x29\x09\x96\x71\x55\x67\xd4\x5a\x16\x2f\x0c\x71\xb7\x68\x0a\xa4\xba\x16\xb3\xe8\x92\xb2\xcc\x1c\xe0\x40\x02\x36\xd1\x13\xc3\xdc\x35\x11\x44\xe0\xd8\x00\x23\x24\x74\xfb\xc7\x04\x08\x21\x08\x6e\x99\xb3\x6e\x50\xa2\x24\xe2\x11\xf8\x1e\xa9\x68\x64\x08\x98\xbd\x98\xd3\x4f\x68\x81\xa2\xb9\x28\xb9\xb6\xc8\x21\x56\x28\xac\x2e\x72\x9b\x47\xf1\x84\x61\x51\x8f\x2a\xbe\x91\x38\x4c\x9a\xa6\x1e\x3f\xe0\x2a\x46\x1a\x29\xd5\x1a\x24\x7f\x4d\xfe\xd7\xf1\x3f\x7e\xf7\xcb\xf8\xe4\x2f\xc7\xc7\x3f\xbc\x1c\xff\xfb\x8f\xbf\x3b\xfe\xc7\x04\xff\xf1\xaf\x27\x7f\x39\xf9\xc5\xff\xf1\xbb\x93\x93\xe3\xe3\x1f\xbe\x7b\xf7\xcd\xcd\xd5\xdb\x1f\xd9\xc9\x2f\x3f\xf0\x32\xbf\xb5\x7f\xfd\x72\xfc\x03\xbc\xfd\x71\xcf\x4e\x4e\x4e\xfe\xf2\x55\x77\x07\x53\xa8\x37\x35\x9e\x2f\x35\x92\x27\xf5\x51\xfc\xa8\x2e\x23\xe9\xd9\x0f\xbf\x4b\x3c\xdd\x38\xfe\xce\x00\x7d\xdf\xf1\x97\xc1\x6a\xf7\xc5\xac\x1e\x9f\x29\x22\x72\xa6\x35\xa4\x28\x75\xd2\x26\x40\xc9\x9a\xca\xef\x18\x16\x02\x09\x51\x6d\x7e\xd9\x00\xca\xa8\x2d\x05\x9d\xc9\x12\xde\x87\x87\x46\x0e\x4e\x58\x5e\x64\x90\x03\xd7\xc8\x78\xc6\x5e\x7d\x41\x8b\xd1\xa4\x7e\x83\xc4\xea\xb4\xf0\x29\x01\x48\x1d\x91\x03\x6f\x6c\xb4\x81\x37\x0e\xbc\xf1\xa1\x16\x6c\xf6\x8c\xc1\x18\x3f\x34\x89\x70\xe6\x0a\xe5\x0d\xd4\x68\x04\xad\x12\xd8\xc5\x0c\x7d\xe1\x4b\x96\x96\x34\x6b\x62\x7b\x7a\xb8\xc7\x6e\x1c\xa0\xa1\xa4\xe7\x74\xb5\xa1\x93\x33\xce\x9a\x40\xa2\xa3\x2a\x82\x03\x1f\x74\x72\x59\xed\x3d\x7c\x71\x96\xdd\xd1\x95\xea\x88\x37\xf8\xb5\x90\x18\x14\xb0\x36\x28\x11\xd2\xc7\x8a\x34\x95\x95\xb6\xb5\xb6\x9b\xb7\x67\xdb\x44\xb7\x91\x02\x9c\xba\x74\xa4\xaa\x07\xbd\x4f\xc0\x4d\x44\x1d\xe5\x6f\xf6\x79\xb7\x17\xbf\x06\xad\x9d\x3d\x67\x6d\x4b\xd0\x7a\x4e\x2b\x17\x57\x7b\x7a\x6c\x58\x08\xa2\x7c\x9a\x2f\x67\xc2\xac\x09\xe2\xe3\xcf\x66\x90\x74\x8c\x15\xb4\xc8\x0a\x5b\xc6\xb1\xe1\xca\x9a\xf1\x92\x66\xd9\xca\xcf\x09\xa4\x44\xf0\x4e\x03\xc1\x27\xa6\x49\xc9\x35\xcb\xcc\x66\x22\x12\xe6\x65\x46\x9b\xa6\x20\xf7\x66\x3e\x82\x2a\x9d\x90\xf7\xdc\x28\xa3\xf5\xc3\xdd\x8c\x98\x6b\x03\x18\xa1\x23\x03\x0d\xe9\x08\xbb\x5e\xdf\x81\x18\x83\xd4\xe2\x18\xd5\xb2\x74\x1a\xde\xcf\x65\x15\x63\x32\xb1\x07\xb1\x72\x80\x93\x94\xcd\x66\x66\x64\xc4\x36\xe4\x42\xe6\x74\x93\x2a\xca\xd3\x4e\xa3\x1b\x09\x08\xb3\x0f\x9a\x78\xad\x58\xa3\xe3\x85\x51\xcd\x13\x2a\x5f\x34\xab\x3b\x9c\x65\x7a\x21\xca\xf9\xa2\xde\x15\x61\x53\x4e\x94\xc6\xc8\x1b\x33\x99\xca\xc7\x9c\xad\x6d\x36\x65\x64\x1d\x9e\x80\x15\xc9\x04\xd8\xe3\x7e\x47\x3b\x8e\xbd\xe1\x1d\xb6\xe1\xbe\x76\xcd\x7d\x4a\x0e\x86\x77\x41\xda\xc8\x9f\xe2\xf0\x49\x47\x78\xe1\x09\xb9\xb0\x78\x08\xa3\x76\xaf\xad\x29\xb1\x93\xd1\x08\x6f\xf2\x81\x7a\x1d\x63\xbb\xd6\x06\x60\x55\x06\x12\x22\xcc\xda\xce\x29\x5f\xf9\x80\x7f\x0c\x3f\xb2\x89\x4a\x55\x0e\x42\xd6\xcd\x8a\x5a\x9d\xa5\x27\x2f\x98\xa2\x20\x29\x25\xd3\xab\x73\xc1\x35\x7c\xea\xc4\xfb\x62\xdc\xea\xd7\x6d\x32\x5a\xf7\xba\x27\x91\x88\xc2\x22\xfd\xad\xd5\xcc\x59\x88\x32\x4b\x11\xdc\xb4\xe4\xc8\x76\xba\xdd\x28\x17\x33\x73\x85\xdb\xfd\x86\x37\x26\xba\x46\xd6\x09\xf3\x51\x7f\x36\xf8\xf1\xbf\x4b\xb6\xa4\x19\x70\xdd\xf8\xc5\x15\xc6\x81\x35\x7f\xf4\x98\xfe\x33\x4d\xd5\x6d\xad\x61\xc0\xb8\x10\x69\xad\x50\x9c\xfa\xa9\xc3\x8f\xe0\x93\xfe\x0c\x7d\x67\x28\x30\x5d\x49\xb6\x64\x19\xcc\xe1\xad\x4a\x68\x86\x7a\xd4\x73\x2b\xe7\x67\x3b\xe8\xc2\x9d\x29\x45\xa6\x8c\x00\x66\x94\x55\x23\x6a\xda\x28\x58\x74\xe1\xcc\x29\xe3\x58\xf0\x25\xc0\xcc\xef\x06\x55\x36\x0c\xd7\xe8\xdb\x05\x95\x66\x17\xfa\x70\x5b\x7b\x35\x4e\x85\xc8\x1c\x68\x68\xb6\xaa\xe9\x62\xdd\xed\xe1\xc8\x8b\xc5\x4f\x1c\xee\x7e\x32\x54\x28\x32\xcb\xe8\xbc\xbe\x9a\x41\x6f\xe4\x2e\x84\x47\x00\xef\x9c\x68\x44\xc4\x2c\x8d\x60\x63\xa4\x8a\x3a\x36\xba\xc9\xc1\xbb\x2b\x74\xaf\x4e\x90\x9f\x50\x45\xaa\xb1\xbb\x89\x0e\xa6\xfd\xfe\x04\xef\x89\xf3\xb3\xab\x9f\xae\xff\x7e\xfd\xd3\xd9\x9b\x77\x17\x97\xdd\x23\x20\x85\x06\x6b\x5d\x69\x48\xf7\x49\xe5\xb4\x37\xab\x50\xc5\x7d\x4c\x84\x9a\xa0\xb3\x04\xc1\x39\x78\x2a\xee\x02\x3d\x85\x66\x4f\x01\xed\x26\xb9\xd2\xa2\x38\x93\xb9\x90\x57\x52\xcc\x58\xd6\xd9\xc9\x14\xeb\x04\xaf\x91\xe3\x33\x00\xce\xdc\xc7\xf5\x75\x63\xf3\xc5\x37\x7d\xd6\x8d\x2b\x83\x61\x56\xb2\xe9\xa6\xbb\x65\xab\x15\x4f\x6e\xa3\xdb\xd7\x48\xec\x7e\x88\x9e\x75\xcf\x3c\x7b\x26\x9e\x21\xa3\xe3\xcf\x63\xf8\x54\x33\x91\xd0\x0c\x4b\xc7\x84\x6d\x7c\x12\xd9\xb7\xba\x4e\x57\x23\x73\x80\xfa\xed\x4c\x32\x41\x53\x54\x56\x1d\xf3\x4f\xc1\x63\x1c\x7b\xb1\x0b\x5d\xa0\x41\x84\xdc\xd8\xa8\x6d\x1c\xcf\xa7\x3a\x14\x12\x2a\xa9\x66\x6d\x78\x41\xba\x17\x7a\xf3\xed\x5d\xdb\xa1\xec\xde\xb2\x95\x94\x17\x7a\xe6\xaa\x61\xdc\x01\x63\x33\xb4\x80\xa0\x19\x88\xcd\x70\x53\xa2\x01\xe8\x7b\xbf\x0c\x01\x35\x27\x22\xa5\x4a\x62\x27\x3d\xd9\x9d\x76\x7e\xaa\x1d\x69\x43\x4e\x6f\x99\x99\xc1\x59\xcd\xa4\xfd\xb6\xf1\x32\x88\x8d\x3b\x0d\xdc\x8f\x1f\xb1\xba\x91\xe7\xff\x54\x06\xe3\x3c\x55\x4b\x4c\xc6\x8d\xa3\x55\x48\x18\x6f\x1e\xaf\x50\x94\xab\x0f\x25\xd7\x2c\x07\x8f\x65\x30\x5e\x93\x89\xa4\xfd\xfa\x48\x55\x80\x9f\x51\x36\x3a\x21\x7f\xe5\x78\x5e\x39\xa4\x64\x4c\xb8\xa8\x97\x08\xf8\x4c\xc8\x04\x9d\x34\xcf\xba\xc1\x13\x5a\xd0\x29\xcb\x58\x08\x33\x8f\xb5\xc1\x11\x46\xbf\x41\x0f\x9a\x93\xd2\xf4\x34\x95\xa2\xb0\x37\xb1\x4f\x30\x0c\x0f\xf1\x6a\x27\xb2\x34\xa1\x5e\x51\x60\x9f\xb5\x09\x99\x4b\xca\x75\x6d\xc8\xdd\xd8\x38\xbf\x46\x19\x24\x86\x10\x40\xd3\x78\x05\x29\xce\x52\xc3\x33\x9a\xcb\x16\x7c\xae\xfa\x06\x8f\x79\xee\x5f\xae\x91\xc9\x42\xae\xde\x5f\x5f\xfc\x7f\x6b\xe7\xa6\xbb\x68\x67\x5b\xbf\xc1\xf1\x0c\x3f\x88\xb6\x6d\x3e\xb8\xe2\x3f\xc3\xc6\xf9\xb2\x37\x4e\x65\x20\x7a\x76\x64\x9f\x0f\x25\x6f\x17\x20\xaf\x49\x23\x79\x90\xac\x73\x55\x25\xc0\xb7\x7b\x6d\xfa\x7a\x24\x10\xf3\x08\xd7\x0c\x3d\x6f\x0d\x6b\xad\x16\xb6\xe4\x4d\x94\x52\x99\xcd\xdb\x75\x46\x33\xf5\xb9\x5e\x91\x21\xa6\x9d\x42\x8a\xe4\x9d\x28\x79\x1c\xa8\xa0\x80\x1d\x57\x11\x42\x52\xe0\x42\x3b\x6b\x0a\xea\x12\x62\x86\xdf\x12\x1b\x36\xd5\x40\x01\x6c\xc9\x39\x01\x62\xd6\x4d\x43\xb4\x62\xca\xef\x8b\xab\x8a\x22\xab\xc2\x94\x0a\xd6\x5d\x18\x4e\xb4\xaa\x03\xa9\x66\xa2\x7b\xfc\x88\x04\x9a\xa2\x8e\x59\x50\xbd\xb0\x08\x55\x39\x55\xb7\x90\xda\x0f\x02\x33\xf3\xab\x8c\x0a\xf4\xf2\xfb\x57\xbb\x31\xf3\xeb\x93\x20\xd0\x26\x6c\x71\xba\x30\xed\x22\x44\x1b\x7b\xd6\x03\x11\xc0\xdb\xcd\x22\xbc\xe7\xd9\xea\x83\x10\xfa\xeb\xaa\x7c\xd6\x73\x1f\x8e\xbf\x39\x8f\x44\xdb\x8e\x89\xa6\x69\x8a\x24\x8f\x71\xe3\x20\x6b\x6c\x14\xfd\x0a\xe5\x8c\x66\x41\x7e\xad\x8c\x51\x96\xfc\x4c\x7d\x23\x45\xd9\x59\x8c\x8b\xa9\x72\x7e\x73\xf1\x06\xef\xbe\xd2\x81\xb7\x70\x2d\x57\x58\xfa\xd1\x1b\xbd\x22\xfa\x6d\xfe\xea\x60\x72\x9a\x9c\x2d\x18\x11\x83\x90\x77\x74\x45\x68\xa6\x44\x65\x55\xe3\xdb\x3c\xae\xde\x9d\x6b\xbe\x9e\x0a\xbd\xd8\xf0\xe3\x76\x0d\x04\x31\x6d\x73\xbc\x51\x03\x03\xa6\x4e\xb7\x65\x7c\x63\x58\x8d\x59\x22\x85\x84\x04\x52\xe0\xc9\xe7\x7a\x22\x9e\x1b\x92\x04\x4f\xd5\xa5\xe0\x86\xbd\x3e\xf7\xb9\xba\xa8\x4c\x94\x6e\x35\x9a\xa7\x08\xad\xd9\xce\x8f\x48\x31\x52\x0f\x99\x6b\xa9\x42\x52\x78\x2e\x66\xe8\xf8\xb4\x9b\xee\xbb\x72\x0a\x99\x59\x6c\x96\x65\xb6\x2c\x3b\xd5\x36\x3a\x81\xe5\x74\x0e\x84\xea\xea\x10\x6a\x41\x80\xab\x52\xba\x7d\xd3\x31\x46\xc7\xb4\x2a\xbc\xc8\xbd\xda\x5f\x2f\xde\x90\x97\xe4\xd8\xbc\xdb\x09\x4a\x1c\x33\xca\x32\x44\x04\xc2\xf8\xbf\x35\xaf\xec\xcc\x47\x28\x05\x4d\x01\xf2\x11\x22\xa4\xbd\x5a\x46\x84\x0b\xa2\xca\x64\xe1\xe7\x80\x09\x5e\x19\x85\x1d\x44\x6c\x50\x3a\xcc\xc0\x76\xe2\xdd\x87\x7f\x55\x20\x9f\xfb\xd8\x9a\xeb\xf0\xaf\x4f\x78\x1d\x36\xb5\x44\x73\xfc\xdb\x0b\x66\xcf\x6a\x0e\x9a\xa6\x54\x53\x77\x4d\xfa\x07\x86\x5d\x3b\x5c\x96\x01\x97\xa5\x82\xef\x19\x2f\x3f\x59\x00\xc6\x5e\x78\x3e\xae\xdf\x22\x45\x24\xf1\x0b\x2d\x1a\xae\x3b\xef\xa4\x88\x90\xeb\x7a\xd1\x3a\x46\xa3\x1d\x5a\x37\xde\x12\xd4\x26\xf3\x83\x51\x84\x28\x4f\x45\xbe\x41\xe4\x4c\x48\x02\x34\x59\x74\xa6\xa6\x11\x38\x32\x1c\x4c\xd7\x7e\xdd\x3e\xa1\x0c\x96\x90\x45\x33\xef\x7f\x6f\x7a\x33\x93\xe3\x77\x2e\x76\x4f\x32\x3a\x85\xcc\xe1\x6f\x58\x50\xa6\x88\x27\x2c\x92\x19\x5c\x8a\x88\x51\x31\x1f\x84\x0d\xe6\xa2\xd5\x44\x98\xee\x3f\x8b\x79\x88\x1a\x7f\x71\xe3\x02\x4c\xea\x79\x40\x33\xe8\xe7\x30\x0f\x65\x80\x80\x48\xd6\xe7\xc1\x48\x9b\xed\x79\x40\xf9\xab\xef\xf3\xa0\x20\x49\x44\x5e\xf4\x24\x58\xf2\xc6\x06\xe2\x1b\x8a\xf6\x0d\x8c\x6c\x3f\x4c\x83\x22\x9e\x1d\xac\x2e\xd5\xf6\x1e\xf4\xd8\xba\xff\x57\xe3\x3a\x47\x6e\xb7\x7e\xc7\xbb\xd1\x83\x83\x32\xab\x11\x5d\x87\xbf\xc6\x1b\x6f\x88\xc4\x6c\xb5\x27\x8f\xc4\x6c\x40\x73\x51\x34\xcf\xb7\xa2\x22\xbf\x84\x78\x4c\xa3\x04\xe0\xbc\x02\xc7\x9c\xb2\x82\xea\xc5\x88\x48\xc8\x2c\xe0\xb5\x63\xcf\xb7\xd6\xe2\x75\x84\x1c\xc7\x13\xe4\xd9\x4d\x1d\xb6\x6a\xa1\xb9\xa2\x86\x6f\x6e\x0b\xd9\xb4\xcf\x5c\xbe\xbf\x69\xe6\x00\x53\xbe\xb2\x48\x05\x01\x19\xae\xb6\xf5\x4f\xac\x78\xcc\xb0\xce\xf5\x55\x7c\xec\xa8\xce\xb0\x7a\xea\xdb\xa3\x3a\x9f\xee\x98\xee\x17\xe9\xb9\x1e\xe7\x19\x95\x84\xf5\xa0\xcf\xcd\x31\x22\x2c\x5d\xf0\x19\x70\x77\x67\x8f\x2c\x20\x7f\xb3\x14\x79\x35\x3b\x31\x9c\x43\x33\x3e\x57\x4d\x2b\x08\xcd\xb2\x28\x71\x09\xdb\xcc\x20\xfe\x18\x60\xb2\xb4\xcb\xd8\x5f\x57\xf3\x5b\xd5\x13\x42\x46\x7f\xc0\x84\xf1\x79\x9b\x22\x32\xa3\x52\x7c\xe6\x86\x88\x79\xae\xe8\xb9\x34\x33\xa8\x19\xcd\xae\x0b\x48\xfa\x72\x5d\x7c\xf3\xee\xfa\xac\x4d\x19\x0a\xc3\x0e\x89\x0f\xf0\x7b\x42\xd3\x9c\x29\x85\x1e\x1f\x98\x2e\x84\xb8\x0d\x1a\xf2\xd8\xa7\xdb\xce\x99\x5e\x94\xd3\x49\x22\xf2\x46\xe6\xed\x58\xb1\xb9\x3a\x75\x1c\x65\x6c\x26\xee\x84\x30\x9e\x55\xd9\xca\x68\x2e\xe4\x5a\x39\x17\x42\xf0\xcb\x93\xa4\x7a\x7b\xdc\x7a\x98\xa3\x52\x85\x67\x6f\x4e\x0f\xc2\x25\xe2\xe6\x7d\x76\xb1\x63\x73\x57\x85\xe1\x9a\xaf\xed\xac\x1d\xef\xce\x54\x0b\x22\xb2\xda\x24\xeb\xf3\x68\xb5\xd7\x67\x9f\x24\x27\xf5\x27\xa0\x82\xa2\x60\x63\x9e\xb9\x6f\x6b\x92\x48\x0a\x16\x48\x04\x10\xd3\x8b\xee\xcc\xbb\x47\xff\xf6\x11\xd6\x86\x73\x3f\x3d\x8a\x85\x56\x79\x96\x65\x66\x21\xa9\x03\x95\x69\x44\x78\xa2\x6e\x52\xe1\xb8\x60\xa5\x78\x0b\xe1\x62\xb4\x85\xe6\x5b\x84\xd7\x51\x3f\x66\xda\x23\xe8\x78\x08\x1f\x2d\xec\xd8\x94\xe4\xec\x93\xa1\xb0\x39\x62\x1b\x73\x04\x3d\xff\xdb\xbf\x0e\x28\x95\x43\x30\xfa\xa0\x82\xee\x1a\x99\x15\x6a\x0e\xe2\x13\xa4\xb5\xb9\xb6\xcc\x17\x97\xa0\x8d\xa6\x66\xe7\xad\xe9\x7e\x30\x9a\x95\x2c\x23\x1c\x86\x10\xd7\x30\x69\xba\x87\xa3\x72\x8a\xc0\xf3\x80\xae\x62\x47\x93\x91\x41\xbc\xf0\xf6\x54\xae\x63\xb2\x25\x85\xe7\xc9\x5c\xc8\x64\x7f\x37\xf2\x23\x3a\xab\x48\x5f\x1c\x56\xa1\x70\x2b\x0d\xe8\x98\x67\xc3\x5a\x69\xc2\xd7\xb0\xcd\xe8\xa5\x2b\x91\x6e\xa0\xda\xf8\x42\xe2\xdd\x4b\x46\x98\xcd\x51\xab\x20\x5c\x38\xfb\x48\xa3\x96\x37\x7c\x82\xa4\xd4\x90\x3a\x70\x2b\x67\x53\xb6\xc0\x38\x6d\x6a\x3a\x53\xe0\x13\xf5\x5d\x05\x41\x35\xaa\xb1\x9d\x9d\xae\x53\xc1\x73\x8d\xc8\x7f\x21\x97\x74\x58\x96\x75\xf9\xf1\xab\xea\xe7\x5d\xa7\x02\x03\xa9\x13\xca\xbd\x6e\x85\x55\xac\xad\x89\xdb\x81\x58\x39\x2c\x8f\x29\x90\x82\x4a\x9a\x9b\x3b\x58\x11\xb7\x3c\x53\x98\x33\x9b\x1a\xd8\xb8\x14\x2b\x14\xac\x6e\xa8\x6e\xa8\xd8\x30\x4d\x72\x36\x5f\xd8\xd3\x42\x28\x96\xfa\x23\x3e\x70\x2c\x13\x34\x25\xc8\x58\x84\x24\x77\x54\xe6\x46\x16\xa0\xc9\x02\xa3\xd0\x28\x27\x69\x69\xce\x03\x41\xcc\xa6\xd5\x58\x69\xaa\x8d\x8e\x09\x32\xc0\x08\xe7\xa7\xe9\x19\x8a\x51\x3c\x76\xa1\xad\x67\xc6\xd4\x31\x27\x2d\x8a\x15\xe4\xed\x27\x48\x1a\xe5\x9c\xcd\xf6\x74\xf5\x9c\xcd\x35\x45\x6f\x03\x03\xcd\x9e\x5d\x2f\x4e\x44\x9e\x53\x1e\x2f\x71\x33\x50\x10\x39\xb7\xe4\x78\x15\xc7\x51\x47\x8c\xf2\x89\xc1\x9d\x96\x81\x7a\xb8\xf8\x96\x14\x62\x39\x9d\xd9\xd7\xe6\x98\x5a\x50\x20\x21\xab\x22\x60\x41\x64\x79\x3a\xb0\xac\x90\x10\x9a\x1c\x1f\x9d\x1e\x9d\x78\x98\xba\x8a\x84\x23\xd5\x4c\x2a\xb0\x29\xd0\xf5\x0b\x29\x96\x17\xd9\x0a\xdf\xe1\xc8\x56\x12\x0a\xa8\xd0\x69\x9a\x0f\x4f\xad\xc0\xf3\xd5\x02\xb2\x6c\x44\x94\x91\x75\xa9\x47\xbb\xb5\x9f\x9a\x87\xb4\x2c\x13\x6b\x13\x3b\x3e\xfa\xe5\x68\x44\x40\x27\x27\xe4\x4e\xf0\x23\x6d\xdd\x1b\xe4\x06\x15\xc6\x20\x9a\x2a\x22\x56\xa2\xc4\x62\xb7\x76\xd9\x2a\x80\xe4\x84\x1a\x5d\xa7\xb4\x02\xb9\x45\xd9\x80\x2c\xa0\x78\xab\x69\x6f\x3f\x31\x6d\xe4\x0e\x5d\xa2\x4d\xe2\xa5\x55\x0b\xc0\xf0\x52\x73\xbb\x99\x6b\xed\x74\x01\x34\xd3\x8b\x55\xa5\xaa\xd8\x3a\xa2\x8a\x94\xdc\x7d\x13\x2e\x30\xf5\x20\x4f\xb4\xbf\x19\x9b\xae\x9c\xf1\xcd\x42\x82\x5a\x88\xec\xd9\xf3\x36\x7d\x8d\xcb\x44\x70\x65\x78\x8a\xd1\xa7\x1d\x8d\xaa\x4a\x99\x73\x75\x36\x85\x43\x38\x35\xa7\x4c\x42\xea\x24\x23\x07\x97\xb8\xa0\x58\xd3\x1f\x85\x37\x48\x43\xf4\x90\xa6\x02\xf4\x87\x98\x55\x38\x9f\xbf\xe0\xa5\x69\x73\x59\xc4\xb9\x92\xbf\xf9\x70\x75\xde\xb8\x92\x29\xf7\x37\x32\xe3\x4b\x91\xe1\x6a\x50\xfb\x50\x21\x64\x60\x65\xda\x67\x0f\x27\x30\xaf\xf0\x8c\xe2\x81\x19\x3e\x9a\x6c\x70\x25\xa4\x26\xbc\xaa\x6e\x6b\x4e\xd8\x1c\xd7\x12\xe4\x92\x25\x30\x79\x82\x42\xfe\xb1\x00\xcc\xc3\x8f\x03\xc1\x00\x28\x7c\xf1\xbe\x08\x5f\xd7\x96\x9c\x6d\xf6\x65\x47\x29\xea\x71\x19\x4d\xaa\xb5\xc1\xf5\xfb\x16\x6f\xd0\xf3\x05\x24\xb7\xae\x1c\x41\x98\x21\x52\x01\x90\x2d\x1e\x0a\xc3\x40\xec\xff\x4d\x33\x31\x3d\xcd\xa9\xd2\x20\x8d\x5a\xe3\x2e\xf7\x71\x62\x28\x60\x7c\x3e\xc9\xd3\x93\x90\x1a\x65\xa4\xa1\x4a\x6f\x60\x8a\xb7\xe0\x65\x76\xe0\x83\x9b\x59\x79\x56\xb3\xbb\x99\xbd\x6f\x20\x4e\xe2\xd8\xb7\x37\x37\x57\xdf\x80\x5e\x53\x82\xcc\x08\xbe\x8c\x08\xee\x0a\x9b\x80\x34\x70\xdb\x10\x6e\xbb\x10\x2a\x1e\xb7\x8d\xe0\x22\xb1\x2c\x00\x51\xb1\x39\x87\xc4\x2c\xf4\xa8\x55\x0b\xc5\xc7\x0c\x5e\x5c\x4d\xc8\xdf\x45\x89\x02\x13\x9d\x66\x2b\x72\x47\x2d\x00\x81\x82\x30\x5e\xf0\xc2\x90\xf1\xc2\x70\x1b\xb3\xe1\xbe\x05\x9a\xda\xea\x06\x68\x85\x79\x7e\xcf\x56\x4d\x53\xb4\x65\x3b\x2f\x95\x16\x39\x59\xb8\x57\xb5\x73\x58\x5d\x85\xf6\xc0\x4d\xf0\x50\x5a\x37\x8d\x22\x12\x0a\xab\xeb\xb8\xdf\x7c\x11\x9a\xcc\x06\x0b\xb2\xf3\xdc\x28\x14\x44\x49\xd2\x9c\x2a\x27\xa6\xa3\xb5\x91\x71\x3b\x41\x41\x65\xe2\x6d\x8b\x52\x39\x91\x44\xaa\x9e\x48\xc2\x2b\x28\xfa\x4e\xc2\xfd\x85\x71\x6a\x31\x92\x28\xf5\x18\x49\xf4\x9a\x8c\xc4\x79\xc5\xdc\xe6\xb2\xb1\x32\x86\xd0\x50\x10\x41\xe2\xed\xbe\x55\xe9\x0c\xca\x05\x67\x89\xf5\x3c\x90\xb2\x10\x9c\x88\x52\x17\xa5\x46\x43\x4e\x42\x15\x8c\x97\x54\x32\xc3\x50\x6d\x39\xdb\x2a\x68\x89\x9b\xd3\xae\x85\x40\x2b\x47\xe5\x1f\xb6\x14\x87\x93\x19\xc9\x96\x60\x1a\x6e\xb6\xc8\x2b\xbc\xb1\x38\xe1\x3b\x9a\xf4\xda\x82\x42\x6c\xd5\xa9\x45\x3c\x75\x8c\xea\x05\x06\xe1\xa1\xdb\xc9\xc7\x70\x22\xe3\x34\xe2\x7e\x0f\x92\x64\xa2\x6a\x9f\x81\x2c\x01\x5d\xe3\x42\xae\xe9\xaf\x86\xc2\xcd\x39\x8c\x14\x16\xf2\xf8\xea\x70\xb3\xf6\xec\x14\x08\xe5\xe4\xe2\xec\xf2\xec\xa7\xeb\x8f\xe7\x3f\x5d\x9e\xbd\x7b\x1b\xd2\x75\x70\xb5\xb1\x98\xf5\xc6\xa2\x55\x1c\x7b\xa4\x7a\x8c\xa6\xa9\x64\x01\xfd\x89\x08\xb9\x46\x6a\x9a\x18\x62\x4e\x07\x68\x54\xc2\x09\x03\x95\x23\x6b\x26\x4f\xc3\x78\x9e\x95\xe3\xb8\x00\x80\x37\x90\xd1\xd5\x35\x24\x82\xa7\xcf\x1e\x48\x7d\x59\x31\x1b\x65\x09\xaa\x0a\x00\xc1\x1a\xba\x95\x2f\xb9\xe5\xca\x16\x79\x57\x7e\x33\xfa\xc0\xbe\x5f\x67\x07\x33\xe9\x9f\x93\x99\xf4\xc6\xb8\x5d\x80\x64\x18\xbc\xd3\x87\x5d\xf3\xad\xb8\x73\xb5\xbc\x8e\x19\xf7\x3b\xe7\xa4\x61\xa5\xa9\x9d\x1b\xe1\xc8\x67\x5a\x90\x57\x2f\xfd\x20\x5f\x9e\xd7\xc2\x05\xe5\xf4\xda\x6f\xe5\x68\x7c\xd8\x71\x55\x47\x18\xb5\x9d\x57\x21\xa1\x3e\x64\x8d\x8d\xbf\x9a\x54\x39\x65\xaf\x90\x9e\x8a\x15\x51\x9e\xfa\xe8\xb0\x2f\x6f\x9f\xe8\xa4\xb8\x16\xc9\x6d\x24\x9b\xeb\xcd\xf9\x95\xed\xed\x41\x3f\xd7\xcd\xf9\xd5\xe0\xe6\xea\x97\xe1\xf5\xc8\x66\x61\xd1\xec\xf5\xc1\x46\xd4\xa3\x41\xe3\xaa\x9b\x17\x7e\x64\xbb\x68\xc9\xa0\x71\xed\x68\x83\xc6\x75\x40\xf3\xc5\x63\x99\xe0\xdf\x48\x9a\xc0\x55\x9f\x04\x38\xcf\x40\x48\xea\x4a\xaa\x93\x5a\x8e\xab\xd8\x05\x07\x48\x2d\xff\xf0\x75\x70\xc9\xdc\xbc\x89\x8d\x66\x46\x3b\x62\x1d\x07\x5c\xca\x00\x51\xef\x66\xe1\xba\x76\x62\xae\x77\x10\x6f\xa3\xae\xd6\x4f\x8a\x0a\xbf\xdc\x17\xfa\x70\xc7\xc9\x10\x6f\xf4\x11\x05\xbc\xbb\x49\x9d\x36\x57\x90\x28\x36\x37\xd3\xe5\xcb\x2f\x5b\xd0\x2b\x5f\x2d\xaf\x26\xc4\x8c\x3a\x13\x32\x61\xd3\x6c\x45\x16\x34\x33\x0a\x13\x56\xf1\xa5\xe4\x16\xab\xcf\x62\x37\xdd\x27\xea\x1a\x5c\x6a\xa5\x95\x6a\x32\xc1\xe7\x38\x19\xd4\xa5\x50\x7c\x2a\x20\x31\x63\x26\x19\x50\x5e\x16\x96\x4e\x23\x23\xad\x44\x19\x21\x8b\xc2\xfb\xac\x2b\x99\x8a\x33\x07\x17\x62\x6b\xad\xdd\xbb\xe7\xdb\xb9\xb0\xe4\xbd\x5e\x80\xbc\x63\x0a\x46\xdd\xab\xcd\x12\x6f\xfa\x5d\xab\xfc\x66\x3f\xab\x20\x4f\x5c\xa2\x9f\xd9\x16\x98\x79\xda\x79\xac\x8f\xd8\xaf\x67\xad\x5c\xf0\x31\x87\xb9\x05\x56\x70\x0c\xcd\xc6\x64\xda\xf1\x6d\x04\x60\x95\x1c\xa0\xb4\x28\x5a\xa5\x76\x97\x8c\x76\xa6\x04\x41\x1c\xea\x1d\x45\x8e\xb9\x20\xa2\x30\x57\x57\xc9\x99\x5e\xa1\x57\xcf\x57\x79\x0e\x48\x8f\xba\x71\x11\x0a\x94\x4c\x41\x53\x67\x07\x37\x87\xa0\xc2\x30\x47\x78\x72\x73\xf6\x30\xa6\xff\x66\xeb\x06\xa8\x60\xcd\xe7\x54\x07\x70\x89\x2d\x12\xbd\x5d\xcf\xfb\xb7\x1d\x53\xce\x67\x17\x88\x9b\xdc\x0f\x24\x42\x73\xa2\x45\xa9\x7b\x72\x8f\xec\x32\x1f\x59\x48\x8a\x86\xa2\xc8\x72\x50\x44\x94\x91\x4a\x44\xbc\x72\xc3\xc5\xd4\xf2\x06\xdb\xd3\xd6\xa6\x74\xca\x3a\x15\x0a\x8e\xb1\xc5\x76\x80\xed\xbb\xb4\xd9\x06\xde\xe4\xb4\x9c\xcd\x40\xe2\x4d\x87\x04\x6f\x04\xce\x57\xa5\xb7\xfc\x1d\xd6\xcd\x80\xeb\x62\xb5\x40\x8f\x10\xeb\xdf\x61\x3f\xec\x18\xd2\x81\x62\x62\x65\x5d\x09\x0a\xb1\xdb\x39\x79\xfb\xfe\xeb\x6e\x5b\x34\x46\x25\x80\xb0\x0c\x53\x7c\xcf\xf7\xbc\x5b\x3c\x61\xdc\xfd\xb0\x0d\xa4\xc5\x6d\x8b\x24\x13\xca\x65\x33\xe3\xba\x24\x0b\xca\x39\x78\x83\x14\xd3\x68\xcd\x9e\x02\x70\x22\x0a\xb0\xf1\x74\x9d\x88\xa1\x44\x31\x3e\xcf\x80\x50\xad\x69\xb2\x98\x18\xea\xb8\xdf\x0b\x75\xda\xb0\xfb\x44\x69\x09\x34\xb7\x7b\x42\x42\x4e\x99\x1d\x9e\xd0\x44\x0a\xa5\x48\x5e\x66\x9a\x15\x55\x67\xdd\x2c\x89\x80\x00\x0e\xca\x66\x91\xfa\xb5\xc2\xc4\x90\x3a\x3f\x79\x54\x53\xe8\x5e\x5f\x34\xeb\x0b\xa1\xf9\x6c\x64\xbe\x85\xbc\xd0\xab\x2a\x8f\xb0\x9b\x0e\x34\x63\x52\x69\x92\x64\x0c\xb8\x76\x6f\x66\x21\x02\x91\x86\x91\x17\xa7\xb9\x9b\x11\xe5\xa6\x84\xa7\xa8\x7c\x17\x5a\xd9\x74\xb9\x8a\x08\xdf\x55\xca\x94\xb3\x75\xa8\x6e\xc9\x7a\xd4\x57\x92\xb1\x1b\xc7\xcf\x08\x6e\x1d\x2f\xe0\x58\x8a\xdc\x47\x0d\x12\x1a\xa5\xb1\xeb\x54\xc7\x30\xbe\x82\xe5\x5e\xfc\xb9\x1e\xb5\x20\x02\x6a\xdd\x02\x93\x59\x36\xb8\x0e\x6e\x28\x0e\x4b\x73\x0e\x20\x01\x23\x8a\xd2\x88\x4c\xe6\xc9\x79\x4c\x43\x96\x7b\x07\x4a\xd1\x39\x5c\x75\x0c\x49\x88\xc1\x70\x6a\x43\x1b\xc6\x32\xd4\xdb\x66\x01\x16\x97\x4a\x8b\xc6\x27\xcd\x34\xad\xa6\xf2\x98\xdb\x17\xe9\x44\x81\x57\x9a\xee\x24\xd3\x1a\x70\x97\x62\xf1\x25\x0c\x42\x5b\x07\xdb\x6c\xa7\x87\x75\x1a\xcf\x4d\x7a\x73\x3c\x23\x7e\xf0\xd4\x26\x5a\x4d\x81\x4c\x25\x83\x19\x99\x31\xcc\xfc\xc2\x9c\xa8\x91\xad\x1a\x40\xad\x09\x59\x29\x90\xf8\xda\xce\x2c\xe0\x5f\xbf\x1b\x3d\x7f\x73\xef\xaf\x65\xc9\x13\xda\xa8\xaa\x89\x50\x60\x6c\x46\xe6\x98\x87\xe5\x94\xe0\x7f\x7b\xf9\xef\x7f\x22\xd3\x95\x91\xd7\x50\x11\xd3\x42\xd3\xcc\x13\x40\x32\xe0\x73\xb3\x8a\xc8\x72\xbb\xf1\x8d\x16\x9c\x54\xb5\x38\x19\xcb\x99\xb6\x13\xf4\xea\xf7\xb7\xd3\xa0\xa3\x87\xfc\xf1\x34\x85\xe5\x69\x63\x0b\x8d\x33\x31\xef\xd6\xeb\x79\x8c\xe4\xdf\x20\x3b\xdb\x96\x13\x2d\x32\x96\xac\x9e\xeb\x4c\xfb\x62\x23\x64\x21\xee\xac\x31\x67\xf3\xa8\x36\x90\x59\x0a\x51\x94\x19\x4e\x1c\xf9\xba\xc2\xd3\x2b\x15\xac\x23\x15\x85\x1a\x09\x1b\xdc\x0e\x1d\xa9\x6e\xd8\xb5\x3b\xc7\x25\x21\x7a\x32\x85\xc3\x89\x70\x7e\xb7\xaa\x6e\x48\x67\x6b\xdc\xd7\x34\xcb\xa6\x34\xb9\xbd\x11\xdf\x8b\xb9\x7a\xcf\xdf\x4a\x29\x64\xfb\x9d\x33\x6a\xee\xf4\x45\xc9\x6f\xb1\xf0\x6d\x0d\x1e\x2b\xe6\x2e\xae\xd0\xa7\xfb\x37\xde\xae\x13\x31\xfe\x2d\x2d\x9c\xa7\x17\x49\xbc\x0d\xae\x1e\x19\x3e\xb1\xda\xd0\xc6\x09\x18\x9a\xbb\xe6\xcb\x43\xeb\x3d\x54\xf3\x68\xff\xfe\xe5\xbf\xfd\xd9\x32\x17\x22\x24\xf9\xf3\x4b\x4c\x1a\x56\x23\x7b\x01\xe0\x0d\x6c\x44\xad\x9c\x66\x59\x57\x2f\x41\x93\x05\x7c\xdd\xb9\x9e\x74\x0f\x8e\xbc\x7e\xb6\xd3\xbd\xb7\xca\x78\x73\xf3\x77\xd4\x17\x99\x56\x90\xcd\x46\x16\x9c\xa5\x32\x6b\x1d\xa1\x74\x75\xe4\xae\xbc\xee\xc0\x3e\xcf\xaf\xb4\x2d\x45\x56\xe6\xf0\x06\x96\x2c\xe9\xe6\xc0\x6c\xad\x4a\xab\x37\x6f\xa6\xcf\x98\x42\xcc\x9e\x69\x26\x92\x5b\x92\xba\x2f\x1b\xe1\xf2\xeb\x85\xb0\xbb\xcf\x42\xd7\xc4\x81\x80\x84\x81\x9d\xef\xdf\x4a\x15\xc8\x69\x51\x54\x80\x22\x92\xde\xb5\x26\x03\x59\x13\x82\x99\x06\xba\x11\x83\x9d\xe9\xa1\xae\xf4\xb1\x7b\x23\x73\x4d\x75\xee\xa2\x73\x7e\x41\xb8\x27\xbe\xa6\xbe\xbb\x1f\xb3\xb5\x21\xea\x0e\xfd\x69\x28\xf0\xdf\x16\x31\x61\x03\xc8\xaa\x42\x08\xaa\x36\x86\x95\x20\xcd\xf6\xc1\x5b\xa6\xbb\xf9\x32\x82\x33\x34\x2c\x4f\xa2\x35\x2f\xbc\x72\x42\xe7\x54\x3b\xfd\xc8\x7b\xd9\x29\x29\x40\x2a\xa6\x8c\xe8\xf4\x11\x0f\xd4\x79\x46\x59\xde\x70\xdf\x3d\xd7\x24\x6c\x46\xd5\xe7\xb4\x18\xdf\xc2\xaa\xe3\x86\x0b\x3c\x2e\xbb\x82\xfc\x73\x5a\x74\xbc\x07\xb0\xd4\x6c\xf8\x35\xd0\xf1\x72\xbe\x12\xa9\xa3\x03\xaf\x07\x5b\x45\xf8\x51\xd4\xd8\x88\x32\xd0\x73\x5f\x39\x1f\xeb\x85\x6b\xdf\x38\xe6\x93\xea\xca\xb1\x4f\x7d\x49\x17\x0d\xbe\xdf\xe7\x7a\xcf\x54\xc4\x47\x62\xa7\x41\x91\x4e\x78\x3b\xb9\x9d\xd1\xbe\x8e\x5a\x06\x2d\x7b\x32\x1b\xaa\xaf\x33\x34\x4d\x2c\x88\x7f\x00\x01\xe6\x28\xba\x41\xc9\xd1\xeb\xa3\x67\xbd\xe3\xec\xca\x48\x51\xd0\x39\x6a\xa6\x7d\x58\xa0\x75\x9a\x9a\x90\xb1\x0b\x71\x67\xbf\xb7\xd1\x25\x85\x7b\x0a\xd2\x1a\x77\x7c\x21\x82\x56\xc7\x46\x0e\xfa\x1d\xe1\xb4\x6b\x0b\x2d\x78\x47\x57\x84\x4a\x51\xf2\xa0\x54\x68\x74\x8c\x54\x8e\xb3\x77\x6b\x2f\x7b\x29\x38\x78\x27\x7d\xc8\x28\x37\x35\xe4\x38\x53\x36\x5e\x81\x71\xf2\x6a\xf2\xea\x65\x30\xed\x1f\x20\x29\xa5\x62\x4b\xf8\xe0\x6a\x92\x37\x9c\x2a\x17\xb3\x2b\xa1\x14\x9b\x66\x98\xbc\xa5\x05\x79\x6b\x0b\xb6\x6f\xbe\x68\x15\x38\x82\x6f\x2c\x64\x13\x5c\x34\x80\xc2\x63\x7b\x82\x9b\x01\x9f\x66\x80\x80\xa8\x8f\x7e\x49\x92\xb8\xae\x6b\x92\xe4\x65\x25\x49\xda\x7b\xef\x59\xdf\xd5\x17\xaa\xef\x03\x27\x79\xe7\x7c\x03\x75\x25\x7a\xe6\x2b\x1d\xe3\x47\x77\x92\x69\x77\xb8\xef\x98\x02\x72\x8c\x56\x89\xb5\xcd\x18\x84\xa7\xdc\xb4\x61\x05\x56\xac\x8f\x81\x87\x2c\xd7\x8f\x6e\x1f\x56\x69\x93\x9f\xd4\x51\xf8\x77\xce\x80\x55\xaf\xa0\xe3\xfe\xf5\xbd\xbc\xa0\x3c\xcd\x82\x78\x46\x35\x2b\xd9\x2a\x0c\xc7\xe6\x62\x46\x9a\x3c\xd1\x39\x30\x1b\xd5\x1f\x16\x54\x11\x2e\x48\x0e\x14\x23\x34\xcd\xf5\xe2\xd9\x60\x0b\x5b\x39\x22\x11\x76\xbb\xdb\x8b\xac\x79\x25\x38\x86\xfd\x86\x29\xc7\xa0\x0d\x27\x71\x3a\x88\x0d\xec\xc8\x69\x1a\x92\xe0\xdd\x98\xd5\x7a\xf9\x26\x75\xd8\xe4\x3a\x25\xf5\xd5\xb1\x46\xcb\x63\xd0\x31\x72\x45\xc3\xcd\xf0\x25\x46\x0a\x6e\x31\xcc\xd5\x61\x32\x41\xfe\x6c\xdb\xd6\x5f\xb7\xba\x18\x37\xde\x75\x3b\xc5\x15\xc1\x01\x34\x3c\xfc\xaa\xa3\x06\x37\xf4\x51\xa2\xd6\xa9\xee\x8a\x96\xb8\xbc\xc7\x30\xe8\x6d\xef\x96\xa8\x0c\x3e\x73\xe0\x20\xa9\xf3\x2c\xf8\x20\x51\x07\xc1\x42\x95\xe0\xc1\x27\xe2\x81\x1d\x67\x58\xfe\xc3\x92\x8a\xfd\x59\x00\x21\x28\xea\x1c\x0b\xb9\x76\xde\x9d\xd3\x64\x9b\xd0\x12\xf5\xb5\xd7\x90\xb5\xec\xf6\x6f\x20\x77\x9a\x65\xf9\xef\x92\x2d\x69\x06\x16\x76\xde\x33\x87\x67\x15\x28\x54\x39\xed\xab\xea\xe8\x74\x44\x54\x3d\xb6\x07\x3e\xec\xd4\x22\x23\xc9\x14\x2f\x5e\x90\x63\x3b\xc6\x91\x85\xca\x7d\x5e\x41\xd7\xad\xd5\xdb\x4f\x45\x40\xb5\xd5\x78\xeb\xf5\xf6\x53\x41\x31\x56\xa3\xe8\xc5\xc2\xfd\x4f\x58\xd0\x25\x20\x32\x31\xcb\xa8\xcc\x30\x30\xfd\xda\x4e\x19\x99\x96\x9a\x00\x5f\x32\x29\x78\x6e\x8e\x1f\x82\xd0\x18\xd6\x24\x01\xf1\xdb\x13\x50\xe4\xab\xe3\x8f\x67\x1f\x30\x71\xe9\xc4\x01\xdc\xbb\xf7\x2b\x15\xe2\x04\xac\xbd\x43\xa3\xbb\x3e\xee\x37\xe2\xdf\xdd\x6c\x17\x94\x50\xfc\x5c\x98\x77\xcb\x4b\x5d\xd2\x0c\x01\x9c\x93\xac\x34\xb7\xe1\xb3\xed\xec\xf8\x76\xf0\x10\x6b\x5e\x4c\x33\xb8\x83\xef\x7e\xc3\x3a\x1d\xd7\x18\x07\xf5\xbc\xb1\x5f\x37\xc0\xc4\x3b\x97\x65\xd8\x82\x21\xb9\x21\xea\x1c\xa9\x0a\x57\xb2\x99\x8b\xe3\x2e\xe3\x6e\x21\x1a\x58\xed\xc0\x26\x81\xfb\x3a\xa2\x1b\x56\x46\x2c\xab\xf2\xec\x76\xfc\x0e\x87\x21\xde\x31\xe8\x60\x8c\x8e\xb3\xeb\x53\xae\xce\x71\x69\x0e\xa3\x38\x6c\xa3\x5f\xb7\x90\x3c\xdf\x5c\x5e\x37\x6b\x70\x58\x07\xa0\x38\x78\x25\xaf\xea\x2e\xea\x42\x35\x58\xc4\xae\x72\xa2\x82\x9c\x5b\x81\x1a\x91\x63\x2b\x09\xfb\xcd\xe5\xf5\x81\x63\xf9\xdd\x6c\xa5\xe1\x29\x55\x36\x4e\xfa\xcd\xe5\xb5\x8d\x5d\x3b\x8c\xf6\xce\xce\x94\xee\x7e\x08\x04\x72\x43\x8c\xad\x0e\x1c\x3b\x9c\xcb\x9d\x55\x31\x21\x66\xf1\xd1\xef\x6b\xa9\x21\x17\x57\x84\xa6\xa9\xc4\x90\xe6\x2e\x67\xb9\x85\x6c\x47\x8b\xa2\x8a\x4c\xc5\xba\x2e\x54\x41\xf3\xd5\x1b\x7b\x00\x05\x9f\x8e\xeb\x67\xdb\x9b\xb2\xc8\x98\x0d\x41\x6d\x0e\x51\x57\xbd\xc9\xc5\xb2\x0b\x7f\x0a\xf1\x32\x76\xf6\x31\x06\xc9\x07\x51\xb1\xe7\x44\xd7\x8a\xb2\xb1\x77\xa9\x04\x25\xb2\x65\x5d\xf0\x3e\x78\x77\x3a\x76\x84\x61\x89\xd5\xee\xf4\x45\x63\x1f\x69\x67\x02\xd7\x92\xc1\xe6\xae\x24\x1f\xcc\xdb\x95\xc8\xce\x2a\x12\xd8\x12\x30\x6d\xe9\x7d\xe7\x0a\xff\x38\x4c\xa3\xc0\xbf\xcd\xbc\xa1\x1a\x4f\x26\x95\x5e\x14\xc0\x37\x0f\x78\xc5\x67\x39\x22\x6b\xc8\xf2\xe9\x9b\xcb\x6b\x7b\x93\xda\xe9\x72\x70\xdc\x6a\xeb\xde\xe9\x7c\xc9\x91\xe7\xaf\x6c\x14\xe2\xba\x69\xcd\xd9\x07\x17\x02\x10\x96\x70\x1b\xa0\x9d\x07\xa1\x82\xf6\x87\x43\x2a\xa0\x32\x59\x74\x59\xce\xd8\x2c\xd2\x52\x42\x52\x61\x73\xa3\x66\x42\xa2\xef\x79\x8c\x17\x7c\x26\xc4\x6d\x59\x3c\xce\x9d\xee\x06\x2e\xa8\x5e\x3c\x1a\xeb\x6c\x8d\x31\xdc\xea\xdd\xf7\x6c\xca\x55\x97\x0c\x8f\x40\x95\x03\xb4\x55\x34\x70\xe4\x1a\xa7\xec\x70\x16\xdc\x32\xfe\x9c\x67\xa5\xd2\x20\xbf\x66\x52\xe9\x17\x87\xf6\xf4\x91\x66\xcc\xc1\x06\xdb\xe0\x8d\xa3\x66\x77\x7f\x63\x7a\xe1\x2a\xca\x1e\x8d\xda\x5f\x99\xbf\x1d\x19\x47\x44\x48\x72\x74\x29\x38\x1c\x1c\x36\xb3\xa6\x77\x55\xd7\x7d\x75\x91\xed\x94\x54\xdc\x24\x2a\xc8\x2c\x9c\x08\x7e\xd1\xf9\x9c\xdd\xb8\x22\xbf\x86\x1e\x7f\x3f\x2a\xd0\x84\x62\x75\x44\xec\x7b\x51\x57\xd6\xb5\x85\xbd\x6c\x45\x62\xe1\x34\xbd\x55\x63\x69\x0f\x1c\xbc\x51\x19\x4c\x8b\xdd\x0b\xd0\x45\xa1\x3b\xf8\x9c\x21\x56\x06\xb8\x22\x28\xdf\x33\x7e\x7b\xe0\x21\x0f\x3b\x21\x6f\x37\x46\x6f\x80\x93\x78\xaf\x33\xe3\x16\x2e\xc0\x08\x38\x74\x2a\x4a\xed\x0b\xb3\x34\xfd\xcf\x8c\xff\x97\xdd\x17\x18\xba\x89\xd0\x2f\x87\xae\xca\x16\xb3\xaf\x1a\xd9\x00\x0f\x6f\xd7\x55\x2b\xae\x29\x16\x85\x7e\x23\x92\x5b\x90\x24\x33\x34\x1f\xba\xf9\xea\x0c\xce\x56\xf9\xdf\x83\x13\x3a\xba\xc6\x22\x40\xb1\x80\x1c\x24\xcd\x2a\xb3\xdf\x93\x2e\xfa\xf7\xee\xf6\xae\xc8\x68\xa6\x2f\xda\xd2\x7e\xae\xa2\xab\x48\x27\xe4\xed\xb6\xa7\x72\xba\xf2\x15\xca\x19\x47\x8f\xd9\x27\xa6\xf4\xe1\x37\x4c\x21\xd2\x26\x42\x68\xa9\x40\x8e\x2b\xc4\x58\x87\x3c\xa8\xaa\x4c\xd2\x14\xa6\xe5\x7c\xce\xf8\x7c\x62\xc5\x03\x14\x43\xea\x4a\xa6\xb5\x05\xe8\x6e\x01\x87\xc6\x86\x24\x12\xa8\xb6\xe8\x86\x85\x48\x6d\xa8\x00\x6b\xf6\x9e\x8b\xd4\x76\x3e\x5d\x59\xbb\xa3\xdf\x93\x15\x84\x10\xb9\xe0\x44\x48\x57\x15\x82\xa6\x29\x39\x38\x40\x65\xcb\x8a\x60\x5f\xf5\xfc\x5a\xe2\xca\xda\x2f\x7d\xa4\xea\x5f\x35\x16\x48\x95\x53\xa3\x7f\x94\xf2\xd0\xa2\xcc\x5d\x65\x94\x4e\xf2\x49\xa8\x2c\x7a\xc6\xeb\xed\x79\xde\xcc\xc1\xa7\x44\x43\x5e\x08\x49\xe5\x6a\x3d\xd1\xc2\xdc\x24\x66\xfb\x9a\x05\x5a\x9b\xdb\x2b\x91\x1a\x21\xe1\x60\x32\xb6\x6c\xdb\x25\x33\xca\xd6\xb6\x9d\xbb\xf5\x3c\xe1\xd5\xc6\x05\xf1\x6b\x46\x3a\x50\xa1\x92\x05\xa4\x25\xe2\x2e\xcd\x4b\x2a\x29\xd7\x60\xf8\xa7\x0b\xde\x5c\xb5\x02\x18\x2a\x8c\x82\x0a\xb0\x6c\x85\x19\x93\x58\x85\xd8\x7c\x82\x05\x90\xbb\x84\x59\x38\xe1\xd8\x74\xd4\x00\x42\xb8\x59\x00\x31\x92\x64\x06\x1a\x27\x1f\x96\x2c\xd1\x7e\x90\x19\x2e\xc2\x96\xad\x9f\xd0\xd2\x82\x1c\x1c\x1e\xf8\x72\x25\x5c\x0d\xd0\x04\xcc\x9d\xa4\x55\x3d\xb5\x2e\xdf\x8f\x75\x8b\xa7\xb8\xf1\x47\x7b\x1b\xc5\xf5\xc9\x7c\xe0\x4c\xa2\x2d\xa0\x33\xd7\xc4\xd7\xbb\x87\x33\x57\x8b\xbc\x65\x29\x0e\x1c\x2a\xc0\xee\xd0\x3d\xda\xbf\x53\x94\x7e\x88\x89\x83\xca\xf9\xb3\xe5\xbf\x9c\xc9\x79\x99\x63\xbe\xb8\x53\x6e\x81\x6b\xb9\x2a\x04\xeb\xea\xae\x36\x67\x0d\xbd\x6b\x47\x8a\x9c\xbf\x7b\xd3\xc4\x3a\x6b\x16\x97\xf3\x48\x78\xdd\x06\xf9\x18\xd7\x2f\x4f\x2e\x66\x84\x56\x52\x5f\x27\x8a\xea\x9b\xda\x19\xde\x9c\xc7\xb3\x22\xd0\x1b\x1e\x19\x2f\x8c\x08\x8b\x82\x7a\xa3\xac\x4d\xb2\xa0\x7c\x6e\x78\xd5\x1b\x51\x9a\x17\xfb\xea\x2b\x7c\x09\x09\x69\x99\x74\x8c\xab\x34\xd7\x8b\x07\x04\xfa\xca\x87\x37\xb9\xfa\x59\x46\x19\x05\x95\xd0\xc2\x4f\x4d\x73\xf6\xac\x98\xfb\x9a\xb0\x09\x4c\xc8\x8b\xaf\x1a\x5f\xbd\x40\x8a\x3b\x51\x53\x48\x61\x5e\xc5\xe1\x0f\xe1\xdb\x67\x4c\x23\xff\x78\xd1\x1c\x61\x42\xde\x1a\xba\x30\x60\xb8\x5a\xdb\x06\xa4\xcc\xb4\x5e\xd9\x11\x91\x30\xa7\x32\xcd\xa0\x23\x76\x86\x98\x55\x5a\x86\xc5\x68\x74\xbb\x0a\x19\x23\xa6\xd4\x73\xa1\x27\x71\x3c\xbe\xfb\x82\xb9\x69\xaa\x6e\xd5\xa9\xd5\x67\xc6\x29\xd5\x74\x4c\x0b\x6b\x10\x62\x82\x9f\x5a\x0b\xef\xd8\x55\xd8\x1e\x53\x77\x7a\xc7\xd5\xce\x3e\xfd\xad\x43\x1e\x1d\xd3\xea\x29\xc6\xc7\x74\x8c\x35\xa7\x3b\x1b\x70\x9e\x21\xe3\x2c\x7a\xbc\x48\x50\x35\xa2\x80\x9a\xf1\x31\xd8\xf4\xdb\x8a\x2b\xdb\xa5\x98\x90\x4b\xa1\x7d\x69\xf8\xb4\xce\xb1\x0b\xa8\x2c\xde\x64\xdc\x6f\x2f\x6f\x3e\xfc\xfd\xea\xfd\xc5\xe5\xcd\xc0\xbf\x07\xfe\x8d\x6d\xe0\xdf\x03\xff\xee\x30\x70\x5f\xf8\x37\xf0\xe5\x73\xf1\xee\xca\xe0\xb5\xcd\xc2\xb8\x56\xec\x34\x30\x47\xfa\x0b\xca\x31\x7f\xcb\x97\x1f\xa9\x51\x1d\x0b\x09\x0a\x15\x14\xa3\xb1\x6e\x8b\xcd\x75\x0f\xa0\x29\xb0\x0e\x65\xfc\x6c\x93\xcc\x9f\x31\x45\x3c\x62\x8a\xe4\x65\xa3\x7c\xc5\xb6\x55\xab\x2b\xe6\x50\x72\xfe\xd3\xc5\x9b\xb7\x97\x37\x17\x5f\x5f\xbc\xfd\xf0\xac\x91\xf3\x81\x35\x3b\xe3\xc5\xcc\x1f\x22\x1f\x05\x0c\x53\x4b\x56\x85\x84\x25\x13\xa5\xca\x56\x55\x4d\xf7\xed\xec\x6a\x33\x5f\x3f\x30\x09\x69\x55\xd5\xd9\xdf\x3a\xe0\x9a\x6c\xb7\x4d\x4e\x0b\x18\xfe\x99\x25\x3c\x47\x44\x0c\x39\x2f\x60\xfc\x2d\x12\xe2\xfe\xd2\x5e\xc0\xb8\x9d\xe4\xc4\x5d\x32\x5f\x00\x1d\x6d\x69\x31\xa0\xa3\x76\x8e\xc6\xf3\x73\xb2\xaf\xa5\xc8\x23\x71\xb3\x6b\x6b\x37\xf6\x31\x0c\xdb\x8e\xea\x91\x2b\xc2\xd1\x92\xb7\x9d\xe6\x58\x57\xe7\x30\x5a\x6b\x5e\xe8\x8e\x59\x05\x24\x56\x75\xf2\x38\x85\xbc\x6d\x4c\xf6\x3b\x5a\x7c\x07\xab\x0f\x10\x58\x87\xa8\x3d\xdf\x18\xe7\xa0\x08\x25\xb7\xb0\xb2\xa1\x7b\xe7\x7e\xb0\xb0\x52\x4c\x3d\x2c\xee\x7e\x0b\x21\x85\xf7\x63\x56\x65\xbf\x85\x80\x64\x7c\xdf\x36\x4a\x76\x9b\x25\x44\x31\xdf\xac\x69\xaf\x8a\x94\xf7\xb5\x0a\x7d\x53\x7a\x74\xd7\x43\x84\x89\x5b\x07\x64\x81\xd9\x0c\x12\xed\x53\xbc\xed\x6e\x1e\x61\x0e\x60\x5a\xda\x4a\x92\x34\xb9\xbd\xa3\x32\x55\x24\x11\x79\x41\x35\x9b\xb2\x8c\xe9\x55\x58\xfe\xb7\x6f\x78\xc3\x57\x10\xd6\x96\x29\x92\x0b\xae\x34\xc5\xab\x50\x38\x7b\x9b\x59\xed\x1a\x47\x16\xe1\x66\x2d\x37\xc5\x3c\x13\x2a\xc3\xcb\xbf\x1b\x52\x72\xa1\x34\x49\x40\x1a\xa1\x2e\x5b\x91\x3b\x29\x78\x47\x74\xe7\x76\xbb\x79\xff\xe6\xfd\x6b\x72\x96\xa6\x0e\xbd\xa7\x54\x30\x2b\x33\xbb\x04\x6a\x42\x68\xc1\x3e\x82\x54\x4c\xf0\x11\xb9\x65\x3c\x1d\x91\x92\xa5\x7f\x89\x30\xee\x81\x85\x53\xc4\xd2\xc8\xa0\x70\x77\xea\xb2\xdf\xc6\x66\xc2\xc7\x96\x49\xaa\x53\xcc\xad\x38\xfd\x2d\xfe\x27\xda\x9c\xbc\x91\xa2\x20\x3f\x1b\xa2\xa6\x25\xcb\x52\x90\xaf\x5d\x22\xdc\xcf\xd6\x05\x6e\x24\x6c\x29\xb2\x0c\xe4\x78\x0e\x9c\xa4\x02\x14\x3f\xd2\x58\x01\x0d\x2b\x46\xb8\xb7\x9a\x33\xbd\x28\xa7\x93\x44\xe4\x8d\x17\x1c\x2b\x36\x57\xa7\x8d\xbe\x4f\x99\x52\x25\xa8\xd3\x3f\xfc\xf9\xdf\xff\xd4\x2b\x06\x44\x7c\xfa\xdf\x6b\xf2\xe2\x45\x60\x5f\xc2\xc7\x55\xc5\x65\x68\xd7\x2e\xde\xaf\x29\x75\x56\x77\x31\xb1\x70\xbd\xc8\xe2\x3d\x42\x81\x53\xa0\x22\x4d\x73\x18\xd6\x8c\x6d\x2d\x5b\x5a\x4e\x8b\x30\x53\x5a\xdd\xf0\x18\xc7\x15\x7c\x82\xaf\x8f\x5a\x72\xb2\x7c\xbe\x2a\xa1\x99\xbe\xf6\xd0\x1b\x8a\xe4\xa0\x69\x4a\x35\x9d\x98\x33\x3d\x6a\xff\xa9\x0a\x9a\xc0\x88\xfc\x5c\x7d\x98\xd1\x29\x64\xea\x87\xa3\xff\xf8\xee\xed\xdf\xff\xf3\xe8\xc7\x9f\x9b\xdf\xa1\xa4\x8b\xa6\xdd\xe6\x03\x81\xaf\x80\xe1\x5c\x5c\xa4\x70\x89\xd4\xe1\x9f\x4e\x49\x3e\x4b\x12\x51\x72\xed\xbe\x40\xe4\xf5\xc9\x42\x28\x7d\x71\x55\xfd\x59\x88\x74\xfd\xaf\x80\xfa\x7a\xa4\x9f\x22\x23\xae\x6d\x00\x12\xa3\x6d\xf1\x04\xc7\xfa\x22\x8b\xcc\x7d\x5c\xaf\x7e\x1b\xab\x64\x01\x39\xc5\x7f\x7e\xed\xa7\xc0\x88\x32\x55\x6d\x0c\x8e\x10\xf7\x46\x7c\x68\x17\xdc\x7d\xb1\x7c\x15\xa4\xac\xdb\x16\x91\xf3\x57\x2b\x18\x79\xc2\x70\x46\xdc\x6c\x59\x0e\x50\x89\xde\xde\xc0\x53\x47\x6a\x9e\x5d\x5d\x90\xa5\x9d\xe1\x1e\x4d\xce\x63\xb1\x6b\x1f\xfe\xf5\x75\xaf\xd9\x76\x33\x48\xad\x65\x6a\x7c\x4d\x10\x82\xc9\x7f\xef\x0a\x21\xa8\xaa\xf8\x23\x28\x1d\x2a\x9e\x1d\xdb\x2e\x27\x49\x51\x8e\x5c\xf7\x93\x1c\x72\x21\x57\xd5\x9f\x55\x68\xdd\x58\x69\x21\xe9\x1c\x61\xec\xec\xe0\xf6\x67\xd5\x5f\xf6\x87\x2d\xf2\x36\x7f\x6d\x6d\xb9\x49\x29\x8d\x8a\x93\xad\x6a\x74\xa8\x2f\x8e\x65\xfb\x75\xeb\x09\xc7\xae\xb6\xd5\x65\x7c\x1d\xf8\xa8\x8e\x06\x46\x0d\xbb\x9a\x45\x34\xa0\x39\xb8\xe9\x51\x25\xb0\x5a\x2b\x2f\x5f\x92\x25\x95\x2a\xa4\x1c\xba\x6d\x11\x99\x74\xca\x96\x4c\x89\x00\x18\xa1\xaa\xa3\x4d\x89\xda\x63\x31\xb8\xc2\x26\x36\xc9\xa3\x72\x19\x7d\x2a\xb0\xc8\x59\x75\xd8\xd7\x6e\xb3\x57\xa1\xca\x02\x21\x05\xd5\x1a\x24\x7f\x4d\xfe\xd7\xf1\x3f\x7e\xf7\xcb\xf8\xe4\x2f\xc7\xc7\x3f\xbc\x1c\xff\xfb\x8f\xbf\x3b\xfe\xc7\x04\xff\xf1\xaf\x27\x7f\x39\xf9\xc5\xff\xf1\xbb\x93\x93\xe3\xe3\x1f\xbe\x7b\xf7\xcd\xcd\xd5\xdb\x1f\xd9\xc9\x2f\x3f\xf0\x32\xbf\xb5\x7f\xfd\x72\xfc\x03\xbc\xfd\x71\xcf\x4e\x4e\x4e\xfe\xf2\x55\x30\xe9\x11\xaa\x9e\xdb\x16\xb3\xf6\x79\xbb\xc7\x48\xda\xe1\xa3\xd4\x41\xaf\x9b\xdf\x5e\xb1\xcf\xbf\xcf\x33\x7e\x5d\xdf\x66\x95\x14\xd2\xa3\x03\xfe\x58\x82\x86\x82\x44\x82\x7e\x0a\xa3\xb8\x1d\xa9\x51\xa6\xe1\x48\x91\x4a\x89\xfb\xd2\x6e\xd0\x5f\x83\x9d\xdc\xeb\x39\x76\x5d\x6b\xd1\x7d\x26\x45\xee\x50\xdf\x6d\xd0\xc0\x12\x33\x59\xdd\x73\xb7\x10\xe0\x50\xf2\x6d\xb0\xab\x77\x6e\x83\x5d\x7d\x07\x29\x83\x5d\x7d\xb0\xab\xef\xdd\x06\xbb\xfa\xb5\x65\xe7\xbf\x4a\xa3\x7a\x7c\x80\xcb\x8e\x91\x84\x31\xb1\x2d\x81\x2f\xbb\x46\xa1\xc4\x0c\xbd\xf5\x16\xa3\x66\x15\xd3\xfd\xe2\xdb\xba\xe7\x52\x98\x95\xab\x82\xe9\xea\x04\x0d\xab\x0d\xe4\xdb\x83\x1f\xc9\x59\x96\x11\xc6\xad\x6c\x63\x3a\xe8\x34\x7a\x8d\x14\xe3\x80\xc6\x1d\xac\xf4\xd2\xbc\xaa\xcf\xb8\x6d\x57\x0d\xc7\xfc\x4c\x4c\x10\xfe\x9b\xcd\xbf\xbd\xb5\x29\xb9\x4a\xe3\x94\xf8\x5a\xf0\x9d\xc8\xa9\x34\x78\x1b\xaf\x65\xee\x58\xaa\x94\x48\x6c\xba\x72\x85\xf0\x81\x45\x5c\xdd\xf4\xe0\x1b\x68\x7a\x8b\x81\x89\x09\xa4\xc0\x0f\x4d\x24\xf7\xed\xa3\x85\x3a\xf1\xeb\x30\x5d\x61\x2d\x72\xbe\x74\x57\x3f\x49\x3d\xda\x0e\xbe\x71\xbc\x71\xbf\xac\x48\x6c\x73\x86\x5d\x08\x58\x23\x20\x1b\x05\xf5\x3a\xa1\x18\xe3\xd8\xc5\xac\x76\x8e\x76\xdb\xbd\xc1\x8a\x57\xb8\x9a\x53\xc5\x75\x05\xe9\xaf\x1b\xfa\x4d\xed\x35\x6e\xeb\x35\x5f\x42\x28\x5c\xb8\xc6\x13\x57\xdb\x79\x0c\x4d\xa7\x2f\x5a\x4e\x4f\x34\x9c\xc7\xd1\x6e\x9e\x43\xb3\xe9\xab\x56\xf3\x59\x6b\x34\xd1\xb4\x99\x38\x9a\x4c\x1c\x2d\xe6\x80\xc8\xa0\x98\x9a\x4b\x1c\xad\xe5\x31\xcc\xbd\x85\x84\x19\xfb\x14\xe9\x92\x3c\xe3\xb5\x4f\x8c\xa5\xc0\x35\x9b\x31\x8b\x41\x54\x48\x28\x80\x5b\x50\x15\x9a\x2c\x50\x58\x73\xa2\x7a\x1d\x17\xdd\xc7\x94\x22\x6b\xa0\x8c\x2b\x47\x5c\x6f\x33\x8e\x0e\x42\x04\x19\x84\x88\x03\xda\x20\x44\x0c\x42\xc4\x20\x44\x1c\xd8\x9e\x48\x88\x70\x0c\xfe\xcb\x97\x20\x22\x27\xf9\x23\x7c\xc9\xb3\x17\xd1\xb1\x64\xe0\x65\xf6\x98\x40\x13\x15\x27\xa9\xe1\xd7\x4e\x71\xe4\x2e\x0c\x23\xe8\x9c\xe1\xa8\x57\x65\x96\x75\xc1\x58\xb6\x2d\xc6\x02\x5c\xe0\xb4\x17\x65\x96\x39\x5c\xde\x6e\xb3\xff\x9e\xe3\x9d\x7f\x96\xdd\xd1\x95\x1a\x91\x4b\x58\x82\x1c\x91\x8b\xd9\xa5\xd0\x57\xd6\xf2\xd5\xad\xdf\x66\x76\xa8\xed\x9c\xb0\x19\x79\x9d\x51\x0d\x4a\x13\x4d\xe7\x68\x87\xad\xeb\x25\x09\xd9\x1a\xb4\xae\x09\xf9\x8c\x06\xc9\xf0\xbd\xf9\x5b\x0f\x5e\x3a\x7e\x9e\xbd\x9a\xb1\x19\x24\xab\x24\x0b\x67\x13\xdf\xfb\x9e\x7c\x5e\xab\x97\xa8\x30\x9a\x6f\x0b\x38\xe2\x67\x58\x78\xa1\x10\x4a\x5f\x6b\x2a\x75\x94\xea\x0b\x01\xf2\xf8\x95\x27\xc4\x4c\x76\x42\xb3\xcc\x88\x25\x79\x0e\x29\xa3\xda\xc8\xce\x74\xa6\x41\x12\xda\x76\x6a\x24\xb6\xaa\xe6\xc4\x16\xe1\xf4\x45\x8a\x25\x99\x51\x96\xa9\xee\x49\x1a\x1b\xce\x13\x5b\x18\x9f\xba\x92\xac\x0d\x74\x53\x9a\x24\x42\xa6\x98\xba\x2f\x3c\x0a\x28\xbe\x44\x08\x7f\x32\xed\x3d\x8a\x0a\x39\xe5\x74\x0e\xb9\xab\x13\xda\x26\x6b\x9a\x89\xe4\x56\x91\x92\x6b\x96\xb9\x8a\xfc\xe2\x16\x75\x88\x0c\x4f\x6a\xe7\xa1\xbb\x33\x80\xea\x9f\xe3\xea\x10\x8e\x0d\x55\xea\xf4\xb7\xf5\x57\xf8\x41\x47\xe2\x22\x68\xb2\x31\xf4\x58\xf8\x04\x49\x88\x80\xd8\x76\xbe\x7c\x82\xa4\x51\x8a\xdb\xac\xa4\xc5\xa5\x46\xbc\x4e\x7a\x1b\x84\xfc\x10\x29\xc6\x2d\x56\x5c\x59\x00\xc6\x5e\xb3\xc5\x0e\x9b\x3a\xb7\x64\xe1\x49\xc7\x33\x66\xff\xcc\x18\x07\x0b\xf2\x8b\x20\x7c\x84\x71\x65\x2b\x0e\x41\x13\x91\xd7\xfc\xb9\x51\x52\xd1\xe3\x28\x04\x93\xe6\x69\x31\xb4\x49\x21\x34\x39\x3e\x3a\x3d\x3a\xd9\x70\x62\x1f\x29\x32\x63\x19\xa8\x95\xd2\x90\x5b\x38\xe4\xa4\x7e\x29\xc5\xf2\x02\x4b\x7c\x42\x72\xe4\x2b\x12\x07\x53\x66\x2e\x44\x8b\xcf\x8e\xb3\xe2\x90\x09\x47\x44\x09\xa2\x25\x4d\x99\xb3\xf2\xe1\xa7\xe6\x21\x2d\x4b\x07\xb7\x7e\x7c\xf4\xcb\xd1\x88\x80\x4e\x4e\xc8\x9d\x30\x3a\xa8\x99\xbe\x09\xb9\x11\x46\x8b\x0f\x0f\x9d\xf6\x84\xac\x44\x69\xb5\x5b\x5c\xc2\xaa\x22\x83\xb9\x5b\x88\x28\xb5\x85\xc3\xa5\x3a\x04\x51\xb1\xd9\xde\x7e\x62\xda\xe5\xe4\x19\x66\xfd\x72\xad\xea\x73\xc6\x96\x70\xba\x00\x9a\xe9\x85\xcd\x18\xe1\x82\x8f\xff\x09\x52\x20\xfe\x22\x77\xdf\x84\x92\x11\xe6\x4f\x6e\xb6\x00\xdf\xf2\x26\x41\x51\x22\x9e\x22\xab\x92\xbe\x99\x3b\xee\x1b\xe8\x2c\xff\x90\x75\x7e\xf4\xed\xcd\xcd\xd5\x37\xa0\xd7\x58\xba\x19\xc5\x27\x09\x35\x2a\x12\xf4\x80\xb7\xc7\x89\x5e\x1e\x93\x42\xc8\x3e\x5c\x31\x0b\xa1\x82\xd6\x92\x3c\xc2\xfd\xf2\xad\x50\xda\x16\xa4\xd4\xc2\xf0\x6c\x0e\x89\xd9\x04\xed\x8c\x17\x5f\xea\xe1\xe2\x6a\x42\xfe\x2e\x4a\x33\x21\x53\x3a\xcd\x56\xe4\x8e\x72\xe7\x0a\x08\x0b\x53\x37\xed\x85\x21\xe5\x85\xb9\x3e\xcc\x86\xfc\x16\x68\x0a\x52\x21\x77\x06\x1a\x98\x90\x16\xf1\xac\x37\x68\x8b\xba\x94\xe7\xa5\xd2\x22\x27\x0b\xf7\xda\x6d\x60\x46\x77\x38\x27\x78\x80\x3d\x3a\x97\x84\xc2\x72\x70\xf7\x9b\x2f\x8e\x3f\x6f\xb0\x2e\x3b\xef\xee\xf3\x29\x28\xa3\x72\x35\xa7\xcd\xb9\x13\x2c\xee\x13\xb7\x93\x65\xb6\x6a\x84\x00\xdf\x68\x09\x19\x24\x62\x52\x06\x09\x83\x6c\x5c\xef\x08\x5d\x2b\xc1\x3d\xc5\xcb\xf3\x20\xd1\x72\x19\xc8\xa3\xe4\x33\x10\x17\x6b\xe9\x36\x9f\x75\xab\x75\x37\xbc\x6e\xeb\xbc\x51\x07\x30\xa1\x5c\x70\x96\xd0\x8c\xfd\x13\x52\x52\x16\x82\xbb\xe4\x45\x14\x6b\x13\xaa\x60\x8c\x81\xa4\xdc\xb2\x73\xd5\x00\x0f\x34\xdc\x41\x0b\x81\xb2\x1e\x86\xcd\x19\x76\x6f\xa9\x8e\x43\x6a\xd4\xd8\xf1\x60\x24\xcc\x66\xdb\x70\x5f\xb7\x16\x2b\xce\x8e\x27\x9f\x85\x2c\x49\x6c\xd6\x69\x30\xe2\xc1\x26\xde\x81\x16\x84\x26\x09\xc2\x23\xda\xeb\x0a\x19\xaf\xad\x07\xdd\x9b\x7b\xdb\x88\x80\x7d\x93\xbd\xac\x87\x5f\x12\x5e\xe6\x53\x90\x35\x58\x8c\xd4\x9b\x73\x1a\x18\x13\xde\x1a\xd6\x0e\xe7\x1d\x7c\x5e\xc6\xa0\x7c\x0e\xe4\x95\x19\xf9\x4f\x7f\xfc\xe3\x1f\xfe\x18\x61\x1c\xf3\x7a\x55\xac\x39\x27\x17\x67\x97\x67\x3f\x5d\x7f\x3c\x47\xf4\xce\xd0\xee\x23\x65\x21\xc7\xce\x41\x8e\x9a\x81\xfc\xa8\xf9\xc7\x08\xe6\x12\xcc\x65\x63\x1f\x89\x6b\xa4\xca\x6c\xc2\x52\x59\xc4\x4f\xa7\x93\x38\x3b\xb6\x35\x26\xab\x08\x79\x83\x4d\x8f\x98\x61\x58\xbd\xe0\x54\x2a\x03\x28\xa2\xa9\xfb\xd7\xa6\xb7\xf5\x98\xf9\xb4\x94\xb6\x9c\x25\x1a\x98\xda\x76\x7b\x57\xd2\x12\xa9\x20\x53\x98\x09\x09\x64\x0a\x38\xf5\x95\x97\xe1\x0b\x32\x0b\x28\x48\x04\x4f\x43\x94\x83\x58\xc2\xae\xa3\x24\xea\x69\xbc\xb6\x7d\x7a\xcb\x71\x7d\xc9\xb8\xc1\x50\xc7\x34\x2b\x1d\x67\xe7\xc7\xe1\xa0\x16\x88\x03\x7b\xfb\xd3\xbf\x75\x77\x92\x25\xc5\xb5\x48\x6e\x23\x5a\xce\x02\x59\xdb\x1b\x73\x06\x13\xeb\x0f\xbc\x39\xbf\xb2\xc4\x99\x95\xb9\x7c\x7f\x53\xa3\xee\x60\xaa\x54\xed\xda\xfd\xd6\x79\x0c\x29\x4f\xc9\x2d\x14\x61\x7a\xa7\x07\x4f\xf6\x21\x7d\xed\x88\x3e\x34\xcb\xdb\x90\x3a\xc2\x85\x4d\x6f\xb7\x5c\xc2\x87\xe2\x59\x81\x39\x0c\x6f\xbd\xe1\x00\x47\x8f\xa0\xd3\x51\x66\x94\x65\x46\x0a\x91\x25\xd7\x2c\x07\x97\x24\x96\x14\x95\xcb\xb4\x19\x9a\xf0\x05\xb1\x9f\x2f\xd5\x2a\x79\x54\xd7\x18\x3e\xd4\xba\x18\x0a\x4f\xf2\x65\xab\x0b\x8e\x83\x5b\x5c\xa7\x41\x5d\x38\xa4\x0d\xea\x42\x47\x75\xa1\x90\x70\xad\x45\x67\x99\x34\x5a\x08\x8e\x25\x63\x47\x00\x8e\x13\x55\xe9\xce\xc8\x18\x17\xcf\x1e\x10\x7c\x7a\x76\x75\x51\xf9\xc8\x44\x2b\xfa\xc5\x66\x36\xfb\x6a\xc7\x19\x5b\x02\x07\xa5\x4e\x31\xd6\xa6\x2c\xac\x01\x1a\xef\xb8\x52\x42\xf7\xb8\x9f\x42\x02\xe4\x38\x8f\xa3\x1a\xd6\xc9\xbc\x2e\x70\xfb\x21\xe8\xc4\x3a\xd7\x1b\xb7\x26\x17\xba\x9a\xae\x59\x90\xcf\xbf\x51\x98\x58\x52\xb5\x00\xac\x58\x01\x9f\x98\x56\x76\xd0\x2b\x04\x3f\xf2\x33\x6e\x04\x87\xb9\xa4\x09\x90\x02\x24\x13\x46\xd8\x28\xb9\x4e\xc5\x1d\x27\x53\x98\xff\xff\xec\xfd\x7d\x73\x1b\xb9\x95\x36\x0e\xff\xbf\x9f\x02\xe5\xa4\x6e\x49\x1b\x52\xb2\x93\x4d\x2a\x99\x27\x95\x29\xad\xac\xf1\xa8\x62\xcb\x7c\x24\xcd\xe4\x4e\xcd\xcc\xce\x82\xdd\x20\x89\x5b\xdd\x40\x07\x40\x4b\x62\x6a\x3e\xfc\xaf\x70\x0e\xd0\x8d\x26\x29\xdb\x04\x5a\x22\xed\xe9\xde\xaa\xec\x98\xa4\x1a\xef\x07\xe7\xe5\x3a\xd7\xe1\x42\xfb\x15\x4b\xe9\x92\xdf\x12\x80\x2d\xe2\xba\xa9\x47\x78\x4c\xae\x3a\x05\x3b\x1c\xcd\x5b\x26\x5b\x99\xe9\xa6\x68\xd4\xd3\x94\x80\x16\x03\xdb\xa0\xa6\x45\xb1\x6c\x37\x9e\xcf\xbc\x37\x8f\xcf\x50\xfc\x86\xc0\x99\x3d\xac\x05\x0c\x34\x67\x05\x5d\x62\x8e\xf9\x8c\x0b\xf0\x12\x2b\x7d\x74\x9c\x0e\xd6\x8a\xee\xa0\x54\xc1\x3b\x1f\xdd\x19\x5c\x13\xc5\x68\xb6\x48\xd1\xec\x06\x54\xd8\xc7\x9e\x01\x15\x16\xf9\x0c\xa8\xb0\x6d\x9f\x01\x15\xb6\xed\x33\xa0\xc2\xf6\x09\x75\xb0\xff\x91\xbc\x01\x15\x36\xf8\x5f\x56\x9e\x01\x15\x16\xf5\x0c\xa8\xb0\x8f\x3e\x7b\x27\x9f\x07\x54\xd8\x27\x3c\x03\x2a\xec\x13\x9f\x01\x15\x36\xa0\xc2\x06\x54\xd8\x80\x0a\x4b\x78\x06\x54\xd8\xf6\xc3\x1b\xc2\x3c\xf1\xcf\x80\x0a\x1b\x50\x61\x5b\x3e\x03\x2a\xec\x93\x9f\x01\x15\x36\xa0\xc2\x3e\xf4\x0c\xa8\xb0\x01\x15\xb6\xf1\x19\xbc\x92\x6b\xcf\x80\x0a\xdb\xf0\x0c\xa8\xb0\xed\xda\x19\xcc\x85\xb4\x97\xf5\x6e\x2e\x78\x84\xd3\x44\xc9\x69\x3a\x91\x15\xbc\x45\xbb\x2b\xe6\x8b\xa4\xb1\x4a\xc1\x5e\x3c\x0f\xee\x62\x4f\x40\x2a\x3d\x60\x2d\xfa\x14\xae\x7b\x8a\xb1\xd8\x4f\x7c\xc5\x3e\x62\x2b\x76\x81\xab\xd8\x39\xa6\xa2\x9f\x78\x5d\x0f\xb1\xba\x9e\xae\xb0\x27\xf0\x7b\x3b\x2c\xee\xcd\x42\x31\xbd\x90\x45\xb4\xc0\xe9\x4b\xd8\xbc\xe3\x82\x97\x75\x69\xcf\xae\xb6\x32\x85\xdf\x35\x78\x61\xdd\x58\x68\x08\x23\xc6\x50\xa6\xfd\x21\xcf\x19\x94\x74\xa6\xbc\xb0\x5b\x0b\x18\x08\x17\xf4\xce\xca\x1b\x5d\x67\x19\x63\x79\x8a\x55\x14\xba\xc1\xfe\x70\xdc\xf4\x10\xc9\xb7\xb9\x26\xaf\xd2\xae\x9a\x34\x45\x29\xf0\x06\xfc\xe1\xf7\x51\xef\x98\xab\xaa\x9f\x2b\xf9\xcd\xd5\xe4\x2c\xb8\x92\xa9\xf0\x37\x32\x17\x77\xb2\x80\xd5\xa0\xf8\x23\xab\x90\xef\xf0\x7e\x4e\xb7\x4e\x93\x2c\xd3\x3e\xd4\x83\x54\xe3\xab\xab\x76\x5a\xfb\xa8\x1b\x61\x99\xc3\x5a\x32\x75\xc7\x33\x76\xfc\x0c\xf6\x4d\x5f\x36\x43\xfa\x71\x20\xe0\x6b\x84\x81\xef\x8b\xf2\x75\x8d\xdd\x69\xdc\x94\x81\x69\xeb\x7a\x0a\x98\xb4\x82\x66\xcd\xda\xc0\xfa\x7d\x0b\x37\xe8\xd9\x82\x65\xb7\x57\x08\x8f\x49\xea\xc6\xa1\x66\x6c\x13\xfd\xbc\x15\x20\xf8\x3f\xd3\x42\x4e\x4f\x4a\xaa\x0d\x53\x27\xb9\xcc\xdc\xe5\x3e\xce\x6c\x0f\xb8\x98\x1f\x97\xf9\xd1\xf1\x7f\xfc\x47\x52\x27\x2e\x9c\xb3\xcd\x25\x74\x04\x2c\xcd\xe0\xb9\x47\x51\x4d\xa6\xcc\x8a\x7f\x09\x7e\xb1\xa0\xe0\x9c\x9d\x95\xf4\x5d\x9a\x70\x8d\x27\xa2\x15\x9f\x1f\xa9\x38\x48\x5b\xd2\x83\xff\xaf\x4f\x61\xb0\x1f\x68\xc4\x27\x43\x22\xf6\xa2\x29\xf7\x84\x40\xdc\x23\xf4\xe1\xde\x58\x32\xfb\x82\x38\xec\x0d\x6d\xd8\x17\xd2\xb0\x17\x94\x61\x1f\x08\xc3\xfe\xd0\x85\xfb\x5a\x3b\xff\xc9\x10\x85\x9f\x05\x9a\xb0\x47\x77\x78\x4f\x28\xc2\xe7\x40\x10\xee\xaf\x07\x85\xf4\x80\x1a\x7c\x3e\xc4\x60\x2f\xf3\xd8\xab\xf5\x99\x28\x12\x76\x80\x10\x7c\x8e\x70\xdf\x93\x85\xfa\x7a\x08\xf3\xf5\x19\xe2\xeb\x2d\xbc\xf7\x64\x48\xc0\x74\x14\x60\xaf\xbe\x80\x67\x41\xff\xf5\x89\xfc\x4b\x5e\x5f\x2e\xb8\xe1\xb4\x78\xcd\x0a\xba\xbc\x4e\x43\x81\xf5\xb5\x12\x97\x6b\x48\x31\x74\x3a\x77\xb1\x82\x0b\xea\xca\xf9\xb3\xdc\x43\x05\x7d\xbc\xd8\xa9\xc0\x10\xea\xc5\xf1\x25\xe1\x06\xb7\x4c\xfa\xbf\x97\xea\xb6\x90\x34\xd7\x27\x95\xc4\xff\x69\x53\xfe\x83\x5c\xff\x24\x35\x7d\x3f\x9c\xdb\x48\xac\xb0\x27\xbb\xe6\x5b\x79\x4f\xe4\xcc\x30\x41\x0e\xb9\xf0\x3b\xe7\x28\xf0\xd2\xb4\xc1\x8d\xe4\x68\x85\x7d\xeb\xab\x97\xbe\x91\x2f\x2f\x6a\x01\x71\x1d\xad\xf7\x3a\x6e\xe5\xfa\xf8\xf1\xc0\x95\xfb\xe1\xac\x2e\xba\xc1\x2b\x0c\x68\xf5\x13\xb9\x7a\xd5\x16\x65\x7e\x05\xfd\x69\x44\x11\x15\x39\x71\x04\x3d\x5f\xde\x3e\x49\xc6\xb9\x76\x8d\x9b\x06\x98\xfa\xb1\x38\xd7\xcd\xd9\x64\x08\x73\xed\x97\xe3\x75\x47\xa0\xcb\x2f\xcf\xe2\x7a\x7e\x90\xe5\x60\x71\xfd\x5a\x2c\xae\x80\x1b\xeb\x8d\xa2\x19\x9b\xec\x93\x02\xe7\x05\x48\x9b\x21\xd4\xea\x71\x8d\xb8\x10\x8c\x61\xe6\x48\xcb\x7c\x06\x24\x5f\xb3\xba\x28\x96\xe8\x47\xec\xd0\xe0\xc5\x6f\xad\x9b\x05\x5b\xe3\x0f\xeb\xe4\x2f\x05\xbd\x6b\xed\x93\x4a\x49\xa7\x95\xa8\x5a\x08\x7b\x5b\xb9\xe3\x64\x3b\x6f\xed\x11\xcd\x44\xbc\x4b\x9d\x76\xd8\xcd\x34\x9f\xdb\xe9\xb2\x1a\x06\x10\x9f\xb5\xb9\x0b\x9d\x8e\xd8\x56\x67\x52\x65\x7c\x5a\x2c\xc9\x82\x16\xd6\x60\xc2\x4a\xf7\xe4\x96\x17\x85\x7b\x4d\xfc\x44\x5d\x33\x83\x51\x63\xd4\x6a\x0a\x29\xe6\x30\x19\x14\x3b\xc2\x1e\x2a\x96\xd9\x36\xb3\x82\x51\x51\x57\xd8\x4f\xab\x23\x2d\x65\xad\x7c\x3f\xe3\x9b\xf7\x31\xeb\x46\xa7\x12\xbc\x18\xf9\x29\xef\xf2\xe0\xad\xef\xf9\xd6\xad\xac\x59\xee\x28\xec\xee\xb9\x66\x23\x78\x67\x74\x9f\xb0\x2f\xf2\x8e\x29\xc5\x73\x17\x3b\xc6\xcf\x2a\x25\xef\x78\x8e\x01\x73\xbf\x2d\xac\xb6\x13\x3f\xfe\xef\xe1\xbd\x5e\xb4\x0a\x29\xc6\x82\xcd\x29\xa8\xc8\x4e\xa0\x21\x26\x13\xdb\x47\x04\xa0\xc8\x79\x46\x0d\xb3\x06\xb4\xac\x3a\xfc\x96\x77\x9c\x46\xf7\xc4\x8e\x27\xd8\x51\xe4\x50\x48\x22\x21\xb5\xa8\x16\xdc\x2c\x21\xaa\xb7\xa8\x0d\xc9\xe5\xbd\x38\x4a\x39\x98\x88\x50\xa0\x64\xca\x0c\x6d\x13\x83\xbc\x4a\xa6\x09\x13\x74\x5a\xd8\xb3\x07\x90\xef\x9b\x8d\x1b\x80\xcc\x18\x35\xb5\x62\x64\x4e\x4d\x82\x94\xd8\xa0\xd1\xe3\x7a\x7e\x78\xdb\x71\xed\x62\x76\x33\x52\x0b\xcd\x12\x15\xd9\xde\xcc\x80\xc8\x94\x37\x7b\xa2\x65\x6d\xf6\xe4\x1e\x79\xcc\x7d\x74\xbf\xe0\xd9\x22\x34\x14\x79\xc9\x34\x91\x75\x82\x37\xaf\x63\x02\xba\xe6\xfa\xb4\xf2\x06\xdf\xd3\xc6\x27\x36\x74\xda\xc7\x0e\xbb\x0c\xb4\xf2\x0d\x69\x23\x2d\x66\x0a\x93\x29\x5f\x5f\x5e\xff\xfc\xf6\xf4\xbf\xcf\xdf\xc6\x6d\x01\x90\x75\x22\xd4\x9d\x6b\xc1\xff\x55\x33\x42\x4b\x69\x2d\xe1\x22\xcc\x58\x19\x81\xb3\x33\xf8\x00\xa4\x62\xbf\xb9\x2d\x91\x7a\xad\xbd\x04\xa2\x04\xc3\x1a\x94\xf2\x39\x12\x78\x62\x91\x20\x09\x08\x90\x2e\x1a\xc6\x8f\x01\xb0\xa3\x41\xfe\x3c\x25\x82\x19\x7b\xc6\xd1\x20\xe4\x82\x50\xa2\xb9\x98\x17\xc9\xb6\x60\xb2\x47\x24\xd5\x1f\x32\x6e\x47\x30\x89\x75\x8b\xa4\x3b\x45\x3a\x7d\x88\xb7\x2a\xfb\x73\x08\xb4\x97\x99\x77\x01\xb0\x87\x4a\x6a\xe6\x5d\x00\xa8\xe3\x5e\x4c\x08\xcd\x73\x95\xa4\x47\x3b\x61\xd3\xd8\xe8\x98\x84\x8d\xcd\x62\xf8\x77\x44\x5e\x92\xbf\x92\x07\xf2\x57\x70\x08\xfc\x29\xbe\xa9\x7e\xcc\xed\x3e\xd0\xc8\x0b\xa9\xcd\xc5\xa4\xa7\x85\xfe\xc7\x82\x1a\x78\xa3\x5d\x0f\x23\xc9\x94\x3b\xcb\x8c\x3d\x18\xa6\xac\x46\xec\xd6\x30\x75\xe6\x92\x9c\x0b\xb6\x83\x9f\xcb\xee\x4e\x8d\xb5\x5e\xcc\xba\x18\xe6\x67\xda\xdf\xd0\xf0\xb7\x52\x9b\x4b\x27\xad\x43\x02\x81\xb0\x1f\x25\x35\xd9\xa2\x2b\xee\x53\x5a\x7d\x67\xf7\x5e\x70\xfd\xe7\x12\x2e\x4a\x4c\x48\x5b\xf0\x04\xe1\xb0\x3f\x27\x36\x0d\x36\xd7\xdf\xd6\xfd\xd0\xd6\x5a\x71\x6f\x82\x1a\xe6\xf4\xb6\x80\xa6\xbf\x92\xf9\x31\x39\xa7\xd9\x22\xa1\x17\x76\x36\xf2\x40\x19\xa8\x64\x8e\xdd\x58\xd0\x3b\xbb\xc7\x5d\xab\x00\xe1\x43\xd5\xb5\x09\x96\xc1\x81\xb3\x12\x2b\xa3\x82\x4c\x53\x30\x64\x8a\xcd\x98\x52\x98\xf4\x38\x5d\xfa\xac\x89\xe4\xdd\x96\x24\xe5\x2a\x25\x8d\xcc\x64\xb1\x0f\x5b\x65\xe2\xfa\x02\x73\x0f\x61\xab\x26\x58\xf8\xdd\xeb\xc9\x88\xdc\x9c\x4d\x46\x44\x2a\x72\x7d\x96\x86\x05\x09\xad\xd1\x17\x37\x67\x93\x17\x3b\x5d\x01\xe2\xc3\x3d\x10\xd8\x8b\x78\xc9\x3a\x9a\xb0\xa4\xd5\xf8\x96\x2d\x23\xb5\xbb\x3e\x34\xcc\x71\xb3\xb1\x7a\x19\x10\x4e\x73\x49\xab\xad\xdf\xa6\x18\xcd\xf9\xc0\x8d\xf0\xe9\xcf\xc0\x8d\xf0\x89\xcf\xc0\x8d\xf0\x29\xcf\xc0\x8d\xf0\xa9\xcf\xc0\x8d\x10\xfd\x0c\xdc\x08\x9f\xf0\x0c\xdc\x08\xdb\x3f\xbb\x77\xe1\x93\x81\x1b\x21\xea\xd9\x39\x68\x6c\xe0\x46\xd8\xfc\x0c\xdc\x08\x03\x37\xc2\xc0\x8d\x30\x70\x23\xb4\xcf\xde\x41\x74\x07\x6e\x84\x0f\x3d\x03\x37\xc2\xc6\x67\x6f\x2c\x99\x81\x1b\xe1\x91\x67\xe0\x46\x78\xe4\x19\xb8\x11\x06\x6e\x84\x81\x1b\xe1\xc3\xcf\xc0\x8d\x10\xfd\x0c\xdc\x08\xdb\x3d\x43\xa6\xce\x96\xcf\xc0\x8d\x30\x70\x23\xac\x3e\x03\x37\xc2\x47\x9f\xfd\x70\x6e\x0f\xdc\x08\x03\x37\xc2\x07\x9f\x81\x1b\x61\xe0\x46\xf8\xe0\x33\x70\x23\x7c\x29\x8e\xd7\x81\x1b\x61\xe0\x46\xf8\x50\x1b\x83\xc5\xb5\xdd\x33\x70\x23\x0c\xdc\x08\x6b\xcf\xc0\x8d\xb0\xfe\x0c\xdc\x08\x03\x37\xc2\xc0\x8d\x30\x70\x23\x34\xcf\xc0\x8d\xf0\xa5\xfb\x9e\x14\xd3\xfc\xdf\x6c\x22\x0b\x9e\x2d\x93\xd3\x42\xae\x98\x96\xb5\xca\xec\x8d\x0d\xaf\x25\x15\xbc\xb7\xf1\x2a\x24\x29\xd9\x7b\x96\x6b\x7f\x15\x4c\x5c\x98\x73\xaf\xdc\x1c\x3c\xc5\x14\xec\x45\xde\xbd\x1f\xe0\x65\x3c\x8a\x00\x5e\x62\xa8\x32\x38\x7d\x71\x0e\xd3\x64\xab\x3d\x1c\xc8\x3e\xe4\xfd\x85\x54\x21\xcd\x2e\x32\xb2\x11\xb6\xfc\xd1\xcd\x45\xab\xaa\xe0\x29\x19\x94\x84\x5c\x37\x45\xdd\x41\xd4\xea\xaf\x48\x56\xd5\x23\x52\xb2\x52\xaa\x84\xd4\x86\x1e\x2c\xb8\xce\x56\xd9\x87\x75\xba\xc2\x0e\xf9\xc9\x37\x12\xe6\x7f\x89\xf6\x42\xcb\xe7\xd2\xac\x15\xf7\xe2\x30\x09\x6f\x76\x31\x5b\xc5\x91\x72\xd3\xf1\x02\x5d\x4a\x73\xe5\x0e\xf7\xce\xd6\xab\x67\xd4\x82\x9f\xc2\x74\x2a\x98\xc8\x05\x6f\x2f\xb4\x4f\x4e\x75\x24\xe7\x1b\x3e\x85\x18\xa8\xae\xec\x4b\x9a\x31\x45\x75\x88\x16\x8a\xd1\x7c\x09\xdd\xc8\x00\xb3\xd7\xfa\xff\x3e\xc3\x2c\xcb\xac\xa0\x3c\x1e\xe8\xd7\xd7\x91\x3e\x83\x5e\x10\xbb\x5f\x5b\xe0\x3a\x64\x82\x35\x8b\x35\x6a\xd0\xd9\x1c\xcf\xf8\xb1\xff\x0a\xff\x78\x94\x60\xe9\x51\x03\xbb\x0b\x8c\x18\x30\x65\xb9\x0e\xd5\x84\x78\x18\x7a\x63\xdd\x09\x42\x8b\x6a\xf1\x61\xfb\x2e\x25\xc3\xf1\xf5\x52\xd0\x92\x67\xfe\xb4\x9c\xe2\xe6\xe4\x52\xac\x58\x86\x89\x43\xc1\xee\xdb\x31\x95\x65\x6d\xe8\xb4\x60\xc7\xe4\x02\x09\x09\xa4\x28\x96\xd6\x66\xd7\xcc\x78\xac\x41\x42\xee\x31\xe9\x05\xc8\x9a\x08\x62\xdd\xa8\x59\xc3\x6e\x43\x06\x05\x26\xac\x5c\x92\x82\x11\x26\x8c\x5a\xda\x8d\x39\x91\xf9\xb5\xdd\x9b\x9d\x5f\x27\x13\x2b\x24\x62\x57\xfb\xc0\xad\x26\x62\x56\xfb\x41\x9a\xa6\xa3\x4c\xfb\x45\x98\xb6\x71\x00\xe4\x85\x09\x53\x6e\x3a\xdb\xc2\xde\x0d\x1b\x64\x16\x91\xb3\xc4\x1e\xd8\x16\x27\x32\xb7\x9a\x8f\x62\x28\xb8\x9a\x33\x8a\x5e\xc0\x0b\xdb\xb9\x5b\x70\xdb\x51\xd3\xaa\x44\xf4\x8e\xf2\xc2\x1e\xe0\xc4\x0e\x34\x89\xcb\x3d\x85\x6f\x7a\x50\x57\xfb\xa6\xa1\x20\xa9\xdb\xbf\x4f\x1a\x09\xfb\x14\xbc\xe4\x71\xe4\x7c\xa4\xc7\x23\xf0\x16\x7a\x11\xa0\xf9\xed\x5e\x2c\xe9\x03\x78\x8b\x68\x29\x6b\x61\xec\x39\xc8\x64\x59\xd5\x26\xd0\xba\xbc\x02\xf7\x6c\x6e\xa4\x4c\x8a\x19\x9f\xbb\x40\xc7\x49\x49\x05\x9d\xb3\x71\xd3\x9d\x71\x7b\x51\x9d\xec\x2e\x00\x4f\x73\x9f\xeb\x3f\xe9\x23\xe5\x93\x1a\xc3\x94\xf8\x8a\xfc\xcf\xe1\x8f\xbf\xfb\x65\x7c\xf4\xf5\xe1\xe1\x0f\x2f\xc7\x7f\xf9\xe9\x77\x87\x3f\x1e\xc3\x7f\xfc\xe7\xd1\xd7\x47\xbf\xf8\x7f\xfc\xee\xe8\xe8\xf0\xf0\x87\xbf\xbf\x7b\x73\x33\x39\xff\x89\x1f\xfd\xf2\x83\xa8\xcb\x5b\xfc\xd7\x2f\x87\x3f\xb0\xf3\x9f\x3e\xf1\x25\x47\x47\x5f\xff\x36\x3e\x18\x94\x1a\xf9\xec\x2f\xee\xd9\x53\xd4\xf3\x49\x62\x9e\x2e\x7b\x68\xe7\x87\xdf\x25\x89\xae\x1d\x7f\xe7\x2c\xfe\xd0\xf1\x57\xc9\x26\xf2\xc5\xac\x6d\x9f\x6b\x22\x4b\x6e\x8c\x33\x08\x69\x48\x26\xb2\x62\x9e\x3b\x81\xc5\x67\x78\x15\x72\x1d\x92\x5a\xb4\x56\x7d\x74\xb7\xa4\x8f\xb7\x81\x43\x42\x10\x5e\x56\x05\x2b\x99\x30\x20\x78\xc6\xde\x7c\x01\xef\xce\x71\x3b\x82\x8c\x0a\x6b\xd6\xb2\x87\x8c\xb1\xdc\x75\x72\x90\x8d\xc1\x33\xc8\xc6\x41\x36\x7e\xec\x49\x76\x51\xf6\xe4\xab\x0a\xdd\x92\x6b\x01\x07\x2b\x17\xf0\x88\x79\x0f\x33\xfc\xbc\xc9\x40\x97\x33\xc2\x62\xd9\x05\xdb\x46\x1c\x61\x21\x8d\x75\x48\x79\x5a\x59\xba\x5c\xb3\xe9\x57\xd8\xaa\x31\x61\xd8\xc9\x2f\xed\x81\x13\x68\x7f\x48\x11\xd5\xf4\x5e\x70\x5f\x6b\x96\xd5\x8a\x9b\xe5\x99\x14\x86\x3d\x44\x81\xe9\xfa\xd8\x4e\x2d\x06\xf1\xba\xdb\x21\xe7\x09\x73\x09\x83\xee\x3b\x22\x2b\x24\x86\x7a\x94\xe7\x7c\x21\xeb\x22\xb7\xcb\xa9\x6a\x01\xbb\x24\x6e\x77\x5c\xcc\xec\x5a\x23\x28\x05\xd6\x1a\xfc\x74\xab\x5d\xf4\x70\x11\xec\xce\xbf\x6a\x7e\x47\x0b\x26\x4c\xf0\x17\x13\x00\x10\x84\x7f\xf4\x19\xba\x4f\xc1\x96\x99\x28\x7e\xc7\x0b\x36\x67\xe7\x3a\xa3\x05\x5c\xa5\xbb\xd6\xcf\x4e\x1f\xe9\x17\xec\x07\x25\x0b\x4d\xee\x17\xcc\xea\x2b\x56\x4e\x20\x68\x09\xbc\x78\x73\xca\x05\x29\xa5\x4a\xf1\xf4\xb8\x46\x35\xa2\xa6\xac\xca\x55\x51\x65\xd7\xde\xa3\xa3\x50\xc0\x4c\xa5\x2c\x1c\xc7\x5b\xb1\x6c\xfb\xc5\xe3\x5d\x22\xe0\x7e\x91\x3f\x0b\x76\xff\xb3\xed\x85\x26\xb3\x82\xce\x1b\x50\x94\x15\x50\xab\x50\xd3\x74\xc0\xd6\xa3\x13\x0d\x04\x66\x35\x23\xb4\xb8\xa7\x4b\xdd\x42\xd9\xda\xb6\x79\x82\x16\xf3\xea\x08\x4e\x31\xd5\xa4\x69\x3b\x8f\x7e\xd9\xef\x8f\x20\xff\xe8\xec\x74\xf2\xf3\xf5\x3f\xaf\x7f\x3e\x7d\xfd\xee\xe2\x32\x1e\xb0\x22\x0d\x43\x05\x3b\xb8\x0d\xdc\x1d\xe1\x56\xa1\x09\xd3\x1d\x4b\x7d\x0c\xfe\x32\xc8\xa5\x16\xb9\xbc\x4f\x74\x16\xdb\x3d\xc5\x68\xdc\xd5\x43\xab\xea\x54\x95\x52\x4d\x94\x9c\xf1\x22\xda\xcf\xd8\xd7\x09\x5e\xe9\x8e\x07\x6c\x9e\xba\x8f\x5b\x71\x8f\xe9\x7d\xeb\x61\x8b\x40\x50\x73\x48\x22\xb3\xaf\x89\x37\x6e\x3a\xf0\x3f\x04\x23\xae\x74\x31\xfe\x10\xed\x74\xcf\xec\x3c\x71\xc2\x76\x23\xf2\xcf\xfb\x70\xab\x17\x32\xa3\x05\x70\xcc\xa7\x6d\x7c\xd2\xb3\x7b\x7d\xb5\x5f\x01\xd0\x93\xfa\xed\x4c\x0a\x49\x73\x96\x7b\xb9\x2e\x64\xce\x3c\x25\xa5\x57\x76\xc0\x0b\x9e\xd4\x91\x1b\x04\xd9\x41\x7b\x1e\x99\x5a\x29\xe6\x4d\xe7\xd5\xe6\x25\x32\x71\x26\x35\xf9\xae\x1b\x53\x70\xa3\xec\xe4\x50\xa4\x9e\xb9\xa6\x19\x77\xc0\xf8\x0c\xc2\x92\xa0\xf2\xf3\x19\x6c\x4a\x7b\xc4\x5e\xbc\xf5\xcb\x90\x40\x4e\xdd\x53\x66\x0b\xbc\x64\x4f\x76\x27\xce\x4f\xb3\x23\x11\x21\x74\xcb\xed\x0c\xce\x5a\x21\xed\xb7\x8d\xd7\x41\x10\x26\x94\xb8\x1f\xbf\x87\x32\x08\x5e\xfe\x53\x95\x4c\xcb\xd1\x2c\x31\x19\x07\x47\xab\x52\x6c\xbc\x7e\xbc\x52\x49\x49\xae\x6a\x61\x78\xc9\x7c\xea\xe9\x78\x45\x27\x52\xf8\xf5\x81\x6e\xf8\xd9\x7a\xd9\xe8\x84\x7c\x27\xe0\xbc\x0a\x96\x93\x31\x11\xb2\x5d\x22\x26\x66\x52\x65\xe0\xa7\xdb\xe9\x06\xcf\x68\x45\xa7\xbc\xe0\x29\xc2\xbc\xaf\x0d\x0e\xac\xc7\x41\x7f\xc0\xa1\x99\xe7\x27\xb9\x92\x15\xde\xc4\x3e\x1f\x24\x3d\xca\xdf\xc5\x1d\x87\xcc\x7c\xa0\xb0\xcf\xba\x1d\x99\x2b\x2a\x4c\x9b\x70\xb0\xb6\x71\x7e\x8d\x3a\x48\x1f\x4a\x00\xcd\xfb\xe3\x0f\x3f\xcd\xad\xcc\x08\x97\x2d\xf9\x5c\xed\x1b\x9b\xd9\x99\x1f\x5c\x00\x3c\x26\x93\xf7\xd7\x17\xff\x77\xe5\xdc\xc4\xab\x76\xf8\xec\x37\x97\x91\x95\x07\xbd\x6d\x9b\x2b\x56\xca\xbb\x61\xe3\x7c\xf1\x1b\xa7\x71\x10\xed\x9c\x88\xe1\xaa\x16\xa1\x3b\x46\x04\x5d\x23\x65\x92\xae\x33\x69\xf2\x15\xbb\x6f\x0d\x2b\x3d\x2a\x46\xec\x4f\x84\xe1\xb4\x28\x96\xa1\x8f\xd4\x48\xac\x50\xd0\x4b\x4d\xad\xf0\x76\x9d\xd1\x42\x7f\xae\x57\x64\x8a\x6b\xa7\x52\x32\x7b\x27\x6b\xd1\x0f\xb3\x43\xc2\x8e\x6b\x3a\x42\x72\x26\xa4\x71\xde\x14\xb0\x25\xe4\x0c\xbe\x25\x18\x39\x0f\x48\x9b\x3a\x7a\x4e\x82\x9a\x75\x13\xa8\x56\x5c\xfb\x7d\x31\x69\x7a\x84\x26\x4c\xad\x99\xde\xac\x5a\xb5\xb1\xf4\x99\x8c\x0f\x21\x2a\x46\x73\xb0\x31\x2b\x6a\x16\x48\x28\x52\x52\x7d\xcb\x72\xfc\x20\x31\x91\xb2\x01\xd5\x02\x2e\xce\x0f\xed\xc6\xce\xaf\xc7\xc1\x82\x4f\x18\x69\x55\x00\x79\x9b\x62\x8d\xed\xf4\x40\x24\xc8\x76\xbb\x08\xef\x45\xb1\xbc\x92\xd2\x7c\xd3\x54\x3b\xd9\xf5\xe1\xf8\x87\x8b\x48\x74\xfd\x98\xe0\x9a\xa6\xd0\xe5\x31\x6c\x1c\x10\x8d\x41\x8d\x96\x54\xc9\x68\x17\xe4\xd7\x2a\x18\x55\x2d\x4e\xf5\x1b\x25\xeb\x68\x35\xae\x4f\x93\xf3\xcd\xc5\x6b\xb8\xfb\x6a\x97\x6b\x2f\x8c\x5a\x56\x92\x23\x90\xa8\xe7\xb8\xcd\x77\x8e\xd5\x20\x94\x6c\xc9\x09\xcc\x84\xbc\xa3\x4b\x42\x0b\x2d\x1b\xaf\x9a\xd8\x14\xe7\xf4\x41\x54\xfb\xf5\x54\x9a\xc5\x5a\xf4\x94\x8a\xf8\x68\xce\x7a\x7b\xa3\x20\x65\xbf\xcd\x8e\xe2\x62\xad\x59\x03\x40\xe1\x4a\xb1\x8c\xe5\x4c\x64\x9f\xeb\x89\xd8\x75\x06\x39\x9c\xaa\x4b\x29\xac\x78\xdd\xf5\xb9\xba\x68\x5c\x94\x6e\x35\xc2\x53\x04\xde\x6c\x17\x47\xa4\xc0\xb6\x00\xc2\xb5\xd6\x29\x28\xee\x8b\x19\x04\x3e\x71\xd3\xfd\xbd\x9e\xb2\xc2\x2e\x36\x2f\x0a\xac\xdf\x4a\x0d\x62\x02\x78\x49\xe7\x8c\x50\xd3\x1c\x42\x23\x09\x13\xba\x56\x6e\xdf\xf0\xf8\x7c\x87\x5c\x32\xdd\x54\xd6\xa2\x9a\x7c\x77\xf1\x9a\xbc\x24\x87\x76\x6c\x47\xa0\x71\xcc\x28\x2f\x80\xc0\x01\xf0\x37\x2b\x51\xd9\x19\xe0\x06\x65\x4a\x32\xe7\x85\x93\x23\x44\x2a\xbc\x5a\x46\x44\x48\xa2\xeb\x6c\xe1\xe7\x80\x4b\xd1\x38\x85\x1d\xa3\x5f\x12\x22\x7a\x10\x3b\xfd\xdd\x87\xdf\x69\xa6\x76\x7d\x6c\xed\x75\xf8\xdd\x33\x5e\x87\xa1\x95\x68\x8f\x7f\x77\xc1\xf0\xac\x96\xcc\xd0\x9c\x1a\xea\xae\x49\xff\x83\x61\xd7\x0e\x97\x65\xc2\x65\xa9\xd9\x5b\x2e\xea\x07\x04\xbb\xed\x45\xe4\xe3\xfa\x1c\x7a\x04\xc7\x0b\x16\x5a\x06\xa1\x3b\x1f\xa4\xe8\x21\xdd\xe9\xa2\x73\x8c\x46\x8f\x58\xdd\x70\x4b\xf8\x64\x63\x6b\x08\x51\x91\xcb\x72\xad\x93\x90\x0d\x9d\x52\x9a\x3a\x00\x8e\x0c\x07\xd3\x3d\xbf\xee\x98\x50\xc1\xee\x58\x42\x39\xee\x95\x43\xf9\xd6\xbe\xcd\x4e\x8e\xdf\xb9\xf0\x7a\x52\xd0\x29\x2b\x5c\x0a\x36\x72\x68\xf4\x78\xc2\x7a\x72\x83\x2b\xd9\x23\x2a\xe6\x4a\x22\x98\x8b\x36\x13\x61\x5f\xff\x59\xcc\x43\xaf\xf8\x8b\x1b\x07\x30\x69\xe7\x01\xdc\xa0\x9f\xc3\x3c\xd4\x09\x0a\x22\x59\x9d\x07\xab\x6d\x76\xe7\x01\xf4\xaf\x7d\x9f\x07\xcd\xb2\x4c\x96\xd5\x9e\x80\x25\x6f\x10\x08\x6f\x7b\xf4\xa9\xc0\xc8\xee\x8f\x69\x12\xe2\xd9\xb1\x20\x52\x83\xf7\xa0\xa7\x42\xfc\x3f\xc1\x75\x0e\xd2\x6e\xf5\x8e\x77\xad\x27\x83\x32\x9b\x16\xdd\x0b\x7f\x8d\x37\xde\x80\xc4\xec\x3c\xcf\x8e\xc4\x0c\xd8\x59\x28\xb8\xe7\x3b\xa8\xc8\x2f\x01\x8f\x69\x8d\x00\x98\x57\x26\x72\x2e\xe6\x10\xb0\x1a\x11\xc5\x0a\xe4\x27\x75\xe2\xf9\x16\x3d\x5e\x07\x20\x71\x7c\x87\xbc\xb8\x69\x61\xab\xc8\xce\xd2\x2b\x7c\x73\x13\x64\x13\x7f\x73\xf9\xfe\x26\x4c\xe3\xa2\x62\x89\xc9\xaa\xf0\x27\x3b\xbf\x4e\x3f\x1b\x58\xe7\xea\x2a\x3e\x35\xaa\x33\xad\xfc\xed\x66\x54\xe7\xf3\x1d\xd3\x4f\x43\x7a\xae\xe2\x3c\x7b\xed\xc2\x2a\xe8\x73\xbd\x8d\x1e\x96\x2e\xf9\x0c\xb8\xbb\x73\x8f\x3c\x20\xff\xc0\x1e\x79\x33\x3b\xb3\x92\xc3\x70\x31\xd7\xa1\x17\x84\x16\xa9\x49\x9a\xf8\x6c\x72\x83\xf8\x63\x30\x53\xb2\xf4\x1c\x37\xab\x66\x7e\x87\xec\x3a\xa5\xf5\x8f\xb8\x30\x3e\x6f\x57\x44\x61\x4d\x8a\xcf\xdc\x11\x31\x2f\x35\x3d\x53\x76\x06\x0d\xa7\xc5\x75\xc5\xb2\x7d\xb9\x2e\xde\xbc\xbb\x3e\xed\xf6\x0c\x94\x61\x47\xc6\xc4\xe0\x7b\x42\xf3\x92\x6b\x0d\x11\x1f\x36\x5d\x48\x79\x9b\xd4\xe4\xe1\x86\xb2\xea\x01\x46\x4f\xf3\xb9\x3e\x71\x12\x65\x6c\x27\xee\x88\x70\x51\x34\xd9\xc2\xe0\x2e\x14\x46\xbb\x10\x42\xf2\xe0\x49\xd6\x8c\x1e\xb6\x1e\xe4\xa8\x34\xf0\xec\xf5\xe9\x01\xc6\x2c\xd8\xbc\x3b\x57\x3b\xd6\x77\x55\x1a\x0d\xed\xca\xce\x7a\x64\xec\x1b\x0a\xf3\x6f\x9c\x47\xb4\x5e\x77\x3e\x49\x4e\xeb\xcf\x98\xee\xaf\x3c\x76\x0f\x55\xcd\x5d\x97\x48\xce\x90\x99\x9e\x01\xad\x0b\x7d\x34\xdb\x1d\xe2\xdb\x07\x50\xca\xc7\xfd\xe9\x41\x5f\x84\x65\xa7\x45\x61\x17\x92\xda\x6b\xe2\x40\x87\x08\x4f\xb0\x4d\x16\xf4\x8e\xb5\x85\x7d\xd9\x6c\xc6\x32\xb0\x16\xc2\x51\xa4\x97\xbd\x3d\xe4\x00\x63\x0a\xe9\x51\x8d\xc4\xb6\x29\x29\xf9\x83\xed\x61\xd8\x62\x88\x43\x15\x39\x44\xfe\x37\x7f\x9d\x50\xd9\x80\x00\xfa\xa0\x61\x6f\x19\xd9\x15\x0a\x1b\xf1\x09\xd2\xc6\x5e\x5b\xf6\x8b\x4b\x66\xac\xa5\x86\xf3\x16\x86\x1f\xac\x65\xa5\xea\x1e\x0e\x43\x4a\x68\x98\x84\xe1\xe1\x5e\x25\x45\xe2\x79\x80\x50\xb1\xeb\x93\xd5\x41\xbc\xf2\xf6\x5c\xa1\x63\xb2\x21\x85\xe7\xd9\x42\xc8\xe4\xd3\xc3\xc8\x4f\x18\xac\x22\xfb\x12\xb0\x4a\x25\x3e\xc1\xd2\x7e\x50\x68\x24\x99\xf5\x64\xd2\x96\x2d\xfd\x24\xda\xe6\x88\xf6\x76\x4c\xfe\xc1\x1e\xe2\x35\xd1\xce\x54\x9d\x3f\xb0\x2c\x28\x13\x68\xb7\x8d\xab\x13\x68\xcf\x13\xbd\x4d\x44\xc4\xec\x5c\x81\xcf\x64\x59\x52\xd1\x5f\x86\x59\xa2\xc4\x3c\xc3\xee\x78\x5d\xcc\xf5\xce\x9a\x4a\x88\x42\x7b\x60\x59\x6d\x98\xa7\x36\xed\x88\x4b\x3c\xd3\xf6\x9a\xe2\x62\xee\xd8\x4b\xa4\x6a\xb8\x9e\x92\xba\xe5\xfb\x01\x74\xf5\x52\x1a\x72\x78\x70\x72\x70\xe4\x4b\x6e\x35\x5d\x38\xd0\x21\xfa\x19\x73\x35\xdb\x01\x69\x5e\x56\xc5\x12\xc6\x70\x80\x0c\xf5\x09\x95\x9f\xec\xe3\x71\x74\x0d\xd1\xab\x5e\xb0\xa2\x18\x11\x6d\x2f\x65\xea\x99\xd9\xf0\x53\xfb\x23\xa3\xea\x0c\x8d\xf7\xc3\x83\x5f\x0e\x46\x84\x99\xec\x88\xdc\x4b\x71\x60\xd0\x0f\x4b\x6e\x40\xb3\x4d\xea\x53\xd3\x89\xa5\xac\xa1\x88\x1a\x2e\x5b\x43\xe6\x97\x51\xab\x94\xd5\xa8\x39\x20\x1d\x00\x2b\x12\x8a\x82\xd9\xe7\xfc\x81\x1b\x2b\x20\x4d\x0d\xc6\xd3\x4b\xd4\x5f\x18\x30\xc0\x53\x0d\x25\x52\x4f\x16\x8c\x16\x66\xb1\x6c\x74\x2a\xac\x4f\xa5\x49\x2d\xdc\x37\xe9\x92\x7d\x0f\x12\xda\xf6\x37\xb5\xcc\x95\xc9\xdb\xeb\x4a\xbf\xae\x8f\x1f\x2d\xf4\x8b\x05\x7d\xbb\x45\x7e\xa1\xf8\x2f\xcb\xfb\xaa\xf3\xfb\x87\x2f\xaf\x86\xef\x5c\x55\xfd\x5c\xc9\x6f\xae\x26\x67\x1f\xad\xdc\x0b\x3f\x1a\x4a\xf7\x26\x53\x72\xf6\x59\xb1\x76\x22\x95\x21\xa2\xa9\x9a\x66\x4f\xd8\x1c\xd6\x92\xa9\x3b\x9e\xb1\xe3\x67\x28\x10\xdb\x17\xd9\x66\xfa\x71\x20\x80\xd4\x80\x81\xef\x8b\xf2\x75\x8d\xdd\xd9\xe4\x08\x73\x3d\x85\x2a\xf7\x05\xcd\x9a\xb5\x81\xf5\xfb\x16\x6e\xd0\xb3\x05\xcb\x6e\x1d\x75\x6e\x9a\xc7\x44\x33\x46\x36\xb8\x52\xad\x00\xc1\xff\x99\x16\x72\x7a\x52\x52\x6d\x98\x3a\xc9\x65\xe6\x2e\xf7\x71\x66\x7b\xc0\xc5\xfc\xb8\xcc\x8f\x52\xea\x69\x90\xa0\xda\xa7\x73\xdd\xac\x04\x41\x7c\x64\xac\xe1\x07\xe5\xba\x09\xdf\x4d\x97\x30\x2b\x3b\xf5\x0f\xda\xd9\x7b\xd3\x53\xb5\xf4\x6f\x6f\x6e\x26\x6f\x3a\xb5\xd2\x21\xf3\xd9\x98\xca\x53\x5e\xc3\xae\xc0\x4c\x89\x41\xda\xee\x4d\xa1\xf4\x1e\x7c\xb9\xdb\x14\x57\x07\xc2\x59\xab\x30\xd1\x69\xb1\x24\xf7\x14\x33\xa5\x35\x4b\x93\x05\x2f\x6c\x37\x5e\x58\x69\x63\x37\xdc\xb7\x8c\xe6\x4c\x69\xb0\x65\x18\xdd\x7d\x9c\x22\xe8\x53\x6f\xcb\x76\x56\x6b\x23\x4b\xb2\x70\x43\xc5\x39\x6c\xae\x42\x3c\x70\xc7\x70\x28\xd1\x6f\xa3\x89\x62\x15\xda\x3a\xee\x6f\xbe\x08\x4b\x66\x4d\x04\xe1\x3c\x07\xa4\xf6\x94\x64\xe1\x54\x39\x35\x1d\xab\xdd\x0a\x9c\xa0\xa4\xf2\xa3\xf8\xf4\x52\xe5\x87\xf4\x54\xe9\x87\xa4\x57\xfb\xf1\x2f\x49\x0f\x6c\xf4\x53\x37\x88\xf4\x52\x3b\x88\xf4\x5e\x3f\x88\x38\xf7\xbd\xdb\x5c\x18\xd4\xb7\x1d\x4d\x65\x3b\x23\x9e\x10\xc1\x83\x24\x32\x2a\xa4\xe0\x19\x2d\xf8\xbf\x59\x8e\x95\xe5\x65\x6d\xaa\xda\x80\x23\x27\xa3\x9a\x8d\xef\xa8\xe2\x56\xa0\x62\xe9\xb5\x06\x5d\x21\xec\x69\x37\x52\x82\x97\xa3\x09\x64\x61\x8f\xd3\xbb\xd9\x93\x2f\x81\xf8\x32\xe5\x3d\xaf\xf0\xda\xe2\xa4\xef\x68\xb2\xd7\x1e\x14\x82\x15\x12\x16\xfd\x99\x63\xd4\x2c\x00\x2d\x94\x41\xd0\xcf\x81\xcd\x40\x70\x5a\x75\x7f\x0f\xd0\xfc\xbd\x5a\x9f\x89\x22\x01\x0b\xd0\xaa\x15\xfb\xd5\xf6\x70\x7d\x0e\x7b\x8a\x5f\x3f\xbd\x39\x1c\xd6\x49\x9b\x32\x42\x05\xb9\x38\xbd\x3c\xfd\xf9\xfa\xfb\xb3\x9f\x2f\x4f\xdf\x9d\xa7\xbc\x3a\xb9\x32\x46\x9f\xb5\x31\x7a\xab\x8e\xf1\x44\xb5\x83\xec\xa3\xb3\x05\xdb\x9f\xd0\xf5\x35\xf4\x26\x24\x3b\x72\x36\x00\x94\xc3\x94\x3d\xb0\x5f\x91\x15\x97\xa7\x15\x3c\x3b\x95\x38\x5c\x70\xc3\x69\xf1\x9a\x15\x74\x79\x8d\x15\xfd\x77\xed\xa5\xbe\x6c\x84\x0d\xd6\xfc\xd7\xce\xe9\xdc\xc5\x09\x2c\xa8\xc6\xf8\x30\xcb\xc9\x94\xcd\xa4\x62\x10\xf3\x10\x56\x22\x55\x6d\xa8\x17\xc7\x67\x9e\xb1\xbc\xdb\xbd\x54\xb7\x85\xa4\xb9\x3e\xa9\x24\xfe\xcf\xb8\xe0\x33\x96\x2d\xb3\x82\xfd\xa6\xe9\xff\x38\x49\x4d\xdf\x0f\xe7\x76\xc5\x14\x07\x94\xc1\x3e\xec\x9a\x6f\xe5\x3d\x91\x33\xc3\x04\x39\xe4\xc2\xef\x9c\xa3\xc0\x4b\xd3\x06\x37\xd2\x29\x9a\x8c\x24\xaf\x5e\xfa\x46\xbe\xbc\xa8\x05\xc4\x75\xb4\xde\xeb\xb8\x95\xeb\xe3\xc7\x03\x57\xee\x87\xb3\xba\xe8\x06\xaf\x30\xa0\xd5\x4f\xe4\xea\xd5\x71\x93\xfc\xf2\x0a\xfa\xd3\x88\x22\x2a\x72\x0f\x63\xf9\xf2\xf6\x89\xc9\xaa\x6b\x99\xdd\xf6\xe4\x73\xbd\x39\x9b\xe0\xdb\x3e\x1a\xe7\xba\x39\x9b\x0c\x61\xae\xfd\x72\xbc\x1e\xb4\xd5\xa1\xb6\x75\xa2\x1e\x0c\x16\x57\xfb\x78\xe5\x47\x75\xab\x2b\x0c\x16\xd7\x23\xcf\x60\x71\x6d\xf1\x20\x38\x1d\x32\x3d\xdf\x28\x9a\xb1\xc9\x3e\x29\x70\x5e\x80\x90\xdc\x95\xff\x24\xad\x1e\xd7\x88\x0b\xc1\x58\x8e\xf2\xc3\x0d\x85\x91\xb9\x1d\xc9\xac\x2e\x8a\x25\xfa\x11\x51\x0d\x70\xb0\x96\x34\x7a\x5a\x78\xb5\x53\x73\x7d\x80\x78\x53\xef\x5a\xfb\xa4\x6a\x88\x96\x7d\x45\x02\x77\x9c\x6c\xe7\xad\x3d\xa2\x99\x88\x77\xa9\xd3\x70\x05\x89\xe6\x73\x3b\x5d\x56\xc3\x00\xd6\x5e\x60\xe7\xf1\x65\xbd\xda\x8e\xd8\x56\x67\x52\x65\x7c\x5a\x2c\xc9\x82\x16\xd6\x60\xba\xe7\x66\x41\x28\xb9\xe5\x45\xe1\x5e\x13\x3f\x51\xd7\xbe\xd0\x22\x6a\x35\x85\x14\x73\x98\x0c\xea\xb0\xde\x0f\x15\xcb\x6c\x9b\x59\xc1\xa8\xa8\x2b\xec\xa7\xd5\x91\x96\xb2\xee\x01\xee\xed\x63\xd6\x8d\x4e\x25\xb8\xe3\x35\xc0\xa2\x50\x1f\xdc\xf3\xdd\xa4\x3d\xf2\xde\x57\xcc\xc5\x22\x55\xd1\x7d\xc2\xbe\x74\x4b\x54\xe1\x67\x0d\x37\x83\xcb\x48\xb2\xdb\x02\x52\xe4\xa2\xdb\xfa\x1e\xde\xeb\x45\xab\x90\x62\x2c\xd8\x1c\x33\xc0\x9d\x40\x43\x4c\x26\xb6\x8f\x08\xc0\x26\x9f\x58\x1b\x59\x11\x5e\x96\x2c\xb7\x36\x72\xb1\x24\x77\x9c\x46\xf7\x04\xb2\xcd\xdb\x1d\x45\x0e\x85\x24\xb2\xb2\x57\x57\x2d\xb8\x59\x42\x54\x6f\x51\x1b\x92\xcb\x7b\x91\x90\xc7\x71\xe3\x10\x0a\x94\x4c\x99\xa1\xce\x0f\x6e\x0f\x41\x43\xb6\x0c\x3c\xca\xf6\xec\x01\xe4\xfb\x66\xe3\x06\x68\xf8\x97\xe7\xd4\x24\x48\x89\x0d\x1a\x3d\xae\xe7\x87\xb7\x1d\xd7\x2e\x66\x97\x48\xf0\xba\x1f\x94\x69\xf6\x44\xcb\xda\xec\xc9\x3d\xf2\x98\xfb\x08\x73\xe7\x03\x43\x91\x97\x4c\x13\x59\xf7\xc4\x65\xff\xca\x35\xd7\xa7\x95\x37\xf8\x9e\x36\x3e\xda\xe4\x3c\xaa\xa2\x69\x1f\x5b\xec\x11\x56\x70\x97\xdf\x17\x10\xe3\x4d\xeb\xd9\x8c\x29\xb8\xe9\xa0\xc3\x6b\xc0\xf9\xa6\x46\x90\xbf\xc3\xe2\x1c\xb8\x0e\xab\xc5\xcc\x08\x48\xc9\x5d\x92\xfa\x23\x4d\x3a\xf6\x3e\x28\x01\xaa\x98\x06\x92\x69\x41\xce\xdf\x7f\x13\xb7\x45\xfb\xa0\x2c\x4f\x4b\x85\x83\x71\xbe\x17\x71\x78\xc2\x7e\xf7\xc3\x26\x36\x09\xb7\x2d\xb2\x42\x6a\x97\x76\x09\xeb\x92\x2d\xa8\x10\xcc\x3b\xa4\xb8\x01\x6f\xf6\x94\x31\x41\x64\xc5\x10\x4f\x17\xd5\x19\x4a\x34\x17\xf3\x82\x11\x6a\x0c\xcd\x16\xc7\xb6\x77\xc2\xef\x85\x36\xbf\xd1\x7d\xa2\x8d\x62\xb4\xc4\x3d\xa1\x58\x49\x39\x36\x4f\x68\xa6\xa4\xd6\xa4\xac\x0b\xc3\xab\xe6\x65\x71\x9e\x44\x06\x99\xe6\x1a\xd3\xdd\xfc\x5a\x41\x62\x48\x9b\x48\x39\x6a\x7b\xe8\x86\x2f\xc3\x42\x28\xe0\x3e\x1b\xd9\x6f\x59\x59\x99\x25\xb1\x53\x5b\x44\x67\xb7\xcc\xb8\xd2\x86\x64\x05\x67\xc2\xb8\x91\x21\x97\x19\xf4\x61\xe4\xd5\x69\xe1\x66\x44\xbb\x29\x11\x39\x18\xdf\x95\xd1\x04\x12\x06\x9b\x4e\xf8\x57\xe5\x5c\x3b\x5f\x87\x1e\xc5\xad\x9d\x2f\x79\x81\x1b\xc7\xcf\x08\x6c\x1d\xaf\xe0\x60\x8f\xdc\x47\x41\x17\x82\x1a\xbe\xbe\x8c\xbb\xd5\x67\x53\xe4\x0a\xd4\xa5\xf0\xe7\x7a\xd4\xc9\x65\x6e\x6d\x0b\x48\x66\x59\x93\x3a\xb0\xa1\x04\xbb\xb3\xe7\x80\x65\xcc\xaa\xa2\xb4\x47\x21\xf3\xec\x32\xc6\x50\x35\x67\xe6\xcc\x8f\x3f\x36\xd9\xb6\x0f\x69\x13\x16\x3b\x0f\x1d\x44\xed\xe2\xc0\x3a\x4c\x64\x0e\xe4\x0f\x2d\x41\xc7\xa6\x0a\xec\x38\xae\x48\xdb\xeb\xe6\x91\xb2\xee\xde\xa2\xc2\x1c\xad\xa6\xa3\xba\xa2\x19\xd3\xe4\xf0\x62\x72\x36\x22\x93\x8b\xd7\x2e\x11\x4b\xce\x56\xd9\xf0\x62\xa7\xa5\xad\xf9\xef\x2c\xe0\x4d\x9d\x6b\xaa\xc9\x04\x5d\x0a\x68\xb1\x5c\x7f\x27\x8d\x51\x16\x07\xa7\xbe\xd9\x78\x15\x80\x89\xc6\xcb\xaa\x80\xda\x8e\x44\xd7\x60\x1a\xb9\xe8\x85\xdd\xdb\x68\x90\xb8\x53\xcb\x5a\x42\x22\xc7\x1e\x1f\x19\xc9\xc1\x56\x9a\xf1\xba\x45\x87\x80\xb6\x9f\x29\xa7\x08\x80\xc6\x6c\xdc\x57\x0d\xa7\x0b\xa4\x8b\x39\x98\x77\xfc\xf5\x1e\xe9\x0f\x0b\xac\xa8\x77\x4c\x6b\x3a\x67\x93\x48\x30\x50\x1f\x87\xaf\x75\x71\x03\x8a\xa8\x15\xd8\x0b\x86\xd4\x55\x46\x06\x9f\x84\x09\x92\xa1\xdb\xa6\xc4\x81\x44\xf5\xc0\x1f\xae\x7b\xc5\x8d\x61\x70\x3f\x40\x7d\x26\xd8\xbb\xab\x7c\x9c\xdd\xc4\xcc\xa8\xf6\xdc\xa4\x87\xed\x59\xc5\x5f\xe4\x98\xe2\x38\x65\x64\xaa\x38\x9b\x91\x19\x87\x9c\x4b\xc8\x46\x1c\x61\x61\x01\x8a\xc1\x1b\xad\x99\x82\x61\x3b\x87\x9c\x1f\x7e\x5c\x7f\xfe\xe1\xc6\x6f\x54\x2d\x32\x1a\x14\xde\x04\xb6\x30\x3e\x23\x73\xc8\x80\x74\xee\xa7\xff\x7a\xf9\x97\x3f\x91\xe9\xd2\x5a\x4a\x70\x26\x8d\x34\xb4\xf0\x1d\x20\x05\x13\x73\xbb\x8a\xa0\xec\xc4\xdd\xd8\x1d\xc6\xa9\x66\x71\x0a\x5e\x72\x83\x13\xf4\xea\xf7\xb7\xd3\xa4\x4b\x0f\x34\x93\x93\x9c\xdd\x9d\x04\x5b\x68\x5c\xc8\x79\xdc\x5b\xcf\x1a\x82\xa6\xba\xca\x63\x51\x11\x7d\x9f\x68\x59\xf0\x6c\xb9\xb3\x0b\xd5\xf9\xc2\xc8\x42\xde\xa3\x1b\x75\xfd\xa8\x06\xe4\x2d\x95\xac\xea\x02\x26\x8e\x7c\xd3\x50\xee\xd5\x9a\xad\x92\x19\xa5\xba\xe7\x03\x69\x07\x10\x06\xd7\xec\xca\x5d\xef\xd2\x7f\x7d\x37\xa5\xa3\x92\x70\x11\xef\xa6\xb4\x48\xb4\x1f\xfc\x1b\x5a\x14\x53\x9a\xdd\xde\xc8\xb7\x72\xae\xdf\x8b\x73\xa5\xa4\xea\x8e\xb9\xa0\x56\x9b\x5e\xd4\xe2\x16\x6a\xe3\xb6\xfc\xb2\x72\xee\x10\xbd\x40\x05\xd9\x9d\xd8\xa8\xce\xf8\x51\x22\xe3\xa7\x37\x06\xbc\xf7\xbb\x6d\x99\x3d\xf0\xd6\xc5\x2d\x08\xb3\x7d\x8e\x57\x71\xc2\x71\xe8\xf0\x68\xff\xfe\xe5\x7f\xfd\x19\x85\x0b\x91\x8a\xfc\xf9\x25\xa4\xeb\xeb\x11\x5e\x00\xa0\xfb\x5a\x23\xa7\xa4\x45\x11\xab\xd4\x84\x22\xe0\x9b\xe8\x92\xd3\x7b\x70\xe4\xcd\xce\x4e\xf7\x27\x3b\x6b\x6e\x6e\xfe\x09\x9a\x18\x37\x9a\x15\xb3\x11\xf2\xb7\x34\x0e\xe5\x03\xb0\x6b\x0e\xdc\x95\x17\xcf\xfd\xb3\x7b\x77\xc9\x9d\x2c\xea\x92\xbd\x66\x77\x3c\x8b\x83\x0e\x74\x56\xa5\xf3\x36\x1f\x20\x2b\xb8\x06\x5d\x72\x5a\xc8\xec\x96\xe4\xee\xcb\x20\x51\x65\xb5\x56\x76\xfc\x2c\xc4\xa6\xec\x24\xa4\xea\x3c\x3a\xfe\x4e\x92\x4e\x49\xab\xca\xea\xd1\x40\xc4\xa5\xe8\x7d\x67\x32\x40\x34\x01\xdf\x69\xa2\xd5\x93\x0c\x63\x49\x05\xb1\x8c\xdd\x88\xec\x35\x15\xfd\x8a\xe8\xcc\x9e\x74\x0c\x4c\xdb\xfb\x78\x04\x41\x67\x43\xb4\x2f\xf4\xa7\xa1\x82\xff\x46\xae\x92\x35\x5b\xbd\x29\x81\xd6\x6c\x0c\xd4\x20\xed\xf6\x81\x5b\x26\x3e\x70\xd0\x03\x0c\x21\x2d\x43\xa9\x33\x2f\xa2\x81\x7f\x94\xd4\x38\xfb\xc8\xbb\x2f\x28\xa9\x98\xd2\x5c\x5b\xd5\xe9\x7b\x38\x50\x67\x05\xe5\x65\x10\x38\xdf\xd5\x24\xac\xe7\xb3\x94\xb4\x1a\xdf\xb2\x65\xe4\x86\x4b\x3c\x2e\x8f\xa5\xd7\x94\xb4\x8a\xbc\x07\xa0\x1a\x6d\xfa\x35\x10\x79\x39\x4f\x64\xee\xfa\x01\xd7\x03\x16\x1a\xfe\x98\x19\x4b\xae\xeb\x29\x9c\x29\xf8\xf9\xd3\xd2\x79\xf5\xaa\x3c\xed\xfa\xae\xfa\xbe\x5d\xf1\xee\x55\x65\x3f\x69\xee\x2a\xfc\xd5\x97\x74\x43\xc1\xf8\x3e\xd7\x0b\xaa\xe9\x7c\x4f\x72\x38\x09\x9c\x08\xd7\x9a\xdb\x19\xdd\x7b\xac\xe3\x09\xc3\x23\x1d\xd8\xcc\xce\x43\x75\x8c\x05\x02\x12\x3a\x60\x8f\xa2\x6b\x94\x1c\x7c\x75\xb0\xd3\xcb\x11\x57\x46\xc9\x8a\xce\xc1\xa4\xdd\x87\x05\x5a\xed\x53\x48\x47\xbb\x90\xf7\xa1\xc8\xac\xdc\xaf\xac\xc4\xf4\x9c\xe6\x0b\x99\xb4\x3a\x08\xf6\xf5\x3b\xc2\x99\xe5\x58\xd6\xe1\x9e\x2e\x09\x55\xb2\x16\x49\xec\x05\x10\xcb\x6c\x62\xdd\xef\x56\x06\x7b\x29\x05\xf3\xb8\x9a\x94\x56\x6e\x3a\xae\x6f\x80\x18\x71\x41\x5e\x1d\xbf\x7a\x99\xdc\xf7\x2b\x96\xd5\x4a\xf3\x3b\x76\xe5\xea\x9d\x07\x71\xd0\x8b\xd9\x44\x6a\xcd\xa7\x05\xe4\x5b\x1a\x49\xce\xb1\x18\xfc\xfa\x40\x1b\xac\x17\x8c\x58\xaa\x90\xb8\x34\xa1\x87\x87\x78\x82\x43\x8c\xb6\x6d\x20\x01\xa8\xb5\x5f\x2a\x28\xac\xeb\x8a\x0a\x7a\xd9\xa8\xa0\x78\xef\xed\x74\xac\xbe\x08\xfe\x3e\x48\x92\x77\x2e\xa8\xd0\x56\xb9\xe7\xbe\x8a\x32\x7c\x74\xaf\xb8\x71\x87\xfb\x9e\x6b\x46\x0e\xc1\x9d\xb1\xb2\x19\x93\xb8\x9a\x43\xe7\x57\x62\x35\xfc\x3e\xb8\x96\xd5\xea\xd1\xdd\x87\x55\x5a\x97\x27\x6d\xe2\xcc\xbd\xf3\x7c\xb5\x2b\xe8\xa4\x7f\x7b\x2f\x2f\xa8\xc8\x8b\x24\x99\xd1\xcc\x4a\xb1\x4c\xa3\x9e\xba\x98\x91\x50\x26\x3a\xcc\x41\x10\x85\x5c\x50\x4d\x84\x24\x25\xa3\x00\xaa\xb6\xd7\x8b\x17\x83\x1d\xde\xe6\x1e\x3b\x81\xdb\x1d\x2f\xb2\xf0\x4a\x70\x02\xfb\x35\xd7\x4e\x40\x5b\x49\xe2\x8c\x17\xc4\x62\x95\x34\x4f\xe1\x64\x08\x66\xb5\x5d\xbe\xe3\x16\xe9\xbc\xda\x93\xf6\xea\x58\xe9\xcb\x53\xf4\x63\xe4\x0a\x92\xdb\xe6\x31\xb6\xbc\xc1\xa3\xd7\x22\xdb\x92\x20\x28\xf8\xac\x0e\xb7\xb9\x18\xd7\xc6\xba\xb9\xc7\x4d\x87\x13\xfa\xf0\xf1\xa1\x8e\x02\x69\xe8\x81\xdd\x88\x83\x71\x05\x51\x5c\xaa\x72\x1a\xad\xb7\x8f\x67\x34\x9e\xa2\x39\x13\x4c\x51\x17\x92\xf0\xb8\x6e\x17\xd4\xa7\x5a\x8a\xe4\x13\xf1\x91\x1d\x67\x45\xfe\xc7\x35\x15\xfc\xb3\x84\x8e\x80\xaa\x73\x28\xd5\xca\x79\x77\xd1\x96\x4d\x4a\x4b\xaf\xc3\x5e\x21\xc3\xc3\xed\x1f\x90\xed\xda\x65\xf9\x57\xcd\xef\x68\xc1\x90\xd2\xde\x0b\x87\x9d\x2a\x14\xba\x9e\xee\xab\xe9\xe8\x6c\x44\x30\x3d\x36\x23\x26\x1e\xb5\x22\x7b\xd2\x29\x5e\xbc\x20\x87\xd8\xc6\x01\xb2\x5b\xef\x56\xd1\x75\x6b\x75\xfe\x50\x25\x54\x72\xed\x6f\xbd\xce\x1f\x2a\x0a\x20\x8f\x6a\x2f\x16\xee\xbf\xd9\x82\xde\x31\x20\x13\xe7\x05\x55\x05\xe4\x92\x5c\xe3\x94\x91\x69\x6d\x08\x13\x77\x5c\x49\x01\xc0\x2a\xe0\x8d\xb2\xa2\x49\xb1\x19\x53\x4c\x64\x4c\x93\xdf\x1e\x7e\x7f\x7a\x05\xb9\x86\x47\x60\xfe\x32\x3f\xbe\x5a\x3b\x24\x54\x67\x0c\xc1\xeb\xf6\x71\xbf\x11\x3f\x76\xbb\x5d\x40\x43\xf1\x73\x61\xc7\x56\xd6\xa6\xa6\x05\x70\xae\x67\x45\x6d\x6f\xc3\x9d\xed\xec\xfe\x1d\xe8\x29\xde\xbc\x3e\xfd\xe7\x8e\x71\xff\x35\x8f\x3a\xae\x7d\x1c\xd4\xb3\x60\xbf\xae\xf1\xff\xa7\xa1\x28\xbb\xb4\xaf\x6b\xaa\xce\x81\x6e\xa8\x60\xc3\xf4\x39\x77\x19\xc7\x61\x3b\xf8\x7c\x61\x1c\x6f\xc3\x0a\x18\x33\xc0\x36\x97\xd1\xb8\xb1\xdd\x82\x20\xfa\x3b\x06\x11\xce\xe8\x7e\x76\xfd\x42\x6a\x73\x5a\x70\xaa\xb7\xf5\x65\xa7\x6d\xf5\x6f\xdb\x66\x21\xe5\x4f\xb8\x4a\x8c\xb4\x68\x60\x06\xb6\x67\x08\x75\xba\x98\x38\x40\xba\xdf\x95\x5c\xfc\x3f\x4c\x3d\x6d\x82\x4a\x98\x12\x0a\x7f\xb2\x65\x4f\x10\x75\x34\x23\x91\x35\x82\x62\x63\x40\x51\xd1\x9f\x54\xf1\xd2\xcc\x3a\x59\xc8\xc2\x25\x5f\x7b\x44\xc3\x94\x99\x7b\xc6\x04\xb9\x98\xc0\x9c\xdb\xa9\x44\x82\xc6\xcd\x33\xef\x94\x63\x61\xd4\xd2\x1d\xe8\xad\x7b\x13\xac\x19\xac\xc2\xb6\x47\x37\x21\x06\x15\x1f\x7d\x1a\x13\xbe\xed\xa5\x92\x12\x2d\x6a\x96\x21\xf9\x36\xfa\xb6\x59\x50\x4f\xab\x43\xa7\xf2\x8e\xc1\x7a\xe7\xb9\x8a\x4c\xd5\xde\x59\x08\xb4\x77\x05\x26\x89\xd1\x92\x57\xc9\xeb\xd3\xae\x83\x87\x93\x40\x49\x65\x10\x4f\x70\xcc\x9e\x1d\xde\x47\xbc\x36\xf0\x15\x79\xf1\x62\x67\xf7\xe2\x96\xc7\xad\xbf\x5b\xf1\x62\x72\xf6\x9c\x37\xe2\x77\xce\xbf\x64\x9b\x3e\xd0\x84\x57\x59\x9b\xdb\xb1\xed\xd2\xb7\xf9\x0c\x01\xaf\x59\x84\xb3\x3d\xd6\xc1\xbe\x68\x8b\x2c\x3e\xb7\x52\x41\x04\xb6\x6b\xaf\x34\xc7\x2f\xee\xc0\x23\xe0\xf9\xa9\x64\x7e\xbc\x3a\xd5\xee\x2f\xe2\xa7\xdb\xbb\x95\x50\x85\x71\xee\xb4\x51\xc3\xef\xb3\x72\x85\x02\x54\xb2\x71\xa0\xc5\x56\x26\xdc\xdd\xc2\x4e\x2e\x5e\xef\xf0\x5c\x54\x3c\xff\xbc\xcf\xc5\x77\x7a\x6b\x7e\xfd\x5e\x27\x10\x2a\x66\xf6\x3b\x83\x31\xb8\x69\x57\x24\xd3\xfd\x35\xd0\x62\x49\x43\x2a\xc5\x34\x13\xcd\xd9\xc9\x37\x25\x1d\xc2\xb5\xd8\x1d\xc5\xc8\xfe\x7b\x56\x17\xdb\xaa\xfe\x52\x05\xbc\x3a\x0d\x09\x11\x6d\x28\x44\x20\xca\x40\xef\x28\x2f\xc0\xef\x14\x10\xc5\xae\x75\xc0\xa5\x46\x6d\xd9\x83\x42\xd2\x1c\x99\xef\x6e\xed\x9d\x55\x90\x52\xe6\x75\x81\x30\x2d\x72\x76\x3a\xf9\xf9\xfa\x9f\xd7\x3f\xbf\x7b\xff\xfa\xbb\xb7\x5b\x73\x69\x61\x82\x38\x6b\xb7\xf8\x88\x50\x22\xd8\x3d\xf4\x5c\x80\xd5\x95\x39\x47\x77\xc3\xb3\x68\x85\xe3\xb5\xcb\x14\xc4\xc0\x2f\xe2\x2e\x66\x75\x61\x7f\xb4\x65\x0f\x4a\x6e\xf8\x9c\xc2\xcb\x5a\x5b\x7f\xaa\x18\xbd\x95\xb5\x21\x77\x75\x21\x98\xa2\x53\x5e\x70\xab\x1a\x13\x76\xc7\x04\x82\xfd\xec\x1f\xd8\x4e\x86\x95\x65\xf9\xb6\x8d\x87\x85\x87\x5d\x95\x43\x3b\xa9\xb6\x65\x9a\x39\x3f\x9a\xe3\x8b\x84\x2f\x2b\xc5\xef\x78\xc1\xe6\xac\x21\x61\x8b\xe1\x03\xee\x62\x4c\x68\x51\x2d\xe8\xb8\x60\x77\x0c\xc9\x9c\xec\x15\x61\x77\xd4\x42\x0a\xa9\x30\xe4\x84\xd4\xe4\xee\x86\x00\x7a\x1b\x3c\xac\xbe\xce\x2e\xa6\xb2\x5e\xfb\x94\x52\x97\x49\xfa\x6c\xc2\x6a\x7b\x98\x46\x9a\xac\xba\xee\x56\xe5\x71\x3d\xf0\x0a\xf1\x64\x6b\xc4\xf0\x66\xc7\x57\x6b\x78\xc2\xdb\xbd\x8c\x71\x87\x85\x12\x44\xa4\x8e\x7d\x09\x24\xa0\x7b\x89\x99\xf3\xad\xf5\x6e\x70\x84\x4d\xea\xa2\xb8\x66\x99\x62\xdb\x02\x78\xd3\xa6\xfe\x62\xa5\xed\xc7\xdc\x32\x81\xf3\x1d\xaa\xb9\xb8\x1f\x8b\xb6\x64\x43\x90\x92\xdc\xf2\x6d\x57\x75\x51\x60\x80\x7f\xe9\x97\x13\x46\xab\x83\xd4\x11\xae\x7d\x7e\x7b\xcc\x6d\xd2\x59\x63\xcd\x9a\xae\xf9\xe5\xad\xa8\xd6\x6d\x38\xf5\x8e\xe7\x35\x2d\xa0\x5b\xe0\x81\x74\xd9\xdb\x14\x2b\x8a\x3a\x89\x58\x46\x56\xc7\xdf\x92\xdc\xa7\x95\x55\x27\x38\x27\xbf\xc1\xc1\x2c\xb9\x98\x8f\xe1\x13\xdb\x4d\x37\x9e\xb1\x14\x63\x3a\xde\x16\x3c\xff\x59\xb9\xa9\xde\xca\x8c\x16\xef\xc1\xaf\x73\xe5\x77\x9b\x17\xe8\x9a\x30\x21\xeb\xf9\x02\xa6\x57\x95\xd4\x17\x2f\x2e\x98\x81\x22\xad\x2e\xf1\x2b\xc6\x1f\xd5\xec\xec\xdc\x39\x95\xc2\xc2\xbc\xdd\x9d\xfd\x8c\xae\xaa\x14\xef\x51\x2c\xca\xae\x8f\x30\xc6\x65\x20\xb8\xdd\xcc\x46\xc6\xdc\xba\x97\x2a\x9b\xcd\x58\x66\x3c\x14\x04\xdd\x78\x23\x88\x15\xe6\x35\x92\x44\xd3\xec\xf6\x9e\xaa\x5c\x93\x4c\x96\x15\x35\x1c\x54\x8c\x65\x2c\x4e\xc4\xe7\x1f\x60\x9e\x1b\xe4\xa6\x1e\x93\x0b\xa1\x0d\x05\x19\xe8\x79\x2e\xec\x0a\xb7\xa9\xa9\x90\xc1\x8a\x34\x61\x0b\xa6\x18\xa1\x2a\x0e\xaf\x43\x8b\xd2\x2a\x9b\x19\x53\x76\xef\x17\x4b\x72\xaf\xa4\x88\x4c\x11\xbf\x79\xff\xfa\xfd\x57\xe4\x34\xcf\x1d\x76\xd7\xeb\x75\x76\x62\xf5\x31\xa1\x15\xff\x9e\x29\xcd\xa5\x18\x91\x5b\x2e\xf2\x11\xa9\x79\xfe\x75\x54\x4b\x5b\x8a\x3f\x79\xc7\xd4\x1d\x67\xf7\x27\xce\x6e\x1f\xdb\x69\x1c\xe3\x61\xd1\x27\x70\xe6\x4e\x7e\x03\xff\x2f\x61\xdc\xaf\x95\xac\xc8\xff\xda\x6e\x4c\x6b\x5e\xe4\x4c\x7d\xe5\x9c\x5b\xff\x8b\x26\x80\x15\x2f\x4a\xda\xcb\x60\x3c\x67\x02\xb8\x39\xc4\x81\xc1\x9a\xcf\xdc\x6c\x2a\xe0\x18\xf8\x99\x34\x9f\xeb\x93\xe0\xdd\x27\x5c\xeb\x9a\xe9\x93\x3f\xfc\xf9\x2f\x7f\xfa\x8c\xdc\x76\x2b\xde\xb3\x92\x56\xf1\x5e\xd1\x2f\x20\x34\xc6\x05\x6f\xb9\x81\x9e\x55\x17\x7b\xeb\x74\x2d\x57\xc3\x83\xff\x1b\xaf\xb9\xc0\xa6\x99\xb2\x42\x8a\x79\x50\xbd\xc4\xda\x6e\xdb\x2a\x4d\x82\x9b\x8e\x9d\x04\xf8\x09\x28\x49\x0f\x41\x5a\xa9\x72\xe0\x84\xe2\x88\x5b\xef\xb4\x0e\x45\xa2\x03\x36\x2a\x2a\xb6\xf5\xff\xf3\x4e\xeb\x40\x67\xa0\x5b\xbb\x1f\xb3\xba\x3d\xd3\xbf\x91\xd6\x56\x63\x4d\xa9\x6a\xb4\xa5\x1c\xcc\x95\xd0\x2c\x93\x2a\xdf\xfe\xa8\x58\x4d\xd0\x34\xb4\x5a\xc8\x56\x81\x7c\x22\x60\x16\x58\x1d\x90\x8a\xd5\x7e\x82\xa3\x42\x95\x1d\xf2\x21\xe7\xcc\xdb\xb2\xf9\x5a\xf0\x7f\xd5\x8c\xd0\x52\x5a\xb5\xb8\x48\xc9\x69\x5b\x5d\xc9\x92\x2e\xc1\xee\x81\x49\x7b\xeb\x79\x22\x1d\xe1\xbe\x1e\x01\x1a\x96\x07\x05\x55\x46\xe4\x6d\xb7\xc2\xca\xc8\x8e\xf3\x1a\xab\x1b\xb8\x8f\xb6\x37\x85\x81\x7f\x48\xd6\x2a\x63\x57\x78\x4f\x97\x8e\x43\x63\xc3\xb4\xda\xbd\x67\xe8\x2d\x13\x18\xd2\xb5\x4b\x0a\xf9\x6c\xb5\x82\x9d\x96\x2d\x58\x5e\x17\xdb\x2f\xf1\x74\x49\x66\x56\xdb\x77\x50\xa0\x05\x9f\x2f\x98\x36\xde\x31\x7c\x02\xac\x0f\x98\x59\x48\xb3\x45\xd3\x5d\x90\xbf\x01\x61\x5c\x8b\x25\x2a\xe9\xc3\xf6\x1c\x20\xa0\x22\x50\xe3\xc9\x83\xd1\xd7\xa2\xeb\xd2\x6b\x47\xab\xfb\x49\x1f\x93\xb7\xb6\x63\x78\x22\x69\x55\x15\xdc\xdb\x2d\x9d\x65\xde\xfa\xc0\x01\x8b\x20\x00\xad\xc8\x8c\xea\x05\x97\x22\x75\xa3\x65\x08\xbf\xc8\x6a\x65\xd5\xbb\x62\x09\x24\xf0\x79\x6e\x35\x68\x45\x14\x2b\xe5\xdd\xf6\x9e\xed\x64\x48\x47\x1a\xb5\xaa\x9d\xe4\x71\x60\x91\x7d\x26\x66\xd6\x69\x43\x10\x69\xf7\x4b\xb6\x72\x61\xe0\x06\xb4\xf6\x91\x2f\x65\xab\x6a\xd1\x26\x83\x46\x5c\x1e\x3b\x0a\xbe\x47\xa4\x6c\xa6\x18\x50\x54\xcd\x77\x96\x45\x7d\xaa\xe6\x35\x4a\x4c\x77\xc5\x43\x14\xb8\x92\x3c\xde\x8e\x5a\x03\x5d\x1d\x68\x72\xf6\xee\x75\xc8\x5a\x1d\x96\x09\xf7\x9c\xe6\x71\xcd\x7d\xdf\x2f\x5c\x13\xb4\x8c\x06\x03\x1a\xd5\xa3\xac\x91\x2c\x56\xd2\x17\x77\xde\x1f\xd8\x74\xd0\xbb\xb1\xb8\xa8\x6a\xe3\xf4\xef\xa0\x40\x69\xb6\xa0\x62\x6e\x15\x9e\xd7\xb2\xb6\x03\xfb\xed\x6f\x61\x10\x8a\xe5\x75\x16\x99\x6e\x83\xfe\x46\x3c\xb9\xbf\xf5\xa8\x77\x57\x09\x19\xee\x25\x9d\xd1\xca\x4f\x4d\x38\x7b\x7a\x29\x0c\x7d\xf8\x8a\xf0\x63\x76\x4c\x5e\xfc\x36\xf8\xea\x05\xf4\x38\xaa\x37\x95\x92\x76\x28\x8e\x49\x16\x46\x5f\x70\x03\x09\xf7\x2f\xc2\x16\x8e\xc9\xb9\xed\x17\xe4\x91\x35\x6b\x1b\x90\x83\x4e\xdb\x95\x1d\x11\xc5\xe6\x54\xe5\x05\x8b\xe4\x62\x93\xb3\x26\xe5\x09\xd9\xf6\xdd\xae\x62\x0f\x5c\x1b\xed\x02\x47\xc7\xfd\x00\x01\x3f\xf5\xee\x30\x54\xdf\xda\x9b\xc2\x0a\xbf\x71\x4e\x0d\x1d\x07\x52\xf7\x04\xfd\xc6\xe3\x4c\x96\x25\x15\xf9\x98\xba\x73\xdc\x5e\x2a\x27\xbf\x71\x35\x24\xc6\xb4\xf9\x15\x17\x63\x3a\xd6\x0b\x16\xb5\x72\x03\x0a\x07\x1e\x37\x97\xbb\x12\xd8\xe7\x8d\x7c\xc6\xa5\x38\x26\x97\xd2\xb4\x16\x55\x73\xdb\xc2\x2a\xf7\x29\xc2\xcf\x2f\x6f\xae\xfe\x39\x79\x7f\x71\x79\x33\x48\xf2\x41\x92\xc3\x33\x48\xf2\x41\x92\x47\x34\xbc\x2f\x92\x9c\x89\xbb\x5d\x49\x71\xef\x7b\xdb\x94\x79\xe4\x42\x9e\x66\x2d\x85\x61\xe7\xc9\x0b\xbb\x26\x21\x3a\x17\x77\xdf\x53\x6b\xf2\x3b\x04\x8f\x43\x87\x6f\x48\xde\x72\x3f\x40\x77\xc4\xd9\x67\xcf\x42\xb4\x43\x0e\xa1\x1e\x39\x34\xc2\x60\xdd\xa6\x55\x6b\xab\xa0\x52\x72\xf6\xf3\xc5\xeb\xf3\xcb\x9b\x8b\x6f\x2e\xce\xaf\x76\x9a\x5a\x09\xfe\xb4\x7d\x48\xaa\xdc\x46\x3f\x4a\x68\xa6\xd5\xac\x2a\xc5\xee\xb8\xac\x75\xb1\x24\x1e\xa4\xb2\x59\x5c\xad\x13\x3a\x25\x66\xa9\x23\x62\x89\x67\x9b\xb7\x89\x5e\xd1\xed\x36\xe9\x69\x09\xcd\xef\x58\xc3\x73\x9d\xe8\x43\xcf\x4b\x68\x7f\x83\x86\xf8\xe9\xda\x5e\x42\xbb\x51\x7a\xe2\x63\x3a\x5f\x42\x3f\xba\xda\x62\xc2\x8b\xba\x49\xbc\xbb\x97\x64\xdf\x28\x59\xf6\x24\xcd\xae\x31\x8c\xe1\x71\x9d\x9b\x8e\xea\x81\x2b\xac\xd8\xd1\xb7\x9d\xe5\xd8\x56\x5c\xb4\xf6\x2b\x20\x1e\x12\x67\x27\xa9\x22\x73\x3f\x45\x91\x89\x4b\x41\x7d\x47\xab\xbf\xb3\xe5\x15\x4b\xac\x2d\xdb\x9d\x6f\x56\xb0\xcc\xea\x3c\xe4\x96\x2d\x91\x77\xea\xcc\x37\x96\x56\x5e\xb7\x97\xe9\x23\xbd\x94\xb5\xc6\x67\x6c\x87\x98\xf4\x8e\x7e\x16\xd3\x3e\xb7\x2c\x81\xad\xc9\x3f\x2b\x5c\x62\x0c\x96\x10\xd4\x7c\xbb\xa6\x69\xab\x47\xfa\x2a\x64\x8d\x4f\x9a\xc2\xe7\x9f\x3e\x8b\x5a\xe3\xd3\x1f\xd4\xab\xfb\xec\x16\xf8\xd5\x7d\x76\x0a\x03\x5b\xed\x4a\x7f\xa0\xb0\xee\xf3\x7c\x10\xb1\xee\xb3\x5f\x80\xb1\x4d\x73\xf2\x59\xc1\xc7\xba\x4f\x8f\x02\x28\x05\x5a\xb6\xfa\x78\x60\x79\xcf\x02\x0d\x33\x08\x96\x1d\xad\xb3\xb9\x8b\x09\x16\x82\x00\x11\xef\x33\xf0\x9c\x01\xd5\xd3\x34\xa7\x91\x11\xe2\xd3\x1f\x08\xaf\xfb\xc0\x31\xee\x57\xf1\x49\xbe\x3e\x5a\xcd\x09\xe5\xbc\xbb\x45\x2a\x99\x7f\xe5\xb9\xd9\x34\x29\x99\xa1\x39\x35\xf4\xd8\x9e\xe9\x51\xf7\x9f\x2e\xfd\xea\x7f\x9b\x0f\x0b\x3a\x65\x85\xfe\xe1\xe0\xaf\x7f\x3f\xff\xe7\xdf\x0e\x7e\xfa\xdf\xf0\x3b\xd0\x74\x11\xe2\x1f\xfc\x20\x71\x08\x50\x50\x4e\xc8\x9c\x5d\x42\xef\xe0\x9f\xce\x48\x3e\x45\x18\x93\xfb\x02\x6a\xfa\x1c\x63\x6a\x71\xf3\xcf\x4a\xe6\xab\xff\x4a\xa8\x99\x4e\xf6\x53\x65\x84\xb5\x4d\xa0\xea\xc6\xa7\x3f\xc5\xb1\xbd\xc8\x7a\x96\x3e\xee\xad\x7e\x1b\xeb\x6c\xc1\x4a\x0a\xff\xf9\x8d\x9f\x02\xab\xca\x34\x55\xd7\x04\x14\x4f\xb2\xea\xc3\xa8\xc3\x75\xf7\xe2\xee\x55\x92\xb1\x8e\x4f\x8f\x92\xbf\x59\xc1\x9e\x27\x0c\x66\xc4\xcd\x16\x4a\x80\x46\xf5\x6e\x72\x8a\x7c\x62\x0f\x39\x9d\x5c\x90\x3b\x9c\xe1\x3d\x9a\x9c\xa7\x12\xd7\x1e\x8d\xf8\xcd\x5e\x8b\xed\x06\x33\xb9\x5a\x03\xe5\x2b\xcc\x75\xf4\xdf\xbb\x12\x5b\xba\x29\xe8\xcf\xb6\xa7\xea\x59\x7d\x0e\xf1\x95\xc7\x59\x55\x8f\xdc\xeb\x8f\x4b\x56\x4a\xb5\x6c\xfe\xd9\x54\x8c\x18\x6b\x23\x15\x9d\x03\xcf\x31\x36\x8e\x7f\xd6\xfc\x0b\xff\xb0\xd3\xbd\xf5\xbf\x46\x5f\x6e\x0b\x77\x6c\xe8\x43\xbf\x38\x91\xed\xd7\x6d\x4f\x24\x76\x96\x5a\xa3\xb7\xfb\x74\x4e\xc3\x41\x13\x85\x42\x0b\xbb\x99\x45\x70\xa0\xb9\x42\x26\xa3\x36\x13\x12\xbc\xbc\xe2\x8e\xdc\x51\xa5\x0f\xf6\x47\x0e\x11\x92\xf3\x3b\xae\x65\x02\xcf\x64\xf3\xa2\x75\x8d\xda\xe7\xe4\xba\x92\x79\x98\x7b\xd7\x84\x8c\x1e\x2a\x28\x5c\xdd\x1c\xf6\x95\xdb\xec\x55\xaa\xb1\x40\x48\x45\x8d\x61\x4a\x7c\x45\xfe\xe7\xf0\xc7\xdf\xfd\x32\x3e\xfa\xfa\xf0\xf0\x87\x97\xe3\xbf\xfc\xf4\xbb\xc3\x1f\x8f\xe1\x3f\xfe\xf3\xe8\xeb\xa3\x5f\xfc\x3f\x7e\x77\x74\x74\x78\xf8\xc3\xdf\xdf\xbd\xb9\x99\x9c\xff\xc4\x8f\x7e\xf9\x41\xd4\xe5\x2d\xfe\xeb\x97\xc3\x1f\xd8\xf9\x4f\x9f\xf8\x92\xa3\xa3\xaf\x7f\x9b\xdc\x75\x2a\x96\xef\x13\xa5\x37\x3e\x63\xb7\x59\xb8\x30\x6c\xce\xb6\xcd\x88\xff\xd0\x1b\x7b\xb2\x0e\x3b\x57\x21\x17\x66\x2c\xd5\x18\x5f\xfd\x15\xd0\x3c\x24\x36\xe0\xb7\x57\xdf\xe7\xff\xca\x4b\xcd\x20\x03\xc0\x6b\x21\x7b\x74\xc0\x9f\x4a\xd1\xc0\xc4\xe2\xe7\x70\x8a\x63\x4b\x41\x01\xb0\x03\xdd\xe6\xd4\x7e\x69\x37\xe8\xaf\xc1\x4f\xee\xed\x1c\x5c\xd7\x56\x75\x9f\x29\x59\xba\xb2\x40\x08\x1a\xb8\xa3\x05\xcf\xfd\xef\x6e\x59\x42\x40\xc9\x3f\x83\x5f\x3d\xfa\x19\xfc\xea\x8f\x74\x65\xf0\xab\x0f\x7e\xf5\x4f\x7e\x06\xbf\x3a\x32\xc5\xfc\x3a\x9d\xea\xfd\x33\xa0\x47\x22\x09\xfb\x24\x3f\x67\xe2\x2e\x16\x85\xd2\x27\xf4\xd6\x7b\x8c\xc2\xfa\xf8\x9f\x86\x6f\x8b\xcf\xaa\xb0\x2b\xd7\x80\xe9\xda\x54\x0d\xb4\x06\xca\xcd\xe0\x47\x72\x5a\x14\x84\x0b\xd4\x6d\xec\x0b\xa2\x5a\x6f\x28\xee\x98\xab\x44\xe3\xa8\x95\xef\xec\x50\x1b\x7a\xba\x20\xeb\x43\x63\xe6\x3d\x17\xf3\x63\x64\x79\x43\x0d\xdb\x01\xa3\xb8\x20\x65\x5d\x18\x5e\x45\xa2\xac\x1a\x0b\x1e\xf1\x5a\xf6\x8e\xa5\x5a\xcb\x8c\xd3\xa6\xf8\x3e\x14\x03\xa7\xda\xf8\xe9\x81\x11\x18\x7a\x0b\xc0\xc4\x8c\xe5\x4c\x6c\xcf\x90\x83\xcf\xf7\xb6\xbd\x76\x1d\xa6\x4b\x3b\x13\xe7\xe2\xce\x5d\xfd\x24\xaf\x11\x9c\x8f\xda\x67\x7f\xed\x7e\x59\x48\x6c\x7b\x86\x1d\x04\x2c\x00\x64\x83\xa2\xde\xf8\x6a\x29\xe0\xd8\xe5\xac\x0d\x8e\xc6\xed\xde\x64\xc3\x2b\xdd\xcc\x69\x70\x5d\x49\xf6\xeb\x9a\x7d\xd3\x46\x8d\xbb\x76\xcd\x97\x00\x85\x4b\xb7\x78\xfa\xb5\x76\x9e\xc2\xd2\xd9\x17\x2b\x67\x4f\x2c\x9c\xa7\xb1\x6e\x76\x61\xd9\xec\xab\x55\xf3\x59\x5b\x34\xbd\x59\x33\xfd\x58\x32\xfd\x58\x31\x5b\x20\x83\xfa\xb4\x5c\xfa\xb1\x5a\x9e\xc2\xdd\x5b\x29\x36\xe3\x0f\x3d\x5d\x92\xa7\x01\x3b\x28\xcf\x99\x30\x7c\xc6\x19\x50\x45\x55\x8a\x55\x4c\x80\xc8\x03\x62\x1d\xab\xac\x39\x55\xbd\xc5\x45\xef\x63\x4a\x11\x3a\x28\xfb\xd5\x23\xae\x37\x39\x47\x07\x25\x82\x0c\x4a\xc4\x16\xcf\xa0\x44\x0c\x4a\xc4\xa0\x44\x6c\xf9\x3c\x93\x12\xe1\x04\xfc\x97\xaf\x41\xf4\x5d\x34\xa9\xa4\xf3\x9d\xd1\x13\x9f\x75\x59\x54\xe0\x32\x7b\x4a\xa2\x89\xc7\xc9\xbe\x23\x5d\x96\xe1\xbd\xd4\xa8\x61\x46\xe2\x4d\x81\x4c\x87\x8a\x60\xed\x01\x74\x90\x90\x92\x0a\x3a\x07\x12\x46\xfb\x3b\x5f\xe9\x51\x2a\x62\x85\x9b\xe2\x91\x25\xc5\x57\xe8\x68\xc0\x01\xe9\x29\xf5\x02\x39\xa5\x49\xc1\x6f\x19\x79\xcd\xaa\x42\x2e\x4b\xc7\x10\x90\x93\x6b\x43\x8d\x15\xf6\xd7\xcc\x24\xd4\x1f\x8b\x94\x38\x0d\xdd\x3e\x72\x7f\xee\x6a\x2b\x02\xf3\x3e\x30\xd1\x93\x0a\x49\x48\xa3\x5e\xf3\x5e\x80\xf6\x73\x5a\xdc\xd3\xa5\x1e\x91\x4b\x76\xc7\xd4\x88\x5c\xcc\x2e\xa5\x99\xa0\x0f\x30\xee\xbd\x61\x9e\x2c\xbe\x9c\xf0\x19\xf9\xaa\xa0\x86\x69\x43\x0c\x9d\x83\x47\xba\x65\xdf\x97\xaa\xd3\x68\x5b\x3e\x7d\x87\xae\xd9\x1e\x28\xf9\xa1\xf5\x86\x90\x3f\xe6\xd4\x26\xed\xd5\xc2\xb3\xb8\xee\x8c\x8e\x10\xc9\x63\x91\x49\x12\xb9\x50\x1b\x71\x82\x05\x33\x7c\x69\x68\xf0\xc8\x73\x41\x14\xd3\x95\x14\x9a\x75\xc8\x83\xdb\x81\x60\x84\x23\x32\xd9\xa1\x47\x87\x7d\xb4\x2d\x95\x6a\x45\x55\x52\x1b\xe0\xd8\x8d\xd5\x4f\xfa\x32\x9f\x26\xbe\x23\x40\xbb\x4c\x8b\xc2\x6a\x91\x65\xc9\x72\x4e\x8d\x35\x75\xe8\xcc\x30\x45\x68\x37\x06\xe5\x8a\x07\x1d\x63\xf5\x33\xe6\xd8\x98\x3d\x91\x73\xbc\x7d\xbb\x1a\xeb\x32\x4c\x95\x5c\x60\x41\x7e\xc0\x66\x3b\xda\xe9\x96\xf6\x79\x85\xc8\x39\x49\x88\xda\xe7\x3d\x68\x76\xc1\xf6\x5e\x85\xb6\x93\x69\x21\xb3\x5b\x4d\x6a\x61\x78\xe1\x2a\xd5\xc8\x5b\x30\xf9\x0a\x10\x27\xd1\x4d\xc7\x4b\xa9\xe6\x3f\xc7\xcd\x01\x1b\xdb\x5e\xe9\x93\xdf\xb4\x5f\xc1\x07\x91\x9d\xeb\xc1\xf1\xd0\x87\xdb\x81\x3d\xb0\x2c\x45\x9f\xef\xc6\xca\x1e\x58\xd6\x5c\x5d\x18\x21\x43\x8e\x6c\xa0\x5c\xa5\xb7\x49\x44\x1d\x3d\x41\x12\xfb\x82\x01\x26\x90\x23\x86\x4f\xdf\x28\xb7\x33\xec\x16\x9c\x74\x38\x63\xf8\xcf\x82\x0b\xb8\x37\x1c\x7b\x62\x58\x89\xa5\xd9\xce\x18\xa2\x5e\x2b\x91\xee\x69\x2f\x92\xbb\xe6\xfb\x62\xfb\x06\x35\xc2\x0e\x0f\x4e\x0e\x8e\xd6\x30\x07\x07\x58\xbd\x18\xef\xc0\x63\x47\xd1\xd8\x0c\x4a\xf3\xb2\x82\x92\xfd\x2c\x3b\xc8\x47\xd6\x38\xef\x01\x36\x67\xaf\x3e\xac\x88\x07\xb3\xe2\x28\x25\x47\x44\x4b\x62\x14\xcd\xb9\xb3\x06\xe0\x53\xfb\x23\xa3\x6a\x77\x7b\x1f\x1e\xfc\x72\x30\x22\xcc\x64\x47\xe4\x5e\x8a\x03\x03\xd3\x77\x4c\x6e\xa0\xcc\x51\x3a\xd2\xdd\x77\x64\x29\x6b\x74\x46\xc0\x12\x56\x05\xcf\xb8\x29\x96\x70\xb7\x10\x59\x63\xd9\x3f\xab\x47\x24\x50\x61\x86\xcf\xf9\x03\x37\x2e\x85\xd2\x0a\xeb\x97\xb0\x9b\x5c\x71\x3b\x6a\x2d\x8f\x3b\x76\xb2\x60\xb4\x30\x0b\x4c\xf0\x11\x52\x8c\xff\xcd\x94\x04\xba\x4c\xe1\xbe\x49\xed\x46\x5a\xf8\x3f\x7c\x12\xa0\x00\xeb\x1d\xea\x05\xa0\xd6\xb3\xe5\xef\x1f\x7b\xc7\xbd\x61\xd1\xfa\x0f\x59\xab\x71\x7d\x73\x33\x79\xc3\xcc\x8a\x48\xb7\xad\xf8\x9c\x2e\x88\x4e\x30\x35\x93\xaa\xdc\x03\xd9\xde\x0f\xd8\x7c\x0c\x55\x66\xf7\xe0\x8a\x59\x48\x9d\xb4\x96\xe4\x09\xee\x17\xac\x09\x4c\x4b\x6f\x85\x08\x96\xd9\x4d\xd0\x4d\x50\xf2\x55\x47\x2e\x26\xc7\xe4\x9f\xb2\x86\x8a\x17\x74\x5a\x2c\x1b\xb6\x7c\xcd\xd2\xb2\x0a\xec\xf3\xc2\x76\xe5\x85\xbd\x3e\xec\x86\xfc\x96\xd1\x9c\x29\x0d\xd2\x99\xd1\xc4\xfc\xc1\x1e\xcf\x7a\xd0\xb7\x5e\x97\xf2\xac\xd6\x46\x96\x64\xe1\x86\xdd\xe5\xd1\x74\x87\xf3\x18\x0e\xb0\x27\x53\x53\xac\x42\x09\xee\xfe\xe6\x8b\x93\xcf\x6b\xa2\x0b\xe7\xdd\x7d\x3e\x65\xda\x9a\x5c\xe1\xb4\xb9\xe8\x0f\xd2\x74\x09\x9c\x2c\x2c\xce\xd2\xd3\x5d\xd1\x43\xfe\x0c\xe9\x31\x87\x86\xa4\x31\x6c\xae\xbe\x08\x22\x61\xc9\x6f\xea\x2f\x2d\x87\xf4\x96\x7a\x42\x9e\x24\xfd\x84\x38\x68\xac\xdb\x7c\xe8\x6d\x8e\xf7\x93\x6f\x7a\x39\x6f\xcb\x73\x66\x54\x48\xc1\x33\x5a\xf0\x7f\xb3\x9c\xd4\x95\x14\x2e\xd7\x14\xd4\xda\x8c\x6a\x36\x06\xdc\xaf\x40\x71\xae\x03\xae\x47\x2b\x1d\x8c\x94\xa0\xeb\x35\xb5\x1a\xb1\xd7\xfd\x74\xb5\x57\xa8\x7f\x32\x71\x69\xf8\xac\xa1\x0d\x3a\x8b\xd5\xcf\x8e\x27\x9f\x85\x2e\x49\x30\x49\x38\x99\xa0\x62\x9d\x9e\x02\xeb\x51\x01\x9b\x25\x5e\x57\x20\x78\xb1\x72\xf3\xde\xdc\xdb\x56\x05\xdc\x37\xdd\x0b\x01\x19\x8a\x88\xba\x9c\x32\xd5\x72\xfb\x28\xb3\x3e\xa7\x89\x10\xfe\x4e\xb3\xd8\x9c\x8f\xc7\x7a\x1d\x83\x8a\x39\x23\xaf\x6c\xcb\x7f\xfa\xe3\x1f\xff\xf0\xc7\x1e\xda\xb1\xc3\x6b\x52\x03\x04\xb9\x38\xbd\x3c\xfd\xf9\xfa\xfb\x33\x20\x5b\x4d\x7d\x7d\x4f\x49\xe3\x7d\xa7\x8c\xf7\x9a\x30\xfe\xa4\xe9\xe2\xc0\xbd\x93\x2c\x65\xfb\x3e\x12\xd7\xd0\xab\xb0\x30\xb6\xb3\x49\x82\x52\x8e\x31\x85\xe7\xd7\x9f\x30\x6c\x67\x05\xd6\x5e\x48\x2a\x5d\x30\x56\xf5\x66\xee\x5f\xdb\xb7\xad\xa6\x38\xe4\xb5\x72\x45\xa1\x7d\xa0\xaa\xf5\xdb\xbb\x00\x15\xf4\x82\x4c\xd9\x4c\x2a\xe6\x6a\x59\xb6\x51\x86\x2f\xc8\x2d\xa0\x59\x26\x45\x9e\x62\x1c\xf4\xa5\xec\xba\x9e\xf4\x7a\x1a\xaf\xf1\x9d\xde\x73\xdc\x5e\x32\xae\x31\xb0\x31\xed\x4a\xf7\xb3\xf3\xfb\x91\xa0\xc8\x9b\x02\x6f\xfb\xd3\x7f\xc5\x07\xc9\xb2\xea\x5a\x66\xb7\x3d\x7a\xce\x12\x45\xdb\x6b\x7b\x06\x33\x8c\x07\xde\x9c\x4d\xb0\x73\x76\x65\x2e\xdf\xdf\xb4\x24\x49\x90\xd9\xd6\xd6\x23\xfd\xd6\x45\x0c\xa9\xc8\xc9\x2d\xab\xd2\xec\x4e\xcf\x75\xed\x11\x98\x5d\x00\x26\xb8\xe5\x11\x01\x49\x84\x44\x36\x02\x94\x12\x1e\x39\x89\x0a\x73\x1a\x3d\x7e\x10\xa5\x87\x88\xa0\xb3\x51\x66\x94\x17\x10\x0f\xaf\x85\xe1\x25\x73\x39\x7d\x59\xd5\x84\x4c\x43\xfc\xc4\x17\x24\x7e\xbe\x54\xaf\xe4\xc1\x7b\x8f\x2b\xdc\xda\xbb\x98\xca\x26\xf3\x65\x9b\x0b\x4e\x82\x23\x0d\xd7\x60\x2e\x6c\xf3\x0c\xe6\x42\xa4\xb9\x50\x29\x76\x6d\x64\xb4\x4e\xda\x1b\x04\x07\xbb\xf1\x08\x00\xc7\xa9\xaa\xf4\x51\x64\x8c\x4b\x3f\x48\xc0\x0a\x9f\x4e\x2e\x9a\x18\x99\xec\xa0\x5f\x30\x11\x5d\xd7\xd9\xc2\xc7\x52\x05\xd3\xfa\x44\x87\xd5\xc1\xe1\x8e\xab\x15\x8b\xc7\xfd\x54\x8a\xb1\x12\xe6\x71\xd4\xb2\x70\xd9\xe1\x32\x81\x1f\x32\x93\x61\x70\x3d\xb8\x35\xa1\xf6\xb4\x9b\xae\x59\x52\xcc\xbf\x9d\xd8\x4c\x51\xbd\x60\x50\x60\x84\x3d\x70\xa3\xb1\xd1\x09\x70\x55\xf9\x19\xb7\x8a\xc3\x5c\xd1\x8c\x91\x8a\x29\x2e\xad\xb2\x51\x0b\x93\xcb\x7b\x41\xa6\x6c\xce\x85\xf6\x2b\x96\xd2\x25\xbf\x25\x00\x5b\xc4\x75\x53\x48\xf2\x98\x5c\x75\xea\xab\x38\x56\xbe\x4c\xb6\x32\xd3\x4d\xd1\xa8\xa7\x29\x01\x2d\x06\xb6\x41\x4d\x8b\x62\xd9\x6e\x3c\x4f\x94\x60\x1e\x9f\xa1\xf8\x0d\x81\x33\x7b\x58\x0b\x18\x68\xce\x0a\xba\x44\x4a\x80\x19\x17\xe0\x25\x56\xfa\xe8\x38\x1d\xac\x15\xdd\x41\xa9\x82\x77\x3e\xba\x33\xb8\x26\x8a\xd1\x6c\x91\xa2\xd9\x0d\xa8\xb0\x8f\x3d\x03\x2a\x2c\xf2\x19\x50\x61\xdb\x3e\x03\x2a\x6c\xdb\x67\x40\x85\xed\x13\xea\x60\xff\x23\x79\x03\x2a\x6c\xf0\xbf\xac\x3c\x03\x2a\x2c\xea\x19\x50\x61\x1f\x7d\xf6\x4e\x3e\x0f\xa8\xb0\x4f\x78\x06\x54\xd8\x27\x3e\x03\x2a\x6c\x40\x85\x0d\xa8\xb0\x01\x15\x96\xf0\x0c\xa8\xb0\xed\x87\x37\x84\x79\xe2\x9f\x01\x15\x36\xa0\xc2\xb6\x7c\x06\x54\xd8\x27\x3f\x03\x2a\x6c\x40\x85\x7d\xe8\x19\x50\x61\x03\x2a\x6c\xe3\x33\x78\x25\xd7\x9e\x01\x15\xb6\xe1\x19\x50\x61\xdb\xb5\x33\x98\x0b\x69\x2f\xeb\xdd\x5c\xf0\x08\xa7\x89\x92\xd3\x9d\xb1\x6d\x4d\x00\x3d\xc2\x33\x07\xaf\x92\xb3\x0e\x83\x16\x76\x30\x92\x39\xab\x0b\xeb\x81\xc2\x23\x9e\x52\x89\xbb\xc3\xd5\x40\xba\x76\xc9\xce\xb5\x35\xee\xc5\xb3\x0e\xea\x93\x4a\xe2\xff\xb4\xa8\x97\x00\xee\x12\xed\x1b\xdf\x31\x5d\x58\x0a\xc6\xe5\x79\xf0\x2d\x7b\x02\x06\xea\x01\xd3\xd2\xe7\x25\xb6\xa7\x58\x96\xfd\xc4\xb1\xec\x23\x86\x65\x17\xf8\x95\x9d\x63\x57\xfa\x89\x8b\xf6\x10\x13\xed\x49\x55\x78\x82\xf8\x82\xc3\x3c\xdf\x2c\x14\xd3\x0b\x59\x44\x0b\x9c\xbe\x84\xcd\x3b\x2e\x78\x59\x97\xf6\xec\x6a\x2b\x53\xf8\x5d\x83\xcb\xd6\x8d\x25\x8c\x77\x3b\x86\x8c\xed\x0f\x79\xce\xa0\xd2\x39\xe5\x85\xdd\x5a\xc0\xf4\xb8\xa0\x77\x56\xde\xe8\x3a\xcb\x18\xcb\x53\xac\xcf\xd0\xdd\xf8\x87\xe3\xa6\x87\xc8\x49\xcf\x35\x79\x95\x76\xd5\xa4\x29\xa4\x81\xd7\xe5\x0f\xbf\x8f\x7a\xc7\x5c\x55\xfd\x5c\xc9\x6f\xae\x26\x67\xc1\x95\x4c\x85\xbf\x91\xb9\xb8\x93\x05\xac\x06\xc5\x1f\x59\xc3\x67\x87\xf7\x73\xba\x17\x20\xc9\x03\xd0\x87\x7a\x90\x6a\xe4\x76\x43\x81\xd6\x0e\xed\x46\xb2\xe6\xb0\x96\x4c\xdd\xf1\x8c\x1d\x3f\x83\x1d\xd9\x97\x6d\x96\x7e\x1c\x08\xf8\x74\x61\xe0\xfb\xa2\x7c\x5d\x63\x77\x1a\x77\x70\xe0\x42\x70\x3d\x05\xec\x5f\x41\xb3\x66\x6d\x60\xfd\xbe\x85\x1b\xf4\x6c\xc1\xb2\xdb\x2b\x84\x21\x25\x75\xe3\x50\x33\xb6\xa9\x2a\x83\x15\x20\xf8\x3f\xd3\x42\x4e\x4f\x4a\xaa\x0d\x53\xd6\xac\x71\x97\xfb\x38\xb3\x3d\xe0\x62\x7e\x5c\xe6\x47\xc7\xff\xf1\x1f\x49\x9d\xb8\x70\x4e\x4d\x97\x38\x13\x50\x76\x43\x84\xc4\xf1\xc1\x4f\x99\x15\xff\x12\xfc\x8f\x41\x1d\x46\x3b\x2b\xe9\xbb\x34\xe1\x1a\x4f\x44\x85\x3e\x3f\x22\x74\x90\xb6\xa4\x07\x3f\x6b\x9f\xc2\x60\x3f\x50\x9f\x4f\x86\xf8\xec\x45\x53\xee\x09\xe9\xb9\x47\x28\xcf\xbd\xb1\x64\xf6\x05\xd9\xd9\x1b\xaa\xb3\x2f\x44\x67\x2f\x68\xce\x3e\x90\x9c\xfd\xa1\x38\xfb\x41\x70\xf6\x8f\xde\x7c\x32\xe4\xe6\x67\x81\xda\xec\x31\xec\xd0\x13\x5a\xf3\x39\x90\x9a\xfb\xeb\x41\x21\x3d\xa0\x33\x9f\x0f\x99\xd9\xcb\x3c\xf6\x6a\x7d\x26\x8a\x84\x1d\x20\x31\x9f\x23\xac\xfa\x64\x21\xd5\x1e\xc2\xa9\x7d\x86\x52\x7b\x0b\xa3\x3e\x19\xe2\x32\x1d\x6d\xd9\xab\x2f\xe0\x59\x50\x96\x7d\x22\x2c\x93\xd7\x97\x0b\x6e\x38\x2d\x5e\xb3\x82\x2e\xaf\xd3\xd0\x76\x7d\xad\xc4\xe5\x1a\x22\x0f\x9d\xce\x5d\x4c\xe6\x82\x6a\xe2\xa3\xd2\x0e\x92\xe9\xc3\xde\x4e\x05\x06\xd4\x16\x8e\x2f\x09\x9f\xb9\x67\x41\x66\xb2\x37\xce\x6d\x24\xb0\xd8\x93\x5d\xf3\xad\xbc\x27\x72\x66\x98\x20\x87\x5c\xf8\x9d\x73\x14\x78\x69\xda\xe0\x46\x72\xb4\xc2\xbe\xf5\xd5\x4b\xdf\xc8\x97\x17\xb5\x80\xb8\x8e\xd6\x7b\x1d\xb7\x72\x7d\xfc\x78\xe0\xca\xfd\x70\x56\x17\xdd\xe0\x15\x06\xb4\xfa\x89\x5c\xbd\x6a\x6b\x95\xbf\x82\xfe\x34\xa2\x88\x8a\x9c\x38\x22\xa4\x2f\x6f\x9f\x24\xe3\x89\xbb\xc6\x4d\x03\x00\xfe\x58\x9c\xeb\xe6\x6c\x32\x84\xb9\xf6\xcb\xf1\xba\x23\x70\xeb\x97\x67\x71\x3d\x3f\x98\x75\xb0\xb8\x7e\x2d\x16\x57\xc0\x41\xf6\x46\xd1\x8c\x4d\xf6\x49\x81\xf3\x02\xa4\xcd\xc4\x6a\xf5\xb8\x46\x5c\x08\xc6\x30\x43\xa7\x65\x98\x03\x32\xb5\x59\x5d\x14\x4b\xf4\x23\x76\xe8\x06\xe3\xb7\xd6\xcd\x82\xad\xf1\xb4\x75\xf2\xc4\x82\xde\xb5\xf6\x49\xa5\xa4\xd3\x4a\x54\x2d\x84\xbd\xad\xdc\x71\xb2\x9d\xb7\xf6\x88\x66\x22\xde\xa5\x4e\x3b\x2c\x72\x9a\xcf\xed\x74\x59\x0d\x03\x08\xe6\xda\x1c\x91\x4e\x47\x6c\xab\x33\xa9\x32\x3e\x2d\x96\x64\x41\x0b\x6b\x30\xdd\x73\xb3\x20\x94\xdc\xf2\xa2\x70\xaf\x89\x9f\xa8\x6b\x66\x30\x6a\x8c\x5a\x4d\x21\xc5\x1c\x26\x83\x62\x47\xd8\x43\xc5\x32\xdb\x66\x56\x30\x2a\xea\x0a\xfb\x69\x75\xa4\xa5\xac\x95\xef\x67\x7c\xf3\x3e\x66\xdd\xe8\x54\x82\x17\x23\x3f\xe5\x5d\xbe\xc1\xf5\x3d\xdf\xba\x95\x35\xcb\x1d\x55\xe0\x3d\xd7\x6c\x04\xef\x8c\xee\x13\xf6\xc5\x17\x4d\xc7\x7d\x83\x9f\x55\x4a\xde\xf1\x1c\x03\xe6\x7e\x5b\x58\x6d\x27\x7e\xfc\xdf\xc3\x7b\xbd\x68\x15\x52\x8c\x05\x9b\x53\x50\x91\x9d\x40\x43\x4c\x26\xb6\x8f\x08\x40\x91\xf3\x8c\x1a\x66\x0d\x68\x59\x75\x78\x44\xef\x38\x8d\xee\x89\x1d\x4f\xb0\xa3\xc8\xa1\x90\x44\x42\x0a\x57\x2d\xb8\x59\x42\x54\x6f\x51\x1b\x92\xcb\x7b\x71\x94\x72\x30\x11\xa1\x40\xc9\x94\x19\xda\x26\x60\x79\x95\x4c\x13\x26\xe8\xb4\xb0\x67\x0f\x00\xfa\x37\x1b\x37\x00\x99\x31\x6a\x6a\xc5\xc8\x9c\x9a\x04\x29\xb1\x41\xa3\xc7\xf5\xfc\xf0\xb6\xe3\xda\xc5\xec\x66\xa4\x16\x9a\x25\x2a\xb2\xbd\x99\x01\x91\xa9\x85\xf6\x44\xcb\xda\xec\xc9\x3d\xf2\x98\xfb\xe8\x7e\xc1\xb3\x45\x68\x28\xf2\x92\x69\x22\xeb\x04\x6f\x5e\xc7\x04\x74\xcd\xf5\x69\xe5\x0d\xbe\xa7\x8d\x4f\x6c\xe8\xb4\x8f\x1d\x76\x19\x68\xe5\x41\x82\xb8\x47\x4a\x61\xaa\xea\xeb\xcb\xeb\x9f\xdf\x9e\xfe\xf7\xf9\xdb\xb8\x85\x3f\xa7\xd9\x22\x24\x72\x16\x84\xc2\x45\x01\x42\x7e\x41\xef\x18\xa1\xa4\x16\xfc\x5f\xb5\x83\xab\x1d\x36\xed\x45\x8a\xd5\x1e\x6b\xe5\x47\x2a\xbe\xf6\x96\x88\x92\x1c\x7d\xac\xe9\x5b\xae\x81\x15\x18\x3a\xe1\xa0\xfb\x52\x33\x32\x53\xb2\x5c\x31\xb4\xc8\x65\x83\x8b\x5b\xa2\x2f\x02\x4c\xb3\x05\x53\x71\x1a\xf9\xeb\xf7\xe7\xd7\x90\xec\x5c\x29\x64\xd1\x86\xf4\x00\x78\x27\xb4\x8e\x2c\x03\xd8\x9f\xfc\x98\x9c\x8a\x25\x7e\x89\xc2\x2c\x52\x45\x29\xb8\x36\x0c\x94\x53\x67\x48\x7a\x64\xdf\x8b\x97\xc7\xf0\x7f\x2f\x08\xcd\x73\x65\x2d\xcd\x26\xcb\x22\x5b\x4d\x0a\x8b\x6a\x19\xed\x57\x3e\x2d\x82\xc9\x15\xcc\x40\x22\x46\xd4\x0b\xdf\xc9\xdc\xad\x04\x28\x81\x80\xe1\x41\xed\x56\x1b\x45\x0d\x9b\xf3\x8c\x94\x4c\xcd\x19\xa9\xa8\xc9\x16\xa4\xa4\x4b\x92\x49\xa5\xea\x0a\x39\x1e\x72\x6a\x68\x5c\xcb\xdf\x48\x45\x4a\x2f\x9d\xad\x34\xb3\x2a\xf9\xf5\x66\x10\x67\x2b\xb2\xc3\xff\xe4\x5a\xd7\x4c\x9f\xbc\x7a\xf9\xe7\xdf\xff\x31\xd2\xbc\xee\xf1\xe0\xc6\xc2\x9f\x12\x60\x4f\x5d\x08\x98\xdf\x60\x00\x98\x0e\xc8\x39\xa8\xdf\x21\xb8\xf3\x41\x1a\x6a\x2e\xe6\x45\xb2\x03\x24\xd9\x0d\x98\xea\x04\x1c\xb7\x23\x98\xc4\xfa\x02\xd3\x3d\x81\x9d\x3e\xc4\xbb\x52\xfa\xf3\x82\xb5\x1a\x9c\xf7\x7b\x39\x81\x2c\x45\x60\xd8\x5d\x4c\xbc\x94\x4a\xf1\x1f\x81\x35\xd1\x38\xa6\x90\xe1\x01\x9b\x45\xcc\xc3\x88\xbc\x24\x7f\x25\x0f\xe4\xaf\xe0\x05\xfb\x53\x7c\x53\xfd\xf8\x98\xfa\x80\xe0\x2f\xa4\x36\x17\x93\x9e\x16\xfa\x1f\xf6\xbe\xb2\x6f\xb4\xeb\x61\x24\x99\x72\xe7\x8e\x60\x0f\x86\x29\x6b\x06\xba\x35\x4c\x9d\xb9\x24\x8f\x9a\xed\xe0\xe7\xb2\xbb\x53\x01\x06\x17\xb3\x2e\x70\xff\x99\xf6\x37\x34\xfc\xad\xd4\xe6\xd2\x49\xeb\x90\x9d\x24\xec\x47\x09\x17\x71\x47\xdc\xa7\xb4\xfa\xce\xee\xbd\xb6\xa0\x01\xc9\x25\xe4\x2e\x60\x16\xe6\x82\x27\x08\x87\xfd\x39\xb1\x69\x58\xd1\xfe\xb6\xee\x87\xb6\xd6\x8a\x4f\x1f\x3c\x32\xce\x48\x09\x6a\x80\x54\x32\x3f\x06\xfb\x26\xa1\x17\x76\x36\xf2\x40\x19\xf8\x80\x69\x74\x8c\xf6\x5a\x13\x21\x86\x03\x67\x25\x56\x46\x45\xac\x0e\x8b\x8f\x62\x33\xa6\x14\x66\xfa\x4e\x97\x3e\x55\x28\x79\xb7\x25\x49\xb9\x4a\x49\x23\x33\x59\xec\xc3\x56\x99\xb8\xbe\xc0\xdc\x43\xac\xb6\x89\x90\x7f\xf7\x7a\x32\x22\x37\x67\x93\x11\x91\x8a\x5c\x9f\xa5\x01\xa0\x42\x17\xcc\x8b\x9b\xb3\xc9\x8b\x9d\xae\x00\xf1\xa6\x14\x44\xb3\x23\x5e\xb2\x0e\xa1\x2d\x69\x35\xbe\x65\xcb\x48\xed\xae\x0f\x0d\x73\xdc\x6c\xac\x5e\x06\x84\xd3\x5c\xd2\x6a\xeb\xb7\x29\x46\x73\xbe\xd7\xc4\x2b\x3e\x63\xb0\xe9\x69\x7f\x0c\x2c\xa5\xbc\x63\x39\x5a\xcd\xbe\x15\x26\xf2\x4a\x72\x6b\x23\x0d\xb4\x2c\x1f\x7a\x06\x5a\x96\x8f\x3c\x03\x2d\xcb\xa6\x67\xa0\x65\xd9\xe2\x19\x68\x59\xf0\x19\x68\x59\xba\x1d\xd9\xc7\xa4\xa2\x81\x96\xe5\xa3\xcf\x40\xcb\xf2\xe8\x33\xd0\xb2\x44\x3c\x03\x2d\xcb\xfa\x33\xd0\xb2\x7c\xe0\x19\x68\x59\xda\x67\xa0\x65\x19\x68\x59\xb6\x7a\xf6\x2e\x3b\x60\xa0\x65\xf9\xd0\x33\xd0\xb2\x6c\x7c\xf6\xc6\x92\x19\x68\x59\x1e\x79\x06\x5a\x96\x47\x9e\x81\x96\x65\xa0\x65\x19\x68\x59\x3e\xfc\x0c\xb4\x2c\xd1\xcf\x40\xcb\xb2\xdd\x33\x24\x09\x6e\xf9\x0c\xb4\x2c\x03\x2d\xcb\xea\x33\xd0\xb2\x7c\xf4\xd9\x0f\xe7\xf6\x40\xcb\x32\xd0\xb2\x7c\xf0\x19\x68\x59\x06\x5a\x96\x0f\x3e\x03\x2d\xcb\x97\xe2\x78\x1d\x68\x59\x06\x5a\x96\x0f\xb5\x31\x58\x5c\xdb\x3d\x03\x2d\xcb\x40\xcb\xb2\xf6\x0c\xb4\x2c\xeb\xcf\x40\xcb\x32\xd0\xb2\x0c\xb4\x2c\x03\x2d\x4b\xf3\x0c\xb4\x2c\x5f\xba\xef\x49\x31\xcd\xff\xcd\x26\xb2\xe0\xd9\x32\x39\x39\xe7\x8a\x69\x59\xab\xcc\xde\xd8\xf0\x5a\x52\xc1\x7b\x1b\xaf\x42\x92\x92\xbd\x67\x8c\x07\x57\xc1\xc4\x85\xcc\x07\xca\xcd\xc1\x53\x4c\xc1\x5e\xb0\x1f\xf8\x01\x5e\xc6\xa3\x08\xc6\xbe\x38\x35\x4e\x5f\x9c\xc3\x34\xd9\x6a\x0f\x07\xb2\x0f\xd9\x97\x21\x4b\x51\xb3\x8b\x8c\x6c\x84\x2d\x7f\x74\x73\xd1\xaa\x2a\x78\x4a\x1e\x2b\x21\xd7\x35\x68\x17\xcc\x85\xc1\xf5\x57\x24\xab\xea\x11\x29\x59\x29\x55\x42\x6a\x43\x0f\x16\x5c\x67\xab\xec\xc3\x3a\x5d\x61\x87\xfc\xe4\x1b\x09\xf3\xbf\x44\x7b\xa1\x25\x95\x6a\xd6\x8a\x7b\x71\x98\x84\x37\xbb\x98\xad\xe2\x48\xb9\xe9\x78\x81\x2e\xa5\xb9\x72\x87\x7b\x67\xeb\xd5\x33\x6a\xc1\x4f\xe1\xce\x48\xa6\xce\x64\x59\xd5\x86\x75\x2e\x36\x9c\x62\x34\x3a\xb8\x4e\x15\xe8\xbb\x49\xde\xcc\xa4\x98\xf1\xb9\xb3\xbe\x4f\x4a\x2a\xe8\x9c\x8d\x9b\xd9\x1e\xb7\xcc\x0c\x27\xd1\x17\xf5\xce\x32\x37\xb3\x82\xf2\x78\xf0\x60\x5f\x62\xe2\x0c\x7a\x01\xac\x5d\x2d\x18\x1e\xb2\xcb\x9a\x69\x1e\x35\x88\x6f\x8e\x72\xe3\xd8\x7f\x85\x7f\x3c\x4a\xb0\x1e\xa9\x01\x5f\x05\x18\x46\x1b\x76\x6a\x3c\xb4\xbd\xb1\x18\x05\xa1\x45\xb5\xf8\xb0\xcd\x98\x92\x35\xf9\x7a\x29\x68\xc9\x33\x7f\xf2\x4e\x8b\x42\x66\xe8\xab\xe9\x5a\x9b\x89\x43\xc1\xee\xdb\x31\x95\x65\x6d\xe8\xb4\x60\xc7\xe4\x02\xa9\x26\xa4\x28\x96\xf6\x60\x6a\x66\x3c\x7e\xc1\x9d\x8a\x34\x13\x33\x05\x1c\x9b\x08\x8c\xdd\xa8\xad\xc3\x6e\x43\x6e\x0c\x26\xac\x8c\x93\x82\x11\x26\x8c\x5a\xda\x8d\x39\x91\xf9\xb5\xdd\x9b\x9d\x5f\x27\x53\x66\x24\xe2\x61\xfb\xc0\xc2\x26\xe2\x60\xfb\x41\xaf\xa6\x23\x57\xfb\x45\xad\xb6\xb1\x05\x64\xfc\x09\xd3\x78\x3a\xdb\xa2\x92\xf9\xf1\x06\x99\x45\xe4\x2c\xb1\x07\xb6\xc5\x89\xcc\xad\x36\xa5\x18\x0a\xae\xe6\x8c\xa2\x67\xf1\xc2\x76\xee\x16\x5c\x81\xd4\xb4\x6a\x16\xbd\xa3\xbc\xb0\x07\x38\xb1\x03\xeb\xec\x89\x69\xe1\x9a\x1e\x54\xe0\xbe\x09\x46\x48\xea\xf6\xef\x93\x20\x84\x00\xb9\x65\xc9\xe3\xa8\x44\x49\x8f\x47\xe0\x2d\xf4\x22\xc8\x10\xb0\x7b\xb1\xa4\x0f\xe0\x81\xa2\xa5\xac\x85\x41\xe6\x10\x54\x0a\x9b\x8b\x1c\xf3\x28\x9e\x11\x16\xf5\xa4\xea\x1b\xe9\x47\x48\xd3\xdc\xf3\x07\x4c\xfa\x48\x23\xa5\xc6\x30\x25\xbe\x22\xff\x73\xf8\xe3\xef\x7e\x19\x1f\x7d\x7d\x78\xf8\xc3\xcb\xf1\x5f\x7e\xfa\xdd\xe1\x8f\xc7\xf0\x1f\xff\x79\xf4\xf5\xd1\x2f\xfe\x1f\xbf\x3b\x3a\x3a\x3c\xfc\xe1\xef\xef\xde\xdc\x4c\xce\x7f\xe2\x47\xbf\xfc\x20\xea\xf2\x16\xff\xf5\xcb\xe1\x0f\xec\xfc\xa7\x4f\x7c\xc9\xd1\xd1\xd7\xbf\x8d\x0f\x30\xa5\x46\x53\xfb\x8b\xa5\xf6\x14\x49\x7d\x92\x38\xaa\xcb\x48\xda\xf9\xe1\x77\x89\xa7\x6b\xc7\xdf\x39\xa0\x3f\x74\xfc\x55\xb2\xd9\x7d\x31\x6b\xdb\xe7\x9a\xc8\x92\x1b\xc3\x72\xd0\x3a\x69\x48\x50\xb2\x62\xf2\x3b\x81\x05\x44\x42\xd4\xd8\xbf\x0c\x88\x32\x5a\x4f\x41\x74\xb7\xa4\x8f\xe1\x81\x93\x43\x10\x5e\x56\x05\x2b\x99\x30\x20\x78\xc6\xde\x7c\x01\x8f\xd1\x71\x3b\x82\x0c\x6d\x5a\xf6\x90\x31\x96\xbb\x4e\x0e\xb2\x31\x78\x06\xd9\x38\xc8\xc6\x8f\x3d\xc9\x6e\xcf\x3e\x04\xe3\x55\xd8\x09\xe7\xae\xd0\xde\x41\x0d\x4e\xd0\x26\x81\x5d\xce\x20\x16\x7e\xc7\xf3\x9a\x16\x21\xb7\xa7\xa7\x7b\x8c\x93\x00\x81\x91\x5e\xd2\xe5\x9a\x4d\xce\x05\x0f\x89\x44\x47\x0d\x82\x03\x7e\xe8\xf4\xb2\x36\x7a\xf8\xe2\xb4\xb8\xa7\x4b\x1d\xc9\x37\xf8\x8d\x54\x00\x0a\x58\x69\x94\x48\xe5\xb1\x22\xa1\xb1\xd2\xf5\xd6\xc6\x45\x7b\x36\x4d\x74\x97\x29\xc0\x99\x4b\x07\xba\xf9\xa1\x8f\x09\xb8\x89\x68\x51\xfe\x76\x9f\xc7\x0d\xfc\x9a\x19\xe3\xfc\x39\x2b\x5b\x82\xb6\x73\xda\x84\xb8\xba\xd3\x83\xb0\x10\x60\xf9\xb4\x5f\xce\xa4\x5d\x13\xe0\xc7\x9f\xcd\x58\x16\x89\x15\x44\x66\x85\x0d\xed\x20\x5c\xd9\x70\x51\xd3\xa2\x58\xfa\x39\x61\x39\x91\x22\xaa\x21\xf6\xc0\x0d\xa9\x85\xe1\x85\xdd\x4c\x44\xb1\x79\x5d\xd0\xd0\x15\xe4\x46\xe6\x11\x54\xf9\x31\x79\x2f\xac\x31\xda\xfe\x38\xce\x89\xb9\xd2\x80\x55\x3a\x0a\x66\x58\x3e\x82\x57\xaf\xee\x40\xc0\x20\x75\x24\x46\xb3\x2c\x51\xcd\xfb\xb9\x6c\x30\x26\xc7\x78\x10\x9b\x00\x38\xc9\xf9\x6c\x66\x5b\x06\x6e\x43\x21\x55\x49\xd7\x7b\x45\x45\x1e\xd5\xba\xd5\x80\x20\xfb\x20\xe4\x6b\x85\x1a\x1d\x2f\xac\x69\x9e\x51\xf5\x22\xac\xee\x70\x5a\x98\x85\xac\xe7\x8b\x76\x57\xa4\x4d\x39\xd1\x06\x90\x37\x76\x32\xb5\xc7\x9c\xad\x6c\x36\x6d\x75\x1d\x91\x31\x54\xc9\x24\xc3\xe3\x7e\x4f\x23\xdb\x5e\x8b\x0e\x23\xdc\x17\xd7\xdc\xa7\xe4\x00\xbc\x8b\xe5\x41\xfe\x94\x60\x0f\xa6\x87\x01\x1f\x93\x0b\xe4\x43\x18\x75\xdf\xda\x99\x12\x9c\x8c\x00\xde\xe4\x81\x7a\x91\xd8\xae\x95\x06\x78\x93\x81\x04\x0c\xb3\xf8\x72\x2a\x96\x1e\xf0\x0f\xf0\x23\x4c\x54\x6a\x72\x10\x8a\x38\x2f\x6a\x73\x96\x9e\xbd\x60\x8a\x66\x59\xad\xb8\x59\x9e\x49\x61\xd8\x43\x94\xec\xeb\xe3\x56\xbf\xee\x76\xa3\x73\xaf\xfb\x2e\x12\x59\x21\xd3\xdf\x4a\xcd\x9c\x85\xac\x8b\x1c\xc8\x4d\x6b\x01\x62\x27\xee\x46\xb9\x98\xd9\x2b\x1c\xf7\x1b\xdc\x98\x10\x1a\x59\xed\x98\x47\xfd\x21\xf8\xf1\x5f\x35\xbf\xa3\x05\x13\x26\xf8\x8b\x09\xe0\xc0\xc2\x3f\x7a\xca\xf8\x99\xa1\xfa\xb6\xb5\x30\xd8\xb8\x92\x79\x6b\x50\x9c\xf8\xa9\x83\x8f\xd8\x83\xf9\x0c\x63\x67\xa0\x30\x4d\x14\xbf\xe3\x05\x9b\xb3\x73\x9d\xd1\x02\xec\xa8\x5d\x1b\xe7\xa7\x8f\xf4\x0b\x76\xa6\x92\x85\xb6\x0a\x98\x35\x56\xad\xaa\x89\x28\x58\x08\xe1\xcc\x29\x17\x50\xf0\x25\xc1\xcd\xef\x1a\xd5\x08\xc3\xb5\xf6\x76\x45\x95\xdd\x85\x1e\x6e\x8b\x57\xe3\x54\xca\xc2\x91\x86\x16\xcb\xb6\x5f\x3c\xde\x1f\x0e\xb2\x58\xfe\x2c\xd8\xfd\xcf\xb6\x17\x9a\xcc\x0a\x3a\x6f\xaf\x66\x66\xd6\x72\x17\xd2\x11\xc0\x8f\x4e\x34\x30\x62\xd6\x56\xb1\xb1\x5a\x45\x8b\x8d\x0e\x25\x78\xbc\x41\xf7\xea\x08\xe4\x09\xd5\xa4\x69\x3b\x4e\x75\xb0\xcf\xef\x8f\xe0\x9e\x38\x3b\x9d\xfc\x7c\xfd\xcf\xeb\x9f\x4f\x5f\xbf\xbb\xb8\x8c\x47\x40\x4a\xc3\xd0\xbb\x12\x68\xf7\x59\x13\xb4\xb7\xab\xd0\xe0\x3e\x8e\xa5\x3e\x86\x60\x09\x90\x73\x88\x5c\xde\x27\x46\x0a\xed\x9e\x62\x34\x4e\x73\xa5\x55\x75\xaa\x4a\xa9\x26\x4a\xce\x78\x11\x1d\x64\xea\xeb\x04\xaf\x74\xc7\x67\x00\x9c\xba\x8f\xdb\xeb\x06\xf3\xc5\xd7\x63\xd6\xc1\x95\xc1\x21\x2b\xd9\xbe\x26\xde\xb3\xd5\xc1\x93\x23\xba\x7d\xa5\x8b\xf1\x87\x68\xa7\x7b\x66\xe7\x99\x78\xb6\x1b\x91\x7f\xde\x47\x4c\xb5\x90\x19\x2d\xa0\x74\x4c\xda\xc6\x27\x3d\xc7\x56\x57\xfb\x15\x64\x0e\x50\xbf\x9d\x49\x21\x69\x0e\xc6\xaa\x13\xfe\x39\xf3\x1c\xc7\x5e\xed\x82\x10\x68\x52\x47\x6e\x10\xb5\x0d\xed\xf9\x54\x87\x4a\xb1\x46\xab\x59\x69\x5e\x92\xf8\x42\x6f\xfe\x79\xd7\x0d\x28\xbb\x51\x76\x92\xf2\x52\xcf\x5c\xd3\x8c\x3b\x60\x7c\x06\x1e\x10\x70\x03\xf1\x19\x6c\x4a\x70\x00\xbd\xf5\xcb\x90\x50\x73\xa2\xa7\x54\x49\x78\xc9\x9e\xec\x4e\x9c\x9f\x66\x47\x22\xe4\xf4\x96\xdb\x19\x9c\xb5\x42\xda\x6f\x1b\xaf\x83\x20\xee\x34\x71\x3f\x7e\x0f\xd5\x8d\xbc\xfc\xa7\x2a\x99\xe7\xa9\x59\x62\x32\x0e\x8e\x56\xa5\xd8\x78\xfd\x78\xa5\xb2\x5c\x5d\xd5\xc2\xf0\x92\x79\x2e\x83\xf1\x8a\x4e\xa4\xf0\xeb\x03\xdd\x10\x7e\xf6\xb2\xd1\x09\xf9\x4e\xc0\x79\x15\x2c\x27\x63\x22\x64\xbb\x44\x4c\xcc\xa4\xca\x20\x48\xb3\xd3\x0d\x9e\xd1\x8a\x4e\x79\xc1\x53\x84\x79\x5f\x1b\x1c\x68\xf4\x83\xfe\x80\x3b\x29\xcf\x4f\x72\x25\x2b\xbc\x89\x7d\x82\x61\x3a\xc4\xab\x9b\xc8\x12\x52\xbd\x82\xc2\x3e\xeb\x76\x64\xae\xa8\x30\xad\x23\x77\x6d\xe3\xfc\x1a\x75\x90\x3e\x94\x00\x9a\xf7\x57\x90\xe2\x34\xb7\x32\x23\x5c\xb6\xe4\x73\xb5\x6f\xf4\x98\x67\x7e\x70\x41\x26\x0b\x99\xbc\xbf\xbe\xf8\xbf\x2b\xe7\x26\x5e\xb5\xc3\x67\xbf\xc9\xf1\xac\x3c\xe8\x6d\xdb\x5c\xb9\xe2\x3f\xc3\xc6\xf9\xb2\x37\x4e\xe3\x20\xda\x39\xb3\xcf\x55\x2d\xba\x05\xc8\xdb\xae\x91\x32\x49\xd7\x99\x34\x09\xf0\xdd\xb7\x86\xb1\x1e\xc5\x88\xfd\x89\x30\x1c\x22\x6f\x81\xb7\xd6\x48\x2c\x79\xd3\x4b\xa9\xcc\xf0\x76\x9d\xd1\x42\x7f\xae\x57\x64\x8a\x6b\xa7\x52\x32\x7b\x27\x6b\xd1\x0f\x55\x50\xc2\x8e\x6b\x3a\x42\x72\x26\xa4\x71\xde\x14\xb0\x25\xe4\x0c\xbe\x25\x08\x9b\x0a\x58\x00\x3b\x7a\x4e\x82\x9a\x75\x13\xa8\x56\x5c\xfb\x7d\x31\x69\x7a\x84\x26\x4c\xad\xd9\x6a\x08\xc3\xa9\x56\x2d\x90\x6a\x26\xe3\xf1\x23\x8a\xd1\x1c\x6c\xcc\x8a\x9a\x05\x32\x54\x95\x54\xdf\xb2\x1c\x3f\x48\xcc\xcc\x6f\x32\x2a\x20\xca\xef\x87\x76\x63\xe7\xd7\x27\x41\x80\x4f\x18\x79\xba\x20\xed\x22\xc5\x1a\xdb\xe9\x81\x48\x90\xed\x76\x11\xde\x8b\x62\x79\x25\xa5\xf9\xa6\x29\x9f\xb5\xeb\xc3\xf1\x0f\x17\x91\xe8\xfa\x31\xc1\x35\x4d\xa1\xcb\x63\xd8\x38\x20\x1a\x83\xa2\x5f\xa9\x92\xd1\x2e\xc8\xaf\x55\x30\xaa\x5a\x9c\xea\x37\x4a\xd6\xd1\x6a\x5c\x9f\x26\xe7\x9b\x8b\xd7\x70\xf7\xd5\x8e\xbc\x45\x18\xb5\x84\xd2\x8f\xde\xe9\xd5\x63\xdc\xe6\x3b\x47\x93\x13\x4a\xb6\x64\x46\x0c\x42\xde\xd1\x25\xa1\x85\x96\x8d\x57\x4d\x6c\x8a\xb8\xfa\x70\xae\xfd\x7a\x2a\xcd\x62\x2d\x8e\x1b\x0b\x04\xb1\xcf\x7a\x7b\xa3\x80\x03\xa6\x4d\xb7\xe5\x62\xad\x59\x03\x59\x22\x95\x62\x19\xcb\x99\xc8\x3e\xd7\x13\xb1\x6b\x4a\x12\x38\x55\x97\x52\x58\xf1\xba\xeb\x73\x75\xd1\xb8\x28\xdd\x6a\x84\xa7\x08\xbc\xd9\x2e\x8e\x48\x01\xa9\x07\xc2\xb5\xd6\x29\x29\x3c\x17\x33\x08\x7c\xe2\xa6\xfb\x7b\x3d\x65\x85\x5d\x6c\x5e\x14\x58\x96\x9d\x1a\x44\x27\xf0\x92\xce\x19\xa1\xa6\x39\x84\x46\x12\x26\x74\xad\xdc\xbe\x89\xc4\xe8\xd8\xa7\x81\x17\xb9\xa1\x7d\x77\xf1\x9a\xbc\x24\x87\x76\x6c\x47\xa0\x71\xcc\x28\x2f\x80\x11\x08\xf0\x7f\x2b\x51\xd9\x99\x47\x28\x25\x4d\x01\xc8\x11\x22\x15\x5e\x2d\x23\x22\x24\xd1\x75\xb6\xf0\x73\xc0\xa5\x68\x9c\xc2\x8e\x22\x36\x29\x1d\x66\x10\x3b\xfd\xdd\x87\xdf\x69\xa6\x76\x7d\x6c\xed\x75\xf8\xdd\x33\x5e\x87\xa1\x95\x68\x8f\x7f\x77\xc1\xf0\xac\x96\xcc\xd0\x9c\x1a\xea\xae\x49\xff\x83\x61\xd7\x0e\x97\x65\xc2\x65\xa9\xd9\x5b\x2e\xea\x07\x24\x60\xdc\x8b\xc8\xc7\xf5\x39\xf4\x88\x64\x7e\xa1\x65\x10\xba\xf3\x41\x8a\x1e\x72\x5d\x2f\x3a\xc7\x68\xf4\x88\xd5\x0d\xb7\x04\xc5\x64\x7e\x66\x0d\x21\x2a\x72\x59\xae\x75\x72\x26\x15\x61\x34\x5b\x44\xf7\x26\x00\x8e\x0c\x07\xd3\x3d\xbf\xee\x98\x50\xc1\xee\x58\xd1\x9b\x7b\xff\xad\x7d\x9b\x9d\x1c\xbf\x73\xe1\xf5\xa4\xa0\x53\x56\x38\xfe\x0d\x24\x65\xea\xf1\x84\xf5\xe4\x06\x57\xb2\x47\x54\xcc\x95\x44\x30\x17\x6d\x26\xc2\xbe\xfe\xb3\x98\x87\x5e\xf1\x17\x37\x0e\x60\xd2\xce\x03\xb8\x41\x3f\x87\x79\xa8\x13\x14\x44\xb2\x3a\x0f\x56\xdb\xec\xce\x03\xe8\x5f\xfb\x3e\x0f\x9a\x65\x99\x2c\xab\x3d\x01\x4b\xde\x20\x10\xdf\xf6\xe8\x53\x81\x91\xdd\x1f\xd3\x24\xc4\xb3\xa3\xd5\xa5\x06\xef\x41\xcf\xad\xfb\x7f\x82\xeb\x1c\xa4\xdd\xea\x1d\xef\x5a\x4f\x06\x65\x36\x2d\xba\x17\xfe\x1a\x6f\xbc\x01\x89\xd9\x79\x9e\x1d\x89\x19\x50\x73\x51\x70\xcf\x77\x50\x91\x5f\x02\x1e\xd3\x1a\x01\x30\xaf\x4c\x40\x4e\x59\x45\xcd\x62\x44\x14\x2b\x90\xf0\xda\x89\xe7\x5b\xf4\x78\x1d\x80\xc4\xf1\x1d\xf2\xe2\xa6\x85\xad\x22\x35\x57\xaf\xf0\xcd\x4d\x90\x4d\xfc\xcd\xe5\xfb\x9b\x30\x07\x98\x8a\x25\x32\x15\x24\x64\xb8\xe2\xb3\x7f\x6a\xc5\x53\xc2\x3a\x57\x57\xf1\xa9\x51\x9d\x69\xf5\xd4\x37\xa3\x3a\x9f\xef\x98\x7e\x1a\xd2\x73\x15\xe7\xd9\x6b\x17\x56\x41\x9f\xeb\x6d\xf4\xb0\x74\xc9\x67\xc0\xdd\x9d\x7b\xe4\x01\xf9\x07\xf6\xc8\x9b\xd9\x99\x95\x1c\x86\x8b\xb9\x0e\xbd\x20\xb4\x28\x7a\xc1\x25\x6c\x72\x83\xf8\x63\x00\xc9\xd2\x2e\x63\x7f\xd5\xcc\xef\x54\x4f\x48\x69\xfd\x23\x2e\x8c\xcf\xdb\x15\x51\x58\x93\xe2\x33\x77\x44\xcc\x4b\x4d\xcf\x94\x9d\x41\xc3\x69\x71\x5d\xb1\x6c\x5f\xae\x8b\x37\xef\xae\x4f\xbb\x3d\x03\x65\xd8\x31\xf1\x31\xf8\x9e\xd0\xbc\xe4\x5a\x43\xc4\x87\x4d\x17\x52\xde\x26\x35\x79\xe8\xd3\x6d\xe7\xdc\x2c\xea\xe9\x71\x26\xcb\x20\xf3\x76\xac\xf9\x5c\x9f\x38\x89\x32\xb6\x13\x77\x44\xb8\x28\x9a\x6c\x65\x70\x17\x0a\xa3\x5d\x08\x21\x79\xf0\x24\x6b\x46\x0f\x5b\x0f\x72\x54\x1a\x78\xf6\xfa\xf4\x00\x5d\x22\x6c\xde\x9d\xab\x1d\xeb\xbb\x2a\x8d\xd7\x7c\x65\x67\x3d\x32\x76\xae\x3b\x14\x91\xcd\x26\x59\x9d\x47\xb4\x5e\x77\x3e\x49\x4e\xeb\xcf\x98\x4e\x42\xc1\xf6\x79\xe6\xbe\x6d\xbb\x44\x72\x86\x44\x22\x0c\x38\xbd\xe8\xa3\x79\xf7\x10\xdf\x3e\x80\xda\x70\xee\x4f\x0f\xfa\x62\xab\x3c\x2d\x0a\xbb\x90\xd4\x91\xca\x04\x08\x4f\xb0\x4d\x1a\x1e\x17\xa8\x14\x8f\x14\x2e\xd6\x5a\x08\x47\x91\x5e\x47\xfd\x90\x1b\xcf\xa0\xe3\x29\x7c\x8c\xc4\xb6\x29\x29\xf9\x83\xed\x61\xd8\x62\x97\x73\x04\x22\xff\x9b\xbf\x4e\x28\x95\x43\x00\x7d\xd0\x50\x77\x8d\xec\x0a\x85\x8d\xf8\x04\x69\x63\xaf\x2d\xfb\xc5\x25\x33\xd6\x52\xc3\x79\x0b\xc3\x0f\xd6\xb2\x52\x75\x0f\x87\x21\x25\x34\x4c\xc2\xf0\x70\xaf\x92\x22\xf1\x3c\x40\xa8\xd8\xf5\xc9\xea\x20\x5e\x79\x7b\xae\xd0\x31\xd9\x90\xc2\xf3\x6c\x21\x64\xf2\xe9\x61\xe4\x27\x0c\x56\x91\x7d\x09\x58\xa5\xd2\xad\x04\xd4\x31\x3b\xe3\x5a\x09\xe9\x6b\xf8\x3a\x7a\x69\x22\xf3\x35\x56\x1b\x5f\x48\x3c\xbe\x64\x84\xdd\x1c\xad\x09\x22\xa4\xf3\x8f\x04\xb5\xbc\xd9\x03\xcb\x6a\xc3\x72\x47\x6e\xe5\x7c\xca\x48\x8c\xd3\xed\x4d\x74\x0f\x7c\xa2\xbe\xab\x20\xa8\x47\x2d\xb7\xb3\xb3\x75\x1a\x7a\xae\x11\xf9\x7f\x20\x25\x1d\x97\x65\x5b\x7e\x7c\xd2\xfc\x79\xec\x54\x00\x90\x3a\xa3\xc2\xdb\x56\x50\xc5\x1a\x5d\xdc\x8e\xc4\xca\x71\x79\x4c\x19\xa9\xa8\xa2\xa5\xbd\x83\x35\x71\xcb\x33\x65\x73\x8e\xa9\x81\xc1\xa5\xd8\xb0\x60\xc5\xb1\xba\x81\x61\xc3\x0d\x29\xf9\x7c\x81\xa7\x85\x50\x28\xf5\x47\x3c\x70\xac\x90\x34\x27\x20\x58\xa4\x22\xf7\x54\x95\x56\x17\xa0\xd9\x02\x50\x68\x54\x90\xbc\xb6\xe7\x81\x00\x67\xd3\x72\xac\x0d\x35\xd6\xc6\x64\x2a\xc1\x09\xe7\xa7\x69\x07\xc5\x28\x9e\xba\xd0\xd6\x8e\x39\x75\xec\x49\xeb\xc5\x0b\x72\xfe\xc0\xb2\xa0\x9c\xb3\xdd\x9e\xae\x9e\xb3\xbd\xa6\xe8\x6d\x22\xd0\x6c\xe7\x76\x71\x26\xcb\x92\x8a\xfe\x12\x37\x13\x15\x91\x33\xec\x8e\x37\x71\x5c\xef\x88\x35\x3e\x01\xdc\x89\x02\xd4\xd3\xc5\x77\xb4\x10\x94\x74\x76\x5f\xdb\x63\x8a\xa4\x40\x52\x35\x45\xc0\x92\xba\xe5\xfb\x01\x65\x85\xa4\x34\xe4\xf0\xe0\xe4\xe0\xc8\xd3\xd4\x35\x5d\x38\xd0\x61\x52\x01\xa6\x40\xb7\x03\xd2\xbc\xac\x8a\x25\x8c\xe1\x00\x2b\x09\x25\x54\xe8\xb4\x8f\x87\xa7\x36\xe4\xf9\x7a\xc1\x8a\x62\x44\xb4\xd5\x75\xa9\x67\xbb\xc5\x4f\xed\x8f\x8c\xaa\x33\xf4\x89\x1d\x1e\xfc\x72\x30\x22\xcc\x64\x47\xe4\x5e\x8a\x03\x83\xe1\x0d\x72\x03\x06\x63\x52\x9f\x9a\x4e\x2c\x65\x0d\xc5\x6e\x71\xd9\x1a\x82\xe4\x8c\x5a\x5b\xa7\x46\x85\x1c\x59\x36\x58\x91\x50\xbc\xd5\x3e\xe7\x0f\xdc\x58\xbd\xc3\xd4\xe0\x93\x78\x89\x66\x01\xb3\xb2\xd4\xde\x6e\xf6\x5a\x3b\x59\x30\x5a\x98\xc5\xb2\x31\x55\xb0\x8e\xa8\x26\xb5\x70\xdf\xa4\x2b\x4c\x7b\x90\x27\xba\xbf\x19\x9b\xae\x9c\xf1\xcd\x42\x31\xbd\x90\xc5\xce\xf3\x36\x7d\x8d\xcb\x4c\x0a\x6d\x65\x8a\xb5\xa7\x5d\x1f\x75\x93\x32\xe7\xea\x6c\x4a\xc7\x70\x6a\x4f\x99\x62\xb9\xd3\x8c\x1c\x5d\xe2\x82\x42\x4d\x7f\x50\xde\x58\x9e\x62\x87\x84\x06\xd0\x1f\xfa\xac\xc2\xb9\xfb\x82\x97\xf6\x99\xab\xaa\x9f\x2b\xf9\xcd\xd5\xe4\x2c\xb8\x92\xa9\xf0\x37\x32\x17\x77\xb2\x80\xd5\xa0\xf8\xa3\x4a\xaa\xc4\xca\xb4\x3b\x87\x13\xd8\x21\xec\x50\x3d\xb0\xcd\xf7\xa6\x1b\x4c\xa4\x32\x44\x34\xd5\x6d\xed\x09\x9b\xc3\x5a\x32\x75\xc7\x33\x76\xfc\x0c\x85\xfc\xfb\x22\x30\x4f\x3f\x0e\x04\x00\x50\x30\xf0\x7d\x51\xbe\xae\xb1\x3b\x9b\xfc\xcb\xae\xa7\x60\xc7\x15\x34\x6b\xd6\x06\xd6\xef\x5b\xb8\x41\xcf\x16\x2c\xbb\x75\xe5\x08\xd2\x1c\x91\x9a\x31\xb2\x21\x42\x61\x05\x08\xfe\xcf\xb4\x90\xd3\x93\x92\x6a\xc3\x94\x35\x6b\xdc\xe5\x3e\xce\x6c\x0f\xb8\x98\x1f\x97\xf9\x51\x4a\x8d\x32\x12\x98\xd2\x6b\x9c\xe2\x1d\x7a\x99\x47\xf8\xc1\xed\xac\xec\xd4\xed\x6e\x67\xef\x0d\xeb\x27\x71\xec\xdb\x9b\x9b\xc9\x1b\x66\x56\x8c\x20\xdb\x82\x2f\x23\x02\xbb\x02\x13\x90\x06\x69\x9b\x22\x6d\x17\x52\xf7\x27\x6d\x7b\x08\x91\xa0\x08\x00\x56\x6c\x21\x58\x66\x17\x7a\xd4\xa9\x85\xe2\x31\x83\x17\x93\x63\xf2\x4f\x59\x83\xc2\x44\xa7\xc5\x92\xdc\x53\x24\x20\xd0\x2c\x4d\x16\xbc\xb0\xdd\x78\x61\xa5\x8d\xdd\x70\xdf\x32\x9a\x63\x75\x03\xf0\xc2\xec\x3e\xb2\xd5\xf6\xa9\xb7\x65\x3b\xab\xb5\x91\x25\x59\xb8\xa1\xe2\x1c\x36\x57\x21\x1e\xb8\x63\x38\x94\x18\xa6\xd1\x44\xb1\x0a\x6d\x1d\xf7\x37\x5f\x84\x25\xb3\x26\x82\x70\x9e\x83\x42\x41\x94\x64\xe1\x54\x39\x35\x1d\xbc\x8d\x5c\xe0\x04\x25\x95\x89\xc7\xa7\x97\xca\x89\xa4\xa7\xea\x89\x24\xbd\x82\xa2\x7f\x49\x7a\xbc\xb0\x9f\x5a\x8c\xa4\x97\x7a\x8c\xa4\xf7\x9a\x8c\xc4\x45\xc5\xdc\xe6\x42\xac\x8c\xed\x68\x2a\x89\x20\xf1\x7e\xdf\xa6\x74\x06\x15\x52\xf0\x0c\x23\x0f\xa4\xae\xa4\x20\xb2\x36\x55\x6d\xc0\x91\x93\x51\xcd\xc6\x77\x54\x71\x2b\x50\xb1\x9c\x6d\x03\x5a\x12\xf6\xb4\x1b\x29\xc1\xcb\xd1\xc4\x87\xb1\xc7\xe9\xdd\xec\xc9\x97\x60\x1f\xd8\x6c\x3d\xaf\xf0\xda\xe2\xa4\xef\x68\xb2\xd7\x1e\x14\x82\x55\xa7\x16\xfd\x99\x63\xd4\x2c\x00\x84\x07\x61\x27\x8f\xe1\x04\xc1\x69\xd5\xfd\x3d\x48\x92\xe9\xd5\xfa\x4c\x14\x09\x10\x1a\x97\x6a\xc5\x7e\xb5\x3d\x5c\x9f\xc3\x9e\x60\x21\x4f\x6f\x0e\x87\xb5\x67\xa7\x8c\x50\x41\x2e\x4e\x2f\x4f\x7f\xbe\xfe\xfe\xec\xe7\xcb\xd3\x77\xe7\x29\xaf\x4e\xae\x36\xd6\x67\xbd\xb1\xde\x2a\x8e\x3d\x51\x3d\x46\xfb\xe8\x6c\xc1\xf6\x07\x11\x72\x0d\xbd\x09\x39\xc4\x9c\x0d\x10\x54\xc2\x49\x23\x95\x23\x2b\x2e\x4f\x2b\x78\x76\x2a\x71\x1c\x00\xe0\x35\x2b\xe8\xf2\x9a\x65\x52\xe4\x3b\x07\x52\x5f\x36\xc2\x46\x63\x87\x9a\x02\x40\x6c\x85\xdd\xca\x97\xdc\x72\x65\x8b\x7c\x28\x3f\x44\x1f\xe0\xf8\xa2\x03\xcc\x64\xff\x82\xcc\x64\x6f\x9c\xdb\x15\x53\x1c\xc0\x3b\xfb\xb0\x6b\xbe\x95\xf7\xae\x96\xd7\x21\x17\x7e\xe7\x1c\x05\x5e\x9a\x36\xb8\x91\xce\x7c\x66\x24\x79\xf5\xd2\x37\xf2\xe5\x45\x2d\x1c\x28\x67\xaf\xe3\x56\xae\x8f\x1f\x0f\x5c\xb5\x08\xa3\x6e\xf0\x2a\x05\xea\x43\x56\xc4\xf8\xab\xe3\x26\xa7\xec\x15\xf4\xa7\x11\x45\x54\xe4\x1e\x1d\xf6\xe5\xed\x13\x93\x55\xd7\x32\xbb\xed\xc9\xe7\x7a\x73\x36\xc1\xb7\x7d\x34\xce\x75\x73\x36\x19\xc2\x5c\xfb\xe5\x78\x3d\xc0\x2c\x2c\x5a\x7c\xb5\xb5\x13\xf5\x60\xb0\xb8\xda\xc7\x2b\x3f\xaa\x5b\xb4\x64\xb0\xb8\x1e\x79\x06\x8b\x6b\x8b\xc7\x17\x8f\xe5\x52\xbc\x51\x34\x63\x93\x7d\x52\xe0\xbc\x00\x21\xb9\x2b\xa9\x4e\x5a\x3d\xae\x11\x17\x82\xb1\x1c\xe5\x87\xaf\x83\x4b\xe6\x76\x24\x88\x66\x06\x3f\x62\x8b\x03\xae\x55\x82\xaa\x77\xb3\x70\xaf\x76\x6a\xae\x0f\x10\x6f\xea\x5d\x6b\x9f\x54\x0d\x7f\xb9\x2f\xf4\xe1\x8e\x93\xed\xbc\xb5\x47\x34\x13\xf1\x2e\x75\x1a\xae\x20\xd1\x7c\x6e\xa7\xcb\x97\x5f\x46\xd2\x2b\x5f\x2d\xaf\xed\x88\x6d\x75\x26\x55\xc6\xa7\xc5\x92\x2c\x68\x61\x0d\x26\xa8\xe2\x4b\xc9\x2d\x54\x9f\x85\xd7\xc4\x4f\xd4\x35\x73\xa9\x95\xa8\xd5\x14\x52\xcc\x61\x32\xa8\x4b\xa1\x78\xa8\x58\x66\xdb\xcc\x0a\x46\x45\x5d\x61\x3f\xad\x8e\xb4\x94\x75\x0f\x59\x14\x3e\x66\xdd\xe8\x54\x82\x3b\xba\x10\xac\xb5\xf6\xc1\x3d\xdf\xcd\x85\x25\xef\xcd\x82\xa9\x7b\xae\xd9\x28\xbe\xda\x2c\xf1\xae\xdf\x95\xca\x6f\xf8\x59\x43\x79\xe2\x12\xfd\xec\xb6\x80\xcc\xd3\xe8\xb6\xbe\x87\xf7\x7a\xd1\x2a\xa4\x18\x0b\x36\x47\x62\x05\x27\xd0\x10\x93\x89\xed\x23\x02\xb0\x49\x0e\xd0\x46\x56\x9d\x52\xbb\x77\x9c\x46\xf7\x04\x48\x1c\xda\x1d\x45\x0e\x85\x24\xb2\xb2\x57\x57\x2d\xb8\x59\x42\x54\xcf\x57\x79\x4e\x48\x8f\xba\x71\x08\x05\x4a\xa6\xcc\x50\xe7\x07\xb7\x87\xa0\xe1\x30\x07\x7a\x72\x7b\xf6\x00\xd3\x7f\xb3\x71\x03\x34\xb4\xe6\x73\x6a\x12\xa4\xc4\x06\x8d\x1e\xd7\xf3\xc3\xdb\x8e\x6b\x17\xb3\x4b\xe4\x4d\xde\x0f\x26\x42\x7b\xa2\x65\x6d\xf6\xe4\x1e\x79\xcc\x7d\x84\x94\x14\x81\xa1\xc8\x4b\xa6\x89\xac\x7b\x2a\x11\xf1\xca\x35\xd7\xa7\x95\x37\xf8\x9e\x36\x3e\xda\xe4\x3c\xaa\x50\x70\x1f\x5b\xec\x11\xb2\x7d\x97\x36\x1b\xf0\x4d\x4e\xeb\xd9\x8c\x29\xb8\xe9\xa0\xc3\x6b\xc0\xf9\xa6\xf4\x96\xbf\xc3\xe2\x1c\xb8\x0e\xab\xc5\xcc\x08\xb8\xfe\x1d\xf7\xc3\x23\x4d\x3a\x52\x4c\xa8\xac\xab\x98\x06\xee\x76\x41\xce\xdf\x7f\x13\xb7\x45\xfb\xa8\x04\x90\x96\x61\x0a\xe3\x7c\x2f\xe2\xf0\x84\xfd\xee\x87\x4d\x24\x2d\x6e\x5b\x64\x85\xd4\x2e\x9b\x19\xd6\x25\x5b\x50\x21\x98\x77\x48\x71\x03\xde\xec\x29\x63\x82\xc8\x8a\x21\x9e\x2e\xaa\x33\x94\x68\x2e\xe6\x05\x23\xd4\x18\x9a\x2d\x8e\x6d\xef\x84\xdf\x0b\x6d\xda\xb0\xfb\x44\x1b\xc5\x68\x89\x7b\x42\xb1\x92\x72\x6c\x9e\xd0\x4c\x49\xad\x49\x59\x17\x86\x57\xcd\xcb\xe2\x3c\x89\x0c\x08\x1c\x34\x66\x91\xfa\xb5\x82\xc4\x90\x36\x3f\x79\xd4\xf6\xd0\x0d\x5f\x86\xf5\x85\xc0\x7d\x36\xb2\xdf\xb2\xb2\x32\xcb\x26\x8f\x30\xce\x06\x9a\x71\xa5\x0d\xc9\x0a\xce\x84\x71\x23\x43\x8a\x40\xe8\xc3\xc8\xab\xd3\xc2\xcd\x88\x76\x53\x22\x72\x30\xbe\x2b\xa3\x31\x5d\xae\xe9\x84\x7f\x55\xce\xb5\xf3\x75\xe8\xb8\x64\x3d\xea\x2b\xc9\xe0\xc6\xf1\x33\x02\x5b\xc7\x2b\x38\xd8\x23\xf7\x51\xd0\x85\xa0\x34\x76\x9b\xea\x98\x26\x57\xa0\xdc\x8b\x3f\xd7\xa3\x0e\x45\x40\x6b\x5b\x40\x32\xcb\x9a\xd4\x81\x0d\x25\xd8\x9d\x3d\x07\x2c\x63\x56\x15\xa5\x3d\x0a\x99\x67\x97\x31\x81\x2e\xf7\x8e\x69\x4d\xe7\x6c\x12\x09\x49\xe8\x43\xe0\xb4\x8e\x36\xc0\x32\xb4\xdb\x66\xc1\x90\x97\xca\xc8\xe0\x93\x30\x4d\x2b\x34\x1e\x4b\x1c\x48\x54\x0f\xbc\xd1\x74\xaf\xb8\x31\x0c\x76\x29\x14\x5f\x02\x10\xda\x2a\xd9\x66\x37\x3d\x2c\xaa\x3d\x37\xe9\x61\x7b\x56\xfd\x10\x39\x26\x5a\x4d\x19\x99\x2a\xce\x66\x64\xc6\x21\xf3\x0b\x72\xa2\x46\x58\x35\x80\xa2\x0b\x59\x6b\xa6\x60\xd8\xce\x2d\xe0\x87\x1f\xd7\x9f\x7f\xb8\xf1\x1b\x55\x8b\x8c\x06\x55\x35\x81\x0a\x8c\xcf\xc8\x1c\xf2\xb0\x9c\x11\xfc\x5f\x2f\xff\xf2\x27\x32\x5d\x5a\x7d\x0d\x0c\x31\x23\x0d\x2d\x7c\x07\x48\xc1\xc4\xdc\xae\x22\x88\xdc\x38\xb9\xd1\xa1\x93\x6a\x16\xa7\xe0\x25\x37\x38\x41\xaf\x7e\x7f\x3b\x4d\x3a\x7a\x20\x1f\x4f\x72\x76\x77\x12\x6c\xa1\x71\x21\xe7\x71\x6f\x3d\xeb\x23\xf9\x37\xc9\xcf\xb6\xe1\x44\xcb\x82\x67\xcb\x5d\x9d\x69\x5f\x6c\x84\x2c\xe4\x3d\x3a\x73\xd6\x8f\x6a\xc0\xcc\x52\xc9\xaa\x2e\x60\xe2\xc8\x37\x0d\x9f\x5e\xad\xd9\x2a\x53\x51\xaa\x93\x30\x90\x76\x10\x48\x75\xcd\xae\xdc\x39\x2e\x09\xd1\x77\x53\x3a\x9e\x08\x17\x77\x6b\xea\x86\x44\x7b\xe3\xbe\xa1\x45\x31\xa5\xd9\xed\x8d\x7c\x2b\xe7\xfa\xbd\x38\x57\x4a\xaa\xee\x98\x0b\x6a\xef\xf4\x45\x2d\x6e\xa1\xf0\x6d\x4b\x1e\x2b\xe7\x0e\x57\xe8\xd3\xfd\x83\xd1\x45\x75\xc6\x8f\x12\xe9\x3c\xbd\x4a\xe2\x7d\x70\x6d\xcb\xec\x81\xb7\x8e\x36\x41\x98\xed\x73\x6c\xbe\x3c\xeb\x8c\x43\x87\x47\xfb\xf7\x2f\xff\xeb\xcf\x28\x5c\x88\x54\xe4\xcf\x2f\x21\x69\x58\x8f\xf0\x02\x80\x1b\xd8\xaa\x5a\x25\x2d\x8a\xd8\x28\x41\x28\x02\xbe\x89\xae\x27\xbd\x07\x47\xde\xec\xec\x74\x7f\xb2\xc9\x78\x73\xf3\x4f\xb0\x17\xb9\xd1\xac\x98\x8d\x90\x9c\xa5\x71\x6b\x1d\x80\x76\x75\xe0\xae\xbc\x78\x62\x9f\xdd\x1b\x6d\x77\xb2\xa8\x4b\xf6\x9a\xdd\xf1\x2c\x2e\x80\xd9\x59\x95\xce\xdb\xbc\x9b\xbe\xe0\x1a\x38\x7b\xa6\x85\xcc\x6e\x49\xee\xbe\x0c\xe0\xf2\xab\x85\xb0\xe3\x67\x21\x36\x71\x20\x21\x61\xe0\xd1\xf1\x77\x52\x05\x4a\x5a\x55\x0d\xa1\x88\xa2\xf7\x9d\xc9\x00\xd1\x04\x64\xa6\x89\x61\xc4\xe4\x60\x7a\x6a\x28\x7d\xec\x46\x64\xaf\xa9\xe8\x57\x44\xe7\x17\xa4\x47\xe2\xdb\xde\xc7\xc7\x31\x3b\x1b\xa2\x7d\xa1\x3f\x0d\x15\xfc\x37\x32\x26\xac\x11\x59\x35\x0c\x41\xcd\xc6\x40\x0d\xd2\x6e\x1f\xb8\x65\xe2\xdd\x97\x3d\x04\x43\xd3\xf2\x24\x3a\xf3\x22\x9a\x20\x74\x49\x8d\xb3\x8f\x7c\x94\x9d\x92\x8a\x29\xcd\xb5\x55\x9d\xbe\x87\x03\x75\x56\x50\x5e\x06\xe1\xbb\x5d\x4d\xc2\x3a\xaa\xbe\xa4\xd5\xf8\x96\x2d\x23\x37\x5c\xe2\x71\x79\x0c\xe4\x5f\xd2\x2a\xf2\x1e\x80\x52\xb3\xe9\xd7\x40\xe4\xe5\x3c\x91\xb9\xeb\x07\x5c\x0f\x58\x45\xf8\x49\xcc\xd8\x1e\x75\xa0\x5d\x5f\x39\xdf\xb7\x0b\xd7\xbd\x71\xec\x27\xcd\x95\x83\xbf\xfa\x92\x2e\x1a\x18\xdf\xe7\x7a\xcf\x34\x9d\xef\x49\x9c\x26\x21\x9d\xe0\x76\x72\x3b\xa3\x7b\x1d\x75\x1c\x5a\x78\x32\x03\xd3\xd7\x39\x9a\x8e\x91\xc4\x3f\xa1\x03\xf6\x28\xba\x46\xc9\xc1\x57\x07\x3b\xbd\xe3\x70\x65\x94\xac\xe8\x1c\x2c\xd3\x7d\x58\xa0\xd5\x3e\x85\x94\xb1\x0b\x79\x8f\xdf\x23\xba\xa4\x72\xbf\x62\x79\xcb\x3b\xbe\x90\x49\xab\x83\xc8\x41\xbf\x23\x9c\x75\x8d\xd4\x82\xf7\x74\x49\xa8\x92\xb5\x48\x4a\x85\x86\xc0\x48\x13\x38\x7b\xb7\x32\xd8\x4b\x29\x98\x0f\xd2\xa7\xb4\x72\xd3\x52\x8e\x73\x8d\x78\x05\x2e\xc8\xab\xe3\x57\x2f\x93\xfb\x7e\xc5\xb2\x5a\x69\x7e\xc7\xae\x5c\x4d\xf2\x20\xa8\x72\x31\x9b\x48\xad\xf9\xb4\x80\xe4\x2d\x23\xc9\x39\x16\x6c\x5f\x1f\x68\x03\x1c\x81\x11\x4b\x15\x92\x8b\x26\xf4\xf0\x10\x4f\x70\x08\xf8\xb4\x0d\x24\xa0\x3e\xf6\x4b\x93\x84\x75\x5d\xd1\x24\x2f\x1b\x4d\x12\xef\xbd\x9d\x8e\xd5\x17\xaa\xdf\x07\x49\xf2\xce\xc5\x06\xda\x4a\xf4\xdc\x57\x3a\x86\x8f\xee\x15\x37\xee\x70\xdf\x73\xcd\xc8\x21\x78\x25\x56\x36\x63\x12\x9f\x72\xe8\xc3\x4a\xac\x58\xdf\x07\x1f\xb2\x5a\x3d\xba\xfb\xb0\x4a\xeb\xf2\xa4\x45\xe1\xdf\x3b\x07\x56\xbb\x82\x4e\xfa\xb7\xf7\xf2\x82\x8a\xbc\x48\x92\x19\xcd\xac\x14\xcb\x34\x1e\x9b\x8b\x19\x09\x65\xa2\x0b\x60\x06\xd5\x1f\x16\x54\x13\x21\x49\xc9\x28\x20\x34\xed\xf5\xe2\xc5\x60\x87\x5b\xb9\xc7\x4e\xe0\x76\xc7\x8b\x2c\xbc\x12\x9c\xc0\x7e\xcd\xb5\x13\xd0\x56\x92\x38\x1b\x04\x81\x1d\x25\xcd\x53\x12\xbc\x83\x59\x6d\x97\xef\xb8\x85\x4d\xae\xf6\xa4\xbd\x3a\x56\xfa\xf2\x14\xfd\x18\xb9\xa2\xe1\xb6\xf9\x1a\x90\x82\x1b\x1c\x73\x2d\x4c\x26\x29\x9e\x8d\xcf\xea\x70\x9b\x8b\x71\x6d\xac\x9b\x7b\xdc\x74\x38\xa1\x0f\x1f\x1f\xea\x28\x90\x86\x1e\x25\x8a\x41\x75\x57\xb4\xc4\xe5\x3d\xa6\x51\x6f\xfb\xb0\x44\xe3\xf0\x99\x33\xc1\x14\x75\x91\x05\x0f\x12\x75\x14\x2c\x54\x4b\x91\x7c\x22\x3e\xb2\xe3\xac\xc8\xff\xb8\xa6\x82\x7f\x96\xd0\x11\x50\x75\x0e\xa5\x5a\x39\xef\x2e\x68\xb2\x49\x69\xe9\x75\xd8\x2b\xcc\x5a\xb8\xfd\x03\xe6\x4e\xbb\x2c\xff\xaa\xf9\x1d\x2d\x18\xd2\xce\x7b\xe1\xb0\x53\x85\x42\xd7\xd3\x7d\x35\x1d\x9d\x8d\x08\xa6\xc7\x66\xe0\xc3\xa3\x56\x64\x4f\x3a\xc5\x8b\x17\xe4\x10\xdb\x38\x40\xaa\xdc\xdd\x2a\xba\x6e\xad\xce\x1f\xaa\x84\x6a\xab\xfd\xad\xd7\xf9\x43\x45\x01\xab\x51\xed\xc5\xc2\xfd\x37\x5b\xd0\x3b\x06\xcc\xc4\xbc\xa0\xaa\x00\x60\xfa\x35\x4e\x19\x99\xd6\x86\x30\x71\xc7\x95\x14\xa5\x3d\x7e\x40\x42\x63\x45\x93\x62\xc0\xdf\x9e\x31\x4d\x7e\x7b\xf8\xfd\xe9\x15\x24\x2e\x1d\x39\x82\x7b\x37\xbe\x5a\x03\x4f\xc0\xca\x18\x82\xd7\xed\xe3\x7e\x23\x7e\xec\x76\xbb\x80\x86\xe2\xe7\xc2\x8e\xad\xac\x4d\x4d\x0b\x20\x70\xce\x8a\xda\xde\x86\x3b\xdb\xd9\xfd\xfb\xc1\x53\xbc\x79\x7d\xba\xc1\x1d\x7d\xf7\x6b\x1e\x75\x5c\xfb\x38\xa8\x67\xc1\x7e\x5d\x23\x13\x8f\x2e\xcb\xb0\x81\x43\x72\x4d\xd5\x39\xd0\x0d\xaf\x64\x98\x8b\xe3\x2e\xe3\x38\x88\x06\x54\x3b\xc0\x24\x70\x5f\x47\x74\xcd\xcb\x08\x65\x55\x76\xee\xc7\x8f\x38\x0c\xfd\x1d\x83\x08\x67\x74\x3f\xbb\x5e\xc8\x9c\x6d\x5f\x08\x28\x6d\x9f\x5f\xba\x36\x31\x73\x28\xe0\xf0\xd4\xd9\x82\xe5\x75\xc1\x5c\x11\x11\x99\x13\x29\x8c\x24\xb4\xad\xe1\x68\xbb\x0b\x58\x5a\x5f\x2b\x4a\x8c\x01\xf5\xb3\x2d\xcc\x17\x80\xd7\xae\x35\xe5\x89\xf1\xfd\x07\x7a\xa5\x7d\x08\xca\xda\x96\x47\x84\x6a\x5d\x97\x78\xb3\x50\x63\x3b\x31\xe3\x06\x60\xbe\xb2\x56\xd9\xb6\x36\x99\x8b\x81\xd8\xdb\x68\xcb\xa4\xbb\xc8\x1d\x6b\xc7\x70\xcd\x0a\x10\x25\xcf\xbd\xe0\xbe\x5d\x5c\x74\xed\xff\x85\xba\x86\xb7\x27\x00\x14\xdf\x70\x48\x48\x30\x7e\x66\xdc\x10\x29\x08\xc5\xb5\xdf\xb2\xe5\xeb\x0d\xed\xa0\x9b\x10\xdf\x77\xa0\xb1\x48\xbd\x5e\x6d\x75\xda\xee\x0f\x57\x8a\xd9\xed\x81\x6d\x7b\xb0\x65\xd6\x90\x97\x93\x60\x67\x9d\x50\xad\xf9\x5c\x8c\x2b\x99\x8f\x6d\xdb\x27\x11\x9b\x24\x22\x46\xe7\xab\x9d\xd1\x62\x12\x1d\xe8\xea\x47\xa6\x5a\x71\x1a\xc9\x5b\x27\xb7\xec\x72\xda\x0e\xbf\xee\x70\x13\xbf\xbf\x5e\x43\x76\xe8\x00\xbd\xb0\xf5\x26\x96\xa5\x4b\x5a\x16\x79\x70\x6d\x82\x15\x8b\x51\x1f\xc5\xec\x4c\x43\x6a\x2f\x6f\x79\xa3\x21\x99\x71\x5b\x7b\xf9\x62\xe6\x87\xb0\xea\x1c\x80\x2a\xac\xa8\x3a\xcc\x64\x51\xc8\x7b\x60\x6e\xc1\x4e\x04\x3e\xbb\xed\x19\x48\xc6\x7a\xa5\xcc\x59\xb7\x98\x70\x8f\x43\x70\x2f\x1e\xf5\x3d\x00\xcc\x33\x85\x3a\x93\x17\xaf\xe3\xff\xf8\x62\x72\x16\xff\xc7\xdf\x69\xa6\xb6\x75\x85\xb9\x3f\x5f\x9d\x7f\x5a\x55\xa7\xaa\x94\xca\x95\xca\xef\xe7\xa5\x9a\xbd\xb5\x1b\xc8\x2f\x6a\x4f\xef\x84\x62\xe6\xbd\xf6\x73\xa6\xdf\x28\x59\x6f\x6b\x39\x7c\xf8\x65\x67\x0b\x2a\x3c\xae\xbd\xa7\x91\x2f\x75\x66\x8a\xd8\x69\x5c\x50\xc5\x5c\x09\x4b\xab\x88\xe9\x8a\x6e\xad\xbc\x3c\xd2\xaf\xa6\xba\x64\x8f\xaf\xeb\x71\x3d\x74\x5d\x55\x05\x68\x5c\xb4\x80\xd7\x46\xce\x60\x2b\xd7\x7f\xf8\xcf\x9f\x9e\xe6\xfc\x7c\xb8\x89\x3e\x4e\xd3\xc7\x5a\x48\x3f\x5b\x1f\x6e\x21\xa3\x15\x9d\xf2\x82\x5b\xfd\xe2\x29\xde\xef\x03\xaf\x57\x52\x9a\x6f\x1a\xc0\xd8\x53\xb4\x54\x29\x7e\xc7\x0b\x36\xdf\x3a\xe8\xf6\x69\xdb\xc9\xde\x55\x13\xdf\xc4\xb9\xce\x68\x11\x93\x34\xf1\x89\x23\x91\x19\xb8\xfb\x9f\x64\x41\xd2\x84\xc3\x27\xbc\x7c\x7b\x51\x11\xad\x25\xc7\x22\xd8\x22\x4c\xfd\x78\xbc\x59\x1c\xce\x22\xdd\x8d\xf5\x58\x99\x70\x57\xaf\x52\xcc\x49\xa7\x46\x5d\xad\x14\x13\xc6\x9a\xe0\x4d\x3c\x0e\x18\x1b\x50\xbb\x05\xc5\x13\x94\x5f\xa7\xbf\xc5\x38\x79\x4e\x1b\xa3\xc6\x91\x41\x94\x74\x69\x15\x3e\x5f\x35\x85\x0b\x32\xab\x81\x85\x04\xb4\x6c\x2c\x1d\x0a\x40\x9c\x28\x4a\xab\x0d\xe5\x63\x64\xc5\x44\xbb\x85\x4f\x9c\xd3\x6d\x6c\xb7\x76\xa7\xa0\x0c\x9a\x80\xc7\x65\xfe\x9b\xaa\xa0\x66\x26\x55\x39\xf6\xfe\x8f\x71\xc7\x3c\x8c\xe8\xd6\x19\x24\x48\x37\x60\x01\x24\x04\xc2\x32\xdb\x22\x2f\x58\x60\xfa\x35\x0b\x20\x72\x8c\x88\x91\x5a\x28\x96\xc9\xb9\x00\x9a\x78\xf7\x2d\x18\x35\x4d\x44\x8d\x6a\x6b\x76\x11\x51\x17\xc5\xd6\x7d\x8b\x34\x18\xe5\x1d\x53\x0b\x46\xb7\x3c\x85\x69\x1b\xfc\xbd\x6b\x93\x28\x56\x29\xa6\x61\x42\x31\x32\x8b\x6e\xa0\xa6\x53\x84\x6a\x2d\x33\xa0\xbc\xc5\xec\x33\x4f\x44\x45\xc1\x9c\x9b\x49\x45\x28\x99\xf3\x3b\x26\xc8\x15\xee\x86\xb3\x82\x6e\x4f\xc0\x14\x20\xdb\xbc\xdf\x96\xd6\x46\x36\x99\x89\x84\x1a\x42\xf3\x92\x43\xfa\x3f\xa6\xb4\xbb\x68\x77\xd8\x6a\xf0\x13\xbb\x4b\x95\x84\x3c\x35\x72\xb1\x6d\xe6\xe2\x27\xbd\x17\xd2\xf5\x7c\x78\xb9\x99\x2e\x30\xc2\x7c\x5c\xbd\x29\x82\x4d\x32\x08\xc8\x7a\x47\x61\xc4\xf4\x7c\x4a\x87\x1c\xf3\x82\xbd\x06\x36\x35\xea\x1c\x48\x4d\x25\xfc\x76\x89\x0b\xab\x66\x6c\xab\xd5\x5b\xd3\x1c\x70\x29\x61\xbf\x30\x23\xcd\xbb\xc9\x81\xad\x14\xdc\x57\xad\xcf\x7c\x22\xf3\xeb\x8a\x65\xa3\x76\x0b\xfa\x05\xf7\x14\x0e\x9e\x5d\x6a\xcb\xfe\x04\x52\x10\xdd\x16\x4a\x31\x5d\x49\x91\xdb\xdd\x1a\x76\x32\x84\x43\x70\xd3\xe1\xab\x00\xd3\xb9\x95\x17\x18\x41\xff\x37\x53\x5b\xe7\xac\x6c\x70\x99\xcd\xb9\x39\xbe\xfd\x33\xf8\xcb\x98\x58\x50\x91\xa1\xd7\xf4\xe4\x96\x55\xfa\x44\xf3\x39\xba\xc7\xfe\xf4\xe7\x3f\x83\xaf\xcc\x2f\xce\xc9\xd5\xf9\xe9\xeb\x77\xe7\xc7\xe5\x76\x6a\xd9\x4e\x1d\x67\x15\x35\x86\x29\xf1\x15\xf9\x9f\xc3\x1f\x7f\xf7\xcb\xf8\xe8\xeb\xc3\xc3\x1f\x5e\x8e\xff\xf2\xd3\xef\x0e\x7f\x3c\x86\xff\xf8\xcf\xa3\xaf\x8f\x7e\xf1\xff\xf8\xdd\xd1\xd1\xe1\xe1\x0f\x7f\x7f\xf7\xe6\x66\x72\xfe\x13\x3f\xfa\xe5\x07\x51\x97\xb7\xf8\xaf\x5f\x0e\x7f\x60\xe7\x3f\x7d\xe2\x4b\x8e\x8e\xbe\xfe\xed\x96\x1d\x8d\x64\x7b\x4c\x65\x78\x4c\x62\x75\xec\x91\xc9\xb1\x52\x8c\x95\x70\x83\xc4\xa4\xab\xa7\x5d\x40\x93\x95\xb6\xbd\xa6\xe5\xfe\x65\xef\x15\xdf\x3d\x31\xb7\x57\x8d\xc6\xeb\xa7\x90\xf7\x40\x19\xc2\xa5\x55\x9c\xb7\x3d\x96\xef\x41\x19\x22\x97\xec\x8e\xa9\x91\xef\xc3\x5b\xfb\xca\x49\xe4\x1b\xc3\x38\xfa\xa6\xf7\x45\x72\xb2\x45\x6e\x10\x3f\x2f\xcf\xb9\x92\x37\x40\x81\xe6\x46\x0b\x82\xfb\x98\x7c\x4f\x15\x97\xb5\x76\x1a\x32\xd4\xe7\x97\x02\x94\x0c\x4c\xb1\x6f\x2e\x7b\x08\x8e\x20\x1e\x7f\x5b\x21\xe3\x9b\x6c\x38\x6d\x73\xc7\x4f\xd4\x4c\xfd\x69\x73\x49\x9e\x6d\xbe\xb5\xf9\xb6\x26\x62\xa5\xd8\x9d\x1f\x86\xf2\x24\x35\xcc\x60\x41\x87\x66\x54\x68\x11\x6c\xbc\xa2\xbd\x42\xb3\xad\xb3\x20\x98\x32\x68\xd4\x8f\x11\x2e\xb4\xcb\x88\x92\x4a\x50\xfa\x87\xcf\x3d\xd5\x14\xac\x1b\x3a\xc6\x83\x4f\xe3\x8e\x59\xbc\x70\x8c\xe5\x71\xab\x56\x67\xe3\x39\xf7\xff\xc5\xac\x83\xbf\x6b\xc8\x30\x5b\xce\xd0\x66\x1a\xc9\x0b\x3c\x10\x70\xd5\x8f\x33\xc5\x0d\xcf\x68\xf1\x22\x02\x78\xe9\x5f\x94\x15\xb5\x35\xb8\xc2\x77\x29\x46\xcc\xbd\xc4\x3e\xd1\x82\xdc\xb2\xe5\xbd\x54\xb9\xd7\xfe\x42\x1c\xe6\x96\x6d\xc2\xc6\xd0\xc6\x0f\x07\x90\xdc\x56\x24\x63\x34\x45\x95\x4c\x91\x29\xf3\x90\xa5\x95\x1f\x2f\x8f\xc9\xa9\x58\xa2\xe2\x15\x61\xff\x37\xb1\x8d\xa0\x40\x28\x68\xb7\x68\x89\x74\x4e\x83\xd3\x7a\x7c\xdf\xa8\x89\x2a\x39\xb6\x19\x6f\x62\x4d\x9e\x46\xf0\x78\xbd\xd5\x03\x4e\xa4\x72\x7c\xa8\x20\x90\x14\xb2\xc7\x6e\x8b\x2c\x75\x2f\x7b\x96\xdb\xc2\x6a\xfd\x5c\x30\xad\xdf\xd8\x0d\xbb\xbb\x33\x43\x41\x01\x77\x7d\x01\x06\xd5\x96\x77\x88\x59\xc9\x84\xb9\x60\x56\x25\x90\x79\xfb\xcb\x6d\x97\xf4\x14\xfe\x1c\x28\xcd\x68\xbe\x44\x6e\x63\xdb\x34\x37\x3a\x0c\x72\x62\x30\xd2\xfe\xe2\xf4\x72\xdb\x40\x98\x23\x4f\x42\x15\x5a\xb7\x63\x6c\x6b\x4f\x76\x47\x09\xb6\x98\x23\xbc\x61\xff\xaa\x69\x01\x70\xbc\x1b\x55\xb3\x17\xcf\x61\x70\x30\x73\x2f\xd5\xed\xc9\x1f\xff\xfc\x12\x6c\x8e\xa6\x77\xe3\xf9\xd6\x57\x54\x6c\x22\x71\x54\x0a\xf1\x4a\x45\xec\xfc\x2a\xdc\xc8\x7e\x2d\xbd\x43\xc3\x01\x2d\x81\xef\x1e\x76\x40\xb3\x40\x51\x78\x80\xa8\x84\xe1\xf8\x54\xe1\x71\xdb\xdd\x9b\x65\xb5\xbd\x92\x14\x9f\xe5\xdb\x69\x37\x19\x49\x78\x16\xbe\x0d\x57\x45\xe3\x92\x34\xed\x04\xf0\x82\x03\x1d\x7c\x0c\xdc\x2b\x20\xcd\x01\xf6\x02\x37\xcc\xb2\x4a\xe0\x99\xe9\x05\x26\x17\x89\xe9\xf0\x0e\x36\xa0\x83\x78\x56\x99\x7b\xd5\x69\xd9\xdd\xa4\x5e\x2d\x58\xf9\xb2\x29\xad\xe0\xc8\x84\xb6\x55\x4f\x90\x5e\x12\x2a\x20\x36\xe5\xb4\x9c\xf3\x07\xc0\x53\x85\x35\xe3\x72\xa4\xc9\xa4\xca\xa0\xc2\xec\xa7\x66\x5b\xdd\xb8\x25\x18\xc9\x19\xa1\x77\x94\x17\x00\xb1\x06\x57\x92\xd4\x1d\x00\x0b\x0e\x36\x93\x42\xd7\x25\xf4\x68\xdb\x50\xda\x74\xe9\xb4\x89\x6d\x01\x1d\x0d\xcd\xb8\xbd\x73\xaa\xc5\x87\x89\xc6\xb7\xd7\xcd\x5e\x2f\x05\x2d\x79\xe6\x97\xf1\x14\xd7\x0d\x28\x0a\x3b\xc4\xe4\x51\xdd\x6e\x20\x28\xbc\x2c\x6b\x63\x27\x37\x46\x3d\xd9\xc5\xdd\x10\x11\xf8\x81\xeb\x24\x38\x0c\x21\x54\x9f\x3d\xd0\xcc\x14\x4b\x88\xa9\x74\x7f\x64\x16\x4a\xd6\xf3\x05\xa1\x04\xfe\x7d\x0d\x5f\x6d\x2f\xa1\x2e\x0c\xa1\x79\xae\x09\x6d\x0a\xde\x70\x83\x3a\x6c\x2d\xf8\xbf\x6a\x56\x2c\x09\xcf\x99\x30\x2d\x4e\xab\xdb\x0d\xc7\xc9\xe3\x8e\xda\xf6\xed\x9f\xb5\x47\x05\x35\x67\xc6\x72\x5f\x25\xc6\xb9\x66\x1f\x99\x1c\xf4\xa4\x82\xc6\x6d\xd5\xde\x08\x8d\x7b\x47\xd7\x6b\x04\x83\x46\xca\xad\x1a\x9b\x35\xde\x07\x2c\x1f\x22\x9a\x9b\x37\x12\x6f\x11\xc0\x24\x5b\xdd\x4a\x11\x78\x3f\x7c\xda\xbc\x76\x7b\x97\x90\xd7\x97\xd7\x3f\xbf\x3d\xfd\xef\xf3\xb7\xcf\xce\xd6\x87\x23\x4b\x9e\x77\x3c\xd6\x01\x45\xcd\x3d\xd8\x79\x81\x13\xab\x7b\x3c\xe2\xc7\x19\x4d\x4b\x93\xca\xeb\xd2\xd1\x4f\xb6\x77\xa5\xb4\x4f\x5f\x09\x5f\x57\xab\x1d\x5a\x8d\xc9\xd3\x15\x91\xe4\xcc\x7f\xa7\x4c\xea\x94\x42\xef\xc2\x03\xcb\xb0\x38\x38\x02\xea\xd3\x8a\x6b\x24\x64\xe2\x75\x96\xe6\x86\x95\x55\x41\x4d\x44\xe2\x43\xfb\x3c\xc9\x12\x85\x1d\xfb\xc8\x52\xf9\x9f\x46\x37\xbc\xbe\xd4\x8f\x2d\x59\x7c\xca\x2d\x70\x2c\xbb\x8e\x76\x72\x8a\x80\x54\x06\x23\xac\x94\x08\x76\xdf\x1d\x9b\x4f\xff\xb5\x7f\x11\xdd\xf6\x94\x91\xa9\xac\x45\x8e\x77\xaf\x1b\x0b\x3a\xb9\x9b\xf4\x0e\x6e\x55\xf9\x82\x19\xef\xa2\xea\xf4\x22\xba\x65\x57\xd8\x41\x4b\x74\x70\xc1\xfb\x51\x4b\x87\xb2\x59\x76\xa6\x9d\x8e\x8f\x22\xd1\x7e\x32\x22\xb4\x90\x62\xee\x48\x6a\xa3\x9b\x6e\xd3\xc6\x9b\xb0\xc1\x68\x6d\xe2\xa1\x02\x2b\x75\x97\x19\xf6\xc7\x65\x3f\xf4\xb3\x8b\xc3\xe5\xb3\xed\x2a\x96\x49\x95\xa3\x23\xc7\x2e\x02\xfa\x6c\x8e\x3b\x47\xf2\x1a\x3e\x63\x3a\x6d\xb7\x6d\xd4\xb7\x61\xb2\x85\x84\x42\x0f\xf3\xc0\x3b\x06\x26\x0f\x2a\x66\xd1\x4d\xae\x04\xca\x3b\xb2\x34\x60\x14\x50\xb2\x20\x55\x41\x05\x73\x55\x26\x1a\xf7\x6b\x6f\x73\xfe\xec\x82\xf5\x0b\xc8\x7d\x73\xd5\x19\x9e\x3f\x7e\x7b\x85\x0d\x93\xaa\x8d\xd7\xae\x31\xc7\x37\x99\xd9\x11\xb7\xa6\x8b\xd4\x9e\x42\x6d\x99\x11\x79\x2f\xbe\x41\xce\xef\x11\x06\x6f\x8f\xc9\x85\x20\x5a\x96\x8e\x9f\xfc\xc1\xe8\x11\x01\x42\x0d\x4a\x74\x3d\xd5\xcc\x60\x58\xd0\x9a\xff\x0e\xe6\xe5\xb0\x72\x15\x53\x25\x37\x11\x59\x96\x41\xad\x66\xec\xd4\x13\x67\x51\x7d\xa8\xf6\xd2\xc9\x6f\xdc\xba\x8f\xab\xed\xf1\xf8\xb1\xc1\x82\x00\x41\xf3\xdc\x21\xb6\xab\x95\xb6\x3b\xfe\xc3\x0e\xfe\xa8\xab\x11\x40\xb2\x1b\xba\xc0\xc9\x5c\xc9\xba\xf2\x62\xbd\x65\x00\xb0\x17\xca\xb6\x86\xaa\xb4\x93\x11\x5c\xc8\x18\x2c\xea\x76\xa4\xb9\x19\xc1\x67\xc9\x5a\x3d\x28\xb7\xf6\x95\xd6\xa3\x8d\x4c\x2c\xaa\x16\x11\x81\x2a\x44\x2d\x49\x85\xec\xf1\xf8\xe6\x17\x05\x9b\xd3\x6c\xf9\xa2\xdb\xab\x0d\x39\xd1\xce\x29\xc5\xcb\xaa\xe0\x19\x37\xd8\x3b\x4f\x34\xbf\x65\x5f\x90\xbd\x1e\x3c\x8b\xe8\xba\x45\xd7\x85\x76\xc3\xf7\x81\x32\x5f\xcd\x08\x01\x9b\x5b\xd3\x77\x46\x63\xab\xfe\xf8\xe7\x3f\x8e\x3d\x64\x15\x86\xf9\x1c\xe7\xa6\x49\xd1\xdd\x6d\x5c\xba\xb3\xdb\xac\x4e\xc7\x75\x05\x3b\x13\x62\xa9\x6d\xa0\xaa\xe9\x6e\x7f\x01\xd3\xcd\x4d\xfa\xcd\x10\xd9\x60\xda\x6a\x70\x31\x7f\xf6\x98\xe7\x75\xb7\x69\x77\xee\x64\x45\xad\x06\xeb\xf9\xe5\xdd\x65\x85\xa9\xd9\xc1\x02\xba\x49\x04\xc2\xf5\x76\x0c\xb1\x97\xab\xdd\x1a\xeb\xbd\xb1\xcb\x17\x48\x90\x66\xe9\xb4\xa1\x4b\x2f\x51\xbb\x83\x80\x5a\xf4\x86\x79\x46\xcd\x6d\x01\xa4\x4d\xf2\x7a\x23\x02\xa9\xb1\xa6\xd6\x6a\x22\x3d\x8b\xb3\xe1\x56\x27\x3c\xb3\xd3\x6d\x75\x04\x87\x35\xa5\x06\xc3\x81\xa0\xc8\x3a\x54\x31\x92\xaa\x81\xc2\x5f\xca\x3b\xc8\x9b\xb6\x4a\x85\xd5\x78\xef\xa9\xca\xa3\x72\xdc\x77\x14\x14\xed\x0e\x1f\xb6\x5b\x0b\xe5\x86\x9b\x73\x82\x79\xe2\xf3\x9a\xaa\x1c\xa2\xe0\xed\xa6\x18\x9c\xb7\x9b\x9e\x9d\x3b\x6f\x1d\xd6\x2d\x90\x00\xf1\xf5\x66\xcf\xa9\x55\x84\xba\x6f\x42\x67\x2d\xa0\x12\x56\x8c\x6b\xc0\xb5\xed\x36\xe2\xfa\xd9\x19\x67\x2b\xe9\x5d\xcf\x7a\xd9\x74\x9b\x26\x0b\x59\xe4\xa0\xad\x8e\x0b\x76\xc7\x8a\xa6\x6b\x56\xe2\x2a\x3e\xad\x8d\x4b\x93\xc9\x64\x59\x76\xab\x25\x22\xba\x71\x6b\x6b\xa7\x2d\x2b\x17\x22\x64\xe1\x7a\x39\xb6\xdd\x63\xb0\x33\xc2\x51\x82\x0d\xe9\xb5\x02\x77\x0f\xca\x19\x61\x76\x9b\x46\x6c\xbf\x68\x89\x14\x2f\x20\x56\x72\x66\x77\x91\xb4\xb6\xd2\x05\xef\x80\x3d\x75\x1f\x13\x89\xc9\xb6\x76\x2d\x6a\xcd\xd6\x18\x23\xdb\x6c\xa8\x48\x47\xf7\xa5\x04\x68\x21\x35\x21\x62\x35\x6b\x18\x8e\xec\xb5\x0b\xb8\x2b\x48\x86\x94\xfa\x58\x38\x2f\x71\x74\x56\x5c\x52\xb8\x24\x85\xc1\x1f\x41\xfc\x5b\xff\x61\x5a\x7c\xa6\x90\x19\x2d\x80\xa3\x21\x76\x8b\x91\xde\xfc\xfe\xab\x7d\x09\xa0\xaf\xd4\x0e\x13\x3e\x2b\x24\xcd\x3d\xfb\x8c\x2b\x68\x08\xbb\xa3\x6b\x80\xc7\x7a\xfe\x10\x7a\x8e\x2d\xf9\x30\x63\xa5\x58\x90\x81\xd4\x69\x58\x02\x19\x59\x6c\x63\xef\xba\xfc\xdc\x6e\x64\x61\x66\xa8\xeb\x4a\x52\x03\x3e\x6d\x6c\x06\xe2\xb8\xa1\xb7\xb6\xb2\x92\x6b\xf2\xe2\xad\x9f\xf4\x17\x29\x45\x2f\xa2\x83\x50\x26\x12\x0a\xd6\xd7\x9e\xc3\x79\x68\xf6\x19\x3a\x30\x6e\xb9\x9d\xa9\x59\x2b\xe4\xfc\x96\x68\x32\x09\xab\xaa\xe0\xf1\xbb\xec\x7b\x5a\xf0\xbc\x91\x9c\x54\x25\xb0\xbe\x37\xcb\x47\xc6\xc1\x21\xa9\x14\x1b\xaf\x1f\x94\x78\x66\x44\xe7\xf2\xf1\x1e\xcb\xf1\x47\xa9\xf2\x12\x37\x2e\x21\xdf\x09\x38\x73\x82\xe5\x56\xdb\x92\xed\x52\x30\x31\x93\x0a\xbd\x31\xcf\xbe\x61\x1d\x71\xc9\x2e\xae\xe1\xd3\x06\x7e\x1f\xb2\x75\xa0\x0f\x12\x05\x20\xee\x49\x74\x61\x76\xfd\xe6\x50\xdb\x26\xf2\xfa\x05\x9a\x25\xc7\x72\x6a\x67\xce\x41\xed\x60\x03\xfc\xbd\x9e\xb2\x02\x53\x2c\x31\x8c\x84\x49\xa0\xf7\xb6\xd1\x05\xaf\x50\x88\x51\xe3\xfe\x3c\x46\x38\x40\xb0\xd0\xbe\xb0\xa1\xa2\xae\x64\xfe\x55\x54\x34\xec\x15\x06\x1b\xe5\x3d\xe4\x1a\xbf\xb9\x78\xdd\x1c\x66\xfb\xda\x6f\xae\x63\xf8\x54\xec\xf3\x7b\x7c\xaf\x66\x66\xce\x73\x32\x75\x64\xe1\xcc\x90\x43\xc1\xee\xb1\x24\x93\x0b\xea\x36\x98\xed\x3b\x5f\x76\x08\xdb\x6f\xc6\xe7\x3a\x71\x14\xd1\x8b\x3f\xb8\x50\x2a\x53\x3e\x45\x68\xca\x5d\xf1\x93\xf7\x57\x07\x3e\xd1\xfa\x7e\xac\xee\xc7\xe3\xf1\x38\x6a\x02\xbd\x5b\x78\xd4\x59\xfb\xc6\xd1\x52\xca\x9c\xcf\x96\x2b\x3b\xc0\xde\x38\x6d\x9f\x40\xfb\xa6\x62\xe9\x26\xe0\x33\xd2\x06\x63\xf3\x32\x83\xf4\xa3\x3f\xfd\x57\x9c\xb0\x09\x59\x92\x76\x21\x78\x36\x74\xa3\x41\xfa\x4e\xd9\x82\xde\x71\x6b\x04\xcc\x50\x02\x40\x65\xad\x47\x56\xdf\xeb\x34\xd1\xd2\xc0\xa1\x7e\x31\x23\x88\x3d\x54\x50\x63\xde\x81\xca\x26\x12\xc0\x04\xdd\x94\x7f\xf4\xb4\x55\x15\x30\x28\x47\x34\xd8\x11\x7b\x2e\xcc\x83\x54\x1c\x7e\x56\xc8\x94\xda\x4e\x34\x43\x3e\x5c\xd9\xf0\x51\xb4\xc7\x17\xee\x54\x81\xd3\x44\x48\xc2\x66\x33\x96\x01\xdd\x23\xab\x16\xac\x64\x8a\x16\xdd\xae\xb9\x42\xe2\x5f\x59\x1b\x5c\xd9\x03\x8a\xea\x6a\x49\xb7\x26\x72\x22\x0e\x69\x0d\x56\x75\xce\xa3\xea\xa0\xa1\x72\x13\x30\x95\xbc\x78\x2f\xae\xa4\x34\xef\xb8\x06\x5d\x17\x92\xd3\xc8\x0b\x0c\x79\xbe\x38\xde\xe0\xe6\xf7\xdf\xa5\x14\x38\xda\x91\xa0\x88\x52\x2b\x5a\x92\x9e\x5d\x1c\x70\x7b\x6f\xd8\xeb\xb0\x09\x42\x32\xc2\x84\x51\xcb\x4a\x72\x61\xd6\x8b\x71\x56\xc8\x90\x16\xb3\x26\xdf\x69\xa6\x9b\x50\x9d\xd7\x14\xe3\xb2\x99\xf1\x79\x47\x97\x0d\xa4\xc8\x51\x63\xac\xb8\xa9\x30\x94\xea\xbe\x83\xaa\xdf\xab\x7e\xac\xb8\x12\x15\x13\x99\xaf\xbc\x68\xd4\x66\xbd\x76\xb3\xb4\x56\x1b\x34\xf4\x96\x69\x30\x2a\x59\xce\xc4\xd6\x14\x73\x04\xaf\x15\xdc\xdb\x49\x05\x0b\x7f\x45\x77\x29\x9c\xb0\x4b\x09\x72\x68\x17\x67\xec\x22\xc8\xe1\x75\xb5\x6c\xdb\x13\x05\x7e\x06\x7b\xf4\x28\xc0\xf4\xa5\x18\x2b\x29\x21\xc8\x1d\xb5\xac\x17\xbe\x76\xd5\x9a\x9a\x76\x67\x25\xb3\xaf\x98\x02\xfc\xe2\x84\xb6\xb1\x73\x23\x09\x13\xba\x56\xcc\xd3\x38\xc7\x84\x25\x24\xc3\xa8\x9f\x1b\xce\x77\x17\xaf\xc9\x4b\x72\x08\x15\x00\x9a\x3a\xfb\x4d\x92\xce\x2a\xe3\x39\x10\x58\xdb\x57\x44\x0e\xbb\x41\x2d\xb8\x8a\x4a\x42\xe2\xd5\xe8\xc6\x6d\x75\x10\xaf\x73\x57\x4c\x41\x82\x71\xd4\xdd\xf2\x45\x88\x9d\xd8\xe3\x1b\x57\x59\xac\x21\xb9\xdb\xd5\x0d\xf7\xdd\xb3\xdc\x70\x61\x64\xc2\x9e\xdf\xee\x92\xe0\x91\x2b\x99\xa1\x39\x35\xd4\xdd\x7c\x6d\x35\xaf\xed\x9b\xfb\x22\x36\xe2\x70\xff\x7d\xda\x93\x72\xff\x75\x89\x51\x77\x75\x06\xaf\xcf\xa1\x17\x1e\x60\xe9\xdc\x3b\xce\x97\xba\xee\xb7\x8a\xbf\x05\x3e\x52\xd2\xc3\x63\xd1\x31\x13\x95\x50\xa2\xa8\xc8\x65\xb9\xd6\x3f\xbb\xcd\x18\x8d\x2a\xf2\xd1\x6e\xcc\x6d\x4f\x69\x8c\x61\xfc\xc8\xb9\x4e\x38\xa5\x31\xce\xba\x95\x73\xfd\x79\x9f\xd2\xc8\xf8\x5f\x62\x30\x8e\xdd\xb1\xa2\x87\x68\xc8\x5b\x88\xc8\x73\xdd\xec\x68\x0c\xd1\x43\x51\x87\x35\x67\x71\xe7\x88\xec\x24\x06\xa4\x64\x2f\x71\xc7\x2b\x59\xb8\xea\x29\x7e\xd8\xf6\xc5\x7b\x3b\xea\x9e\x22\x5f\x37\x2e\x90\xd7\x8e\x1a\x42\x5a\xfb\x3a\xea\x3a\x4a\x07\x24\xab\xa3\xb6\xaa\x64\x77\xd4\xa0\x6e\xed\xe3\xa8\xbb\x94\xe1\xbb\xba\x7b\x5d\x2f\x06\xb8\x46\xe7\x19\xe0\x1a\x4f\x0d\xd7\x08\x38\x54\x29\x44\xc3\x3a\x00\x8a\xcf\x15\xb4\x01\xc9\xe7\x76\x16\x19\xe6\xb8\x55\xd4\x2c\x46\x44\xb1\x82\x1a\x7e\xe7\xf3\xe7\xc8\x2d\x3a\x5f\x0e\x3a\x0c\xb6\xfe\x20\xb6\x78\x16\xa4\xd5\xe8\x09\xe3\xb1\x09\xd7\x81\xbf\xb9\x7c\x7f\xe3\x7f\x07\xb9\x55\x9e\x3c\x2d\x9a\xfa\x66\x5f\x6e\xc0\xa7\xc1\x7e\xac\xae\xd3\xd3\x41\x3f\x62\x73\x3b\x37\x43\x3f\x9e\xe3\xc0\x7d\x1a\x1c\x64\x15\x0c\xd2\x53\xe3\xab\xc8\x90\xf5\xb7\x27\x2d\x51\xca\x4d\xbf\x56\x47\x65\x37\x48\x11\x9f\xfa\x01\xe0\x10\x1d\x1a\xd8\x40\xac\xc8\x15\xb0\x28\x82\x93\x0b\x1c\x62\x5c\x20\x26\xb6\x59\xc1\x11\xec\x9e\x3c\x8a\xd3\x8c\x20\x6e\x63\xb5\xc8\x6c\xa5\x78\x49\xd5\x92\xbc\xb9\x78\xed\xaa\x65\xb9\x08\xea\x61\x98\x94\x72\x84\xd9\x12\x88\x6a\x29\x59\x39\xc5\xb0\x6a\x4c\x18\x73\x8d\xbc\xbb\x53\x58\xb3\xa9\x6c\x57\xf3\xfc\x71\x0f\xe0\xaa\x3b\x21\xa2\x1b\x42\x86\xe5\x03\xfc\x8a\x28\x28\x2a\xe0\x9c\x1e\x62\x19\xba\x0b\x5a\x05\x6a\x4f\x66\x01\x7a\xab\x8d\x15\x7f\x18\x89\xe6\x77\x2c\x66\x26\xd8\x1d\x13\x8e\xc9\x72\x09\xef\xb4\x2a\x21\x17\x59\x51\xe7\xbe\x83\x5c\xc3\xde\xfd\x8c\xf4\xce\xed\x33\x71\x48\x6c\x36\x0e\x49\xf6\x20\xa6\xf9\x10\x7b\xa4\xac\xb3\x8f\xab\xd5\xb5\x0b\x09\x79\x8d\x4d\x43\x0a\x03\xa1\x8d\xb8\x6c\x88\x3e\x72\xdf\x39\x24\x87\x08\x8a\x60\x1e\x93\x49\xc3\x1b\x5e\x8b\xa6\x2e\x4b\x44\x1f\x7c\x0b\x87\xab\x16\x98\xbf\x3d\x8f\x5c\x99\x60\x1f\x31\x2b\x68\x2d\xb2\xc5\x70\x34\x1e\x7b\xba\xb4\x4a\x30\xbb\x0d\x4e\x89\x92\x5b\xbb\x6d\x0b\x52\x51\x45\x4b\x66\xac\xd2\xeb\xdd\xb1\xd1\xa7\x30\x9a\x50\x29\xc5\xe8\x8c\x4c\x51\xf3\x7f\x1a\x53\x05\x83\xf4\xc0\x01\x15\x9b\xe6\x46\x56\x17\xf6\xb2\xe1\xfd\x71\x5d\x82\xe2\xf8\x71\xcb\x48\xfa\xa0\x50\x82\x19\xed\x65\x68\xdf\x83\x53\x7e\x5f\xc6\xd6\xab\xac\xef\x96\x2e\xdd\x95\x0b\xec\x1f\xd8\x8b\xb6\x6e\xb6\xcf\x44\x7b\xfa\x10\x94\xb7\xf7\x1c\x83\x09\xed\xa8\xc6\xab\x91\x9b\x90\x52\x21\xb2\x03\x1f\x09\xf8\xee\x16\x47\x10\x7f\x23\x41\xcd\xb3\xcf\x2a\xa2\x33\x2f\x35\x3d\x53\x0c\x88\x11\x69\x71\x5d\xb1\x6c\x97\x0e\x8f\x37\xef\xae\x4f\xbb\xbd\x81\x7b\x1e\x29\x07\x17\x0c\xbe\x0f\xaa\x4c\xdc\xb3\xe9\x42\xca\xdb\xc8\xc6\x0e\x37\x54\x7b\x0b\x64\x8a\xe6\x73\x7d\xe2\x04\xc3\xd8\x4e\xd3\x11\xe1\xa2\x80\xeb\xda\xeb\x43\x50\x17\x03\xcd\x92\x84\x01\x93\xac\x19\x31\x6c\x28\xc7\x99\xe2\xf4\xae\xf5\x29\xb9\x4c\xca\x4e\x4e\xbe\x52\xd6\x77\x4c\x3c\x21\x5f\x67\xd7\x3c\x32\xd2\x0d\xf5\x08\x37\xce\x1a\x06\x0c\x76\x32\x25\xce\xc7\x6c\x8d\xd1\x5d\x9e\x9e\x6f\xdb\x6e\x90\xdc\x2a\x91\x25\xec\x56\x3e\x0b\xe5\x79\xe0\x86\x6a\x20\x7d\x07\xf6\x2f\x89\xfb\xd3\x83\xd4\x50\x14\x21\xa7\x45\x81\x7a\xc2\xc4\xf3\x9a\xfb\xe0\x4d\x9b\x6c\xdf\xd0\x17\x36\x36\x7b\xa7\xff\xb1\x8a\xa0\x7d\x0e\x31\xc7\x05\xd8\x35\x5a\xda\x6d\x97\xe2\x5f\xf2\x07\xdb\xb7\xb0\xad\xb0\x12\x02\x90\xce\x89\xf1\xe6\xaf\xa3\xd0\xf2\x04\xe0\x95\x8d\x93\x65\x64\xd7\x23\x7c\xbd\xdd\xdf\xaa\x86\x09\x11\xf0\xc5\x25\xd6\x28\xc0\xb9\x0a\x71\x19\x46\xc2\x2f\x53\xb6\x78\x1c\x38\x8e\x84\x00\xb9\x9e\x4e\x7b\xf4\x2e\x07\xb0\x9c\xeb\x87\xbd\xff\xbd\xd6\xf4\xf4\xe0\x39\xb2\x02\xa0\x03\xc7\xd4\xd3\x83\xe8\xc8\x66\x20\xdd\xba\x8a\x74\xfc\x34\x50\x3a\xb2\x6b\x5c\x27\x49\x20\x3f\x62\xea\x8e\x67\xec\x34\xcb\x64\x2d\x9e\x95\x8e\xe2\x35\xb3\x43\xa6\x86\xe5\xd7\x9d\x3e\x20\x28\x20\x6f\xbe\x25\xb4\xe0\x54\x83\x0f\xa7\xfb\xc3\x98\x12\x57\x6d\xa3\x80\x40\x58\x19\xbe\x3b\x31\xda\x30\x1a\xc5\x2c\x91\x38\xfb\xcf\xcd\x06\xb6\x3e\x9d\x9b\x74\x89\x95\xd5\x71\xb0\x83\x55\xc2\xbb\x2d\x9b\xfe\x34\xe2\x43\x43\xf5\xad\x3e\x69\x42\xaf\x50\x90\xa6\x11\x54\xc1\xe7\x6e\x1a\xc7\x14\xfb\x78\xf2\x3c\x4b\x67\xec\x5d\x64\x67\xea\x54\x7f\xf3\xff\x7f\x7d\xf9\xcc\x3c\x6e\xfe\x4a\x74\xa5\x51\x16\xae\x2f\x8d\xed\x19\x96\x5c\x0d\x0b\x8f\xd9\xae\x8e\x88\xa2\x18\x38\x5e\x50\xbc\x10\x0a\x46\xd1\x7d\x4a\x0e\x03\x56\xbe\xad\xaf\xf3\x0b\x41\x5a\x00\x26\xaa\x04\x23\xdc\x23\x25\xa3\x42\x07\x75\xf1\x18\x74\xc4\x47\x35\x9a\xde\xa3\x21\xe9\x76\x9e\x73\xf9\x1d\xfa\xd8\x67\xf7\x17\xda\xa8\x3a\x33\xa4\x36\xda\x7e\x1e\xd3\x55\x7f\x31\x7e\x42\x67\x15\x9b\x73\x6d\x94\x2b\x66\x68\x9b\x6f\xbb\xec\x9c\xcb\xcd\x4f\x6e\xd9\x92\x7c\xfb\xf7\xf3\x7f\xfe\xfc\xf6\xfd\xd9\xe9\xdb\x9f\xdf\x9d\x9e\x7d\x7b\x71\x79\xfe\xe3\x8f\xd7\xff\xbc\xbe\x39\x7f\xf7\xe3\x8f\x67\x58\x16\xdc\xd5\x1f\xbc\x66\xe6\xc7\x1f\xdd\x19\xd3\x3f\xfe\x78\x93\x55\xbc\xfa\xf1\xc7\x89\x77\x73\xc2\x3d\x6a\xa7\x2a\x82\xcf\x0d\x4b\x1b\x35\x19\x1d\xa0\xdf\xe1\xf2\xc3\x28\x17\x54\xb7\xc9\x89\x09\xd4\xa7\x90\xab\x11\x23\x2e\xb7\xd7\xb5\xf4\x82\x2a\xe6\xf4\xc2\x4b\xef\xec\x7f\x56\x91\xb9\x80\xc8\x1f\xd1\x5c\xcc\x81\xa5\x01\x55\xd4\x96\x61\x7c\xca\xcc\x3d\x73\x45\xc4\x56\x55\xab\xf8\x3c\xfe\x96\xde\xdb\xa5\xa6\x77\x38\x75\x1d\xac\xc1\x15\xb8\xb9\xe3\xec\x1e\xab\x2c\xf3\xb9\xa0\x85\xef\x23\x73\xa5\x29\x11\x31\xd2\xfe\xfd\x96\x3d\x09\x79\xd5\x2b\x99\x8f\x3c\xcf\xdf\x4a\x50\x7a\x2d\x20\xdd\xa1\x34\xa5\xda\xf6\x8d\xe5\x64\x72\xf1\x9a\xbc\xda\x76\x32\xc0\x36\xb8\x78\x0d\x2d\x5f\x6f\xda\x10\x8d\x23\xca\xaa\x78\xa8\x0f\x26\x53\x55\x3d\xf7\x46\xaf\xa7\xb9\x2c\x29\x17\xbb\x65\x07\x9d\xd5\x45\xb1\x24\xff\xaa\x69\x81\xda\xeb\x44\xe6\xeb\x37\xcd\x8b\xbf\xfa\x8f\xfe\x76\xfc\xd7\xa6\xe3\x7f\x3b\xfe\xab\xa7\x85\x87\x45\xf9\xdb\xb1\xbe\xcb\x8e\xff\xea\x8a\x53\x12\xf7\xa3\xad\x29\x6b\x3e\x42\x29\xda\xc8\x39\xea\x5a\x40\x5a\x7a\xb0\x73\x9f\x45\xa3\x43\xa7\x02\xe0\xc1\xde\x28\x9a\xb1\x09\x53\x1c\x4c\x03\x29\xf2\x67\xa5\x16\xf5\x3b\x98\xe4\xb5\xa2\xbe\x94\x9a\xc6\x7e\x34\x73\x26\x18\xcb\xd1\x52\x73\xdd\x66\x64\x6e\x7b\x0d\xeb\x7e\x0c\x46\x15\x70\xfd\x67\x8a\x51\xcc\xd5\x77\xc4\xff\xbe\x80\xfc\xb6\xcb\x87\x21\x12\x0f\xf1\x13\x52\x8c\x05\x9b\x23\xe4\xce\xc5\xc4\x91\x06\x03\xaf\x59\x2c\x9d\xd9\xc0\xbb\xb4\x91\x15\xe1\x65\xc9\x72\x4e\x0d\x2b\x96\xe4\x8e\x6f\x5b\x52\x00\xd4\x0a\x20\x30\x45\xe1\x78\x28\x24\x91\x10\x03\xae\x05\x77\xe1\x9a\x45\x6d\x48\x2e\xef\xc5\xf6\x2a\xc5\x0c\x65\x34\x76\x9e\x6b\x22\x78\x31\xea\xb0\x1c\xc3\xe4\x92\x0a\xf6\x44\xb7\x7e\x41\x94\xd5\x81\xb6\x7e\xe7\xa5\x4e\x81\xdf\xb4\xe8\xc8\xd1\xef\x48\xa9\xdc\x95\xa0\x6a\x01\x6c\x2a\x2d\x29\x3b\x82\x45\x98\xd8\xd6\xcf\x4e\xc3\xad\xef\xa7\xd7\x5f\x0e\x98\xb3\x83\x97\x58\xd8\xbc\x6d\x6b\x26\x55\xc6\xa7\xc5\x92\x2c\x68\x61\x98\x23\x3a\xa1\xe1\x2a\x6d\x3b\x29\xd7\xcc\x84\x0b\x51\x48\x31\x0f\x75\x5d\xf6\x50\xb1\x0c\x6a\x49\x58\xa1\x5c\x57\xd8\x3b\xab\xc6\x2d\x65\x1d\xed\xff\x08\xfd\x1e\x7f\x78\xe9\x27\x7d\x07\x55\x92\xb7\x82\x85\x18\x59\x30\xdc\x29\x29\xc2\x69\x23\xad\xf4\x81\x0e\xdf\xfe\xb9\x90\xe4\x46\x78\xdd\x7c\x05\x14\xd8\x72\x37\xcd\x90\xc1\x8f\x61\x0c\x05\x72\x6b\x2b\x62\xf1\x1b\x20\xd5\x5c\x12\xab\x15\xb9\x32\x6e\x8e\x0d\x7e\xfb\xa0\x98\x3d\x58\x8a\x57\x05\x23\x7f\xbd\x65\xcb\x11\xd6\xeb\x46\x75\xfe\x6f\xa4\xd6\xde\x76\x69\x2a\x64\xca\xca\x76\x40\x2a\xf2\x57\xff\x5f\x7f\x7b\x46\x4e\xdf\x94\x30\x1c\x0e\x6a\x57\x34\xbb\xe7\x48\xdf\xd2\x2d\xe3\x8d\x0b\xe8\x98\x5d\x8c\xc4\x59\x3e\x26\xe7\x40\x77\x8f\x06\x24\x12\x03\x5a\x4b\x20\xfc\x71\xa4\x67\xf5\x1f\x3e\x9c\xda\x16\x48\x06\xc7\x7d\x40\xd3\x72\x29\x1d\xbf\x33\x1b\x91\x09\x94\x43\x68\x3f\x01\x51\x7c\x29\xcf\x1f\x58\x56\xc7\xb1\x03\x27\x85\x80\x6e\x59\x04\xf5\x51\x3f\xab\xf7\x77\xb6\xf4\xb7\x22\x2e\x83\xb5\xcf\x1b\x12\x87\x56\x44\x05\xf9\x46\x1f\x5e\xc6\x5b\xb6\x7d\xa1\x0f\x7c\x2e\xbc\x5f\x03\x7a\xe4\x78\xd5\x9b\x53\xe9\xb5\xa2\xf3\x07\xae\x8d\xfe\xff\xa1\x3c\xc9\x64\x39\xf5\x97\x2a\x76\xc7\xef\x35\xe8\x91\x5f\x7d\x91\xc3\x3f\x63\xbb\x96\xb4\xb6\x7e\x00\xbb\x5a\xe0\xf7\x7e\x02\x15\xab\x14\xd3\x10\x73\xa6\x76\x2a\x0e\xb4\x4b\xe8\x90\x02\xd8\xac\x5c\x44\x02\xe6\x2c\x6e\x01\x3d\xf6\x1f\x1b\xc4\x53\x87\xcb\x05\x4b\x70\x6e\x2d\xa5\xe3\x8e\x2a\x80\x1f\xc5\x89\x1d\x7c\x31\x87\x32\xe0\xfc\x8e\x16\x0c\xdd\xaf\xf7\xbc\xc8\x33\xaa\x10\xd6\x88\x42\x9f\x68\xe9\x72\xe6\x90\xbe\x3e\x2a\x80\xd5\x68\x03\xac\xdd\xec\xda\xc1\x99\xa8\x32\xff\x1f\x7b\xef\xda\xdc\xc8\x8d\x25\x88\x7e\xef\x5f\x81\x50\x6f\x44\x49\x6e\x92\xaa\xb2\xfb\x35\x75\xe7\x4e\x87\x5c\x92\x7b\xb4\xae\x87\x56\x92\xed\xd8\xdb\xd3\xbb\x06\x33\x41\x12\xa3\x24\x90\x06\x90\x52\xb1\xa7\xe7\xbf\xdf\xc0\x39\x00\x12\x49\x51\x14\x95\x80\x44\xaa\x2c\x74\x44\x97\x45\x26\x81\x93\xc0\xc1\x79\x3f\x78\xd1\x54\x54\x11\x4b\x01\xa7\x52\x2d\x9e\x1c\xcd\xda\x9b\xda\x4b\x9b\xc2\x91\x03\xdf\x2e\x97\x01\x89\x11\xcf\xcc\x82\x28\x2e\x27\x28\x59\x2e\x91\x99\x7d\xcc\x52\x71\xb7\xbd\x17\x04\x72\xe2\x19\x4f\xa0\xe8\x03\x34\xec\xdc\x70\xcd\xe2\x90\x1c\xae\x09\x9f\x0a\xa9\x58\x79\x10\x09\x20\x81\x16\x8e\xc8\xb7\xa1\xeb\x46\x9f\x88\x70\x2b\x71\x79\x4f\x32\x14\x16\x74\xef\xe6\x08\x95\xc3\xa6\x96\xf4\x4e\xa4\x62\xd7\x4c\x91\xfd\x52\x62\x6b\x89\x6b\x5e\x98\x83\x11\xf9\xff\xac\xa2\xd7\xd7\xf9\x16\x34\x48\x47\x0c\x43\x55\x48\x57\xb3\x91\x6a\xf2\x9a\xec\xc3\x52\xb1\xf6\x78\xe0\x03\x48\xf4\x42\x1b\x96\xd0\x97\x73\x5b\xc1\xdc\xbd\x03\x17\x73\x5c\x82\x1f\xbd\x8e\xdb\x1e\x2e\x6a\x5b\x4b\xd8\x1e\x5a\x1d\xc9\x24\x96\x19\x98\x24\xd7\x8e\x2e\x76\xdc\xab\x21\x62\xc3\xf3\xd4\x70\x17\xfe\x13\x62\x04\x88\x62\x53\xa0\x5e\x48\x7b\x9e\x67\x9b\x78\x23\x6b\x59\xc9\xe9\xe2\xa2\x56\x8c\x96\xef\xa4\xd0\x46\x01\x8d\x7e\x4a\xb3\xd2\xe5\x5d\x40\x44\x1d\x70\x67\xf2\x86\x50\x97\xfc\x22\x27\x96\x23\x69\x22\x9b\xe9\x0c\x7b\xb8\xc0\x0f\x09\x2d\x94\x84\x06\xd2\x38\xdd\x43\x55\x36\xb0\xed\xe9\x91\xef\xe7\xe2\xed\xcb\xa1\x41\x0c\xac\x09\xd6\xf6\x1b\xba\x70\x54\x89\x8e\x79\xc9\x74\x94\x30\xed\x41\x7f\x28\x3a\x1c\x59\xee\x78\xe7\x3e\x58\x99\xe0\xe8\xe3\xf1\x43\x43\x19\xb6\xa7\xf2\xde\x75\xa4\x41\xdb\xc0\x13\x6d\xcf\x2e\x28\x94\xb0\xcb\x74\x2e\x9d\xa2\x39\xe5\xd7\x4c\x84\x9d\x79\x26\xed\x62\xe6\xf4\xf3\xc5\x15\xbb\xe9\xf1\x4b\xff\xa2\xdf\xb3\x87\x27\x49\x0c\xc1\x1a\xf6\x83\xd0\xd4\x70\x3d\xe1\x74\x5c\x3d\x65\xcf\x1a\x28\xb2\x70\xc1\x2a\x56\x6c\x51\x6c\x7f\x1f\x03\xe1\x0b\x85\x86\xbe\xd9\x1d\x1c\xeb\xc7\x3a\x20\xd1\xa7\xb5\xb0\xb8\xec\x34\xa8\x2f\xa1\xfd\xb2\xf6\xb2\x42\xcc\x00\x2e\x1d\x82\x02\x31\x0a\xa2\x99\x8f\x99\xf2\x24\xac\x9f\x78\x04\x26\x47\xae\x96\x3a\xaa\x7a\xd4\x71\x84\xec\x19\xf6\x04\x87\x2d\x3d\xf9\x6c\xe5\x5e\xdd\x2f\x25\x00\x47\x07\x93\x96\x27\xc5\x50\x20\x9f\xdd\xb5\x74\x74\xee\xd2\x43\x53\x3f\x74\x1a\xc4\x9f\xf4\x25\xc3\xed\x48\xc9\x81\xc2\xd1\x3b\x13\x0a\x47\xae\x56\xdc\x90\x50\x7c\xe7\xde\xe1\x1e\x87\x6f\xe2\x72\x4f\xce\x80\xae\x07\xa8\x4e\xa3\xaf\x17\xfa\xd3\x39\x61\xcc\x3e\x9c\x00\x16\x28\xe7\x4e\x1d\xb9\x62\x0b\x98\x1e\x57\xec\xdf\x75\x20\xf1\x5a\x78\xc0\x52\xf2\xbb\x70\x0c\xed\x2b\x25\xfd\xde\x6f\x73\xef\x49\x52\xef\x38\x8e\x9e\xa6\xbb\x76\x74\xf0\xf8\xaa\xb5\xc6\x21\x4e\x76\xac\x71\x2d\x5d\x6e\x6d\x71\x49\x6b\x27\x67\x87\xe1\x48\x31\x71\xb5\x23\xdf\x85\x8e\x61\xda\xc4\xec\x45\x89\x6b\x7f\x9c\x7a\xbd\x70\xac\x32\x83\x9d\x8a\x01\xf9\x28\x8d\xfd\x27\xb2\x88\x1d\x4b\xa6\x3f\x4a\x03\x9f\xec\xc4\x49\xe2\x06\xec\xd2\x39\x3a\xab\x05\xb6\xfe\x04\x76\xe3\xa2\xdb\xac\xa0\xe0\xce\x6b\x95\x1a\x7c\x2a\x88\x54\x6e\xcb\x13\x41\x08\x9a\xb4\x76\x00\xc4\x0e\x7a\xd7\x9f\xed\x4e\x45\xdc\x42\x11\x1f\xf3\xa3\x01\xe3\x00\x81\x1e\x01\xf8\x0d\x07\xd3\x5b\x05\x09\xdf\x65\x03\x1b\x46\xed\xce\x51\xc3\xa6\x0f\x4e\x71\x5c\x1e\x73\xa6\xa6\x8c\x40\x77\xda\x1c\x98\x9b\x22\x48\xe0\x48\x14\x27\x62\x60\x92\xaf\x51\xe6\xf4\xd2\x47\x9c\x14\x64\x4a\xd0\x35\xf2\xc8\xa8\x09\xf7\x3d\x02\x05\xa5\xae\x39\x05\x03\xc9\x7f\x05\xef\xed\x7f\x93\x9a\x72\xa5\x47\xe4\xc8\x47\x18\xc6\xdf\xb9\x20\x8d\x68\x9a\x04\x50\xea\xdb\x8e\x05\x2a\x08\xc3\xea\x37\x16\xaa\x65\x61\x7c\x40\x6e\xa0\x77\xbe\x65\xd8\xc1\xb8\xbc\x77\xc5\x16\x7b\x83\x84\xfc\x3e\xd2\xa1\x28\x7b\xa7\x62\xaf\x0d\x29\xec\x50\x81\x20\x93\x42\x4f\x90\x3d\xf8\x6e\xef\xf1\xe4\xfe\x24\x09\xb2\xad\x17\x73\x96\x41\x04\x4b\xbc\xb2\x9d\x3b\x35\xa7\x75\xda\x95\x6a\x91\xef\xfb\x1e\x6d\x57\x49\xa6\xdb\xf4\xa1\x03\x85\x57\x61\x8c\x53\xd5\x5b\xc9\x52\x63\xfe\x7d\x05\x3e\xfa\x99\x33\x0b\xca\x6b\xa6\xd0\x24\xd8\x6b\x6d\x34\x82\x59\x5e\x13\x42\xed\x69\x55\x34\x56\x95\x29\x11\x1f\x61\x61\x8b\x87\xde\xa2\x51\x49\x79\xd5\xd4\x1e\x9f\x21\x0c\xb7\xef\x8d\xe1\xa2\x90\x73\x67\x17\xc1\xf7\x04\x4b\xb8\xbb\x98\x43\x17\xf1\x84\x34\x26\x5c\x05\x8c\xa9\xea\x58\x7d\x7a\xfa\x07\xe3\xcd\x0c\x06\x5e\x66\xd9\x7e\xb0\x07\xb6\xdb\xbb\x76\xab\x7a\x01\xe0\x63\xed\xe3\x5d\x70\xdd\xbb\xe8\x3c\x38\xd6\x27\x52\x8d\x79\x59\x82\x2d\x12\x81\x0b\x09\x5f\x4b\x88\x63\x29\x4d\xc7\x0e\xd5\x8f\x68\x2c\xcd\xba\x22\x0f\x7e\xd9\xd8\x25\x5e\x99\x3e\x61\xc9\x38\x60\x11\xd0\x99\x4a\x69\x27\x0a\xaf\xb8\xbc\x35\x1e\x11\xec\xee\xf7\x5a\x69\xcc\xbc\xfb\xd0\xb2\x24\xd1\x54\x95\x95\xf6\x40\x10\x43\xb3\x0c\x7a\xfa\x80\x24\xbb\xa0\x84\xa9\x25\xd2\xa6\x8b\x6c\x0f\xef\xd3\x8e\xe3\xd2\x45\xbc\x53\x32\x66\x86\x3a\xae\x63\xcf\xcc\x51\x7c\xd4\x23\xbb\xbb\x7f\x2a\xce\x64\xd9\x35\x69\x93\x09\xa3\xa6\x51\x0c\xdb\x59\x63\xdd\x18\x26\xe8\xb8\x62\x25\xd9\xf7\xff\x31\x5e\xf4\xce\x7a\x21\xc9\x42\x5e\x82\x68\x97\x93\x3b\xa4\x4b\x5c\xce\x9a\xbe\x3d\xbe\x00\xcb\x47\xbe\x28\x8c\xbe\x9d\x2a\x86\x65\x43\x81\x2c\x01\x99\x9a\x63\x6c\x73\x23\xd8\x35\xb3\xe8\x5b\x72\xed\xba\x5e\xf7\x94\x1c\x20\x40\xeb\xe7\x5b\x66\xfd\xff\xf7\x58\x7e\x94\xc6\xfb\xa9\x7e\x1e\x38\x8f\x39\x0a\x72\x9f\xf9\xbc\x99\x63\xbb\x31\x63\xac\x12\xc3\x27\x13\xa6\x7a\xf6\x54\x20\x21\xf9\xa4\x6b\xbc\xee\xba\x6b\x1c\x99\x30\x54\x4d\x21\x63\xda\x19\xa2\xbd\xcc\x35\xad\xe4\x98\x56\x64\xce\x85\x05\xad\xdf\x4e\x5c\xde\x9a\x27\xbc\xb1\xfb\x73\x0d\x70\x20\x84\xf2\x29\x1f\x57\xcc\x59\xc7\xfb\x85\x48\x28\x17\x3d\x3e\x59\xda\x8d\xa5\xc9\x81\xbe\x54\x4c\x6b\x8c\x0f\xfe\xc0\xc5\xb1\xf3\x2d\xf6\x5a\xf6\x3b\x4b\x1e\x3f\xd3\x79\x5d\x31\x2c\xc1\x48\xbe\x19\xfe\x43\x0a\x46\x5c\xde\xc3\x20\xa0\xa8\x4b\xe4\x31\x92\xbc\x41\x89\xb7\x0e\x75\xc9\x7c\x82\x4d\x2f\x08\x3a\x84\x37\x78\x5b\x35\xf9\xfa\xf0\xeb\xc3\x37\xfd\x48\xcc\xa9\xcb\x3d\x2a\xa8\x76\x4d\x89\x6e\x9f\xee\x83\xb3\x78\x70\xfc\x93\xd8\xdd\x79\xe3\xfe\xfd\xda\xfd\xfb\x0d\xf9\x67\xcf\xd9\xc8\x19\x39\xeb\xfc\x6b\xff\xe9\x39\xdb\xd0\x22\x4f\x74\x5c\x6f\x06\x5d\xe6\x5a\x50\x81\x9c\xcf\x32\x7a\x77\xbf\x41\xdc\xc3\x57\x00\x3e\x53\xc8\x39\x83\xad\xff\xfa\xff\xe9\x27\x6c\xe2\xbc\x10\xa2\x6f\x88\x14\x6e\xf6\x37\xfb\xb0\x5d\x07\xe4\x06\x02\x1f\xe6\xf4\x0a\x3d\x56\x47\x85\x69\x68\x65\x01\xde\xff\x66\xf8\xe6\x80\x48\xd1\x79\xbc\x17\x08\xd7\x5c\x5a\x81\xcd\xef\xc4\xfe\x9b\x9e\x45\x1e\x96\xb7\xf3\xeb\x15\xdb\xd9\xd9\x49\x78\x5b\x2a\x16\xf0\x0a\x79\x69\xb2\x27\xc7\x47\x62\x71\x43\x17\x81\x28\x7b\x79\x7d\xca\xaf\x19\x99\xf1\xe9\x0c\xca\x21\x24\xb4\xb9\xc1\x42\xaa\x48\x63\xb9\xef\x1d\x86\x80\x2c\x08\xef\x29\xfe\x9d\x9a\x57\x1a\x42\x5a\xd0\x49\xe1\x2a\xdd\x84\x44\xb5\x90\x7d\xf2\x06\xc8\xca\xeb\xa5\x4a\x1f\x5b\x8e\x73\xfa\xe6\xeb\x87\xcb\x14\x81\x26\x6f\x4d\xac\x08\x10\x74\x2a\xa4\xdf\xe6\x66\xcb\xcc\x25\x01\x6b\xef\xe1\x5a\xc0\x28\x02\xf3\x0c\x6c\xfc\xca\xa9\xc3\x2d\x47\x6b\x77\xaf\x9f\x61\xf6\x4c\x96\x21\x42\x84\x38\x79\x1a\x22\xeb\x34\xd9\xeb\xb2\x81\x3d\x88\xb4\x0b\xe6\x1b\x57\xaf\xd6\x29\x7c\xae\x7d\xac\xbf\xfc\x49\xdd\xdb\x08\x39\x12\x65\x9b\x4e\xd4\x73\x97\xd8\x2f\x0d\xad\xc0\x7a\x3d\x85\x40\x41\x95\x67\xbf\xa2\xc4\xa3\x4e\x82\xb5\xa5\xc5\x2d\x35\xef\xf9\xda\x78\xef\x75\x53\x41\xa8\xe5\xfd\xef\x9f\x15\x13\x74\x1b\x6b\x05\x6a\x67\x08\xb6\x9a\x4b\x6c\x39\x28\xbc\xf8\xef\x42\x2f\xa4\x33\x4c\x24\x5d\x86\xd3\xc9\x8a\x7c\xba\x36\x78\x0b\x3b\x18\xdb\xeb\x08\x75\x9c\xe2\x9b\xea\x8e\x18\x44\xac\x94\x70\xef\x28\xc3\xc2\x91\x40\xdd\x45\x99\xd7\x09\xd7\xbc\x7d\x37\x69\xf0\xfd\x7e\x5a\xe6\x56\xc1\x01\xd2\xd1\x24\xfa\xea\xd4\x7d\x24\xd4\xaf\x07\x4b\x1b\xeb\x3e\xff\xc3\x53\x09\xae\x5f\xf7\x13\x5c\x1f\x5d\xba\xc4\x7f\x7b\x2b\x49\xed\xcd\x5d\x79\x61\xff\xb0\xdf\xee\xfa\x01\xc4\xf8\xdf\xa2\xb8\x50\x1b\xab\x0d\x73\xee\x79\xc5\x9c\x7c\xaf\xb9\x69\x28\x96\xe0\x12\xec\xc6\x25\x55\x47\xc7\xba\x74\x44\x91\x99\xcb\xcb\x6c\xfd\x08\xcb\x98\x15\xb4\xd1\xf6\x56\xcf\x6b\xab\x7f\x13\x6d\xd1\xcf\x9b\x0c\xbf\xd9\xff\x86\x0c\xc9\xeb\x03\x7b\xbd\x05\xd2\x16\x40\xc1\x58\xe2\x86\x56\x18\xa8\xe9\x99\x99\xd5\xf5\xed\x39\xf7\x24\x73\xdc\xf7\x5a\xed\xca\xbd\xcf\x4f\x6e\x12\xb2\x64\x47\x93\x09\x17\xdc\x2c\xfa\x76\x9f\xcf\x23\x3f\x7d\xbc\x05\x49\x24\x47\xcd\xe4\x0d\xb9\x71\xd5\x04\x00\x97\x5d\x51\xbc\x18\xfc\x43\xfb\x47\x92\xe9\x1a\xb8\x65\x10\x46\x9c\xca\x11\x04\x02\x47\x6d\x2c\xde\x8d\x5c\xe6\xbc\x6b\xed\xd1\x67\xad\x21\xf9\x77\x29\xa4\x7a\x8b\xda\xa1\x05\x5d\xb7\x42\xc8\x9d\xaf\xe5\x18\x4c\x5c\x4d\xbf\x23\x3e\xf5\xe4\x9f\x43\x72\x0a\x16\xdc\xb7\xf7\xad\x1c\xec\xbc\x50\x46\xa1\x0c\x1c\x6f\x1d\x40\xfd\x58\xd0\xdd\x79\xf2\xc0\xcc\x39\xfa\x02\xbb\xbe\x49\xfb\x2d\xec\x2a\xa9\x01\x81\xfa\x5a\xa6\x62\x83\xf2\x10\x9b\xea\x79\xeb\xb0\x4f\xd2\x8f\x2c\xc2\x76\x55\x8b\xbc\xa7\x76\x17\x34\x97\x02\xb1\x77\x9d\x8d\x79\x52\xd1\xa7\xcd\x2f\x20\xee\xaa\x5f\x42\xf8\xf9\xf6\x2f\x7a\x0c\xc7\xda\x6b\x8e\xbd\x9c\x30\x68\x7e\xf9\x7a\xf6\x5a\xfd\x29\xae\x34\xde\x0c\xcb\x16\x65\x63\x1c\xf4\x03\x42\x2b\x09\x4e\x2e\xcb\x2c\xed\x47\xac\x74\x0f\x4e\xa4\xf7\x85\x2d\xfb\x66\x7a\x81\x31\x83\x6a\xa4\x6d\x7a\xcd\xa0\x73\x47\x73\x10\x08\x7f\x20\x1b\x90\x84\xa7\xbe\xfe\x08\xe6\xcb\xfd\x5f\xf5\xe3\x36\x15\x61\x7b\x59\x91\x01\x04\x6f\xed\xbf\x62\x20\x95\x01\x5a\xa1\x27\x72\x04\xbb\xe9\xec\x60\xae\x4e\x0f\x3a\xeb\x9d\xa0\xc9\x75\xef\xb0\x59\xab\x8a\x70\x28\x78\x5c\xd0\x2a\x56\xda\xac\xb2\xc8\x4b\xa6\x50\x54\x1c\xb3\x4e\x0d\xab\xbe\xd9\x2a\x38\x7e\x6a\x67\xc7\x7a\x57\x50\x88\x01\x17\xff\x37\x2c\x1d\xbc\x37\x6e\x8a\x2b\x66\x7c\x58\x8b\x82\x1a\x33\x75\x63\xc8\x98\x56\x54\x14\x96\x52\x80\x16\xd0\xcf\xcb\x31\xf1\x7e\x13\x23\x11\x00\x5c\xad\xf7\xdb\x60\xbf\x8d\x50\x3d\x09\x5f\x21\xca\xfe\xe5\x42\x1b\x0b\x35\xa6\x05\xa7\x6d\xde\x51\xa5\xe5\xc0\xf2\x04\xbf\xe8\x2d\xcf\x0f\x2e\xef\xfe\x1b\xa3\x8f\x9c\x34\xc5\x98\x71\x45\xf7\xa2\xd0\x1f\x39\xe9\x05\xc7\x6d\x39\xd9\x55\x39\xee\xf2\xb2\x7e\x2f\xc9\x46\x53\x88\x9d\x5c\xba\x1e\x7b\xdd\x6a\x97\xbe\x80\xd6\xde\x00\x4f\xd1\xde\x12\x57\x07\x15\x5f\x1e\x94\x1b\x6a\x52\x77\x5c\x94\x50\x5d\x79\x19\x98\x30\x6b\x17\x2a\xab\x44\x79\x88\xc0\x44\x90\x1f\xa2\xd5\xb6\xec\xa7\x26\x9f\xb7\x1c\x04\xdb\x22\xa2\xb7\x6d\x3f\x5d\x01\x0a\x52\x94\x68\xe5\x6b\x24\x59\x81\x87\x4f\xac\xc6\x5a\x4a\x86\x31\x25\xe8\x5b\xe8\x69\xb9\x64\x5e\x6a\x6a\xed\x6b\x7d\x65\x8a\x8e\xad\x8a\xec\xfb\xd0\x0a\x62\x58\x55\x21\x77\x68\xcd\x89\x42\x62\x66\xa8\x7f\xba\xaf\x63\x64\x48\xba\x7e\x9d\x95\x8b\xc5\x0b\xf9\x92\x57\xe0\x76\x5e\x84\x46\x9e\x7d\x23\x98\xc7\x8d\x21\x53\x7e\x6d\x05\xbc\x5b\xce\xa3\x55\x8e\x20\x74\xde\xcd\x58\x55\x13\xc5\xca\xa6\x60\x09\x71\x94\xba\xa7\x89\x82\x90\xa3\xd8\x9a\x0a\x15\x47\x02\xbb\xdc\xeb\xe0\xe2\x9e\xeb\x3a\x9a\x2e\xc6\xf2\x09\x50\x58\x50\x8f\xf9\x84\xb0\x6b\xa6\x16\xa4\x96\x5a\x03\xed\x07\x79\x01\x4b\x44\x42\x2c\x6a\xe8\x42\x0f\x06\x29\xd8\x33\x67\x9b\xe9\xb5\xf8\x9e\x33\xe8\xec\x81\x45\x5e\x26\xcb\x00\xbb\xeb\xf2\xff\xe6\xf0\x4d\x5f\x97\x7f\x6e\xcb\xe9\x19\xfc\x2f\xf8\xe3\x93\xfc\xf2\xa7\x93\x55\x74\x32\xec\x6d\x87\xf2\x6c\xe2\xb2\xef\xeb\xd7\x85\x9d\x01\xcf\xfa\x37\x07\x91\xb7\xff\x9b\xc3\xaf\x0f\xdf\xec\xdb\xbd\xff\xfa\xc0\x9e\x42\xe4\x93\xff\x3a\xf2\xc9\x87\x5f\xba\xb7\xe8\x51\x00\x8c\xb4\x11\x4f\xfb\x6f\x0e\x46\x90\x11\x02\xd5\x5d\x6f\xa4\x2a\x5d\x81\x04\x5f\x6f\xd3\xbe\x39\xb6\x80\xb4\x02\xf0\xdc\x0b\x9f\x03\x20\x5a\x81\x3a\xf6\x33\xad\x81\x37\x08\x62\x10\xb8\x21\x5f\xcd\xa5\x62\x5f\x45\x4b\x3c\x57\xc1\xe0\x76\x64\xdc\x9c\xd6\xc3\xab\x1e\x51\xcf\x29\xa9\xe2\xa9\x89\xe2\x77\xc5\xf7\xcd\x69\xfd\x80\x79\xae\x65\xd5\xcc\x1f\x1a\xc3\x9e\x26\x10\xbd\x77\x59\xbf\x6e\x69\x97\x98\x8a\x31\x22\x73\x97\xb1\x3d\x5e\xc4\x85\x90\xc7\xac\x92\x62\x8a\x8e\xde\xd0\xee\xf1\x81\xab\x6e\x56\x97\xbe\x90\xa2\x60\xb5\xd1\x87\xda\x48\x45\xa7\xec\xd0\x01\xf9\xa0\xc5\xb6\x57\xf0\xe1\x47\x80\xb6\x9b\x37\x88\x2d\x95\xf0\x3d\x42\x99\x6a\x9f\x3d\x0f\xf4\x92\x16\x50\xb4\x13\x76\xbd\xd3\xf1\x36\x2a\x1e\xfa\x4c\x6a\x3e\xf4\xe8\xbf\x98\x92\x4b\x4b\x6f\xf4\x49\x45\xb5\xe1\xc5\xb7\x95\x2c\xae\x2e\x8c\xec\x67\x86\xcc\xa1\x61\xac\x82\xa5\x83\x09\x82\x1c\xfd\x74\x41\x8e\xb9\xbe\x22\x8a\x69\xd9\xa8\xc2\x35\x7a\x5b\x2a\x67\xf9\xd0\xca\xbb\x38\xda\x86\xfa\xd0\xf6\x7c\x4e\x8b\x19\xaa\xfe\x2e\x64\x84\x7d\xae\xa5\x6e\x3b\x5d\xf7\x40\x29\x1c\x69\xf7\xf8\xb7\xf4\x46\x33\xdc\xa5\xb1\xdd\x25\xfb\x75\x1f\xd1\x6c\xcb\x6d\x46\xf1\x6d\x4e\x8f\x7b\xfc\x3c\x35\x75\x7c\xa2\x2f\xed\xbb\xf7\x54\x66\x72\x25\xdc\x21\x14\xde\x1c\x39\xe1\x15\xc3\x5a\x5f\x70\x30\xde\x61\xec\x68\x1e\xe0\xf8\x42\x36\xe4\x86\xa2\xc9\x19\x98\x4c\xff\xcc\xcf\x4b\x5e\xbf\x25\x27\x42\x37\x8a\xb5\xf9\xed\xcb\x20\x58\xa9\xd5\xb7\x20\xf6\xf6\x66\xb8\x18\x98\x14\x67\x79\x59\xff\xea\x64\x38\x4e\x50\x35\xd1\x6f\xc9\x1e\xfb\x6c\x7e\xbf\x37\x20\x7b\x9f\x27\xda\xfe\x23\xcc\x44\xef\x8d\xc8\xe9\xbc\xae\x78\xc1\x8d\xd5\xc5\xc4\x84\xa9\xd6\x4e\x8a\x3f\xc8\xd4\xa0\x69\x57\xee\x24\x8e\xcb\x4f\xc7\x9f\xde\x82\x49\xa5\x94\xe4\x86\x59\x45\xfd\xda\xea\x9a\x4c\x29\xa9\x42\x90\x7c\x74\x5c\x90\xb4\x55\xc8\x79\xad\xe4\x9c\x47\xa5\x75\x81\x7e\xf5\x04\x23\x39\x17\x17\x0c\xb3\x70\x4b\xb6\x7c\xd1\x02\x20\xfe\xae\x45\x1f\x88\xc7\xbc\x65\xa7\x13\x22\x31\x77\xa2\x5b\x68\x9d\xeb\x30\xb9\xbd\x57\x6e\x75\xd1\xa3\x63\x54\x3b\xda\x9b\x64\x55\x7e\x37\xe5\x61\xc9\xae\x0f\x75\x49\xdf\x0c\xe0\xb5\xf0\x9a\x2c\x96\xf6\x80\x6a\xb2\xf7\xe6\xc1\xad\x0e\xda\x71\xc1\xe7\xbc\xa2\xaa\x5a\x0c\xe2\xbd\x6c\xe7\x9f\x48\x15\x00\x01\x83\xee\xeb\x3d\xb2\x8f\xf5\xcc\x41\x64\xae\x98\x6f\x28\x18\xfa\x12\x43\x0e\x57\xef\x76\x7d\xa9\x81\x2d\x24\x39\xb8\x85\x00\x7f\xa4\xe5\x27\x51\xf5\x2e\x4f\x92\x0b\xfb\x3d\x1c\xbe\x02\xa2\x6a\x9c\x9f\x7b\x22\x51\x7a\x62\xed\x23\xbe\xa9\x10\x17\x4e\x0c\xff\x60\x71\x34\xa1\x22\xc7\xee\x50\xd5\xd4\x06\x8a\x24\x08\x2c\xdb\x3e\x50\x0f\x07\xe4\x04\x08\xfe\x4b\xc3\xc8\xe9\xb1\x97\x17\x6a\xa6\x34\xd7\xc6\x72\x8b\xb2\x23\x25\x73\x14\x9d\xf7\x8f\xe6\xf4\x1f\x52\x90\x93\x6f\x2f\xdc\x44\xbd\xaf\xd9\xee\x9d\x6e\x4f\x66\x45\xff\xd1\x28\x66\x75\x8a\x64\xb5\x27\xcc\xb4\xac\xb4\xd8\xcf\xc9\x31\x35\x14\x75\x17\x24\xfd\xb2\x6d\x2f\x06\x3a\xc6\x18\x4a\xcb\xf9\x3e\x76\x09\x1a\xc6\x96\x25\x7b\x8b\x78\x1f\xfb\x9a\x8b\xf1\xe7\x3f\x9c\x9f\x6e\x41\x2f\x28\x40\x60\x9a\x7e\x90\x65\x1e\xe5\xe0\x55\x34\xa1\x97\x3d\xa0\x57\xef\x3b\xfc\x9c\xcc\xed\x4a\xe4\xa3\x14\x6c\x40\xce\x19\x2d\x89\xa5\xc2\xee\x3f\x7f\x52\xdc\xb0\xd1\xab\x6d\x49\x6f\xfe\x10\xb3\x6c\x84\x9f\xcc\x6f\xc2\xc7\xa8\x83\x23\xb4\x59\x05\x5a\xe5\x84\xb1\x71\x25\xc7\xc4\xd1\x8a\x6d\xbe\xfd\x0f\xe7\xa7\xd9\x5e\xfe\x87\xf3\x53\xff\xee\xf6\x3f\xe5\x64\x37\x5f\x7b\xd7\x14\xe3\xef\x96\x34\xd2\x74\x91\xfc\x83\xcb\x56\xa0\xb7\xb4\xdd\xc7\x57\x75\x47\x5b\x56\x72\x93\xd1\xe3\x8a\x8b\xde\x55\x07\xbb\x84\xd1\xce\xd4\xb6\x3a\x8a\xc2\xa1\xa0\x65\x5e\xf9\x96\xcc\x9b\xca\x40\xf3\x18\xb8\x16\xf6\x9e\x40\x5a\x96\xbf\x20\xc4\x35\x53\x25\xe4\x98\x61\x08\x42\xf9\xd6\x17\x25\x0a\xbf\x58\xfd\x83\x0f\x54\xd0\xa9\x7d\x1c\x98\x35\x99\xe3\x9f\xd1\x7d\xdc\x47\xcf\xaf\x08\x5f\xd1\x6b\xca\x2b\x3a\xe6\x15\x37\x20\x22\x1f\x8c\xbc\x26\x87\x15\x5c\x00\xe4\xad\x11\xea\x9d\xd3\x33\xe2\x06\x13\xd0\x94\x90\xec\xdb\xef\x0e\x6f\x2c\x43\x3b\x18\x01\x77\x83\x07\x67\x4c\xc5\xaa\x48\xef\x95\xed\x65\x3d\x7f\x24\x15\x26\x4d\x6d\x00\x14\xb3\x44\x2c\x8f\x64\x69\x67\x5a\x29\x59\xc2\x17\xae\x4d\xeb\x17\x2e\x5c\x6a\x56\x28\x66\x12\xc4\x4b\xb8\xae\x3d\x7f\x9f\x2a\x60\xee\xdc\x5d\x2d\x5f\xee\x6a\x3c\x5a\xe4\xca\x72\x42\xed\x74\x5e\xf8\x0b\xbd\xcb\xf1\xab\xa5\x82\xc6\x78\x99\x2f\x1c\xc7\xf2\x3d\xcd\xe1\xf7\xf6\x0a\xf7\x29\xe5\x8e\x23\x99\xc9\x84\x4b\x93\x67\x5f\xfc\x6c\x7e\x5b\x90\x15\xc3\xc7\xa4\xf7\xd5\x4e\x7c\xcd\x82\xd5\xb3\x49\x7a\x12\xbf\x9d\xe6\xbb\x8b\xae\xfb\xfa\x1d\xab\x67\xe4\xbb\x8b\x15\x94\x19\x4b\x2e\xd8\xf7\xd6\xe8\xd4\x7e\xa5\x49\xc5\x27\xcc\xf0\x5e\x9b\xb0\x65\xda\x3c\x97\x82\x1b\xf9\xe0\xae\xcd\x24\x47\xc5\x77\xb7\xf4\xb6\x29\xab\x87\xc3\x62\xf6\xb9\xdf\x4e\xf2\x21\xfa\x94\x92\x42\x56\x15\x2b\x7c\xd1\x01\x40\x8e\x84\x9d\xc3\xb1\xc2\x14\xe7\xc2\xfe\xf4\xe8\xea\xcf\x60\x8c\x73\x66\xb7\x43\x44\xf4\xc3\xf3\x93\xa3\xe3\x0f\x27\xa3\x79\xf9\xdb\x99\xbc\x19\x1a\x39\x6c\x34\x1b\xf2\xbe\x45\x25\xb7\x5e\x8f\x3e\x43\xe9\xd8\x47\xa8\xef\x5a\x53\x33\xcb\xa3\x31\xd9\x99\x2c\xfa\xb4\xbd\xbf\x7f\xd0\x98\x57\x0d\xae\x3e\x17\x73\xa4\xa4\x34\x03\xa2\x28\x04\xda\x85\x9e\xb2\x93\xa6\xaa\x10\xcf\x8c\x62\x6c\x10\xfb\xa1\x0e\x5f\xf4\x16\x2f\x8d\x74\x36\xf7\x8b\x52\x62\x76\x85\x3c\xa4\x8b\x66\x7d\x75\x29\x92\x11\x61\x5a\x48\xba\x28\x73\xd1\xf9\x1c\x7d\xac\x66\x66\x11\xe8\x8a\x2d\x08\xd4\xff\x9e\x48\x65\xaf\xad\xea\x5e\x41\x66\x0a\xd8\xf5\xc3\x46\x33\x35\xc2\xe9\x9f\xf9\x49\xa7\x88\x9a\xf0\xfe\xe7\x6c\xb2\x1b\xe7\x7c\xce\x26\xab\x8e\xd9\x7d\x0c\x7d\x6c\x43\x06\x85\x95\x64\x1b\x33\xc3\x2c\x3f\xec\x34\x8e\x62\xfe\xca\x73\xc7\x8a\xf1\xcf\xfc\xa0\x93\x2a\x51\xe7\x68\x01\x22\x12\x94\x12\x92\xb9\x5d\x42\xec\xd6\x70\x98\x91\xd8\x57\xe2\xb2\xd3\x2c\x13\x6b\x35\xf1\x6b\x56\x2d\x82\xac\x8e\x31\xf2\x65\x83\xa5\x63\x69\x71\x75\x43\x55\x09\x9d\x79\x6b\x6a\xb8\x33\x5a\xf2\xfe\x82\xa5\x1d\xbe\x9b\xb3\x2b\x4e\xeb\x5a\x2e\xb8\x64\x4b\x8d\x6f\x6c\x49\xde\xa2\x66\x2e\xf9\x4b\xb8\x32\xbc\xae\xd4\x94\xe5\x91\x34\x21\x20\x0a\x81\x98\x5b\x8d\xa9\x60\xca\x2a\xcb\xd5\x82\xdc\x28\xd9\xb7\x54\x95\x1f\x18\x68\x75\x54\x96\x2e\x35\xa1\xd1\x6c\xd2\x54\xb8\xe1\x7a\x44\x68\xcd\x7f\x64\x4a\x43\x2a\xfb\x15\x17\xe5\x80\x34\xbc\xfc\x4b\xd2\x8a\x0f\x74\x99\xcb\x6b\xa6\xae\x39\xbb\x39\xbc\x91\xea\x8a\x8b\xe9\xd0\x6e\xef\x10\x2f\x9d\x3e\xb4\xb8\xaf\x0f\x7f\x0b\xff\x64\xd8\x87\x63\x25\x6b\xf2\xb3\x05\x67\xdc\xf0\xaa\x64\xea\xad\xa3\x56\x3f\xbb\x0a\x08\x52\x18\x65\x75\x17\x35\x9c\x32\x11\xb2\xfa\x04\x63\x25\xe1\x26\xbc\xcf\x94\x9b\x59\x33\x1e\x15\x72\x1e\xbd\xda\x50\xf3\xa9\x3e\x8c\xe6\x3e\xe4\x5a\x37\x4c\x1f\x7e\xf3\xe7\x7f\xf9\x63\xca\x21\x66\x6a\x19\xe1\xde\xf4\x2d\xd9\xdb\xcb\xa1\x3d\x24\x57\xb2\xb7\xc3\x8a\x03\xdb\x66\x82\x16\x06\x4b\x7a\x64\xac\x76\x28\x2f\xe0\x28\x5a\x4a\x8d\xcf\x58\x24\xec\xb0\x37\x5a\xce\x7b\x56\xc7\x25\x3b\xc3\xdd\xfa\x9a\x92\xb8\x28\xfb\x1d\x5d\x8e\x63\xc3\xd5\xbb\x16\x28\xf7\x99\x8b\xcd\x0b\x91\xf2\xd4\xfb\x04\xa0\xa0\xa9\x8f\x7f\xef\x86\xbf\x67\x0b\x71\x5f\x3e\xbf\xf9\x42\xff\x52\x0d\x11\xb2\x61\x5d\xb6\x07\xf8\xfc\x0c\x5f\x2f\xb1\xec\x6b\x63\xd9\x9f\xb7\xdb\x7e\x87\x23\xd4\x1f\xf3\x4a\x91\x2f\xd2\xc8\xf3\x45\x39\xbc\xb6\x88\x13\xe9\xa6\x9c\x5d\xd3\xf0\x5b\x09\xa7\x96\x50\x64\xca\x75\x26\x04\x05\x1e\x39\x8b\xf7\xd4\x41\xc2\x36\x55\x74\xce\x0c\x53\x6d\x61\xee\x42\x0a\x91\xd2\xd8\xd3\x48\xf2\xa9\x66\xe2\xc2\xd0\xe2\x6a\x8b\xfd\xa1\x5e\xb4\xf2\xfb\xc6\x8b\x56\x1e\x01\xf1\xa2\x95\xbf\x68\xe5\xb7\xc6\x17\xac\x95\xef\x5c\x1a\x88\x67\x3f\x58\x5e\xce\xa5\x77\xb5\xb9\xf2\xc8\xf9\x9f\xa1\x88\xd1\x57\xf9\x96\x62\xc2\xa7\x1f\x68\x9d\x1e\xca\xe1\x67\x5a\xd2\xa5\xc3\xc7\x2e\x7a\x03\x8a\xfe\xd4\xb2\x86\xd6\x71\xae\x7a\x24\x6c\xff\xd3\x2b\xb2\xa9\xbc\xdb\x5d\xb8\x6c\x19\x10\x09\xf8\x1d\x81\xd2\x15\xcf\xe6\xf6\x93\x31\x37\xad\xe0\xa5\x99\xc1\x36\x55\xae\x31\xbf\x14\xa4\x70\x75\xc7\x41\x5d\x8c\xda\xa7\x65\x50\x41\x05\x91\x85\xf1\x45\x1c\x43\x57\xab\xd7\xaf\x5f\xbf\xc6\x96\x26\x7f\xfa\xd3\x9f\x88\x54\x84\x92\x92\x15\x7c\x7e\xfb\x41\x78\xea\x0f\x6f\x7a\x56\xfd\xb7\xe3\x7f\x1f\x7d\x78\x0f\x15\x2f\x6a\xa3\xb1\x73\x20\x42\x64\x27\xee\x2c\xaa\x07\xe4\x7f\x5e\x7c\xfa\xd8\x76\xa4\xeb\x7e\x0b\x7e\xa9\xb0\x9d\xfd\xe1\x89\x9d\xe5\xaf\xff\xf8\xfb\xdf\x27\xcc\xc4\x15\xd4\x89\xe2\xae\x8c\xad\x2f\xde\x41\xad\xf8\xa2\x18\xb6\x8a\x01\x79\xcb\x2b\xfc\x58\x5a\xc9\xf4\xee\x5a\x41\xbc\x3c\x37\xe7\xd3\x99\x71\x05\x38\xed\x15\xaf\x78\x61\x50\x6e\x42\x29\x44\xba\x2a\xbd\x70\xe9\x11\x86\x60\xec\x48\x08\x17\x2a\xd9\x80\x54\xfc\x8a\x91\x89\xfe\xab\x92\x4d\xdd\x36\x98\xc5\x56\x1a\xbe\xaa\x0c\x02\xd1\xe2\x7e\xef\xfe\x8c\xbb\x92\x1f\x9b\x14\xef\x93\x8b\xc8\x00\x10\x4b\x16\x1a\x57\x53\xb2\x6d\x58\x5a\x53\x1e\xca\xc8\x40\x0e\x1f\x8a\xfe\x5d\x95\xa2\xe8\x59\xaa\xcb\x8e\x77\x81\xa3\xf8\xb6\x02\xb5\x92\xff\x89\x48\x0e\xc5\x53\x23\x8e\x0e\x45\x47\x2d\xce\xf9\x92\xa3\x6d\x18\x65\xef\xf5\xaf\x18\x16\x15\xb5\xa2\x24\x13\xa1\x03\x20\xbc\x3d\xd4\x07\x8d\xf6\xc6\x7e\x51\x71\x6d\x41\x83\x46\x35\x0e\xe2\xde\x6b\xaf\x78\xd3\xb0\x1a\xdc\x7b\x8d\x37\xa2\x11\xb7\x56\xc5\xfe\x0e\x09\x2b\x03\x4b\x87\x17\xa4\xbe\x3b\x6b\xbb\x36\x16\xc6\x76\xbd\x4f\xdc\xb3\x1e\x0b\xc2\x81\xf5\x6f\x27\x1f\x1d\xa9\x66\xa6\x71\x47\x0f\x15\x1e\xec\xbb\x32\xad\x5d\xdb\xaf\x39\x55\x57\xac\x0c\xfc\x6f\x44\xce\xec\xa6\xf8\xb6\x2b\x09\x16\xb1\x8a\x5a\xa5\x15\x7d\x00\x74\x01\xaf\xe9\xec\x1b\x00\xdc\xab\xd1\xe8\x15\x12\x5e\xa9\x88\x36\x54\x39\x6a\x68\x3f\x4f\xa3\x3c\x5b\x8c\x12\xec\xd0\x8d\x0f\xb4\xd6\xd8\x92\x9f\x8b\x29\x20\x00\x98\x7c\xe0\x9d\x1d\xf3\xa1\xee\x8c\xfa\xf3\x96\x0c\x06\x99\x54\xff\x04\x8e\x61\xef\xda\xd5\xfe\xf7\x76\x63\x52\xee\x79\xb2\x55\x09\x28\x55\xca\xcf\x97\x10\xe0\xaa\x5b\x0d\xdc\x48\x4f\x8d\xd2\xec\x17\x99\x94\xdf\x79\x82\x10\x8e\x23\xa7\x15\x0d\xe1\xe9\x86\x42\x6d\x24\x89\x1b\x34\x96\x55\x09\x77\x08\xc7\x0e\x09\xe0\x38\x76\x4d\x0c\xc7\x71\x3a\x01\x52\xbe\xc4\xb2\x1d\xab\x89\x95\x2a\x2f\x6b\xd8\xb3\x4b\x5d\x74\x7b\x12\x34\x8e\xad\xc8\xd1\x38\x72\x48\xd3\x38\xd2\x65\x6a\x1c\x29\x41\xe7\x38\xf2\x12\x0e\x1f\xba\x8e\x87\xe1\xc4\x0e\x94\x2c\x26\x01\x01\xc0\x49\x0c\x36\x15\x4f\x8c\x93\xe9\x85\x13\x6a\x90\x64\xd0\xb1\x96\x55\x63\x70\xe1\x5c\x53\xc7\xf2\x12\xbc\x10\xab\xa0\xda\x7f\x92\x90\xb4\xbc\x48\x24\x7b\x81\x74\x8c\xe2\x4a\xfa\x0a\xbb\x99\x31\x91\xe2\x39\xca\x85\xb6\x79\x3d\x46\xdb\xf7\x16\x6d\xdd\x53\x94\xdb\x4b\xf4\xb4\x1e\xa2\xdd\xf3\x0e\x3d\x53\xcf\x50\x06\x8a\x93\xea\x11\x0a\x66\xe4\x1c\x24\xc6\x4f\x16\x0a\xeb\xdd\xcc\x98\xcb\xbc\x8a\x6c\x04\x56\x16\xb5\x92\x06\x18\x2e\x7c\xb7\x54\xec\x2a\xb3\xad\x18\x8c\xbc\x5e\xb1\x42\xf3\x74\x5f\x8b\xe6\x64\xff\x5d\x28\xda\xec\x73\xa0\x4f\x85\x61\x6a\x42\x0b\x76\x10\xfb\x60\x58\x3d\x63\x73\xa6\xec\xc6\xbb\xe7\x7c\x0d\xe0\x19\x15\xa5\xeb\x8e\xe5\x88\x0d\x61\x9f\x0d\x53\xf6\x90\xde\x5d\x9c\x92\x52\xf1\x6b\xa6\x34\xd9\xff\x96\x19\xea\xbb\x62\xf5\xaa\x80\xb6\xed\x1a\x5b\xf0\x22\xdb\xf0\x10\xc1\xc2\xdb\xe6\xd0\x08\x85\x17\x2a\x45\xc4\xaf\xdb\x53\xf6\x7d\xbc\x2c\x46\xe8\xd8\x2d\xd7\x9f\xef\xbc\x93\x02\x74\x09\x60\x92\x0b\xd9\x28\x8c\x72\x76\x4d\x40\x18\x29\xa4\x52\x56\xab\x01\x80\xa8\x26\x8a\x4d\xb9\x36\xd0\xad\xc4\x77\xa8\xc4\x8e\x07\x5b\xa3\xa0\x3b\x15\x2e\x1a\xe2\x42\xd7\x14\x47\xea\xbd\x86\xd3\x83\x6b\x25\xaf\x79\xe9\xd5\xe0\x58\xaa\xe1\x9a\xd4\x54\x47\xf5\xbc\xa9\xd6\xb2\xe0\xe0\x36\x6c\xb1\xa8\xf7\xfa\x68\x3f\x06\x25\xbb\x64\x86\xa9\x39\x17\xac\x53\x05\x36\x8e\x64\x95\x84\xd6\x75\xd5\x3b\x1b\x2c\x19\x2d\x84\x2c\xd9\x59\x33\xae\xb8\x9e\x5d\xec\x4a\x74\xde\x2a\x98\x30\x81\xfe\x56\xd6\xdd\x5d\x51\x7a\x09\x91\x81\x42\x73\xd0\x53\xad\xdc\x67\xd5\x72\x2e\x05\x18\x08\xa9\xd6\x7e\xd5\x98\xd4\x48\x90\xd6\x2b\x66\x98\xff\xaa\xbf\xf6\xd1\xbe\xb7\xeb\x85\x40\x45\x09\x9f\xfe\x20\xea\xce\xe7\x05\xad\xaa\x04\x7b\x51\x57\x31\xf1\xc2\x0c\x1a\x4e\x7c\x5f\x05\xbc\x30\xdc\xde\x25\xbf\xcb\x90\xf6\x88\xdc\x6b\x84\xed\x32\xfb\x2b\x06\x2b\x0f\x4e\x47\x3d\xfb\xa5\xf0\xa7\x3b\xb0\x6a\x8c\xff\x41\xc0\x00\xac\x1a\x86\xf7\xf8\x25\x66\xf2\x25\x66\xf2\x9e\xb1\x75\x4d\x98\xbc\xc4\x4c\xbe\xc4\x4c\xae\x1e\x5f\x70\xcc\xe4\xce\xa5\x81\x78\xef\x08\x4a\x13\xb4\x1c\x42\xcd\x47\x8c\xec\x6b\xb0\x7b\x75\x10\xea\x53\x95\x86\x7b\x4a\x89\x6c\xc9\x04\xe0\x03\x48\x8f\x8c\x51\x7c\xdc\x98\xfe\x9c\x2b\x6f\x40\x6b\x0b\x0f\x28\xf7\x4c\x3b\x11\x6b\xe8\x8e\xac\x88\x78\xad\xf3\x24\x05\x01\x20\x12\xcc\x12\x35\xcb\x51\x50\xf5\x40\xcb\xc3\x0f\x5f\x69\x52\xca\xa2\x99\x33\x61\x5a\x0c\x69\xf3\xcf\xd0\x99\xb7\x45\x21\x84\x96\x25\x47\x19\xee\x2c\x83\x38\x92\x44\x8e\x4a\x79\x23\x2c\xfb\x3e\x3a\xeb\x55\x43\xb9\x5b\x3f\xb9\x9d\x2b\x36\x02\xf9\x8f\x89\xfd\x9c\x8e\xa1\xe1\xbd\xeb\x98\xfa\x12\x97\xbb\x72\x8a\x3c\xd7\x74\x95\xfb\xdf\x48\x2b\x70\xac\x8d\xbb\x6d\xdd\xf7\x59\x57\x7e\x09\x01\xde\x8d\xd8\x83\x97\x10\xe0\xbe\x2b\xbf\x84\x00\xf7\x5b\xbe\x43\xcf\x4e\x31\x8e\xd7\x8a\x73\x95\x6b\xcd\xd9\xe1\x0f\x2e\xfc\x25\xe1\xa0\x76\x2b\x74\xf1\xb8\xe5\x89\x68\x0b\x5a\x2e\x0d\xbd\x64\xb6\x42\x5a\xd8\x06\x5b\x44\x89\xac\x9e\x69\x82\xaa\xf8\x25\x84\x39\xee\x40\x98\x22\xec\x65\x82\x09\x15\x47\xb7\x00\x64\x5b\x4d\x14\x9b\x69\x63\x1c\x78\x14\x88\x5e\xcb\xf2\x2d\xf6\x8f\xa6\x42\x48\x14\x51\xf5\x00\xfb\x6f\xeb\x81\x2b\xd0\x02\x1a\x76\x4d\x0b\x34\x2a\x36\xbc\x04\x9a\x1a\x84\xd8\xde\xfd\x46\x70\x64\xc1\x02\x92\x09\x13\x08\x60\x03\x6c\xd1\x59\x0a\x4a\x90\x6c\x68\x61\x47\x6b\x89\x49\x9d\x69\xb9\x6f\x2e\xce\xea\xb1\x41\x17\x33\x36\xa7\xf0\x9f\xdf\xf9\x2d\xb0\x04\xd2\x6a\x9d\x86\x61\xe7\x3b\xa6\xe6\x9a\xc8\xc9\xa0\x53\x15\x61\xef\x3a\xa5\x19\x9c\x1f\x99\x8c\x19\xc4\x5f\xa6\xb3\xe4\x98\x36\xb2\xbc\x61\x67\x9d\x08\x34\x7b\x91\x40\x8e\xb4\x77\xcb\x7b\xeb\xda\x6c\x00\x60\x22\xb8\xc3\x3b\xb4\x39\xf9\x2d\x35\x38\x76\x2d\xf4\xb8\x6f\xc8\xf1\x20\xc4\x5b\x74\x45\xf6\x44\x70\x5e\x42\x8e\xbb\xe3\x25\xe4\xf8\x25\xe4\x38\x6b\xc8\x71\x24\xec\x78\xbe\xb5\x22\x7a\x38\x0e\xfb\xf0\x21\xc4\x63\xe6\xf5\x7e\x67\x71\xf0\x11\xc0\x3e\xfc\x57\xaa\x6e\x96\xd3\xab\xd1\xe8\x15\xe6\x39\xb5\x26\x8a\xc6\x4c\x86\x7f\x26\x4c\x14\xb2\xb4\xf3\x5c\xc2\xfc\x4a\x1b\x10\xe1\x5b\xb7\x58\x0c\xcb\xdc\xaf\x15\x67\x4a\xc1\xdc\x39\x24\xaa\x64\x56\xe1\xdb\x40\x7e\x97\x5f\x30\x4d\x26\xee\xad\x38\x1b\x9a\x55\xba\x2d\x0e\x4d\xfc\x9d\x5c\xeb\xbf\xd7\xa4\xe2\x73\x0e\x0d\x70\x4a\xa0\x70\x4c\x9b\x34\xb7\x11\x21\xfb\x38\xe5\xa8\xa8\x9b\x81\x9b\x7e\x34\x67\x73\xa9\x16\x83\xb0\x84\xfd\xb2\xb3\xa6\x7b\xe2\x00\x84\xe8\xa2\x51\x8a\x09\x53\x2d\x22\x71\xfa\x4b\x93\xa6\xfd\x09\xec\x88\x30\x1d\x10\x24\xa5\x35\x49\x3b\xba\x34\xa8\x8d\x46\x04\xcf\x7c\xd8\x45\xe0\x9d\xae\xf8\xe4\xa0\x8d\x01\xb5\x9f\x32\x71\x4d\xae\xa9\xd2\x69\x77\x9e\xe4\x95\x9f\x4b\x7e\xcd\xb5\xec\x1d\xb2\x17\x4d\x14\x6f\xcf\x45\xf0\xa0\xd9\x9b\x2a\x1b\x53\x37\xc6\xb1\x13\x7f\x7d\xd9\xe7\x5a\x5a\x21\x2d\x5c\xdb\x25\x45\xe3\x4d\x5f\x07\x65\x3b\x6a\x6a\x0c\x53\xe2\x2d\xf9\x3f\xfb\xff\xf1\xbb\x7f\x0e\x0f\xfe\xb2\xbf\xff\xb7\xd7\xc3\x7f\xf9\xfb\xef\xf6\xff\x63\x04\xff\xf1\xd5\xc1\x5f\x0e\xfe\xe9\xff\xf8\xdd\xc1\xc1\xfe\xfe\xdf\xbe\xff\xf0\xd7\xcb\xb3\x93\xbf\xf3\x83\x7f\xfe\x4d\x34\xf3\x2b\xfc\xeb\x9f\xfb\x7f\x63\x27\x7f\xdf\x70\x92\x83\x83\xbf\xfc\x8f\x64\xd0\xa9\x58\x7c\x4a\xa4\xc3\x38\x86\x19\xe5\x81\xee\x8c\x59\xd0\x6f\x49\x4b\xe1\xc2\x0c\xa5\x1a\xe2\xd4\x6f\xa1\x1d\x75\xe2\x02\x1e\xbd\x72\xdf\xff\x56\x06\x09\x7c\x29\x28\x88\x3b\x74\xc1\x1f\x43\x07\xcc\x9c\xd7\x03\x11\x34\xc7\x7c\x6b\x15\x71\xfd\xfa\xdd\x3a\x3e\x86\xcd\x6b\xa9\xa8\x5a\x90\xd2\xb9\x1c\x16\x6b\xfb\x31\x65\x2b\x84\xfb\x90\x1e\xd9\x00\x7a\xc9\xfb\xdc\xea\x2d\xbb\x2c\xe7\xac\xe4\xcd\x7c\xdb\xde\x4a\x84\x22\x3e\xf8\x1b\x7b\xc4\x10\xe0\x25\x27\x21\x7f\xc0\x3d\xe6\x7c\xc6\x63\x5a\x5c\xa1\x11\x21\x60\x46\x8a\x67\x89\xc5\x65\xb1\xf7\xf6\x5c\x64\xf0\x9c\x51\x11\x3c\xa7\x10\xc5\x2e\x4b\xf6\x4a\x87\x67\x11\xa4\x2c\xce\x4a\x8c\x60\x73\x89\x83\xfb\x6e\x81\x03\xab\x0a\x7d\x00\xf9\x75\x6b\x1d\xe0\x13\xb0\x9b\x64\xe9\x35\xc2\xff\xc1\xde\x5b\x59\x7f\xdb\x68\x1a\x00\xf1\x29\x0d\x46\x82\x59\xc7\x75\x8c\x9b\x90\x4a\x16\x51\xba\x4b\x47\x14\x05\x44\x3d\xf1\x24\x2e\x35\x5a\xc9\xa2\xab\x85\x06\x75\x20\x70\xa9\x55\x1a\xc3\xd3\x79\x41\xc7\x15\x43\xd3\x11\xe0\x4d\x32\x8e\xda\xc5\xe6\xf4\x33\x9f\x37\x73\xd2\x68\xfb\x66\x52\x74\xe7\x6e\x5f\xec\x06\xaf\x26\xde\x95\x39\x17\xf0\xa3\x8e\x99\xad\xbf\xf3\x6a\xc6\xc8\x45\x38\x81\xd6\xe8\x8b\xd1\x9e\xce\xa6\xa3\x1b\x50\xfd\x1d\x74\x4e\x01\x95\x13\x88\x4a\x0e\x7a\x88\x26\x50\x34\xa4\x67\x6b\xd5\x76\x53\x22\x82\x21\x78\xd5\xa5\x18\x40\xbf\x66\xd1\x01\x35\xc2\x65\x93\x3d\xd7\x7b\xfc\xec\xa4\xf8\x44\xd9\x3d\x97\xc4\x9e\x45\x4e\xcf\x2e\x9d\x87\xec\xbc\xad\x89\x7b\x21\x3d\xb0\x23\xef\x39\x7b\xf4\x8a\x54\x41\xea\xd3\xb2\x02\x81\x75\x51\x80\xbd\x96\xbf\x0c\xb6\x6f\x27\x3c\x16\x8b\xc2\xf5\x04\xe3\x6d\x8c\x62\x88\x53\xc3\xbb\x0b\xd5\x9e\x86\xf6\xff\xbc\x8d\xdc\x87\x2f\x8d\xd9\x04\xb3\x21\xf0\x37\x60\x5f\xd4\xfd\xea\x4e\xa1\x97\xa0\x62\x06\xca\x5b\x31\x11\x26\x85\x94\x8e\xb9\xbc\xb6\x24\xe4\x37\xbd\xa6\xfe\x41\xbb\x08\x3b\xde\xf3\x5e\xd0\x83\x4e\xdd\x52\x8d\x16\x3f\xc1\x58\x89\xb5\xb8\xaa\x76\x0b\x54\x23\x7a\x6e\xc0\xf8\xc0\xe7\x7c\x02\xe9\x16\x52\x81\x4b\x04\xa9\x18\xda\xf2\x15\xb3\x38\x00\xcd\xda\x94\x9c\x13\x2d\x68\xad\x67\xd2\x80\xdd\x98\xd6\xb4\xe0\xa6\x77\x11\x25\xa3\x68\x71\x65\x67\x86\x30\x26\x78\xb3\x7e\xaf\x51\x1c\xb8\x4a\x10\x31\xb2\x76\xab\x97\x99\x99\x92\xcd\x74\x06\xe5\xad\xf0\xa9\xa2\xa2\x1a\x6b\xa9\xf5\x8b\x40\x5c\xb9\xa6\xb3\x74\x6a\x52\x2e\x04\x9d\xf3\xc2\x9f\x1f\x64\xdd\x69\x2e\x5d\x84\x09\xc0\xd2\x77\xdb\x28\x39\x63\x4a\x73\x6d\x98\x30\x18\xec\xf2\xae\xa2\x7c\x4e\xf6\x35\x63\xe4\xc4\xdf\x75\xfc\xe6\x02\xf5\x74\xf4\x6e\xf5\x4f\xd3\x88\xa3\x67\x5c\xbb\x5e\x57\xdc\xdd\x7e\xe2\xbd\x7a\x51\x44\x29\x10\xe2\xde\x2f\x28\xca\xd5\xaf\x78\x90\x72\x1b\x57\x6f\x9a\x54\x90\x52\xe5\x2c\x74\xd7\x4c\x94\xb2\x0d\xad\xee\xb5\xd6\xd1\xd9\xa9\x8e\x4d\xa2\x48\xd5\x6a\x5c\x1d\xbe\xa8\xa4\x98\xc6\xed\x48\x03\x4d\xec\xb5\x9e\x15\xb9\x04\xe1\xa2\xe4\xd7\xbc\x6c\x68\x85\xc2\x56\xff\x7d\x7a\x77\x71\x8a\x50\xf2\xe9\xcc\x0c\x6f\x18\x78\x14\x51\xdc\x6e\x19\x89\x7f\x37\x7e\x2b\xc9\x98\x6b\x90\xcb\x0c\x31\xb2\x1f\x49\x62\xce\x93\x6d\x77\xed\x86\x2e\xa0\xc5\xbd\x4b\x14\xed\x04\x9b\xbb\x23\x73\xcb\x4e\x64\x3f\xb1\x61\xee\x05\x3d\x87\xde\x7d\x77\xee\x08\x28\x71\x41\x05\xa8\xaf\xe0\x89\xb6\x57\x00\xc8\xea\xed\x6d\xeb\x4b\x74\xea\x80\xc3\xed\x54\x28\xfc\x6a\x6a\x2f\x5d\x4f\xab\xcc\x96\x2d\x23\xd7\xed\x7d\xbc\x64\xf3\xba\xa2\x66\xeb\x41\xdd\x3f\x45\x8e\xf9\x28\x5e\xd0\x72\x0f\x2a\xca\x21\xad\x2c\xd1\x38\xfb\xf1\x9d\xab\x91\x87\xb4\x3d\x4b\x76\xcc\xa5\x17\x41\x84\xd3\x72\x50\x9d\x5d\x49\xd6\xa1\x69\xe6\x98\x95\x20\x12\x38\x88\x53\xb2\x4f\xe5\x8d\x60\xca\x5f\xac\xb3\x1f\xdf\x0d\x08\x1f\xb1\x91\xff\x2b\x2c\xe1\x45\x26\x23\xa7\x58\xde\xc3\xd7\x62\xea\x1f\x65\x28\xcb\x11\xbe\x7a\xec\xc3\x8e\xd7\xfc\xf9\x5f\xed\xa6\xd8\x6f\xff\x6d\xf8\xaf\x8e\xc7\xc0\x5f\x90\xc1\x96\x90\x80\xf8\xf3\xd2\x6c\x71\x09\x05\x90\x78\xec\x5f\x3f\x9f\xc9\xf2\xa2\x66\xc5\x08\xb7\x5f\xff\x9c\x14\xf8\x4a\x08\x13\x46\x2d\x46\xe4\x4c\x42\x96\x0c\x2f\x91\xa2\xc1\xbb\x2a\xf6\x9f\x3e\x28\x03\xd0\x20\x78\x7e\x0b\x6a\x98\x00\x09\xd8\xc2\xd6\x7b\x69\x57\xc0\x15\x96\x05\x3a\x4f\x61\x9f\xf7\xc1\x5d\x87\x75\xec\x07\xc4\x48\x09\x5c\xaa\x37\xc3\xb5\xe3\x48\x10\xf6\x99\x6b\x68\xf0\x83\x47\x09\x58\x42\x5d\x39\x08\xaf\x77\x58\x68\x2c\xe2\x85\x86\x55\xb5\xec\x1f\x76\x0b\x5b\xf8\x95\x90\xe6\xab\x70\x7b\x7d\xda\x1a\x28\x18\x92\xd0\x6b\xc9\x4b\xd2\x68\x90\x3b\x05\x69\x04\xc4\x2d\x24\x14\x2b\x76\xe8\x33\x5e\x90\x39\xd7\x86\x5e\xb1\x11\xb9\xb0\x3a\x49\x1c\x4b\x8c\x48\x25\xc8\xb8\x92\xc5\x15\x2b\x49\x23\x0c\xaf\x92\xcc\x33\x01\x6e\xd8\xda\x48\x5f\x81\xf2\xc4\x4d\x61\x25\xdd\x5a\xb1\xa1\xd7\x9a\xf0\xa9\x04\xb3\x31\xb2\xf4\xb0\xab\xed\x59\x0d\xc2\x5d\x9d\x51\xb4\xdf\xd6\x25\x2c\xe9\xf2\x85\x13\xa9\xd1\xad\xda\x06\x76\x3f\x25\xfc\xed\xfe\x00\x24\xd3\x23\xf2\x11\xb4\x97\xaa\xff\xad\xc4\xcc\x09\x34\x79\xbb\x30\x19\xc1\x0a\xa6\x35\x55\x0b\x4c\xc6\xe6\xc6\xd7\x01\x70\xf9\xc4\x56\x6b\xec\xbf\xa9\x54\x34\x16\x60\xa2\x58\x21\x85\x36\xaa\x29\x00\x6b\x28\x19\x2b\x79\xc5\x44\x5b\x1c\xa5\xff\x25\xec\xa6\x99\xb7\xa9\x9d\x56\xc6\x16\x92\x14\x33\x2a\xa6\x2c\x54\xad\x26\x73\x5a\x02\x2a\x7f\x1f\x4c\x20\xfd\x77\x53\x06\xc4\xa0\x13\x63\x25\x43\x03\x18\x32\xb6\xaa\x82\x8f\x49\x4a\x78\xb3\xf3\x90\x26\x3f\x8f\xe2\x9a\x04\xaf\xb6\x98\x71\x98\x1e\x58\x32\x04\x9d\xb5\xaf\xdd\x30\x43\x20\xc9\x9c\x19\x5a\x52\x43\x77\xa5\xf2\xc2\x07\xba\x08\x01\x6a\x18\xba\x0f\xb8\x1b\x85\xf4\x3b\x55\xc1\x9b\x89\x64\xcd\xe3\xe2\xe9\x67\x3f\xbe\x4b\x5a\x1f\xf3\xe3\x2d\xba\x42\xa3\x3a\x63\xe9\x8c\x8b\x60\xc4\x62\x02\x60\xbd\xf0\x75\x14\x2c\x68\x1e\x12\xe4\xe4\xac\x24\x65\x93\xec\xd4\x6e\xa5\x84\xf4\x8c\xfa\xc4\x00\x2a\x8b\x9f\xbb\x82\x1c\x97\x6d\x4c\x7a\xd1\x4d\x52\x5f\xa9\xed\x63\xe8\x22\x13\x86\x2b\x16\x15\xf7\x4f\x02\xc1\xe1\x5b\x23\x90\x94\x76\x31\x0f\x51\x73\xca\x8c\x6e\xb3\x2f\x51\xa6\x4c\x5c\xd5\x38\x3d\x09\xdf\x08\x94\x3f\x8f\x8d\xce\xe5\xb2\x72\x03\x92\xd6\x44\x3c\xd7\xd2\xc9\x8e\x56\xea\xde\x3a\x32\xe6\x0b\x9e\xa3\x85\xe5\xf4\x1f\x64\x99\x1e\x85\x97\x37\x1c\xb4\x03\x5a\x5b\x12\x08\x2b\x67\x69\xf0\x7a\xe2\x03\x10\x51\xad\x3b\x8d\x14\x50\x96\x99\xd1\xeb\xe4\x62\xe3\xbd\x5d\x62\xad\xc9\x62\xe8\xbd\x63\x08\xee\x10\xc0\x1d\xbe\x49\x04\x2c\x3d\x0f\xd1\x8f\xc4\x7c\xc4\x2e\x40\x59\x42\xc5\x1e\xa1\x9c\xb0\x1f\x96\xc5\x5f\x64\x09\x13\xcb\x8d\xed\x2d\x64\x4e\x6e\x75\x59\x03\x21\xbf\xc5\xd5\x16\x65\xdc\x32\xe1\xf4\xf3\xfa\xaa\xa3\xa8\x3a\xfb\x4a\xf0\x72\x60\x21\xae\x7d\xef\xf6\x18\x39\xb4\xf6\x9d\xde\xba\x8f\x1f\x64\x06\x06\x14\xf3\xd5\x96\xf0\xe4\x95\x4e\x5d\x92\xa4\x37\x5e\x31\x05\x09\x3b\x51\x7d\xd0\xb6\x28\x10\x1c\x81\x73\x6d\x2c\xe5\x81\xd9\xd3\x22\x18\x0d\xd8\xbf\xf7\x8b\x1f\xde\xdb\x17\xac\x6d\x82\xdd\x04\xfd\x9a\x6a\x6c\xca\xee\x03\xe1\xc1\x8b\xe9\x93\xfb\x56\xc1\x93\x4e\xf2\x7e\xf2\x3e\xc1\x23\xb1\xc0\xcd\x3f\x8e\x90\x13\x1d\x67\x64\x6a\x41\xe5\x9a\x30\x41\xc7\x95\x55\x47\x22\x04\x0e\x70\x2e\x49\xa7\x46\x46\x4f\x9d\xb3\x49\xfa\xd6\x81\x2b\x33\x9e\x72\xb3\xb5\x51\xbc\xed\xfc\x70\xd4\xa6\xc4\x3a\xeb\x4c\x86\x5e\xdd\x7e\x38\xac\xeb\x2c\xd1\x4d\x93\x5a\x82\x26\xee\x6c\xb4\xf2\x0d\x52\x61\xca\x96\x54\x90\x2f\xad\x00\x7a\xd3\xf0\x9e\x2e\x82\xee\x34\x49\xa6\x42\x1c\xf9\xb2\x13\x20\xd9\x17\x32\xc3\x72\x84\x79\xe7\xe6\x3b\x04\x7d\x77\x00\x9f\xb7\x02\x4f\xe1\x0f\xaf\x53\x84\xb0\xe7\x31\xb3\xd4\xb9\x6d\x74\x96\x7e\x2f\x08\xde\x8d\x78\xfd\x15\x19\x84\x2d\x99\xfb\x9e\x8b\x32\xe4\x72\xfa\x52\xba\x56\x40\x3b\x3a\x3b\x45\xa8\xf3\xc0\xf4\x1d\xf0\x84\x85\x53\x78\xcd\x8c\xab\x72\x58\x53\x65\x16\xe8\xdd\x1a\x74\x20\x0e\x55\x30\x33\x2c\x9d\x35\xe0\xde\x5e\xa6\xec\x28\x07\x47\xe0\xa3\x13\x5d\xf8\xec\x9d\x18\xb2\x6b\x3b\x92\x5a\x5b\xd3\x8f\xce\x8e\x7c\x6c\x5b\xef\x05\x3f\xce\x33\xd9\x91\xc7\x4a\x1c\x27\x5d\x6e\xb6\xbb\xb2\xb6\x65\xb5\xba\x9b\xc2\x84\xa2\x2f\xd8\x2b\x9c\x27\x52\xc6\xd5\xc3\x82\x96\x09\x76\x7e\x3b\xd3\x80\xf0\x89\x15\xda\xa4\x18\x42\x00\x64\x32\x78\x6d\xf0\x93\xd3\x74\x47\x2e\xcb\x19\x6d\xf0\x40\x98\x22\x28\xa3\xa5\x5b\x3a\x48\xf6\x85\xec\x6f\xa2\xf7\x03\x68\x2b\xae\x75\x80\x89\xed\x77\x84\x93\x8c\xd3\xdb\xa5\x91\x56\xf2\x8c\x6d\xf7\x11\x2f\xf0\x22\x31\x17\xa5\xbd\x54\x20\x22\x81\x55\x5f\x37\x45\x01\x35\x3b\x27\x31\x59\x4a\x57\x69\x3b\xbc\xc7\x6d\xf9\x9c\x9a\x62\xc6\x34\xd1\x12\xfa\x6a\x6b\x43\xab\x8a\x95\x21\xe0\x09\x11\x45\x82\x56\xe1\x82\xa1\x92\xe1\x88\x94\x95\xf4\x2d\x8e\x3c\x23\xce\xf1\x5a\x57\xd4\xb9\x95\x26\x8d\x28\x30\x8d\x91\x9b\x45\x88\x34\x59\x56\x4c\xc1\x0e\xad\xc1\xdb\x96\xae\xfa\x4c\x30\x68\x24\xb2\x29\x07\x64\x06\xe6\xbf\x40\x76\x3f\xa3\xd7\xac\x0d\xf8\x70\x1d\x49\x2d\x97\x0e\x05\x82\x33\xe0\x7a\x54\x60\x78\x80\x1a\x42\x2c\xb0\x8b\x57\x71\x4c\x38\x17\xb9\x55\x99\x78\x1f\xf6\xa3\x4d\xbf\xa5\xe2\x1c\x04\xd5\x46\x33\x13\x4a\x9f\xa7\x4b\xbc\xc4\x85\xd1\xd3\xc6\xc8\x39\x35\xbc\x00\x27\x1d\x9f\x44\x91\x62\x73\x8c\xbd\xb0\x94\xc6\xc7\xc3\xa3\x88\x04\x82\x9b\x3b\xb7\x4c\x64\x60\xb5\xb2\xf4\x08\x1b\x1f\xed\xb5\x3b\xe5\xee\xb6\xfa\x6d\x89\x44\xcf\x4c\xef\x79\xe9\xeb\x48\x13\x33\x53\x8c\x11\x3e\xaf\xa5\x32\x54\x18\x52\xf2\x49\xa8\x6c\xee\xe3\x0c\xd7\xe1\x44\x0e\x7b\xd0\x4f\x10\x5d\x1b\xad\x82\x1e\xd3\xaa\x92\x37\x9a\x98\x1b\x19\x5c\x0e\x6d\x88\x97\xab\xdb\x3c\xe8\x02\x93\x41\xc6\x71\xab\x5a\x56\x67\xf1\x2a\xe2\x43\x03\x4b\x7b\x6e\x58\x55\xd9\x7f\xd7\x71\xa3\xe4\x72\x26\x2b\xf7\x84\x4f\x05\x56\xa3\xe5\xda\x3b\xbf\x5c\x29\x95\xfd\x52\xc9\xba\x76\xe1\x0f\xf3\x83\xfc\x7b\x02\x31\xec\xea\x9a\x69\xc8\x35\xf1\xe5\x5d\x2c\x2a\x4c\x99\x60\x8a\x1a\x88\xb0\x73\xbd\x83\x41\x24\x59\x06\x32\xd5\xe9\x83\x23\xa3\x5d\xe4\x1e\xa4\xc3\xf0\xcb\xd5\x48\xe6\x9f\x71\xdf\x66\x78\x2f\x2e\x10\xdf\x3c\xdd\xc9\x80\x40\xd0\x5f\xe8\x80\xfc\xa0\x11\x2d\x02\xe7\x0d\xe5\x78\x36\xb2\xb2\xb9\x2a\xf5\x68\x68\xcb\x00\xd4\x51\x55\xcf\x22\xa8\x62\xbb\x54\xa8\x24\xd7\xdd\xeb\x0e\xbc\xef\x94\xd4\xfa\xa3\xff\xc9\x13\x82\xfe\x62\xb3\xba\x67\xbc\xd8\xac\x5e\x6c\x56\x2f\x36\x2b\x18\x2f\x36\xab\xe5\xf1\xa5\xd8\xac\x48\xcb\xae\x76\x95\x36\x7d\x8c\x55\x97\x2e\x83\x7d\xe4\x7d\x26\xe4\xa3\x34\x2e\xc8\x18\x34\x58\x7a\xa7\xd3\x89\x02\x87\xbe\xa1\x8b\x91\x60\xc6\x75\x63\xf1\xfe\xdd\x73\x0f\xd3\x5f\x95\xd5\x46\x9c\xe9\x23\xa2\x1b\x9e\x90\xf9\xa6\x40\xd1\x2a\x46\xa2\x68\xd6\xc6\x3c\xc3\xe7\xaf\xb4\x8b\x6c\xb5\xdf\x43\xe5\xc2\x78\x82\x82\x8d\xc8\x85\xcb\x77\x59\x5a\xfc\x76\xaf\x85\x92\x19\xca\x53\x3a\x5e\xc5\xc3\x4b\x43\x97\x77\x48\x67\x5b\x93\x76\x48\xce\x6b\x13\x6a\x2f\xed\x9a\x29\xb6\xad\xe5\x16\x25\xe9\xc6\xa9\xfd\xed\x03\x8f\x15\xe1\x73\x3a\x21\xe7\xac\x90\xd7\x4c\xe1\xe9\x9e\x7c\xae\xa9\xd0\x5c\x8a\xef\x28\xaf\xec\xd9\xfa\x33\x6e\xbd\xdd\xa4\xd1\x4c\x75\x43\x20\xa3\x10\x8d\x70\xc1\x1d\x22\x59\xec\x4d\x57\x50\x42\x93\x13\xbb\x9e\x4b\xa3\xab\x15\xbb\xe6\xb2\xd1\xbe\x00\x42\x63\x50\xd2\xd0\xc6\x59\x88\x66\x7c\x3a\xf3\x0f\xfb\xbc\x55\x88\xbb\x56\x65\xb8\xc4\xc9\x90\x69\x43\x4d\xa3\xbb\x55\xa8\x0b\x08\x3c\xdc\xa1\xe8\xab\x80\x47\xbb\xa3\x84\xe4\x14\xd7\xb1\x10\xc5\xae\x32\xc4\xf7\x58\x26\x03\xa7\x1e\xbb\xbb\xec\x2b\x7e\xb4\xd5\x4d\x0a\x39\xaf\x1b\xc3\xa2\x3b\xef\x6e\x57\x1e\x52\xff\x40\x64\xea\xb4\x81\x3a\x9c\x53\x41\xa7\x6c\x18\x40\x1b\xb6\xc5\x3e\x0e\xb3\x51\xfa\x2c\x68\x45\xb2\xf7\x00\x8a\xc7\xb3\x2b\xd2\xd1\x1d\xd9\xca\xed\x91\x47\x29\xb9\x47\xf2\x97\xdd\x23\x8f\x5f\x7a\x8f\x84\x4a\xa8\xbb\x4a\x80\xce\x1d\x7c\xcb\x24\xc8\x09\x19\xeb\x48\x50\x4e\x55\xd9\x09\x1b\x0e\x16\xae\x89\x9c\x73\x63\x98\xcf\x48\x0c\x24\x65\x40\xb8\xe9\x14\xc9\x74\x04\x14\x1c\x9c\x98\x3f\xc8\x3e\xd7\x15\x2f\xb8\x89\xba\xd8\xf5\x2c\x23\xb1\x3c\xc0\x80\x70\xc3\x35\x8a\xf2\x82\xf0\x79\x5d\xb1\x20\x81\x0f\x5d\x91\x21\xef\x84\x0b\x6f\x53\x40\x6e\x0a\x61\x9f\xc1\x15\x8b\x00\xbf\xd0\xed\x07\x8e\x17\xba\x7d\xc7\x78\xa1\xdb\xd9\xe9\x36\x96\x30\x4d\xaf\x08\xdc\xa1\xd7\x7e\x52\xd7\x84\x89\x8e\x59\x45\x7e\x69\x98\x5a\x10\xab\x60\xb5\xc5\x41\xa4\x25\x76\x9a\x97\x58\xc3\xc2\xc7\x74\xec\x90\x87\x20\xa7\x70\x0e\x31\x23\x27\x9f\xad\x7e\x0b\xcd\x29\xb2\x73\xc9\xe5\x05\xba\x2d\xb0\xf0\x14\xc2\xc9\xc4\x5a\x29\x26\x52\xc5\x9f\x80\x8a\x79\xf4\xf1\x38\xa7\x01\x23\x47\x9a\x0a\xc9\x97\xaa\x42\x1e\x49\xc8\x20\xe4\x68\xcd\x5e\xe3\x99\x84\x6f\x80\x8f\x87\xb4\xa6\xe0\xcd\x25\x57\x6c\x31\x70\xa9\x9e\xc4\x62\x20\xf5\x0f\x67\x02\x11\xf3\xe7\x51\xfc\xb9\x62\x18\xc7\x91\xd6\xb2\xb4\x3b\x32\x33\xc4\x9c\xae\x3a\x1c\x43\xfb\xda\xd9\xe6\xf2\x47\x94\x87\x47\x67\xe6\xf9\xc4\xbe\x6a\xae\xa9\x96\xee\x8c\xc5\x1d\x67\xdd\x46\x9c\xb7\x1f\x84\xa2\x94\x01\xcd\xa1\x60\x28\x10\xfc\x3c\xe8\x45\x72\x3b\x13\x70\xf8\x63\x7c\xa4\xcd\xca\x46\x60\x48\x04\x6b\xb7\xac\xe1\x15\x5b\xbc\xd2\xae\x1b\x89\x14\x7a\xc6\x6b\x10\xdf\x21\x98\x49\x4e\xb2\x5e\x71\x1c\x3f\x42\x3a\xac\x07\x06\xf9\xc6\xa9\x18\x90\x8f\xd2\xd8\x7f\x4e\xa0\x3c\x05\x90\x97\x63\xc9\xf4\x47\x69\xe0\x93\x9d\xc6\x02\xdc\xa4\xe7\x80\x03\x2e\xe6\x88\x43\xc4\x0f\xb0\x57\x2c\x63\x0d\x15\x0b\xdd\x59\xfb\xac\xa3\x80\x2f\x5c\x93\x53\x41\xa4\x72\x47\x94\x11\x1c\x30\xcd\x23\x48\x08\x8c\xf7\x77\xb7\x41\x81\xab\xa0\x71\x38\x22\x55\x07\x45\x9e\x04\x30\x07\x14\x78\x7d\xf0\x1b\xf0\x6e\x41\x2c\xac\x2f\x5d\x00\x75\xaf\x14\x35\x6c\x9a\x21\x88\xb7\x1d\x73\xa6\xa6\xd0\x2e\xa8\x98\xe5\xbe\x0d\xb9\x04\x2d\x1c\x19\xc5\x2d\x1c\x8f\x70\x65\x1f\x35\x5b\xf8\x49\x16\x00\xd9\xfd\x3d\x94\xf8\xd8\x55\xeb\x59\x04\x22\x4a\xb1\x73\x5a\x5b\x7a\xf3\x5f\x56\x58\x85\xeb\xf5\xdf\xa4\xa6\x5c\xe9\x11\x39\x22\x9a\x8b\x69\xc5\x3a\xdf\x39\x67\x71\x34\x4d\x26\xb0\x20\x96\xc5\xca\x87\xd7\xb4\x62\x58\xa9\x89\x0a\xc2\xd0\x5c\x05\x65\xba\x97\x14\xa3\x01\xb9\x99\x49\x8d\x92\x6f\x48\x31\xd8\xbb\x62\x8b\xbd\x41\x16\x57\x18\x89\xf9\xb3\x9d\xfa\x54\xec\xb5\xfd\xe0\x3a\x94\x28\xc8\xfe\x10\xf1\xb8\x07\xdf\xed\x3d\x8d\x3e\xf6\x0c\xcc\x55\xcf\x22\xc9\xc9\xb9\x1b\xdf\x55\x14\x43\x04\x76\xcd\xb9\xbe\x0c\xdf\x72\xc4\x0f\x14\xbc\x8f\x9e\x69\xc3\x3b\x5c\x9d\xb3\x9d\xf3\xe2\x42\xf5\xe2\x4c\xc5\x33\x32\x20\x17\x82\x75\x64\x8c\xe2\xe3\xc6\x30\xbd\xb3\x98\x70\x27\xa0\x51\x61\xb7\xd0\x46\xd5\x9e\xfc\x8f\xab\x7e\x10\xd5\xc0\xe3\x3a\x17\x72\x9c\x4e\x96\x63\x27\xa3\xb2\xba\x71\x5d\x04\xa9\x5c\x8d\xbd\x5b\x59\x78\xf6\x6f\x1a\x40\x75\xa5\xd4\xd3\xc3\xa9\xda\x60\x4d\xc5\x74\x2d\x31\xeb\x6c\xe5\xc6\x38\x41\x72\x46\x35\x44\xdd\x4f\x5c\x50\x54\xdd\xa8\x5a\x42\x45\x74\x2a\x6e\x5d\xc6\x2c\x75\x23\x5c\x91\x10\x5f\x84\x09\x2b\xce\x85\x9b\x6b\xef\x7b\x68\x83\x79\xb4\xd4\x00\x06\x43\x46\xa2\x66\x12\x42\xae\x7e\xb9\x64\x38\x7d\xba\x12\xda\x02\x42\xe9\x7b\x04\x11\xeb\x0b\xbe\xc2\x20\xda\x28\x98\xc6\x6a\xb6\x26\x8e\x99\x37\xb2\x0b\x3f\x14\x43\xc4\xce\x17\xc9\x9d\x54\x09\xe2\x61\x23\xda\xb0\x5d\xcf\xb3\x57\xa7\x98\x40\xbb\x8d\xb1\x6c\x84\x43\x59\xdf\xa8\xe3\x71\x37\xd0\xee\x88\xaf\x40\x19\xc0\x72\x17\x21\x2a\x5b\xc2\x27\x76\x5f\x5c\x7d\xc8\x1c\xfb\xd2\x89\xa8\x86\x88\x3d\x85\x87\x34\x5e\xac\xa6\x2c\xa4\x94\x0c\x4f\x14\xa0\x18\xe0\x39\xae\xde\x4a\xf7\x72\xe9\xcc\x0e\xb3\xb6\x28\x39\x63\x78\x53\xb5\xa1\x86\x41\xba\x90\x62\x93\x0a\x6b\xd2\xb9\xdd\x9b\xcb\x92\x4f\x5c\xd6\xc5\x45\x14\xbd\x34\xc0\x12\xa5\xae\x92\x68\xdc\x8b\x34\x19\xbc\x5c\xc7\x91\xd4\xa2\x65\xd8\x52\xc9\x21\xb0\x52\x96\xc1\x09\xba\x9c\x4f\xb2\x3a\x8e\x72\x35\x43\x79\xec\x64\x91\x6c\x3c\xfe\x43\x72\x2b\xf4\xc7\x62\xea\xd0\x51\xdb\x77\x0f\xe9\x74\x35\x6b\xf3\xc8\x1f\x49\xae\xfb\x11\x58\x88\x9c\x90\xef\x78\xc5\xf4\x42\x1b\x4c\x10\xe5\x73\xa4\xf3\x98\x42\x2b\x0d\xe1\xa2\xa8\x1a\x17\x70\x88\x54\xdf\xd2\xd9\x1d\x3b\xe1\xec\x62\x5b\x3b\xad\x97\xbb\x7d\xe6\xfa\xad\xe2\xbe\xcb\x94\x11\xd2\x9a\xc3\x6d\xca\x72\x5a\x49\xbb\x35\xe9\x55\xfa\xb2\xb3\x1b\x93\xa2\x6b\xaf\xfe\x8e\x8f\x15\x23\xef\x66\x54\x08\x56\x45\xad\x35\x5d\x78\x0b\x35\x86\x16\x33\xe4\x32\x94\x58\x0a\x57\x31\x2b\x25\xcc\xa4\x36\x64\x4e\x8b\x19\x17\xa1\x27\x97\x08\x2d\x66\xdb\x5a\xc9\xcf\xb0\x1f\xc0\x44\x5f\x5a\x00\x7a\x9e\x73\x2e\xe2\x82\x50\x78\x8c\x9d\xb4\x17\x1b\xa8\x8a\x91\x04\x42\xa5\x32\xf4\x23\xbc\x35\x77\x68\x97\xed\xa9\x14\x9c\x35\x5a\x53\x80\x9f\xc3\xb3\xfd\x57\x3e\xf9\x3c\x22\x7b\xec\xb3\xf9\xfd\xde\x80\xec\x7d\x9e\x68\xfb\x8f\x30\x13\xbd\x37\x22\xa7\xf3\x10\x4c\xc5\x45\x24\xde\x30\xf7\x03\x2b\x52\x45\xc2\x61\x42\x9b\x83\x4f\xc7\x9f\xde\x92\x99\xbc\x21\xa5\x24\x37\x0c\x02\xb8\xad\xa6\x00\x49\xbb\xda\x6b\x1c\xd1\xce\x40\x85\x8f\x42\xce\x6b\x25\xe7\x3c\x24\x6c\xba\x0b\xd0\x13\x8c\x64\xc2\x59\x35\x22\x0b\x9a\xbe\xaa\x1a\x61\x31\xed\x93\x6b\x9e\xfd\x96\x7c\xf7\x8e\x18\xaa\xa6\xcc\xd8\x35\x88\x68\xe6\x63\xa6\xfa\x36\xd9\xcd\x11\xe3\x83\x0d\x52\x60\x96\x6f\xbe\xee\x35\x87\x62\xb4\xfc\x24\xaa\xde\x6e\xd8\x5c\xf7\xda\xc3\xd1\xdd\xef\xe3\x28\xc6\x70\x42\x2b\xcd\xc8\xbe\x7d\xf0\xf0\x46\x71\xc3\x0e\x46\xe4\xdc\xff\x0a\x2a\x15\x80\xa8\x3e\x91\x29\xe2\x30\x26\xf8\xb8\x49\x35\x33\x58\x5e\x5a\x38\xf1\xf0\x83\xa5\x2d\xbd\x85\x64\x3c\xf0\xb1\x94\x15\xeb\x59\x7f\x1f\x71\xef\xa7\x9f\x3e\xf6\xb6\x62\x76\xf1\xbb\x9d\xef\x2e\x34\xbf\x91\xaa\x2a\x6f\x78\xe9\x72\xc4\xc8\xbe\x7d\xf8\x20\x0d\xe5\x53\xbc\x40\x89\x3e\x9f\xdc\x8d\x08\xf3\xb8\x5b\x6e\x6e\x78\x99\xe7\x44\x13\x2e\x20\x00\xd1\xc5\x01\x6f\xc3\xb2\x38\x40\x00\x09\x78\xc9\x84\xb1\x3c\x46\x69\xb2\x0f\xbf\xe8\x5f\xf2\xf4\x84\x63\x97\x1a\x58\x57\x2a\xcb\x45\xc6\x5c\xb4\x5d\xa4\x5a\xdc\xb4\x72\x94\xa5\xb7\xde\x39\xaa\x99\xc1\xc6\x0f\x50\x80\x52\x9a\x19\xd1\x7c\xde\x54\x86\x0a\x26\x1b\x5d\xf5\xae\x7c\xf2\x82\x9e\xb7\xc6\xa4\x62\x9f\x91\xf6\x6d\xab\x4d\x66\x0b\x41\x57\x40\x87\xa2\x22\x6d\x2b\xbf\x65\x09\xbd\xd7\x5a\x6d\x25\xab\xf2\x30\x48\xf8\xa1\x29\x0d\xfb\xcc\x0a\x57\xf0\xb6\xae\x9a\x29\xef\x55\xf4\x3f\x51\x88\x4f\x8b\x36\x1b\x3a\xbb\xf5\x16\xb4\x07\x5c\x38\x0b\x91\x6b\x5b\xda\x2d\x3b\x8b\xdc\x37\xae\x5b\x79\xe8\x3a\x9d\xd6\xfc\x2b\xf9\x52\xbe\x28\x4e\x5b\x53\x9c\xe2\x26\xd5\x11\x58\x25\xab\x99\xb0\x5c\x47\x90\xef\x5a\xf2\x82\xfb\xbc\x35\x34\x91\x70\xc6\x99\x24\x3b\x37\x59\x57\xac\x8b\x6c\x9f\x33\x59\x95\x9a\xb0\xcf\x46\x51\xcb\x78\xe7\x96\xc5\x86\xdf\x4c\x08\x15\x8b\x51\x9a\x90\x97\xe4\xc3\xcf\xeb\xb7\x4f\x3e\x99\xdd\xd6\x91\xca\x17\x1d\x29\x1e\x9a\x15\x8a\x99\x84\x9a\x73\xb9\x4e\x2b\x00\xd2\x3d\xae\xce\xc7\xb7\x2c\xad\xf8\xad\xaf\x68\xe1\x62\x70\x52\x0c\xc8\x9a\x09\xcd\x0d\xbf\xee\xb4\x53\x85\x9a\xb1\x54\xeb\x60\x90\x04\x71\xc6\x11\x40\xdd\x29\xe7\xda\x7b\x61\x74\x86\xf2\x09\x11\x72\xe9\xad\xe2\x3a\x1f\x21\xee\xb2\xf3\x48\xef\x45\x43\xd0\xd2\x1c\x9b\x91\x53\x01\xd5\x21\x71\xf2\x01\x14\xa6\xc3\xff\xc6\xb8\x25\xbb\x07\x91\x59\x16\x76\xa1\xff\x4e\xbb\xdd\xdb\x1e\xd9\xcc\x11\x9f\x9f\x5a\xce\x27\xa7\x13\xe9\x63\x24\xda\xf9\x4a\x2e\x69\x7e\x86\x6e\xdf\x3d\x36\x99\xb0\xc2\xde\x0d\x68\xf6\xe7\xfb\xd6\x59\xc5\xb2\x6c\xd0\xdd\xe7\xab\xb7\x76\xab\xaf\xa6\xd6\x29\x8c\xc2\x08\xda\x50\xdf\x53\xa1\x0d\x85\x82\x9a\xf0\xc6\x56\x4e\xb3\xc2\x93\x6b\xd7\xe8\xae\x13\x06\x45\xf8\xb2\x9c\x89\x40\xcc\xad\x18\x56\x30\x65\x6f\x4c\xb5\x20\x37\x4a\xa6\x66\xb8\xa1\xf9\xf8\xa8\x2c\x5d\x95\x2f\xd7\x8e\x11\xab\xc6\x8e\x08\xad\xf9\x8f\x4c\x59\xfd\x6a\x00\x85\xb4\x06\xa4\xe1\xe5\x5f\x92\x56\x7c\xa0\xbb\x59\x5e\x33\x75\xcd\xd9\xcd\xa1\x2b\x28\x34\xb4\xdb\x3b\x74\x35\x1a\x0f\xc1\xc4\x75\xf8\x5b\xf8\x27\xc3\x3e\x1c\x2b\x59\x93\x9f\x2d\x38\xe3\x86\x57\x25\x53\x6f\x1d\xab\xfe\xd9\xb5\xaf\x0b\x21\x11\xc3\x29\x13\x10\x93\x20\x5e\x19\x68\xb9\x0f\x5d\x19\xdd\xfb\x4c\xb9\x99\x35\xe3\x51\x21\xe7\xd1\xab\x0d\x35\x9f\xea\xc3\x68\xee\x43\xae\x75\xc3\xf4\xe1\x37\x7f\xfe\x97\x3f\xa6\xf7\xff\x4a\xf6\x5a\xba\x37\x7d\x4b\xf6\xf6\x72\x18\x32\x92\xc3\x22\x27\xd0\xe2\xb5\x97\xfe\xd9\x75\x13\xe2\x3c\x4b\xbe\x42\xf7\xa1\x33\x45\x6c\xe2\x1b\x74\x3c\x36\x52\x44\x2c\x91\xf3\x13\x39\xcc\x20\xda\x62\x6b\x5b\x89\xab\x11\x3d\x45\x81\x2d\x7b\x0e\x4b\x6a\xa8\x66\x26\xc5\x83\x9d\x8b\xad\x44\xa0\x58\x0e\x10\x73\x18\xf7\x15\x04\xc2\x31\x28\x21\xee\x9b\x6e\x92\xe1\xbf\x39\x33\x83\xe8\x3c\x39\x91\xca\x1f\x59\x7f\xa9\x01\x4b\x45\x41\x1b\x1d\x4c\x38\xc6\xb5\x4b\x8b\x60\x45\x42\x0b\xe4\xe4\x8b\xec\xde\xf2\x87\x1f\x4e\x8f\xf3\x98\x6d\xda\xf9\xbc\x15\x02\xfe\xbb\xbb\xfd\xee\x62\x40\x00\x1b\xff\xa5\x89\x4d\xce\xf6\xc9\xf6\xb2\xb9\xe7\xb7\xb1\x3b\xd3\x82\xb5\x11\x11\xc7\x5c\x5f\x6d\xcb\x36\x7a\x0b\x90\x2e\x5d\xfa\xeb\xbb\x13\xe2\x3e\x5d\x17\xbe\xd0\x6b\xe9\xa7\x09\x79\x48\x8c\x27\xd3\xbf\x9d\x16\xac\x0d\x45\x2c\xb9\xbe\x7a\x7e\x26\xdb\xba\xfc\xd8\xaf\xf4\xee\x97\x16\xf0\xb1\x6c\x57\x74\x84\xc3\x71\x5d\x40\xed\x85\x6c\xc8\x8d\xeb\x89\x9e\x68\xcf\xbc\xe4\xf5\x5b\x72\x22\x74\xa3\x58\x9b\x37\xbc\x0c\x82\x55\x65\x1f\xdd\xba\x09\xdd\xff\xf5\xdb\xad\x07\x87\xec\xc0\x55\xc4\xf1\x65\x44\xa9\xd4\x54\x19\xb0\x72\x6e\xfb\x86\x05\x40\x3c\x5b\x8e\x3e\x10\x8f\x79\xc5\x4e\x27\xbe\xc0\x54\x37\x4a\x9d\xeb\x30\x79\x1b\xc2\x0d\x12\x58\x8e\x6b\xf4\x9d\x0c\x92\xfa\x61\xc9\xae\x0f\x75\x49\xdf\x0c\xe0\xb5\x7c\x81\xcc\xee\x1e\x50\x4d\xf6\xde\xec\xf5\x5f\xf9\x82\xcf\x79\x45\x55\x85\x0d\x63\x42\x27\x9e\x30\xbf\x95\x22\x3d\x20\x90\x93\xf7\x7a\x8f\xec\x4b\x05\x10\x15\x54\x90\x8a\xf9\xe6\x32\x8e\xa0\x2f\xd0\x18\x70\xf0\xec\x6f\xf2\x6e\x44\x40\x21\x7f\xdd\xfa\x25\x2c\xbd\x4e\xe2\xe4\xde\xd8\xaf\x79\x76\xdc\x8a\x70\x5c\x58\xb9\x6e\x44\x7e\x70\xd2\x95\x93\x8f\x11\x6b\xed\x61\xf8\x27\xbe\x0c\xec\xf8\x92\xdc\x36\x4b\x0e\x98\x47\x75\xa4\x90\xdb\xb1\x73\x5f\x08\x46\xf4\x75\x0e\x4d\xb9\x39\x67\xb5\xdc\x9a\xae\x86\xcb\x2f\x05\xb1\x70\x63\x3f\x90\x9a\x1b\xa9\x16\x84\x1a\x42\x91\x33\x14\x4d\x45\x15\x51\x0c\xc3\x51\xfa\x9d\xdc\xf1\xc9\xd9\xf9\xc9\xbb\xa3\xcb\x93\xe3\xb7\xe4\xaf\x6e\x75\x1e\x5b\x16\x46\xe4\x52\xb6\x31\x2f\x71\x81\x47\x67\x76\x0e\xf0\x0d\x1c\x37\xee\xe9\x93\x3b\xb1\xfc\xea\x98\x2b\x4b\xa5\x21\x05\xfe\x54\x70\xf3\x2e\x2c\x86\xb5\xa6\x2a\x29\x5c\x2e\x8e\x5d\xd1\x85\xdd\x4c\xb9\x71\xfd\x87\x11\x00\xfb\xb5\x9f\xad\x17\x28\x00\x01\xd0\x54\x59\xbe\xd2\xed\x1b\x3f\xc3\x58\x9e\x16\x71\xb6\x61\xd3\xe3\x0a\x2a\x28\x6d\x9d\xba\x06\x40\x42\x07\x0d\x8c\x5c\x6d\x3f\x4f\x13\x1c\x21\xae\x45\xc8\xe0\x8c\x25\x52\x11\x6d\xa8\x32\x78\x47\x5e\x8d\x46\xaf\x46\x20\xca\xbe\x1a\xbd\xf2\xfa\x60\x15\x72\x85\x9d\xb4\xd7\x02\xe3\x73\x25\x53\xaa\x39\x74\xa9\xc6\x88\x90\x4f\xbe\x24\x2a\xf4\xfa\x5c\x4a\x57\x0e\x99\xc8\x55\x15\xde\x01\x3a\xd2\x74\x69\x4f\x82\xe7\x13\xfc\xb7\xcd\x38\x7e\x49\x97\xf5\x3c\xe5\xd7\xae\x55\xde\xd6\xc2\x6a\xda\x57\xcc\x82\xa9\xf1\x8e\x39\x23\xe6\xf9\xfb\xed\xbd\x1b\x92\xee\x4c\x6f\xe6\xf8\x80\x7b\xaf\x42\xce\xe7\xdc\x90\x19\xd5\xb3\xd0\xb7\xa8\xcd\x3f\x4e\x63\x4d\xa9\x06\xd8\xaa\xd1\x86\xa9\x49\x2f\xda\x95\x85\x99\x7b\x00\x96\x0c\xae\xe1\x63\x57\xb0\x59\xb4\x16\x21\x60\x72\x7a\x46\x15\xb3\x4f\xd6\xc0\x7d\x2a\x3e\x61\x86\xf7\xbd\x1c\x2b\xa4\x32\xe6\xb4\x5c\xdf\x28\xc5\x49\x60\x87\x01\xde\xc3\xf3\x93\xa3\xe3\x0f\x27\xa3\x79\x1f\xb7\xc2\x96\xf9\x1d\x13\x65\x2d\x79\xdf\x5e\x15\x43\x52\x53\xd3\xa7\x23\x6c\x2a\xa7\x0c\x60\x6f\x9b\x53\x06\x40\xfc\x0d\xf7\x1f\xa0\xae\x09\x08\xea\x7a\xd7\x44\x98\x6c\x64\x2d\x2b\x39\x4d\x68\x27\x9a\x86\xa7\xbf\xc5\x0a\x11\x43\x3a\xac\xe5\xd6\x7c\x61\x16\x75\xb6\x7d\x7c\x16\x06\x7f\x72\xed\xf1\x04\x73\x92\x49\xa8\xd6\xf6\x05\x9c\xd0\xb3\x50\xf6\x6f\x1d\x1b\xda\xe9\x81\x59\xb0\x12\xc5\x26\x3b\xc1\x10\x6a\x6e\xd5\x4c\xcd\x39\xd6\x05\xdb\x55\x2b\xc0\x56\xb0\xa4\xaf\x01\xc0\xb2\xe1\xb3\x9e\x17\x39\x07\x7a\xf8\xf5\xbb\x32\x43\xad\xd8\x10\x8a\x6f\x58\x75\x77\xc2\x2b\x28\x24\xd4\x8a\xd2\x91\x08\xd1\x6b\x51\xef\x98\xf5\x9e\x5f\x9c\xb9\x5a\x2c\x3b\x68\x5b\x45\x38\x38\xe0\xb1\x6d\x6f\x55\xf5\x4b\x86\x82\x5a\x4c\x56\x6e\x74\x3e\x18\x3a\x85\x17\x96\xca\xc5\x86\xd5\x8a\x5f\xf3\x8a\x4d\x2d\x08\x33\x2e\xa6\xba\xed\x20\xe5\xe2\xe3\x7a\x2d\x0b\x35\xa2\x58\x2b\x76\x85\x78\x9b\x0f\x10\xed\x16\x9a\x2b\xe0\xd5\xfc\xf8\xe9\x12\xe3\xad\xcc\x8c\xf7\xbc\x64\x89\xb6\x31\x0b\x64\x4f\xc1\x84\x90\xe1\xb0\x1f\x26\x5e\x7e\x3a\xfe\xb4\xff\x9f\x52\x30\x5d\x56\x07\xe4\x27\xe6\xf6\x00\xaa\x1a\x19\xc5\x0b\x43\x6e\x66\x12\x9c\x0f\x8d\x76\xfb\xd8\x62\x24\x50\x2b\x4c\xca\x73\x4f\x1d\xda\x27\x85\xec\x89\xa0\x20\x29\x77\xd6\xe0\x56\x44\xd6\xa4\x8d\x62\x7f\x86\xc6\x99\x2d\x09\x9b\x3b\x23\xa8\xf8\xa8\x9e\x55\x84\x2c\xc9\x63\x88\xce\x39\x14\x85\x28\xd1\x8b\x79\xc5\xc5\x15\x34\xa4\x71\xcc\xd6\x35\x77\x64\xc4\x7e\xe1\xc9\x9b\x62\xb4\xca\x2f\x24\x3d\xd9\x45\xcf\x20\x20\x99\x1d\x88\xe5\x80\x98\x09\xcb\x13\xfe\xdd\xb3\x42\x74\x75\x64\x91\x6e\x7a\x47\x9a\x3e\xeb\xa3\xe5\xba\xd0\x7c\x5b\x12\x0d\x2c\xde\x11\x67\x04\x39\xbd\x78\x77\x71\xfa\x25\x86\x9d\xdd\x25\xeb\xc2\x26\x3c\x67\xbb\x0a\xff\xa5\x9f\xe9\x77\x48\xaa\xa6\xef\x2f\xd1\x48\x7f\x26\x95\xa1\xd5\x16\xd8\x64\x31\xa3\xf5\x51\x63\x66\xc7\x5c\x43\x67\xd5\x3c\x6a\xe3\xad\x59\xa3\xba\x67\x0c\x84\x5e\x17\x2c\x46\xb8\xbf\x24\xee\xb9\x77\xff\x7e\x74\x46\x68\x63\x51\xd8\xf0\x02\x72\xb4\xb6\xa2\x22\x91\x68\x6f\x2e\xb0\x26\x75\xd6\x9d\x71\x73\xde\xb3\x2f\xfe\xa9\x5d\xda\x95\x5d\x0b\x86\x5c\x15\x8d\xf8\x12\x10\xf9\xac\x02\x22\x81\x71\xfc\xca\x83\x20\xb9\xe0\x86\x53\x23\xd5\x2e\xc4\x60\x75\x80\x09\x6e\xb0\x46\x1b\x39\x77\x94\xe9\xd4\x3f\x01\x99\x23\x49\x7a\xcc\xad\xc5\x5a\xdf\x1a\xd8\x01\x01\x3b\x4e\x85\x61\x6a\x42\x0b\xb6\x54\xe1\x66\x40\x04\xbb\x71\x30\x71\xff\x4c\x6f\x68\xfe\xd5\xb9\xcc\x6b\x60\xc7\xff\xf6\xf6\x5f\xa3\x88\xcb\x7f\x0b\x1e\x6b\x57\xa9\x39\xf8\x02\x0b\x29\x04\x2b\xcc\xb6\x7c\x80\x76\xf0\x5f\xf2\xb0\x27\xfe\x8b\x58\x8a\x1e\xc0\xad\xfd\x5f\x0d\xad\xf0\x48\x52\x8e\x3b\xfd\x35\x3b\xa8\xb0\xf5\x5b\xd2\x45\x4c\xb7\x6f\x01\x0b\x31\xa7\x0a\x18\x44\xa3\x19\xa8\x04\xb8\x99\x46\x51\xa1\x2d\x8a\xe5\x31\x66\xbf\x72\xd1\xc2\xaf\xc8\xbe\x29\xea\xde\xc1\xb0\x3b\x53\x6c\xb0\x6a\x44\xac\x49\xe1\x9e\x5d\x22\x36\xbe\x0f\xc5\x06\xd3\x5e\x73\xeb\xa1\xb6\x40\x60\xb6\xee\x08\x75\x60\x04\xd4\x8d\xb7\x1a\x55\x12\xf2\x9e\x6b\x83\xe5\x63\xf0\x61\x48\x17\xc7\x82\x65\x56\xc7\x3d\x23\x52\x11\x5e\xff\x5f\x5a\x96\xea\x2d\x4a\xae\xce\x32\x25\x55\xff\xea\x05\x5c\x3b\xdb\x38\x14\x2e\xf0\xd1\xf0\xfb\x66\x51\xf3\x82\x56\xd5\x82\x5c\xbe\x3b\x83\x15\x34\xf9\xf3\x1f\x5f\x83\xd2\xfb\xcd\xd7\x7f\x7c\x9d\x88\xfb\x2f\xf5\xce\x96\xc6\xb3\x70\x25\x3e\x83\xb8\xe1\x5d\xab\xe5\xd2\xa9\xbc\x02\x8d\x3c\xac\x7e\x79\x81\x85\x47\xac\x54\xe3\xf8\x14\x12\x02\x7b\xbb\x82\x8c\x96\x53\x0b\x7d\x29\xf1\x11\x8d\x97\x12\x1f\x2f\x25\x3e\xee\x19\x2f\x25\x3e\x5e\x4a\x7c\x6c\x3a\x62\xb3\xf2\xb6\xd9\x77\x0c\x0b\xb4\x9d\xb8\x2d\x66\xa2\x84\x79\xf6\xa5\x4b\x98\x3d\x51\xad\x2f\x9f\xca\x71\x80\x71\xf6\x5d\x4a\xf9\xd0\xb6\x2a\xe6\xf1\xc7\x8b\xff\xfb\xfe\xe8\xdb\x93\xf7\xb0\xab\x2e\xc9\xcf\xd2\x26\x67\xa9\x7b\xaa\x0a\x09\x8f\x4a\x1f\xd3\xce\x7b\x7b\xf1\xdc\x62\x29\x92\x5b\x90\x8f\xdf\x5d\x3c\x30\x88\x7b\x1b\xd1\x43\x62\xd2\xff\x94\x9e\x5b\x68\x8c\xfd\xa9\x66\x6a\x3b\xe5\x8b\x77\x26\xae\xc6\xbb\xd2\xd9\xe7\xae\x93\xc5\xe2\x2b\xee\xce\xd6\xfc\x19\xfd\x90\x91\xfc\x6a\xa2\x7f\xed\x11\xe1\xb1\x3d\xfb\xb8\xdf\xa7\x44\x8b\x34\x03\x82\xca\x55\x75\x3c\xa9\x12\xac\x8a\x0a\x96\x5b\x46\x82\xe2\x85\xb2\x62\x9e\x15\xf0\x98\xd6\x5e\xd8\xf8\xf5\xde\xe3\x7a\x55\xfb\xc5\x6d\x09\x04\x2b\x81\x71\x0d\x19\x7d\x9f\xc9\x28\x88\xbb\x53\xc7\xb7\x5f\x64\xd3\x1d\x8d\x3c\x51\xf8\xd0\xd4\xb9\xe3\x74\x4d\x8b\x7c\xe9\x62\x3d\xbb\x1c\x2f\x37\xf7\x84\x06\x70\xcf\x50\x10\x01\xb8\xb7\x54\x5c\x2b\xac\xbd\x6d\xe2\x14\x00\x59\x6e\xa8\x40\x1f\x82\x92\x84\x6a\xaf\xc5\xb8\xcc\xfd\x0c\x9d\x17\x76\x12\x67\xc9\x17\x29\xaf\xfc\xf4\xc4\xde\x85\x6d\x7a\x16\xea\x99\x34\x52\x64\xae\xe0\xb8\x6a\xd2\x2e\x8f\x38\x83\x27\xde\xb5\x7d\x90\x5b\x94\xc4\xba\x3d\x21\x3a\x96\x8a\x32\xc8\x86\x52\xf8\x98\xd7\x6e\xc8\xeb\xf3\xa3\xb6\x75\x79\x7a\xbc\x05\x42\xfb\x1c\x02\xf7\xbe\xd0\xee\x2b\x4f\x14\x88\x97\x9e\xdd\x5b\x66\x2a\x71\x6b\x27\xf2\x67\x7c\x7a\xec\x74\x75\x5f\xbf\x56\x3b\x0a\x40\xee\x26\x01\x5b\x11\xbb\xa5\x32\x37\x52\xe5\xea\xf2\xd5\x9d\x6e\x29\xd5\xd1\x7d\x77\xab\x50\xf6\x97\x49\xf0\xf0\x2d\x7f\xcd\x44\xef\x02\x88\x5e\x84\x03\xeb\x88\xdf\x97\x40\xfb\x9e\x0f\xcd\xdb\x39\x09\xf4\xa5\x8d\x51\x67\x78\xe2\x91\xe5\x7c\xfc\x64\xce\xed\x64\x71\xb3\xe5\x4a\x14\x1c\x90\x11\x5d\xde\x0a\x17\x52\xd2\x52\xe9\x7e\xc4\xb6\xcb\x80\xfc\x4c\x18\x9c\x06\x81\x3d\xb4\xaa\xec\xc9\x4a\xd1\xf6\x89\xd4\xbe\x11\xd0\x80\x14\x52\x4c\xf8\x74\x4e\x6b\x3d\x00\x4e\x54\xca\x1b\x71\x43\x55\x49\x8e\xce\x4e\x9f\x9e\xeb\x24\x17\x66\xc3\x7b\xf4\x41\x96\x5b\xa7\xff\x11\x28\x90\xd7\x0f\xf9\x06\xf6\x8f\x31\x37\x1a\x0b\x04\x40\xba\xbe\x89\x4d\xde\x56\x00\x08\xa1\xe6\x96\x9e\x5b\xda\xed\x66\xca\x20\x1f\x0b\x22\x0b\x43\x2b\x17\x66\x33\x66\xe6\x86\x31\x41\x5e\xbf\x7e\x8d\xde\xee\xd7\x7f\xfa\xd3\x9f\x88\xc5\x18\x52\xb2\x82\xcf\x6f\x3f\x08\x4f\xfd\xe1\xcd\x9b\xfe\xa0\xfc\xef\xa3\x0f\xef\x09\x2d\xc0\x62\x81\xdd\x6b\x11\x22\x40\xbd\x78\x51\x3d\x20\xff\xf3\xe2\xd3\x47\x2f\x87\xe8\xa5\x6f\x01\xb3\xc3\x76\x26\x68\xe4\x51\xd6\x7d\xec\x8f\xa6\x66\x06\xa7\x26\xa4\x21\x14\xc2\xa8\x3c\x1f\xe5\xda\xd3\xcb\x84\x6c\x22\x68\x31\xc6\xa7\x33\x38\x16\x0e\xa1\x32\x93\x0a\x4a\x0f\x70\xbb\x25\x10\xa5\xe0\x3b\x12\x62\x65\x08\x80\x21\x88\x10\xbd\x57\xb6\x5b\x36\x20\x15\xbf\x62\x64\xa2\xff\xaa\x64\x53\x0f\x7c\xfe\xa8\xa5\x0e\x4d\x65\xa0\xf2\xc1\x98\x39\x20\x5a\x8c\xd5\x2c\xb1\x3b\xe4\xb6\xe3\xaf\x1d\xe9\xcb\x13\x4d\xe9\xc8\xa8\x53\x77\x2a\x6e\x25\xab\x49\xa8\x47\x84\x54\xd8\x9e\x5e\xd2\x8e\x6d\x31\x38\xb9\xf3\xb6\x67\xe1\x7d\x10\x19\xb1\x39\x5e\xc4\x6c\x68\x25\xc5\x34\xc6\xdd\x56\xf6\xf4\xf9\x78\x8b\x3a\x21\xe6\x2c\x43\xec\x68\x9e\xe8\x51\x42\x0a\x2c\xee\x73\xa9\x1a\x6d\xbe\x6d\x44\x59\x25\x45\x93\xe6\x8d\x27\x25\xe4\xdd\x2d\xe8\x30\x18\xd3\x05\x6c\x80\x83\xa6\x28\x98\x46\xb4\xfd\x79\x64\x45\xf1\x91\x69\x9f\xfe\x19\x63\x19\x13\xa1\x90\x93\x55\x80\xb8\x28\x1b\x4b\xee\xa8\x20\xb4\x31\x72\xd8\xd4\x25\x0d\xa5\x7f\x46\xbf\xf9\x4d\xe2\xba\x47\x55\x3d\xa3\x03\x32\xa5\x91\xd2\x73\x1b\x90\x08\x9b\x27\x8c\x9a\x46\x31\xf8\x45\xfa\xf2\x6b\xde\xd9\xd2\x54\x17\xdf\x06\x2d\xdc\xab\xc0\x50\x04\x9d\xb3\x81\x65\xba\x08\x6f\x22\x08\x4b\x6d\xe4\x35\x9f\x0a\xa6\xd0\xa9\x61\xa9\x3c\x25\x15\x1d\xb3\xca\x01\x20\x55\xfa\x3b\x7f\x8f\xd6\x0a\x2b\xc3\x58\x0a\xad\x09\x9d\x4e\x15\xd3\x9a\x5f\x5b\xde\xa9\xe6\xb4\xe2\xff\x68\xbb\xda\xcf\x18\x39\x3b\xf9\x00\x81\xa1\xa0\x11\x5b\xf5\xc6\xb0\xfe\xb5\x57\x71\x84\xaa\xc6\x16\xc3\x5b\x2d\x78\x44\xc8\x89\x96\x06\xfa\xa4\xdb\x55\xdd\x61\x6b\xa2\x9b\x62\x46\xa8\xc6\xac\xad\xe1\xb8\x92\x45\xff\x6e\x1c\x38\x0a\x39\x9f\x33\x5f\x17\x08\x26\x24\x33\x46\x4b\xa6\xb0\xd3\xa6\x55\x0b\xea\x9a\x95\x23\x42\xde\x59\x0a\x34\xe1\x05\x35\x0c\xbf\x2b\x59\xd9\x58\xa5\x19\x4a\x52\x27\x82\x71\x39\x63\x44\xaa\x92\x59\x25\xc4\xee\x77\x11\x2f\x16\x49\x37\x50\x68\x8b\xdb\xf5\xc7\xdc\x28\xaa\x16\x28\x03\xb8\xb3\x4c\x04\xc2\x32\x87\x62\x46\xc5\x14\x45\x5e\x80\x87\x48\xe8\x4c\xde\xbb\xd8\xa7\x1f\x59\xf8\x00\x49\xb6\x6e\xb5\x23\x21\x9e\xcb\x8f\x3c\x6c\xc9\x0e\xb8\xdb\x17\xee\x6a\xa7\x4e\x96\x9b\x33\xd9\x81\xb0\x81\x42\x7a\x9b\x56\x6a\x2f\x5b\x98\x62\x86\x62\xf6\x12\xad\x22\x04\x2d\x20\x34\x2d\x76\x1d\x07\xa6\x46\x40\xc1\x68\xa0\x91\x21\x0f\x99\x99\x91\x55\x98\x4c\x43\xab\x6a\x31\x64\x9f\x2d\xbf\xb7\xc4\x0c\x84\x1b\xa8\xe5\x0c\x09\xcc\x8d\xd0\xcc\x0c\x32\x00\x02\x44\xa8\x56\xcc\x60\xe7\xbb\x3d\x7c\x7f\x21\xa1\x2c\xdc\x1e\x2e\x66\x95\xc4\x71\x63\x30\x47\x62\xb0\xfa\x27\x39\xf6\xe4\x9a\xa9\x85\x5b\x37\x79\xba\x6c\x57\x95\x64\xbd\x23\x04\x28\x94\x29\x66\x27\x9f\x6b\x85\x95\x36\xb2\xcc\xb9\x74\x5d\x96\x97\xc0\x7a\x5d\x5e\x4d\xe8\x22\xb6\x27\x46\xc0\x41\x30\x28\x3e\xfe\x04\xb8\xc4\xd1\xc7\xe3\x74\xf6\x80\x23\x5d\xb5\xe8\x8e\x44\x45\xa3\x3b\xf2\xd3\x1c\x1c\x47\x6b\xf6\xdc\xd5\x52\xf3\xdf\x60\x3f\x06\xdf\x4a\xdb\xdb\x22\x28\xb9\x62\x8e\x4d\x52\xe1\x8c\xe8\xee\xe1\x6c\x40\x2a\x56\x01\xa7\xb6\x6c\xf3\x8a\x2d\x60\x31\x5c\x3f\xcf\xc9\x67\xbe\x94\x38\x72\x71\xd2\x76\x0c\xed\xcb\x67\x9c\xcd\x1f\x56\xa6\x29\xf3\xd2\x22\x1c\x57\xac\xb7\x2b\x62\xd5\xe8\xdc\x22\x8b\x49\xde\x4c\x01\x77\xc0\x7e\x10\x4a\xd8\x04\xb4\xa7\xd0\xb8\x41\x13\x23\x73\x21\x1b\xc9\x97\x6d\xd5\x1d\xfe\x40\x1f\x6d\xcb\x32\x12\x1e\x12\xc1\xdb\xf5\x07\x5f\xb1\xc5\x2b\x8d\x77\xde\x72\x88\x19\xaf\xb1\x65\xb2\x65\xf6\x72\x92\xf9\xe2\xe3\xf8\x91\x56\xbc\x0c\xe0\x20\x67\x39\x15\x03\xf2\x51\x1a\xfb\xcf\xc9\x67\xae\x9d\x0e\x73\x2c\x99\xfe\x28\x0d\x7c\xb2\xf3\xf8\x80\x5b\xf5\x5c\xb0\xc1\xd9\xaf\x39\x24\xda\x00\x1b\x06\x4d\x1d\xb6\xc4\x9f\xba\x2f\xf5\x19\x30\x87\x6b\x72\x0a\xcd\x57\xf0\xa8\xb2\x02\x04\x59\x5e\x08\x14\x82\x33\x77\xee\x02\x21\xc5\xd0\x27\xef\xde\x86\xc7\x61\x8b\x54\x1d\x64\x79\x22\xd0\x1c\x58\x60\x47\xc7\x6f\x38\xe4\x30\x55\xb4\x60\x25\x29\x1b\xd8\x4c\x6a\x77\x95\x1a\x36\xed\x99\x4f\x79\xd7\x98\x33\x35\x05\x17\x41\x91\x50\x50\xf5\xf6\xc8\x2d\x98\xe1\xc8\x2a\x9e\xe1\x78\x94\x4b\xfc\x28\xc5\x2c\x9e\x7c\x09\x90\xfb\xdf\x5b\x36\xfb\x18\x5a\x45\x36\x4a\x14\x81\x89\xd2\xef\x9c\xd6\x96\x0a\xfd\x97\x15\x72\xe1\xc2\xfd\x37\xa9\x29\x57\x7a\x44\x8e\x88\xe6\x62\x5a\xb1\xce\x77\xce\x8e\x14\x4d\x93\x0d\xb0\x1a\xf2\xbb\x7e\x69\xf8\x35\xad\x18\x96\xee\xa3\x82\xb0\x0a\x45\x75\x39\xb9\xa5\x5a\x0d\xc8\xcd\x4c\x6a\x94\x98\x43\xe5\x83\xbd\x2b\xb6\xd8\x1b\x64\x30\xa8\xfa\x11\x53\xbe\xbd\x53\xb1\xd7\x7a\xcd\x3a\xf4\x29\xe8\x0d\x90\xcb\xb4\x07\xdf\xed\x3d\x95\x4e\x97\x51\xae\xa7\x65\x09\xfd\x59\x69\x75\x96\x5d\xdc\xcd\x4a\x3e\xf2\x67\xd1\xb7\x23\xb5\x54\x08\x8e\xc7\x33\xa3\xf9\x9b\xb9\xc2\xef\x30\x5e\x38\x6c\xf0\x26\xab\xdb\x16\xad\x0c\x80\x80\x4d\x2c\xb2\x9f\xd9\x2b\xd1\x31\x42\xe6\x32\x23\x65\x41\x16\xf4\xa7\xf7\x2f\x8d\xd0\x8e\xfc\x47\x6a\xe5\x2b\xd5\xb0\x01\x29\xa5\x78\x65\x9c\x0b\xa1\x96\x25\x36\xdb\x6b\x6a\x5f\xff\x20\xa4\x5a\x95\x2b\x4e\x7d\x5f\x1f\x64\x00\x85\x2a\x66\x41\xa0\xd7\x94\x57\x74\x5c\x79\x7b\x27\xa4\xb5\xa0\xb3\x0a\x6a\x4d\xfb\x64\x99\x55\x80\xa4\xd6\x8f\x71\x80\xb8\x2a\x32\x42\x02\x17\x80\x36\x21\x31\x30\x2d\xe2\x45\x20\x75\x1d\x60\x19\xa0\x58\x87\xde\xc0\x3b\xdb\x5a\x37\x68\xba\xfd\x07\x53\x32\xc3\xba\x2b\x0c\xe4\xb9\x6e\x53\x4a\x64\x5e\x3b\x52\x92\xc2\xdb\xd1\xb9\x4a\xe7\xa0\x0c\x5f\xbb\xf0\x1b\x28\xd9\x1a\x95\xf4\x55\x12\x11\x01\x62\x22\xe1\x8b\x31\xec\xcb\x4e\x11\x99\x16\x5d\x76\x91\xcc\x3c\xd0\x01\x13\xb9\x8f\x73\xc8\x29\xf7\x78\x55\x2e\x5d\x23\x1e\xec\x94\x33\x01\x28\xbd\xa7\xfc\x71\x2e\x54\xa8\xee\xda\x08\x2c\x74\x8a\x51\x68\xf9\x1c\xb2\xd9\x50\x0b\xa3\x34\x3f\xd0\x3a\x63\xb0\x49\x98\x13\x72\x0c\xd5\x1c\x89\x26\x1d\xcb\xc6\xf8\x12\xb7\xee\xfb\x92\x1a\x6a\x6f\x9e\x0b\xf8\xd9\x0d\x17\x6e\x3e\x3b\x6c\x26\x15\x39\xff\x75\xc5\x18\xde\x6e\xcc\xfc\x80\x30\x5a\xcc\xac\xb6\x33\xc4\xe0\x4c\xab\xa7\x79\x85\xec\xd8\x1e\x14\x2a\x41\x72\x59\x60\xc8\x71\x85\x02\x46\xf8\x8b\x13\xc5\x1b\xfb\x20\x0c\x9f\xde\xa2\x5d\x4a\x82\x53\xcf\x44\x9b\x64\x9b\x01\x12\xef\x1e\x71\xf4\xc2\x1b\xb8\x61\x47\xc0\x5a\xb5\xd4\x06\xd8\xea\xfa\xac\xb4\x3f\x0b\x97\x3e\x03\x14\x2b\xde\xbe\xad\x63\x6d\x79\x98\x8b\xa9\x6e\xc4\xad\xf5\xad\x50\x93\x09\x06\xb0\x28\xc3\x4b\x53\x6f\xec\x8f\xaa\x69\xcf\x78\x01\xdd\x82\xec\x82\xee\x59\x8f\x2d\xe1\x38\x73\x18\xed\xa2\xa3\xd7\xcc\x4a\xac\xf0\x9a\x50\x8f\xdd\xbe\x3f\xd3\x9a\x70\x38\xa7\x39\x55\x57\xac\x0c\xd2\xf8\x88\x9c\xd9\x8d\xf2\x96\xbd\x0c\x90\x28\x2f\x45\x40\x62\x15\x5d\x74\xfa\x57\x5b\x30\x5f\x8d\x46\xaf\x5c\x9f\xa6\xdb\xdd\xac\x33\x51\xfc\x3c\x66\xbc\x6c\xc6\xbb\x0e\x6d\xfa\x40\x6b\x8d\xc6\x51\x2b\x46\x83\x3b\x48\x42\xeb\x7d\x33\xf3\x51\x42\x34\x39\x79\xbd\x1d\x99\x8d\x13\x79\x1d\x8e\xf9\x9c\x8d\x19\x42\x81\x70\xe4\x76\x30\x66\x74\x2e\xde\xe5\x58\x74\x38\xe4\xe8\x61\x5e\x6f\x75\x46\x3b\xf3\x3c\x21\x2d\x64\x79\x3c\x96\x8b\x08\x02\xee\xb9\x26\x9f\xbc\xb5\x62\xb3\xa4\x11\x83\x85\x5f\x73\x68\x43\x7e\xec\x50\xd6\xc8\xf2\xd8\xb5\x2c\x92\xe5\x71\x3a\x01\xa6\xb3\x24\x84\x38\xf6\x18\x27\x06\x05\x05\x44\xe7\x32\x05\x93\xad\xa6\x97\x2c\x8f\xad\xa4\x9b\x2c\x8f\x1c\xe9\x27\xcb\x23\x3d\x1d\x65\x79\xe4\xb1\xa7\xe0\x78\x2c\xe2\x14\x77\xe1\x56\x1d\x63\x8d\x53\x37\x40\xe0\x07\x53\x58\x1d\x31\x86\x8c\x34\xc9\x89\x73\x48\x96\xe8\x58\xcb\xaa\x31\xa9\x0d\xc0\xef\x5a\x24\x96\x19\xe1\x25\xbd\x17\x2a\x8f\xa0\xb8\xbc\x5c\x24\x89\x82\x26\x81\xe2\x59\xce\xb5\x1e\xcf\xf3\x92\xdb\x97\xba\xab\xae\x97\xfc\x15\xdb\x71\xec\x46\xdd\x76\x1c\x3b\x51\xbd\xdd\x83\x92\xbf\x86\x3b\x8e\xa7\xaf\xe4\x8e\x63\x97\xea\x15\xaf\xde\x93\x67\x59\xd5\x1d\x47\x56\xfa\x96\x5e\xe1\xdd\x8f\x47\x72\x3c\xfa\x69\x9d\x98\xb9\x08\xfd\x24\x3b\xb6\x1d\xa8\xa4\x6e\x34\x9a\x9e\x7c\xf8\x14\x76\xa0\x4c\x37\x09\xe6\xf3\x27\x3d\x96\x1f\xdf\x97\x33\x38\x3a\x3b\xcd\x68\x3a\x8f\x66\xbd\xc3\x78\x1e\x3f\xf1\x62\x3e\xdf\x64\x74\x36\xf8\x14\x2d\xdf\x71\xd2\xc4\x71\xbb\xa3\xae\xbc\x52\x16\x4d\x65\xf7\xcd\x75\xb7\x5e\xfc\x3b\x2b\x64\xc7\xdd\xd2\x22\x0c\x34\xd2\xd5\x8f\x68\xc5\x71\x27\xc6\xfa\x9e\x97\x98\x24\x99\x9e\xe4\x4b\x76\xdf\xb4\xb7\xa3\x06\x39\xd8\xfd\x84\xbe\x4e\xcb\xa3\x83\x2d\xaf\xce\xfd\x26\x3a\x6f\x2f\xfa\x61\x22\x97\x50\x2d\xcb\xb7\x18\x9f\x46\x85\x90\x06\xc3\xcf\x07\x18\xd9\xa0\x07\x2e\xc6\x23\xaa\x6d\x2a\x4a\x2b\xfc\x60\x22\xab\x4f\xeb\x1f\xbd\xfa\x75\x65\xa4\xc0\x06\x9e\xe5\x41\x27\xf2\x48\x49\x24\xad\xcc\xfa\x68\xa1\xf0\x6e\x7e\x8f\x49\xba\x98\xb1\x39\x85\xff\xfc\xce\x6f\x90\x25\xda\x2e\xad\x1b\xfc\x4c\x4c\xcd\xad\xce\x30\xe8\x94\xb8\xda\xbb\x7e\x93\x21\xc5\xb0\x1d\x8f\x12\x91\x1c\xce\xfc\xd1\xb6\xf3\xac\x63\x39\xb1\x57\x14\x8c\xbb\x10\xa3\xe1\x0b\x0d\x07\x4f\x9e\x95\x24\xae\x71\xff\x77\x7c\xeb\x1e\x33\x26\x13\xc7\x73\x30\xe4\xf7\x35\xe0\x0f\x82\x94\xde\x35\xbc\x67\x03\xec\xc5\x80\x7f\xff\x78\x31\xe0\xbb\xf1\x62\xc0\xdf\x78\x3c\x9a\x01\x3f\x12\xe9\x3c\x87\x5d\x61\x81\x8f\x9b\x76\x79\x33\x7c\xdb\xb8\x7c\x84\xee\x3c\x6f\x3b\xf7\x86\x73\xa9\xba\x91\x11\xaf\x46\xa3\x57\x18\x1b\x31\x0a\xfe\xbf\xc6\x4c\x86\x7f\x26\x4c\x14\xb2\xb4\xf3\x5c\xc2\xfc\x4a\x1b\x50\x77\x5a\x63\x68\x0c\xcb\xdc\xaf\x15\x47\x57\xc0\xdc\x79\xe5\xc6\x8c\x6c\xcb\x97\x46\xfc\xee\x31\x85\xf3\x8c\xec\xa5\x15\xee\x3d\xe4\xfe\x28\xdc\x81\x32\xe5\xa4\xfc\xb6\xe8\x63\xc5\xe7\xdc\x25\x78\x5a\x7a\xca\xb4\xc9\x95\xb7\x43\xc8\x3e\x4e\x3e\x2a\xea\x66\xe0\x16\x1a\xcd\xd9\x5c\xaa\xc5\x20\x2c\x66\xbf\xec\xac\xee\x9e\x38\x00\xe5\xa2\x68\x94\x62\xc2\x54\x8b\x48\xcd\xf8\x75\x69\x19\xfe\xa4\x76\x58\xc9\x08\xc8\x95\x27\xc4\xb9\x1d\x5d\x8a\xf7\xce\x2f\x83\x9e\xa0\xb0\xdb\xc0\xef\x5d\x57\x8b\x41\x6b\x01\xb5\x9f\x32\x71\x4d\xae\xa9\xd2\xb9\x28\x0c\x79\x2c\xbd\xa2\xe4\xd7\x5c\x3f\x62\xf6\xfa\x85\x13\x5a\xd0\x4d\x2b\x1b\x53\x37\xc6\xb1\x3b\x4f\x22\xd8\xe7\x5a\x5a\x51\x34\x90\x86\x25\xf5\xec\x4d\xaa\xc9\x3b\x1e\x35\x35\x86\x29\xf1\x96\xfc\x9f\xfd\xff\xf8\xdd\x3f\x87\x07\x7f\xd9\xdf\xff\xdb\xeb\xe1\xbf\xfc\xfd\x77\xfb\xff\x31\x82\xff\xf8\xea\xe0\x2f\x07\xff\xf4\x7f\xfc\xee\xe0\x60\x7f\xff\x6f\xdf\x7f\xf8\xeb\xe5\xd9\xc9\xdf\xf9\xc1\x3f\xff\x26\x9a\xf9\x15\xfe\xf5\xcf\xfd\xbf\xb1\x93\xbf\x6f\x38\xc9\xc1\xc1\x5f\xfe\x47\xc6\x97\xa0\x62\xf1\x29\x1b\x4f\xc0\x31\x7c\x14\xb9\xa6\x3b\xf7\xe3\x26\xe9\x72\x61\x86\x52\x0d\x71\x91\xb7\x90\xc1\x94\x6d\x29\x8f\x9a\x8f\x47\x63\x5a\xa9\x2a\x70\xd0\xa0\x7e\xef\x38\x11\x79\x5c\x0d\xfb\xd1\x3c\xfb\x58\x74\x3a\xa3\x1f\x06\x27\xbc\xc3\x05\xe3\xbe\x7c\xf1\xbe\x6c\x32\xbe\xfc\xe4\x85\x0b\x44\x87\x97\xcc\x05\xf2\xfc\x33\x17\xf0\x2c\x5f\xd2\x16\x5e\xd2\x16\x5e\xd2\x16\x92\x67\xda\x51\x2f\xe9\x4b\xda\x82\x1f\xcf\xc1\xdb\xf1\x92\xb6\xb0\xc1\x78\xf1\x7a\xac\x1d\x2f\x5e\x8f\xce\xf8\x95\x7b\x3d\x5e\xd2\x16\x7a\x2e\xf2\x92\xb6\xb0\x6e\xbc\xa4\x2d\xbc\xa4\x2d\xbc\xa4\x2d\x3c\x74\xbc\xa4\x2d\xbc\xa4\x2d\xa4\xc0\xb4\x2a\x6d\x01\xe9\xc6\xaa\xe4\x05\x67\xaa\x6b\x33\x17\x7e\x85\x89\x0b\xda\xde\xa0\x82\x1d\x15\x85\x6c\x84\xb9\x94\x57\x2c\x31\xac\x73\xc9\x70\x7e\x6b\x76\x4b\xc1\xef\x32\xa4\xdf\x7e\x78\x27\xad\xea\x5f\x64\x57\x17\xda\x94\x9c\x89\x1c\x8e\xb0\xfc\x72\x85\x87\xcd\x0b\xd7\x56\x59\x11\x25\x2b\xdb\x2f\x9c\xd0\x61\x2c\xd2\x8c\xc8\x11\x51\xac\xe0\x35\x77\xa5\x5c\x29\x7e\x9e\x01\x10\xa0\x0f\xae\xad\xeb\xc2\x52\x0d\x56\x4d\x02\x97\x0f\xed\x5e\x55\x64\x5e\x76\x02\xf2\x12\xa0\x39\xec\x86\xf6\x95\x50\x5d\x04\x1e\x7d\xc3\x35\x23\x7a\x26\x9b\xaa\x24\x8a\xfd\xa7\xd7\x57\xdd\x8e\x5c\xc6\x30\xc4\x3e\xf8\x3c\xc0\x44\xaf\xee\x4e\x82\xd6\xdc\xde\x67\xb6\x5b\xb5\x39\xd9\xe7\x9a\x2b\xa0\x3b\x17\xac\x90\xa2\xdc\x49\x8f\xd6\x2d\x20\x5b\x9d\x12\xc2\x99\xb0\xf2\x78\xe8\x76\x76\x4d\x2b\x5e\x5a\xf1\xd6\x47\xcb\x23\x19\xcd\x71\xed\x90\x12\x87\x5b\xa5\x5b\x8c\x22\xb4\xae\x95\xa4\xc5\x8c\xe9\x08\x5e\x34\xe4\xb8\xce\xf2\x69\x8d\x8e\xe3\x51\x57\xcd\x94\x0b\xb4\x06\xc1\xaa\x5e\xf8\x97\xc6\x67\x20\xb9\x97\x5e\x06\xf9\x32\x02\xc7\xfe\x3c\x03\x30\xa8\x87\x1a\xb5\x80\x44\x27\x19\x03\x81\x3b\xc3\x27\xf1\x1f\x9a\x48\x2b\xc9\x11\x33\xa3\x82\xfc\xf9\x35\xa9\x99\x2a\x90\x2c\x65\xf1\x7d\x6a\xe8\x76\x66\xe1\xa8\xf8\x35\xc4\x59\xae\x59\xfe\xeb\xdf\x93\x99\x6c\x94\x1e\x1d\x47\x04\xe0\x0d\x7c\x96\x03\x5b\x44\xd9\x86\x94\x1b\x52\x31\xaa\x0d\x79\xf3\x9a\xcc\xb9\x68\x4c\xbe\xaa\xa2\xb9\x0c\x55\x91\x89\xea\x8f\xbf\x4f\x9c\xed\x11\x6a\x94\x66\xa1\x24\xb1\x41\x0a\xfe\x3b\x58\xa5\x9c\x33\x76\x0e\x97\xa5\x96\x5c\x98\x65\x1b\x95\x93\xb8\x72\x72\x2b\x70\x02\xef\x04\x3f\xc8\x6c\x9d\xf9\xa5\x91\xe3\x85\xe9\x25\x3a\x75\x0e\xdd\xcd\xd3\x6d\xe0\xf2\xbf\xdc\x87\x78\x56\x12\xe5\x89\x99\x55\xfc\xc1\x36\xad\x67\x54\x31\xd7\x77\xf5\x95\x26\x15\x9f\x30\x4b\x12\x7a\x80\x92\x28\x1f\xa7\x49\xc5\x43\xa2\xd8\x94\x6b\xa3\xfa\xb9\x1b\x87\xfd\xb9\x4d\xaa\x08\x3d\x55\xb2\xe9\x5d\x2f\x35\xd7\x9d\x07\x20\xbc\x69\xd9\x07\x98\xb8\x0e\xbc\xfd\xcb\x44\x3b\x3e\x81\xd1\x11\xb8\x46\xcf\xb9\x92\xef\xac\x62\xb4\xfc\x24\xaa\xde\xbe\xda\x5c\x1b\xed\xe1\x40\x3b\x1e\x88\x24\x13\x09\x31\x7d\x33\x16\xae\xaa\x6f\x46\x0d\x26\x42\xb8\xb7\xac\x44\x35\xc1\xfe\x7c\x08\xe1\xf2\x91\x87\x32\xa1\xad\x7c\xc4\xc8\x27\xb4\xd2\xbd\xfd\x9b\xe9\x86\x0a\x7f\x7d\xb7\x7f\x40\x08\x47\x97\x88\xba\x16\x06\x52\x91\x79\x53\x19\x5e\x57\xed\x61\x9d\xfb\x1f\x38\x19\xb2\xbf\xad\xb0\xd5\xfa\x68\x14\x41\x42\x35\x50\xeb\xb7\xb5\x54\x06\x03\xd1\xf6\x03\x0c\x4c\x18\xc5\x5d\x87\x5e\xcd\x6a\xaa\x68\xc0\x94\x42\xce\xe7\x34\xa1\xd2\x3e\xc6\x35\x51\xc8\xdd\x40\x09\xc0\xca\x9d\x8a\x56\xed\x0e\x45\x41\xee\xdb\xba\xd6\x86\x09\x2a\x7a\x87\x6a\xe6\xc2\x19\x84\x82\xc8\x9b\x50\xbd\x60\xca\xaf\x99\x58\xbe\xcf\x4e\x97\xff\x96\x16\x57\x4c\xf4\x37\x0e\xfe\xa0\xfd\x19\x97\x0b\x41\xe7\xbc\xa0\x95\xa5\x07\x4a\x5e\x73\x4b\x0e\x58\xb9\xb4\xae\x1e\x38\xd7\x01\xf6\x8d\xf5\x1d\xc7\x51\x2b\xda\xd6\xc1\x35\x9a\xf5\x4e\x2d\xc8\x75\x6c\x16\x86\xc7\xe2\x79\x1a\x23\x49\x14\xbf\x2e\x98\x57\x2a\xed\x7a\xdb\xda\x6f\x7c\xbf\x2c\x3b\xee\xb1\x39\xa2\x51\x20\x49\x86\x30\x58\x6c\x19\x57\x59\x5e\xb5\xf0\x89\x7d\xcb\x77\xc1\xb5\x94\x4f\xe3\x37\x3d\xf7\x43\x8d\x7b\x09\x99\x39\xd0\x4e\x8d\xcb\x2e\x63\x39\xa7\xa5\xd4\xe4\x5b\x68\xa4\x72\xcc\xc0\x06\xf1\x30\x41\xbd\xdf\x0e\xae\x70\x94\xb1\xcf\x74\x5e\x57\x4c\x8f\xae\xfe\x0c\xae\x32\x47\x3c\x0e\xd5\xb8\x3c\x3c\x3f\x39\x3a\xfe\x70\x32\x9a\xf7\x21\x5a\x5b\x56\x0b\xf8\x9c\x4e\xfb\x69\xa0\x43\x32\x97\x82\x1b\xa9\xfa\x70\xb7\x54\xad\x60\xa2\x2f\xed\xbe\x6d\x99\x42\x22\x14\xde\x04\x60\x55\x7b\xbd\xd0\x86\xcd\xd1\x3d\xed\x34\x7e\x2f\xad\x5a\x24\x5d\xc8\x86\xdc\x50\xec\x87\x06\x78\xdc\x5f\x36\xbd\xe4\xf5\x5b\x72\x22\x74\xa3\x58\xdb\x07\x76\x19\x04\xcb\xd2\x7c\x16\xa6\x67\x6c\x70\x65\xb0\x11\x1a\xf4\xdf\x81\xc7\xfb\xc3\x71\xe2\xee\xc5\x5b\xb2\xc7\x3e\x9b\xdf\xef\x0d\xc8\xde\xe7\x89\xb6\xff\x08\x33\xd1\x7b\x23\x72\x3a\xaf\x2b\x5e\x70\x53\x2d\xec\x8d\x62\x4a\x05\xef\x3e\xfe\x60\x29\xb9\xa0\x3f\x24\x0f\xf4\x6e\x6b\x23\x15\x9d\x32\x7f\x91\x7f\xab\xc6\xfd\x65\x0e\x74\x5e\xcf\xe4\x0d\x29\x25\xb9\x61\xa4\x56\xec\x9a\x09\x83\x11\xe8\xda\x4b\x36\xd1\xe9\x40\x57\x9c\x42\xce\x6b\x25\xe7\x5c\x7b\xb1\x68\x4e\x8b\x19\x17\x7d\x0d\x42\xc9\x4c\x10\x68\xc1\xb6\xef\x14\x00\x11\x4c\xf2\x40\xfe\xf1\xa3\xb4\xfe\x35\x7d\x29\xfa\x6f\x67\xf2\x66\x68\xe4\xb0\xd1\x6c\xc8\xfb\xfa\x35\x93\x4f\xe6\x8a\x2d\x20\x39\x6f\xcb\x67\xe3\xc0\xe8\xd8\x3c\x8d\x04\xd7\x3e\x7c\x6e\x35\x9e\xf3\x6f\x8f\x7f\xd0\x29\x7e\xa9\xc8\x2a\x72\xc8\x4c\x71\x58\xb0\x7a\x76\xe8\x56\xfe\xb5\x9e\xbf\xe7\xb4\xdb\x46\x00\x0f\x07\x4a\xb7\x85\xac\x2a\x56\x78\x47\xd9\x3b\x56\xcf\xc2\x03\xcf\xfa\xa0\x52\xd2\x67\x12\x93\x66\x76\xcf\xf8\x6e\x47\x2d\x65\xef\xf8\xa1\x5c\xa8\x67\x61\xe8\xb2\x05\xf8\x24\x8d\x2b\x44\xb4\x46\x8d\xf3\x8a\x1e\xcf\x88\xba\x3c\x0b\xe3\xef\xb9\xff\x52\x33\x03\x82\x2b\x17\x04\x0b\x69\x7e\xb0\x82\xf4\x2e\x58\x79\x77\x02\x0f\x52\x8c\xcc\x98\x6b\x9d\x50\x36\x27\x17\x26\x04\x40\xc0\x37\x12\x85\x3d\xd3\xc6\xcc\x98\x30\xbc\xc0\xf8\x0c\x97\x1c\x1e\xcb\x1d\xe4\x74\x82\xc6\xbe\x32\x21\xc0\x50\x5e\x33\xa5\x78\xc9\x34\x49\x16\x3c\x62\x27\x0f\xaf\x9e\x35\x6a\x25\xc5\xf6\xe5\x08\xa5\x4b\x0d\xcc\xcf\x19\x02\x90\x3f\x18\x7f\x37\xc2\xf0\x77\x22\x00\xff\x31\x42\xef\x9f\x3e\xe8\x7e\x37\xc3\xed\x9f\x71\xa0\x7d\xa6\x50\xc5\xf4\xe0\xfa\xfc\xe1\xe2\x3b\xe3\xf0\xe9\x88\xd8\xf0\x49\x36\x11\x9b\x96\x73\x9e\x50\xf5\x76\x07\x38\x60\x4f\xd4\xd3\x05\xad\xd8\xe9\xa7\x64\xaf\x8a\x9b\xa7\xeb\x22\xb9\x70\x1f\xd6\x96\x7a\x69\xa8\x46\xe2\xbd\x75\xc6\xd0\x62\xe6\x1a\x22\xfb\x38\x09\x29\xc8\xf7\x01\x77\x89\x90\x65\xbf\xd8\xc1\x2d\xbb\x2d\xa6\xd4\xb0\x9b\x9e\x4a\xfa\xb0\x15\x2f\xfb\xfe\x1e\x8c\xb8\x2f\x6e\x8f\x95\x3e\x87\x74\xd7\x46\xc8\xfd\xbf\x35\xf7\xe3\x3b\x33\x46\x77\xb8\x31\x72\xd0\x3f\x98\x71\x2b\x2e\x5d\x3b\xdc\x95\xc9\x82\x3c\x6e\x2e\x8f\x02\x70\x0a\xb4\x2c\x15\xd3\xda\xcb\xc4\x9e\x2c\x1d\x9d\x9d\x92\xbf\xe2\xe3\x5b\x7b\xf5\x5a\x49\x83\x86\xca\x63\x39\xa7\xbc\x77\x0a\x56\x67\x0f\x96\x27\xf5\x9b\x11\xab\xab\x7e\x13\xce\xc2\xb3\xc4\x3d\x6c\x55\xd6\xb6\x3d\x7b\xa3\x58\x49\x9c\x43\x6a\x6b\xbb\xb4\x73\x66\xa0\x5b\x86\x19\xb2\x6f\xbf\x3b\xbc\x51\xdc\xb0\x83\x51\x6b\x12\x5a\xb2\x17\xf5\xb7\xbe\x3e\xa2\x9d\xe9\x8b\xb4\xce\x44\x31\x2d\xbe\xfe\x58\x6b\x91\xf1\xc8\x0f\x42\x64\x48\xa4\x4a\x58\x55\x68\x0e\xd1\xf5\x51\x7e\x23\x98\x7b\x40\x21\x0d\x25\xc6\xd0\xf4\x33\x20\xef\xe5\x94\x0b\xcf\x1b\xa4\xcb\x6f\x99\xd0\xfe\x36\x98\x17\x23\xc8\xad\xf1\x62\x04\x79\x31\x82\xdc\x33\x5e\x8c\x20\x2f\x46\x90\x4d\x87\xd6\xd5\x89\xa0\xe3\xaa\x7f\xee\x77\x57\x5d\x0e\xd3\x91\xef\x2a\x3a\x25\x0c\xfe\x38\x2c\xb9\xb6\xff\x92\x8b\x8b\xf7\x10\x06\xde\x08\xef\x4e\x80\xab\xec\x84\xd5\x50\x4b\x1b\x45\x8f\xed\x71\x7d\x94\x0a\x3f\x24\x54\x8f\xcb\xc6\xf7\x5b\x50\x08\x17\xa5\xdd\x35\xa6\x3b\x25\x1f\xdc\x13\xc0\xfe\x69\xa8\xc8\x89\x59\xd3\x63\x66\x89\x7b\x71\x75\x16\x45\x62\x4b\x65\x3f\x13\xd1\x47\x59\x14\xad\x4c\x73\x26\xdf\x34\xb7\x1d\x67\xb9\xdc\xe7\xd1\x7c\x5e\xdb\xf0\x42\xd6\x85\xdb\x79\xf8\x8e\x6a\x2d\x0b\xde\x26\x3b\x40\xb0\x4e\xab\x82\x94\xa0\x82\x6c\x6f\x57\x40\x49\xcf\xb3\x21\x68\x1b\x58\xa1\x79\x79\x4c\x74\x4f\x50\x1d\x6b\x5a\x5c\xf8\x7d\xdb\xda\x26\xe0\xdd\x48\x69\xbf\x90\xeb\x56\xb7\x90\x2c\xef\x63\xb8\xc1\xcb\xc1\xea\xbe\x7e\xaf\xc3\xbd\xde\xe6\x30\x1c\x10\xbd\xca\xf5\x0a\xac\xe5\x3a\xd0\x10\xa8\xec\xbe\x95\xd3\xea\x5f\xee\x3c\xc7\x09\x39\x7d\xaa\x9b\x6d\x85\x9f\xb9\xb0\x77\x20\xae\xb5\xac\x9b\x0a\x13\xe5\xc3\xa6\x65\x0b\x7d\x7f\x48\x14\x2d\xc2\xf6\xf4\x06\xe5\x54\xcd\x2a\xaa\x8b\xb9\xed\x0b\x19\x97\xe8\x7c\x78\x2d\x56\x7f\x47\xc1\x74\x4a\xc6\x0b\x3f\x5d\x06\x73\xec\xf6\x4b\xb1\xe6\x2a\xbd\xda\xdf\xf4\xdd\x29\xd9\xda\xb1\x50\xbd\xfe\xe3\xef\x7f\x9f\x20\xbd\x70\xc5\x0a\x23\x21\x5d\xd1\x95\xc1\x0e\x21\xb6\x54\x31\xb0\x6d\x60\x9d\x54\x6f\xfc\xc6\x74\x35\x93\x14\x9c\xb2\xbd\x5a\xad\x5b\xa9\xcd\x9a\xa3\xc4\x45\x7a\xed\xd5\xa4\x10\xd1\x6c\x61\xf6\xd0\xd7\xe1\x74\xcb\x7d\x1d\xb6\xda\xcd\x61\x9b\x3d\x1c\xb6\xd7\xb9\x61\x8b\xfd\x1a\xb6\xdd\xa5\x61\x2b\xbd\x19\xb6\x1e\x52\xfe\xf4\xdd\x17\xb2\x54\x02\xcc\x51\x05\x30\xb5\xbf\x42\x62\x05\xc1\x3c\xd5\x03\x93\x3b\x28\x3c\x45\xdf\x84\x4c\x46\xc9\xf4\x1e\x09\x79\xab\x3c\x6d\xbb\x1f\xc2\x0e\x89\xde\x38\x76\xb3\xf7\xc1\x56\x3a\x1e\x6c\xbb\xcf\xc1\x16\xbb\x1b\xe4\x2b\x15\x97\xab\x93\x41\x7a\x89\xb8\xbc\x84\x63\x4b\xbd\x0a\x1e\xb1\x43\xc1\x93\xf4\x25\x78\xec\x6e\x04\xbb\x99\x5e\x97\x5a\xa2\x3b\xb9\x30\xb7\xce\x54\x99\x3b\x57\x8c\xcb\x2e\x98\xc5\x5b\x48\x56\xba\x17\x7c\xcb\x4a\xbc\x07\x50\x72\x04\xbc\xd2\x35\xc5\x06\xa4\x4d\xe6\x34\xb2\x27\xb1\xc1\x92\x64\x5b\x39\x42\x22\x7b\x09\xbc\xab\x5c\x5d\x9f\x2e\x96\x82\x9d\xc3\xc7\xbb\x1f\xe3\xfc\x12\xec\xbb\xc9\xd8\xc5\x60\xdf\xa7\xaa\x59\xf2\xe5\x85\x6c\x96\x2f\x21\x9b\xf1\xd8\xc1\x90\x4d\xdd\xe9\x2b\xef\x5d\x89\xc0\xb0\x40\x29\x93\x63\x2b\xde\xf9\x8a\x34\x2d\xbd\x3d\x3a\x3b\xed\xbd\x7a\xa1\x18\x54\xb0\xa7\x95\x1e\xad\xd2\xd6\x7c\xa4\x8d\xd3\x0d\xbd\x96\x46\x8d\x61\xf3\xda\xa4\xde\xaf\x97\x88\xcd\x68\xbc\x44\x6c\xbe\x44\x6c\xde\x33\x5e\x22\x36\x5f\x22\x36\x37\x1d\xbb\x1c\xc6\x34\x6b\xe6\x54\x0c\xad\xf8\x01\xe1\x9e\x9d\xbc\x9c\x25\x35\x62\x44\x9c\xc0\x90\x44\xe3\xb1\xd0\x30\x94\x9f\x6e\x04\xff\xa5\x61\xad\x4b\x25\xe8\x86\x3b\x10\x70\x06\x70\xec\xce\x71\xa1\xca\xbc\x24\x96\x14\xf2\x56\x01\x45\xb7\x97\xe1\xe8\xbc\x24\x91\x76\x64\xb0\x78\xc7\x03\x6a\x2c\x1d\xb1\xeb\x9e\x2d\x69\xf5\x1d\xe3\xb1\xe3\x7b\xc0\x76\xd2\xdc\xd0\xb1\xa6\x6a\x51\xd4\xbe\xbb\x6b\x7e\x32\x66\x64\xce\x95\x92\xca\x85\xc4\xc5\xaf\x8f\x19\x64\x7c\x3a\x33\x4c\xa1\x29\x16\xf3\x5c\xfa\x13\xaa\x0b\x66\xdc\x2d\x80\x5b\x64\x24\xa1\x02\xcb\xd0\xda\xff\xf6\x25\x51\x60\x6b\xbc\xc0\x36\x66\x33\x7a\xcd\x65\x93\x50\xee\xed\x02\xc5\xcf\x3d\x37\x25\xa8\x56\x0b\xd9\x84\xa0\x97\x06\xaa\x23\x86\x53\xd0\xb7\xf1\xa0\xf7\xd2\x1f\xdb\x49\xc1\x3e\x5f\x4a\xef\xf5\x1e\xb2\xcf\x5c\x9b\xdb\x7b\xee\x51\xc0\x05\x59\x6d\xe5\x32\x5f\xeb\xda\x0a\x2b\x3f\xf6\xae\x58\xdc\xad\x56\x1c\xcf\xd6\xb5\xb5\x5c\x5f\xc0\x57\xf7\x59\x5a\x5c\x03\x20\x2c\xc3\x9e\x50\xc2\x72\xcb\x19\xe5\xf8\x96\x67\xfd\xfc\xbd\x5f\x9a\xa9\xe7\xc5\xcc\xb3\x53\x66\x9e\x10\xf7\x5f\xf1\x62\x71\x7a\x9c\x37\x97\x00\xe7\xf4\x42\x93\x0e\x79\x04\xf6\x73\xf2\x2d\xd5\xac\x24\x1f\xa8\xa0\x53\xf4\xf2\xec\x5f\x9c\x7d\xfb\xe1\xc0\x22\x3c\x78\xb0\x4e\x8f\x57\x26\x1b\x5c\xc4\x93\x7f\xdc\x56\x21\x73\xb2\xbc\x75\xd9\xe4\xd4\x5b\xb3\xf6\xdc\xbe\xad\xd5\x78\x27\x41\x04\x3b\x4b\xf0\x9c\xae\xa8\x7b\x7f\xb6\xdc\x13\x0b\xa3\xfb\x7d\x03\x43\xbd\xcc\x55\xae\xe7\xe5\xd5\x53\x6f\xc0\x6d\x17\x9e\xd5\x85\xae\xd8\xe2\xc1\xd4\x7b\x08\x27\x98\xb8\x38\xbe\xc7\x9c\xde\xdd\xfc\x27\x0a\x2f\x59\x07\xe1\x66\xa1\x66\x1b\x84\x93\x75\xce\xf5\xc2\x28\x6a\xd8\x74\x71\xcc\xea\x4a\x2e\x2c\x16\x9f\x45\xd1\x2e\xf8\xe8\x18\xc5\x42\x35\xa6\x05\x51\x4d\x05\x2d\x0e\xca\x5b\x5d\x03\xad\x16\xde\x92\x79\x2e\xb4\xa1\x55\x65\x0f\x10\xe6\x5f\x0b\xd1\xc6\xc2\xc1\xa6\x62\xc0\x10\xe1\xbc\xf7\xa9\x6e\xd7\xdc\x8f\xf7\x9d\xf6\xe6\x82\x00\x2c\x7f\x3f\xbe\x3d\x24\x7c\x70\xe3\x40\xc1\x3e\x02\x03\x52\xb4\xf3\xa6\xb2\x0c\xba\x2a\xbb\x5d\x86\x51\x7c\x76\xa8\x80\x4d\x18\x80\xfe\xd9\x97\x74\xd6\x3f\xc9\x74\x27\x7e\x20\xfa\xf9\x46\xeb\x63\x23\xe3\x9b\x19\x06\xcb\xda\x89\x09\xad\xeb\x8a\x63\xe9\x01\xa9\x5c\xe4\x6a\xe4\x84\xbd\xfd\xd8\x26\xa4\xf6\x81\x62\xe8\xc3\xc4\xce\x21\xb9\x66\x6a\xbc\x89\x21\xec\xa1\x12\x25\xad\x39\xc4\x00\x6d\x4c\xc2\xfa\x0a\x8d\x47\x67\xa7\xb8\xd0\x2a\xb7\xb8\xff\x12\x11\xc2\x1d\xb5\x8f\x82\xc1\x1c\x2e\xe7\x01\x08\x3d\x9a\x8e\xce\x4e\xb1\xf5\x99\x6b\xd3\xd4\x7a\x05\xac\xf6\x49\x31\x63\xb1\x6d\xcd\x4a\xa7\x76\x46\x43\xa4\x60\x0f\x69\xf2\x69\x21\x60\xa2\x99\x33\x6c\x01\x15\x80\x21\x5c\xc0\x3a\x01\x8a\xd6\xf9\x80\x06\xe5\x11\xd9\xdb\x8b\xd5\x22\xac\xd9\xa2\x22\xb8\x81\xd4\xed\x7d\xd5\x79\xca\xd2\xb5\xf6\xc5\x36\xe5\xf0\x0f\x0f\x15\x7e\x60\x68\x70\x0f\x8e\x99\x21\xdc\x45\x48\x71\xee\xf6\xfb\x87\xf3\xf7\x8f\x8e\xa0\x1f\xbb\xcb\xb9\x46\x3c\x0c\x3a\x70\xd6\x54\x19\x4e\x2b\xd2\xa8\xca\xc7\xe4\x61\x79\x12\x97\x46\x37\xa3\xd7\x51\x93\xa3\x11\x21\x5f\x21\x56\x3a\x64\x40\x52\x06\x06\x3e\xd7\xf4\x6b\xd2\x54\xd5\x80\x4c\xb8\xa0\x96\x91\xb1\x9a\x44\x91\x51\x1b\x43\x7c\xc1\x45\xc1\xec\x36\x0d\x3d\x5e\x12\x80\xdc\x9b\x40\x02\x4d\x83\xc0\xc6\xd8\xdb\x82\xa0\x58\xfa\x56\x80\x8d\x73\x22\x15\x79\x57\x35\xda\x30\x75\x2e\x2d\x1b\x6e\x73\x34\xb0\xe5\x04\x8d\xbf\xfe\x96\x8b\xf2\x41\xe9\x43\xe7\xc0\xda\x0b\x2a\x08\xe3\xe0\x8c\xb0\x4b\x43\x10\xb1\x45\xf6\xf6\x52\xed\xeb\xa6\x98\xd9\x2d\xda\xab\x65\xa9\xf7\x2c\x75\xde\x43\x4f\xa3\xde\x3b\xb0\x7f\x2d\xbf\x2b\xa6\x3c\x44\xbf\x3b\xa4\x35\xdf\x3b\x18\x10\xd8\x70\x88\x68\x93\x9b\x87\xb0\x7d\xa1\xf7\xc8\x6f\x18\x98\xad\x7a\xdd\xa2\xf3\x78\x06\xb8\x18\xa2\x8d\x17\xbb\x99\x71\x83\x49\x2e\xf6\xa6\xa0\x3d\x3b\x34\x96\x59\x66\xa4\x84\x1c\x79\xff\x99\xbd\x5a\x73\x46\x7d\x90\x2b\xbb\x66\x6a\x61\x66\xae\x4d\x84\xa7\xa2\x2f\x27\x07\x37\x23\xe9\xd4\x1c\x29\xf3\x27\xd4\x5e\x37\xa0\x09\xb7\x4e\xe8\xd5\x57\xaf\x96\x59\x52\xcb\x83\x7f\xdd\xe7\x01\x42\x58\xaf\xb3\xf8\xd1\xfe\xb2\x7b\x0e\xf8\x11\x32\x93\x40\x0e\xdf\xbf\x77\x91\x29\xb8\xe1\xdf\x73\x01\x0e\x6f\x90\x87\x7c\x02\xbd\x3b\xb4\x95\x27\x05\x10\xfe\x6a\x4f\xe9\xb6\xd2\xb5\xa9\xa2\xb4\x06\x46\xaf\x67\xde\x35\xd5\xda\x09\x9c\xb2\xfa\x41\x96\xab\x2f\x71\x07\x49\x4e\xa3\x87\x43\x00\x6e\x6b\xe6\x74\x73\x39\xcd\x69\x51\xaf\xd4\x42\xd7\x9f\xe9\x9a\xf3\xbb\x0b\x92\xd6\x4e\x07\x64\x3f\xfa\xe6\xb2\x8d\x89\x20\x93\x8a\x4e\x5b\x5c\x04\x22\x8e\x92\xfd\xbb\x8b\x1f\xfd\x2b\x68\x72\x47\x15\xdd\x7b\x55\xa7\xfb\x94\xa5\x61\xbb\x4b\x77\x3e\x61\x17\x59\xf9\xe5\xfd\x1a\x53\x98\xfc\x6e\x6c\xda\x24\xe4\xcb\xac\x35\xd5\xdf\xb5\xff\xde\xb4\x4e\x23\x4c\xf0\x6d\xe2\xbc\x29\x04\x52\x34\x40\x86\xbb\xf8\xb1\x83\x26\xf7\xc0\x7b\x07\xd2\x5e\xb1\xc5\x8d\x54\xe5\xfd\x08\x7b\x14\x88\x99\xff\x89\x57\xe6\x7d\x1c\x18\x9a\xe3\xe5\x4a\x3f\x5f\x6f\x54\x5d\x0b\x7c\x45\xc7\xac\xba\x1f\xf4\x3b\x14\x83\x0f\xb4\xb6\xaf\xd3\xe6\x39\xa2\x45\xca\x05\x98\xa1\x76\x8a\xc9\x31\x3e\x8d\x4b\xaa\x29\x15\xfc\x1f\x98\x1c\x5a\x58\x4a\x21\x15\xff\xc7\x6a\x54\xdb\x47\xff\x34\xda\xb8\x2a\x56\x98\x03\x87\xf5\x2b\x49\xf6\x3d\xd7\x82\x96\x25\x47\x11\xec\xec\x1e\x0c\x5e\xbf\x5f\x5c\x5c\x3d\xe4\xa4\xe1\x79\xcc\x4d\xc1\x0d\x78\xe4\x63\x5e\x43\x16\xee\xbf\xb9\xeb\x23\xe8\x36\x60\x4f\x8d\x5a\x93\x5d\xb1\xf6\xf7\x73\xca\x91\x6b\xaf\xee\xbe\x75\xc7\xee\x3a\x6c\xa2\x4e\xb6\xb6\xb4\xd4\xbe\x5f\x98\xed\x09\xee\x55\xd2\x86\xb3\x39\xe5\x7d\x77\x0c\x47\xc2\x91\xcd\xa9\x69\x14\x37\x2b\x39\xf5\xfa\x1f\x72\xf1\x7d\x33\x66\x2e\x20\xee\xc1\x3f\x17\x90\xa6\x75\x74\x76\xba\x72\x5b\xf2\x70\xe4\x3b\x0d\x19\x60\x37\x73\x90\x5b\x71\x91\x34\x82\xce\xc7\x7c\xda\xc8\x46\x57\x8b\xd8\x83\x42\x21\xd0\x6f\x44\xc8\xa9\x09\x01\x6e\x54\x48\xb1\x98\xbb\x47\x45\x51\x35\x25\xeb\xcc\x78\x17\x2b\x93\x84\x5e\x4b\x5e\x12\xda\x18\x39\xa7\x86\x17\xa4\x90\x4c\x15\x50\x59\x35\x9e\xbf\xd1\x8c\xd0\xce\x8c\xed\x6f\x8b\x46\x1b\x39\x27\x73\xaa\xf4\x8c\x56\xd5\x5d\x28\x91\x41\x3a\x00\x73\xda\x9d\xdf\xda\x5d\xb9\xf3\xcb\xeb\x35\xfb\x70\xff\x75\x80\x85\x93\xae\x83\x05\x2e\x69\x82\xeb\xbb\x91\x7a\x83\x39\x5c\x59\xdc\x95\x2d\x26\x3a\xf8\x79\x39\x63\xa4\x6e\xc6\x15\xd7\xa0\xc2\x03\xe1\x5a\x90\x31\x9b\x71\x97\x5a\x7a\x3f\xc5\xba\xf3\x88\xef\xdb\xe7\x75\x24\xe3\xde\x1d\x5a\x43\xe1\xd7\xfe\xd6\x71\xc0\xd3\x39\x9d\x6e\x20\xda\xdf\x71\x7d\xdf\x5b\xb2\x4f\xc5\x22\xf0\x53\x68\x59\xaa\x07\x44\x2a\x17\xb6\xeb\x75\x3f\xe5\xbe\x0a\xfd\x80\x15\xf9\xe4\x76\xd4\x25\x13\xbb\x6b\x00\xa9\xf9\x4c\x4d\xa4\x9a\xdb\x7d\xe7\x8a\x4c\x1a\x01\xd6\xf0\x3b\xf4\x42\x88\x47\x03\xfe\xe3\x8c\x99\xb4\xd2\x32\x10\x03\x38\x36\xe1\x01\x23\x54\x93\x1b\x56\x55\x23\x72\x54\x55\xae\xbf\x6a\x54\xcb\xb9\xad\xd8\xd8\x86\xc5\x8d\x57\xeb\x96\x25\x9f\x32\x6d\xc8\xfe\xc5\xbf\x1f\x1d\x80\x40\x04\xc6\xba\x05\x31\x74\x3a\x5a\x0a\x0d\xc7\xc0\x48\x2b\x6e\x95\x0d\x88\x65\x05\x35\xb4\x92\x53\x8c\xa6\xb2\x24\xc5\xfe\xbe\xae\xe8\x42\x13\x21\xc1\x56\x0b\x69\xd5\x68\xb0\x24\xaa\x11\x77\x35\xf4\x7e\x3c\x4e\x79\x3f\x4d\x5a\xd7\x40\x7b\x8d\x7b\xf8\x7e\x9a\x73\x4f\x37\xde\xc7\x65\xc1\x8a\xd5\x15\xbd\xc3\x60\x75\x8b\x5e\xb4\xf5\x02\xad\xde\x02\x86\x0d\x29\x58\x98\x63\x44\x2e\x10\x9f\xe6\xd4\x14\x18\x1f\xf2\xf3\x9c\x19\x5a\x52\x43\x47\x56\xb9\xff\xb9\x5b\x57\x48\x56\xa5\x9d\xe8\xee\x83\xbe\x03\x66\x14\xc5\xe5\xfd\x34\xee\xbd\x55\x2d\xc2\xe3\xa0\x70\xf9\x7b\xbb\xd6\x42\x96\x48\xde\xe0\xf5\x4f\x3e\x5b\xdd\x7a\xad\x2b\xbf\x03\xeb\xf2\x8f\xba\xb6\xa7\xaa\xfb\x26\x0e\x5b\xe7\x4c\x18\x3d\x82\xa3\x89\x3f\x01\x7f\xc2\xd1\xc7\xe3\xbb\xcd\xb1\xf7\x1b\x92\xee\x31\x1c\x6d\xee\xb3\x39\x5a\x03\xbb\x77\xd9\xb8\x6f\xba\xbe\x44\x5f\x5d\x02\x6a\x17\x61\xc5\x03\x2a\x02\x57\x82\x87\xd7\x2c\x8b\xe7\xdc\xd6\x3f\x69\x95\xc2\xbb\x8d\x6d\x1b\x79\x84\x37\xf1\x03\xdf\x57\x8e\x66\x18\x5e\xe3\xce\x87\x36\x73\x0b\xdf\x5b\x32\xe6\xae\x92\x30\x78\x26\x50\x8b\xc0\x5b\xfe\xc3\x31\x6c\xea\x46\xdf\xd0\x58\xe8\x5f\xf5\x01\x80\xde\xeb\x04\x0c\x58\xd0\x89\x63\xbd\x62\x8b\x57\x4e\xd3\xb5\x37\x68\xc6\x6b\x2c\x7a\xe4\x7c\x82\xf7\x1d\x3f\x8e\x1f\x69\xc5\xcb\xb0\x00\xde\xa5\x53\x31\x20\x1f\xa5\xb1\xff\x9c\x7c\xe6\xda\xa0\x8d\xe1\x58\x32\xfd\x51\x1a\xf8\x24\xcb\x4e\x21\x80\x39\xf7\xc9\x99\x41\xd0\x01\x04\xd7\x3d\x32\x96\xb8\xfd\xc0\xc6\x0a\xad\xbc\x67\x9f\x3e\x15\x56\xa0\xc1\x57\xbe\x67\x89\x50\x49\x4d\xbb\x05\x7c\x85\x01\x21\xc5\xd0\xa7\x67\xdd\x5e\xc1\xed\xa3\x54\x9d\x6d\xec\xbd\x98\x5b\x08\x43\xf5\xe1\x1b\xae\x3d\x5f\x0a\x62\x08\xf5\xa6\xe1\x7b\xed\xd2\x73\xa6\xa6\xe0\xdb\x2d\xee\xf1\x45\x6e\x6a\x91\xdf\xc8\x0e\xbf\xb1\xf5\xbd\x97\xcd\xbd\xc7\x8f\x80\x27\xbd\xbf\xd3\x3e\x47\x1e\x80\x8f\xd1\x54\x48\xf5\xe7\x68\xb8\xfb\x2f\x4b\xdc\xe1\x48\xff\x1b\xaa\x10\xea\x11\x39\x22\x9a\x8b\x69\xc5\x3a\xdf\x39\x77\x7b\x34\xcd\x9a\xa5\x6a\x48\x50\xfc\xa5\xe1\xd7\xb4\xb2\x6c\x06\x32\x1c\x42\xfd\x12\x39\xb9\xc5\x6c\x07\xae\xda\xa0\x25\x88\x41\x8c\xdd\xbb\x62\x8b\xbd\xc1\xda\x94\x8f\x18\xa3\xf7\x4e\xc5\x5e\x5b\x98\xa7\x83\xa5\x81\xa7\x81\x64\xbc\x07\xdf\xed\xf5\xe7\xdb\x6b\x39\xd4\xe6\x56\x46\x72\x3f\xca\x3d\x2c\x8f\x4c\x5f\xf1\xd5\x61\x49\x9b\x20\x89\x97\x2f\xf7\xf5\x01\xd8\xd5\x04\x23\x50\x39\x4a\x81\x4b\xc2\x7e\x1a\x97\x41\xb6\x1a\xcb\x15\xaf\xeb\xb6\x46\x75\x53\x4f\x15\x2d\x19\x99\x2a\x5a\xdf\x71\x69\x1f\x26\x9d\xa2\x88\xbb\x6a\xc9\x35\x6a\xd9\xee\xeb\x40\x77\x9c\xf5\x1a\xab\xc3\xda\xdf\xdd\xb0\xf1\x4c\xca\x2b\x28\x27\x03\x78\xf7\x88\x26\xb5\x9f\x70\xad\xe3\xf6\x33\x6f\xee\xd0\xa4\x64\x86\xf2\x0a\x42\x04\x3f\xbd\xff\xe0\x82\x08\xbd\xac\xe6\xa1\x5c\x4d\x33\x32\xe8\x86\xb4\x74\x71\xb2\xe7\xec\x9a\xb3\x1b\x67\x39\xbb\x8b\x44\x0d\xc9\x94\x09\x08\x50\x5b\x13\x66\x3a\x24\x9a\x97\xec\x04\xb2\xac\xef\x9e\x28\xc1\x49\x76\x07\xcc\xf7\xd1\x8a\xf5\xbc\xee\x5e\x3e\xb7\x01\x8f\x0b\x16\x94\x33\xa9\xd6\x94\x63\xdf\xac\x36\xd9\x66\x75\xc7\x42\xc6\xed\xef\x7f\xff\xcd\x1a\xbe\xf2\x99\xcf\x9b\xf9\x5b\xf2\xc7\x3f\xfc\xe1\x9b\x3f\xdc\xfd\x18\x17\xf8\xd8\x9b\xbb\xdf\xcf\xdd\xb6\x77\xe7\xc7\x3b\xb0\xdf\x65\x88\xf7\x5e\xef\x80\xdf\x60\xaa\x09\xe5\x55\xa3\x5c\xba\xc4\x86\xda\xe3\x77\xf1\x6f\xc0\x79\xda\xa6\x88\x52\x3f\xa3\x8f\x33\x76\xf1\xc7\x13\x2e\x98\x26\x33\x79\x43\x1a\xa1\x58\x21\xa7\x82\xff\x83\x95\x58\x61\x56\x63\x00\x1c\x34\x91\xf7\x28\x4e\x98\x28\x6b\xc9\x85\x01\x16\x3b\xa3\xa2\xac\xd6\xc5\x2a\x6d\xf0\xa6\xf1\x0d\x4e\xda\x32\xe0\x46\x0f\xda\xb0\x0f\xed\x2f\x96\xb6\xcb\xbe\xb3\x77\x35\x23\x97\xc3\x6d\x4b\x7a\x53\x24\x8c\x17\x6b\x6c\x2e\x2b\x60\x7c\x98\x49\x00\x4d\x1d\xf0\xd9\x2f\x0d\x53\x0b\xc8\x41\x6d\x15\xb7\x28\xa2\xf8\xb2\xad\x79\xe8\xdf\xd1\x09\x95\xf4\x4e\x9f\x00\x59\x61\x92\x89\x44\xad\x36\xc0\x6d\x09\x2a\xf8\x0d\xc3\x30\x1d\xef\xf5\x25\x47\x44\x34\x55\xb5\x66\xa5\x3b\x26\x11\x72\x9d\xe7\x18\xc7\x46\xf6\x87\xcd\x0c\x03\x9b\x9a\xa0\x70\x6c\xcf\x10\x15\xbf\x78\x26\x2d\xea\xa1\xe1\xc4\x5b\x32\x50\xe1\xe8\x63\xa6\xc2\xf1\x80\xf4\x85\xcd\x53\x17\x36\xab\xa3\xbc\x81\xf9\x0a\xc7\x43\x72\x1b\x36\xac\x7e\xfc\x98\x06\x2d\x1c\x0f\x8a\x81\xdb\xcc\xb8\xb5\x02\xf4\x0d\xe3\xdc\x1f\xd1\xd0\x85\xe3\x31\xcc\x5d\x38\x1e\xb4\x8f\x9b\x98\xbe\x70\xf4\xd9\xc5\x27\x30\x83\xb9\x77\x7e\x4a\x63\xd8\x3d\x4b\x66\x36\x89\xe1\xd8\xd8\x30\xe6\x80\x7b\x50\xc0\xea\x03\x82\x55\x1f\x18\xa8\x9a\x10\xa4\xda\xfb\xa7\x1b\x18\xcf\x70\x3c\x0c\xa3\x9f\xd0\x90\xe6\x17\x7c\x32\x73\x1a\x8e\xa7\x36\xaa\xe1\xd8\x98\x9f\x3e\xcc\xc0\x16\x4f\x7e\x0f\xba\xf6\x29\xda\xa4\x18\x17\xd7\x12\xbb\x5a\x3e\x48\x89\x38\xbf\xf5\xc3\x25\x5d\xe2\x06\xd8\xa8\x53\x26\x82\xf6\x15\xeb\x54\x33\x29\xaf\x48\xa3\xef\xf7\xa8\xad\x7d\xef\x7b\xd2\x63\xb3\x28\xc1\x0f\xb9\x61\xe7\x4d\xc5\x7e\xe2\x66\xf6\xc9\xf7\x93\x76\xd7\xcc\x34\x75\x05\x7b\x11\x7d\x61\xf1\xf2\xbc\x55\x4e\x4e\x0d\x92\xd8\x42\xce\xe7\x4c\x94\x18\x6d\x39\xa7\x57\xeb\x11\x5e\x5b\xf5\x16\xb3\x0a\xaa\x0a\x55\x38\x58\x8a\x7d\xae\xa9\x68\x95\x95\x6b\xcb\xa8\xd7\xa1\xf0\x86\x08\xbc\xa9\x4c\xb6\x71\x9e\xe9\x83\xe5\xed\xe5\xbc\xd2\x28\x31\xb4\x93\x3f\x4a\xc6\xac\x92\x50\x1f\x09\x33\x27\x30\xcb\x68\xe3\x54\xcb\xd3\x89\xff\x95\x93\x9c\x5c\x73\x1f\x26\xa6\x6d\x75\x76\x5d\xf1\x82\x05\x96\x29\xc5\x06\x45\x1a\xce\x9d\x34\xbd\x99\x80\xbe\x09\xef\xdb\x90\xef\x3d\x80\xe7\x25\xf0\xbb\xb6\xce\xe0\x63\x9c\xbc\x9f\x3a\x3e\xfb\x6b\xff\xd9\x26\xa7\xef\x1f\x7e\x39\xff\x75\x23\xe1\xfc\x43\x1f\xfd\xec\xc7\xdf\xa5\xa8\xad\x0c\x1c\xce\x7e\x89\xb5\x14\x54\x59\x66\x0f\x96\xfc\x21\x79\x77\x7e\x72\x74\x79\x32\x20\x3f\x9c\x1d\xc3\xbf\xc7\x27\xef\x4f\xec\xbf\xef\x3e\x7d\xfc\x78\xf2\xee\xd2\x0a\xcf\x5f\xdd\x0b\x02\xb4\x2b\xae\x2a\x3c\x7d\x2b\xa1\xc8\x2e\x31\xa7\x62\x41\x26\x8d\xb1\x14\xb9\x05\xa6\x03\x25\x45\x13\x22\x2d\xcb\x4d\x92\x1d\xbf\x38\x1c\xec\x9c\x79\x38\xd0\x65\xab\x6d\xb4\x67\xae\x43\xb4\xcb\xeb\xbf\xff\xcd\x9e\x06\xc9\x37\xce\xd3\x7c\x28\x8e\xf7\x4b\xe1\xfc\xcd\x6f\xee\x9d\xf8\x3b\xa9\x08\xfb\x4c\xe7\x75\xb5\x41\x8a\xdc\xab\x5a\x96\xfa\x95\x4b\xd6\xb5\xff\x7d\xff\xbe\xc3\x4f\x0e\x2b\x39\x7d\x15\x72\x7c\x19\xa9\xe4\x94\xe8\x66\x1c\x12\xb8\x41\x12\xdc\x68\xb6\xaf\xfc\x34\x9d\x6c\xd4\x41\xc8\xf2\x8e\x66\xdd\x18\xb8\xce\x9c\xf1\x04\x0f\x81\xeb\x50\x17\xb4\x62\x9d\x99\xec\x07\x0f\x05\xe8\xab\xc3\xd5\x6f\xe8\x55\x15\xae\x96\x66\xbc\xff\x84\x4f\x27\xe4\x86\x57\x65\x41\x55\x79\x8b\x60\x80\xf0\x87\xf7\x09\x70\x07\xfb\xe9\x09\x10\x1d\xdb\xb5\xb1\xac\xe1\xfd\x36\xab\x6b\xa6\x2a\x5a\x63\x26\x20\x34\x82\x84\xc8\xe5\x4d\x60\x3c\x66\x35\x83\x52\x02\xd8\xfc\x8a\x11\x26\x8a\x4a\x42\xe1\x46\x14\x3c\x07\xdd\x83\xc1\x40\x67\xdf\xa8\x66\xd3\x14\xf1\x2f\x9c\xc3\x42\x4e\x59\x6e\xc2\x83\x89\x6a\x77\x16\x57\xf5\x29\xc8\xf7\xce\x83\xf6\xc0\xa0\x68\x33\xb2\xe7\xea\x48\xec\x0d\xc8\x5e\xa8\xa3\x59\x3a\xa5\x7c\xef\xab\xfb\x2b\x14\x87\x09\xe2\xe2\x01\xa0\xb3\xbb\x60\x87\x21\xc0\x19\xd7\x6a\x01\xf4\xf6\x61\x1a\x1b\x83\xde\xd6\x98\xb5\x52\xa5\xf3\xb6\xc0\x3b\x74\x17\xba\x7f\xa6\xf8\x45\x6f\x41\xdd\x16\xe9\x48\x86\x78\xef\xab\xce\xf4\xc6\xd7\x26\x27\x42\xba\xc3\x53\xcc\x62\xe3\xba\x6c\x80\x78\x5c\x74\xee\x5e\x08\x73\x89\x8b\xec\x72\x45\x6a\xaa\x98\x30\x01\xf8\xfb\xa7\x75\xcd\x8f\xc1\x1e\xf3\xd5\xde\x66\xb7\x72\xed\x25\x8a\x22\x1b\x36\x34\x57\x5c\x84\x5f\xbc\xab\xa8\xd6\x2b\x7c\x9e\xc0\x05\xec\xc4\xae\x32\xbd\x65\xbf\x2e\xec\x03\x5a\x80\xce\xe8\xf5\x9a\x57\xdd\x00\x68\x43\xd5\x94\x99\xf5\x31\x09\x54\x2c\x3e\xad\x6d\x01\x31\xdc\xb8\xa5\xda\xb0\x87\xd1\x88\x0b\x33\x94\x6a\x88\x3f\x79\x4b\x8c\x6a\xee\x32\x3d\x18\x3e\x67\xb2\x31\x17\xac\x90\x62\x75\xde\xb0\x7b\x2e\x5b\x90\xc5\x03\x92\xa9\x5d\x9c\xcf\x91\x97\xc0\xe3\xbe\x34\xde\x22\xd5\x8a\xe7\x3e\xb6\xa7\x5b\x5f\xf4\xd3\xfb\x0f\x29\x87\x4d\xa0\x88\xd4\xfa\x93\xfc\xd1\x31\x65\x31\x0d\x90\x3a\xc8\xd7\xfe\xec\x43\x63\x1e\xfe\xa3\x77\x21\x66\x64\xfd\xd3\x6e\x33\xd6\xd7\x7a\xbc\xf3\xfd\xb5\xa1\xa6\xb9\x85\x0d\xf7\xb1\x22\x47\xdf\x2f\xb0\x96\x83\xd3\xf0\x2f\x60\xaa\xd8\x6d\x15\x97\x91\x43\xa5\x0e\xeb\x68\xc2\x73\x3e\xa9\x64\x44\xdc\x0f\xed\x95\x35\x8a\x72\xb4\x88\xd1\xc2\x34\xf4\xb6\xd7\xdd\xfe\xd8\x25\xa4\xac\x2e\x1e\xbb\xc6\x26\xb6\xce\x0e\x56\x30\x65\xf4\x7b\xaa\xcd\x0f\x75\x49\xef\x28\x23\xb0\x94\x68\xa2\x0d\xdc\x29\x54\x6b\x6f\x04\x2b\x2d\x13\x72\x5b\x82\xf3\x91\x1b\x4b\xdd\x1b\x9c\x71\xc5\x84\xf7\x60\xa5\xbf\x63\xf6\xe7\x43\xbb\xd4\x6a\xa8\xcf\xa5\xdd\x93\xa3\x95\x34\xaa\x9b\xcf\x73\x1f\xb4\x96\xa3\x29\x98\x8d\x08\xf6\x79\x95\x58\x99\x0e\x71\xc5\xa8\x58\x9d\x6f\xd9\x81\xf5\x1d\x3e\xf7\x70\x9c\x72\x0b\x90\x9b\x19\xb7\x1a\x17\x96\x5b\xd0\xc4\x0b\xb1\x25\xab\xd8\x1d\x55\x17\x12\x53\x80\xdc\x0a\xc7\x6e\x81\xd4\xe8\xe9\xb3\xee\x74\xc1\xe9\xed\xd4\x4b\x97\x98\xdb\xea\x69\x4e\xf6\x09\xe6\x8a\xe5\x17\x06\xe1\x6d\x5c\xc9\xe2\x0a\x4b\x7b\x43\x5d\x33\xfe\x0f\xa6\xd6\x08\x19\xe0\x48\xe4\xa2\xe4\x45\x88\x58\xa8\x95\x9c\x2a\xa6\x3b\x5b\x8d\x65\x60\x35\xce\x6e\xd7\xb4\x7b\x1e\xd6\x95\xaa\x75\xef\x34\xc2\x55\xbe\x78\x9a\x2c\x25\xaf\x9a\x43\x0a\x67\xc7\x9d\x7e\x5b\x4b\xc7\x12\x93\xd0\xe4\xc1\xd9\x68\xe8\xdc\xe5\x59\x1f\x7e\x7f\x77\xf6\x71\xd6\x14\xa2\x75\x39\xd0\xf8\x04\xf7\x5d\x6f\xd6\x3e\xb5\x26\x5b\x7a\x53\x6f\xc0\x3d\x59\xd1\x64\x73\xd5\x29\x80\xbc\xc9\x6c\x59\xd3\x2a\xb2\x47\xca\x6c\x50\x10\xf8\x21\xf1\x2f\x9b\xf6\x8e\x7a\x90\xe7\x5b\x3c\xa4\x0b\x48\xe7\xb6\xb4\xca\x94\x2b\x9f\x82\x21\x72\x13\xa9\xee\x54\xdb\xf2\x01\xbf\x3e\x87\xfe\xde\x89\xac\x4c\x7b\x77\x2c\x7a\x97\x71\x7b\x0a\x1a\x7e\x32\x20\x94\xcc\xb8\x36\x52\xb9\x20\x11\xcb\x00\x8d\xa2\x42\xe3\xf7\x77\xf2\x8a\xd4\xe8\xf6\x77\x01\x04\x42\xeb\x9a\x51\xe5\x5d\xf5\x8e\x9d\x51\x0d\x76\xd4\x42\xaa\x72\x25\x60\xde\x24\xb3\x52\x1c\x5b\xb9\x7c\x86\xf2\x21\x15\xd5\xe6\x32\xc0\x60\x65\x8a\x0d\xa9\x71\x57\x62\x72\xaf\xd8\xbe\x8d\x2f\x63\x29\x45\xfb\xa5\x24\x54\x38\x4b\xd5\x5d\x4b\x6c\x84\x5f\xf7\xcb\x25\xed\xbb\xa1\x00\xd8\xeb\xbd\x6e\x82\xb0\x17\xbd\xe2\xd3\x40\x3e\x67\x5a\xaf\xcd\x29\x5f\x2a\x66\x03\x0d\x94\x48\x68\xa0\xe4\x7e\xee\x99\x3d\x0a\x0e\x98\x5e\xe1\x8b\x33\x2f\xee\x46\x35\x02\x62\x02\x9a\x41\xc2\xb5\x4a\x3a\xb2\x7a\x46\xf5\xa6\x2f\x13\x6e\x51\x48\xe3\xd9\xf8\x3a\x6c\x08\x8d\x62\x54\xaf\x2b\xcf\xf1\x90\x38\xe8\xb1\xe2\x6c\x42\xde\xd1\x39\xab\xde\x51\x9d\x73\xe7\x81\x3c\xac\x33\xd5\xb0\xd1\x74\x44\x5e\x9d\x47\x91\x32\x1f\xa5\xf9\xc0\xcc\xab\x7e\x7b\xb3\x19\x21\x78\x54\x12\x90\xac\x8e\xdc\x7f\xe1\x13\xaf\x7a\x32\x84\x6b\x2e\xf6\x4e\x5c\xe9\xf5\xa5\x69\xee\xba\xc6\xdd\x0b\xdc\x28\x30\x4f\x16\x7d\x2f\xf2\x3d\xe5\x2e\xee\xba\xbc\x9b\x5c\xdb\x2d\x5d\xd8\x87\x5c\xd5\x7b\xde\x3e\x4c\x71\xb1\xd2\xd4\x73\x6b\x23\x2e\x3b\xea\x34\x38\x8b\xe2\xf0\x78\x68\x4d\x66\xa1\x7f\x77\xf1\x63\x4e\xc1\x68\xbb\x25\xa4\xdc\xa1\xde\xf9\xfd\x1a\xc9\x7f\xb8\x9e\xcf\xa7\x96\xa7\x2a\xc1\xff\x66\x31\xe0\x29\x23\xe6\x8e\xfd\xaa\xce\x00\x13\x5a\xe0\xc0\x5f\xe8\xe0\x0f\x90\x75\xf0\x63\xdf\x48\x52\x2b\x76\x0d\xa9\x14\x02\x52\x44\x19\x11\x4c\xdb\x8b\x72\xb0\x66\xf9\x0d\x55\xb6\xcd\xd4\xb5\xfb\x55\xe9\x7b\xd5\x64\x72\xff\xd1\xfa\x87\xd6\x1d\x30\x8e\x4d\xb5\xc2\x0d\xb4\xee\x07\xa8\x83\xf7\xeb\x54\x0f\x98\xec\x5e\x01\xf3\x81\xf3\xad\x36\x3c\x2f\x8f\xa5\x6e\x35\xf6\x27\xe7\x40\xcf\x31\xd8\xa2\xb0\x54\xb9\x80\x46\x4c\x48\xe6\x1d\x79\xea\x1a\x99\xcf\x97\x69\x20\x84\xdd\x77\x31\x3c\xd7\x6b\x35\x0d\xcf\xb7\xe7\xf7\xd6\x85\xdb\x78\xbe\x1d\x28\x72\x77\x2f\x02\x3d\x6e\xd5\x2b\x1c\xf7\x61\xdd\xf6\xf1\x6d\x93\x82\xa7\x6b\x71\xec\x91\xea\x0d\x6a\xa6\xae\x59\xd9\xf1\x30\xba\x86\x68\xdd\xcf\x22\x7f\x74\x3b\xbf\xdb\x76\xf2\x5f\xff\xfd\x9b\xff\x3f\x00\x00\xff\xff\x5d\x7e\x11\x84\x21\x98\x0b\x00") func operatorsCoreosCom_clusterserviceversionsYamlBytes() ([]byte, error) { return bindataRead( @@ -125,7 +125,7 @@ func operatorsCoreosCom_clusterserviceversionsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_installplansYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\x4b\x73\xe3\x36\x12\xbe\xfb\x57\x74\x39\x87\x24\x55\x96\x94\xc9\xee\x61\x4b\x37\xaf\xb3\xd9\xf2\x6e\x1e\xae\x91\x33\x97\xd4\x1c\x5a\x64\x4b\x44\x0c\x02\x0c\x1e\x92\xb5\xd9\xfc\xf7\xad\x06\x48\x8a\x92\xf8\x92\xc6\x63\x2f\x2e\xb6\x48\xa0\xd1\x0f\xf4\xe3\x03\x40\x2c\xc4\x07\x32\x56\x68\x35\x07\x2c\x04\x3d\x3b\x52\xfc\xcb\x4e\x9f\xfe\x66\xa7\x42\xcf\x36\xef\xae\x9e\x84\x4a\xe7\x70\xe7\xad\xd3\xf9\x7b\xb2\xda\x9b\x84\xbe\xa3\x95\x50\xc2\x09\xad\xae\x72\x72\x98\xa2\xc3\xf9\x15\x00\x2a\xa5\x1d\xf2\x63\xcb\x3f\x01\x12\xad\x9c\xd1\x52\x92\x99\xac\x49\x4d\x9f\xfc\x92\x96\x5e\xc8\x94\x4c\x20\x5e\x4d\xbd\xf9\x66\xfa\xee\xaf\xd3\x6f\xae\x00\x14\xe6\x34\x07\xa1\xac\x43\x29\x0b\x89\xca\x4e\x75\x41\x06\x9d\x36\x76\x9a\x68\x43\x9a\xff\xe4\x57\xb6\xa0\x84\xa7\x58\x1b\xed\x8b\x39\xb4\xf6\x89\xd4\x2a\x4e\xd0\xd1\x5a\x1b\x51\xfd\x06\x98\x80\x96\x79\xf8\x3f\x4a\x78\x1f\x27\x7d\x90\xa8\xc2\x53\x29\xac\xfb\xf7\xf1\x9b\x1f\x84\x75\xe1\x6d\x21\xbd\x41\x79\xc8\x6a\x78\x61\x33\x6d\xdc\x4f\xfb\x89\x79\x22\x51\xc4\x57\x42\xad\xbd\x44\x73\x30\xea\x0a\xc0\x26\xba\xa0\x39\x84\x41\x05\x26\x94\x5e\x01\x94\xba\x29\x89\x4c\x00\xd3\x34\xe8\x1b\xe5\x83\x11\xca\x91\xb9\xd3\xd2\xe7\xaa\x9e\x84\xfb\xa4\x64\x13\x23\x0a\x17\x74\xfa\x98\x11\xac\x84\xb1\x0e\xee\x16\x1f\x40\x28\x70\x19\x05\x99\x40\xaf\x20\x91\xde\x3a\x32\x0b\x32\x1b\x91\x50\xb9\x04\xc2\xfc\x35\x39\x80\xdf\xac\x56\x0f\xe8\xb2\x39\x4c\x59\xdd\xd3\xee\x41\xbf\x7e\xf3\xb1\x31\x2e\xda\xf0\x6e\xf1\xa1\xf1\xcc\xed\x58\x42\xeb\x8c\x50\xeb\x3e\x8e\xb1\x28\x8c\xde\xa0\x84\x5c\xa7\xd4\xc3\x4b\xd5\xef\x64\xda\xdb\xd3\x17\x1d\x73\xb7\x93\x0c\xca\x6f\x23\x79\xf0\x22\x92\x5c\x6a\x2d\xa9\x5c\x2d\x55\xe7\xcd\x3b\x94\x45\x86\xef\xca\x87\x36\xc9\x28\xc7\xbd\x91\x74\x41\xea\xf6\xe1\xfe\xc3\x5f\x16\x47\x2f\xe0\x50\x17\x8d\x25\x07\x29\x3b\x1b\xd9\x60\xc0\x72\xe1\x04\x1f\x63\x43\x22\x58\x0a\x16\xdd\x7b\xc0\x09\x9b\x7a\xf9\x1b\x25\xae\xf1\xd8\xd0\xef\x5e\x18\x4a\x9b\xb3\xb3\x46\x2a\x57\x3e\x7a\xcc\xda\x69\x3c\x2a\x0c\xcf\xe5\x1a\x9e\x14\x5b\x23\x96\x1c\x3c\x3f\x92\xec\xbf\x93\xa3\xb7\x00\xac\x90\x38\xf2\x40\xd6\xd2\x05\x28\x2d\xb5\xc8\x62\xba\x4c\x58\x30\x54\x18\xb2\xa4\xdc\x5e\x0d\xaa\x94\x72\x7a\x42\x9c\x97\x2b\x19\xcb\x7e\xe9\x65\xca\x11\x69\x43\xc6\x81\xa1\x44\xaf\x95\xf8\x4f\x4d\xdd\x82\xd3\xd1\x47\xd0\x91\x75\x10\x9c\x4c\xa1\x84\x0d\x4a\x4f\x37\x80\x2a\x3d\xa1\x9d\xe3\x0e\x0c\xf1\xbc\xe0\x55\x83\x62\x18\x62\x4f\x79\xf9\x51\x1b\x36\xe1\x4a\xcf\x21\x73\xae\xb0\xf3\xd9\x6c\x2d\x5c\x15\x6b\x13\x9d\xe7\x5e\x09\xb7\x9b\x85\xb0\x29\x96\x9e\xed\x39\x4b\x69\x43\x72\x66\xc5\x7a\x82\x26\xc9\x84\xa3\xc4\x79\x43\x33\x2c\xc4\x24\x08\xa3\x42\xbc\x9d\xe6\xe9\x17\xa6\x8c\xce\xf6\x68\xe2\x56\x07\x80\x2a\xf0\x9d\x69\x2c\x0e\x89\x20\x2c\xaf\xbc\x40\x30\x0a\xbb\xb7\x09\x3f\x62\x35\xbe\xff\xc7\xe2\x11\x2a\x8e\xa2\xdd\xa2\x89\xf6\x5d\x5b\x34\x54\x59\x8b\x35\x2b\xd4\x8a\x4c\x1c\xb9\x32\x3a\x0f\x54\x49\xa5\x85\x16\xca\x85\x1f\x89\x14\xa4\x1c\x58\xbf\xcc\x85\xb3\x61\x59\x93\x75\x6c\xc8\x53\xc2\x77\x21\x37\xc1\x92\xc0\x17\x29\x3a\x4a\x4f\xbb\xdc\x2b\xb8\xc3\x9c\xe4\x1d\x5a\x7a\x75\xdb\xb1\x8d\xec\x84\x0d\x32\xda\x7a\xcd\xcc\x7b\x3a\xe0\xc4\xeb\x01\xaa\xa4\xd9\x69\xee\x46\xd4\x59\x14\x94\xd4\xde\x58\x47\x99\xdb\xa2\x90\x22\x89\x6e\x57\xaf\x36\x76\x9c\x65\x1d\x9a\xe8\xd8\x4d\x3a\xd9\xe9\x0a\x44\x10\x13\xde\x69\x20\x3f\x7c\x75\x32\x11\xbf\x1a\x95\xd8\xa0\x27\x8a\x41\x88\x64\x71\xea\xd3\x37\xc3\xee\xc1\xad\xca\x41\xec\x26\xbc\x4e\xbd\x25\xb3\xcf\x6c\x85\x96\x22\xd9\xc1\x4a\x1b\x0e\x5b\x0d\x95\x9f\xae\x39\x6e\xf7\x0e\x72\x6f\xc3\xca\xd5\x8a\xd8\x08\xd7\xb7\xde\xe9\x1c\x9d\x48\xae\x41\x1b\xb8\xfe\x11\x95\x47\x79\xdd\x36\xbc\x73\xed\xec\xc5\x6c\xd3\x7e\x7b\x82\xdb\xb7\x6e\x2d\x77\xd3\x42\x63\x70\xd7\xf2\x56\x38\xca\x5b\x87\x0d\x70\xbf\x26\xc5\x19\xaf\x25\xdd\xec\x87\x72\x0c\x5f\x93\x39\x79\x1f\x17\x6e\xf7\xb8\x8e\x29\xe3\xb0\xba\x4c\x3b\x6b\xbc\x75\xe8\xfc\x89\x9c\x43\xab\xa9\xe9\x90\x81\x40\x23\x78\x96\xf5\xc0\x4a\x9b\x3c\x3a\x24\x2e\xb5\x8f\x81\x31\x4e\x06\x7a\x75\x2a\x82\xa3\xc2\xd6\x7e\xc7\x9e\x9b\xe8\xbc\x90\xe4\x0e\x4b\x8b\xe9\xd5\xd5\x69\x68\x8e\x44\x39\x32\x3b\x83\x42\x86\x99\x30\x71\x1e\x65\x98\x90\xca\x7a\x64\x67\x1d\xe5\xc7\x8b\xf1\xc2\x20\x90\xa0\x43\xa9\xd7\x8b\xd6\xb4\xc6\x1d\x8a\x0c\x2d\x9d\xe3\xda\xce\x91\xf2\x1c\xff\xcb\xc5\x7b\x9b\x24\xda\x2b\xf7\x9e\x56\x17\x7b\x7b\x37\x49\x30\xb4\x22\x43\x2a\x29\x2b\x1a\x1b\x3b\x00\xc6\x1e\xe0\x32\x74\x1c\x24\xbc\x6d\x09\x66\x41\x6d\x1a\x52\x1d\xf1\x41\x5a\x97\x78\x95\xa5\xba\x1d\xbe\x55\xcf\x43\xaa\x81\xde\x1a\xae\x55\x23\xb7\x0f\xf7\x55\x95\x16\x8b\x33\xaa\x24\x6e\x29\xc4\x9a\x0c\x76\x38\x18\xb7\x95\x20\x99\x86\xba\x7c\x0c\x07\x1d\x36\xe1\x76\x5f\xaa\x3f\x14\x29\x4e\x03\x42\x21\x28\xa1\x83\x72\x31\xa8\x92\x30\x2d\x1f\x72\x3e\x36\x54\xbe\xbb\x89\xa5\x47\x0f\xab\x10\xe1\x5e\x59\x56\x3a\x14\x0a\x90\xcb\x21\x91\xc2\xbf\x16\x3f\xff\x34\xfb\xa7\x8e\xd2\xb0\xbd\xc9\xda\xe8\x25\x39\x29\x77\x03\xd6\x27\x19\xa0\x65\x61\x78\xed\xb3\x6f\xd1\x34\x47\x25\x56\x64\xdd\xb4\xa4\x46\xc6\xfe\xfa\xed\xc7\x2e\x4d\x02\x7c\xaf\x0d\xd0\x33\xb2\xff\xde\x80\x88\xfa\xaf\x6b\xac\x72\xe1\x85\x1c\xc4\xc2\xd7\x34\x61\x2b\x5c\x16\x58\x2d\x74\x5a\x0a\xb9\x0d\x42\x38\x7c\xe2\x24\x13\x85\xf0\x8c\x16\x9f\x5a\x83\x5c\x6c\xd7\x11\x14\xd6\xac\xfe\xc1\x00\xe8\xcf\x6b\xf8\x6a\x9b\x91\x21\xb8\xe6\x9f\xd7\x91\x91\xba\xb6\xe6\x67\xd5\x4a\xd9\x33\x14\xdc\xc0\x19\xb1\x5e\x93\xe9\x70\x04\x6e\xa1\xfe\xe3\x9a\xe9\x6b\x4e\x7b\x62\x05\x4a\x37\x88\x04\xd2\x6c\xaf\x82\x12\xb1\x12\x94\x9e\x30\xf8\xeb\xb7\x1f\xaf\xe1\xab\x43\x3d\x74\x4e\x26\x54\x4a\xcf\xf0\x6d\x04\xce\xc2\xb2\xae\xbe\x9e\xc2\x63\x58\x11\x3b\xe5\xf0\x99\xe7\x4a\x32\x6d\x49\x81\x56\x72\xc7\x12\x66\xb8\x21\xb0\x3a\x27\xd8\x92\x94\x93\x58\x3d\xa5\xb0\xc5\x5d\x5b\x28\xae\x5a\x65\x2a\x5e\xa6\x08\x05\x1a\x37\x80\x68\xaa\xf6\xf8\xf3\x77\x3f\xcf\x23\x77\xbc\x8c\xd6\x8a\x59\xe2\x22\x77\x25\x18\xb7\xa0\x4a\xcb\xe2\x39\xac\x41\x66\xdc\xc7\xc5\xc1\x51\x3f\x43\xb5\xa6\x6a\x5b\x60\xe5\xb9\x2c\xbd\xd8\x65\xdb\x60\x44\xd5\xc6\x7a\x6b\x80\x15\x23\x63\xc8\x1b\x16\xe3\xa3\x75\x12\x76\x03\x3e\x51\x27\x3f\x35\xbc\xe5\x22\x9d\x3c\xf9\x25\x19\x45\x8e\x82\x5a\x52\x9d\x58\xd6\x48\x42\x85\xb3\x33\xbd\xe1\x64\x44\xdb\xd9\x56\x9b\x27\xa1\xd6\x13\x76\x87\x49\x5c\x73\x76\x16\x76\xce\x66\x5f\xa8\x96\xca\xf9\x2c\x15\x74\x16\x4a\xe7\xea\x21\x10\x7a\x4b\x65\xf0\xfc\x76\x76\xa9\x2e\x2a\xb0\x74\x4e\x76\xed\xd1\xc8\x22\x06\xb9\xe4\x98\x2e\xbb\xf6\x36\x13\x49\x56\x6d\x94\x34\xb2\x40\x8e\x69\x4c\x13\xa8\x76\x6f\xe6\x59\xac\x71\x6f\x98\xa7\xdd\xa4\xdc\x1c\x9e\xa0\x4a\xf9\x7f\x2b\xac\xe3\xe7\x97\xaa\xd8\x8b\x4f\x0e\x42\xbf\xdc\x7f\xf7\xb6\xfe\xe6\xc5\xa5\x11\xe7\x79\xb2\x9f\x7c\x92\x63\x31\x29\x51\x97\xd3\xb9\x48\x4e\xfa\x2f\xbd\x4a\x25\xfd\xa0\xf5\x93\x2f\x5a\x4b\xc1\x03\x8d\xfd\xbd\xd9\xbb\x02\xb5\xe5\x8e\x80\x50\x93\xc2\xe8\xb5\xe1\xfa\xa6\xb1\x01\x03\x85\x97\x31\x05\x79\x55\x60\xf2\x84\x6b\x2a\x27\x0d\x29\x9b\x94\xab\x4a\x82\x12\x4b\x76\x17\xb3\x17\x00\xc7\x4e\xee\xe3\xc6\x55\xc9\x67\x07\x9b\x55\x6d\xc2\x3c\x06\x44\x53\xf2\x3d\xcc\xef\x60\xf9\xdd\x07\x76\x62\x3b\x82\x3c\xef\xa9\xab\x6e\x98\x80\x48\xd9\xaf\x56\xa2\x05\xdf\x56\x5d\x0a\xec\xac\x70\x26\x8c\x24\x25\xb6\xa1\x2a\x18\x01\x14\xe0\x84\xcf\xee\x42\xf1\xc0\x1a\x77\x47\xc3\x2a\x8b\x54\x81\xaa\xd4\xf2\x41\xb7\xf0\xa4\xb4\x02\x8b\x04\x5b\xb4\x21\xf2\xc9\x0d\xa5\x61\x6f\xb0\xdb\x4b\x07\x2d\x32\x4e\x5a\x18\x05\x8e\x5a\xe4\xbd\x00\x22\x35\x19\x1f\x40\x1f\x23\xe0\x52\x0b\x4f\x3d\x11\x30\xb6\xd7\x81\x4e\xb1\xbd\x25\x80\x8a\xed\x6d\x61\x54\x6c\xaf\x0e\xa6\x62\x7b\x55\x48\x15\xdb\xeb\x01\xab\xd8\x2e\x86\x57\xb1\xbd\x16\xc8\x2a\xed\x31\xce\xe9\xfb\x00\x57\x6c\xe7\xf9\xfb\x79\xe0\x2b\xb6\x37\x87\x60\x67\x69\xac\x0f\x8e\x5d\xa2\xb1\xf3\xa0\x59\xa7\xc6\x3e\x2b\x40\x3b\x5b\x41\xbd\x60\xed\x52\x2d\x9d\x09\xdc\x3e\x97\xaa\x7a\xe1\xdb\x59\x9a\x1a\x09\xe5\x2e\xd1\xd7\xe7\x83\x75\x9d\x6a\xfd\xff\x00\x77\x67\x19\xa0\x07\xe8\x5d\xa2\xf4\xb3\x40\x5f\xa7\x1e\x3f\x27\xf4\x3b\x43\x3b\xe7\xc1\xc0\xd8\x12\xad\xe2\xdd\xa2\x9e\xea\xf7\xb0\x86\xaf\x07\x1c\x1f\x47\xb1\xa4\x28\x0f\xce\x83\x9a\xf0\x6b\xa8\x4c\xef\x82\x7a\xb1\xf5\x00\xbe\x26\x91\x81\x5a\x7f\x18\x83\xc5\x36\x29\x4f\xd1\x06\x3a\xf1\x9c\x3d\x5d\xc6\x21\x0b\x00\x89\xd6\x3d\x1a\x54\x36\xe8\xf5\x51\x0c\x65\xab\x23\x8b\xfc\x80\x0c\x67\x45\x5e\xa3\xd7\x68\x1f\x70\x35\xc9\x12\x28\x85\x33\xe4\xf2\x78\x90\xeb\x59\xa5\x5d\xd6\x05\x66\xf7\x6d\xa4\x63\x72\x8b\xc7\x91\x73\x48\xd1\xd1\x84\x39\x1a\x14\xfb\x97\x70\x1f\xe3\xc5\x44\x66\x6c\x58\x18\xbd\x6c\xbb\xe1\xf1\x4a\x52\xe5\x64\x2d\xae\xcf\x13\xe7\x16\x32\x9f\xa3\x02\x43\x98\xe2\x52\x52\x45\x84\xeb\xe5\x70\xe3\x42\xad\x21\x25\x87\x42\xda\xc6\x41\xef\xde\xbe\x2f\x26\xac\x21\xb4\x43\x59\x0d\x4e\x2f\xee\xc5\x61\xe1\x56\xc3\x81\x3d\xbe\xb4\xc1\xc8\x9f\x83\xd3\xf6\x23\xf5\x5e\x4e\x17\xd5\xc1\xf8\x21\x93\x37\xd5\xd5\x8a\x47\xe3\xe9\x06\xbe\x47\x69\xe9\x06\x7e\x51\x4f\x4a\x6f\x5f\x8e\xdf\xd0\xf1\x2c\xbd\xee\x8a\xc0\x55\xcd\xe7\x0b\xb0\xb2\xdf\x35\x1a\x19\xec\xef\xeb\x01\xd5\xce\x5f\xb9\xf3\x33\xf1\x4a\xfc\xee\x0f\x61\x68\x7d\x44\xfd\xd5\x31\x40\xbd\x5b\x7c\x08\x8b\x23\x6e\xe3\xd8\x08\x53\x2b\xd0\x7f\xb7\xf8\x60\xbf\x1e\xc8\x0d\xbd\x52\x15\xbd\x1b\x20\xe3\xeb\x81\x07\x74\xd9\x11\xca\x96\x3a\x69\xdc\xb6\xdc\xef\x05\x16\xbe\xfd\x04\xbe\x6a\xf7\xee\x4b\xcb\xac\x8b\x04\xa5\xdc\x31\xe0\x14\x39\xfb\x73\x5d\xbc\x0d\x25\xc3\x7e\x81\x47\xe4\x95\x13\x1f\xa5\xd5\x8a\x12\x27\x36\xd4\x18\x5e\xd9\x27\xee\x7f\x52\x5a\x4a\xf8\x49\xcc\x55\x3b\x8b\x23\x59\x7b\x5f\x76\xaf\xd6\x57\x73\xd9\xec\xf5\x5d\x12\x0d\x5b\x0c\x71\xad\x29\x82\x95\xf6\x2a\x05\x74\xc1\x70\x17\xf2\x7c\x78\xc7\xe4\xf5\x2e\x30\xf5\x97\x5d\x2f\xb3\xf7\xdd\xb9\xd8\x1b\x17\x8b\xea\x6a\xae\xaf\x98\xdb\x07\x4d\x7a\xa6\xc4\x97\x0e\xd1\x41\x7c\xcc\xb5\xb6\xc1\x5a\x6d\x78\x85\x9f\x53\x33\x8d\x0a\xd2\x63\xb3\xfc\xd8\xaa\xe5\x45\x27\x1d\x2c\x2a\x46\x39\x66\x7f\x6e\x6f\xaf\xf2\xdf\xc7\xd4\x1e\x36\xea\x13\xcc\x49\x26\x68\x29\x3d\xce\xf8\xb1\xe4\x1f\x93\xe6\x47\x30\x3a\x94\xda\x47\x90\xe8\xcf\xb6\x5d\xd7\x5e\x6b\xa1\x43\xee\x8d\xbd\x96\xd5\xed\xad\x1a\xd4\x1c\xac\x6f\x0e\x3f\x08\x09\x99\x90\xca\xe2\xed\x64\x64\x5d\x6d\x33\x7d\x71\x20\xed\xb1\xf6\x18\x07\xff\xb1\x2a\x1e\x99\x8f\x50\x58\x4e\x4e\x0a\xcb\x32\xf9\xee\x0b\xcb\x8e\xdd\xe2\xe6\x15\xc3\x90\xb5\x73\xdc\x85\xfb\xbe\x79\xa1\x8d\xc3\x78\x92\xe7\x55\x4a\xc6\x3a\x54\x29\xd3\xdb\x66\x3b\xd6\x58\xbb\x5f\xb3\xca\x32\xb4\x20\x9c\x85\xb8\x5d\xe0\x4a\x7b\x9f\x7d\x83\x35\xdc\xfe\x1b\xd4\x51\xc3\x56\x0f\x3c\xa0\xae\x63\x0e\x26\x8f\xf9\xfd\xc0\xae\xbd\x46\xec\x67\x4c\x62\xcf\xb5\xd4\x4f\x8d\xea\x0b\x47\xc5\x71\xb0\x6e\x08\xa1\x02\x66\xd8\x88\x34\xde\xcc\xa4\x02\x84\x7a\x99\x98\x3c\x7c\x7a\x19\x4f\xe5\xba\xbd\x72\x52\x6f\x6d\x75\x76\xe8\x81\xdd\xc3\x39\x41\x17\xf1\x23\xa9\xa1\xd0\xd1\x75\xb3\x39\xb6\x5a\x8a\x4f\x8c\xb6\xdd\xf7\x8c\x63\x1b\x5f\x98\xb2\xc9\xab\x8f\xef\x7a\x4c\xdf\xf8\xe0\x22\xdc\xc9\x77\xa6\x2c\xea\xb8\x00\xed\x2b\x56\x87\x96\x06\x8c\xdd\x5e\x19\xb3\xb9\x32\x89\x9f\xed\xf5\xf6\x78\x12\x2d\xdf\xdb\x34\x3b\x70\x95\xd8\xdb\x61\x7f\x5b\x7b\x64\xb7\xb0\x47\xdc\xdb\xb7\x3c\xc8\xed\xec\x33\x6e\xb7\x27\x7e\xb3\xf8\x12\x3b\xa1\xc3\xe7\x40\x23\x09\x55\x07\xa7\x2f\x42\x6c\xf8\xac\x65\x24\xa1\xbd\x69\x5e\x98\xdc\x88\x83\x8e\x91\x34\x37\x63\x0e\x01\x5e\xa0\xe0\x39\x2f\x52\x94\xdb\x1c\x3d\x79\xae\x40\xe3\x44\xe2\x25\x9a\x7d\xc8\x08\x89\x63\x5c\x90\xb8\x2c\x2c\x5a\x87\xc6\x75\x95\xcc\x63\x24\x5c\x54\x04\x2a\xd1\xc2\xfe\xdf\x36\x23\x55\x1f\x82\xc7\xaf\x8d\x61\x49\x6b\xce\xe0\x45\x21\x77\x5d\x4a\x8f\x1b\xfe\xd5\x37\x4c\x52\x58\x47\x69\x75\x56\x1b\x8a\x94\xb1\x17\x94\x3a\x0d\xdb\x55\xda\x5b\x32\x1b\x4a\xe7\xe0\x8c\xaf\x1f\x39\x6d\xb8\xde\x3b\x78\xe6\x97\x35\x7f\x7b\x8d\x95\x2b\x05\xfe\xf8\xf3\xea\x7f\x01\x00\x00\xff\xff\x78\x47\xff\x36\xbe\x3d\x00\x00") +var _operatorsCoreosCom_installplansYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\x5b\x73\xeb\xb6\x11\x7e\xf7\xaf\xd8\x71\x1e\x92\xcc\x58\x52\x4e\x3a\x9d\xe9\xe8\xcd\x75\x9a\x8e\xdb\x5c\x3c\x47\xce\x79\xc9\x9c\x87\x15\xb9\x12\x11\x83\x00\x83\x8b\x64\x35\xcd\x7f\xef\x2c\x40\x52\x94\xc4\x9b\x74\x7c\xec\xe2\xc5\x16\x09\x2c\xf6\x82\xbd\x7c\x00\x88\x85\xf8\x40\xc6\x0a\xad\xe6\x80\x85\xa0\x67\x47\x8a\x7f\xd9\xe9\xd3\xdf\xec\x54\xe8\xd9\xe6\xdd\xd5\x93\x50\xe9\x1c\xee\xbc\x75\x3a\x7f\x4f\x56\x7b\x93\xd0\x77\xb4\x12\x4a\x38\xa1\xd5\x55\x4e\x0e\x53\x74\x38\xbf\x02\x40\xa5\xb4\x43\x7e\x6c\xf9\x27\x40\xa2\x95\x33\x5a\x4a\x32\x93\x35\xa9\xe9\x93\x5f\xd2\xd2\x0b\x99\x92\x09\xc4\xab\xa9\x37\xdf\x4c\xdf\xfd\x75\xfa\xcd\x15\x80\xc2\x9c\xe6\x20\x94\x75\x28\x65\x21\x51\xd9\xa9\x2e\xc8\xa0\xd3\xc6\x4e\x13\x6d\x48\xf3\x9f\xfc\xca\x16\x94\xf0\x14\x6b\xa3\x7d\x31\x87\xd6\x3e\x91\x5a\xc5\x09\x3a\x5a\x6b\x23\xaa\xdf\x00\x13\xd0\x32\x0f\xff\x47\x09\xef\xe3\xa4\x0f\x12\x55\x78\x2a\x85\x75\xff\x3e\x7e\xf3\x83\xb0\x2e\xbc\x2d\xa4\x37\x28\x0f\x59\x0d\x2f\x6c\xa6\x8d\xfb\x69\x3f\x31\x4f\x24\x8a\xf8\x4a\xa8\xb5\x97\x68\x0e\x46\x5d\x01\xd8\x44\x17\x34\x87\x30\xa8\xc0\x84\xd2\x2b\x80\x52\x37\x25\x91\x09\x60\x9a\x06\x7d\xa3\x7c\x30\x42\x39\x32\x77\x5a\xfa\x5c\xd5\x93\x70\x9f\x94\x6c\x62\x44\xe1\x82\x4e\x1f\x33\x82\x95\x30\xd6\xc1\xdd\xe2\x03\x08\x05\x2e\xa3\x20\x13\xe8\x15\x24\xd2\x5b\x47\x66\x41\x66\x23\x12\x2a\x97\x40\x98\xbf\x26\x07\xf0\x9b\xd5\xea\x01\x5d\x36\x87\x29\xab\x7b\xda\x3d\xe8\xd7\x6f\x3e\x36\xc6\x45\x1b\xde\x2d\x3e\x34\x9e\xb9\x1d\x4b\x68\x9d\x11\x6a\xdd\xc7\x31\x16\x85\xd1\x1b\x94\x90\xeb\x94\x7a\x78\xa9\xfa\x9d\x4c\x7b\x7b\xfa\xa2\x63\xee\x76\x92\x41\xf9\x6d\x24\x0f\x5e\x44\x92\x4b\xad\x25\x95\xab\xa5\xea\xbc\x79\x87\xb2\xc8\xf0\x5d\xf9\xd0\x26\x19\xe5\xb8\x37\x92\x2e\x48\xdd\x3e\xdc\x7f\xf8\xcb\xe2\xe8\x05\x1c\xea\xa2\xb1\xe4\x20\x65\x67\x23\x1b\x0c\x58\x2e\x9c\xe0\x63\x6c\x48\x04\x4b\xc1\xa2\x7b\x0f\x38\x61\x53\x2f\x7f\xa3\xc4\x35\x1e\x1b\xfa\xdd\x0b\x43\x69\x73\x76\xd6\x48\xe5\xca\x47\x8f\x59\x3b\x8d\x47\x85\xe1\xb9\x5c\xc3\x93\x62\x6b\xc4\x92\x83\xe7\x47\x92\xfd\x77\x72\xf4\x16\x80\x15\x12\x47\x1e\xc8\x5a\xba\x00\xa5\xa5\x16\x59\x4c\x97\x09\x0b\x86\x0a\x43\x96\x94\xdb\xab\x41\x95\x52\x4e\x4f\x88\xf3\x72\x25\x63\xd9\x2f\xbd\x4c\x39\x22\x6d\xc8\x38\x30\x94\xe8\xb5\x12\xff\xa9\xa9\x5b\x70\x3a\xfa\x08\x3a\xb2\x0e\x82\x93\x29\x94\xb0\x41\xe9\xe9\x06\x50\xa5\x27\xb4\x73\xdc\x81\x21\x9e\x17\xbc\x6a\x50\x0c\x43\xec\x29\x2f\x3f\x6a\xc3\x26\x5c\xe9\x39\x64\xce\x15\x76\x3e\x9b\xad\x85\xab\x62\x6d\xa2\xf3\xdc\x2b\xe1\x76\xb3\x10\x36\xc5\xd2\xb3\x3d\x67\x29\x6d\x48\xce\xac\x58\x4f\xd0\x24\x99\x70\x94\x38\x6f\x68\x86\x85\x98\x04\x61\x54\x88\xb7\xd3\x3c\xfd\xc2\x94\xd1\xd9\x1e\x4d\xdc\xea\x00\x50\x05\xbe\x33\x8d\xc5\x21\x11\x84\xe5\x95\x17\x08\x46\x61\xf7\x36\xe1\x47\xac\xc6\xf7\xff\x58\x3c\x42\xc5\x51\xb4\x5b\x34\xd1\xbe\x6b\x8b\x86\x2a\x6b\xb1\x66\x85\x5a\x91\x89\x23\x57\x46\xe7\x81\x2a\xa9\xb4\xd0\x42\xb9\xf0\x23\x91\x82\x94\x03\xeb\x97\xb9\x70\x36\x2c\x6b\xb2\x8e\x0d\x79\x4a\xf8\x2e\xe4\x26\x58\x12\xf8\x22\x45\x47\xe9\x69\x97\x7b\x05\x77\x98\x93\xbc\x43\x4b\xaf\x6e\x3b\xb6\x91\x9d\xb0\x41\x46\x5b\xaf\x99\x79\x4f\x07\x9c\x78\x3d\x40\x95\x34\x3b\xcd\xdd\x88\x3a\x8b\x82\x92\xda\x1b\xeb\x28\x73\x5b\x14\x52\x24\xd1\xed\xea\xd5\xc6\x8e\xb3\xac\x43\x13\x1d\xbb\x49\x27\x3b\x5d\x81\x08\x62\xc2\x3b\x0d\xe4\x87\xaf\x4e\x26\xe2\x57\xa3\x12\x1b\xf4\x44\x31\x08\x91\x2c\x4e\x7d\xfa\x66\xd8\x3d\xb8\x55\x39\x88\xdd\x84\xd7\xa9\xb7\x64\xf6\x99\xad\xd0\x52\x24\x3b\x58\x69\xc3\x61\xab\xa1\xf2\xd3\x35\xc7\xed\xde\x41\xee\x6d\x58\xb9\x5a\x11\x1b\xe1\xfa\xd6\x3b\x9d\xa3\x13\xc9\x35\x68\x03\xd7\x3f\xa2\xf2\x28\xaf\xdb\x86\x77\xae\x9d\xbd\x98\x6d\xda\x6f\x4f\x70\xfb\xd6\xad\xe5\x6e\x5a\x68\x0c\xee\x5a\xde\x0a\x47\x79\xeb\xb0\x01\xee\xd7\xa4\x38\xe3\xb5\xa4\x9b\xfd\x50\x8e\xe1\x6b\x32\x27\xef\xe3\xc2\xed\x1e\xd7\x31\x65\x1c\x56\x97\x69\x67\x8d\xb7\x0e\x9d\x3f\x91\x73\x68\x35\x35\x1d\x32\x10\x68\x04\xcf\xb2\x1e\x58\x69\x93\x47\x87\xc4\xa5\xf6\x31\x30\xc6\xc9\x40\xaf\x4e\x45\x70\x54\xd8\xda\xef\xd8\x73\x13\x9d\x17\x92\xdc\x61\x69\x31\xbd\xba\x3a\x0d\xcd\x91\x28\x47\x66\x67\x50\xc8\x30\x13\x26\xce\xa3\x0c\x13\x52\x59\x8f\xec\xac\xa3\xfc\x78\x31\x5e\x18\x04\x12\x74\x28\xf5\x7a\xd1\x9a\xd6\xb8\x43\x91\xa1\xa5\x73\x5c\xdb\x39\x52\x9e\xe3\x7f\xb9\x78\x6f\x93\x44\x7b\xe5\xde\xd3\xea\x62\x6f\xef\x26\x09\x86\x56\x64\x48\x25\x65\x45\x63\x63\x07\xc0\xd8\x03\x5c\x86\x8e\x83\x84\xb7\x2d\xc1\x2c\xa8\x4d\x43\xaa\x23\x3e\x48\xeb\x12\xaf\xb2\x54\xb7\xc3\xb7\xea\x79\x48\x35\xd0\x5b\xc3\xb5\x6a\xe4\xf6\xe1\xbe\xaa\xd2\x62\x71\x46\x95\xc4\x2d\x85\x58\x93\xc1\x0e\x07\xe3\xb6\x12\x24\xd3\x50\x97\x8f\xe1\xa0\xc3\x26\xdc\xee\x4b\xf5\x87\x22\xc5\x69\x40\x28\x04\x25\x74\x50\x2e\x06\x55\x12\xa6\xe5\x43\xce\xc7\x86\xca\x77\x37\xb1\xf4\xe8\x61\x15\x22\xdc\x2b\xcb\x4a\x87\x42\x01\x72\x39\x24\x52\xf8\xd7\xe2\xe7\x9f\x66\xff\xd4\x51\x1a\xb6\x37\x59\x1b\xbd\x24\x27\xe5\x6e\xc0\xfa\x24\x03\xb4\x2c\x0c\xaf\x7d\xf6\x2d\x9a\xe6\xa8\xc4\x8a\xac\x9b\x96\xd4\xc8\xd8\x5f\xbf\xfd\xd8\xa5\x49\x80\xef\xb5\x01\x7a\x46\xf6\xdf\x1b\x10\x51\xff\x75\x8d\x55\x2e\xbc\x90\x83\x58\xf8\x9a\x26\x6c\x85\xcb\x02\xab\x85\x4e\x4b\x21\xb7\x41\x08\x87\x4f\x9c\x64\xa2\x10\x9e\xd1\xe2\x53\x6b\x90\x8b\xed\x3a\x82\xc2\x9a\xd5\x3f\x18\x00\xfd\x79\x0d\x5f\x6d\x33\x32\x04\xd7\xfc\xf3\x3a\x32\x52\xd7\xd6\xfc\xac\x5a\x29\x7b\x86\x82\x1b\x38\x23\xd6\x6b\x32\x1d\x8e\xc0\x2d\xd4\x7f\x5c\x33\x7d\xcd\x69\x4f\xac\x40\xe9\x06\x91\x40\x9a\xed\x55\x50\x22\x56\x82\xd2\x13\x06\x7f\xfd\xf6\xe3\x35\x7c\x75\xa8\x87\xce\xc9\x84\x4a\xe9\x19\xbe\x8d\xc0\x59\x58\xd6\xd5\xd7\x53\x78\x0c\x2b\x62\xa7\x1c\x3e\xf3\x5c\x49\xa6\x2d\x29\xd0\x4a\xee\x58\xc2\x0c\x37\x04\x56\xe7\x04\x5b\x92\x72\x12\xab\xa7\x14\xb6\xb8\x6b\x0b\xc5\x55\xab\x4c\xc5\xcb\x14\xa1\x40\xe3\x06\x10\x4d\xd5\x1e\x7f\xfe\xee\xe7\x79\xe4\x8e\x97\xd1\x5a\x31\x4b\x5c\xe4\xae\x04\xe3\x16\x54\x69\x59\x3c\x87\x35\xc8\x8c\xfb\xb8\x38\x38\xea\x67\xa8\xd6\x54\x6d\x0b\xac\x3c\x97\xa5\x17\xbb\x6c\x1b\x8c\xa8\xda\x58\x6f\x0d\xb0\x62\x64\x0c\x79\xc3\x62\x7c\xb4\x4e\xc2\x6e\xc0\x27\xea\xe4\xa7\x86\xb7\x5c\xa4\x93\x27\xbf\x24\xa3\xc8\x51\x50\x4b\xaa\x13\xcb\x1a\x49\xa8\x70\x76\xa6\x37\x9c\x8c\x68\x3b\xdb\x6a\xf3\x24\xd4\x7a\xc2\xee\x30\x89\x6b\xce\xce\xc2\xce\xd9\xec\x0b\xd5\x52\x39\x9f\xa5\x82\xce\x42\xe9\x5c\x3d\x04\x42\x6f\xa9\x0c\x9e\xdf\xce\x2e\xd5\x45\x05\x96\xce\xc9\xae\x3d\x1a\x59\xc4\x20\x97\x1c\xd3\x65\xd7\xde\x66\x22\xc9\xaa\x8d\x92\x46\x16\xc8\x31\x8d\x69\x02\xd5\xee\xcd\x3c\x8b\x35\xee\x0d\xf3\xb4\x9b\x94\x9b\xc3\x13\x54\x29\xff\x6f\x85\x75\xfc\xfc\x52\x15\x7b\xf1\xc9\x41\xe8\x97\xfb\xef\xde\xd6\xdf\xbc\xb8\x34\xe2\x3c\x4f\xf6\x93\x4f\x72\x2c\x26\x25\xea\x72\x3a\x17\xc9\x49\xff\xa5\x57\xa9\xa4\x1f\xb4\x7e\xf2\x45\x6b\x29\x78\xa0\xb1\xbf\x37\x7b\x57\xa0\xb6\xdc\x11\x10\x6a\x52\x18\xbd\x36\x5c\xdf\x34\x36\x60\xa0\xf0\x32\xa6\x20\xaf\x0a\x4c\x9e\x70\x4d\xe5\xa4\x21\x65\x93\x72\x55\x49\x50\x62\xc9\xee\x62\xf6\x02\xe0\xd8\xc9\x7d\xdc\xb8\x2a\xf9\xec\x60\xb3\xaa\x4d\x98\xc7\x80\x68\x4a\xbe\x87\xf9\x1d\x2c\xbf\xfb\xc0\x4e\x6c\x47\x90\xe7\x3d\x75\xd5\x0d\x13\x10\x29\xfb\xd5\x4a\xb4\xe0\xdb\xaa\x4b\x81\x9d\x15\xce\x84\x91\xa4\xc4\x36\x54\x05\x23\x80\x02\x9c\xf0\xd9\x5d\x28\x1e\x58\xe3\xee\x68\x58\x65\x91\x2a\x50\x95\x5a\x3e\xe8\x16\x9e\x94\x56\x60\x91\x60\x8b\x36\x44\x3e\xb9\xa1\x34\xec\x0d\x76\x7b\xe9\xa0\x45\xc6\x49\x0b\xa3\xc0\x51\x8b\xbc\x17\x40\xa4\x26\xe3\x03\xe8\x63\x04\x5c\x6a\xe1\xa9\x27\x02\xc6\xf6\x3a\xd0\x29\xb6\xb7\x04\x50\xb1\xbd\x2d\x8c\x8a\xed\xd5\xc1\x54\x6c\xaf\x0a\xa9\x62\x7b\x3d\x60\x15\xdb\xc5\xf0\x2a\xb6\xd7\x02\x59\xa5\x3d\xc6\x39\x7d\x1f\xe0\x8a\xed\x3c\x7f\x3f\x0f\x7c\xc5\xf6\xe6\x10\xec\x2c\x8d\xf5\xc1\xb1\x4b\x34\x76\x1e\x34\xeb\xd4\xd8\x67\x05\x68\x67\x2b\xa8\x17\xac\x5d\xaa\xa5\x33\x81\xdb\xe7\x52\x55\x2f\x7c\x3b\x4b\x53\x23\xa1\xdc\x25\xfa\xfa\x7c\xb0\xae\x53\xad\xff\x1f\xe0\xee\x2c\x03\xf4\x00\xbd\x4b\x94\x7e\x16\xe8\xeb\xd4\xe3\xe7\x84\x7e\x67\x68\xe7\x3c\x18\x18\x5b\xa2\x55\xbc\x5b\xd4\x53\xfd\x1e\xd6\xf0\xf5\x80\xe3\xe3\x28\x96\x14\xe5\xc1\x79\x50\x13\x7e\x0d\x95\xe9\x5d\x50\x2f\xb6\x1e\xc0\xd7\x24\x32\x50\xeb\x0f\x63\xb0\xd8\x26\xe5\x29\xda\x40\x27\x9e\xb3\xa7\xcb\x38\x64\x01\x20\xd1\xba\x47\x83\xca\x06\xbd\x3e\x8a\xa1\x6c\x75\x64\x91\x1f\x90\xe1\xac\xc8\x6b\xf4\x1a\xed\x03\xae\x26\x59\x02\xa5\x70\x86\x5c\x1e\x0f\x72\x3d\xab\xb4\xcb\xba\xc0\xec\xbe\x8d\x74\x4c\x6e\xf1\x38\x72\x0e\x29\x3a\x9a\x30\x47\x83\x62\xff\x12\xee\x63\xbc\x98\xc8\x8c\x0d\x0b\xa3\x97\x6d\x37\x3c\x5e\x49\xaa\x9c\xac\xc5\xf5\x79\xe2\xdc\x42\xe6\x73\x54\x60\x08\x53\x5c\x4a\xaa\x88\x70\xbd\x1c\x6e\x5c\xa8\x35\xa4\xe4\x50\x48\xdb\x38\xe8\xdd\xdb\xf7\xc5\x84\x35\x84\x76\x28\xab\xc1\xe9\xc5\xbd\x38\x2c\xdc\x6a\x38\xb0\xc7\x97\x36\x18\xf9\x73\x70\xda\x7e\xa4\xde\xcb\xe9\xa2\x3a\x18\x3f\x64\xf2\xa6\xba\x5a\xf1\x68\x3c\xdd\xc0\xf7\x28\x2d\xdd\xc0\x2f\xea\x49\xe9\xed\xcb\xf1\x1b\x3a\x9e\xa5\xd7\x5d\x11\xb8\xaa\xf9\x7c\x01\x56\xf6\xbb\x46\x23\x83\xfd\x7d\x3d\xa0\xda\xf9\x2b\x77\x7e\x26\x5e\x89\xdf\xfd\x21\x0c\xad\x8f\xa8\xbf\x3a\x06\xa8\x77\x8b\x0f\x61\x71\xc4\x6d\x1c\x1b\x61\x6a\x05\xfa\xef\x16\x1f\xec\xd7\x03\xb9\xa1\x57\xaa\xa2\x77\x03\x64\x7c\x3d\xf0\x80\x2e\x3b\x42\xd9\x52\x27\x8d\xdb\x96\xfb\xbd\xc0\xc2\xb7\x9f\xc0\x57\xed\xde\x7d\x69\x99\x75\x91\xa0\x94\x3b\x06\x9c\x22\x67\x7f\xae\x8b\xb7\xa1\x64\xd8\x2f\xf0\x88\xbc\x72\xe2\xa3\xb4\x5a\x51\xe2\xc4\x86\x1a\xc3\x2b\xfb\xc4\xfd\x4f\x4a\x4b\x09\x3f\x89\xb9\x6a\x67\x71\x24\x6b\xef\xcb\xee\xd5\xfa\x6a\x2e\x9b\xbd\xbe\x4b\xa2\x61\x8b\x21\xae\x35\x45\xb0\xd2\x5e\xa5\x80\x2e\x18\xee\x42\x9e\x0f\xef\x98\xbc\xde\x05\xa6\xfe\xb2\xeb\x65\xf6\xbe\x3b\x17\x7b\xe3\x62\x51\x5d\xcd\xf5\x15\x73\xfb\xa0\x49\xcf\x94\xf8\xd2\x21\x3a\x88\x8f\xb9\xd6\x36\x58\xab\x0d\xaf\xf0\x73\x6a\xa6\x51\x41\x7a\x6c\x96\x1f\x5b\xb5\xbc\xe8\xa4\x83\x45\xc5\x28\xc7\xec\xcf\xed\xed\x55\xfe\xfb\x98\xda\xc3\x46\x7d\x82\x39\xc9\x04\x2d\xa5\xc7\x19\x3f\x96\xfc\x63\xd2\xfc\x08\x46\x87\x52\xfb\x08\x12\xfd\xd9\xb6\xeb\xda\x6b\x2d\x74\xc8\xbd\xb1\xd7\xb2\xba\xbd\x55\x83\x9a\x83\xf5\xcd\xe1\x07\x21\x21\x13\x52\x59\xbc\x9d\x8c\xac\xab\x6d\xa6\x2f\x0e\xa4\x3d\xd6\x1e\xe3\xe0\x3f\x56\xc5\x23\xf3\x11\x0a\xcb\xc9\x49\x61\x59\x26\xdf\x7d\x61\xd9\xb1\x5b\xdc\xbc\x62\x18\xb2\x76\x8e\xbb\x70\xdf\x37\x2f\xb4\x71\x18\x4f\xf2\xbc\x4a\xc9\x58\x87\x2a\x65\x7a\xdb\x6c\xc7\x1a\x6b\xf7\x6b\x56\x59\x86\x16\x84\xb3\x10\xb7\x0b\x5c\x69\xef\xb3\x6f\xb0\x86\xdb\x7f\x83\x3a\x6a\xd8\xea\x81\x07\xd4\x75\xcc\xc1\xe4\x31\xbf\x1f\xd8\xb5\xd7\x88\xfd\x8c\x49\xec\xb9\x96\xfa\xa9\x51\x7d\xe1\xa8\x38\x0e\xd6\x0d\x21\x54\xc0\x0c\x1b\x91\xc6\x9b\x99\x54\x80\x50\x2f\x13\x93\x87\x4f\x2f\xe3\xa9\x5c\xb7\x57\x4e\xea\xad\xad\xce\x0e\x3d\xb0\x7b\x38\x27\xe8\x22\x7e\x24\x35\x14\x3a\xba\x6e\x36\xc7\x56\x4b\xf1\x89\xd1\xb6\xfb\x9e\x71\x6c\xe3\x0b\x53\x36\x79\xf5\xf1\x5d\x8f\xe9\x1b\x1f\x5c\x84\x3b\xf9\xce\x94\x45\x1d\x17\xa0\x7d\xc5\xea\xd0\xd2\x80\xb1\xdb\x2b\x63\x36\x57\x26\xf1\xb3\xbd\xde\x1e\x4f\xa2\xe5\x7b\x9b\x66\x07\xae\x12\x7b\x3b\xec\x6f\x6b\x8f\xec\x16\xf6\x88\x7b\xfb\x96\x07\xb9\x9d\x7d\xc6\xed\xf6\xc4\x6f\x16\x5f\x62\x27\x74\xf8\x1c\x68\x24\xa1\xea\xe0\xf4\x45\x88\x0d\x9f\xb5\x8c\x24\xb4\x37\xcd\x0b\x93\x1b\x71\xd0\x31\x92\xe6\x66\xcc\x21\xc0\x0b\x14\x3c\xe7\x45\x8a\x72\x9b\xa3\x27\xcf\x15\x68\x9c\x48\xbc\x44\xb3\x0f\x19\x21\x71\x8c\x0b\x12\x97\x85\x45\xeb\xd0\xb8\xae\x92\x79\x8c\x84\x8b\x8a\x40\x25\x5a\xd8\xff\xdb\x66\xa4\xea\x43\xf0\xf8\xb5\x31\x2c\x69\xcd\x19\xbc\x28\xe4\xae\x4b\xe9\x71\xc3\xbf\xfa\x86\x49\x0a\xeb\x28\xad\xce\x6a\x43\x91\x32\xf6\x82\x52\xa7\x61\xbb\x4a\x7b\x4b\x66\x43\xe9\x1c\x9c\xf1\xf5\x23\xa7\x0d\xd7\x7b\x07\xcf\xfc\xb2\xe6\x6f\xaf\xb1\x72\xa5\xc0\x1f\x7f\x5e\xfd\x2f\x00\x00\xff\xff\x8d\x4b\xdb\x60\xbe\x3d\x00\x00") func operatorsCoreosCom_installplansYamlBytes() ([]byte, error) { return bindataRead( @@ -145,7 +145,7 @@ func operatorsCoreosCom_installplansYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_olmconfigsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\x7b\x6f\xdc\xc6\x11\xff\x3b\xfa\x14\x03\x36\x40\xee\x9c\x3b\x4a\x72\x02\x37\xbe\xc2\x30\x0c\xb9\x0a\x0c\x5b\xb5\x61\xa9\x2e\x50\x45\x6d\x86\xdc\x39\xde\x46\xe4\x2e\xb3\x0f\x49\x97\x38\xdf\xbd\x98\x5d\xbe\xa4\x3b\x9e\x54\x58\x2d\xff\xb0\x8f\xfb\x98\xf7\xfc\x66\x86\xc2\x5a\x7e\x22\x63\xa5\x56\x0b\xc0\x5a\xd2\x8d\x23\xc5\x6f\x36\xbd\xfc\xc1\xa6\x52\xef\x5f\x1d\xee\x5d\x4a\x25\x16\x70\xe4\xad\xd3\xd5\x47\xb2\xda\x9b\x9c\x5e\xd3\x52\x2a\xe9\xa4\x56\x7b\x15\x39\x14\xe8\x70\xb1\x07\x80\x4a\x69\x87\xbc\x6c\xf9\x15\x20\xd7\xca\x19\x5d\x96\x64\xe6\x05\xa9\xf4\xd2\x67\x94\x79\x59\x0a\x32\x81\x78\xcb\xfa\xea\x20\x3d\xfc\x3e\x3d\xd8\x03\x50\x58\xd1\x02\x74\x59\xe5\x5a\x2d\x65\x61\x53\x5d\x93\x41\xa7\x8d\x4d\x73\x6d\x48\xf3\x7f\xd5\x9e\xad\x29\x67\x06\x85\xd1\xbe\x5e\xc0\xd6\x33\x91\x56\x2b\x07\x3a\x2a\xb4\x91\xed\x3b\xc0\x9c\x99\x84\xdf\x51\xbf\xf7\xef\x4e\x8e\x02\xcb\xb0\x56\x4a\xeb\xde\xde\x5e\x7f\x27\xad\x0b\x7b\x75\xe9\x0d\x96\x43\x21\xc3\xb2\x95\xaa\xf0\x25\x9a\xc1\xc6\x1e\x80\xcd\x75\x4d\x0b\x38\x2a\xbd\x75\x64\xf6\x00\x1a\x9d\x1b\x39\xe6\x8d\xc2\x57\x87\x8d\x58\x36\x5f\x51\x85\xad\x90\xc0\xaa\xa9\x57\x1f\xde\x7c\xfa\xee\xf4\xce\x06\x80\x20\x9b\x1b\x59\xbb\x60\xc1\x4e\x4c\x90\x16\x10\x4c\xe3\x27\xfe\x51\x6b\x65\x65\x56\x12\x2c\xb5\x81\x28\x98\x37\x52\x15\x7c\x27\x1d\xd0\x73\x6b\x96\x54\x67\xbf\x50\xee\x06\xcb\x86\x7e\xf5\xd2\x90\x18\xb2\x66\xc1\x5b\xbf\x0f\x96\x6b\xc3\x9e\x70\x03\x2b\xc7\x67\x10\x65\xb7\xd6\xef\xe8\xf0\x79\x7e\x67\x17\x80\x55\x8f\x37\x41\x70\xc8\x91\x05\xb7\xa2\xd6\x88\x24\x1a\x7b\x81\x5e\x82\x5b\x49\x0b\x86\x6a\x43\x96\x54\x0c\x42\x5e\x46\xd5\xa8\x94\x6e\x10\x3f\x25\xc3\x84\xc0\xae\xb4\x2f\x05\x9b\xe6\x8a\x8c\x03\x43\xb9\x2e\x94\xfc\xad\xa3\x6e\xc1\xe9\xc0\xb6\x44\x47\xd6\x81\x54\x8e\x8c\xc2\x12\xae\xb0\xf4\x34\x03\x54\x62\x83\x76\x85\x6b\x30\xc4\x7c\xc1\xab\x01\xc5\x70\xc5\x6e\xca\x72\xa2\x0d\x81\x54\x4b\xbd\x80\x95\x73\xb5\x5d\xec\xef\x17\xd2\xb5\x59\x98\xeb\xaa\xf2\x4a\xba\xf5\x7e\x48\x28\x99\x79\x8e\xf6\x7d\x41\x57\x54\xee\x5b\x59\xcc\xd1\xe4\x2b\xe9\x28\x77\xde\xd0\x3e\xd6\x72\x1e\x94\x51\x21\x13\xd3\x4a\xfc\xa9\x8d\x07\x7b\x87\x71\xf4\xb9\x75\x1c\x0f\xb7\xb6\x42\x52\xfc\x97\xce\xe2\x84\x89\xe1\x17\x09\x46\x65\x7b\x9f\xf0\x12\x9b\xf1\xe3\x5f\x4f\xcf\xfa\x08\x0d\x7e\x8b\x2e\xea\x8f\x6e\xb1\x50\xeb\x2d\xb6\xac\x54\x4b\x32\xf1\xe6\xd2\xe8\x2a\x50\x25\x25\x6a\x2d\x95\x0b\x2f\x79\x29\x49\x39\xb0\x3e\xab\xa4\xb3\x21\x86\xc9\x3a\x76\xe4\x26\xe1\xa3\x80\x5a\x90\x11\xf8\x5a\xa0\x23\xb1\x79\xe4\x8d\x82\x23\xac\xa8\x3c\x42\x4b\xff\x77\xdf\xb1\x8f\xec\x9c\x1d\xf2\x60\xef\x0d\x31\x79\xf3\xc2\x46\x8a\x03\xb4\x80\x3a\xea\xee\x0e\x5f\x4e\x6b\xca\xd9\xc9\x6c\x65\xbe\x15\x50\x05\xd5\x00\x80\x5a\xcf\xde\x35\xd4\x28\xf3\x71\xe0\xe0\x67\x49\xc8\x96\xd9\xb2\x73\x47\xc4\xe3\xe6\x60\x28\x3a\x28\x55\x94\x91\x91\x9c\x71\xa0\x05\x3e\x64\x24\x7c\xff\xee\xa4\xa3\xbb\xe9\xcf\x9d\xa2\xde\x27\x6e\x10\x4b\x5a\x66\x73\xa4\x6b\x49\xe2\xe8\xf4\xd3\xc8\xb1\xfb\x33\xaa\x7d\x5e\xdf\x25\xc8\x1e\xf0\x96\x04\x23\x53\xc3\x8d\x95\xfa\xc6\x42\x12\x0f\xc1\xd1\xe9\xa7\xa4\xd5\x71\x94\x2e\xfb\xae\x2b\x9e\x20\x95\x75\x58\x96\x24\x00\xdb\x2c\x0a\x55\x2b\x16\xb1\x19\x5c\xaf\xc8\x10\x60\xbb\x3c\x4a\x35\x1c\x17\x1d\x61\x96\x55\x2b\x4e\x74\x74\xb0\x42\x0b\x19\x91\x1a\x30\x93\x0a\x50\x8d\x12\x7b\xdf\x50\xf9\x91\x4b\x7d\xa4\xe1\xd0\x14\xe4\x2c\x60\x59\xc6\x1a\x5f\x63\xbe\xdd\x8f\xf1\xf9\xc7\x8a\x14\x18\x22\xc5\x66\x12\xb3\xe0\xfd\x6b\x59\x96\x8c\xf4\x86\xd0\x51\x50\x76\x60\x38\x9b\x04\xcb\x10\xe6\xab\x51\xa2\xb7\x6c\xd3\x2b\x3b\x26\x45\x8c\xa8\x4c\xeb\x92\x46\x94\xad\x31\xbf\xc4\x82\x22\xcc\x9d\xae\x55\xfe\x86\xcb\xcc\x15\x96\x5f\x1a\x3c\x1f\xc6\x08\xdf\x0a\xa2\x50\x5d\x63\x56\xaf\x55\x1e\x6b\x1c\x9f\x59\xea\x71\x47\x37\x22\x1b\x1b\x48\x43\xad\x85\x4d\x5b\x76\x83\x35\xa8\xc9\x48\x2d\x64\x8e\x65\xb9\x86\x7c\x45\xf9\x25\x33\x1a\x8f\x1f\x87\xce\x5b\x4e\xda\x23\x74\x58\xea\xe2\x34\xd6\xae\xbf\x44\xc4\x67\xd4\x91\x4b\xd9\xb4\x02\x91\x36\x78\x6e\xbf\x40\x78\x13\x0a\xff\xae\x80\xaf\xd0\xc1\x84\xd2\x22\x85\xe4\xd9\x41\x95\x4c\x53\x38\xd6\x4d\x2d\xa9\xd1\x60\x45\x8e\xcc\x0c\xb4\x2a\xd7\xb0\xd2\xde\x58\x98\x24\xab\x64\x3a\x83\x4a\x2a\xef\x36\x0a\x68\xff\x4c\x92\x8a\x8f\xa1\x12\x60\x29\xd7\x4a\xf0\x4d\x9b\x4c\x43\xc1\xca\xa8\x13\x5b\xa4\x31\x20\xb9\xe6\x74\x6b\xb3\x9d\x06\x69\x74\x14\xb4\x44\x5f\xba\xae\x1d\x89\xe5\xb5\xa3\x01\xd7\xd2\xad\xa4\x8a\x56\x19\x3a\x61\x77\x4c\x6e\x29\x1f\x43\x0f\x3b\xee\x75\x16\xf0\xaf\xc9\xf9\xc1\xfc\xf9\xc5\xb7\x93\x9f\xd2\xf8\x63\xfa\x72\x62\x3f\x57\x9f\x57\xd3\xe9\xb7\x5f\xef\x6d\x7a\xef\x81\xc5\x24\x7a\xba\x2d\x27\xf1\xed\x7f\x5d\x50\xd8\x37\x72\x30\xa3\x6c\x23\x8a\xc6\xe0\x7a\xcb\xae\x74\x54\x8d\x81\xfe\x83\xd2\xf1\xa8\x65\xde\x57\x29\x41\x0e\x65\x19\xf5\x66\x9c\x44\xf6\xa8\x8b\x2d\x2d\x41\xee\x8d\x09\xad\x8c\x63\xa0\x6a\xfb\xdc\x57\x1f\xde\xc0\xc7\x11\xb3\xb4\xcf\x7c\x3e\x26\xc4\x59\x48\x23\x67\x7c\xee\xd8\xf6\x9c\xeb\x4a\x90\x08\x12\x08\x69\x42\xd3\x6a\x59\x10\xf6\x43\x30\x45\x5b\x11\x96\x92\x4a\xc1\x51\xb1\x82\x34\xba\x2b\xed\xcd\x99\x42\x48\x25\xba\xc1\xaa\x2e\x69\xb6\xb7\x37\xc2\xfe\x2b\xb6\x31\x1c\x6b\xdd\xb8\x3f\x4a\xf2\xfb\xd8\x69\xfe\x67\x7f\x1f\x3e\x76\xbd\x61\x90\x44\x67\x1c\xdc\x71\xd6\x0c\x7d\x3e\x2c\xb5\xfe\xc6\xde\xb6\xd7\x98\x69\x5a\x9a\x6f\x95\xbe\x56\xdb\x34\x09\x12\xa2\xa1\x05\x24\xaf\xae\x50\x96\x5c\x39\x92\x19\x24\x1f\x8c\x2e\x0c\x59\x06\x9b\x24\xe6\x7a\xf2\x9a\x0a\x83\x82\x44\x72\x0f\xaf\x6f\x6b\x74\xf9\xea\x84\x4c\x41\x6f\x69\xfd\x82\x39\x3c\xe8\xc6\xa9\x33\x3c\xbc\xae\x5f\x54\x7c\xf5\xbe\x2b\xdc\xee\x9c\xad\x6b\x7a\x51\x61\xfd\x90\xb3\x27\x58\x3f\x44\x9a\x2e\x6c\x2d\x9c\x5f\x70\x77\x79\x75\x98\xf6\xa1\xfc\xf3\x2f\x56\xab\x45\xd2\xdb\x6f\xa6\x2b\xce\x94\xda\xad\x13\xb8\xa5\xc4\x22\x09\x5a\x34\xab\xad\x31\x16\x09\xf3\x4f\x38\x6b\x9d\xce\xfc\x72\x91\x64\x6b\x47\x76\x76\x38\x33\x54\xcf\xb8\xc4\xbf\xe8\x69\x27\x3f\x8f\x07\x56\xa3\x99\x76\x2b\x32\x31\x56\xc7\xf0\xfa\xab\x3f\xb6\x6e\xdc\xd3\xf8\x8d\x4d\xc3\xfd\x33\x87\x12\xad\x3b\x33\xa8\x6c\x10\xf7\x4c\x56\x63\x86\xe5\x11\xda\x5a\x1c\xf5\xe9\x1c\x0c\xa1\x1d\x2d\x66\xf3\x06\x2f\x47\xb7\x47\x7d\x7a\x5f\xfb\x0a\x5b\x74\x18\x3b\xf9\xf0\x36\x64\x1b\xd5\x16\xf9\x79\x07\x1c\x2f\x04\xc8\xeb\x02\xcb\x75\xa7\x19\x9d\x78\xd2\x63\x80\x6c\xea\x84\xd3\x80\x2a\xb8\x7a\xbc\xf5\x6b\xb1\x2e\x4e\xf8\x19\x71\x0f\x1b\x2b\xa4\x57\x82\x4c\xb9\xe6\xae\xa1\xe7\x97\xaf\x50\x15\x5c\xa1\xe1\xcd\x32\xf6\x9a\xd2\x86\x42\x7d\xc9\x40\x11\x8a\xb4\x6a\x5a\x0d\xa6\x11\x24\xee\x28\x32\x26\x47\x7c\x6c\xc8\x84\x59\x38\xcf\xa9\x76\x0c\x1f\xe3\x42\x3e\xa0\x0e\xb7\x9d\xcb\x02\x78\x42\x9d\xbb\xf1\xa8\x6a\x62\xea\x31\xfc\xd5\x90\x8a\x23\xfd\xca\x57\xc8\x5d\x34\x8a\x30\x6c\x74\x7b\x8a\xfb\xba\x30\xda\xb7\x75\x0c\x33\xed\x63\xb5\xe8\xdd\x77\xaf\x87\x9a\x26\x09\x15\x04\xd8\x68\xac\xf1\x85\x36\xab\xf0\xe6\x1d\xa9\xc2\xad\x16\xf0\xdd\xd3\x3f\x3f\xfb\x61\xe4\x60\x2c\x25\x24\x7e\x24\x45\xb1\x7f\x7c\x0c\xeb\x6d\x52\x1d\x7c\xde\x08\xe6\x49\xdb\x31\x3d\x2d\xfa\x33\x71\xc2\xb9\x95\x05\xd7\x68\xc1\x92\x83\x0c\xb9\x59\xf7\xf5\x6e\x73\x72\x09\x0e\xc3\x95\xca\x69\x06\x72\xb9\x9d\x8d\xec\x2a\x65\xb9\x86\xc3\xa7\x33\xc8\x1a\x9f\x6d\x16\xc3\xf3\x9b\x8b\x74\x8b\x32\xd2\xc2\xf3\xd9\x1d\x49\x79\xd2\xf3\xa1\x75\xe1\x30\xdd\x21\x24\xb7\xaa\xe1\xdb\x24\xf7\x1a\x4d\x3b\xbb\xa5\xd3\xa1\x4e\x93\xfb\x22\x81\x7b\x98\x62\xc7\x4c\xda\xa6\x8f\x54\xee\xd9\xf7\xe3\x01\x23\x95\xac\x7c\xb5\x80\x83\x91\x23\x11\x91\x1f\x23\x3c\x22\xa5\xbe\x0b\x44\x86\xe5\xc2\x60\x55\xa1\x93\x39\x48\x41\xca\x71\x5b\x6f\x86\x29\xc6\x16\x69\x2e\x2e\xc3\xd0\x32\x30\xfe\x37\xb6\x81\xd1\x07\x25\xdd\x07\xa3\x85\xcf\xc9\x84\xde\xa9\x19\x21\xf2\x21\xf2\xae\x6b\x8a\x59\xd9\x4c\x86\x74\xc3\xbe\xea\xbe\x60\x86\xde\xa7\x22\x54\x52\x15\xb6\x11\x46\xda\x88\x7f\xb3\x1d\x7c\xf9\xda\xf5\x8a\x42\x81\xee\x66\x18\xcb\xad\x16\x33\xb7\x52\x90\x21\x01\x08\x85\x47\x83\xca\x11\x09\xc6\xd5\xdd\xf0\xd1\x4d\x42\x1d\xca\x63\xff\xb9\xee\x5e\x24\x69\x00\x28\x22\x37\x2b\xdc\x7c\x0c\x0c\x38\xf4\x78\x00\x74\x78\xf0\x74\x67\xdc\x75\xe7\x76\x4c\xdb\xed\x2c\x76\xfe\x6a\xfe\x4f\x9c\xff\x76\x31\x69\x7e\x1c\xcc\x9f\xff\x7b\xb6\xb8\x78\x32\x78\xbd\x98\xbe\xfc\x7a\x84\xd2\xf6\x01\xad\x7f\x6e\xc5\x70\x3f\x8b\xdf\x0a\xb6\x59\x28\xc4\x7a\x09\x67\xc6\xd3\x0c\x8e\xb1\xb4\x34\x83\xbf\xab\x50\x27\xbf\xd0\x68\xa4\x7c\x35\x2e\x1d\x77\x36\x09\x73\x1d\xeb\xb7\x9b\x23\x41\xa4\xdd\x67\x1a\x71\x77\x4d\xc7\x8f\x90\xe8\x61\x94\x88\x1f\x20\x5b\x94\x1c\x7c\x4d\x86\x80\xd6\x3c\xbb\xa4\xcd\xdc\x94\xe6\xba\xda\xdf\xf1\xb5\x79\xa0\xc1\xe8\x80\xc7\xcf\x09\xaa\x35\xf4\x30\x1e\x47\x9a\xbb\xe9\x66\x1d\x23\x2e\xe6\x46\x5b\xdb\xcd\xd9\x16\x4a\x79\x49\xd0\x0d\x3e\xb1\x38\x64\x94\x63\x98\x0a\x4d\x26\x9d\x41\xb3\x1e\x0c\xd2\x90\xa3\x82\x6c\x17\xe0\x7b\x4b\x4b\x5f\xc2\xc4\x12\x41\xaa\xb4\xa0\xcd\x3a\x33\x8d\xd5\x04\x33\x59\x4a\xb7\x8e\x1f\xa5\x72\xad\x96\xa5\x6c\xc6\xd4\xaa\xd6\xc6\xa1\xda\xf2\x97\x9c\xfe\x39\x0b\x08\x59\xd0\x0d\x48\x07\x15\x0f\x19\x14\xbe\x2f\x4c\x84\xb2\x87\x87\x4f\xbf\x3b\xf5\x99\xd0\x15\x4a\x75\x5c\xb9\xfd\xe9\xcb\xc9\xaf\x1e\xcb\xf0\xf5\xe4\x6f\x58\xd1\x71\xe5\xa6\x8f\xd7\x71\x1c\x3e\x7b\x40\x2a\x4f\xce\x63\xc2\x5e\x4c\xce\xe7\xcd\xaf\x27\xed\xd2\xf4\xe5\xe4\xa7\x74\xe7\xfe\xf4\x09\xeb\x30\x80\x81\x8b\xf3\x79\x8f\x01\xe9\xc5\x93\xe9\xcb\xc1\xde\xb4\x45\x84\x58\xcb\x17\xe0\x8c\x6f\x7d\x66\x9d\x36\xdc\x36\xde\x5a\xf3\x59\x17\x12\x7d\x26\x34\xf0\x01\xbf\xff\xb1\xf7\x9f\x00\x00\x00\xff\xff\x31\x78\xbf\xa0\x3e\x1e\x00\x00") +var _operatorsCoreosCom_olmconfigsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\x7b\x6f\xdc\xc6\x11\xff\x3b\xfa\x14\x03\x36\x40\xee\x9c\x3b\x4a\x72\x5a\x37\xbe\xc2\x30\x0c\xb9\x0a\x0c\x5b\xb5\x61\xa9\x2e\x50\x45\x6d\x86\xdc\x39\xde\x46\xe4\x2e\xb3\x0f\x49\x97\x38\xdf\xbd\x98\x5d\xbe\xa4\x3b\x9e\x54\x58\x2d\xff\xb0\x8f\xfb\x98\xf7\xfc\x66\x86\xc2\x5a\x7e\x22\x63\xa5\x56\x0b\xc0\x5a\xd2\x8d\x23\xc5\x6f\x36\xbd\xfc\xde\xa6\x52\xef\x5f\x1d\xee\x5d\x4a\x25\x16\x70\xe4\xad\xd3\xd5\x47\xb2\xda\x9b\x9c\x5e\xd3\x52\x2a\xe9\xa4\x56\x7b\x15\x39\x14\xe8\x70\xb1\x07\x80\x4a\x69\x87\xbc\x6c\xf9\x15\x20\xd7\xca\x19\x5d\x96\x64\xe6\x05\xa9\xf4\xd2\x67\x94\x79\x59\x0a\x32\x81\x78\xcb\xfa\xea\x20\x3d\xfc\x53\x7a\xb0\x07\xa0\xb0\xa2\x05\xe8\xb2\xca\xb5\x5a\xca\xc2\xa6\xba\x26\x83\x4e\x1b\x9b\xe6\xda\x90\xe6\xff\xaa\x3d\x5b\x53\xce\x0c\x0a\xa3\x7d\xbd\x80\xad\x67\x22\xad\x56\x0e\x74\x54\x68\x23\xdb\x77\x80\x39\x33\x09\xbf\xa3\x7e\xef\xdf\x9d\x1c\x05\x96\x61\xad\x94\xd6\xbd\xbd\xbd\xfe\x4e\x5a\x17\xf6\xea\xd2\x1b\x2c\x87\x42\x86\x65\x2b\x55\xe1\x4b\x34\x83\x8d\x3d\x00\x9b\xeb\x9a\x16\x70\x54\x7a\xeb\xc8\xec\x01\x34\x3a\x37\x72\xcc\x1b\x85\xaf\x0e\x1b\xb1\x6c\xbe\xa2\x0a\x5b\x21\x81\x55\x53\xaf\x3e\xbc\xf9\xf4\xdd\xe9\x9d\x0d\x00\x41\x36\x37\xb2\x76\xc1\x82\x9d\x98\x20\x2d\x20\x98\xc6\x4f\xfc\xa3\xd6\xca\xca\xac\x24\x58\x6a\x03\x51\x30\x6f\xa4\x2a\xf8\x4e\x3a\xa0\xe7\xd6\x2c\xa9\xce\x7e\xa6\xdc\x0d\x96\x0d\xfd\xe2\xa5\x21\x31\x64\xcd\x82\xb7\x7e\x1f\x2c\xd7\x86\x3d\xe1\x06\x56\x8e\xcf\x20\xca\x6e\xad\xdf\xd1\xe1\xf3\xfc\xce\x2e\x00\xab\x1e\x6f\x82\xe0\x90\x23\x0b\x6e\x45\xad\x11\x49\x34\xf6\x02\xbd\x04\xb7\x92\x16\x0c\xd5\x86\x2c\xa9\x18\x84\xbc\x8c\xaa\x51\x29\xdd\x20\x7e\x4a\x86\x09\x81\x5d\x69\x5f\x0a\x36\xcd\x15\x19\x07\x86\x72\x5d\x28\xf9\x6b\x47\xdd\x82\xd3\x81\x6d\x89\x8e\xac\x03\xa9\x1c\x19\x85\x25\x5c\x61\xe9\x69\x06\xa8\xc4\x06\xed\x0a\xd7\x60\x88\xf9\x82\x57\x03\x8a\xe1\x8a\xdd\x94\xe5\x44\x1b\x02\xa9\x96\x7a\x01\x2b\xe7\x6a\xbb\xd8\xdf\x2f\xa4\x6b\xb3\x30\xd7\x55\xe5\x95\x74\xeb\xfd\x90\x50\x32\xf3\x1c\xed\xfb\x82\xae\xa8\xdc\xb7\xb2\x98\xa3\xc9\x57\xd2\x51\xee\xbc\xa1\x7d\xac\xe5\x3c\x28\xa3\x42\x26\xa6\x95\xf8\x43\x1b\x0f\xf6\x0e\xe3\xe8\x73\xeb\x38\x1e\x6e\x6d\x85\xa4\xf8\x2f\x9d\xc5\x09\x13\xc3\x2f\x12\x8c\xca\xf6\x3e\xe1\x25\x36\xe3\xc7\xbf\x9e\x9e\xf5\x11\x1a\xfc\x16\x5d\xd4\x1f\xdd\x62\xa1\xd6\x5b\x6c\x59\xa9\x96\x64\xe2\xcd\xa5\xd1\x55\xa0\x4a\x4a\xd4\x5a\x2a\x17\x5e\xf2\x52\x92\x72\x60\x7d\x56\x49\x67\x43\x0c\x93\x75\xec\xc8\x4d\xc2\x47\x01\xb5\x20\x23\xf0\xb5\x40\x47\x62\xf3\xc8\x1b\x05\x47\x58\x51\x79\x84\x96\xfe\xef\xbe\x63\x1f\xd9\x39\x3b\xe4\xc1\xde\x1b\x62\xf2\xe6\x85\x8d\x14\x07\x68\x01\x75\xd4\xdd\x1d\xbe\x9c\xd6\x94\xb3\x93\xd9\xca\x7c\x2b\xa0\x0a\xaa\x01\x00\xb5\x9e\xbd\x6b\xa8\x51\xe6\xe3\xc0\xc1\xcf\x92\x90\x2d\xb3\x65\xe7\x8e\x88\xc7\xcd\xc1\x50\x74\x50\xaa\x28\x23\x23\x39\xe3\x40\x0b\x7c\xc8\x48\xf8\xfe\xdd\x49\x47\x77\xd3\x9f\x3b\x45\xbd\x4f\xdc\x20\x96\xb4\xcc\xe6\x48\xd7\x92\xc4\xd1\xe9\xa7\x91\x63\xf7\x67\x54\xfb\xbc\xbe\x4b\x90\x3d\xe0\x2d\x09\x46\xa6\x86\x1b\x2b\xf5\x8d\x85\x24\x1e\x82\xa3\xd3\x4f\x49\xab\xe3\x28\x5d\xf6\x5d\x57\x3c\x41\x2a\xeb\xb0\x2c\x49\x00\xb6\x59\x14\xaa\x56\x2c\x62\x33\xb8\x5e\x91\x21\xc0\x76\x79\x94\x6a\x38\x2e\x3a\xc2\x2c\xab\x56\x9c\xe8\xe8\x60\x85\x16\x32\x22\x35\x60\x26\x15\xa0\x1a\x25\xf6\xbe\xa1\xf2\x03\x97\xfa\x48\xc3\xa1\x29\xc8\x59\xc0\xb2\x8c\x35\xbe\xc6\x7c\xbb\x1f\xe3\xf3\x8f\x15\x29\x30\x44\x8a\xcd\x24\x66\xc1\xfb\xd7\xb2\x2c\x19\xe9\x0d\xa1\xa3\xa0\xec\xc0\x70\x36\x09\x96\x21\xcc\x57\xa3\x44\x6f\xd9\xa6\x57\x76\x4c\x8a\x18\x51\x99\xd6\x25\x8d\x28\x5b\x63\x7e\x89\x05\x45\x98\x3b\x5d\xab\xfc\x0d\x97\x99\x2b\x2c\xbf\x34\x78\x3e\x8c\x11\xbe\x15\x44\xa1\xba\xc6\xac\x5e\xab\x3c\xd6\x38\x3e\xb3\xd4\xe3\x8e\x6e\x44\x36\x36\x90\x86\x5a\x0b\x9b\xb6\xec\x06\x6b\x50\x93\x91\x5a\xc8\x1c\xcb\x72\x0d\xf9\x8a\xf2\x4b\x66\x34\x1e\x3f\x0e\x9d\xb7\x9c\xb4\x47\xe8\xb0\xd4\xc5\x69\xac\x5d\x7f\x89\x88\xcf\xa8\x23\x97\xb2\x69\x05\x22\x6d\xf0\xdc\x7e\x81\xf0\x26\x14\xfe\x5d\x01\x5f\xa1\x83\x09\xa5\x45\x0a\xc9\xb3\x83\x2a\x99\xa6\x70\xac\x9b\x5a\x52\xa3\xc1\x8a\x1c\x99\x19\x68\x55\xae\x61\xa5\xbd\xb1\x30\x49\x56\xc9\x74\x06\x95\x54\xde\x6d\x14\xd0\xfe\x99\x24\x15\x1f\x43\x25\xc0\x52\xae\x95\xe0\x9b\x36\x99\x86\x82\x95\x51\x27\xb6\x48\x63\x40\x72\xcd\xe9\xd6\x66\x3b\x0d\xd2\xe8\x28\x68\x89\xbe\x74\x5d\x3b\x12\xcb\x6b\x47\x03\xae\xa5\x5b\x49\x15\xad\x32\x74\xc2\xee\x98\xdc\x52\x3e\x86\x1e\x76\xdc\xeb\x2c\xe0\x5f\x93\xf3\x83\xf9\xf3\x8b\x6f\x27\x3f\xa6\xf1\xc7\xf4\xe5\xc4\x7e\xae\x3e\xaf\xa6\xd3\x6f\xbf\xde\xdb\xf4\xde\x03\x8b\x49\xf4\x74\x5b\x4e\xe2\xdb\xff\xba\xa0\xb0\x6f\xe4\x60\x46\xd9\x46\x14\x8d\xc1\xf5\x96\x5d\xe9\xa8\x1a\x03\xfd\x07\xa5\xe3\x51\xcb\xbc\xaf\x52\x82\x1c\xca\x32\xea\xcd\x38\x89\xec\x51\x17\x5b\x5a\x82\xdc\x1b\x13\x5a\x19\xc7\x40\xd5\xf6\xb9\xaf\x3e\xbc\x81\x8f\x23\x66\x69\x9f\xf9\x7c\x4c\x88\xb3\x90\x46\xce\xf8\xdc\xb1\xed\x39\xd7\x95\x20\x11\x24\x10\xd2\x84\xa6\xd5\xb2\x20\xec\x87\x60\x8a\xb6\x22\x2c\x25\x95\x82\xa3\x62\x05\x69\x74\x57\xda\x9b\x33\x85\x90\x4a\x74\x83\x55\x5d\xd2\x6c\x6f\x6f\x84\xfd\x57\x6c\x63\x38\xd6\xba\x71\x7f\x94\xe4\xb7\xb1\xd3\xfc\xcf\xfe\x3e\x7c\xec\x7a\xc3\x20\x89\xce\x38\xb8\xe3\xac\x19\xfa\x7c\x58\x6a\xfd\x8d\xbd\x6d\xaf\x31\xd3\xb4\x34\xdf\x2a\x7d\xad\xb6\x69\x12\x24\x44\x43\x0b\x48\x5e\x5d\xa1\x2c\xb9\x72\x24\x33\x48\x3e\x18\x5d\x18\xb2\x0c\x36\x49\xcc\xf5\xe4\x35\x15\x06\x05\x89\xe4\x1e\x5e\xdf\xd6\xe8\xf2\xd5\x09\x99\x82\xde\xd2\xfa\x05\x73\x78\xd0\x8d\x53\x67\x78\x78\x5d\xbf\xa8\xf8\xea\x7d\x57\xb8\xdd\x39\x5b\xd7\xf4\xa2\xc2\xfa\x21\x67\x4f\xb0\x7e\x88\x34\x5d\xd8\x5a\x38\xbf\xe0\xee\xf2\xea\x30\xed\x43\xf9\xa7\x9f\xad\x56\x8b\xa4\xb7\xdf\x4c\x57\x9c\x29\xb5\x5b\x27\x70\x4b\x89\x45\x12\xb4\x68\x56\x5b\x63\x2c\x12\xe6\x9f\x70\xd6\x3a\x9d\xf9\xe5\x22\xc9\xd6\x8e\xec\xec\x70\x66\xa8\x9e\x71\x89\x7f\xd1\xd3\x4e\x7e\x1a\x0f\xac\x46\x33\xed\x56\x64\x62\xac\x8e\xe1\xf5\x57\xbf\x6f\xdd\xb8\xa7\xf1\x1b\x9b\x86\xfb\x67\x0e\x25\x5a\x77\x66\x50\xd9\x20\xee\x99\xac\xc6\x0c\xcb\x23\xb4\xb5\x38\xea\xd3\x39\x18\x42\x3b\x5a\xcc\xe6\x0d\x5e\x8e\x6e\x8f\xfa\xf4\xbe\xf6\x15\xb6\xe8\x30\x76\xf2\xe1\x6d\xc8\x36\xaa\x2d\xf2\xf3\x0e\x38\x5e\x08\x90\xd7\x05\x96\xeb\x4e\x33\x3a\xf1\xa4\xc7\x00\xd9\xd4\x09\xa7\x01\x55\x70\xf5\x78\xeb\xd7\x62\x5d\x9c\xf0\x33\xe2\x1e\x36\x56\x48\xaf\x04\x99\x72\xcd\x5d\x43\xcf\x2f\x5f\xa1\x2a\xb8\x42\xc3\x9b\x65\xec\x35\xa5\x0d\x85\xfa\x92\x81\x22\x14\x69\xd5\xb4\x1a\x4c\x23\x48\xdc\x51\x64\x4c\x8e\xf8\xd8\x90\x09\xb3\x70\x9e\x53\xed\x18\x3e\xc6\x85\x7c\x40\x1d\x6e\x3b\x97\x05\xf0\x84\x3a\x77\xe3\x51\xd5\xc4\xd4\x63\xf8\xab\x21\x15\x47\xfa\x95\xaf\x90\xbb\x68\x14\x61\xd8\xe8\xf6\x14\xf7\x75\x61\xb4\x6f\xeb\x18\x66\xda\xc7\x6a\xd1\xbb\xef\x5e\x0f\x35\x4d\x12\x2a\x08\xb0\xd1\x58\xe3\x0b\x6d\x56\xe1\xcd\x3b\x52\x85\x5b\x2d\xe0\xbb\xa7\x7f\x7e\xf6\xfd\xc8\xc1\x58\x4a\x48\xfc\x40\x8a\x62\xff\xf8\x18\xd6\xdb\xa4\x3a\xf8\xbc\x11\xcc\x93\xb6\x63\x7a\x5a\xf4\x67\xe2\x84\x73\x2b\x0b\xae\xd1\x82\x25\x07\x19\x72\xb3\xee\xeb\xdd\xe6\xe4\x12\x1c\x86\x2b\x95\xd3\x0c\xe4\x72\x3b\x1b\xd9\x55\xca\x72\x0d\x87\x4f\x67\x90\x35\x3e\xdb\x2c\x86\xe7\x37\x17\xe9\x16\x65\xa4\x85\xe7\xb3\x3b\x92\xf2\xa4\xe7\x43\xeb\xc2\x61\xba\x43\x48\x6e\x55\xc3\xb7\x49\xee\x35\x9a\x76\x76\x4b\xa7\x43\x9d\x26\xf7\x45\x02\xf7\x30\xc5\x8e\x99\xb4\x4d\x1f\xa9\xdc\xb3\x3f\x8e\x07\x8c\x54\xb2\xf2\xd5\x02\x0e\x46\x8e\x44\x44\x7e\x8c\xf0\x88\x94\xfa\x2e\x10\x19\x96\x0b\x83\x55\x85\x4e\xe6\x20\x05\x29\xc7\x6d\xbd\x19\xa6\x18\x5b\xa4\xb9\xb8\x0c\x43\xcb\xc0\xf8\xdf\xd8\x06\x46\x1f\x94\x74\x1f\x8c\x16\x3e\x27\x13\x7a\xa7\x66\x84\xc8\x87\xc8\xbb\xae\x29\x66\x65\x33\x19\xd2\x0d\xfb\xaa\xfb\x82\x19\x7a\x9f\x8a\x50\x49\x55\xd8\x46\x18\x69\x23\xfe\xcd\x76\xf0\xe5\x6b\xd7\x2b\x0a\x05\xba\x9b\x61\x2c\xb7\x5a\xcc\xdc\x4a\x41\x86\x04\x20\x14\x1e\x0d\x2a\x47\x24\x18\x57\x77\xc3\x47\x37\x09\x75\x28\x8f\xfd\xe7\xba\x7b\x91\xa4\x01\xa0\x88\xdc\xac\x70\xf3\x31\x30\xe0\xd0\xe3\x01\xd0\xe1\xc1\xd3\x9d\x71\xd7\x9d\xdb\x31\x6d\xb7\xb3\xd8\xf9\xab\xf9\x3f\x71\xfe\xeb\xc5\xa4\xf9\x71\x30\x7f\xfe\xef\xd9\xe2\xe2\xc9\xe0\xf5\x62\xfa\xf2\xeb\x11\x4a\xdb\x07\xb4\xfe\xb9\x15\xc3\xfd\x2c\x7e\x2b\xd8\x66\xa1\x10\xeb\x25\x9c\x19\x4f\x33\x38\xc6\xd2\xd2\x0c\xfe\xae\x42\x9d\xfc\x42\xa3\x91\xf2\xd5\xb8\x74\xdc\xd9\x24\xcc\x75\xac\xdf\x6e\x8e\x04\x91\x76\x9f\x69\xc4\xdd\x35\x1d\x3f\x42\xa2\x87\x51\x22\x7e\x80\x6c\x51\x72\xf0\x35\x19\x02\x5a\xf3\xec\x92\x36\x73\x53\x9a\xeb\x6a\x7f\xc7\xd7\xe6\x81\x06\xa3\x03\x1e\x3f\x27\xa8\xd6\xd0\xc3\x78\x1c\x69\xee\xa6\x9b\x75\x8c\xb8\x98\x1b\x6d\x6d\x37\x67\x5b\x28\xe5\x25\x41\x37\xf8\xc4\xe2\x90\x51\x8e\x61\x2a\x34\x99\x74\x06\xcd\x7a\x30\x48\x43\x8e\x0a\xb2\x5d\x80\xef\x2d\x2d\x7d\x09\x13\x4b\x04\xa9\xd2\x82\x36\xeb\xcc\x34\x56\x13\xcc\x64\x29\xdd\x3a\x7e\x94\xca\xb5\x5a\x96\xb2\x19\x53\xab\x5a\x1b\x87\x6a\xcb\x5f\x72\xfa\xe7\x2c\x20\x64\x41\x37\x20\x1d\x54\x3c\x64\x50\xf8\xbe\x30\x11\xca\x1e\x1e\x3e\xfd\xee\xd4\x67\x42\x57\x28\xd5\x71\xe5\xf6\xa7\x2f\x27\xbf\x78\x2c\xc3\xd7\x93\xbf\x61\x45\xc7\x95\x9b\x3e\x5e\xc7\x71\xf8\xec\x01\xa9\x3c\x39\x8f\x09\x7b\x31\x39\x9f\x37\xbf\x9e\xb4\x4b\xd3\x97\x93\x1f\xd3\x9d\xfb\xd3\x27\xac\xc3\x00\x06\x2e\xce\xe7\x3d\x06\xa4\x17\x4f\xa6\x2f\x07\x7b\xd3\x16\x11\x62\x2d\x5f\x80\x33\xbe\xf5\x99\x75\xda\x70\xdb\x78\x6b\xcd\x67\x5d\x48\xf4\x99\xd0\xc0\x07\xfc\xf6\xfb\xde\x7f\x02\x00\x00\xff\xff\xcc\xf4\xfc\x74\x3e\x1e\x00\x00") func operatorsCoreosCom_olmconfigsYamlBytes() ([]byte, error) { return bindataRead( @@ -165,7 +165,7 @@ func operatorsCoreosCom_olmconfigsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorconditionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x6d\x6f\x1c\xb7\xf1\x7f\xfd\xd7\xa7\x18\xdc\xbf\x40\x24\xf7\x1e\x2c\x27\x48\x93\x03\x0c\xc3\x70\xea\xc2\xb0\x15\x1b\x96\x9a\x17\x55\xd5\x7a\x76\x39\x77\xc7\x78\x97\xdc\xf0\xe1\xa4\x4b\xda\xef\x5e\x0c\xb9\x7b\xbb\xa7\xdb\x3d\xa9\xb5\xea\xa0\x2d\xf9\xc2\xd6\xed\x92\x43\x72\x1e\x7e\x9c\xf9\x81\x8b\x95\xfc\x81\x8c\x95\x5a\xcd\x01\x2b\x49\x37\x8e\x14\xff\xb2\xd3\x8f\xdf\xd8\xa9\xd4\xb3\xf5\xe9\xd1\x47\xa9\xc4\x1c\x5e\x78\xeb\x74\xf9\x9e\xac\xf6\x26\xa7\xef\x68\x21\x95\x74\x52\xab\xa3\x92\x1c\x0a\x74\x38\x3f\x02\x40\xa5\xb4\x43\x7e\x6c\xf9\x27\x40\xae\x95\x33\xba\x28\xc8\x4c\x96\xa4\xa6\x1f\x7d\x46\x99\x97\x85\x20\x13\x84\x37\x53\xaf\x1f\x4f\x4f\xbf\x9a\x3e\x3e\x02\x50\x58\xd2\x1c\x74\x45\x06\x9d\x36\xb9\x56\x22\xcc\x62\xa7\xcd\x23\x3b\xcd\xb5\x21\xcd\xff\x95\x47\xb6\xa2\x9c\x27\x5a\x1a\xed\xab\x76\xd8\x4e\x9f\x28\xb3\x59\x0f\x3a\x5a\x6a\x23\x9b\xdf\x00\x13\xd0\x45\x19\xfe\x8e\xfb\x7c\x5b\xcb\x78\xd1\x4c\x1d\xde\x15\xd2\xba\xd7\xfd\xef\xdf\x48\xeb\x42\x9f\xaa\xf0\x06\x8b\xbe\xc5\x87\xd7\x76\xa5\x8d\xfb\xbe\x5d\x0a\x4f\x9d\xef\x4c\x62\xa5\x5a\xfa\x02\x4d\x8f\x88\x23\x00\x9b\xeb\x8a\xe6\x10\x24\x54\x98\x93\x38\x02\xa8\x15\x58\x4b\x9c\xd4\xda\x5b\x9f\xd6\x13\xd8\x7c\x45\x25\x36\xd3\x01\x8b\x55\xcf\xdf\xbd\xfa\xe1\xcb\xf3\x5b\x2f\x00\x04\xd9\xdc\xc8\xca\x05\x73\xec\xed\x11\xa4\x05\xac\x5d\x00\x1a\x1f\x00\xbd\x00\xb7\xa9\x08\x3e\xec\xf5\xff\x00\xd7\x2b\x99\xaf\x78\x98\xb7\x24\xc0\x69\xde\xea\x9a\x36\x20\xd5\x42\x9b\x32\xb8\x08\x3f\x7d\xfb\xe6\x0c\x30\xd3\xde\x81\x5b\x11\x58\x87\x2e\x88\x45\xb5\x55\xc1\xb4\xb3\x48\x9e\x6d\x0e\x3a\xfb\x91\x72\xd7\x79\x6c\xe8\x27\x2f\x0d\x89\xee\x7e\x58\x1b\x8d\x67\x76\x1e\x57\x86\xe5\xba\x8e\xfd\x63\xeb\xc4\xc1\xce\xf3\x5b\x8a\xf9\xdb\xe4\xd6\x5b\x00\xd6\x67\x1c\x09\x82\x83\x82\x6c\xd8\x4a\x6d\x19\x12\xb5\x11\x82\xb2\x56\xd2\x82\xa1\xca\x90\x25\x15\xc3\xa4\xd9\x6c\xd8\xd2\x74\x4f\xf8\x39\x19\x16\xc4\xbe\xe3\x0b\x11\x75\x68\x1c\x18\xca\xf5\x52\xc9\x9f\xb7\xd2\x2d\xeb\x92\xa7\x2d\xd0\x91\x75\x20\x95\x23\xa3\xb0\x80\x35\x16\x9e\xc6\x80\x4a\xec\xc9\x2e\x71\x03\x86\x78\x5e\xf0\xaa\x23\x31\x0c\xb1\xfb\x6b\x39\xd3\x86\x82\xf9\xe6\xb0\x72\xae\xb2\xf3\xd9\x6c\x29\x5d\x83\x13\xb9\x2e\x4b\xaf\xa4\xdb\xcc\x42\xc8\xcb\xcc\x73\x1c\xce\x04\xad\xa9\x98\x59\xb9\x9c\xa0\xc9\x57\xd2\x51\xee\xbc\xa1\x19\x56\x72\x12\x36\xa3\x62\x70\x97\xe2\xff\x4d\xed\x55\xf6\xd6\xc4\xd1\xe6\xd6\x19\xa9\x96\x3b\xaf\x42\xb8\xfe\x93\xc6\xe2\x10\x8e\xbe\x1c\x05\xc6\xcd\xb6\x36\xe1\x47\xac\xc6\xf7\xbf\x3f\xbf\x80\x66\x45\xd1\x6e\xd1\x44\x6d\xd7\x1e\x0d\x35\xd6\x62\xcd\x4a\xb5\x20\x13\x47\x2e\x8c\x2e\x83\x54\x52\xa2\xd2\x52\x45\x5f\xcf\x0b\x49\xca\x81\xf5\x59\x29\x9d\x0d\x3e\x4c\xd6\xb1\x21\xf7\x05\xbf\x08\xb8\x0a\x19\x81\xaf\x04\x3a\x12\xfb\x5d\x5e\x29\x78\x81\x25\x15\x2f\xd0\xd2\x67\xb7\x1d\xdb\xc8\x4e\xd8\x20\xf7\xb6\x5e\xf7\xd4\xd8\x1f\xb0\x17\xe2\x00\x0d\xd4\x0f\x9a\x7b\x0f\x84\xce\x2b\xca\x01\x8b\x42\x5f\xb3\xc1\xf3\xc2\x5b\x47\x06\x50\x94\x52\x0d\x00\xd2\x61\x24\xaa\xf1\x6a\x0c\x95\x76\xbc\x79\x2c\x8a\x0d\xe8\x35\x19\x23\x05\x3b\x4e\x1c\x63\xa8\xd2\xc6\x91\x80\x6c\x13\x24\xf5\xe1\xd8\xc1\x8d\x0e\x83\x54\xdc\x72\x55\xe8\x4d\xc9\x0e\xb8\xff\xb2\x91\x8a\xc6\xe0\xa6\xe7\xad\x74\x54\xf6\x0e\x3b\x60\x28\x6e\xf5\x26\xfb\xd6\xf3\x09\x53\xde\x15\xac\xb1\xb5\x67\x10\x3b\x27\x4a\x65\x41\x90\x43\x59\x58\x58\x68\x03\x5a\x11\x20\xfb\x86\x8b\x08\x4b\x90\x7b\x63\x42\x64\x35\x26\x0c\x41\xf8\xfc\xdd\xab\xed\xc1\xb5\x1f\x1f\xb1\x4d\x26\x43\x8b\xb8\x60\x11\xd6\x19\x9f\x3b\x86\x0f\x86\x57\x25\x48\x84\x15\x08\x69\x02\x86\x5a\x5e\x08\xfb\x4b\x50\x05\x60\x74\xa4\x85\xa4\x42\x40\x85\x6e\x05\x53\x5e\x91\xe7\xa4\x64\x9b\xd4\x00\xbc\xd4\x06\xe8\x06\xcb\xaa\xa0\xf1\xd1\xd1\xc0\xf4\xff\x17\x8e\xd9\x97\x5a\x9f\x07\x09\xf5\x4a\x7e\x19\xea\xcd\xff\xcc\x66\xf0\x7e\x0b\x55\xd1\x11\x33\x4b\x66\x1d\x93\xb3\xe0\xd9\xb0\xd0\xfa\x0b\xbb\xab\xaf\x21\xd5\x34\x32\x5f\x2b\x7d\xad\xfa\x76\x12\x56\x88\x86\xe6\x30\x7a\xbe\x46\x59\x60\x56\xd0\x68\x0c\xa3\x77\x46\x2f\x0d\x59\x4e\x6d\x46\xe1\x1c\x82\xd1\x77\xb4\x34\x28\x48\x8c\xee\x98\xeb\xb7\x15\xba\x7c\x75\x46\x66\x49\xaf\x69\xf3\x94\x67\xb8\xd7\x88\x73\x67\x38\xcb\xdb\x3c\x2d\x79\xe8\x5d\x43\x38\xb3\xbb\xd8\x54\xf4\xb4\xc4\xea\x3e\x7d\xcf\xb0\xba\xcf\x6a\xb6\x6e\x6b\xe1\xf2\x8a\xc1\x6e\x7d\x3a\x6d\x5d\xf9\xc3\x8f\x56\xab\xf9\xa8\xd5\xdf\x58\x97\x1c\x29\x95\xdb\x8c\x60\x67\x13\xf3\x51\xd8\x45\xfd\xb4\x51\xc6\x7c\xc4\xf3\x8f\x18\x29\x9c\xce\xfc\x62\x3e\xca\x36\x8e\xec\xf8\x74\x6c\xa8\x1a\x73\x16\xf8\xb4\x95\x3d\xfa\x30\xec\x58\xf5\xce\xb4\x5b\x91\x89\xbe\x7a\x1b\xc1\xb7\x5d\xff\x7e\x00\x37\x7a\x61\x2c\xb6\xfe\xe4\xac\x6d\x9c\xa6\x59\x8b\x83\x86\x9a\x80\x21\xb4\x75\x86\xdc\xf7\x3a\xfa\xe2\xe0\xeb\x41\x43\x1d\x42\xd9\xd8\x0a\xb4\xee\xc2\xa0\xb2\x41\x8f\x17\xb2\xa4\xa1\x9e\xf7\x05\xb3\x7e\xa9\x0c\x29\x31\x79\xb3\x0e\x1c\x3f\x08\x38\xb6\xf5\x16\xb7\xed\xcd\x90\xc3\xd9\x04\xa3\x5e\xdc\x37\x1f\x4a\xa8\x82\xfd\x86\x62\x17\xb6\x00\x16\xb3\xc8\x8c\xe0\x7a\x45\x2a\x4c\xe2\x95\x20\x53\x6c\xf8\xf8\x6a\xe7\xcb\x57\xa8\x96\x24\xa6\x00\xaf\x18\x3d\x31\x60\x1e\x27\x20\x1f\x39\xfa\xc7\x3c\x50\x81\xb7\x4d\xb2\x14\x56\xbc\x95\xc8\x40\x1b\x41\xaf\x16\x13\xf2\xad\x3c\xa7\xca\x31\x26\x0c\x2f\xf2\xe0\x09\xd4\xb4\x78\x56\xcf\x81\xb3\xa0\x09\x4f\x3c\xd0\xb3\xf6\xa9\x87\xb0\x57\x2d\x2a\xa6\x8d\x2b\x5f\xa2\x62\x8f\x14\xbc\x99\xf6\x9d\x12\x32\xc7\x90\x3e\x36\x87\x53\x9b\x4b\xb4\xe6\xbb\xd3\x42\x9c\x39\x66\xc4\x87\x48\xc0\x82\x5a\x1b\x9f\xa8\xb3\x12\x6f\xde\x90\x5a\xba\xd5\x1c\xbe\x7c\xf2\xbb\xaf\xbf\x19\xe8\x18\xcf\x07\x12\x7f\x20\xc5\x19\x4b\x4f\x29\xf4\xaf\x68\x6f\x5f\x6a\x27\x85\x0e\xea\x99\x36\xa9\xe0\x74\xd9\xf6\x09\x5e\xb7\x1b\x05\xd7\x68\xc1\x92\x83\x0c\xb9\xa2\xf4\xd5\x61\x75\xf2\xb9\x2a\x95\x75\xa8\x72\x1a\x83\x5c\xf4\x4f\x23\xb7\xc7\x5f\xb1\x81\xd3\x27\x63\xc8\x6a\x9b\xed\x9f\x70\x97\x37\x57\xd3\x9e\xcd\x48\x0b\xdf\x8e\x6f\xad\x94\xab\x05\x1f\xf2\x11\x76\xd3\x03\x8b\xbc\x96\x6e\xc5\x65\x46\x48\x5f\xea\x0a\xae\x27\x7d\xa1\xed\x4e\xee\xf2\x04\x4e\x4c\x96\x64\xee\x0c\x1f\xa9\xdc\xd7\x5f\x0d\x3b\x8c\x54\xb2\xf4\xe5\x1c\x1e\x0f\x74\x89\x88\xfc\x10\xee\x11\x25\xb5\xa9\x1d\x32\x2c\x2f\x0d\x96\x9c\x91\xe7\x20\x05\x27\xda\x0b\x49\xa6\x1b\x62\xac\x91\x7a\x20\x27\x60\x3b\xca\xff\xc2\xd6\x30\x7a\xaf\xa0\x7b\x67\xb4\xf0\x39\xd7\x6c\x7a\x11\x2a\x0c\xb9\x90\x79\x17\x79\xb9\xb0\x09\x51\x19\x6b\x7b\xa0\x1b\xb6\xd5\xb6\x4a\x0e\x09\x4d\x49\xa8\xa4\x5a\xda\x7a\x31\x5c\xf1\x31\xfe\x8d\x0f\xcc\xcb\xc3\xae\x57\x14\x4e\xdd\xc0\x16\xd4\xd2\x4c\xd8\x89\x95\x82\x0c\x09\x40\x58\x7a\x34\xa8\x1c\x91\x60\x5c\x3d\x0c\x1f\xb5\x94\x0e\xca\x63\x5b\x12\xde\x89\x24\x35\x00\x45\xe4\xe6\x0d\xd7\x05\x67\xc0\xa1\x87\x03\xa0\xd3\xc7\x4f\x0e\xfa\xdd\xb6\xdf\x60\xa7\x0a\x9d\x23\xa3\xe6\xf0\x97\xcb\xe7\x93\x3f\xe1\xe4\xe7\xab\xe3\xfa\x8f\xc7\x93\x6f\xff\x3a\x9e\x5f\x3d\xea\xfc\xbc\x3a\x79\xf6\x9b\x01\x49\x31\xc0\xef\xe9\xc3\xf5\x59\xdb\x54\x18\x8d\x7f\x8c\xc3\x41\xac\x17\x70\x61\x3c\x8d\xe1\x25\x16\x96\xc6\xf0\x47\x15\xce\xc9\x4f\x54\x1a\x29\x5f\x0e\xaf\x8e\x33\x9b\x11\xcf\x3a\x94\x44\xd7\x5d\xc2\x92\x0e\xf7\xa9\x97\x3b\xd0\x27\xac\xf5\x01\x02\x3d\xd4\x07\x7a\xd1\x45\xc9\x0e\x63\x01\x01\xad\xb9\x20\x99\xd6\xc5\xd0\x34\xd7\xe5\xec\x00\xa3\xd1\xd9\xc1\x60\xd5\xc6\xed\x0c\xd5\x06\x5a\x18\x8f\x75\xca\xed\x70\xb3\x5c\xcf\x03\xe6\x46\x5b\xbb\xa5\x7d\x2c\x14\xf2\x23\xc1\xb6\x9a\x89\x87\x43\x46\x39\x86\x52\xcf\x64\xd2\x19\x34\x9b\x76\x47\x16\x72\x54\x90\x1d\x02\x7c\x6f\x69\xe1\x0b\x38\xb6\x44\x30\x55\x5a\xd0\xfe\x39\x73\x12\x4f\x13\xcc\x64\x21\xdd\x86\x4f\x05\x41\xb9\x56\x8b\x42\xd6\xb5\x67\x59\x69\xe3\x50\xf5\xb0\x85\x6d\xbb\x08\x08\xb9\xa4\x1b\x90\x0e\x4a\xae\x1c\xc8\xf2\xe0\x63\xa1\xec\xe9\xe9\x93\x2f\xcf\x7d\x26\x74\x89\x52\xbd\x2c\xdd\xec\xe4\xd9\xf1\x4f\x1e\x0b\x86\x59\xf1\x3d\x96\xf4\xb2\x74\x27\x0f\x97\x71\x9c\x7e\x7d\x8f\x50\x3e\xbe\x8c\x01\x7b\x75\x7c\x39\xa9\xff\x7a\xd4\x3c\x3a\x79\x76\xfc\xe7\xe9\xc1\xf7\x27\x8f\x78\x0f\x1d\x18\xb8\xba\x9c\xb4\x18\x30\xbd\x7a\x74\xf2\xac\xf3\xee\x64\x1f\x11\xf8\x54\x97\x39\x3d\xcf\x73\xed\x3f\x1b\xb1\xd2\x0f\x40\x77\x45\xd4\x3e\xcb\x15\xa1\xa9\xe1\xb9\x76\xe9\xaa\x1e\x8e\x4b\x3a\x5b\xe7\x16\x91\xce\x9a\x06\x67\xa9\x01\x8e\x81\xdf\x19\x94\x45\xf4\xc1\xdc\x79\x2c\xf6\xb5\xb5\xe5\xc6\xc0\x6e\xac\xa3\xf2\x81\xa8\xad\x36\x06\x12\xcd\x94\x68\xa6\x44\x33\x25\x9a\xa9\x6d\x0f\x40\x33\xed\xf3\x2e\x89\x91\x1a\x92\x9a\x18\x29\x48\x8c\x54\x62\xa4\x12\x23\x95\x18\xa9\xc4\x48\x25\x46\x2a\x31\x52\x90\x18\xa9\xc4\x48\x25\x46\xea\xdf\xcc\x48\xc5\xb3\x7c\x0e\xce\xf8\xc6\x66\xd6\x69\xc3\x69\x23\x2c\x38\x6e\x9a\x87\x3e\xdb\xfa\x44\x1b\x0a\x35\x7e\xc0\x2f\xb1\x84\xda\xde\x06\x7d\xd2\x8c\x4a\xb7\x41\xd3\x6d\xd0\x74\x1b\xb4\x6d\xe9\x36\xe8\x7f\xef\x6d\xd0\x7b\x51\xe7\xdd\x0b\xa2\xbb\xc4\x79\xbc\xc5\xb9\x43\x94\x87\x14\xb9\x32\x7a\x2d\xc5\x9e\x5b\xc2\xad\xeb\xa5\xa1\x8c\xba\x75\x68\x96\xa8\x7c\xf7\xca\x28\x7d\x9e\x0b\xa3\x89\x55\x4f\xac\x3a\x24\x56\x3d\xb1\xea\x3d\x2d\xb1\xea\xa1\x25\x56\x3d\xb1\xea\x89\x55\xff\x34\xed\x25\x56\x3d\xb1\xea\x89\x55\xbf\xdd\x12\xab\xde\xdb\x2f\xb1\xea\x6d\x4b\xac\x7a\x62\xd5\x13\xab\xfe\x79\xee\x79\xa6\x8f\x67\x13\xff\x92\xf8\x97\x83\x23\x12\xff\xf2\x9f\xc5\xbf\x24\x52\x25\x91\x2a\x89\x54\x49\xa4\x4a\x22\x55\x12\xa9\x92\x48\x95\x44\xaa\x24\x52\x05\x12\xa9\x92\x48\x95\x44\xaa\xfc\xcf\x7f\x3c\x7b\xc7\x97\xb2\x6f\xdf\x9c\x75\x2e\x22\xc6\x0b\x8a\x1d\x6f\x5c\xe1\x9a\x20\x23\x52\xdb\x24\x2c\xdd\xc7\x49\x7c\x50\xe2\x83\x0e\x0f\x49\x7c\xd0\xaf\xcd\x07\xa5\xfb\x38\x43\x2d\x51\x47\xfd\x2d\x51\x47\x89\x3a\x4a\xd4\x51\xa2\x8e\x12\x75\x94\xa8\xa3\x44\x1d\x25\xea\x28\x51\x47\x89\x3a\xfa\xd5\xbe\x72\xed\x3e\xbb\xeb\x23\xd7\x7f\x04\x00\x00\xff\xff\xee\x7a\x89\xe5\xbc\x66\x00\x00") +var _operatorsCoreosCom_operatorconditionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x6d\x6f\xdc\xb8\xf1\x7f\xfd\xf7\xa7\x18\xec\xbf\xc0\xd9\xe9\x3e\xc4\xb9\xf6\x7a\xb7\x40\x10\x04\xb9\xa6\x08\x12\x5f\x82\xd8\xbd\x17\x75\xdd\x66\x24\xce\xee\xf2\x22\x91\x3a\x3e\xac\xbd\x77\xed\x77\x2f\x86\x94\x56\x5a\xaf\xb4\x76\x1b\x37\x87\xb6\xe4\x8b\xc4\x2b\x91\x43\x72\x1e\x7e\x9c\xf9\x81\xc2\x4a\x7e\x4f\xc6\x4a\xad\xe6\x80\x95\xa4\x1b\x47\x8a\x7f\xd9\xe9\xc7\xaf\xed\x54\xea\xd9\xfa\xf4\xe8\xa3\x54\x62\x0e\x2f\xbc\x75\xba\x7c\x4f\x56\x7b\x93\xd3\xb7\xb4\x90\x4a\x3a\xa9\xd5\x51\x49\x0e\x05\x3a\x9c\x1f\x01\xa0\x52\xda\x21\x3f\xb6\xfc\x13\x20\xd7\xca\x19\x5d\x14\x64\x26\x4b\x52\xd3\x8f\x3e\xa3\xcc\xcb\x42\x90\x09\xc2\x9b\xa9\xd7\x8f\xa7\xa7\xbf\x9d\x3e\x3e\x02\x50\x58\xd2\x1c\x74\x45\x06\x9d\x36\xb9\x56\x22\xcc\x62\xa7\xcd\x23\x3b\xcd\xb5\x21\xcd\xff\x95\x47\xb6\xa2\x9c\x27\x5a\x1a\xed\xab\x76\xd8\x4e\x9f\x28\xb3\x59\x0f\x3a\x5a\x6a\x23\x9b\xdf\x00\x13\xd0\x45\x19\xfe\x8e\xfb\x7c\x5b\xcb\x78\xd1\x4c\x1d\xde\x15\xd2\xba\xd7\xfd\xef\xdf\x48\xeb\x42\x9f\xaa\xf0\x06\x8b\xbe\xc5\x87\xd7\x76\xa5\x8d\xfb\xae\x5d\x0a\x4f\x9d\xef\x4c\x62\xa5\x5a\xfa\x02\x4d\x8f\x88\x23\x00\x9b\xeb\x8a\xe6\x10\x24\x54\x98\x93\x38\x02\xa8\x15\x58\x4b\x9c\xd4\xda\x5b\x9f\xd6\x13\xd8\x7c\x45\x25\x36\xd3\x01\x8b\x55\xcf\xdf\xbd\xfa\xfe\xcb\xf3\x5b\x2f\x00\x04\xd9\xdc\xc8\xca\x05\x73\xec\xed\x11\xa4\x05\xac\x5d\x00\x1a\x1f\x00\xbd\x00\xb7\xa9\x08\x3e\xec\xf5\xff\x00\xd7\x2b\x99\xaf\x78\x98\xb7\x24\xc0\x69\xde\xea\x9a\x36\x20\xd5\x42\x9b\x32\xb8\x08\x3f\x7d\xfb\xe6\x0c\x30\xd3\xde\x81\x5b\x11\x58\x87\x2e\x88\x45\xb5\x55\xc1\xb4\xb3\x48\x9e\x6d\x0e\x3a\xfb\x81\x72\xd7\x79\x6c\xe8\x47\x2f\x0d\x89\xee\x7e\x58\x1b\x8d\x67\x76\x1e\x57\x86\xe5\xba\x8e\xfd\x63\xeb\xc4\xc1\xce\xf3\x5b\x8a\xf9\xdb\xe4\xd6\x5b\x00\xd6\x67\x1c\x09\x82\x83\x82\x6c\xd8\x4a\x6d\x19\x12\xb5\x11\x82\xb2\x56\xd2\x82\xa1\xca\x90\x25\x15\xc3\xa4\xd9\x6c\xd8\xd2\x74\x4f\xf8\x39\x19\x16\xc4\xbe\xe3\x0b\x11\x75\x68\x1c\x18\xca\xf5\x52\xc9\x9f\xb6\xd2\x2d\xeb\x92\xa7\x2d\xd0\x91\x75\x20\x95\x23\xa3\xb0\x80\x35\x16\x9e\xc6\x80\x4a\xec\xc9\x2e\x71\x03\x86\x78\x5e\xf0\xaa\x23\x31\x0c\xb1\xfb\x6b\x39\xd3\x86\x82\xf9\xe6\xb0\x72\xae\xb2\xf3\xd9\x6c\x29\x5d\x83\x13\xb9\x2e\x4b\xaf\xa4\xdb\xcc\x42\xc8\xcb\xcc\x73\x1c\xce\x04\xad\xa9\x98\x59\xb9\x9c\xa0\xc9\x57\xd2\x51\xee\xbc\xa1\x19\x56\x72\x12\x36\xa3\x62\x70\x97\xe2\xff\x4d\xed\x55\xf6\xd6\xc4\xd1\xe6\xd6\x19\xa9\x96\x3b\xaf\x42\xb8\xfe\x93\xc6\xe2\x10\x8e\xbe\x1c\x05\xc6\xcd\xb6\x36\xe1\x47\xac\xc6\xf7\xbf\x3f\xbf\x80\x66\x45\xd1\x6e\xd1\x44\x6d\xd7\x1e\x0d\x35\xd6\x62\xcd\x4a\xb5\x20\x13\x47\x2e\x8c\x2e\x83\x54\x52\xa2\xd2\x52\x45\x5f\xcf\x0b\x49\xca\x81\xf5\x59\x29\x9d\x0d\x3e\x4c\xd6\xb1\x21\xf7\x05\xbf\x08\xb8\x0a\x19\x81\xaf\x04\x3a\x12\xfb\x5d\x5e\x29\x78\x81\x25\x15\x2f\xd0\xd2\x67\xb7\x1d\xdb\xc8\x4e\xd8\x20\xf7\xb6\x5e\xf7\xd4\xd8\x1f\xb0\x17\xe2\x00\x0d\xd4\x0f\x9a\x7b\x0f\x84\xce\x2b\xca\x01\x8b\x42\x5f\xb3\xc1\xf3\xc2\x5b\x47\x06\x50\x94\x52\x0d\x00\xd2\x61\x24\xaa\xf1\x6a\x0c\x95\x76\xbc\x79\x2c\x8a\x0d\xe8\x35\x19\x23\x05\x3b\x4e\x1c\x63\xa8\xd2\xc6\x91\x80\x6c\x13\x24\xf5\xe1\xd8\xc1\x8d\x0e\x83\x54\xdc\x72\x55\xe8\x4d\xc9\x0e\xb8\xff\xb2\x91\x8a\xc6\xe0\xa6\xe7\xad\x74\x54\xf6\x0e\x3b\x60\x28\x6e\xf5\x26\xfb\xd6\xf3\x09\x53\xde\x15\xac\xb1\xb5\x67\x10\x3b\x27\x4a\x65\x41\x90\x43\x59\x58\x58\x68\x03\x5a\x11\x20\xfb\x86\x8b\x08\x4b\x90\x7b\x63\x42\x64\x35\x26\x0c\x41\xf8\xfc\xdd\xab\xed\xc1\xb5\x1f\x1f\xb1\x4d\x26\x43\x8b\xb8\x60\x11\xd6\x19\x9f\x3b\x86\x0f\x86\x57\x25\x48\x84\x15\x08\x69\x02\x86\x5a\x5e\x08\xfb\x4b\x50\x05\x60\x74\xa4\x85\xa4\x42\x40\x85\x6e\x05\x53\x5e\x91\xe7\xa4\x64\x9b\xd4\x00\xbc\xd4\x06\xe8\x06\xcb\xaa\xa0\xf1\xd1\xd1\xc0\xf4\xff\x17\x8e\xd9\x97\x5a\x9f\x07\x09\xf5\x4a\x7e\x1e\xea\xcd\xff\xcc\x66\xf0\x7e\x0b\x55\xd1\x11\x33\x4b\x66\x1d\x93\xb3\xe0\xd9\xb0\xd0\xfa\x0b\xbb\xab\xaf\x21\xd5\x34\x32\x5f\x2b\x7d\xad\xfa\x76\x12\x56\x88\x86\xe6\x30\x7a\xbe\x46\x59\x60\x56\xd0\x68\x0c\xa3\x77\x46\x2f\x0d\x59\x4e\x6d\x46\xe1\x1c\x82\xd1\xb7\xb4\x34\x28\x48\x8c\xee\x98\xeb\xd7\x15\xba\x7c\x75\x46\x66\x49\xaf\x69\xf3\x94\x67\xb8\xd7\x88\x73\x67\x38\xcb\xdb\x3c\x2d\x79\xe8\x5d\x43\x38\xb3\xbb\xd8\x54\xf4\xb4\xc4\xea\x3e\x7d\xcf\xb0\xba\xcf\x6a\xb6\x6e\x6b\xe1\xf2\x8a\xc1\x6e\x7d\x3a\x6d\x5d\xf9\xc3\x0f\x56\xab\xf9\xa8\xd5\xdf\x58\x97\x1c\x29\x95\xdb\x8c\x60\x67\x13\xf3\x51\xd8\x45\xfd\xb4\x51\xc6\x7c\xc4\xf3\x8f\x18\x29\x9c\xce\xfc\x62\x3e\xca\x36\x8e\xec\xf8\x74\x6c\xa8\x1a\x73\x16\xf8\xb4\x95\x3d\xfa\x30\xec\x58\xf5\xce\xb4\x5b\x91\x89\xbe\x7a\x1b\xc1\xb7\x5d\xff\x7e\x00\x37\x7a\x61\x2c\xb6\xfe\xe4\xac\x6d\x9c\xa6\x59\x8b\x83\x86\x9a\x80\x21\xb4\x75\x86\xdc\xf7\x3a\xfa\xe2\xe0\xeb\x41\x43\x1d\x42\xd9\xd8\x0a\xb4\xee\xc2\xa0\xb2\x41\x8f\x17\xb2\xa4\xa1\x9e\xf7\x05\xb3\x7e\xa9\x0c\x29\x31\x79\xb3\x0e\x1c\x3f\x08\x38\xb6\xf5\x16\xb7\xed\xcd\x90\xc3\xd9\x04\xa3\x5e\xdc\x37\x1f\x4a\xa8\x82\xfd\x86\x62\x17\xb6\x00\x16\xb3\xc8\x8c\xe0\x7a\x45\x2a\x4c\xe2\x95\x20\x53\x6c\xf8\xf8\x6a\xe7\xcb\x57\xa8\x96\x24\xa6\x00\xaf\x18\x3d\x31\x60\x1e\x27\x20\x1f\x39\xfa\xc7\x3c\x50\x81\xb7\x4d\xb2\x14\x56\xbc\x95\xc8\x40\x1b\x41\xaf\x16\x13\xf2\xad\x3c\xa7\xca\x31\x26\x0c\x2f\xf2\xe0\x09\xd4\xb4\x78\x56\xcf\x81\xb3\xa0\x09\x4f\x3c\xd0\xb3\xf6\xa9\x87\xb0\x57\x2d\x2a\xa6\x8d\x2b\x5f\xa2\x62\x8f\x14\xbc\x99\xf6\x9d\x12\x32\xc7\x90\x3e\x36\x87\x53\x9b\x4b\xb4\xe6\xbb\xd3\x42\x9c\x39\x66\xc4\x87\x48\xc0\x82\x5a\x1b\x9f\xa8\xb3\x12\x6f\xde\x90\x5a\xba\xd5\x1c\xbe\x7c\xf2\xbb\xaf\xbe\x1e\xe8\x18\xcf\x07\x12\x7f\x20\xc5\x19\x4b\x4f\x29\xf4\xaf\x68\x6f\x5f\x6a\x27\x85\x0e\xea\x99\x36\xa9\xe0\x74\xd9\xf6\x09\x5e\xb7\x1b\x05\xd7\x68\xc1\x92\x83\x0c\xb9\xa2\xf4\xd5\x61\x75\xf2\xb9\x2a\x95\x75\xa8\x72\x1a\x83\x5c\xf4\x4f\x23\xb7\xc7\x5f\xb1\x81\xd3\x27\x63\xc8\x6a\x9b\xed\x9f\x70\x97\x37\x57\xd3\x9e\xcd\x48\x0b\xdf\x8c\x6f\xad\x94\xab\x05\x1f\xf2\x11\x76\xd3\x03\x8b\xbc\x96\x6e\xc5\x65\x46\x48\x5f\xea\x0a\xae\x27\x7d\xa1\xed\x4e\xee\xf2\x04\x4e\x4c\x96\x64\xee\x0c\x1f\xa9\xdc\x57\xbf\x19\x76\x18\xa9\x64\xe9\xcb\x39\x3c\x1e\xe8\x12\x11\xf9\x21\xdc\x23\x4a\x6a\x53\x3b\x64\x58\x5e\x1a\x2c\x39\x23\xcf\x41\x0a\x4e\xb4\x17\x92\x4c\x37\xc4\x58\x23\xf5\x40\x4e\xc0\x76\x94\xff\x85\xad\x61\xf4\x5e\x41\xf7\xce\x68\xe1\x73\xae\xd9\xf4\x22\x54\x18\x72\x21\xf3\x2e\xf2\x72\x61\x13\xa2\x32\xd6\xf6\x40\x37\x6c\xab\x6d\x95\x1c\x12\x9a\x92\x50\x49\xb5\xb4\xf5\x62\xb8\xe2\x63\xfc\x1b\x1f\x98\x97\x87\x5d\xaf\x28\x9c\xba\x81\x2d\xa8\xa5\x99\xb0\x13\x2b\x05\x19\x12\x80\xb0\xf4\x68\x50\x39\x22\xc1\xb8\x7a\x18\x3e\x6a\x29\x1d\x94\xc7\xb6\x24\xbc\x13\x49\x6a\x00\x8a\xc8\xcd\x1b\xae\x0b\xce\x80\x43\x0f\x07\x40\xa7\x8f\x9f\x1c\xf4\xbb\x6d\xbf\xc1\x4e\x15\x3a\x47\x46\xcd\xe1\x2f\x97\xcf\x27\x7f\xc2\xc9\x4f\x57\xc7\xf5\x1f\x8f\x27\xdf\xfc\x75\x3c\xbf\x7a\xd4\xf9\x79\x75\xf2\xec\x57\x03\x92\x62\x80\xdf\xd3\x87\xeb\xb3\xb6\xa9\x30\x1a\xff\x18\x87\x83\x58\x2f\xe0\xc2\x78\x1a\xc3\x4b\x2c\x2c\x8d\xe1\x8f\x2a\x9c\x93\x9f\xa8\x34\x52\xbe\x1c\x5e\x1d\x67\x36\x23\x9e\x75\x28\x89\xae\xbb\x84\x25\x1d\xee\x53\x2f\x77\xa0\x4f\x58\xeb\x03\x04\x7a\xa8\x0f\xf4\xa2\x8b\x92\x1d\xc6\x02\x02\x5a\x73\x41\x32\xad\x8b\xa1\x69\xae\xcb\xd9\x01\x46\xa3\xb3\x83\xc1\xaa\x8d\xdb\x19\xaa\x0d\xb4\x30\x1e\xeb\x94\xdb\xe1\x66\xb9\x9e\x07\xcc\x8d\xb6\x76\x4b\xfb\x58\x28\xe4\x47\x82\x6d\x35\x13\x0f\x87\x8c\x72\x0c\xa5\x9e\xc9\xa4\x33\x68\x36\xed\x8e\x2c\xe4\xa8\x20\x3b\x04\xf8\xde\xd2\xc2\x17\x70\x6c\x89\x60\xaa\xb4\xa0\xfd\x73\xe6\x24\x9e\x26\x98\xc9\x42\xba\x0d\x9f\x0a\x82\x72\xad\x16\x85\xac\x6b\xcf\xb2\xd2\xc6\xa1\xea\x61\x0b\xdb\x76\x11\x10\x72\x49\x37\x20\x1d\x94\x5c\x39\x90\xe5\xc1\xc7\x42\xd9\xd3\xd3\x27\x5f\x9e\xfb\x4c\xe8\x12\xa5\x7a\x59\xba\xd9\xc9\xb3\xe3\x1f\x3d\x16\x0c\xb3\xe2\x3b\x2c\xe9\x65\xe9\x4e\x1e\x2e\xe3\x38\xfd\xea\x1e\xa1\x7c\x7c\x19\x03\xf6\xea\xf8\x72\x52\xff\xf5\xa8\x79\x74\xf2\xec\xf8\xcf\xd3\x83\xef\x4f\x1e\xf1\x1e\x3a\x30\x70\x75\x39\x69\x31\x60\x7a\xf5\xe8\xe4\x59\xe7\xdd\xc9\x3e\x22\xf0\xa9\x2e\x73\x7a\x9e\xe7\xda\x7f\x36\x62\xa5\x1f\x80\xee\x8a\xa8\x7d\x96\x2b\x42\x53\xc3\x73\xed\xd2\x55\x3d\x1c\x97\x74\xb6\xce\x2d\x22\x9d\x35\x0d\xce\x52\x03\x1c\x03\xbf\x33\x28\x8b\xe8\x83\xb9\xf3\x58\xec\x6b\x6b\xcb\x8d\x81\xdd\x58\x47\xe5\x03\x51\x5b\x6d\x0c\x24\x9a\x29\xd1\x4c\x89\x66\x4a\x34\x53\xdb\x1e\x80\x66\xda\xe7\x5d\x12\x23\x35\x24\x35\x31\x52\x90\x18\xa9\xc4\x48\x25\x46\x2a\x31\x52\x89\x91\x4a\x8c\x54\x62\xa4\x20\x31\x52\x89\x91\x4a\x8c\xd4\xbf\x99\x91\x8a\x67\xf9\x1c\x9c\xf1\x8d\xcd\xac\xd3\x86\xd3\x46\x58\x70\xdc\x34\x0f\x7d\xb6\xf5\x89\x36\x14\x6a\xfc\x80\x9f\x63\x09\xb5\xbd\x0d\xfa\xa4\x19\x95\x6e\x83\xa6\xdb\xa0\xe9\x36\x68\xdb\xd2\x6d\xd0\xff\xde\xdb\xa0\xf7\xa2\xce\xbb\x17\x44\x77\x89\xf3\x78\x8b\x73\x87\x28\x0f\x29\x72\x65\xf4\x5a\x8a\x3d\xb7\x84\x5b\xd7\x4b\x43\x19\x75\xeb\xd0\x2c\x51\xf9\xee\x95\x51\xfa\x3c\x17\x46\x13\xab\x9e\x58\x75\x48\xac\x7a\x62\xd5\x7b\x5a\x62\xd5\x43\x4b\xac\x7a\x62\xd5\x13\xab\xfe\x69\xda\x4b\xac\x7a\x62\xd5\x13\xab\x7e\xbb\x25\x56\xbd\xb7\x5f\x62\xd5\xdb\x96\x58\xf5\xc4\xaa\x27\x56\xfd\xf3\xdc\xf3\x4c\x1f\xcf\x26\xfe\x25\xf1\x2f\x07\x47\x24\xfe\xe5\x3f\x8b\x7f\x49\xa4\x4a\x22\x55\x12\xa9\x92\x48\x95\x44\xaa\x24\x52\x25\x91\x2a\x89\x54\x49\xa4\x0a\x24\x52\x25\x91\x2a\x89\x54\xf9\x9f\xff\x78\xf6\x8e\x2f\x65\xdf\xbe\x39\xeb\x5c\x44\x8c\x17\x14\x3b\xde\xb8\xc2\x35\x41\x46\xa4\xb6\x49\x58\xba\x8f\x93\xf8\xa0\xc4\x07\x1d\x1e\x92\xf8\xa0\x5f\x9a\x0f\x4a\xf7\x71\x86\x5a\xa2\x8e\xfa\x5b\xa2\x8e\x12\x75\x94\xa8\xa3\x44\x1d\x25\xea\x28\x51\x47\x89\x3a\x4a\xd4\x51\xa2\x8e\x12\x75\xf4\x8b\x7d\xe5\xda\x7d\x76\xd7\x47\xae\xff\x08\x00\x00\xff\xff\xc2\x71\x78\x33\xbc\x66\x00\x00") func operatorsCoreosCom_operatorconditionsYamlBytes() ([]byte, error) { return bindataRead( @@ -185,7 +185,7 @@ func operatorsCoreosCom_operatorconditionsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorgroupsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7b\x7b\x6f\x1b\x39\x92\xf8\xdf\x9b\x4f\x51\xd0\xfe\x80\xb1\xe7\xa7\x47\x9c\x59\xcc\xed\x0a\x18\x0c\x8c\x64\x32\xf0\x4d\xe2\x18\xb1\x33\x07\x5c\xce\x77\x4b\x75\x57\x4b\x5c\x77\x93\xbd\x24\x5b\xb2\x76\x6e\xbe\xfb\xa1\x8a\xec\x97\xd4\xdd\x52\x12\xef\xce\xdd\x42\xfc\x23\xb1\x9a\xec\x62\xb1\xde\x0f\xb6\xc8\xe5\xcf\x68\xac\xd4\x6a\x0e\x22\x97\xf8\xe8\x50\xd1\x2f\x3b\x7d\xf8\xa3\x9d\x4a\x3d\x5b\x5f\x3c\x7b\x90\x2a\x9e\xc3\xcb\xc2\x3a\x9d\xbd\x47\xab\x0b\x13\xe1\x2b\x4c\xa4\x92\x4e\x6a\xf5\x2c\x43\x27\x62\xe1\xc4\xfc\x19\x80\x50\x4a\x3b\x41\x8f\x2d\xfd\x04\x88\xb4\x72\x46\xa7\x29\x9a\xc9\x12\xd5\xf4\xa1\x58\xe0\xa2\x90\x69\x8c\x86\x81\x97\x5b\xaf\x9f\x4f\x2f\xfe\x30\x7d\xfe\x0c\x40\x89\x0c\xe7\xa0\x73\x34\xc2\x69\xb3\x34\xba\xc8\xed\xb4\xfc\x69\xa7\x91\x36\xa8\xe9\xbf\xec\x99\xcd\x31\xa2\x4d\x78\x4d\xfd\x4a\x6b\x8d\x87\x57\xe2\x22\x1c\x2e\xb5\x91\xe5\x6f\x80\x09\xe8\x34\xe3\xbf\xfd\x19\xdf\x05\x18\x3f\x12\x48\x7e\x9e\x4a\xeb\x7e\xda\x9f\x7b\x23\xad\xe3\xf9\x3c\x2d\x8c\x48\x77\x11\xe6\x29\xbb\xd2\xc6\x5d\xd7\xdb\xf3\x76\x4b\x3f\x25\xd5\xb2\x48\x85\xd9\x79\xef\x19\x80\x8d\x74\x8e\x73\xe0\xd7\x72\x11\x61\xfc\x0c\x20\x50\x29\x80\x99\x04\x12\xad\x2f\x02\x54\x1b\xad\x30\x13\xe5\x1e\x40\x20\xd5\xe5\xcd\xd5\xcf\xdf\xdc\xee\x4c\x00\xc4\x68\x23\x23\x73\xc7\x34\xff\xef\x49\x63\x06\xda\xe7\x03\x69\xc1\xad\x10\x0a\x25\x1d\xe8\x04\xb2\x22\x75\xd2\xa1\x12\x2a\xda\x42\xa2\x0d\xbc\x7b\xf3\x16\x32\xa1\xc4\x12\xe3\x06\xe5\x5b\x00\xaf\x1c\x71\xdf\x3a\x23\xa4\xf2\xd0\xa4\xb2\x4e\xa4\x29\xcb\x07\x41\xad\x5e\x04\xa9\x40\x3a\xeb\x99\x45\xc7\x06\xa7\x41\x00\x71\x58\x26\x12\x63\xb0\xc8\x68\x38\x61\x96\xe8\xea\x65\xad\x1d\xdd\x96\x28\xa7\x17\x7f\xc1\xc8\x35\x1e\x1b\xfc\x6b\x21\x0d\xc6\xf3\x16\x72\x13\x28\xc5\xb6\xf1\x38\x37\x84\x91\x6b\x08\x88\x1f\x0d\x25\x69\x3d\x1f\x26\x28\x0d\xe2\x83\x7f\x13\x62\xd2\x18\xf4\x84\x08\x1c\xa5\x83\x31\x8f\xf8\x6c\x2b\x69\xc1\x60\x6e\xd0\xa2\x72\x15\x8d\x84\x0a\x47\x9a\xee\x01\xbf\x45\x43\x80\x48\xd0\x8a\x34\x26\x62\xaf\xd1\x38\x30\x18\xe9\xa5\x92\x7f\xab\xa0\x5b\xa2\x26\x6d\x9b\x0a\x87\xd6\x81\x54\x0e\x8d\x12\x29\xac\x45\x5a\xe0\x18\x84\x8a\xf7\x60\x67\x62\x0b\x06\x69\x5f\x28\x54\x03\x22\xbf\x62\xf7\x71\x79\xab\x0d\xf1\x37\xd1\x73\x58\x39\x97\xdb\xf9\x6c\xb6\x94\xae\x34\x22\x91\xce\x32\x12\xa5\xed\x8c\xed\x81\x5c\x14\xc4\xf5\x59\x8c\x6b\x4c\x67\x56\x2e\x27\xc2\x44\x2b\xe9\x30\x72\x85\xc1\x99\xc8\xe5\x84\x0f\xa3\xd8\x90\x4c\xb3\xf8\xf7\x26\x98\x1d\xbb\xb3\xb1\xe7\xb9\x75\x46\xaa\x65\x6b\x8a\xf5\xf9\x13\x99\x45\x7a\x4e\x82\x2f\x02\x40\x7f\xd8\x9a\x27\xf4\x88\xc8\xf8\xfe\x87\xdb\x3b\x28\x31\xf2\x7c\xf3\x2c\xaa\x97\x76\x50\xa8\xe4\x16\x51\x56\xaa\x04\x8d\x7f\x33\x31\x3a\x63\xa8\xa8\xe2\x5c\x4b\xe5\xf8\x47\x94\x4a\x54\x0e\x6c\xb1\xc8\x48\x2f\x48\x86\xd1\x3a\x62\xe4\x3e\xe0\x97\x6c\x74\x61\x81\x50\xe4\xb1\x70\x18\xef\x2f\xb9\x52\xf0\x52\x64\x98\xbe\x14\x16\xff\xe1\xbc\x23\x1e\xd9\x09\x31\xe4\x68\xee\x35\x5d\xca\xfe\x0b\x7b\x2a\x0e\x50\xfa\x82\x5e\x76\xb7\xac\xdb\x6d\x8e\x51\x69\xe1\xe8\x4d\xb6\x68\x42\xed\x98\xc0\x92\xc3\xbb\x04\xeb\x45\x82\xb6\x4c\x44\x91\xba\x5d\x4c\x00\x8a\x7c\x69\x44\x8c\xb7\xce\x90\x0f\xda\xce\xe1\x95\x5f\xb9\xb3\xb0\xcf\x00\xf1\x11\x31\xc5\xc8\x69\xb3\x3f\xb3\x73\xd4\xdb\xb0\x30\xbc\xe1\x8f\xd9\x3a\xda\x57\x76\xd8\x92\x1e\x71\xd2\x43\xd8\x02\xdb\x10\x17\xad\x7e\x78\x24\x95\x68\xf8\xaf\x03\xd8\xef\xbe\xe4\x15\x92\xdc\x30\x59\xc3\x54\x2c\x30\xad\x48\x51\xda\xf6\x8c\x35\x0e\xee\x56\xd8\x7a\x02\xc2\x20\x5c\x5e\xbf\xea\xd2\x88\xe6\x01\x85\x31\x62\xdb\xb3\x42\x3a\xcc\x7a\x11\x3f\x6c\x52\xea\x71\x39\x80\x7b\x30\x3a\xe5\x8c\x5b\x09\x76\x9d\x8e\x1d\xa7\xb7\xb8\x63\x10\xf0\x80\x5b\x36\xd6\xec\x13\x02\x3f\x79\xf1\xc0\xb6\x06\xd9\xe8\xb3\x0c\x3c\xe0\x96\x5f\xef\xb3\xe1\x6d\xaa\xf4\xb2\xbd\x04\xdc\xe5\x56\xdb\x63\x42\x5b\x0e\xce\x97\xc7\xe8\x5d\x74\x48\xc6\xfc\x78\xc0\xed\xd0\xf4\x0e\x9f\x88\x0e\x41\xfb\x3d\x4f\xe8\x01\x13\x9d\x0d\x42\xc9\x06\x91\xe7\xa9\xc4\x6e\x9b\xdb\x1c\xbd\x56\xac\x3d\xca\xa3\x7e\x02\xa2\x83\x02\xd5\x84\xd9\x70\x3c\x5e\x4e\xbe\xb2\x9e\xf3\xa4\x41\x2b\x99\x87\x70\xca\x07\x51\x87\xd8\xef\xc7\xcf\x22\x95\x8d\xd0\x8e\x75\xe9\x4a\x8d\xe1\x5a\x3b\xfa\xef\x87\x47\x49\xfe\x88\xc4\xe9\x95\x46\x7b\xad\x1d\x3f\x79\x12\x4a\x79\x04\x9f\x92\x4e\x1e\x22\xab\x99\xf2\xea\x4e\x84\x68\x7a\x79\x3b\x85\xab\x84\xf9\x5f\xd1\x54\x5a\xf2\x9b\xda\x84\x23\x1f\xd8\x82\xc3\x3a\xbf\x8d\xdf\x20\x2b\x2c\x3b\x65\xa5\xd5\x04\xb3\xdc\x6d\x3b\x77\x08\x74\xd4\xa6\x45\xc6\xcf\xde\x2c\x6c\x74\x47\x91\x85\x9f\xf1\x41\x65\x4a\xa9\x04\xc4\x05\x1f\x98\xe3\x1b\xf2\x43\x32\x3a\xb0\x4f\x86\x66\x89\x90\x93\x49\x3e\x86\xb3\x43\x86\xd4\x8f\x03\xe6\xb4\x09\x6c\x40\x4c\xd8\x47\xbc\x21\xd5\x3d\xce\xa7\x0c\xc8\x47\x03\x94\xb7\xc2\x99\xc8\x49\x36\x7e\x21\x63\xcb\x24\xfe\x15\x72\x21\x8d\x9d\xc2\x25\xa7\x6d\x29\xb6\xe6\xa4\x62\x66\x34\xc0\x0c\x6c\xc5\x69\x15\xd9\xcd\xb5\x48\xc9\xec\x93\x56\x2a\xc0\xd4\x3b\x01\x4a\xb3\x76\x9c\xdf\x18\x36\x2b\x6d\xbd\xe5\x4e\x24\xa6\x1c\x9e\x8e\x1e\x70\x3b\x1a\xd3\xb6\xbd\x5b\x35\x25\x6c\x74\xa5\x46\xde\x6d\xec\x49\x4d\xe5\x63\xb4\x4a\xb7\x30\xe2\xb9\xd1\xe7\xfb\xd1\x41\x8f\x21\xe2\x98\xcb\x05\x22\xbd\x39\xc2\xa4\x1f\x10\x81\xc7\xc9\x43\xb1\x40\xa3\xd0\xa1\x9d\x64\x22\x9f\x04\xf9\x73\x3a\xeb\x90\x69\x8b\x66\x2d\x23\xbc\x8c\x22\x5d\x28\xce\xc8\x0f\xc6\x50\x3d\x12\x73\xbb\x07\xa9\x74\x24\x22\xce\xa4\x6a\x25\xac\xbc\x12\x84\x5f\x0a\x9b\x95\x8c\x56\xb0\x91\x69\x0a\x8b\x6e\xbe\x15\x16\x63\x92\x88\x18\xf3\x54\x6f\x2b\x16\x9e\xd9\x73\x2f\x64\x94\x65\x94\x6c\xe5\x6a\x41\x7f\xc4\xd6\x43\x37\x4b\x59\x65\x74\x63\xf4\x5a\xc6\x18\x5f\xde\x5c\x75\x32\xa0\x1d\x4b\xf2\x2b\xe0\x30\x4d\x2d\xe7\xfc\x94\x69\x38\x1d\x32\x8d\xce\xc8\x32\x6f\xc0\x6f\xd4\x83\x7a\x91\x5d\x68\x9d\xa2\xd8\x9f\xf7\x11\x6a\x55\x08\x39\x8c\x6b\x0f\xcf\xee\x76\xe0\x04\x2f\x80\x8f\x79\x2a\x23\xe9\x4a\xaf\x58\x47\xc2\x9c\x2d\xf3\x4b\xdd\xe2\x7e\x95\x80\xe4\x90\xcd\xa2\x1b\xd7\xd1\xb6\xb4\x20\x97\x4a\x9b\x6e\x2d\x19\x36\x90\x03\x66\xf1\x53\x34\x81\xa2\xe4\xa0\x0a\x16\xf7\x15\x71\x37\x09\xf9\x4c\x82\x7e\x68\x83\x69\x15\x36\xc2\x16\xa5\x83\xf1\xb5\xa2\x56\x99\x87\x56\x55\xb4\xee\x26\xf0\xdd\x0a\x0d\xb2\xd1\x89\x0a\x63\x50\xb9\x74\x0b\x6e\xa3\xc1\x16\x79\xae\x8d\xc3\x78\x77\x1b\x36\x25\xcf\x3a\x61\x85\x3c\x6b\xce\xc2\xcb\xea\xc7\xb6\x4e\xa4\xa9\xde\x40\x94\x16\xd6\xa1\x09\x5a\x1d\x0a\x35\xcc\xff\x4c\xaf\xb1\xac\x9a\x78\xf7\xd9\xe7\x8b\xf2\x95\xb0\x58\x67\xf1\xb6\x88\x22\xc4\x18\x63\x3f\x11\x5c\x31\x26\x09\x46\x4e\xae\x31\xdd\x42\x86\x82\xcb\x61\xc2\xd5\x38\x29\xdd\x6d\x36\x3d\x9a\x35\xfd\x76\x30\x53\xf8\xe8\xca\x5a\x12\x48\xae\x15\xb5\x4b\x6c\xa6\xa4\x54\x27\xf4\x95\xb0\x90\x08\x99\x92\xc4\x76\x53\xef\x0e\xa3\xd5\x8d\xc1\xb5\xc4\xcd\x07\x65\x45\x82\xaf\x85\x4c\x5f\x6b\xb3\x11\x26\x6e\x90\xf4\x13\xa8\xd9\xb9\x4d\x45\xe1\x03\xd4\xa4\x03\x55\x73\x1e\xf3\x40\xe6\x4e\xb0\x97\x95\xcb\x49\xb7\xe3\x1a\xdb\x25\x2a\xa2\x27\x91\x6f\x53\xd2\xeb\x26\x25\xa6\x6c\x56\xa8\x28\x3a\x2a\x16\x95\x16\x80\xc1\x04\x0d\xaa\xfd\xd2\x53\xe0\x50\x89\x47\x03\x50\xe5\x6c\x23\xe1\x44\xaa\x97\x4c\xe8\x05\xa2\x2a\x0b\x34\xb0\x91\x6e\x05\x82\x11\x28\x45\x39\xe9\x49\x82\xb8\x34\x44\x31\x21\x91\x27\xd8\xaa\x46\xc1\xb5\x9b\x6f\xff\x76\xf9\xfe\xfa\xea\xfa\xc7\x39\xbb\xf2\x21\x26\xee\x2b\xac\xb4\x50\xf0\x2a\x3e\x85\x2f\x03\xda\xfd\x4a\x85\x1f\x52\x41\xa1\xf0\x31\xc7\x88\x4e\xb5\xc0\x95\x58\x4b\x52\x78\x13\x8a\x86\x6b\x34\x62\x91\x22\xc4\xc2\x09\x48\xb5\x25\xd8\x29\x5a\x0b\x5b\x5d\xc0\x4a\xac\x11\x62\xc4\xbc\xdb\x1d\xaa\x18\x8d\x75\x42\xc5\x74\x70\x9d\x84\xdc\xac\x7d\x7e\x58\x20\xcd\x96\x85\xe8\x63\xcc\xcb\x01\x7b\x5a\x56\x70\x7a\x0a\x34\x34\x50\x15\x59\xb7\xad\x9e\x0c\xbc\x45\xb3\x43\x9c\x68\x97\xb3\x9c\x70\xc5\x9e\x43\x18\x28\x68\xf1\xfa\xaa\xa4\xe5\x7f\x75\x15\xb5\xde\x7f\x7a\x4d\xab\x3f\xd1\x9f\x40\x2a\xac\xfb\xe0\x65\xfa\x13\x2a\x59\x91\x56\x5e\x31\x0f\xfb\xf4\x97\xd5\xd2\xdd\xe4\xad\x2b\xf4\xa8\x01\x3f\xa9\x0b\x3e\x2e\x97\xa8\x50\xad\xc3\xea\x18\x9d\x90\xa9\xe7\x84\x56\x08\x82\xe2\x43\x57\x62\x1f\x9c\x1b\xb3\x0b\xab\x0e\xc0\xe5\xcd\x15\xf4\x71\xa9\x22\xfc\xa4\x0f\x09\xf6\x36\xd6\x99\x22\xe2\x08\x45\x2a\x87\x8a\xcc\x27\x61\x10\x4b\xc3\xe5\x7c\x4b\x88\xd4\xb4\x0c\x65\x0f\x9f\x5e\xe4\xc2\xad\x60\xea\x05\x68\xda\x20\x27\xc0\x6b\x6d\x00\x1f\x45\x96\xa7\x38\xee\xb1\x3a\x00\xbf\x23\x1a\xc3\x6b\xad\x83\x40\x7a\x4c\x7e\xe9\x5b\x4d\xff\xcc\x66\xf0\xbe\x2e\x5e\x70\x7a\xbc\xa0\xe0\xd9\xd7\x2e\xb8\x03\x02\x89\xd6\xc4\xdd\x26\xbd\xfa\x48\x53\xc2\xfc\x49\xe9\x8d\xea\x3a\x09\x63\x28\x0c\xce\x61\x74\xb9\x16\x32\x25\xfb\x34\x1a\xc3\xe8\xc6\xe8\x25\xa7\x5d\x6a\x19\xd2\xa5\xd1\x2b\x64\xdb\x18\x8f\x0e\xec\xf5\xff\x39\x41\x7e\x4b\xb9\xf2\x4f\xb8\xfd\x8e\x76\x38\xea\x8d\x32\x82\xfa\x8e\xd3\xec\x43\xaf\x50\x70\x77\xb7\xcd\xf1\xbb\x4c\x74\x5b\xcc\x9d\xb5\x6f\x45\x7e\x0c\x36\x0d\x0d\xfb\x78\x9f\xa1\x13\xeb\x8b\x69\x2d\xca\x7f\xfe\x8b\xd5\x6a\x3e\xaa\xe9\x37\xd6\x19\x69\x4a\xee\xb6\x23\x68\x1d\x62\x3e\xe2\x53\x84\xa7\x25\x31\xe6\x23\xda\x7f\x44\xe6\xc0\xe9\x45\x91\xcc\x47\x8b\xad\x43\x3b\xbe\x18\x1b\xcc\xc7\x64\xa8\xbf\xab\x61\x8f\xfe\xdc\x2f\x58\xe1\x64\xda\xad\xd0\x78\x59\xed\x4b\xb4\x7f\xf7\xeb\x40\x1c\x3d\x90\xa2\x1e\x2a\x68\x7a\x6b\x77\x67\x84\xb2\x8c\xee\x9d\xcc\xfa\x08\x3b\x81\x0c\xad\x15\xbd\x3c\x9d\x80\x41\x61\x3b\x73\x22\x3f\xed\xc5\xb6\x77\xba\x97\xa7\x87\xab\xa5\xfb\x67\x78\x8a\xe2\xf6\x3e\xd4\xba\xc0\x6a\x1d\x38\x7a\xc0\x26\xaf\x12\x2c\x57\xad\x26\xeb\x44\x31\x1d\x19\xc8\xe0\xb9\xb8\x2e\xc2\xac\x1e\xaa\x3a\x79\x5b\xe7\x7b\x9f\x0b\xf4\xc1\x9b\xef\x59\xc7\x68\xd2\x2d\x05\x06\xf5\x7e\xd1\x4a\xa8\x25\xc6\x53\xf0\x45\x38\xc1\xe6\x91\x92\xd9\x07\x32\x14\x5c\x4d\x51\x50\xd8\xb2\xc5\xc7\x18\x57\x10\xc9\x26\x7b\xfb\x18\xc0\xb0\x33\x8a\x22\xcc\x1d\x99\x8f\x43\x95\xf4\x03\x05\xcf\x44\x9b\x4c\xb8\x39\x05\x49\x38\x71\xfd\x52\x15\x64\xea\x29\xf8\x15\x40\xf9\x8a\xd7\xaa\xc8\x04\xc5\xb9\x22\xe6\x58\xad\x9a\x53\xb1\x8c\x04\x87\x9d\xa5\x1f\x13\x0b\x5d\x78\x6f\x51\xb3\xef\x20\x87\x28\x84\x5c\x20\xa7\xdc\x64\x36\x02\x35\xbe\x90\x66\x99\x78\x7c\x83\x6a\xe9\x56\x73\xf8\xe6\xc5\xbf\x7c\xfb\xc7\x9e\x85\xde\x95\x60\xfc\xa3\x0f\xf9\x3b\x1a\xf8\x9f\x43\xbd\x7d\xa8\xcd\xfa\x3b\x91\x67\x5a\x36\x30\xa7\xcb\x7a\x4d\xd5\x61\xa8\xa5\x72\x23\xb8\x8a\x00\x0b\x61\x39\xab\x1d\x26\x27\xb9\x60\x4e\x33\x54\x84\x63\xca\xf7\x3a\xb7\x91\xb6\x91\x36\x5f\xbc\x18\xc3\x22\xf0\x6c\xdf\x19\x7e\x7c\xbc\x9f\x76\x1c\x46\x5a\xf8\xd3\x78\x07\x53\x69\x81\x78\xaf\x13\x16\xd3\x01\x24\x39\xb5\x31\xe8\x23\x9d\x90\xa7\x76\x44\x3a\x58\x9d\xe4\x90\x24\x50\x0c\xb3\xc4\xfe\x0e\x51\xa9\x3e\x52\xb9\x6f\xff\xd0\x2f\x30\x52\xc9\xac\xc8\xe6\xf0\xbc\x67\x89\xb7\xc8\x4f\x21\x1e\x1e\x52\x1d\x05\x0a\x32\xcb\x4b\x23\xb2\x8c\x6b\x69\x32\x46\xe5\x64\x22\xd1\x34\x55\xcc\x17\x1a\xf8\xc5\x84\xbb\x7a\x0d\xe2\x7f\x65\x83\x19\x3d\x4a\xe9\x6e\x8c\x8e\x8b\x08\x0d\xc7\x4e\xa1\x20\x19\x35\x2d\xef\x36\x47\xaf\x95\xbe\x70\x03\x55\xfe\x56\xd6\x86\x29\xef\x43\xa1\xa4\x5a\xda\x80\x8c\xb4\xde\xfe\x0d\xf5\x25\xe8\xb5\xcd\x0a\xd9\x41\xb7\x2a\xcd\x7c\x12\x2b\x63\x34\x18\x83\x80\x65\x21\x8c\x50\x0e\x31\x26\xbb\x3a\x6c\x3e\x02\x94\x86\x95\x17\xf5\x45\x86\x83\x96\x24\x18\x20\x6f\xb9\xe9\xc0\xe1\x9a\x84\x6f\x92\x3c\x99\x01\xba\x78\xfe\x62\x50\xee\xaa\x75\xfd\x4d\x4e\xe1\x1c\x1a\x35\x87\xff\xfc\x78\x39\xf9\x77\x31\xf9\xdb\xfd\x59\xf8\xe3\xf9\xe4\x4f\xff\x35\x9e\xdf\x7f\xdd\xf8\x79\x7f\xfe\xfd\xff\xeb\x81\xd4\x9d\x36\xd6\xa3\x25\xc3\xc1\xd7\x96\xc9\x48\x29\x1f\x63\x76\xc4\x3a\x81\x3b\x53\xe0\x18\x5e\x8b\xd4\xe2\x18\x3e\x28\xf6\x93\x5f\x48\xb4\xfe\xcc\xd9\x8f\x09\x8c\x68\xd7\xbe\x78\x3b\x2c\x61\x94\x86\xd7\x04\x74\x87\xba\x15\x4f\xa0\xe8\x9c\x4a\xe8\xa4\x69\x25\x1b\xf7\x6c\x80\xad\x35\xe5\x2e\xd3\x90\x37\x4d\x23\x9d\xcd\x06\xee\xe1\x34\x4e\xd0\x9b\xe0\xd1\x78\x2b\xd4\x16\x6a\x33\xee\x53\x9a\x5d\x75\xb3\x8e\x2c\xae\x88\x8c\xb6\xb6\xba\xca\x62\x21\x95\x0f\x08\x55\xe2\xe3\x9d\xc3\x02\x23\xc1\x59\xa1\x59\x48\x67\x84\xd9\x36\x12\x69\x88\x84\xea\xeb\x58\xf8\x51\x58\x4c\x8a\x14\xce\x2c\x22\x4c\x95\x8e\x71\xdf\xcf\x9c\x7b\x6f\x22\x16\x32\x95\x6e\xeb\x9b\x1c\x91\x56\x49\x2a\x43\x9a\x9a\xe5\xda\x38\xa1\x06\xdb\xc7\xbe\x2b\xb5\xc4\x47\x90\xce\x37\xca\x7c\x2d\xff\x2c\x56\xf6\xe2\xe2\xc5\x37\xb7\xc5\x22\xd6\x99\x90\xea\x75\xe6\x66\xe7\xdf\x9f\xfd\xb5\x10\x29\xf7\x62\xae\x45\x86\xaf\x33\x77\xfe\x74\x11\xc7\xc5\xb7\x47\xa8\xf2\xd9\x47\xaf\xb0\xf7\x67\x1f\x27\xe1\xaf\xaf\xcb\x47\xe7\xdf\x9f\xfd\xc7\x74\x70\xfe\xfc\x6b\x3a\x43\xc3\x0c\xdc\x7f\x9c\xd4\x36\x60\x7a\xff\xf5\xf9\xf7\x8d\xb9\xf3\x7d\x8b\xd0\x28\xcd\x1c\xac\xb2\xbc\xa9\xd7\xfa\x90\x90\xa2\x50\xeb\x44\x96\x97\xe6\xa1\x1d\xc6\xef\xd6\x5d\x82\x29\xa1\x68\xe6\x43\xdf\x15\xb4\x83\x64\x3e\x1c\x06\xab\xe3\x7b\x41\xed\x76\x4f\xa3\x74\xb8\x77\xef\xa9\x72\xb7\xad\x43\xfd\x6f\x6d\xe1\xb4\x5b\x99\xef\x31\x39\xe2\x36\xd8\xce\x1b\x8d\x8a\x76\x20\x4c\xbb\x53\x19\xae\x32\x56\xad\xcc\xbf\xc3\xc5\xb0\xfe\xfb\xb4\x9d\x47\xa0\xf4\xab\xec\x72\x04\x79\x0c\x67\xe8\x35\x18\x07\x55\x9a\x83\x82\x1b\xe1\x56\x5f\x7a\x81\xe0\x2a\x10\x94\x6f\x56\xf0\x35\x9b\x5c\x62\x84\xad\xab\xbb\x1c\xeb\xa2\x88\xc3\x43\x8a\xff\x0c\x86\xb9\xb1\x0f\xaf\x0e\x58\x9f\xfa\x8a\x2f\xc5\x94\x20\xc8\xdc\xcb\x18\xfe\xf5\xf6\xdd\xf5\xec\x47\x1d\x42\x1c\xca\x48\xad\xd7\x46\x6e\xdc\x8f\xc1\x16\xd1\x0a\x84\xa5\xc3\x48\x83\xf1\x2d\x57\xce\x32\xa1\x64\x82\xd6\x4d\x03\x34\x34\xf6\xe3\x8b\xfb\x7e\xd3\xdb\xac\xfc\x51\xd6\xe1\x6b\x74\xe1\xbe\x6b\x10\x25\xd6\x32\x3a\x7c\x05\x93\x13\x01\x46\x35\xd7\x71\x38\xe4\x86\x0f\xe1\xc4\x03\x82\x0e\x87\x28\x90\x5d\x52\xbf\x3b\x1e\x91\x20\x36\x50\xfd\x85\x54\xf7\xd7\x11\x9c\x6d\xb8\x4b\x38\xa2\x9f\x23\x8f\x48\x75\xcf\x99\x9e\x35\x02\x9b\x80\x90\xcf\xbf\x8c\x5c\x2e\x29\x12\xed\xf7\x06\x2b\x04\x5c\xa3\x72\xe7\xec\xc1\x13\x50\xba\x01\x44\x85\x9e\x7f\xdd\xe9\xdf\x45\xf0\xe3\x8b\xfb\x11\x9c\xb5\xe9\xd0\xbb\x99\x54\x31\x3e\xc2\x8b\xaa\xc3\x9f\xeb\xf8\x3c\xf4\x0c\xed\x56\x39\xf1\xc8\xe9\xdc\x4a\x5b\x54\xbe\x71\xe9\xb4\xef\x9b\x58\x9d\x21\x6c\x30\x4d\x27\x3e\x8a\x8f\x61\xc3\x75\xf1\xde\x9d\x4a\x56\xf9\x0b\x40\xb9\x30\xee\xc0\xed\xf2\x72\xdc\xbd\x7b\xf5\x6e\xee\xb1\x23\x31\x5a\xaa\xb2\x72\x92\x48\x25\xd2\xd0\xeb\xaa\xc2\x6c\x42\xbc\xf0\xc2\xe1\x74\x28\x97\x94\x7d\x99\xa4\x70\x85\xe9\x8d\x7b\x0e\xaa\x6c\xd7\x95\xee\x72\x1c\xab\xad\x7c\xc5\xfb\x48\x1b\xf2\x1b\x5e\x8c\x3e\x9a\x26\xaa\xe7\x32\xcb\xa7\xd0\xe4\xba\xa1\x2d\x9f\x45\x93\xda\x7d\x11\x59\x62\x1d\x59\xa2\x48\x84\xb9\xb3\x33\xbd\x26\xf7\x82\x9b\xd9\x46\x9b\x07\xa9\x96\x13\x52\x87\x89\x97\x39\x3b\x63\x37\x3c\xfb\x3d\xff\xf7\x25\x24\x60\x57\xfe\x14\x74\xf0\x1f\x9f\xfc\x86\xc4\xe0\x98\x64\xf6\xb9\xb4\x28\xe3\xfc\x4f\xf1\xae\x03\x14\xb9\x2d\xab\x07\x3b\x70\x49\xb5\xfd\x85\xa6\xf0\xd1\x4a\xc3\x0b\x64\x22\xf6\x6e\x42\xa8\x81\x1c\xfb\xef\xac\x59\x44\x71\xae\x39\x45\xdb\x49\xf8\x02\x6d\x22\x54\x3c\xa9\x32\xa3\xa8\xef\x9a\xe2\x41\x12\x17\xf2\x8b\x8d\xd0\x87\xab\x57\xbf\xad\xbe\x15\xf2\x73\x2d\xce\x31\x17\xef\x7c\x3d\x71\x0e\xce\x14\x65\x0c\x6f\x9d\x36\x62\x89\xed\x67\xc5\xa2\x4a\x4b\x6b\x8a\x86\x12\x06\xfc\xe2\xbb\x38\xf5\xc7\x6e\x22\xcd\x57\xe2\x45\xf9\xee\xe9\x93\xb7\x06\xb7\x4e\x9f\xbc\x9d\x3e\x79\x3b\x7d\xf2\xb6\x33\x4e\x9f\xbc\xfd\x63\x3e\x79\x3b\x7d\xb2\x76\xfa\x64\xed\xf4\xc9\x5a\x73\x9c\x3e\x59\x1b\x1a\xa7\x4f\xd6\x4e\x9f\xac\x9d\x3e\x59\xeb\x1a\xa7\x4f\xd6\x4e\x9f\xac\x95\xe3\xf4\xc9\x5a\xa0\xc3\xe9\x93\xb5\x7f\xa2\x4f\xd6\xfe\xb9\x3f\x6b\x38\x75\xdc\xff\x6f\x74\xdc\x4f\x3d\xf4\x53\x0f\xfd\xd4\x43\x3f\xf5\xd0\x4f\x3d\xf4\xf6\x38\xf5\xd0\x3f\x9f\x26\xa7\x1e\x7a\x4d\x87\x53\x0f\xbd\x39\x4e\x3d\xf4\xfd\x71\xea\xa1\x7f\x49\x0f\x3d\x11\xa9\x3d\xba\x89\xfe\x3f\x01\x00\x00\xff\xff\x30\x4b\xcf\xd3\xe0\x57\x00\x00") +var _operatorsCoreosCom_operatorgroupsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3b\x6b\x73\x1b\x39\x72\x9f\xcf\xbf\xa2\x8b\x97\xaa\x95\x36\x7c\x58\xde\x64\x73\xc7\xaa\xad\x2d\x95\xbd\xde\x52\xd6\x0f\x95\x25\x6f\xaa\xe2\x28\x39\x70\xa6\x49\xe2\x84\x01\xe6\x00\x0c\x29\xde\x66\xff\x7b\xaa\x1b\x98\x17\xc9\x19\xd2\xb2\xee\x36\x49\x71\x3e\xd8\xe2\x00\xd3\x68\xf4\xfb\x01\x88\x5c\xfe\x8c\xd6\x49\xa3\xa7\x20\x72\x89\x0f\x1e\x35\xfd\x72\xe3\xfb\x3f\xb8\xb1\x34\x93\xd5\xc5\xb3\x7b\xa9\xd3\x29\xbc\x2c\x9c\x37\xd9\x07\x74\xa6\xb0\x09\xbe\xc2\xb9\xd4\xd2\x4b\xa3\x9f\x65\xe8\x45\x2a\xbc\x98\x3e\x03\x10\x5a\x1b\x2f\xe8\xb5\xa3\x9f\x00\x89\xd1\xde\x1a\xa5\xd0\x8e\x16\xa8\xc7\xf7\xc5\x0c\x67\x85\x54\x29\x5a\x06\x5e\x2e\xbd\x7a\x3e\xbe\xf8\xe7\xf1\xf3\x67\x00\x5a\x64\x38\x05\x93\xa3\x15\xde\xd8\x85\x35\x45\xee\xc6\xe5\x4f\x37\x4e\x8c\x45\x43\xff\x65\xcf\x5c\x8e\x09\x2d\xc2\x73\xea\x4f\x5a\x73\x02\xbc\x12\x17\xe1\x71\x61\xac\x2c\x7f\x03\x8c\xc0\xa8\x8c\xff\x0e\x7b\x7c\x1f\x61\xfc\x48\x20\xf9\xbd\x92\xce\xff\xb4\x3b\xf6\x46\x3a\xcf\xe3\xb9\x2a\xac\x50\xdb\x08\xf3\x90\x5b\x1a\xeb\xdf\xd5\xcb\xf3\x72\x8b\x30\x24\xf5\xa2\x50\xc2\x6e\x7d\xf7\x0c\xc0\x25\x26\xc7\x29\xf0\x67\xb9\x48\x30\x7d\x06\x10\xa9\x14\xc1\x8c\x22\x89\x56\x17\x11\xaa\x4b\x96\x98\x89\x72\x0d\x20\x90\xfa\xf2\xfa\xea\xe7\x6f\x6e\xb6\x06\x00\x52\x74\x89\x95\xb9\x67\x9a\xff\xf7\xa8\x31\x02\xed\xfd\x81\x74\xe0\x97\x08\x85\x96\x1e\xcc\x1c\xb2\x42\x79\xe9\x51\x0b\x9d\x6c\x60\x6e\x2c\xbc\x7f\xf3\x16\x32\xa1\xc5\x02\xd3\x06\xe5\x5b\x00\xaf\x3c\x71\xdf\x79\x2b\xa4\x0e\xd0\xa4\x76\x5e\x28\xc5\xf2\x41\x50\xab\x0f\x41\x6a\x90\xde\x05\x66\xd1\xb6\xc1\x1b\x10\x40\x1c\x96\x73\x89\x29\x38\x64\x34\xbc\xb0\x0b\xf4\xf5\xb4\xd6\x8a\x7e\x43\x94\x33\xb3\x3f\x63\xe2\x1b\xaf\x2d\xfe\xa5\x90\x16\xd3\x69\x0b\xb9\x11\x94\x62\xdb\x78\x9d\x5b\xc2\xc8\x37\x04\x24\x3c\x0d\x25\x69\xbd\xef\x27\x28\x3d\xc4\x87\xf0\x25\xa4\xa4\x31\x18\x08\x11\x39\x4a\x1b\x63\x1e\xf1\xde\x96\xd2\x81\xc5\xdc\xa2\x43\xed\x2b\x1a\x09\x1d\xb7\x34\xde\x01\x7e\x83\x96\x00\x91\xa0\x15\x2a\x25\x62\xaf\xd0\x7a\xb0\x98\x98\x85\x96\x7f\xad\xa0\x3b\xa2\x26\x2d\xab\x84\x47\xe7\x41\x6a\x8f\x56\x0b\x05\x2b\xa1\x0a\x1c\x82\xd0\xe9\x0e\xec\x4c\x6c\xc0\x22\xad\x0b\x85\x6e\x40\xe4\x4f\xdc\x2e\x2e\x6f\x8d\x25\xfe\xce\xcd\x14\x96\xde\xe7\x6e\x3a\x99\x2c\xa4\x2f\x8d\x48\x62\xb2\x8c\x44\x69\x33\x61\x7b\x20\x67\x05\x71\x7d\x92\xe2\x0a\xd5\xc4\xc9\xc5\x48\xd8\x64\x29\x3d\x26\xbe\xb0\x38\x11\xb9\x1c\xf1\x66\x34\x1b\x92\x71\x96\xfe\xde\x46\xb3\xe3\xb6\x16\x0e\x3c\x77\xde\x4a\xbd\x68\x0d\xb1\x3e\x7f\x26\xb3\x48\xcf\x49\xf0\x45\x04\x18\x36\x5b\xf3\x84\x5e\x11\x19\x3f\xfc\x70\x73\x0b\x25\x46\x81\x6f\x81\x45\xf5\xd4\x3d\x14\x2a\xb9\x45\x94\x95\x7a\x8e\x36\x7c\x39\xb7\x26\x63\xa8\xa8\xd3\xdc\x48\xed\xf9\x47\xa2\x24\x6a\x0f\xae\x98\x65\xa4\x17\x24\xc3\xe8\x3c\x31\x72\x17\xf0\x4b\x36\xba\x30\x43\x28\xf2\x54\x78\x4c\x77\xa7\x5c\x69\x78\x29\x32\x54\x2f\x85\xc3\xbf\x3b\xef\x88\x47\x6e\x44\x0c\x39\x9a\x7b\x4d\x97\xb2\xfb\xc1\x8e\x8a\x03\x94\xbe\xa0\x93\xdd\x2d\xeb\x76\x93\x63\x52\x5a\x38\xfa\x92\x2d\x9a\xd0\x5b\x26\xb0\xe4\xf0\x36\xc1\x3a\x91\xa0\x25\xe7\xa2\x50\x7e\x1b\x13\x80\x22\x5f\x58\x91\xe2\x8d\xb7\xe4\x83\x36\x53\x78\x15\x66\x6e\x4d\xec\x32\x40\xbc\x45\x54\x98\x78\x63\x77\x47\xb6\xb6\x7a\x13\x27\xc6\x2f\xc2\x36\x5b\x5b\xfb\xca\xf5\x5b\xd2\x23\x76\x7a\x08\x5b\x60\x1b\xe2\x93\xe5\x0f\x0f\xa4\x12\x0d\xff\x75\x00\xfb\xed\x8f\x82\x42\x92\x1b\x26\x6b\xa8\xc4\x0c\x55\x45\x8a\xd2\xb6\x67\xac\x71\x70\xbb\xc4\xd6\x1b\x10\x16\xe1\xf2\xdd\xab\x7d\x1a\xd1\xdc\xa0\xb0\x56\x6c\x3a\x66\x48\x8f\x59\x27\xe2\x87\x4d\x4a\xfd\x5c\xf6\xe0\x1e\x8d\x4e\x39\xe2\x97\x82\x5d\xa7\x67\xc7\x19\x2c\xee\x10\x04\xdc\xe3\x86\x8d\x35\xfb\x84\xc8\x4f\x9e\xdc\xb3\xac\x45\x36\xfa\x2c\x03\xf7\xb8\xe1\xcf\xbb\x6c\x78\x9b\x2a\x9d\x6c\x2f\x01\xef\x73\xab\xed\x67\x44\x4b\xf6\x8e\x97\xdb\xe8\x9c\x74\x48\xc6\xc2\x73\x8f\x9b\xbe\xe1\x2d\x3e\x11\x1d\xa2\xf6\x07\x9e\xd0\x0b\x26\x3a\x1b\x84\x92\x0d\x22\xcf\x95\xc4\xfd\x36\xb7\xf9\x74\x5a\xb1\xf6\x53\x6e\xf5\x33\x10\xed\x15\xa8\x26\xcc\x86\xe3\x09\x72\xf2\x95\x0b\x9c\x27\x0d\x5a\xca\x3c\x86\x53\x21\x88\x3a\xc4\xfe\xf0\xfc\x2c\x94\x6c\x84\x76\xac\x4b\x57\x7a\x08\xef\x8c\xa7\xff\x7e\x78\x90\xe4\x8f\x48\x9c\x5e\x19\x74\xef\x8c\xe7\x37\x4f\x42\xa9\x80\xe0\x53\xd2\x29\x40\x64\x35\xd3\x41\xdd\x89\x10\x4d\x2f\xef\xc6\x70\x35\x67\xfe\x57\x34\x95\x8e\xfc\xa6\xb1\x71\xcb\x07\x96\xe0\xb0\x2e\x2c\x13\x16\xc8\x0a\xc7\x4e\x59\x1b\x3d\xc2\x2c\xf7\x9b\xbd\x2b\x44\x3a\x1a\xdb\x22\xe3\xa3\x17\x8b\x0b\xdd\x52\x64\x11\x46\x42\x50\xa9\x28\x95\x80\xb4\xe0\x0d\x73\x7c\x43\x7e\x48\x26\x07\xd6\xc9\xd0\x2e\x10\x72\x32\xc9\xc7\x70\xb6\xcf\x90\x86\xe7\x80\x39\x6d\x02\x3b\x28\x26\x00\x0f\x23\xca\x27\xad\x46\x8f\x6e\x44\x2e\x62\x14\xf1\xf0\x26\xeb\xdc\xdb\x23\x3e\x62\x9f\xf4\x86\x4c\xc5\x71\x3e\xac\x47\x1e\x1b\xa0\x82\xd5\xcf\x44\x4e\xb2\xf8\x0b\x19\x77\x66\xe9\xaf\x90\x0b\x69\xdd\x18\x2e\x39\x4d\x54\xd8\x1a\x93\x9a\x99\xdf\x00\xd3\xb3\x14\xa7\x71\x64\xa7\x57\x42\x91\x9b\x21\x2b\xa0\x01\x55\x70\x3a\x94\xd6\x6d\x39\xdb\x21\xac\x97\xc6\x05\x4f\x31\x97\xa8\x38\x1c\x1e\xdc\xe3\x66\x30\xa4\x65\x3b\x97\x6a\x4a\xf4\xe0\x4a\x0f\x82\x9b\xda\x91\xd2\xca\xa7\x19\xad\x36\x30\xe0\xb1\xc1\xe3\xfd\x76\xaf\x87\x12\x69\xca\xe5\x09\xa1\xae\x8f\x70\x21\x07\x44\xae\x25\x33\x99\xc8\xfb\x45\xc6\xa1\x5d\xc9\x04\x2f\x93\xc4\x14\x9a\x2b\x00\x07\x63\xb6\x0e\x89\xb9\xd9\x81\x54\x3a\x2e\x91\x66\x52\xb7\x12\x64\x9e\x09\x22\x4c\x85\xf5\x52\x26\x4b\x58\x4b\xa5\x60\xb6\x9f\x6f\x85\xc3\x94\x24\x22\xc5\x5c\x99\x4d\xc5\xc2\x33\x77\x1e\x84\x8c\xb2\x9a\x92\xad\x5c\x9d\xe8\x8e\x10\x3b\xe8\xe6\x28\x8b\x4d\xae\xad\x59\xc9\x14\xd3\xcb\xeb\xab\xbd\x0c\x68\xc7\xae\xfc\x09\x78\x54\xca\x71\x8d\x81\x32\x1b\x6f\x62\x66\xb3\x37\x92\xcd\x1b\xf0\x1b\xf5\xa7\x4e\x64\x67\xc6\x28\x14\xbb\xe3\x21\x22\xae\x0a\x2f\x87\x71\xed\xe0\xd9\xed\x16\x9c\xe8\x75\xf0\x21\x57\x32\x91\xbe\xf4\xc2\x75\xe4\xcd\xd9\x39\x7f\xb4\x5f\xdc\xaf\xe6\x20\x39\x44\x74\xe8\x87\x75\x74\x2f\x1d\xc8\x85\x36\x76\xbf\x96\xf4\x1b\xe4\x1e\x33\xfc\x39\x9a\xd0\xb0\x9e\x0e\x77\x15\x71\x3b\xe9\x79\x24\x41\x3f\xb6\xc1\xb4\x0a\x29\x71\x89\xd2\xa1\x85\xda\x54\xab\xac\x44\xb3\x2a\x5a\xef\x27\xf0\xed\x12\x2d\xb2\xd1\x49\x0a\x6b\x51\x7b\xb5\x01\xbf\x36\xe0\x8a\x3c\x37\xd6\x63\xba\xbd\x0c\x9b\x92\x67\x7b\x61\xc5\xbc\x6e\xca\xc2\xcb\xea\xc7\xb6\x4e\x28\x65\xd6\x90\xa8\xc2\x79\xb4\x51\xab\x63\x61\x88\xf9\x9f\x99\x15\x96\x55\x9a\xe0\xae\xbb\x7c\x5f\xbe\x14\x0e\xeb\xaa\x81\x2b\x92\x04\x31\xc5\x34\x0c\x44\xd7\x8f\xf3\x39\x26\x5e\xae\x50\x6d\x20\x43\xc1\xe5\x37\xe1\x6b\x9c\xb4\xd9\x6f\x36\x03\x9a\x35\xfd\xb6\x30\xd3\xf8\xe0\xcb\xda\x15\x48\xae\x4d\xb5\x4b\x7a\xb6\xa4\xd4\x5e\xe8\x4b\xe1\x60\x2e\xa4\x22\x89\xdd\x4f\xbd\x5b\x4c\x96\xd7\x16\x57\x12\xd7\x1f\xb5\x13\x73\x7c\x2d\xa4\x7a\x6d\xec\x5a\xd8\xb4\x41\xd2\xcf\xa0\xe6\xde\x65\x2a\x0a\x1f\xa0\x26\x6d\xa8\x1a\x0b\x98\x47\x32\xef\x05\x7b\x59\xb9\x1c\xb5\x19\xd6\xd8\x2e\x50\x13\x3d\x89\x7c\xeb\x92\x5e\xd7\x8a\x98\xb2\x5e\xa2\xa6\x68\xac\x98\x55\x5a\x00\x16\xe7\x68\x51\xef\x96\xba\x22\x87\x4a\x3c\x1a\x80\x2a\x67\x9b\x08\x2f\x94\x59\x30\xa1\x67\x88\xba\x2c\x08\xc1\x5a\xfa\x25\x08\x46\xa0\x14\xe5\x79\x47\xd2\xc5\xa5\x28\x8a\x41\x89\x3c\xd1\x56\x35\x0a\xbc\xfb\xf9\xf6\x6f\x97\x1f\xde\x5d\xbd\xfb\x71\xca\xae\xbc\x8f\x89\xbb\x0a\x2b\x1d\x14\x3c\x8b\x77\x11\xca\x8e\x6e\xb7\x32\x12\x1e\xa9\xa1\xd0\xf8\x90\x63\x42\xbb\x9a\xe1\x52\xac\x24\x29\xbc\x8d\x45\xca\x15\x5a\x31\x53\x08\xa9\xf0\x02\x94\x71\x04\x5b\xa1\x73\xb0\x31\x05\x2c\xc5\x0a\x21\x45\xcc\xf7\xbb\x43\x9d\xa2\x75\x5e\xe8\x94\x36\x6e\xe6\x31\x17\x6c\xef\x1f\x66\x48\xa3\x65\xe1\xfb\x18\xf3\x72\xc0\x9e\x96\x15\xa3\x8e\x82\x10\x3d\xa8\x8b\x6c\xbf\xad\x1e\xf5\x7c\x45\xa3\x7d\x9c\x68\x97\xcf\xbc\xf0\xc5\x8e\x43\xe8\x29\xa0\xf1\xfc\xaa\x84\x16\x7e\xed\x2b\xa2\x7d\xf8\xfc\x1a\x5a\x77\x61\x61\x04\x4a\x38\xff\x31\xc8\xf4\x67\x54\xce\x12\xa3\x83\x62\x1e\xf6\xe9\x2f\xab\xa9\xdb\xc9\xe2\xbe\xd0\xa3\x06\xfc\xa4\x2e\xf8\xb8\x5c\xa2\x42\xb5\x0e\xab\x53\xf4\x42\xaa\xc0\x09\xa3\x11\x04\xc5\x87\xbe\xc4\x3e\x3a\x37\x66\x17\x56\x1d\x87\xcb\xeb\x2b\xe8\xe2\x52\x45\xf8\x51\x17\x12\xec\x6d\x9c\xb7\x45\xc2\x11\x8a\xd4\x1e\x35\x99\x4f\xc2\x20\x95\x96\xdb\x07\x8e\x10\xa9\x69\x19\xcb\x2c\x21\xbd\xc8\x85\x5f\xc2\x38\x08\xd0\xb8\x41\x4e\x80\xd7\xc6\x02\x3e\x88\x2c\x57\x38\xec\xb0\x3a\x00\xbf\x23\x1a\xc3\x6b\x63\xa2\x40\x06\x4c\x7e\xe9\x9a\x4d\xff\x4c\x26\xf0\xa1\x2e\x96\x70\x3a\x3e\xa3\xe0\x39\xd4\x4a\xb8\xe3\x02\x73\x63\x88\xbb\x4d\x7a\x75\x91\xa6\x84\xf9\x93\x36\x6b\xbd\x6f\x27\x8c\xa1\xb0\x38\x85\xc1\xe5\x4a\x48\x45\xf6\x69\x30\x84\xc1\xb5\x35\x0b\x4e\xbb\xf4\x22\xa6\x4b\x83\x57\xc8\xb6\x31\x1d\x1c\x58\xeb\x1f\x39\x21\x7f\x4b\xb9\xf9\x4f\xb8\xf9\x8e\x56\x38\xea\x8b\x32\x82\xfa\x8e\xd3\xfa\x43\x9f\x50\x70\x77\xbb\xc9\xf1\xbb\x4c\xec\xb7\x98\x5b\x73\xdf\x8a\xfc\x18\x6c\x1a\x1a\xf6\xe9\x2e\x43\x2f\x56\x17\xe3\x5a\x94\xff\xf4\x67\x67\xf4\x74\x50\xd3\x6f\x68\x32\xd2\x94\xdc\x6f\x06\xd0\xda\xc4\x74\xc0\xbb\x88\x6f\x4b\x62\x4c\x07\xb4\xfe\x80\xcc\x81\x37\xb3\x62\x3e\x1d\xcc\x36\x1e\xdd\xf0\x62\x68\x31\x1f\x92\xa1\xfe\xae\x86\x3d\xf8\x53\xb7\x60\xc5\x9d\x19\xbf\x44\x1b\x64\xb5\x2b\xd1\xfe\xdd\xaf\x3d\x71\x74\x4f\x8a\x7a\xa8\x80\x1a\xac\xdd\xad\x15\xda\x31\xba\xb7\x32\xeb\x22\xec\x08\x32\x74\x4e\x74\xf2\x74\x04\x16\x85\xdb\x9b\x13\x85\xe1\x20\xb6\x9d\xc3\x9d\x3c\x3d\x5c\x9d\xdd\xdd\xc3\x53\x14\xd3\x77\xa1\xd6\x05\x5d\xe7\xc1\xd3\x0b\x36\x79\x95\x60\xf9\x6a\x36\x59\x27\x8a\xe9\xc8\x40\x46\xcf\xc5\x75\x11\x66\x75\x5f\x95\x2b\xd8\xba\xd0\x6b\x9d\x61\x08\xde\x42\x8f\x3c\x45\xab\x36\x14\x18\xd4\xeb\x25\x4b\xa1\x17\x98\x8e\x21\x14\xfd\x04\x9b\x47\x4a\x66\xef\xc9\x50\x70\x35\x45\x43\xe1\xca\x96\x22\x63\x5c\x41\x24\x9b\x1c\xec\x63\x04\xc3\xce\x28\x49\x30\xf7\x64\x3e\x0e\x55\xee\x0f\x54\xce\xe6\xc6\x66\xc2\x4f\x29\x48\xc2\x91\xef\x96\xaa\x28\x53\x4f\xc1\xaf\x08\x2a\x54\xbc\x96\x45\x26\x28\xce\x15\x29\xc7\x6a\xd5\x98\x4e\x65\x22\x38\xec\x2c\xfd\x98\x98\x99\x22\x78\x8b\x9a\x7d\x07\x39\x44\x21\xe4\x0c\x39\xe5\x26\xb3\x11\xa9\xf1\x85\x34\xcb\xc4\xc3\x1b\xd4\x0b\xbf\x9c\xc2\x37\x2f\xfe\xe5\xdb\x3f\x74\x4c\x0c\xae\x04\xd3\x1f\x43\xc8\xbf\xe7\xc0\xc0\x63\xa8\xb7\x0b\xb5\x59\xef\x27\xf2\x8c\xcb\x86\xe9\x78\x51\xcf\xa9\x3a\x1a\xb5\x54\xae\x05\x57\x11\x60\x26\x1c\x67\xb5\xfd\xe4\x24\x17\xcc\x69\x86\x4e\x70\x48\xf9\xde\xde\x65\xa4\x6b\xa4\xcd\x17\x2f\x86\x30\x8b\x3c\xdb\x75\x86\x9f\x1e\xee\xc6\x7b\x36\x23\x1d\xfc\x71\xb8\x85\xa9\x74\x40\xbc\x37\x73\x16\xd3\x1e\x24\x39\xb5\xb1\x18\x22\x9d\x98\xa7\xee\x89\x74\xb0\xda\xc9\x21\x49\xa0\x18\x66\x81\xdd\x1d\xa9\x52\x7d\xa4\xf6\xdf\xfe\x53\xb7\xc0\x48\x2d\xb3\x22\x9b\xc2\xf3\x8e\x29\xc1\x22\x3f\x85\x78\x04\x48\x75\x14\x28\xc8\x2c\x2f\xac\xc8\x32\xae\xa5\xc9\x14\xb5\x97\x73\x89\xb6\xa9\x62\xa1\xd0\xc0\x1f\xce\xb9\x8b\xd8\x20\xfe\x57\x2e\x9a\xd1\xa3\x94\xee\xda\x9a\xb4\x48\xd0\x72\xec\x14\x0b\x92\x49\xd3\xf2\x6e\x72\x0c\x5a\x19\x0a\x37\x50\xe5\x6f\x65\x6d\x98\xf2\x3e\x14\x5a\xea\x85\x8b\xc8\x48\x17\xec\x5f\x5f\x1f\x84\x3e\x5b\x2f\x91\x1d\x74\xab\xd2\xcc\x3b\x71\x32\x45\x8b\x29\x08\x58\x14\xc2\x0a\xed\x11\x53\xb2\xab\xfd\xe6\x23\x42\x69\x58\x79\x51\x1f\x9c\x38\x68\x49\xa2\x01\x0a\x96\x9b\x36\x1c\x8f\x65\x84\xa6\xcc\x93\x19\xa0\x8b\xe7\x2f\x7a\xe5\xae\x9a\xd7\xdd\x54\x15\xde\xa3\xd5\x53\xf8\xcf\x4f\x97\xa3\x7f\x17\xa3\xbf\xde\x9d\xc5\x3f\x9e\x8f\xfe\xf8\x5f\xc3\xe9\xdd\xd7\x8d\x9f\x77\xe7\xdf\xff\x43\x07\xa4\xfd\x69\x63\xfd\xb4\x64\x38\xfa\xda\x32\x19\x29\xe5\x63\xc8\x8e\xd8\xcc\xe1\xd6\x16\x38\x84\xd7\x42\x39\x1c\xc2\x47\xcd\x7e\xf2\x0b\x89\xd6\x9d\x39\x87\x67\x04\x03\x5a\xb5\x2b\xde\x8e\x53\x18\xa5\xfe\x39\x11\xdd\xbe\x6e\xc5\x13\x28\x3a\xa7\x12\x66\xde\xb4\x92\x8d\x73\x3d\xc0\xd6\x9a\x72\x97\x71\xcc\x9b\xc6\x89\xc9\x26\x3d\xe7\x7e\x1a\x3b\xe8\x4c\xf0\xe8\x79\x2b\xf4\x06\x6a\x33\x1e\x52\x9a\x6d\x75\x73\x9e\x2c\xae\x48\xac\x71\xae\x3a\x3a\xe3\x40\xc9\x7b\x84\x2a\xf1\x09\xce\x61\x86\x89\xe0\xac\xd0\xce\xa4\xb7\xc2\x6e\x1a\x89\x34\x24\x42\x77\x75\x2c\xc2\x53\x38\x9c\x17\x0a\xce\x1c\x22\x8c\xb5\x49\x71\xd7\xcf\x9c\x07\x6f\x22\x66\x52\x49\xbf\x09\x4d\x8e\xc4\xe8\xb9\x92\x31\x4d\xcd\x72\x63\xbd\xd0\xbd\xed\xea\xd0\x95\x5a\xe0\x03\x48\x1f\x1a\x65\xa1\x96\x7f\x96\x6a\x77\x71\xf1\xe2\x9b\x9b\x62\x96\x9a\x4c\x48\xfd\x3a\xf3\x93\xf3\xef\xcf\xfe\x52\x08\xc5\xbd\x98\x77\x22\xc3\xd7\x99\x3f\x7f\xba\x88\xe3\xe2\xdb\x23\x54\xf9\xec\x53\x50\xd8\xbb\xb3\x4f\xa3\xf8\xd7\xd7\xe5\xab\xf3\xef\xcf\xfe\x63\xdc\x3b\x7e\xfe\x35\xed\xa1\x61\x06\xee\x3e\x8d\x6a\x1b\x30\xbe\xfb\xfa\xfc\xfb\xc6\xd8\xf9\xae\x45\x68\x94\x66\x0e\x56\x59\xde\xd4\x73\x43\x48\x48\x51\xa8\xf3\x22\xcb\x4b\xf3\xd0\x0e\xe3\xb7\xeb\x2e\xd1\x94\x50\x34\xf3\xb1\xeb\xc8\xdb\x41\x32\x1f\x0e\x83\xf5\xf1\xbd\xa0\x76\xbb\xa7\x51\x3a\xdc\x39\x67\x55\xb9\xdb\xd6\xa6\xfe\xb7\xb6\x70\xda\xad\xcc\x0f\x38\x3f\xe2\xf4\xd9\xd6\x17\x8d\x8a\x76\x24\x4c\xbb\x53\x19\x8f\x4e\x56\xad\xcc\xbf\xc1\x41\xb4\xee\xf3\xbb\x7b\xb7\x40\xe9\x57\xd9\xe5\x88\xf2\x18\xf7\xd0\x69\x30\x0e\xaa\x34\x07\x05\xd7\xc2\x2f\xbf\xf4\x00\xc1\x55\x24\x28\x9f\xe4\xe0\x63\x3d\xb9\xc4\x04\x5b\x47\x85\x39\xd6\x45\x91\xc6\x97\x14\xff\x59\x8c\x63\xc3\x10\x5e\x1d\xb0\x3e\xf5\x91\x62\x8a\x29\x41\x90\xb9\x97\x29\xfc\xeb\xcd\xfb\x77\x93\x1f\x4d\x0c\x71\x28\x23\x75\x41\x1b\xb9\x71\x3f\x04\x57\x24\x4b\x10\x8e\x36\x23\x2d\xa6\x37\x5c\x39\xcb\x84\x96\x73\x74\x7e\x1c\xa1\xa1\x75\x9f\x5e\xdc\x75\x9b\xde\x66\xe5\x8f\xb2\x8e\x50\xa3\x8b\xe7\x6b\xa3\x28\xb1\x96\xd1\xe6\x2b\x98\x9c\x08\x30\xaa\xb9\x49\xe3\x26\xd7\xbc\x09\x2f\xee\x11\x4c\xdc\x44\x81\xec\x92\xba\xdd\xf1\x80\x04\xb1\x81\xea\x2f\xa4\xba\xbf\x0e\xe0\x6c\xcd\x5d\xc2\x01\xfd\x1c\x04\x44\xaa\x73\xd5\xf4\xae\x11\xd8\x44\x84\x42\xfe\x65\xe5\x62\x41\x91\x68\xb7\x37\x58\x22\xe0\x0a\xb5\x3f\x67\x0f\x3e\x07\x6d\x1a\x40\x74\xec\xf9\xd7\x9d\xfe\x6d\x04\x3f\xbd\xb8\x1b\xc0\x59\x9b\x0e\x9d\x8b\x49\x9d\xe2\x03\xbc\xa8\x3a\xfc\xb9\x49\xcf\x63\xcf\xd0\x6d\xb4\x17\x0f\x9c\xce\x2d\x8d\x43\x1d\x1a\x97\xde\x84\xbe\x89\x33\x19\xc2\x1a\x95\x1a\x85\x28\x3e\x85\x35\xd7\xc5\x3b\x57\x2a\x59\x15\x0e\x1c\xe5\xc2\xfa\x03\xa7\xd9\xcb\xe7\xf6\xfd\xab\xf7\xd3\x80\x1d\x89\xd1\x42\x97\x95\x93\xb9\xd4\x42\xc5\x5e\x57\x15\x66\x13\xe2\x45\x10\x0e\x6f\x62\xb9\xa4\xec\xcb\xcc\x0b\x5f\xd8\xce\xb8\xe7\xa0\xca\xee\x3b\x42\x5e\x3e\xc7\x6a\x2b\x1f\x29\x3f\xd2\x86\xfc\x86\x07\xb1\x8f\xa6\x89\xee\x38\xcc\xf2\x39\x34\x79\xd7\xd0\x96\x47\xd1\xa4\x76\x5f\x44\x96\xd4\x24\x8e\x28\x92\x60\xee\xdd\xc4\xac\xc8\xbd\xe0\x7a\xb2\x36\xf6\x5e\xea\xc5\x88\xd4\x61\x14\x64\xce\x4d\xd8\x0d\x4f\x7e\xcf\xff\x7d\x09\x09\xd8\x95\x3f\x05\x1d\xc2\x65\x97\xdf\x90\x18\x1c\x93\x4c\x1e\x4b\x8b\x32\xce\xff\x1c\xef\xda\x43\x91\x9b\xb2\x7a\xb0\x05\x97\x54\x3b\x1c\x68\x8a\x97\x64\x1a\x5e\x20\x13\x69\x70\x13\x42\xf7\xe4\xd8\x7f\x63\xcd\x22\x8a\x73\xcd\x29\xd9\x8c\xe2\x8d\xb7\x91\xd0\xe9\xa8\xca\x8c\x92\xae\x63\x91\x07\x49\x5c\xc8\x2f\x36\x42\x1f\xaf\x5e\xfd\xb6\xfa\x56\xc8\xc7\x5a\x9c\x63\x0e\xde\x85\x7a\xe2\x14\xbc\x2d\xca\x18\xde\x79\x63\xc5\x02\xdb\xef\x8a\x59\x95\x96\xd6\x14\x8d\x25\x0c\xf8\x25\x74\x71\xea\xcb\x75\x42\xe5\x4b\xf1\xa2\xfc\xf6\x74\xc5\xae\xc1\xad\xd3\x15\xbb\xd3\x15\xbb\xd3\x15\xbb\xad\xe7\x74\xc5\xee\xef\x73\xc5\xee\x74\x45\xee\x74\x45\xee\x74\x45\xae\xf9\x9c\xae\xc8\xf5\x3d\xa7\x2b\x72\xa7\x2b\x72\xa7\x2b\x72\xa7\x2b\x72\x1d\x4b\x9d\xae\xc8\x9d\xae\xc8\x9d\xae\xc8\x6d\x21\x7b\xba\x22\xf7\xb8\xfe\xea\xff\xef\x6b\x14\xa7\x0e\xff\xff\x8d\x0e\xff\xa9\x67\x7f\xea\xd9\x9f\x7a\xf6\xa7\x9e\xfd\xa9\x67\xdf\x7e\x4e\x3d\xfb\xc7\xd3\xe4\xd4\xb3\xaf\xe9\x70\xea\xd9\x37\x9f\x53\xcf\x7e\xf7\x39\xf5\xec\xbf\xa4\x67\x3f\x17\xca\x1d\xdd\xb4\xff\x9f\x00\x00\x00\xff\xff\x57\x76\xcd\xab\xc0\x58\x00\x00") func operatorsCoreosCom_operatorgroupsYamlBytes() ([]byte, error) { return bindataRead( @@ -205,7 +205,7 @@ func operatorsCoreosCom_operatorgroupsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\xcb\x92\xdb\xb8\xf1\x3e\x5f\xd1\x25\x1f\xbc\x5b\xa5\xc7\xda\xc9\x21\xa5\xdb\xd4\xd8\x9b\x9a\x64\x33\x76\x79\xc6\xbe\x6c\xed\xa1\x45\x36\x45\x44\x24\xc0\x45\x83\xd2\x28\x8e\xff\x3d\xd5\x00\x28\x91\x7a\x0c\x39\xb1\x76\x07\x17\x49\x20\xd0\xef\x37\x85\x95\xfa\x42\x96\x95\xd1\x73\xc0\x4a\xd1\xa3\x23\x2d\xbf\x78\xba\xfa\x1b\x4f\x95\x99\xad\xdf\x5c\xad\x94\x4e\xe7\x70\x53\xb3\x33\xe5\x27\x62\x53\xdb\x84\xde\x51\xa6\xb4\x72\xca\xe8\xab\x92\x1c\xa6\xe8\x70\x7e\x05\x80\x5a\x1b\x87\xb2\xcd\xf2\x13\x20\x31\xda\x59\x53\x14\x64\x27\x4b\xd2\xd3\x55\xbd\xa0\x45\xad\x8a\x94\xac\x07\xde\xa0\x5e\xff\x34\x7d\xf3\xd7\xe9\x4f\x57\x00\x1a\x4b\x9a\x83\xa9\xc8\xa2\x33\x96\xa7\xfb\x6f\x89\xb1\x64\xe4\xa3\xbc\xe2\x8a\x12\x81\xbf\xb4\xa6\xae\xda\xa7\x5b\x67\x02\xa8\x86\x0c\x74\xb4\x34\x56\x35\xbf\x01\x26\x60\x8a\xd2\x7f\x0f\xec\x7d\x88\x30\xfc\x56\xa1\xd8\xfd\xb3\xb3\xfd\x8b\x62\xe7\x1f\x55\x45\x6d\xb1\x68\xe1\xf4\xbb\xac\xf4\xb2\x2e\xd0\xee\xf7\xaf\x00\x38\x31\x15\xcd\xe1\xa6\xa8\xd9\x91\x6c\x44\x76\x23\x0d\x93\xc8\xeb\xfa\x4d\x24\x89\x93\x9c\x4a\x6c\x08\x04\x01\xa5\xaf\x3f\xde\x7e\xf9\xcb\xfd\xc1\x03\x80\x94\x38\xb1\xaa\x72\x5e\x78\x0d\x8d\x60\xa9\xb2\xc4\xa4\x1d\x03\x42\x12\xd0\xee\x08\x9a\xb6\xae\xbb\xad\x10\x66\x16\xff\xa6\xc4\xb5\xb6\x2b\x2b\x87\x5d\x4b\x4a\x61\xb5\x8c\xa4\xb3\x7f\x40\xc7\x7f\x27\x07\x4f\x01\x84\xfc\x70\x13\x52\xb1\x18\x62\x70\x39\x35\x82\xa0\x34\xf2\x0c\x26\x03\x97\x2b\xde\x73\xe0\x6d\x48\xb6\x51\x47\x3a\xa7\x47\xc0\xef\xc9\x0a\x20\xe0\xdc\xd4\x45\x2a\xa6\xb6\x26\xeb\xc0\x52\x62\x96\x5a\xfd\x67\x07\x9d\xc1\x19\x8f\xb6\x40\x47\xec\x40\x69\x47\x56\x63\x01\x6b\x2c\x6a\x1a\x03\xea\xf4\x08\x76\x89\x5b\xb0\x24\x78\xa1\xd6\x2d\x88\xfe\x0a\x1f\xd3\xf2\x2f\x63\x09\x94\xce\xcc\x1c\x72\xe7\x2a\x9e\xcf\x66\x4b\xe5\x1a\x27\x4a\x4c\x59\xd6\x5a\xb9\xed\xcc\xfb\x83\x5a\xd4\x62\x39\xb3\x94\xd6\x54\xcc\x58\x2d\x27\x68\x93\x5c\x39\x4a\x5c\x6d\x69\x86\x95\x9a\x78\x66\xb4\x77\xa4\x69\x99\xbe\xb2\xd1\xed\xf8\x00\x71\x50\x24\x3b\xab\xf4\xb2\xf3\xc8\x1b\xf5\x33\x95\x25\x16\x0f\x4a\x6c\x27\x00\x0c\xcc\xee\x75\x22\x5b\x22\xc6\x4f\xef\xef\x1f\xa0\xa1\x28\xe8\x2d\xa8\xa8\x65\x80\xe7\xb5\x25\x92\x55\x3a\x23\x1b\x6e\x66\xd6\x94\x1e\x2a\xe9\xb4\x32\x4a\x3b\xff\x23\x29\x14\x69\x07\x5c\x2f\x4a\xe5\xc4\x2c\x7e\xaf\x89\x9d\x28\xf2\x18\xf0\x8d\x0f\x3a\xb0\x20\xa8\xab\x14\x1d\xa5\xc7\x47\x6e\x35\xdc\x60\x49\xc5\x0d\x32\xfd\xe9\xba\x13\x1d\xf1\x44\x14\x32\x58\x7b\xed\x90\x7a\x7c\xe1\xc8\x6f\x01\x9a\x80\x78\x56\xdd\x4d\x8c\xb8\xaf\x28\xe9\xb8\x62\x4a\xac\xac\xb8\x8a\x43\x47\xe2\x70\x9d\x40\x38\x04\xb5\x43\x57\xf3\x30\xe4\xfe\x68\x07\xbd\x59\xb0\xd8\x45\x0b\x3f\xea\x7d\x40\x43\x31\x48\xc7\x90\x98\xb2\x32\x5a\xec\x6a\x28\x55\xe7\x83\x19\xf8\xac\xd4\xc0\x3b\x7e\x76\x40\xfb\xcd\xee\x68\xdc\x5f\x10\xef\x8c\x5f\x78\x40\x17\xc0\x31\x05\x86\x4e\x84\xdb\x01\xd4\xca\x12\x2b\x17\x5d\x9c\xa2\x49\xd2\x45\x81\x0b\x2a\xee\xa9\xa0\xe4\x58\x3d\x7d\x1c\xcb\xea\xdc\x3f\x7d\xe4\x80\xf9\x5f\xda\x37\x42\x68\xf0\x40\xe0\xf7\x9a\xec\x16\xcc\x9a\xac\x44\x0b\x72\xa2\xb8\xbd\x50\x6a\xa6\x54\x62\x2e\xfb\x9b\x1d\xb1\xbc\x7e\x42\x99\x03\xc5\x34\x84\x55\xf0\x21\xdc\x25\xf9\xfb\x47\x89\x48\xad\xac\x3b\x80\xeb\xc3\x8b\x91\x71\xc5\x9e\xcd\x20\x00\x6e\x84\x12\x95\x56\xfa\xa0\x07\x0f\x39\x75\x76\x00\x2d\xc1\xf5\xdd\xbb\x53\x41\xe9\x90\x61\xb4\x16\xb7\x4f\x9c\x52\x8e\xca\x27\x99\xe8\x8f\xf0\xdd\x75\xfd\x04\x2f\x31\x0f\x34\x4f\xa2\x99\x6b\x87\x4a\x73\x4c\x82\x63\x40\x58\xd1\xd6\xe7\x4f\x9f\xa6\x1b\xaf\x95\xc3\x3d\xa8\x2d\xf9\x5c\xec\x4d\x63\x45\x5b\x0f\xe2\x5c\x6a\x3d\x96\xd4\x93\xa6\xd1\x20\x78\xca\x97\xf6\x6b\x22\xe8\x7b\xcf\x98\xd3\x31\xb1\xbb\x86\xd8\x64\x58\x2b\xda\xf6\x1d\x39\xd0\xa5\xc8\x48\x71\x2c\x62\x44\x67\xb2\xe1\x95\x22\x5b\x3b\x35\x61\x55\x15\x8a\x4e\xa7\xc9\xc3\x75\x36\xf9\x1c\xaf\x86\xfd\x67\x12\xdd\x6b\x80\x6d\xd8\xdd\xe2\x75\x45\xdb\xd7\x1c\xac\x44\x3c\x30\x57\x95\xc4\x93\x5d\xa8\x19\x62\x2a\x61\x7d\xc1\x42\xa5\xfb\x62\xdd\xfb\xe3\xad\x1e\xc3\x9d\x71\xf2\xf1\xfe\x51\x49\x59\x21\xe6\xf7\xce\x10\xdf\x19\xe7\x77\x2e\x2a\xbd\x40\xec\x1f\x21\xbb\x00\xd9\xbb\xaa\x0e\xe1\x43\x84\xd3\x2e\xde\x78\x0a\xb7\x59\x27\x00\xcb\xe9\x5b\x0d\xc6\x46\x11\x0c\x40\xe3\x2b\xf6\x80\x2a\x20\x29\x6b\xf6\xf5\x96\x36\x7a\x42\x65\xe5\xb6\x27\xb1\x44\xd9\x1a\xdb\x11\xed\x77\x21\x8c\xc8\x1e\xa4\x70\x0c\x4f\x42\xcf\x50\x60\x42\x29\xa4\xb5\x67\xdc\x97\xaf\xd2\xef\xa9\x64\x00\xae\x92\xec\x92\xa0\x92\x90\x3f\x54\xeb\x7d\x81\x3a\xac\x01\xe1\xba\x0d\xb4\xc7\x94\x7c\x4e\xf2\xe9\x78\x78\x1e\xeb\xb1\xa1\x16\xc8\x10\xed\x4b\xac\xc4\x7e\xbe\x4a\x50\xf7\xe2\xff\x06\x15\x2a\xcb\x53\xb8\xf6\x0d\x6e\x41\x9d\x67\x4a\x7b\x45\xb5\xc0\xf4\xa0\xab\x04\x8d\xc4\xe5\x35\x16\x92\x62\xc4\xa3\x35\x50\x11\x12\x8e\xc9\x8e\x12\xef\x18\x36\xb9\xd4\x55\x12\xec\x32\x45\x85\xef\x4e\x46\x2b\xda\x8e\xc6\x82\xfa\x49\x74\x6d\x4b\x1c\xdd\xea\x51\x48\x53\x47\x96\xb5\xcb\x69\x46\x17\x5b\x18\xf9\x67\xa3\xef\xcb\xe3\xbd\xd9\x09\xd3\xd4\x4f\x4e\xb0\xf8\x38\x30\x65\x0c\x30\x91\xc7\xc9\xaa\x5e\x90\xd5\xe4\x88\x27\x25\x56\x93\x68\xab\xce\x94\x67\xfc\xc0\x52\x76\x16\x6d\xc7\x8e\x3e\x51\x16\x04\xd0\x2a\xf5\x32\xb2\xa4\x7d\x01\x6c\xce\xd6\x77\xfb\x8a\x70\x1c\x53\x14\xa5\xb0\x51\x2e\xef\xd6\x95\xe7\x24\xda\xef\x6c\x3d\x2e\xd6\x65\x42\x25\xf9\xa7\x86\xec\x60\xef\x3b\x2e\x42\x6e\x69\xa8\x1d\x03\x69\xab\x92\xbc\x21\x56\x1a\x90\xd0\xe4\x88\xb5\x04\xd5\x3d\x91\x7b\x06\x19\xc1\xb0\x5a\xe1\xfc\xdc\xe5\x09\x46\xaf\x3f\xde\x36\xf3\x95\x30\x56\xa1\x86\xd1\x9e\xb4\x36\x30\xa5\xed\x65\xf0\x0c\xa2\x6e\x76\x97\xda\x79\xbe\x35\x93\xd9\xb5\x7f\xbe\xfb\x6f\x2c\x68\x08\xc1\xfd\xd1\x78\x50\x24\x3e\x4d\xee\x9e\xda\x36\xb1\xb8\x46\x55\xe0\xa2\x68\xda\xd7\x50\xa4\xc4\xe6\x75\x47\xfc\xeb\x60\x36\x27\x06\x0e\xa7\xd8\x18\x50\xd3\x0e\xaf\x6a\xa5\x66\x0d\x26\x3b\xe0\xa0\xe0\xef\x39\x36\xbc\xb4\x95\x2e\x93\xdd\x83\x45\xcd\x5e\x80\x0f\xaa\xa4\x21\x49\xf0\xa0\xed\x64\x07\x4e\x95\x14\xad\xa1\x51\x86\xdb\x81\xa5\x34\x0c\x8e\x8c\xa6\xc6\x37\x7d\x36\x31\x2e\xa7\xb3\x01\xa5\xbd\x9e\x51\xbf\xc9\xca\x8c\x2d\xd1\xcd\x21\x45\x47\x13\xa1\x6c\x90\x18\x3e\xfb\x79\xd4\x45\x45\xb0\x41\x16\x6d\x2c\xe8\x78\x64\xf9\x02\x4c\x96\xc4\x8c\xcb\xe7\x73\x77\x0d\x79\x5d\xa2\x78\x17\xa6\xde\x8f\x22\x20\x50\x3a\x55\x09\xfa\x49\x63\x4a\x0e\x55\xc1\x80\x0b\x53\x07\xef\xdb\xab\xff\xe2\x1a\xb6\x84\xdc\x17\x65\x4f\xf0\x11\xca\x04\xb9\x2a\xc2\xeb\xaa\xea\x35\x7b\x1b\xf8\x23\xa9\x3e\x3d\x7a\xeb\xa5\x3a\x8e\xe1\x76\xc1\x36\x12\x3c\xf6\xde\x64\x32\x78\xb0\x35\x8d\xe1\x67\x2c\x98\xc6\xf0\x59\xaf\xb4\xd9\x5c\x9e\x76\x7f\xf8\xd9\xf2\xde\x56\x9e\xc2\x1d\xcd\x17\x24\xcb\x17\x98\x1f\xd1\xe5\x97\x1c\xb1\xdc\xc6\x5a\xc9\x37\x26\xbe\xca\xa8\x14\x25\xd4\x79\xb1\x01\x4a\xb3\x23\x4c\xe3\x26\x69\xa7\x2c\xc5\x67\xe3\x30\x24\x1f\x24\xd3\xfd\x6b\x10\xa9\x68\x01\xa5\xd0\x55\x29\xfc\xe3\xfe\xc3\xdd\xec\xef\x26\x16\xd0\x98\x24\xc4\x31\x31\x49\x65\x3b\x06\xae\x93\x1c\x90\x9b\x41\xf0\xbd\x4f\x59\x25\x6a\x95\x11\xbb\x69\x84\x46\x96\x7f\x7d\xfb\x5b\x9f\xb4\x7f\x36\x16\xe8\x11\xcb\xaa\xa0\x31\xa8\xd8\x11\x36\x6f\x06\x5a\xa5\x97\x17\xc4\x0e\xb2\xaf\xb2\x3c\xc1\x95\x49\x23\xc3\x1b\xcf\x8a\xc3\x15\x81\x89\xac\xd4\x04\x85\x5a\xf5\xda\xcc\x88\x2b\x4a\x5a\x64\x7f\xd5\x58\xd2\xb7\x11\xfc\xb0\xc9\xc9\x12\x8c\xe4\xe7\x28\x90\xb3\x2b\x5e\x65\xaf\xe5\x0e\x91\xac\x30\x5e\xb1\x6a\xb9\x24\xdb\x1b\x6e\xfd\x1b\x8c\x35\x69\xf7\xa3\x34\xbc\x2a\x03\x6d\x5a\xa0\x3c\x02\xd1\x63\x45\x89\xca\x14\xa5\x47\x64\xfe\xfa\xf6\xb7\x11\xfc\xd0\x95\x49\x0f\x4a\xa5\x53\x7a\x84\xb7\xa1\x0f\x53\x2c\xd2\xfb\x31\xf6\xc6\xbc\xd5\x0e\x1f\x05\x63\x22\x0d\x94\x0e\xdd\x8d\x33\x90\xe3\x9a\x80\x4d\x49\xb0\xa1\xa2\x98\x84\x49\x7c\x0a\x1b\x3f\x39\xe8\x2d\x3e\x82\x0a\x43\x8f\x5d\xa1\x75\x3d\xef\xe7\xba\xeb\xe1\xc3\xbb\x0f\xf3\x40\xa9\x98\xda\x52\x0b\x79\xda\x38\xc8\x94\xc6\x22\x76\x67\x8a\xf7\x8d\x1e\xd7\xc1\x74\x9c\x81\x24\x47\xed\xb3\x83\x97\x73\x56\xbb\xda\xf6\x94\x55\x03\x9d\xfe\xd4\x6b\xb2\xee\x7a\x9e\xbf\xfb\x57\x68\xcf\xaa\xba\x5f\xf0\xf5\xd3\xff\x25\x31\xff\xce\xfa\x82\x12\xbb\x6b\xf9\xde\x77\x48\x6c\xdf\xfc\x8a\xd0\x52\x93\xb0\xc8\x2b\xa1\xca\xf1\xcc\xac\xc9\xae\x15\x6d\x66\x1b\x63\x57\x4a\x2f\x27\xe2\x5c\x93\x60\xb5\x3c\xf3\xff\x12\x98\xbd\xf2\x1f\x97\x12\x10\x57\x98\x5c\x5c\x4a\x1e\xe8\xcb\x8b\x4a\xa8\xe0\xd9\x25\x24\xd5\x34\xdc\xcf\xef\x71\x7b\xe5\x75\x1f\x02\x6d\x72\x88\x43\x82\xc9\x26\x57\x49\xde\xfc\xdd\xa0\x95\x95\x4a\x4c\x43\xda\x42\xbd\x7d\x61\x9f\x15\x7d\xd4\x56\x28\xdb\x4e\xe2\x3f\x68\x26\xa8\x53\xf9\xce\x8a\x9d\xec\x5f\x42\x01\xb5\xba\x68\xf0\xfb\x7c\xfb\xee\xe5\xcd\x73\xf6\xaa\x56\x97\x88\x74\x43\xe6\x69\xe1\xd5\xf5\x1c\x9c\xad\x9b\x5e\x89\x9d\xb1\xd2\x11\x75\xf6\xea\xc5\x6e\x12\xb6\x97\x77\x2c\xde\xe1\xeb\xb7\xab\xff\x05\x00\x00\xff\xff\xbc\xd3\x31\x8d\x85\x25\x00\x00") +var _operatorsCoreosCom_operatorsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\xdb\x8e\xdb\xb8\xf5\x7d\xbe\xe2\xc0\x79\xc8\x2e\xe0\xcb\x26\x45\x81\xc2\x6f\x83\x49\xb6\x98\x76\x3b\x09\x32\x93\xbc\x2c\xf6\xe1\x58\x3a\xb6\x58\x4b\xa4\x96\x87\xb2\xc7\x4d\xf3\xef\xc5\x21\x29\x5b\xf2\x4d\xf2\xc6\xdb\xe1\x8b\x6d\x5e\xce\xfd\x4a\x1a\x4b\xf5\x85\x2c\x2b\xa3\xa7\x80\xa5\xa2\x67\x47\x5a\x7e\xf1\x78\xf9\x37\x1e\x2b\x33\x59\xbd\xb9\x59\x2a\x9d\x4e\xe1\xae\x62\x67\x8a\x4f\xc4\xa6\xb2\x09\xbd\xa3\xb9\xd2\xca\x29\xa3\x6f\x0a\x72\x98\xa2\xc3\xe9\x0d\x00\x6a\x6d\x1c\xca\x34\xcb\x4f\x80\xc4\x68\x67\x4d\x9e\x93\x1d\x2d\x48\x8f\x97\xd5\x8c\x66\x95\xca\x53\xb2\x1e\x78\x8d\x7a\xf5\xd3\xf8\xcd\x5f\xc7\x3f\xdd\x00\x68\x2c\x68\x0a\xa6\x24\x8b\xce\x58\x1e\xef\xbe\x25\xc6\x92\x91\x8f\xe2\x86\x4b\x4a\x04\xfe\xc2\x9a\xaa\x6c\xee\x6e\xec\x09\xa0\x6a\x32\xd0\xd1\xc2\x58\x55\xff\x06\x18\x81\xc9\x0b\xff\x3d\xb0\xf7\x21\xc2\xf0\x53\xb9\x62\xf7\xcf\xd6\xf4\x2f\x8a\x9d\x5f\x2a\xf3\xca\x62\xde\xc0\xe9\x67\x59\xe9\x45\x95\xa3\xdd\xcd\xdf\x00\x70\x62\x4a\x9a\xc2\x5d\x5e\xb1\x23\x99\x88\xec\x46\x1a\x46\x91\xd7\xd5\x9b\x48\x12\x27\x19\x15\x58\x13\x08\x02\x4a\xdf\x7e\xbc\xff\xf2\x97\xc7\xbd\x05\x80\x94\x38\xb1\xaa\x74\x5e\x78\x35\x8d\x60\xa9\xb4\xc4\xa4\x1d\x03\x42\x12\xd0\x6e\x09\x1a\x37\x8e\xbb\x8d\x10\x66\x66\xff\xa6\xc4\x35\xa6\x4b\x2b\x9b\x5d\x43\x4a\x61\x34\x8c\xa4\x35\xbf\x47\xc7\x7f\x47\x7b\xab\x00\x42\x7e\x38\x09\xa9\x58\x0c\x31\xb8\x8c\x6a\x41\x50\x1a\x79\x06\x33\x07\x97\x29\xde\x71\xe0\x6d\x48\xa6\x51\x47\x3a\xc7\x07\xc0\x1f\xc9\x0a\x20\xe0\xcc\x54\x79\x2a\xa6\xb6\x22\xeb\xc0\x52\x62\x16\x5a\xfd\x67\x0b\x9d\xc1\x19\x8f\x36\x47\x47\xec\x40\x69\x47\x56\x63\x0e\x2b\xcc\x2b\x1a\x02\xea\xf4\x00\x76\x81\x1b\xb0\x24\x78\xa1\xd2\x0d\x88\xfe\x08\x1f\xd2\xf2\x2f\x63\x09\x94\x9e\x9b\x29\x64\xce\x95\x3c\x9d\x4c\x16\xca\xd5\x4e\x94\x98\xa2\xa8\xb4\x72\x9b\x89\xf7\x07\x35\xab\xc4\x72\x26\x29\xad\x28\x9f\xb0\x5a\x8c\xd0\x26\x99\x72\x94\xb8\xca\xd2\x04\x4b\x35\xf2\xcc\x68\xef\x48\xe3\x22\x7d\x65\xa3\xdb\xf1\x1e\xe2\xa0\x48\x76\x56\xe9\x45\x6b\xc9\x1b\xf5\x85\xca\x12\x8b\x07\x25\xb6\x13\x00\x06\x66\x77\x3a\x91\x29\x11\xe3\xa7\xf7\x8f\x4f\x50\x53\x14\xf4\x16\x54\xd4\x30\xc0\xd3\xda\x12\xc9\x2a\x3d\x27\x1b\x4e\xce\xad\x29\x3c\x54\xd2\x69\x69\x94\x76\xfe\x47\x92\x2b\xd2\x0e\xb8\x9a\x15\xca\x89\x59\xfc\x5e\x11\x3b\x51\xe4\x21\xe0\x3b\x1f\x74\x60\x46\x50\x95\x29\x3a\x4a\x0f\xb7\xdc\x6b\xb8\xc3\x82\xf2\x3b\x64\xfa\xbf\xeb\x4e\x74\xc4\x23\x51\x48\x6f\xed\x35\x43\xea\xe1\x81\x03\xbf\x05\xa8\x03\xe2\x49\x75\xd7\x31\xe2\xb1\xa4\xa4\xe5\x8a\x29\xb1\xb2\xe2\x2a\x0e\x1d\x89\xc3\xb5\x02\x61\x1f\xd4\x0e\x5d\xc5\xfd\x90\xfb\xad\x2d\xf4\x66\xc6\x62\x17\x0d\xfc\xa8\x77\x01\x0d\xc5\x20\x1d\x43\x62\x8a\xd2\x68\xb1\xab\xbe\x54\x9d\x0e\x66\xe0\xb3\x52\x0d\xef\x70\x6d\x8f\xf6\xbb\xed\xd6\x38\x3f\x23\xde\x1a\xbf\xf0\x80\x2e\x80\x63\x0a\x0c\x1d\x09\xb7\x3d\xa8\x95\x21\x56\x2e\xba\x38\x46\x93\xa4\x8b\x1c\x67\x94\x3f\x52\x4e\xc9\xa1\x7a\xba\x38\x96\xd1\x3a\x7f\x7c\xcb\x1e\xf3\xbf\x34\x4f\x84\xd0\xe0\x81\xc0\xef\x15\xd9\x0d\x98\x15\x59\x89\x16\xe4\x44\x71\x3b\xa1\x54\x4c\xa9\xc4\x5c\xf6\x27\x5b\x62\x79\x7d\x46\x99\x3d\xc5\xd4\x87\x55\xf0\x21\xdc\x25\xd9\xfb\x67\x89\x48\x8d\xac\xdb\x83\xeb\xfd\x83\x91\x71\xc5\x9e\xcd\x20\x00\xae\x85\x12\x95\x56\xf8\xa0\x07\x4f\x19\xb5\x66\x00\x2d\xc1\xed\xc3\xbb\x63\x41\x69\x9f\x61\xb4\x16\x37\x67\x76\x29\x47\xc5\x59\x26\xba\x23\x7c\x7b\xdc\x9e\xe1\x25\xe6\x81\x7a\x25\x9a\xb9\x76\xa8\x34\xc7\x24\x38\x04\x84\x25\x6d\x7c\xfe\xf4\x69\xba\xf6\x5a\xd9\xdc\x81\xda\x92\xcf\xc5\xde\x34\x96\xb4\xf1\x20\x4e\xa5\xd6\x43\x49\x9d\x35\x8d\x1a\xc1\x39\x5f\xda\x8d\x91\xa0\xef\xdc\x63\x8e\xc7\xc4\xf6\xe8\x63\x93\x61\x2c\x69\xd3\xb5\x65\x4f\x97\x22\x23\xc5\xb1\x88\x11\x9d\xc9\x84\x57\x8a\x4c\x6d\xd5\x84\x65\x99\x2b\x3a\x9e\x26\xf7\xc7\xc9\xe4\x73\x38\x6a\xf6\x2f\x24\xba\xd3\x00\x9b\xb0\xdb\xc5\xeb\x92\x36\xaf\x39\x58\x89\x78\x60\xa6\x4a\x89\x27\xdb\x50\xd3\xc7\x54\xc2\xf8\x82\xb9\x4a\x77\xc5\xba\xf7\xc7\x7b\x3d\x84\x07\xe3\xe4\xe3\xfd\xb3\x92\xb2\x42\xcc\xef\x9d\x21\x7e\x30\xce\xcf\x5c\x55\x7a\x81\xd8\x3f\x43\x76\x01\xb2\x77\x55\x1d\xc2\x87\x08\xa7\x59\xbc\xf1\x18\xee\xe7\xad\x00\x2c\xbb\xef\x35\x18\x1b\x45\xd0\x03\x8d\xaf\xd8\x03\xaa\x80\xa4\xa8\xd8\xd7\x5b\xda\xe8\x11\x15\xa5\xdb\x1c\xc5\x12\x65\x6b\x6c\x4b\xb4\xdf\x85\x30\x22\x7b\x92\xc2\x31\xac\x84\x9e\x21\xc7\x84\x52\x48\x2b\xcf\xb8\x2f\x5f\xa5\xdf\x53\x49\x0f\x5c\x05\xd9\x05\x41\x29\x21\xbf\xaf\xd6\xbb\x02\x75\x18\x3d\xc2\x75\x13\x68\x2f\x53\x02\x78\x1e\x49\x0b\x6d\x35\x39\xe2\x91\xa4\xa4\x51\xa4\xc9\x99\xe2\x2c\xbf\x7f\xf0\xa0\xcf\x85\xbe\x0c\xe8\x9f\x3f\x3b\x6c\xb7\x01\x32\x64\x99\x02\x4b\xb1\xdb\xaf\x92\x4c\xbc\xda\xbf\x41\x89\xca\xf2\x18\x6e\x7d\x63\x9d\x53\x6b\x4d\x69\x6f\x20\x0d\x30\x1d\xe8\x4a\x41\x23\xf9\x60\x85\xb9\xa4\x36\x89\x24\x1a\x28\x0f\x89\xce\xcc\x0f\x12\xfe\x10\xd6\x99\xd4\x73\x12\x64\xe7\x8a\x72\xdf\x15\x0d\x96\xb4\x19\x0c\x05\xf5\x59\x74\x4d\x0f\x18\xdc\xeb\x41\x48\x8f\x07\x16\xbd\xcd\xa5\x46\xe7\x1b\x18\xf8\xb5\xc1\xf7\xd5\x0f\x9d\x59\x11\xd3\xd4\xdf\xd8\x60\xfe\xb1\x67\xaa\xea\x61\x9a\x2d\xbb\x2a\xb0\xec\x36\x2b\x4b\xf3\x93\x68\x5b\x76\xf4\x89\xe6\x41\x00\x8d\x12\x73\x4e\x96\xb4\x2f\xbc\xcd\xc9\xba\x72\x57\x89\x0e\x63\x6a\xa4\x14\xd6\xca\x65\xed\x7a\xf6\x94\x44\xbb\x9d\xbc\xc3\xb5\xdb\x4c\xa8\x24\xfb\x54\x93\x1d\xec\x7d\xcb\x45\xc8\x69\x35\xb5\x43\x20\x6d\x55\x92\xd5\xc4\x4a\xe3\x13\x9a\x2b\xb1\x96\xa0\xba\x33\x39\xaf\x97\x11\xf4\xab\x51\x4e\xdf\xf7\x9c\x61\xf4\xf6\xe3\x7d\x7d\xaf\x13\xae\x73\xa8\x66\xb4\x23\x9d\xf6\x8c\x7f\x3b\x19\x5c\x40\xd4\xdd\xf6\x50\xb3\xbe\x68\xdc\x05\x6d\xdb\x4e\x7f\xeb\x50\x5b\x50\x1f\x82\xbb\xb3\x40\xaf\x0c\x70\x9c\xdc\x1d\xb5\x4d\x62\x71\x85\x2a\xc7\x59\x5e\xb7\xcd\xa1\x38\x8a\x4d\xf3\x96\xf8\xd7\xc1\x6c\x8e\x5c\x74\x1c\x63\xa3\x47\x2d\xdd\xbf\x9a\x96\x5a\x39\x98\x6c\x8f\x8d\x82\xbf\x63\x5b\xff\x92\x5a\xba\x5b\x76\x4f\x16\x35\x7b\x01\x3e\xa9\x82\xfa\x24\xdf\xbd\x76\x97\x1d\x38\x55\x50\xb4\x86\x5a\x19\x6e\x0b\x96\xd2\x70\x61\x65\x34\xd5\xbe\xe9\xb3\x89\x71\x19\x9d\x0c\x28\xcd\x71\x51\xb2\x07\x98\x1b\x5b\xa0\x9b\x42\x8a\x8e\x46\x42\x59\x2f\x31\x7c\xf6\xf7\x60\x57\x15\xc1\x1a\x59\xb4\x31\xa3\xc3\xab\xd2\x17\x60\xb2\x20\x66\x5c\x5c\xce\xdd\x2d\x64\x55\x81\xe2\x5d\x98\x7a\x3f\x8a\x80\x40\xe9\x54\x25\xe8\x6f\x38\x53\x72\xa8\x72\x06\x9c\x99\x2a\x78\xdf\x4e\xfd\x57\xd7\xb0\x25\xe4\xae\x28\x7b\x84\x8f\x50\x26\xc8\x51\x11\x5e\x5b\x55\xaf\xd9\xdb\xc0\x9f\x49\xf5\xf1\x2b\xbf\x4e\xaa\xe3\xf5\xdf\x36\xd8\x46\x82\x87\xde\x9b\xcc\x1c\x9e\x6c\x45\x43\xf8\x19\x73\xa6\x21\x7c\xd6\x4b\x6d\xd6\xd7\xa7\xdd\x6f\xbe\x58\xde\x9b\xd2\x53\xb8\xa5\xf9\x8a\x64\xf9\x02\xf3\x23\xba\xec\x9a\x57\x3b\xf7\xb1\x56\xf2\x0d\x91\xaf\x32\x4a\x45\x09\xb5\x1e\x54\x40\x69\x76\x84\x69\x9c\x24\xed\x94\xa5\xb8\x36\x0c\x97\xf3\xbd\x64\xba\x7b\x7e\x91\x8a\x16\x50\x0a\x5d\x95\xc2\x3f\x1e\x3f\x3c\x4c\xfe\x6e\x62\x01\x8d\x49\x42\x1c\x13\x93\x54\xb6\x43\xe0\x2a\xc9\x00\xb9\xbe\x80\x7e\xf4\x29\xab\x40\xad\xe6\xc4\x6e\x1c\xa1\x91\xe5\x5f\xdf\xfe\xd6\x25\xed\x9f\x8d\x05\x7a\xc6\xa2\xcc\x69\x08\x2a\x76\xa2\xf5\x8b\x44\xa3\xf4\xf2\x82\xd8\x42\xf6\x55\x96\x27\xb8\x34\x69\x64\x78\xed\x59\x71\xb8\x24\x30\x91\x95\x8a\x20\x57\xcb\x4e\x9b\x19\x70\x49\x49\x83\xec\xaf\x1a\x0b\xfa\x36\x80\x1f\xd6\x19\x59\x82\x81\xfc\x1c\x04\x72\xb6\xc5\xab\xcc\x35\xdc\x21\x92\x15\xae\x75\xac\x5a\x2c\xc8\x76\x86\x5b\xff\x72\xb2\x22\xed\x7e\x94\x46\x5b\xcd\x41\x9b\x06\x28\x8f\x40\xf4\x58\x52\xa2\xe6\x8a\xd2\x03\x32\x7f\x7d\xfb\xdb\x00\x7e\x68\xcb\xa4\x03\xa5\xd2\x29\x3d\xc3\xdb\xd0\x87\x29\x16\xe9\xfd\x18\x7b\x72\xde\x68\x87\xcf\x82\x31\x91\x06\x4a\x87\xee\xc6\x19\xc8\x70\x45\xc0\xa6\x20\x58\x53\x9e\x8f\xc2\x0b\x40\x0a\x6b\x7f\x63\xd1\x59\x7c\x04\x15\x86\xde\xbe\x44\xeb\x3a\xde\x05\xdb\xe3\xe9\xc3\xbb\x0f\xd3\x40\xa9\x98\xda\x42\x0b\x79\xda\x38\x98\x2b\x8d\x79\xec\xce\x14\xef\x1a\x3d\xae\x82\xe9\x38\x03\x49\x86\xda\x67\x07\x2f\xe7\x79\xe5\x2a\xdb\x51\x56\xf5\x74\xfa\x63\xcf\x73\xed\x71\x99\xbf\xfb\xa7\xbb\x8b\xaa\xee\x17\x7c\xf6\xfa\x43\x12\xf3\x6f\xe5\x57\x94\xd8\x43\xc3\xf7\xbe\x43\x62\xbb\xe6\x57\x84\x96\x9a\x84\x45\x5e\x09\x95\x8e\x27\x66\x45\x76\xa5\x68\x3d\x59\x1b\xbb\x54\x7a\x31\x12\xe7\x1a\x05\xab\xe5\x89\xff\x77\xc2\xe4\x95\xff\xb8\x96\x80\xb8\xc4\xe4\xea\x52\xf2\x40\x5f\x5e\x54\x42\x05\x4f\xae\x21\xa9\xba\xe1\xbe\xbc\xc7\xed\x94\xd7\x63\x08\xb4\xc9\x3e\x0e\x09\x26\xeb\x4c\x25\x59\xfd\x37\x87\x46\x56\x2a\x30\x0d\x69\x0b\xf5\xe6\x85\x7d\x56\xf4\x51\x59\xa1\x6c\x33\x8a\xff\xdc\x19\xa1\x4e\xe5\x3b\x2b\x76\x32\x7f\x0d\x05\x54\xea\xaa\xc1\xef\xf3\xfd\xbb\x97\x37\xcf\xc9\xab\x4a\x5d\x23\xd2\xf5\xb9\x4f\x0b\x4f\xe6\x53\x70\xb6\xaa\x7b\x25\x76\xc6\x4a\x47\xd4\x9a\xab\x66\xdb\x9b\xb0\x9d\xbc\x63\xf1\x0e\x5f\xbf\xdd\xfc\x2f\x00\x00\xff\xff\x9e\xad\x2c\x9c\xfd\x25\x00\x00") func operatorsCoreosCom_operatorsYamlBytes() ([]byte, error) { return bindataRead( @@ -225,7 +225,7 @@ func operatorsCoreosCom_operatorsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\xe4\xb6\x95\x28\xfe\xbf\x3f\x05\x4a\x49\x95\xa4\x6c\x77\x6b\x9c\xcd\x4d\x72\x67\x53\x49\xc9\x23\x8d\x57\xd7\x9e\xb1\xee\x68\xec\xd4\xfe\xb2\xb9\x6b\x88\x44\x77\x23\x22\x01\x9a\x00\xa5\xe9\x6c\xf6\xbb\xff\x0a\xe7\x00\x24\xd8\x2f\x02\xec\x87\x34\x0e\xf1\x87\x3d\x62\x93\x78\x1e\x9c\xf7\x83\x16\xfc\x07\x56\x2a\x2e\xc5\x6b\x42\x0b\xce\x3e\x69\x26\xcc\x5f\x6a\xf2\xf0\x7b\x35\xe1\xf2\xe2\xf1\xcb\x2f\x1e\xb8\x48\x5f\x93\x37\x95\xd2\x32\xff\xc0\x94\xac\xca\x84\x5d\xb1\x29\x17\x5c\x73\x29\xbe\xc8\x99\xa6\x29\xd5\xf4\xf5\x17\x84\x50\x21\xa4\xa6\xe6\xb1\x32\x7f\x12\x92\x48\xa1\x4b\x99\x65\xac\x1c\xcf\x98\x98\x3c\x54\xf7\xec\xbe\xe2\x59\xca\x4a\xe8\xdc\x0d\xfd\xf8\x6a\xf2\xe5\x6f\x26\xaf\xbe\x20\x44\xd0\x9c\xbd\x26\xaa\xba\x57\x49\xc9\x0b\xe8\x69\x22\x0b\x56\x52\x2d\x4b\x35\x49\x64\xc9\xa4\xf9\x5f\xfe\x85\x2a\x58\x62\xc6\x98\x95\xb2\x2a\x5e\x93\xb5\xef\x60\x77\x6e\x2a\x54\xb3\x99\x2c\xb9\xfb\x9b\x90\x31\x91\x59\x0e\xff\xc6\x25\xde\x79\xa3\xc2\xe3\x8c\x2b\xfd\xcd\xca\x4f\xdf\x72\xa5\xe1\xe7\x22\xab\x4a\x9a\x2d\xcd\x16\x7e\x51\x73\x59\xea\xf7\xcd\xd8\x66\x2c\x55\xdd\xfb\xff\xb6\x2f\x72\x31\xab\x32\x5a\xb6\x3b\xf9\x82\x10\x95\xc8\x82\xbd\x26\xd0\x47\x41\x13\x96\x7e\x41\x88\xdd\x2e\xdb\xe7\x98\xd0\x34\x85\x23\xa0\xd9\x6d\xc9\x85\x66\xe5\x1b\x99\x55\xb9\xa8\xc7\x34\xef\xa4\xac\xee\xf5\x35\xf9\x38\x67\xa4\xa0\xc9\x03\x9d\x31\x37\xde\x3d\x4b\x89\x96\xf5\x07\x84\xfc\x4d\x49\x71\x4b\xf5\xfc\x35\x99\x98\x2d\x9e\x98\x1d\xf4\x7e\xc6\xf3\xb9\xc5\x4e\xbc\xe7\x7a\x61\xa6\xab\x74\xc9\xc5\x6c\xdb\xf0\x09\xd5\x34\x93\x33\x82\x60\x44\xa6\xb2\x24\x7a\xce\x88\x19\x8a\x4f\x39\x4b\xdd\xfc\xb6\xcc\x08\x3f\x5d\x99\xd3\xdd\xf2\xe3\xe0\x29\xcd\xa9\x10\x2c\x23\x72\x4a\xaa\x22\xa5\x9a\x29\xa2\x65\xb3\x3f\xdb\xb7\xc7\x7e\xbc\x32\x9b\x37\x2b\xcf\xd7\x4c\x07\x5f\x7d\xfc\x92\x66\xc5\x9c\x7e\x69\x1f\xaa\x64\xce\x72\xda\x9c\xa1\x2c\x98\xb8\xbc\xbd\xf9\xe1\x5f\xef\x96\x7e\x20\xed\xa5\xf8\x20\x4a\x1e\x18\x2b\x54\x73\x29\x48\x55\x98\x35\x99\xc5\x91\xfb\x05\xd1\x25\x4d\x1e\xb8\x98\xc1\xd2\x67\xb8\xde\x37\x78\x30\x6a\xb2\x32\x65\x79\xff\x37\x96\x68\xef\x71\xc9\x7e\xaa\x78\xc9\x52\x7f\x2a\x66\x67\x1d\x26\x58\x7a\x6c\xf6\xc9\x7b\x54\x94\x66\x5a\xda\xbb\x87\xd8\x3c\x54\xd4\x7a\xbe\xb4\xcc\x7f\x8c\x97\x7e\x25\xc4\xec\x0e\x7e\x49\x52\x83\x97\xcc\x82\xe6\xcc\x5d\x17\x96\xda\x2d\x35\x07\xac\xe7\x5c\x91\x92\x15\x25\x53\x4c\x20\xa6\x32\x8f\xa9\xb0\xab\x9c\xac\x74\x7e\xc7\x4a\xd3\x91\xb9\xd2\x55\x96\x1a\x84\xf6\xc8\x4a\x4d\x4a\x96\xc8\x99\xe0\x7f\xaf\x7b\x87\x4d\x34\xc3\x66\x06\x82\x34\x81\x0b\x29\x68\x46\x1e\x69\x56\xb1\x11\xa1\x22\x5d\xe9\x3b\xa7\x0b\x52\x32\x33\x2e\xa9\x84\xd7\x23\x7c\xa2\x56\xe7\xf2\x4e\x96\x8c\x70\x31\x95\xaf\xc9\x5c\xeb\x42\xbd\xbe\xb8\x98\x71\xed\x50\x75\x22\xf3\xbc\x12\x5c\x2f\x2e\x00\xeb\xf2\xfb\xca\x1c\xfd\x45\xca\x1e\x59\x76\xa1\xf8\x6c\x4c\xcb\x64\xce\x35\x4b\x74\x55\xb2\x0b\x5a\xf0\x31\x2c\x46\x20\x92\xcd\xd3\x5f\x94\x16\xb9\xab\xa5\x81\xd7\x5e\x24\xe2\xd0\x66\xe4\x61\x19\x7c\x4a\xb8\x22\xd4\x76\x88\x8b\x6d\xce\xc4\x3c\x32\xdb\xf8\xe1\xfa\xee\x23\x71\x33\xc2\x73\xc3\x23\x6a\x5e\x5d\xb3\x43\xee\xb4\xcc\xce\x72\x31\x65\x25\x7e\x39\x2d\x65\x0e\xbd\x32\x91\x16\x92\x0b\x0d\x7f\x24\x19\x67\x42\x9b\x9b\x9e\x73\xad\x00\xac\x99\xd2\xe6\x20\x57\x3b\x7e\x03\xa4\x8d\xdc\x33\x8b\x23\xd2\xd5\x57\x6e\x04\x79\x43\x73\x96\xbd\xa1\x8a\x1d\xfd\xec\xcc\x19\xa9\xb1\x39\x90\xe0\xd3\xf3\x09\xf7\xea\x07\x2b\xb7\x9e\x10\x47\x72\x37\x1e\xb7\x8f\x82\xee\x0a\x96\xd4\xd7\x91\x0a\x72\x59\x14\x19\x4f\xf0\xc6\xe9\x39\xd5\x24\xa1\xc2\x6c\x27\x17\x4a\xd3\x2c\x63\xcb\xb7\x63\xe3\x2c\x36\xe1\x1f\x02\xc8\x66\x89\x5c\xb9\xc7\x2b\x34\xa3\xfd\x43\x4d\x66\x97\xde\xd8\x84\xab\x4c\xb3\x98\x7f\xf5\x87\x2d\x5b\x4e\x90\x25\x9a\xf2\xd9\xba\xcf\x36\xee\xe5\x1b\xf8\x04\x98\x29\xca\x85\xb2\x5d\x54\x25\xee\x66\x43\x3b\x0d\x35\xa5\x2d\x4e\x62\x15\x0e\xb7\xee\x6c\xd7\x9a\x4d\xa3\x53\x60\xfd\x16\xeb\x7f\xed\x46\x00\xae\xdd\x4c\x9b\x99\x8f\x88\x7c\x64\x65\xc9\x53\x8b\xba\x0b\x99\x9e\x2a\x40\xac\x69\x95\x01\xa1\x92\x42\xe9\x92\xf2\xb5\x97\xde\x35\xc1\x33\xb3\xf8\x31\xd5\x78\x83\x98\x22\x4f\x3c\xcb\xc8\xaf\x84\xd4\xbf\xaa\x47\x80\x01\x64\xc9\x67\xbc\xc6\xce\x8a\x70\xe1\xc6\x05\xb2\x6e\xf9\x12\xa9\xd8\x52\x87\x9b\x07\xff\x5e\x31\xc2\xf2\x42\x2f\x1c\x9a\x3a\xfb\xef\xff\x39\x37\x34\x81\x95\x54\x79\x03\xb6\xfa\xdb\x88\xe9\xb1\x75\x9c\x14\x09\x38\x2d\xd8\x17\x99\xb2\xcb\x8e\x53\x23\xcb\x27\x77\xc5\x90\xfd\x51\xf0\x79\x7d\xea\xfe\xa1\x94\x55\xc6\x54\xcd\xc2\x99\xbd\xdb\xd2\x79\xc0\x5a\x42\xd7\x83\xef\xb1\x29\x2b\x4b\x96\x5e\x55\xe6\x96\xdd\xd5\xb3\xba\x99\x09\x59\x3f\xbe\xfe\xc4\x92\x4a\xaf\x61\x29\xb6\x2e\x7d\x0b\xd0\xba\x66\xf8\x46\xbb\x13\xac\x44\x28\xc3\x19\x01\xeb\x68\x7f\x30\x5b\x02\x6c\x81\xd9\x41\x85\x58\x4f\x51\xcd\xd5\x74\xd1\x39\x80\xd9\xd1\x7a\xcf\xd9\x27\x43\xf1\x80\xf7\xf7\x6e\xbb\x61\xe4\x80\xb8\x71\x96\xa5\x23\x72\x5f\x69\xc2\x35\x50\xbe\x64\x2e\xa5\x5a\xc5\x76\xcb\x8d\xe2\xd1\xc2\xbc\x1e\xb9\x04\xc6\x85\x48\x61\x80\x95\xe4\x86\x5c\x01\xc3\xc4\xfc\xe1\x27\xb0\xf2\xe6\x33\xbe\x4c\x6d\x56\x5b\x2e\x95\x6e\x8e\xcb\x90\x7e\xb8\x80\x82\x91\x27\xae\xe7\xf0\xc7\xac\x64\xc8\x34\xa9\x2a\x37\x83\x3e\x31\x3e\x9b\x6b\x35\x22\x7c\xb2\x86\x92\x2e\x37\x03\x80\x8c\x26\x73\x6f\x5a\x39\x63\x5a\x11\x9a\x65\x6e\x09\x3e\xd4\x22\xf5\xc8\x0d\x03\x41\xce\x1c\x87\xd1\x39\x8a\xe5\x0e\x46\x35\xf5\x59\x06\xbc\xb5\xc7\x35\x22\x4c\x27\x93\xf3\x51\x67\xf7\x89\xcc\x0b\x83\x10\x28\xec\xc1\xfd\x82\x70\x6d\x78\x77\xe4\x86\x4a\x59\xcd\x70\xa7\x58\x66\x27\xee\x78\x59\x38\x7c\xc3\x5c\x82\x34\xb8\x86\xdc\x2c\xb7\x13\xdc\xdc\x13\xc7\xae\x9a\xe1\x38\x6e\x12\xec\x5f\x4e\x75\x32\xb7\x68\x38\x91\x65\xc9\x54\x21\x85\xe9\x19\x7f\xb9\x6e\xd6\xf6\x6f\xe6\x9d\xce\xf1\x4c\xa7\x67\xea\xbc\x39\xec\x39\x9f\xcd\xdd\x59\xd3\x12\xd1\x71\x1b\x46\xba\x8e\x1c\x51\x09\x2d\x4b\xda\x75\x8f\xb8\x66\x79\x07\x22\x21\x3d\x6e\x3f\x21\x97\xc2\x22\xfb\x06\xb0\x3d\x10\xd3\xac\xcc\xeb\x8d\x04\x28\x04\xb4\xa7\x70\x13\x78\x6e\x38\x21\xae\x2d\x98\x93\x57\x01\xe3\x9d\x99\x9b\x40\xb8\x3e\x55\x70\x6b\xc7\xb2\x38\x9f\x90\x4b\x22\xaa\x1a\xf1\x6c\x9b\x82\x90\xf5\x0c\x6c\x47\x66\x5a\x4a\x36\x7d\x75\xe3\xa3\x30\xf4\x8d\x6d\x33\x83\xb6\xda\xc6\x76\xfe\x4c\x04\x5c\x42\xf3\x3a\xee\x5a\xe7\xab\xa1\x84\xc4\xbd\xed\xe6\x10\xf2\xf6\x12\xc4\x5c\xe2\xcd\x51\x2c\x63\x89\x36\xd4\x90\x95\xf9\x88\x50\xa5\x64\xc2\x8d\xa8\xd0\xc0\x7e\xfb\x42\xe1\x4a\xba\xf7\x9e\xc4\xee\x3f\x89\x5e\x3f\x01\x69\xb4\x7d\xbf\x43\xbf\x5b\xd9\x8d\x8c\x2b\x6d\x10\x54\x7b\x57\x5a\x78\xf7\x7e\x01\xbf\x9e\x2a\x92\xd1\x7b\x96\x6d\xe1\xab\x96\x5b\xf8\xe5\x6f\x5a\x20\x1a\xd8\xb0\xa0\x20\x84\xd0\xb4\x65\x68\xf0\xd6\x6d\xe5\xde\x1a\x4e\x40\x0c\x72\x4c\x3d\xb2\x82\x23\x42\xc9\x03\x5b\x8c\x10\xa5\x8b\x5a\x85\x13\x35\x05\xe8\xb8\x64\x48\xd0\x0d\xdc\x3d\xb0\x05\x74\xb8\x9d\xdd\x5c\xdb\x55\x2c\xdc\x61\x8b\xc1\x00\x4d\x1b\x9b\x89\x46\x7e\xd1\x63\x83\xe2\xaf\x06\xb6\x07\xb6\x95\x7d\x5e\xd7\x56\x94\x8d\x00\xee\x70\x1e\x70\x48\x40\x81\x1d\x3c\x50\x23\x22\xb3\xf5\xfa\x87\xed\x6d\xab\xc0\xb9\xad\xb9\xdd\xdb\x69\x5d\x91\x17\xc4\xb4\x0f\xb5\x0e\x07\xe1\xfd\x54\x21\xbc\x1a\xbc\x33\xe7\xa0\xac\x34\x17\x05\xd0\x48\x3c\xd0\x62\xfb\x81\x66\x3c\xf5\x74\xa0\x86\xd9\xb8\x11\x23\xf2\x5e\x6a\xf3\xbf\xeb\x4f\x5c\x19\x1e\xf3\x4a\x32\xf5\x5e\x6a\xf8\x73\x42\xbe\xd6\x78\xf5\xbe\x0d\xc4\xcb\x4d\xeb\x7d\x06\xb8\xbe\x63\x9f\xc0\xa5\x40\x24\x6a\x76\xd8\xd7\xc4\xa9\x89\x91\xcc\x81\x45\xb7\x3b\x67\xb0\xd6\x8d\x30\x42\x01\xee\x5c\xf4\x50\xa0\x8c\x45\x39\x1b\x87\xcc\x2b\x05\xaa\x34\x21\xc5\x18\xd8\xa8\xb5\x63\xe2\x01\x99\x71\xfd\x23\xda\xe3\xf0\x9b\x87\xfe\x5a\x9b\x61\xbf\xd5\x23\xef\xe3\xe8\x71\xbd\xc1\xe6\xf4\x11\x58\x7b\x2e\x66\x59\xcd\xc4\x8f\xc8\xd3\x9c\x27\x73\x94\x1e\x41\x13\xa6\x59\x59\x94\xcc\x70\x0c\x14\x74\x66\xe6\xc9\x8c\x95\xf1\xa0\xff\xd1\x88\x06\x38\x3e\xea\xbb\x33\x9a\xb0\x94\xa4\x20\xb2\xa0\xea\x95\x6a\x36\xe3\x09\xc9\x59\x39\x63\xa4\x30\xa4\xbf\x1f\xc0\xc7\x51\x62\x6c\xd1\xf4\xd8\x1f\x30\xea\x86\x01\x4f\xf3\xd6\xc8\x48\x47\x62\x67\x40\x1e\x1b\xd8\x99\x81\x9d\x19\xd8\x99\x81\x9d\x19\xd8\x99\xe0\x36\xb0\x33\x3b\x0f\x3f\xb0\x33\x3f\x73\x76\xe6\xd3\xf8\xa1\xba\x67\xa5\x60\x9a\xa9\x71\x4e\x8b\xb1\x9d\xb2\x96\x39\x4f\x02\x7a\x40\x7d\x53\x0f\x05\xd7\x9f\x51\x51\xb9\xac\xd1\x02\xe6\xca\xd9\xeb\xdb\xaa\x2d\xc3\x33\xdc\x59\x42\xf0\x11\xd4\x61\xd6\xc2\x56\x52\x31\x63\xe4\xcb\xf1\x97\xaf\x5e\xc5\x28\xbe\x2c\xe8\x04\x7d\x31\x95\x65\x4e\x35\x7c\xf3\xaf\xbf\xde\xfa\xc5\x26\x55\xfe\x71\x6c\x48\xf6\xa2\xd6\x66\x83\x16\x47\xb9\xc1\xcc\x03\x58\x5f\x48\x4d\x72\xa6\x09\xed\x66\x61\x7c\x8d\x30\xcf\xd9\xc8\x59\xea\xf0\x96\x5a\x8f\x06\x67\xaf\x4a\x89\x14\xd6\x2a\x60\xce\xaf\xfb\x7c\x7a\xad\x20\x61\x54\x31\x43\x11\xef\x99\x59\x45\xb7\x95\x4a\x13\x25\x73\x33\x6b\x2e\xb4\xbb\xf3\x66\x09\xcc\x1d\x0c\x39\x63\x93\xd9\x84\xa4\x15\x74\x4b\x85\x75\xd1\x38\xc7\xd5\xaa\x85\xd2\x2c\xef\x36\x53\x19\xda\x51\xc2\xff\xcc\xb6\xe8\x72\x01\xc6\xdb\x47\x26\x74\x45\xb3\x6c\x41\xd8\x23\x4f\x74\xbd\x7f\xe0\x51\xc2\xb5\x0a\xda\xa9\x08\xae\x33\x9c\xd3\x1c\xaf\x5c\xb2\x2e\x9c\x1e\xc3\x28\xae\xf4\x1d\x82\x36\x5a\x37\xe0\x83\x5d\xc9\x64\xa3\x08\xa5\x4d\xbf\x68\x51\x84\x7f\x02\x70\x7f\xf7\xa1\xdb\x00\x44\xa2\xd1\x75\x04\x8a\xee\xc7\x89\x58\x5b\x8c\x2c\xad\x5d\x68\x75\xa5\x6b\xac\x31\xb8\xf6\xd6\xad\x91\xd3\xc0\x01\xf5\x9c\xa1\xfd\xec\xf2\xfd\x55\xd8\x8e\x11\x6b\xb7\xfe\x28\x0b\x99\xc9\xd9\xc2\x3f\x5e\xd8\x4e\xb0\x4c\xd9\x79\xa0\x1b\x09\x72\xac\x06\xe6\xdf\x2f\xc1\xc3\x60\xb5\x18\xac\x16\x83\x98\x0f\x6d\x10\xf3\x07\x31\x7f\x10\xf3\xc3\xda\x20\xe6\xef\x3c\xfc\x20\xe6\xff\xcc\xc5\xfc\xc1\x6a\xb1\x66\x41\x03\x3b\x33\xb0\x33\xd0\x06\x76\x66\xfd\xba\x06\x76\x86\x0c\xec\xcc\x96\x36\xb0\x33\x03\x3b\xd3\x6a\x9f\x83\xd5\xa2\xdf\xb7\x85\x4c\x77\x08\x77\x29\x64\xba\x25\xda\x05\x55\xcd\x89\x1c\x67\x32\xa1\xda\x06\x26\x9a\x4f\xac\x7d\x43\xd1\x1c\xb5\xe7\x23\xf2\x77\x29\x18\xfa\xff\x1b\x48\x02\x1d\xb6\xd4\x73\x56\x9a\xd7\xcf\xd4\xf9\x56\xa7\xeb\x21\x5a\x66\x88\x96\x19\xa2\x65\x36\xb6\x17\x13\x2d\x33\xa7\x0a\xe1\x16\xa9\xc8\xe6\xe0\x19\x0f\x27\x7d\x64\x65\xfe\x33\x8d\x9d\x31\xe0\x6e\xc1\x11\xc2\xea\x1b\x90\xc2\x9d\x49\xad\x29\x99\xa5\xb7\xed\xfd\xb0\x12\x28\x2c\x8a\xa6\x29\x4b\x49\xc1\xca\x31\x82\xa8\x24\x53\x2e\xd2\x35\x6b\x75\xfb\xd3\x8d\x1e\x0e\x18\xbc\xd2\x5e\x47\xd0\x37\x87\x89\x60\x69\x4f\xa4\x87\xad\xcb\x37\xd8\xb5\x88\xe0\x8b\x88\x67\x89\x15\x66\xc7\x44\x5b\x3b\xd7\x37\x81\xe2\x6c\xbc\x44\x0a\x72\xa4\xb3\x8a\xf5\xd4\xd4\x44\x49\x0d\x97\x56\x74\xfd\xa9\x62\xe5\x02\x22\x9a\x1b\x09\xad\xce\xde\x60\x7d\x2d\xb8\x22\x09\x55\x48\x56\x63\xb8\xca\x9b\x29\xc6\x99\x89\x2a\xcb\x46\xd8\xcf\xf2\x65\x75\x68\x0e\xe0\x40\x48\xf3\x7b\xb4\xf2\x28\x52\x9b\xd1\x4f\x5d\xd0\xdf\x38\x48\x96\xcf\x69\xb9\x2b\x54\x23\x39\x2d\x1b\x1e\xcb\x5a\x35\xdb\x1a\x23\x6f\xb4\xd9\x16\x5b\x5f\x5e\xbf\x17\xa7\xbf\xb3\x68\xbb\x65\x4f\x76\x50\xc1\xc1\xcb\xd1\x93\xd9\x8f\x1a\x8e\xf4\x57\xc5\x91\xde\xea\x38\xd2\x4b\x25\x47\xfa\xaa\xe5\xc8\x0e\xaa\x39\xd2\x4f\x3d\x47\x96\xa1\xcd\x9c\x90\x65\x7c\x0f\xa3\xa9\x23\xbb\x68\x8a\xc8\x0e\x1a\x3b\xb2\x87\x8b\xe5\x8f\xef\xe5\xc2\x39\x9c\x0a\x8f\x84\xaa\xf1\xe0\x5a\xb5\x34\x79\xc7\x3e\x97\x7e\x5a\x3c\xb2\xa7\x53\x71\xb9\x44\x40\x6d\x74\x2c\xbd\x1e\x79\x7e\xdd\xde\xd6\x29\xd8\xe1\x83\x95\x61\xbd\x46\xdf\x41\x81\x46\x76\x52\xa2\x91\xfe\x8a\x34\xd2\x1f\xd8\x81\x17\xf9\x16\x5c\x90\x76\xe0\x68\xa2\xa1\xdc\x1b\x16\x29\x78\x4e\x0b\x03\xe1\xff\x6d\x08\x35\x1c\xfe\xff\x90\x82\xf2\x52\x19\x09\xc2\xaa\x59\xfd\xdf\xac\x8a\xcc\xeb\x26\x7a\x02\x85\x19\xd8\xd0\xd1\x47\x9a\x19\x46\x02\xfd\x3d\xad\x9c\x6f\xe6\xb2\xcc\xa6\x8d\xc8\x13\xa4\xf1\x31\x24\x04\xa5\x7f\xae\xc8\xc9\x03\x5b\x9c\x8c\x82\x44\xf0\x76\xf3\x6f\xcf\xc9\x8d\x38\x41\xf6\x64\x05\xf6\x6b\x5e\x46\x8a\x6c\x41\x4e\xe0\xb7\x93\x7d\xf3\x81\x3d\x78\x10\x3f\x61\x64\x5f\x12\xdf\x0b\x64\x77\xf5\x5c\x27\x2d\xe8\xfb\x86\x2d\xfa\xda\xc5\xa3\x60\xfe\x5d\x6b\x44\xc7\xb4\x02\x98\x19\xf9\xb8\xe6\x4d\x30\x5f\x24\xb0\x25\x56\x0f\x84\x2a\x21\x9e\x65\x11\xa3\xdd\x33\xa2\xe9\x03\x03\x83\x83\x84\x84\x57\x3c\x65\x98\xe2\x0b\x41\x07\x46\x32\x20\x53\x29\x48\xda\x49\x32\x29\x1f\xaa\xc2\x81\x9e\xcb\x71\x17\x31\x24\x17\x89\xcc\x9d\x3b\x35\xba\x34\x8e\x6c\xda\xab\x07\xb6\x18\x63\x66\x3e\x7c\x0e\x03\x03\x9a\xb5\xe2\xff\x8f\xdf\xfa\xc2\xef\x8f\x84\x2a\xf2\x23\x30\x6e\x82\x9c\xc1\x87\xe7\x3f\xc6\x58\xb8\xeb\x0d\x44\x0d\xa7\xac\x00\xb3\x30\x43\x90\xec\x04\xd5\xf2\xde\x6e\xdb\xb1\x88\xa1\x5d\xfe\x2a\x7f\x33\x4e\x51\xa7\x7f\x46\x85\xe6\xe7\xb5\x22\x64\x42\x00\x0e\x80\x13\x4d\xa5\x38\xd5\x38\x3f\x87\xd7\x5c\x07\x31\x46\xf0\x7a\xdf\x1b\x03\x14\x6a\xe4\xf1\xc8\x53\x36\xa5\x55\xa6\x6d\x8e\x44\x83\xfa\x80\x9a\x46\x8c\xf0\xd1\xd9\x24\x2c\x53\x3d\x95\xe5\x3d\x4f\x53\x26\xc0\xbb\xdd\x4d\xff\x5e\xea\xf9\x32\xb8\x83\x01\xd6\x3f\xe3\x98\x61\x2f\x33\x25\x47\xcb\x3d\x26\x75\x0e\x45\x73\x8b\x9e\xe6\x4c\xb4\x07\x20\x5c\x99\x4d\x55\x2c\x8a\x71\x04\xce\xc2\xf2\x5c\x59\x31\xa7\x9e\x92\xd7\x22\x5b\x45\x98\xa0\xf7\xa0\x75\x6e\xcf\xe8\x46\x78\x9a\x0d\x32\x65\x54\x57\x25\x23\x33\xaa\x03\xf4\xe8\xae\x1d\xc5\x15\x66\x77\xa4\x9b\x71\xa5\x7b\x61\x5d\xae\x9e\x01\xf1\x2e\x0f\x3a\xe0\xde\x20\xdc\x2b\xa4\x1e\xd0\xef\x67\x8b\x7e\x57\x80\x7e\x1f\x18\x78\xa5\xd3\x01\x09\xdb\xf6\x19\x21\x61\xe1\xd2\xd3\x3e\xb3\xad\x01\xd5\x6f\xe8\x56\xea\xa6\xa4\x1a\xcd\x1c\x44\x39\xf5\xd3\xca\xb9\x18\x30\x80\x21\xe8\x21\x75\x26\xd7\x4a\xd8\x24\xdd\x60\x74\x6d\x86\x45\x84\xb5\x6c\xd9\x8f\x18\xd3\x89\x6e\x52\x30\x05\x8a\x7c\x56\x7b\x71\x78\xc3\x40\xaf\x31\x4b\x81\x38\xb0\x46\x49\x29\xd2\xe5\xc8\xb0\xa6\x6f\xb0\x1e\xe4\x8c\x0a\x45\x4e\x9c\x23\xc9\xa9\x6a\xde\x38\x89\xba\xf0\x2e\x25\x61\x3d\x36\x64\xa0\xf5\xd3\x10\x36\x43\x0f\xd6\x9a\xc1\x5a\xe3\xb7\xc1\x5a\xb3\x3a\x89\xc1\x5a\xb3\xa9\x0d\xd6\x9a\x5e\xe3\x0f\xd6\x9a\x76\x1b\xac\x35\x83\xb5\x66\xb0\xd6\x6c\x6e\x83\xb5\x66\xb0\xd6\x7c\xae\xd6\x9a\x46\xd4\x38\x86\xac\xea\x8b\x85\xd6\xe3\x1b\x2b\x0c\x51\xcd\x93\x26\x14\xd2\xbd\x85\xff\x7a\x2e\xc1\xd5\x17\x35\x77\x15\x5b\x7d\x21\x78\x45\x4b\x10\x2d\xb5\x6e\x94\x51\x6b\x29\x76\x65\x8c\x3d\x89\xaf\x2f\x55\x81\xe3\xf9\x90\x1e\x03\x8e\x3f\xba\x68\x12\x5b\x6d\xec\x9e\x35\xa1\x26\x29\x39\x73\x9a\xd0\x73\x73\x52\x42\xea\xf6\x8f\x42\xf3\x71\xf3\x46\xed\xa3\x0b\x0a\x5b\x97\xaa\x2b\x66\xb7\x1c\x43\xdf\x68\x06\xc5\x52\xad\xbe\x06\x4c\x0c\xe2\x66\x65\x6b\xb6\x5c\xd9\xf2\x4f\x10\x48\x55\x56\x42\x18\xde\x41\x0a\x1b\x48\x11\x31\x13\xa4\x09\xa8\x84\xb5\xd7\x09\x25\x0d\x58\x23\x88\x1b\xcd\x31\x79\x3e\xf8\x54\x63\x6d\x37\x9b\x8d\x47\x0a\xab\xc2\x36\x4f\xb0\x9f\x88\x49\xd4\x37\x0d\xf6\x93\xd7\x2b\x8a\xb9\x64\xd7\x70\xb9\xfc\xc9\x72\x05\xe7\x48\xb3\x4c\x3e\xc5\x10\x96\x48\x50\xee\x9d\xf9\x2d\x18\x7a\x9f\xa2\x53\xc4\x2d\x39\xac\x87\x32\xb2\x43\x1e\xb9\xe5\x36\xe4\x91\x3b\x4c\x1e\x39\xcf\xd0\xe8\x27\x94\xeb\xde\x2b\x48\x38\x77\xd0\x84\x72\x84\xfc\x79\xce\xe0\x22\x94\x0c\xad\x83\x55\xa6\x79\xd1\x84\xb5\x2a\x3c\xa1\x0c\x45\xc6\xa9\x8d\xa9\x6b\x5f\x40\x33\x1b\x9a\xcc\x3b\x87\x5a\xba\xa8\x30\x1e\x84\xc9\x2a\x40\x88\x18\x77\x06\xfa\x65\xcc\xe2\xe6\x64\x49\x0c\xde\xe3\xcf\x1d\x93\x14\x84\xc2\xae\x5c\xa1\x42\xcf\xc8\xac\xc8\x99\x21\x70\xd9\xc2\x9a\x65\x5b\xb8\xac\x45\x19\x03\x06\x40\x3d\xcf\x23\x73\xcc\xe1\x8c\x3f\x32\xd1\x10\xd0\x33\x75\x7e\xee\xf8\xd1\x65\x16\x20\xa0\xf7\x5d\x98\x84\x10\xc4\x1b\x4b\xdc\x97\x48\x76\xc0\x08\x6b\x88\xfa\x1f\x3c\x42\xf9\xc7\x6e\xb2\x1e\x30\x08\x5e\x69\x17\xe4\xe8\x1d\x74\x43\xce\x3b\x7b\x39\x60\x2c\x59\x4c\xc0\x52\x9c\xd6\xb7\x47\xa0\x52\xdf\x34\x88\x87\x0d\x50\x3a\x68\x70\xd2\xe7\x93\xad\xf0\x99\xcd\x5b\x9f\x41\xfa\x9f\x17\x62\xce\x1a\xf2\xff\x6c\x6a\xcf\x95\xff\xe7\xe0\xe6\xaa\xcf\x2e\x0d\xd0\x51\xcd\x53\xc7\x31\x4d\x7d\x66\x69\x80\x9e\xc5\x14\xf5\xc2\x13\x02\x1d\xce\x04\xf5\xb3\xce\xb6\xd3\xd3\xdc\xd4\x1f\x82\x9f\xd5\xcc\xf4\xac\x26\xa6\xe7\x37\x2f\xf5\xe2\x0b\x76\x35\x2b\x1d\xbd\x6c\x45\x1f\xff\xf3\x7e\xf0\x7c\xbc\x80\x9f\x23\x3b\x9c\xbf\x8c\x40\x9f\x67\xf2\x32\x7f\x2e\x0f\xf3\xc3\x7a\x97\x3f\x43\x60\xcf\x91\x82\x7a\x9e\xd1\x97\x3c\x96\xbe\x47\x51\xf5\xdd\x10\x67\x1f\xdf\xf1\x9e\xc1\x3b\x3d\x91\xe7\x31\x83\x76\x7e\x06\xf8\xb3\x57\xb0\xce\x80\x42\x9f\x09\x85\xee\x2f\x38\xe7\x78\x81\x39\x03\x22\xb5\x6d\x67\x44\xda\x33\x00\x67\x6f\x3a\xf4\xc3\x04\xde\x1c\x3b\xe8\xe6\x00\x01\x37\xcf\x11\x6c\x73\x80\x40\x9b\xc1\xf2\x10\xd8\x06\xcb\x43\x68\x1b\x2c\x0f\x9b\xda\x60\x79\x58\x6e\x83\xe5\x61\xb0\x3c\x0c\x96\x87\xc1\xf2\xb0\x3a\xe0\x60\x79\xd8\x38\xf8\x60\x79\xf8\xd9\x5b\x1e\x62\x83\x58\xfa\xc1\xf2\xf3\x04\xaf\x1c\x37\x70\x65\xff\x41\x2b\xcf\x18\xb0\xf2\x92\x94\x1b\xd1\x01\x2a\xfd\x60\xf4\xa5\x04\xa6\xbc\x8c\xa0\x94\x67\x0f\x48\xd9\x35\x18\x65\x3f\x81\x28\x41\xa0\x5a\xc8\xf4\x52\x68\xbe\x6b\x41\x1e\x1f\x86\x36\x55\xe5\xa1\x8f\x92\xa7\xa4\xa8\xb4\x2d\x04\x32\x54\xe6\xe9\x3c\xc6\xe3\x54\xe6\x69\x1d\xde\x50\x9e\x67\x5b\x7b\x31\xe5\x79\x36\x9d\xd9\x50\xa3\xa7\xdd\x86\x1a\x3d\x43\x8d\x9e\xa1\x46\x0f\xb6\xa1\x46\xcf\x50\xa3\x67\xc8\xfa\x36\x64\x7d\x1b\xb2\xbe\x85\x7f\x35\x64\x7d\xdb\xdc\x86\xac\x6f\x31\x6d\xc8\xfa\x16\x3c\xfa\x90\xf5\x6d\xc8\xfa\x16\x37\xf0\x90\xf5\x2d\x78\x02\x43\xd6\xb7\x7f\xda\xac\x6f\x43\x8d\x9e\xcf\xa2\x4e\xc4\x50\x24\x22\xc6\x5d\xec\x45\x15\x89\x18\x6a\xf4\x0c\xe5\x21\x96\xdb\x50\xa3\xe7\x33\xc2\xbd\x43\x8d\x9e\xcf\x19\xfd\x0e\x35\x7a\x06\x24\xbc\xbe\x0d\x35\x7a\x86\x1a\x3d\x9d\x6d\xa8\xd1\x33\x58\x6b\x06\x6b\x4d\xbb\x0d\xd6\x9a\xed\x6d\xb0\xd6\x74\xb5\xc1\x5a\xb3\xb5\x0d\xd6\x9a\xf8\x36\x58\x6b\x06\x6b\x4d\x50\x1b\xac\x35\x83\xb5\xe6\x73\xb5\xd6\x0c\x35\x7a\x86\x1a\x3d\x43\x8d\x9e\xa1\x46\xcf\x50\xa3\xc7\x6b\x43\x8d\x9e\xa1\x46\xcf\xe1\x6a\xf4\xb4\xa2\x6a\x3e\xdf\x42\x3d\xf1\xcb\x18\xaa\xf5\x0c\xd5\x7a\x36\xb4\xa1\x5a\xcf\x50\xad\x67\x5d\x1b\xaa\xf5\x0c\xd5\x7a\xb6\xb4\x21\x67\x5e\x60\x1b\x72\xe6\x85\xb6\x21\x67\xde\xa6\x36\xe4\xcc\x5b\x6e\x43\xce\xbc\x21\x67\xde\x90\x33\x6f\xc8\x99\xb7\x3a\xe0\x90\x33\x6f\xe3\xe0\x43\xce\xbc\x9f\x7d\xce\xbc\xa1\x5a\xcf\x8b\xac\x36\x31\x94\x9a\xe8\x68\x2f\xa7\xd4\xc4\x50\xad\xe7\x9f\xb3\xc8\xc4\x50\xad\xe7\x05\xe3\xcf\xa1\x5a\x4f\x77\x7b\x39\x28\x74\xa8\xd6\xf3\xcf\x8c\x48\x87\x6a\x3d\x43\xb5\x9e\xba\x0d\xd5\x7a\x06\xcb\xc3\xc6\x36\x58\x1e\xc8\x60\x79\xa8\xdb\x60\x79\x08\x1a\x77\xb0\x3c\x0c\x96\x87\xc1\xf2\xb0\x7d\xd2\x83\xe5\x61\xcb\x70\x83\xe5\x61\xb0\x3c\xac\x69\x43\xb5\x9e\xcd\x6d\xa8\xd6\x33\x54\xeb\x19\xaa\xf5\x0c\xd5\x7a\x0e\x59\xad\x07\x34\x9a\xc8\xc5\x6f\x02\xce\x50\x70\xbc\x6c\xba\xb2\xdc\x6a\x25\x94\x2e\xab\x44\x57\x25\x4b\x61\xcf\xf1\x3c\x0c\x61\x56\x5a\x96\x4e\xfd\x0e\xa5\x4f\xae\x58\x91\xc9\x85\xa1\x76\x23\x72\x2b\xd3\x11\xb9\xbc\xbd\xb9\x63\xe5\x23\x4f\x98\x03\xa0\xef\x2c\x4d\xdd\xbc\xf4\x8f\x8b\x82\x27\x34\xcb\x40\x3a\x6f\x66\x93\xd3\x85\x53\xda\xde\x2f\x08\xfb\xa4\x59\x29\x68\x46\xb4\x94\x19\xda\x39\xcc\x64\xac\xd2\x55\x97\x9c\x3d\x32\x42\xcb\x7b\xae\x4b\x5a\x2e\x48\xce\x34\x4d\xa9\xa6\x9b\x47\xfd\x5e\x31\x3f\xea\x41\x4b\x52\x94\x6c\x8c\x40\xdc\x9a\x07\x80\xd7\x77\xdf\xbe\x73\x57\x94\xa6\xa9\x73\xf1\x77\x40\x7a\x57\xdd\xd7\xbb\x7d\xba\x99\xdb\x49\xeb\xdd\x52\x23\x80\x30\xab\x8e\x28\xb8\xc2\x3d\xdb\x28\x7d\x05\xb0\x05\x71\x4c\x40\x27\x88\x31\xf1\xb8\x2b\x68\x5d\x8b\xc7\xb6\x16\x8b\x89\x47\x5e\x4a\x01\x7c\xdc\x23\x2d\x39\xbd\xcf\x98\x35\x59\xd5\x86\x0c\xcb\x5b\xb1\x2d\xf0\xf2\xa6\x56\xe8\x63\xf8\xc8\xc6\x5b\xd5\x4d\x4f\x3a\x28\x48\x6b\xa5\xd7\xe2\xf1\x07\xda\x16\xa9\xc5\xda\x25\x11\xfb\x82\x59\x12\x25\x6f\xba\x17\x14\xc4\xf4\x85\xa8\x7e\xc6\x80\xa4\x37\xbe\x10\xa6\xa0\x31\x5d\x6c\x27\x79\xad\x6d\x79\x4f\xf3\xa6\x62\xd3\x9a\xdd\x98\x90\x77\x56\x0c\xa4\xe4\xcd\x7f\xdd\x5c\x5d\xbf\xff\x78\xf3\xf6\xe6\xfa\xc3\x76\x54\x18\x48\xad\x01\x35\x45\x4c\xb6\x93\x2e\xff\xe0\xce\x10\xaa\xe2\x30\x61\x18\x9f\x5f\x9e\xfd\x70\xf9\xe1\xbf\xde\x5f\xbe\xbb\x3e\x07\x96\x9e\x7d\x2a\xa8\x48\x59\x17\x8b\x56\x29\x17\xd3\x52\x94\xec\x91\xcb\x4a\x65\x8b\x9a\x48\xae\xbf\x0a\xcb\x77\xc0\xa0\x87\x8e\x51\x0c\x89\xb3\xd8\x63\x7d\xa7\x20\xf2\xd3\x06\x38\x1b\x73\x58\xc9\x94\xcc\x1e\x59\xda\x25\xe9\x43\x80\xa0\xdb\x8e\xc6\xe0\x58\x54\xda\x29\x34\x9c\x0d\xb1\x12\xc9\x9c\x8a\x19\x4b\x27\xe4\x4a\x56\x66\xb4\x5f\xfe\x12\xb6\xac\x64\x69\x95\x74\xee\x18\x6a\xa3\x50\xa0\xfc\xe5\xc8\xd1\x70\x43\x39\x15\x56\xdb\x52\x09\x2d\xdc\xa6\xfa\xa7\xa2\x16\x42\xd3\x4f\xaf\x43\xea\x76\x9d\xfc\xd2\xfb\xf0\xc4\xd5\x51\x93\x66\x7a\xc8\xef\xe0\x8a\x32\x28\x81\x95\x91\x13\xff\xed\xae\xbe\xaf\xcd\xfc\x58\xea\xc3\x0e\xc6\xf2\xb1\x47\x56\x82\x22\xc4\x42\xce\x88\x94\x6c\x46\xcb\x34\x63\x0a\xa2\xc8\x9e\xe6\x0c\x8a\xda\xa1\xa4\x89\x07\xd5\x31\x16\xab\x95\x36\x42\x76\x2a\xd3\xae\xd0\x9c\x0b\xb8\xf6\xa4\x63\x19\x31\x37\xef\x6d\x29\x3b\x4a\x23\xb5\x6e\xdf\x1d\x84\xa9\xd4\x46\xef\x75\xe0\x7a\x6a\x15\xf6\x13\x1f\xcb\x2b\xc3\x60\x4e\x1b\x63\xb4\x79\x1e\x60\x90\x0e\x96\xa5\xc3\x15\xd7\x89\x14\x53\x3e\x7b\x47\x8b\x6f\xd8\xe2\x03\x9b\x46\x46\xcc\x21\x6f\x6d\x55\xb1\xc0\xb1\x1a\xea\x80\x1d\x76\x73\x86\x07\x0c\x90\x0a\x31\x0f\xc4\x69\xf7\x83\x75\xfa\x2b\x05\xcf\x90\xcb\xb7\x9c\xf8\x1e\xab\x5b\x36\xad\x9b\xc0\xad\x9d\x5c\xb0\x4c\xe7\x53\x44\x8b\x0a\x82\xd5\xdd\xef\x24\x04\x81\x4e\xe5\x6b\x32\xd7\xba\x50\xaf\x2f\x2e\x1a\x55\xcb\x84\xcb\x8b\x54\x26\xea\x22\x91\x22\x61\x85\x56\x17\xf2\xd1\xa0\x7e\xf6\x74\xf1\x24\xcb\x07\x2e\x66\x63\xc3\x9a\x8f\x11\x46\xd4\x05\x48\x6c\x17\xbf\x80\xff\x85\xca\xa3\xdf\x5d\x7d\xf7\x9a\x5c\xa6\xa9\x2d\xb3\x59\x29\x36\xad\x32\x5b\x4f\x6e\x62\x58\xd5\x1f\x58\xa9\xb8\x14\x23\xf2\xc0\x45\x3a\x22\x15\x4f\xff\x74\x88\x43\x92\x05\x32\xb3\x3d\x0e\xea\x0e\x44\xd6\x45\x0b\xab\xd6\xf7\xcc\x60\x4c\xae\x15\x80\x99\xd3\x4f\x5b\xa2\x1c\xb1\x8c\x7b\x29\x33\x46\xbb\xbd\x7c\x76\x51\x94\xc1\x9e\xc7\x23\x99\x20\x30\x6d\x30\x11\x4a\x3f\x16\x5a\x0b\x99\xbe\x26\xaa\x2a\x0a\x59\x6a\xd5\xc8\x50\x06\x80\x46\xed\x3f\x41\x11\x30\x22\x3f\xd6\x0f\xd1\x9b\xe8\x2f\xa7\x7f\xf8\xe6\xfa\x3f\xfe\x78\xfa\xd7\x1f\xfd\xdf\x3c\x69\xca\x7b\x21\x60\x9a\xaa\x60\xc9\xc4\x88\xf4\xef\x61\x06\xf0\xa7\x65\x76\x2e\x93\x44\x56\x42\xdb\x1f\x34\xd5\x95\x9a\xcc\xa5\xd2\x37\xb7\xf5\x9f\x85\x4c\x97\xff\x0a\x30\x6f\x1d\x10\xcd\xc2\x5e\xdf\x52\x1d\x10\x1a\x1e\x85\x6c\x9b\x5b\xd9\xe3\xb6\xd8\x2f\xfd\x8a\xa5\x39\x85\x7f\xbe\x75\xd3\x35\x34\xf7\xa9\xe4\x5a\x83\xab\x9b\x8d\x46\x97\xd3\x91\x73\x13\x43\xbe\xe2\xf1\xcb\x28\x35\x5f\x30\x26\xa8\x77\xad\xc7\xe2\x60\xf6\x76\x65\xb5\x9c\x6f\x1d\xfd\x56\x14\x5c\x97\xb7\x37\xe4\x11\x77\xe3\x00\x0b\xd9\x05\x15\xb8\x08\xdf\xb7\x47\x41\x09\x6e\x34\xb7\x71\xb5\x38\xf2\x1a\x0d\x1e\x75\xbc\x31\xc9\x78\xce\xad\x6d\xd7\xd6\xa9\x0d\xa1\x33\x67\xf8\xd9\x24\x29\xaa\x91\xed\x62\x92\xb3\x5c\x96\x8b\xfa\x4f\x56\xcc\x59\x6e\x18\xf0\xb1\xd2\xb2\xa4\x33\x36\xaa\x07\xc0\xcf\xea\xbf\xf0\xc3\xd6\x14\x56\xbf\x46\xb9\x2d\xa9\x4a\x43\x8a\xb3\x85\x43\x71\x21\xfa\xb8\x03\xa2\x83\xe0\x1a\xc0\x71\xd8\xa0\x3e\xae\xf7\xfd\xf8\x9c\xd3\x5a\x63\x81\x9c\x52\xbd\x2a\x60\xdc\x1f\x65\x56\xe5\x4c\x8d\x6a\x02\x8d\x92\x99\x78\x34\x2c\xbc\x3a\x3d\x04\x02\x48\xf9\x23\x57\xbd\x5c\x03\xef\x6a\xb3\x0f\xd8\x48\x2a\x6d\x64\x56\x4c\x44\xe3\x15\x99\x96\x0a\x64\xb6\x3a\x88\xbe\x85\xd5\xbe\x3c\x09\x1a\xb6\xa0\x5a\xb3\x52\xbc\x26\xff\xef\xec\x3f\xff\xe5\x1f\xe3\xf3\x3f\x9d\x9d\xfd\xe5\xd5\xf8\x7f\xff\xf5\x5f\xce\xfe\x73\x02\xff\xf8\xd5\xf9\x9f\xce\xff\xe1\xfe\xf8\x97\xf3\xf3\xb3\xb3\xbf\x7c\xf3\xee\xeb\x8f\xb7\xd7\x7f\xe5\xe7\xff\xf8\x8b\xa8\xf2\x07\xfc\xeb\x1f\x67\x7f\x61\xd7\x7f\x0d\xec\xe4\xfc\xfc\x4f\xbf\x0c\x9a\x1e\x15\x8b\xef\x02\xb0\x06\xb6\x71\x8f\xec\x3e\xcd\x57\x7d\xcd\x88\x5c\xe8\xb1\x2c\xc7\xf8\xf9\x6b\xa2\xcb\x2a\x44\x69\xef\x8e\xad\x0f\x9c\xbb\x0a\xbd\xaf\x1b\x8c\x57\x53\x87\x03\x00\xf2\x2e\x04\x40\xb1\xa4\x64\x7a\x5f\x42\x27\xf6\xe6\x08\xe0\x92\xad\x6e\x90\x43\x1b\x39\xb4\xce\x68\x02\xfb\xd5\xb0\x0e\xd3\x52\xe6\x13\xe2\x29\x36\x1f\xc1\x07\xca\xbe\xf7\xc0\x02\x3d\xe5\x07\xb9\x75\x90\x5b\x3b\xe4\xd6\x3b\x04\xa9\x17\x2e\xb4\x32\xf1\xb8\x4d\x15\x18\x61\x30\x7a\x0b\xd9\xba\x7c\xa3\x91\xe3\x35\xb5\x24\x85\x2c\xaa\x8c\xea\x0d\x8a\xee\x08\x0b\x52\x1d\xc8\xe4\xd4\xf1\x06\xfc\xc0\x5a\x63\xe9\x40\xbe\xde\x64\x41\x2e\xb3\x8c\x70\x81\xb7\xdd\x74\xb0\x71\x04\xa7\x11\x2f\x19\x32\x9a\x84\xa2\xb9\xe8\xd1\x4c\xf9\xc9\xe6\x18\xf3\x14\xfd\x5c\x19\x39\xb5\xd4\x5c\xcc\x26\x98\x83\x0c\xf1\xb5\x55\xf3\x72\x51\x67\x22\xdb\x38\x64\xcd\xbf\xd4\xfe\x4a\x6b\x8b\xcc\x67\x54\x69\xb7\x4c\x98\xa5\xa6\x0f\x60\xa2\x48\x58\xca\x44\xb2\x45\x81\xfe\x03\xfa\x40\xb9\x3d\xbb\x37\x5c\x37\x18\xf9\xa0\x6f\x4a\xd2\xaa\xc8\x78\x62\xce\xc7\xcc\x3c\xae\xef\x9b\x3c\xaf\x34\x98\x8b\x8e\x65\xcb\x33\x90\x66\x15\xd2\x9e\x49\x0f\xd0\x7d\x2d\xfd\xd4\xbe\xb1\xb5\xfa\x68\xf3\x89\x07\x91\xc5\x30\xe2\x55\x6b\x99\x3b\xa9\xfd\x0a\xd5\x6a\xf4\x5c\x6d\x6a\x75\x6c\x45\x79\x18\xad\x8a\xa7\x53\x7d\x69\xd4\x73\xd2\xa7\xc3\xd0\xa6\x08\xba\x14\x4e\x93\x22\xf4\xa8\xb1\x74\x28\x9c\x06\xf5\x65\x94\x8b\x92\x4d\xf9\xa7\x88\x0b\x73\x29\x1a\x29\x96\xa7\x4c\x68\x23\x2b\x96\xd6\x15\xa4\x60\xa2\xf1\xf3\xb0\x71\xf9\xad\x1d\x38\xa8\x61\x1b\x59\xc9\xf8\xfb\x7f\xb7\x8e\x55\x1d\x2e\xff\x70\xf9\xf7\x71\xf9\x2d\x70\xbd\xa4\x9b\x2f\x64\xda\x19\x3b\x1a\x0a\x68\xef\xbd\xbe\x96\x42\xca\xd0\x15\xc1\x2d\x5c\x97\x55\x63\xc5\x2e\x24\xa0\x89\x29\xd7\x8d\xbb\xe3\x66\xa0\xbc\x5b\xd3\x23\xf8\x31\xda\x2f\x4f\x95\x8b\xcb\x5e\xea\x7f\x29\x17\x30\x7a\xa5\x6d\x1f\x2b\x12\xec\x91\xeb\xa8\x30\x7e\xfd\x82\x2a\xc5\x67\x62\x5c\xc8\x74\x6c\x46\xb9\xd8\xca\x96\x1d\xd3\x31\xad\x56\xd4\xed\x7a\xdc\x1f\x6a\x35\xb6\xc7\xff\x25\x32\x2f\x2a\xcd\x3c\x1d\x77\xad\xfd\x74\x91\xb9\x01\xf2\x45\x27\x37\xbb\xe3\xe1\xe4\x54\xd0\x19\x1b\xdb\xc9\x8e\xeb\xc9\x8e\xeb\xb9\xed\x70\x5e\x21\x78\x3e\xc9\x28\xdf\xee\x7a\x1d\x83\xdd\xdf\x40\x6f\x36\xa9\x72\xed\x1b\xbf\x94\xda\xd4\x89\x1d\x5c\xa0\x1d\xd0\xfd\x84\x1f\x6f\xb7\x26\xc2\x65\xa9\x93\x56\xac\x39\xc8\x2f\xb6\x7e\x1e\x15\xef\xdf\xe5\x6c\x7c\xb5\x10\x34\xe7\x89\x83\xbe\xcb\x0c\x5c\xa8\xb9\x14\x4b\xd9\x00\x02\xa6\x54\x07\xbb\xf0\x1a\xde\xc8\x8d\x26\x09\x15\x68\xa8\xb1\xde\xb3\x06\x93\xd4\x6b\xdd\x6a\x01\x0d\x73\xc0\x0f\x70\xbb\x6f\x9d\xfe\x07\xff\xa4\x7c\xe7\x28\x29\x8c\x28\xaf\x4b\xe0\xad\x6e\x65\x6a\x68\xce\xa4\xf5\x76\x87\xbd\x36\x98\x77\x09\x55\x43\x76\x38\x50\x92\x97\xc3\x06\x79\x94\xc3\xdd\x18\x73\x61\x5a\x5b\x5a\xc8\x74\xb2\xe6\xae\x84\x27\x8e\xbe\x95\xa9\x75\xf5\xd7\x2d\x78\x33\xd7\x08\x40\x2d\xa7\x0f\xce\x01\xbf\xd6\xa1\xd3\x47\xca\xb3\x00\x0f\x36\x02\xf9\x5f\x14\x4f\x0d\x03\x1d\x80\x54\xeb\x89\x85\xf1\x3e\xab\xb9\x29\x0c\x43\xf1\xd0\x99\xac\xa7\x13\x04\x36\x25\xbd\xc8\x69\xb1\xf1\x2b\x34\x6b\xee\x0b\x5f\x7e\x8b\x66\x57\xfc\xe4\xde\x5a\xb7\x72\xfa\x89\xe7\x55\x4e\x68\x2e\x2b\x8c\x93\x5b\xa5\x65\x41\x51\x08\xfb\xa0\x4c\x6b\x28\x92\xda\x44\x92\x48\xf8\x45\x8e\x0f\x74\x7b\xa1\x76\xb9\x20\x7b\x5c\x9c\x1d\x2e\xc2\xfe\xd6\xdb\xee\xe6\x2c\xec\xfb\x02\xe4\x0f\xb6\xbf\x65\x50\xe6\xa2\x13\x94\x1d\x46\xdf\x0e\xcb\x37\xd3\x66\x0c\xae\x88\xcc\xb9\xd6\xd6\x90\xed\xe1\x9c\x11\xe1\xba\x65\xf5\xb5\x17\x8c\x4f\x11\xb5\x71\x45\xd8\xa7\x22\xe3\x09\x07\xe7\x01\xe7\x30\xb2\x9d\xe7\x00\x71\xef\x89\x63\x29\x0d\x2a\x08\xcf\x0b\x0c\x61\x85\x8b\x32\x76\xec\x8c\xf5\x76\xad\x67\x69\xdd\xb3\xd9\xa7\x84\xb1\xd4\x4e\x64\xb8\xaf\xc3\x7d\x8d\xbe\xaf\x6a\x4f\x52\xb1\x2f\x11\x37\x01\x79\xb5\x64\x6c\xae\x12\x04\xcb\xa1\x8c\xea\xa0\x6b\xdb\xc5\xbc\x76\x49\xd5\x3e\x30\x30\x18\xdc\x31\xad\x6c\xe8\x1f\xf4\x44\xcb\x2d\x46\x8e\xe5\x3c\x49\x75\x22\x36\x17\x04\x4b\xa7\xd3\xf6\x1b\x4d\xd4\xd5\x16\x81\x4d\x2f\x33\x54\x20\x76\xb3\xbc\xc8\xa8\x6e\x84\xf2\x1d\xc2\xb3\x42\xd8\xc6\x98\x54\x42\xcf\x9b\x3c\xe8\x30\x82\x42\x27\xf7\xfb\x8c\x49\x80\xfa\xa6\xfd\x39\x80\x88\xd2\xed\x25\x11\x98\xbe\x27\x5c\x94\x09\x72\xa3\x38\x74\x52\x9e\x28\xa5\x67\x68\xe2\x9d\x78\xf1\xeb\xc0\xc9\x75\x0e\x95\x4e\x27\x62\xf7\x42\x53\xe6\xc4\xef\xdd\x91\xd2\xe2\x1c\x3d\x11\xce\x31\x53\xdf\x44\x25\xbb\x89\x49\xa9\x10\x9c\x4e\x21\x08\x94\x02\x93\xd6\xc4\xc0\xd0\x91\x13\xd3\x1c\x39\x15\xcd\x73\x24\x9f\x39\x18\x1f\x1f\x00\x22\xf1\xc6\x1e\x2d\x33\x9b\x5e\x37\x4c\xf9\xff\xb1\x79\x1f\xb6\xa3\xf1\x76\xf4\x7a\x3a\x8e\xc3\xc9\x56\xc8\xfe\xe8\xf8\x4d\x83\x25\x9a\x49\x03\x8c\x6b\x4d\x93\xb9\x4d\x21\x83\xbf\x18\x48\x10\x0b\x62\x80\x40\x23\x45\xb5\x89\x30\xb6\x9d\xf3\x9c\x11\x5d\x42\x21\xc3\x3f\xd4\x17\x62\xc4\x80\x55\xfe\xa3\x17\xa9\x5c\x97\xe2\xab\x81\xf1\x0f\xee\x5f\x7f\xdc\x31\x7e\x3d\x8c\xd9\xc0\x29\xed\x93\x67\xbc\x86\x1e\x09\x17\x29\xf8\x26\x21\x4b\x82\x9b\x87\x83\x99\xad\x85\x75\x4f\x6c\xfa\x0e\x4c\x64\x63\xad\x72\xe0\xc4\xd4\xbc\xdc\x49\xc2\xc1\x77\xab\x51\x11\x38\x95\x5b\x73\x87\x19\x79\x2f\x6d\x4d\x53\x36\x22\xb7\xa0\x0e\x6f\x9e\xc0\x9d\x7f\x2f\xb1\xba\x69\x47\x30\x73\x20\x45\xef\xe4\xdd\xe2\xf6\xf3\x9b\x86\xb1\xc3\x8d\x69\x31\x76\xcd\xc5\xf2\x59\xbb\xad\x1b\xfb\xc0\x16\x9d\xbb\x6a\x89\xb5\x65\x2a\x81\xa8\x8e\x1a\x18\x75\xc4\x16\xe9\xf7\xbf\x39\xeb\x4e\x7e\xcf\x05\x4e\x05\x07\x76\xe7\x0c\x63\xbb\xf3\x30\x92\x40\x96\x05\x4c\x22\x70\xb7\xc3\x38\xcf\xb8\x2d\xff\x2e\x82\xe3\xac\xe9\x45\xd7\x96\xae\xe3\x33\x3d\xe6\xf2\xfa\xa7\x8a\x66\x93\x56\xe4\x38\x3e\xea\xba\x6e\xd6\x61\x71\x99\x6e\x3e\xf1\x2c\x4d\x68\x69\x83\x48\x00\xfd\x10\x25\xad\x65\x0e\xb0\x5f\xd2\xe9\x9a\xea\x10\x60\x03\x3c\x0a\xbd\xf4\x0a\x5a\x6a\x9e\x54\x19\x2d\x89\xb9\xe3\x33\x59\x06\x85\x86\x77\x1e\x66\x03\xcd\x77\x2c\x91\x22\xdd\xab\x30\xfb\x71\xb9\xf3\x65\x3f\xc4\x82\x95\xdc\x96\xd5\xe4\x39\x5b\xbe\x5e\x67\x2d\x9f\x84\x2e\x79\x68\xea\x90\x5d\x8d\x5b\x46\xbe\x86\xb2\x6d\x4d\xc4\x4c\xf0\xe7\x1e\xc1\xa9\x6f\xfb\x84\x7c\xb5\x70\xaa\xd2\x2e\xc6\x98\x6b\x17\xac\xaf\x98\x76\xe9\x1c\xdc\x55\xb4\x27\xd9\xa0\x91\xa9\x2c\x21\x4d\xc2\x59\x2a\x31\xc0\xff\x91\x27\xfa\x7c\x42\xfe\x3f\x56\xca\x80\x3c\x18\x82\xcd\xb0\x0e\xac\xbd\xd8\xb5\x5e\xa8\x64\xd4\xfa\xdf\xbe\x22\x67\x58\x1a\x98\xe7\x39\x4b\x39\xd5\x2c\x5b\x9c\xa3\x9a\x88\xd9\xe2\xc2\x21\x50\x13\xa2\xde\xf3\x8a\x5d\xff\xf6\x37\x5b\xde\x3c\x40\xfe\x12\x9b\x23\xa1\xd9\x58\x74\x05\x5e\x82\x9e\x3a\x77\x56\xa7\xdc\xbd\x51\x4e\xf2\x1d\x8d\x9b\xec\x65\x0e\x37\xd7\xb0\xf5\x37\x03\xa0\x94\x94\x6c\x06\xf7\x13\xef\xdc\x8e\xb7\x13\x83\xd0\xde\xc9\x4a\x6c\xb6\x45\xb4\xf6\xed\x5b\xab\x0a\xfb\xc1\xfb\x30\x36\xf1\xd0\x7e\x19\x42\x6f\x26\x9e\xf5\x83\x12\x30\x79\x00\x07\x66\x10\x1b\xbe\xd5\xb8\xa7\x07\x98\x49\xf7\x98\x4c\x08\xe6\xd2\x11\xaf\xbc\x97\x94\x43\xf5\x40\xfb\xbc\x0a\x10\xfb\x6b\x77\x6e\x29\xab\x8e\xab\x8e\x02\x00\x8c\x5b\xdc\x40\x30\x4c\x86\xa5\x36\xbe\xa7\x0b\xed\xc8\x5a\xcb\x48\x4e\x5f\x9f\xee\x85\xea\xe0\x6e\x94\xb2\xa0\x33\xda\x5d\xe1\x3e\x6e\x53\x96\xfb\x26\x29\xd3\xac\xcc\xa1\x46\xf7\x5c\x3e\xe1\xef\xc8\x0c\x14\xf6\x2d\x96\xd6\x55\x5d\xc8\x5c\x76\xee\x08\x56\x42\x69\xf2\x17\x21\xf6\x00\x1f\xc2\x27\xba\x20\xb4\x94\x95\xe8\x8c\xbb\x05\x2e\xba\xa6\x1c\xef\x96\x26\xfd\x5e\x0a\x56\xbb\x21\x74\x51\xd9\x16\x69\xbb\x67\x9a\x9a\x0b\xff\xe5\xe4\xcb\x57\x7b\x39\xab\xc8\x64\x59\x30\x9b\x25\x4b\x83\xf3\x6a\x75\xb7\x7d\x2f\xf3\x2a\x19\x4d\xbf\x13\xd9\x5e\x39\xff\x77\x78\x31\xa0\xef\x31\x68\x1f\xf8\x14\xec\x4f\x23\x7c\xf4\x54\x72\xcd\x3c\xcc\x7f\x36\xa5\x99\x62\x44\x96\xa4\x12\xb5\x44\x74\x1e\x93\xab\x08\x3a\x08\xd9\x8f\x6e\xe7\x52\x55\xdd\x1f\x1a\xc1\x58\x4c\x02\x97\xa5\xc1\x2f\xf5\x65\x38\x55\x9b\x71\x4d\xc4\x9e\x9c\x9c\x90\x33\xec\xc7\x70\xff\x52\xea\x8e\x1d\x0d\x75\x38\xc7\xfd\xb9\xfe\x54\xec\x55\x74\xb9\xb6\x19\xaf\x48\x71\xb4\xcd\xfa\x8a\xcd\xe9\x23\x53\x44\xf1\x9c\x67\xb4\xcc\x20\x9d\xd0\x1d\x2e\x8f\xdc\x57\x7a\x7d\xce\xbe\x80\x7c\x6f\x9e\x9e\xc4\x9f\xa7\xd7\xdd\x21\xcf\x91\xb8\x35\x98\x23\x02\xc4\xea\xd6\x04\x85\xb1\x2a\x5d\xd1\x2c\x5b\x10\xf6\x29\xc9\x2a\xc5\x1f\x77\x45\x23\x36\xce\xbf\x07\x77\xb5\xcc\x58\x15\xd6\xb1\xef\x88\x6c\x55\x5b\x50\x36\x38\x3a\x75\xe0\x04\x6c\x14\x2a\xdb\x40\x73\x06\x5e\x92\x34\x49\x98\x52\x2e\xa6\x6d\xe1\xc7\xe5\xd5\x6b\xf8\x5c\xd2\x37\xd2\x27\x75\x9d\x51\xa5\x79\xf2\x55\x26\x93\x87\x3b\x2d\xcb\xbd\x4a\x18\xeb\xfa\x5f\x4a\x8a\x79\xf9\xe7\x3b\x72\xc5\xd5\x83\x17\x57\x6f\xdd\x68\x7c\x75\x26\xed\xb2\x39\x56\xf7\x2c\x63\xfa\x54\x01\xd7\x41\x72\x9a\xcc\x31\x35\x2b\xb0\x14\xa2\xce\xdc\x60\x95\x1e\x5b\x8f\x08\x5b\xa4\xa7\x8c\x4d\x1e\x72\x61\xaf\xc2\x2f\xe8\x93\x62\xb8\xf2\x7b\xb3\x72\xc8\x3f\x7b\x6c\xdb\x2f\xce\xe5\xe6\x6a\x4f\x76\xdd\xa9\xfa\x68\xe6\x78\x00\x4b\x1f\xf6\xec\x24\xd1\x29\xcf\x18\x4a\xd8\xb0\x29\x2e\x88\xc7\xde\x49\x80\x8e\x85\xac\xc8\x13\x45\x65\x11\x60\xfa\x10\x63\xe9\x47\x5e\xbc\x26\xd7\x42\x55\x25\x6b\x74\x90\xcb\x83\x71\xd5\x24\x7c\x71\xe2\x3e\x80\x14\xca\xb4\x06\xa7\x87\x48\xff\xd8\xae\x3f\xd1\xbc\xc8\x98\x7a\x4d\x4e\xd8\x27\xfd\x9b\x93\x11\x39\xf9\x34\x55\xe6\x7f\x42\x4f\xd5\xc9\x84\xdc\xe4\xb5\xa7\x18\x17\x53\x56\x96\xcc\xc5\x6f\xe0\x07\x86\x69\xf2\xf8\xa1\x03\xc4\x2f\xed\x0c\xb7\x76\x6f\x21\x72\xc9\x08\x05\xa9\x24\x4f\x98\xc5\xd4\x90\x4c\x56\x96\xb2\xac\xa3\xad\xbd\xcd\x06\x5a\x9e\xc8\xbc\x28\x65\xce\x3d\x93\x02\xdc\xdb\x7d\xda\xa7\x41\xdd\xd7\x2d\x19\x91\x5e\x80\x5b\x77\xee\x60\xd7\x7b\x20\xf6\x03\xb5\x37\x53\xe7\x89\x88\x3a\x14\x57\x6d\x91\xab\xba\x1b\x03\xa7\x76\x1c\x43\x13\xe2\x20\xf3\x6d\x9d\xa7\x87\x5c\xa4\xec\xf1\x42\xa5\xf4\xcb\x11\x4c\x55\xd9\xa8\xae\xf6\xba\xa8\x22\x27\x61\xc9\xbb\xee\x1c\x4f\x35\xf2\x77\xa2\xe9\x69\x2a\xcb\x7a\x48\xb0\x63\xbe\x3a\x21\x67\xb2\x84\xb1\x13\x2a\x48\xc6\xe8\xa3\xb5\xc3\x21\x8e\x5a\xa0\xc2\xa8\x93\xf7\x89\x51\xbe\x91\xb6\x02\xee\x5f\x7f\xdd\xf1\x76\x98\xac\x44\x7a\x41\x93\xeb\xdb\x69\xe1\xca\xca\x46\xdd\x4f\x65\x69\x33\xce\xd6\xaf\x28\xa6\x01\x19\x71\xd1\xd2\x53\xbd\x54\x0c\x11\x93\x54\xc2\x91\xad\x83\xf8\x94\xd8\xbe\x41\x23\x20\xf8\x4f\x15\x23\x37\x57\x75\x46\x43\x56\x2a\xae\xb4\xc1\x5b\x69\x8b\x23\xe1\xc8\xa6\x9c\x5d\xe6\xf4\xef\x52\x90\xeb\xaf\xee\x6c\x47\x01\xa0\xf8\x9c\xfb\xdd\x89\x20\xe9\xdf\xab\x92\x19\xee\x2b\x82\xe9\xab\xbf\x59\x66\xe4\xcc\x73\x72\x45\x35\x45\x7e\xce\xfa\x63\x8b\x86\x84\x1a\x6e\xec\x9e\x8b\xd4\xfe\x14\xca\x8b\x1d\x80\x33\x32\xc7\xfb\xbe\x2b\x78\xc7\xbd\xf8\xfd\x87\x9b\x3d\x71\x50\x09\x90\xb7\xd9\x3b\x99\xc6\xb2\x51\xa7\xde\xa7\x8e\xd6\xfc\xbb\xd9\xd3\x37\xf8\x9c\xe4\xa6\x4f\xf2\x5e\x0a\x36\x22\x1f\x18\x4d\x89\xc1\x12\xf6\x9f\x7f\x2e\xb9\x66\x93\xee\x2c\x55\x11\x54\xd5\x6d\x60\xe4\x32\xdc\x67\x6e\x09\x7e\x90\x76\x6a\x20\x07\xee\x9d\x25\x9d\xf7\x99\xbc\x27\xf6\x36\xec\x7b\xee\xdf\x7f\xb8\xe9\x31\xf5\xef\x3f\xdc\xb8\x99\x9b\x7f\xca\xe9\xf1\x26\x7d\x0c\xe6\xfb\xed\x12\x2f\x1c\xc3\xa6\x34\xe9\x0d\x96\x39\xea\x7d\xb2\xd3\x93\xa3\x31\xd2\x11\x47\xf3\xc0\x45\x40\xca\xb2\xf6\x75\x36\xdf\x18\xa1\x14\xbd\xcf\x3d\x7f\x8f\xbb\x39\x85\x2c\x73\x2e\x83\x0f\x02\x94\x81\x30\x65\xe8\x93\x03\x2d\x42\x31\xa5\x2d\x21\x57\x0c\x7d\x55\xd2\xd7\xce\x8b\xad\xfe\x62\xfd\x07\xef\x20\x8a\x23\xb5\x88\x9c\x60\x50\x47\xea\x41\xf2\x19\xaa\x6b\x45\xfd\x93\x0d\xd2\xe3\x19\x87\x7a\xbb\xfa\x7c\xd2\x0a\x80\x51\x30\xe5\xbd\xa2\x97\xa3\x70\x59\x2b\xca\x63\x72\x66\x7e\xbb\x00\xd5\xf4\xf9\x04\x70\x27\xbc\x08\x41\x8d\x0d\x23\x16\x30\x86\x01\xf3\x0f\x3b\xb3\x6a\xa1\x4c\x13\x1c\xa4\xb9\xbc\xb1\x54\xdc\x7c\xb3\x96\x8a\xc3\x0f\xae\x36\xcf\x4b\x26\xe4\x98\xfa\x24\x88\x94\x03\x98\x76\xbe\x19\x4e\xcc\x8f\x02\xa3\xe9\xcf\x05\x46\x49\x9d\xa7\xa6\x07\xdb\xd0\x7c\xe8\xc8\x6f\x1d\xc3\xec\xd2\x2d\xb6\x22\x38\x10\x88\xef\x2c\xe6\xb3\xd9\xbf\x91\xd9\x30\xa0\xfb\x4d\x40\xe6\xc8\x08\x64\x55\x03\x56\xec\xaa\xdc\x77\x6e\x51\x88\x90\xe1\x31\x09\x00\xe9\xe0\x49\x26\xac\x98\x4f\x63\xdc\x91\xcc\x07\x6f\xef\xda\x8a\xf1\x37\xac\x98\x93\xb7\x77\x6b\xb0\x01\xec\x3d\xcc\x5a\xa1\xba\xfc\x54\x91\x8c\x4f\x99\xe6\x1d\x4b\x38\x00\x3e\xc8\xa5\xe0\x5a\x96\xdb\x7d\xb5\xc3\xef\xb8\xeb\xee\x10\x77\xdc\xf5\x6d\x4e\xbf\xc9\x2e\xfb\xce\x7b\x4a\x49\x22\xb3\x8c\x25\xda\xa6\x5c\x87\x23\x08\x5a\x21\xb6\x35\x82\x27\xb3\x7a\x9f\xc9\xc3\xef\x41\xf4\xb4\x42\xe6\x05\x82\xc8\xc5\x87\xeb\xcb\xab\x77\xd7\x93\x3c\xfd\xc5\x5c\x3e\x8d\xb5\x1c\x57\x8a\x8d\x79\x77\xe6\xd6\xe7\x8b\x1c\xc0\x56\x04\x65\x7c\x6f\xb3\x60\x85\x4d\x56\xff\x9d\xcb\x79\x44\xbe\x57\xe8\xfb\x05\x9a\x48\x67\xbf\x96\x52\x8f\x48\x49\x6d\x5e\x23\x6a\x15\x99\x55\x96\xe1\x71\xe8\x92\xb1\x91\xaf\x94\xbb\xf8\xfc\x18\xa1\xd6\x26\xbc\x78\xae\xe8\xf8\x70\x1d\x43\xdd\xba\xd9\x30\xd2\xeb\xb0\x9a\xde\xdb\xc7\x75\xd7\x7a\x8e\xaa\x5a\x3d\x37\x87\xf7\xc0\x16\x04\x22\x86\xa6\xb2\x34\xa0\x5d\xb6\xc1\x94\xe9\x04\x76\xe7\xa2\x52\xac\x9c\x60\xf7\x2f\x70\xef\xc3\x28\x70\x58\x02\x3c\xb2\xc3\xce\x7f\x60\xd3\x75\x1b\x6f\x1f\x37\x15\xcf\x2c\x2f\x4c\x2b\x3d\x67\x42\x73\x9b\xad\xc7\x72\x29\x6b\x4f\x22\xa0\x38\x15\xb6\x63\x6f\x7d\x60\xd6\xee\xb8\x1c\xdb\x43\x5e\xea\xcd\xed\x85\xe4\xa5\xde\x25\xf7\xbc\x41\x26\x87\xb8\x84\xa6\x5f\x48\xca\xe1\x13\xeb\x3a\xcd\x40\x49\x53\xa9\xf0\x1d\x2c\x3f\xe4\x5d\x2f\x9a\xe6\xbc\x3b\x8d\xf5\x0b\x44\x6c\x09\x17\x69\xd7\x66\xc6\x6d\x24\xf6\xd8\x66\xeb\xed\x33\x6b\x9c\xab\x5d\x2e\xa8\x13\xee\x31\x81\xa0\x75\xaf\x68\x7b\x57\xf4\xf0\xa0\x58\xde\xd1\x7c\xa1\x7e\xca\xc6\x38\x87\x71\x91\x36\x5b\x3a\xb8\x4a\x6c\xed\x79\x93\xab\xc4\xcb\xd3\xd8\xbe\x08\x07\x88\xfd\x80\x1d\x79\x81\xac\xfb\x8b\xd7\x0f\x1d\xe5\x3c\x62\x18\xf4\x63\x70\x89\x0d\x95\x2a\x24\xb7\xd1\x23\x75\x25\x15\xc4\x5b\x4e\x59\x65\x36\xb5\xa0\x25\xcd\x99\x66\x25\x7a\xa9\x5b\xaf\x78\x11\xc2\x7c\x81\x0b\xfd\x77\x05\x13\x77\x9a\x26\x0f\x7b\xae\x50\x35\x70\x76\x03\x67\x57\xb7\xa3\x78\x65\x38\xf0\xb7\x09\xd6\x17\xbe\xe3\x10\x17\x96\x59\x79\x21\x48\xa7\x9b\x81\x73\xc9\xdf\x63\x34\xaf\x75\xca\xfc\x36\x97\xd6\x54\x6a\x40\x65\x2b\xb8\xb9\xd7\x25\x4e\x20\x24\x13\xb7\x69\x3f\x8c\x53\xf8\xcd\xb7\x04\xa8\x87\x4b\x43\x10\x64\x78\xdd\xb7\x11\x6b\x6e\x9e\xdc\x73\xdd\xa0\x4c\xc5\x34\x29\x58\x99\x73\x9b\xd6\x4a\x0a\x92\xd8\x78\x4e\x60\x70\x0c\x33\x63\xbb\x8b\x62\x8f\x04\x91\x89\xa6\x36\x08\x9c\xdc\x33\xfd\xc4\x98\x20\xaf\x5e\xbd\x7a\x05\x5c\xf2\xab\xdf\xfd\xee\x77\x04\x52\x04\xa6\x2c\xe1\xf9\xea\x8b\xf0\xd6\xff\xfa\xf2\xcb\x90\x41\xff\xe3\xf2\xdd\xb7\xe0\x60\x5e\x68\x45\xee\xa5\x9e\xdb\xb1\x4d\x17\xad\xee\xd5\x88\xfc\x9f\xbb\xef\xde\x37\x29\x85\xdb\xbf\x82\xa6\xa1\xde\xa2\x90\x91\x7d\xb5\xdf\xab\xdf\xfe\xe6\x37\x41\xdf\xf0\x12\x12\x33\x71\x08\xa1\xad\xa3\x35\x0a\x17\x67\x20\xa4\x5e\xcd\xb0\x66\x39\x89\x20\x87\x5d\x08\x80\xe2\xb3\x39\x1c\x84\xb9\xff\x52\x4c\x33\x9e\x68\x2c\x22\x83\xa8\x14\x41\xc2\xe6\x95\xa5\x36\x49\x83\x65\x8d\x83\xb4\xf0\x29\x1b\x91\x8c\x3f\x30\x32\x55\x5f\x97\xb2\x2a\x9a\x54\x2a\x25\x53\x46\x88\x4c\xa8\x30\xe3\xe3\x70\x0d\xdc\x29\x16\x9c\x48\xe9\x10\x8e\x88\x81\x6a\xf4\xf8\x2b\x07\x1d\x2f\xf1\xdd\xa3\xba\xb2\xc5\x18\xa1\xbb\xa0\xbc\x8e\x77\x00\x97\xaf\x56\x69\xe0\x5a\x1d\x16\x52\x71\xaa\xa9\x12\xe2\xc2\xb0\x8b\x52\xfe\x0d\x81\x86\x0b\x97\xa5\xc0\xca\xa7\xca\x8a\x2b\x36\x75\x8e\x68\xac\x67\x01\x23\xb9\x54\x6c\x86\xf5\xb2\x49\xe0\x9a\x0c\x08\xe4\x66\xea\xa7\xe2\x80\x5c\x64\x5c\x99\x49\x40\xf1\x27\x3b\xb7\x80\x51\xd6\xcc\xbe\x29\x1b\x6b\xee\x86\x42\x08\xab\xc4\x4a\xff\x58\xc3\x3e\x68\x0c\x20\x0d\x30\x69\xea\x32\x5d\x34\xa3\x60\x8c\x94\x8d\xa7\xb7\xef\xae\x94\x24\x09\x4e\x55\x65\x43\xab\x98\xae\xec\x11\x81\x53\xb7\x99\x3f\x53\xca\x06\xee\xe7\xb4\x7c\x60\x69\x8d\x9f\x27\x10\xef\xa6\x02\x13\x0e\x10\x97\x32\x8f\x3f\xa2\x81\x36\xa7\x8b\x56\xb0\xac\x99\xc6\xe9\x64\x72\x8a\xa8\x45\x96\x58\xfe\x0a\xb1\x80\x79\xfe\x4c\xa9\xad\x5a\x77\xeb\x1d\x2d\x14\x26\xe7\x32\x2c\xbd\x2d\x4c\x4f\x5b\xa1\x6c\xd4\xee\x65\x08\xee\x8b\x62\xd4\xe3\x4a\x27\x86\x16\x4f\xc4\x37\x8b\x90\x12\xd4\xb1\xb2\x42\x44\xad\xc5\xcd\xa9\x02\xed\x1e\xdb\xfb\x16\x2a\x0a\x44\x17\x1e\xcd\x83\x58\x9b\x35\x53\x0d\x96\x6c\x70\x8c\xb6\x79\x21\x88\xbf\xb1\xa9\x38\xb6\x95\x8e\x58\x6e\xcf\xc2\xd6\x60\x7b\x3e\xe6\x06\xdb\xcd\x14\xa3\xc4\xdb\x48\xde\xa2\x37\x9f\xd1\x74\x74\x28\x24\x64\xbc\x69\xc7\xe0\x56\xb0\x1d\x98\x67\xc1\xd6\xa7\xac\x6f\x0c\xff\x82\x2d\xcc\x70\x8f\xad\xef\xe5\x72\x86\x7e\xdc\x1e\x4b\x66\x8a\x56\xb1\xf7\x0c\x55\xa7\x20\x5f\x39\xc4\x12\x71\xa7\x2c\xb9\xc2\x6b\x45\xef\x95\xcc\x2a\x8d\x43\xc4\x77\xe2\xd3\x3c\x98\xa4\xcb\x20\x18\x46\xe8\x96\xbb\xf3\x28\x25\x70\x22\x48\x9e\x62\xfa\x8a\x40\x98\x43\x2d\xaf\xa6\x7d\xae\xb5\xbc\xea\x22\x77\x6a\x6b\x45\xbf\xa6\xc8\xac\x7a\x51\x35\xbe\xb0\x25\x8a\xc7\x28\x5d\x14\x27\x67\x4d\x21\x7b\xe7\x37\x78\x23\x34\x2b\xa7\x34\x61\xe7\xbe\x32\x86\x15\x73\x96\xb3\xd2\x6c\x90\x7d\xcf\xc5\x2b\xcf\xa9\x48\x33\x94\x74\x13\x56\xc2\x25\x66\x9f\x34\x2b\xcd\x66\xbe\xb9\xbb\x21\x69\xc9\x1f\x59\xa9\xc8\xd9\x57\xcc\x08\x4c\x58\xc0\x27\x28\x21\xc3\x7e\x63\x5f\x60\x1a\xfb\x52\xff\x40\x67\x07\xd1\xfc\x40\xcf\x0e\x6f\x0b\x0f\x03\x34\x7b\x89\x5b\x8f\xfb\xae\x7c\x2d\x58\x08\x72\x78\x23\x05\x90\x4a\xc0\x8d\x0b\x59\x95\x68\x2a\xae\x6b\xa9\x25\xb2\x2c\x0d\x79\x86\xa1\xa9\x22\x25\x9b\x19\x79\xad\xc4\xb2\x52\xf0\x46\x56\x99\x07\x7b\x0d\x26\x38\xb8\xe5\xb0\x36\x11\x6e\x09\xa7\x08\xe8\xcd\x32\x53\x45\x29\x1f\x79\xea\x78\x29\x70\x65\xb1\x8c\x22\x57\xa4\xa0\xca\x8b\xb9\xf7\xea\x0b\x37\x27\x18\x30\x12\x0a\xb3\xc0\x93\xd5\xf9\x87\x5a\x91\xb0\xbe\xf9\x52\x42\x26\xc9\x00\x77\x9a\x18\xaa\x26\x53\x76\x5b\xdd\x67\x5c\xcd\xef\x0e\x69\x42\x5a\x37\x0e\xba\x81\xae\xb8\x17\x6d\x32\x25\x05\x19\xaa\x84\xe2\xc0\x02\x19\xc2\x68\xf8\x35\x6e\x24\x09\x09\xa7\xe5\xfa\xf7\xaf\x98\x84\x30\xed\x8c\xd9\x04\x7c\x6f\xee\xb6\x47\xc3\x61\x7b\xdf\xac\xc5\x66\xd9\xc0\x5c\xa5\x29\xfb\x5e\x14\xad\xe7\x09\xcd\x36\xd7\x4a\xf0\x5b\x3b\x39\x93\x23\x53\xc8\xf9\xba\xdc\x1c\x08\x80\xdc\xc0\xa6\xdb\x23\xee\x95\x7f\xb1\xf9\xe9\x82\xcd\x79\x4b\x1b\xac\x48\x2e\x31\x77\x80\x80\xda\x59\xf8\x12\xa4\x6d\x75\x1f\x78\x99\x61\x20\x2d\x16\xdc\x80\xc1\x2c\xb7\xa1\x0d\x66\x39\x68\xbb\x98\xe5\x8e\xe2\x65\xe0\x44\x66\xc4\x45\x2e\xa1\x57\xab\x38\x50\x4d\x36\xc3\x09\x70\x87\xa7\xf1\x5e\x6d\xff\x38\xab\x4b\xad\x4b\x7e\x5f\xe9\x03\xd5\x2b\x58\x1a\x03\x18\x44\xa6\x2c\x22\x1d\xdb\x4d\x4c\xbc\xfb\xdb\xd4\x9a\x6c\x93\xca\x30\x1c\x8b\xfd\x4e\x6a\x46\x06\x78\x18\x7c\x78\xaa\x48\x2a\x93\xaa\xae\x20\x05\xa7\xd3\xb8\xf5\x84\x16\x98\x88\x42\x4b\xf1\x79\xdf\xfd\x41\x3a\xaf\x4a\x2a\x9f\xc4\x13\x2d\xd3\xcb\xdb\x8e\xc8\xdd\x76\xd4\x6e\xf3\x95\xcf\xc4\xbb\xc7\xc4\x3c\xa7\xf7\xb2\xd2\x4d\x1d\x9f\x7f\x2e\x03\xeb\x3a\x8d\xa3\x96\x06\x13\x6e\x35\xa0\x36\x7a\xc4\x9e\x63\x0c\x56\xdb\xc1\x6a\x3b\x58\x6d\x37\xb5\xd6\x3d\xbe\x41\x83\xac\x5f\xa5\xab\x85\xbf\x5c\x76\xc4\x90\xad\x3b\xbc\x1d\xec\xaa\xc1\xb8\xc8\xe1\x2f\x07\x19\x2f\x89\x1d\x78\xdb\x1b\x3d\xac\xe7\x17\xe7\x50\x32\xf0\x63\xcf\x6f\x33\x3b\x90\x25\x0c\x56\x17\x24\x52\x62\x6b\x47\xb1\x35\x91\x83\x58\x7b\x0f\x0d\xe4\x9e\x2d\xbe\x90\xe9\x6b\x2c\xff\x02\xc5\x22\x31\xff\xff\xc8\xd6\xa8\x1b\x59\xed\x86\x48\xb1\x8c\x76\x41\x13\x06\x48\xa0\xe6\x15\x02\xd2\x86\x60\x8b\xdc\x7c\x12\x7d\x00\x04\x0e\x01\xd6\xd6\x91\x66\xda\x6f\xb1\xa7\x61\x5a\xc3\xf7\x87\x7f\xb3\x9c\x5a\x12\xbf\x77\x87\xa0\x92\x39\xcb\x29\xfc\xf3\xad\x5b\x80\xb9\xd1\x86\xd5\xd5\x0c\x93\x85\xb1\x12\xaa\x2d\x8f\x5a\x3e\xbd\x27\x8f\x61\xb9\xb6\x5c\x8b\xb6\x6e\x12\x07\x81\xdd\x09\x6f\xb7\x2c\xf7\xb6\x65\x4d\x31\xd0\x07\xa4\x3d\xc3\x62\x2a\x4b\x3e\x10\x80\xb3\x70\x7f\x0e\xbc\xb4\x5d\x04\x2b\x6c\xc7\x30\xfe\xf6\x35\xfa\x8e\x6a\xc5\x7b\x9b\xdb\x09\x1e\x78\x30\xfa\x0e\x46\xdf\x76\x7b\xe1\x46\x5f\x8f\xda\x39\x0c\xba\xc6\xaa\xeb\xdb\x0a\x9c\x69\xf7\x9e\x39\xb1\xc2\x8a\x2e\xce\x5e\xeb\x8c\xb5\xb2\x6c\x7b\x1b\x9d\x4e\x26\xa7\xe8\x6f\xd4\xc8\x3a\x95\x9e\x8e\x7f\x4f\x98\x48\x64\x6a\xfa\xf9\x08\xfd\x97\x4a\x03\xa7\xd4\xe8\xc0\xfc\xb9\xe4\x6e\x2c\xdf\x63\x09\xfa\x8e\xa3\xab\x11\x68\xcf\x65\xad\x7b\xbb\x0b\x5f\x11\x81\xbe\x1a\xbe\xa3\xce\x97\x67\xb7\xa2\xce\x8c\x6c\x19\x90\xa6\x20\x37\x96\xb8\x07\xf8\x75\x65\xc2\x83\xc7\x3b\xc3\x8f\x27\x49\x51\x8d\x6c\x47\x93\x9c\xe5\xb2\x5c\x8c\xea\xce\xcc\x8f\xad\xde\xed\x1b\x98\xa3\x3b\xa9\xca\x92\x09\x28\xcf\x5d\xb3\x39\x2f\x8b\xcb\x71\x3b\x75\x40\x26\xa7\x3e\x9c\xb0\xcc\x25\x4d\x6b\xdf\xc8\xc6\x6c\x0a\x8a\xe6\x7a\xb5\x58\xba\x09\x03\x26\x47\x8d\x51\xd9\x3c\x65\xe2\x91\x3c\xd2\x52\x85\xde\x00\xd2\x97\xaf\x49\xf9\x23\x57\x21\x75\x5d\x37\x2c\xee\xae\x56\x7b\x42\x59\x8a\x4a\x17\x95\xb6\xe8\xce\x81\xb8\xcb\x2b\x5d\x83\xf6\x12\xfb\xf6\xe5\x49\xc4\xe0\x2f\xb4\x9e\x79\xbb\x05\x55\x37\x6f\xb7\xb8\x5a\xe7\xeb\xbf\x8d\x3c\xfa\x9e\x75\xd0\xd7\x35\x77\xb4\xfd\xef\x48\x43\xb5\x9a\x1c\xe7\x8e\x3d\x3e\xf0\x25\xe8\xcb\x01\x83\x21\xed\x8a\xef\x35\xfc\xd8\xf5\xd9\x0e\x6d\xd1\x2c\x2f\x64\x49\xcb\x05\x49\xad\x62\x6a\xb1\x35\xa3\xd0\x81\xf3\xb6\xc3\x24\x53\xbe\x1d\x48\x0f\xa0\xe6\xcd\x59\xca\xab\xfc\x20\x79\x86\xa0\x67\x7f\xd3\x9f\x20\xf9\xb9\x4d\xad\xee\xbc\x58\xec\x6b\xae\x82\x06\x4d\x1e\x6c\x45\x7c\x77\x2a\x61\xba\xbf\x56\x82\xea\x93\x93\xa5\x42\x6e\xa0\x57\x06\x7f\x0e\x99\xb2\x53\x55\xbf\x8b\x83\x47\x2a\x78\xd1\xd8\x6b\x3d\xda\xce\x6c\x57\xe7\x86\x93\x7b\x07\xc4\xfe\x08\xb9\x79\x83\xa0\x85\x44\x26\x33\xe1\x7f\x67\xdf\x1a\xb6\xe6\x20\x61\xaa\xae\xf3\xba\xec\x9b\x04\x69\xcc\x66\xf5\x9a\x92\x4c\x26\x9e\x6b\x53\x8b\x9a\x03\x38\x5c\xbb\x4b\x1c\x6e\xe7\x33\x40\x61\xc6\x45\x66\x0d\x14\x99\x99\x42\x47\x0d\x9e\x40\x3d\x15\x90\xed\xe0\xcc\x22\x20\xe1\x23\xe4\x8b\xff\xc4\xf3\x2a\x27\x95\x32\xb3\x85\xe2\x9d\x5e\x2f\xcd\x64\x9f\x5c\x59\x18\x48\xed\xc4\x05\x7c\xd4\x92\x6d\x43\xd4\x8b\x73\x46\xee\xea\xfd\x6b\xf4\x19\x10\x5a\xed\x44\x31\x55\x81\x24\x60\xe7\x61\xf9\x5c\x39\x05\x1f\x81\x9a\xe5\x52\x75\x65\x91\x1e\x97\x4a\xf0\xac\x7d\xab\x5c\x29\x83\x7a\x7b\x2b\x61\x3d\xf1\x5e\xd2\x0d\x78\xc1\xcc\x4d\x30\x4b\x13\xcf\xc8\x44\xb2\x2f\x3b\x30\x2d\xb5\x5f\xe2\x5e\x49\x76\xed\xec\xd8\xa2\xd9\x7e\x51\x83\xb6\xe3\x23\x75\x4e\x71\x35\x0a\xb1\x56\xea\x8e\x81\x3e\xd6\x4a\x19\x4b\xea\x93\x45\x62\x53\x5a\xf1\x56\xd9\x16\x1c\x14\xe1\x1b\x82\x8f\xc6\xe6\x3f\x4e\x79\xe3\x4c\x87\xf7\x6c\x2a\x9b\x1a\xde\x28\x7c\xab\xae\x80\x27\x54\x49\x65\x4c\x43\x04\x15\xab\x8b\xf9\xa0\x0b\x51\x2e\x1f\xcd\x85\xfa\xa2\xa3\x93\xef\x5d\x85\x54\xde\x09\x51\xf4\xbc\x15\xde\x6c\x8b\xb4\x0b\xc6\x52\x0c\xe1\xca\x9a\x05\x94\x95\xe8\x9c\xfe\xfd\xb9\xf3\x29\x05\x84\x23\x8c\x9c\x92\x39\x11\x0c\x15\x47\x25\x33\xa7\x02\x39\xc1\x4a\x99\x13\x25\x68\xa1\xe6\x52\x83\xf2\x83\x16\x34\xe1\x3a\x20\x2a\x48\x97\x34\x79\x30\x7d\x80\xb1\x10\x66\xdb\x35\xb5\xe4\xdc\x3a\x9f\xfb\x20\xd1\x0e\x59\xd3\xf3\x52\x56\xb3\x39\x44\x50\xe1\x5b\x49\x46\x15\x86\xca\x75\x59\xc8\xd7\xf6\x6e\x45\x7b\x45\xd2\x85\xa0\x39\x4f\xea\xfa\x13\xa5\x7c\xe4\x8a\x4b\x6b\x61\x82\x51\xbb\x17\x4d\xc9\x6d\x5d\x1c\x00\xcd\x5a\x6f\x32\xca\x73\x72\xa6\x18\x23\xd7\xee\x96\xe0\x2f\x77\xc8\xe2\xa3\xc2\x32\xa4\x7a\x8a\x6f\x11\x93\x75\xfd\x49\x61\x13\x3f\x3a\xe5\xab\xe7\x83\x00\x48\x25\x60\xd2\x22\x5d\x3f\xed\xf3\x30\x38\x5e\xbf\x64\x59\x82\xf3\x9b\xab\xca\xc3\x44\x2a\x1b\xe7\x96\x8e\x5e\x2f\x6f\x6f\x94\xaf\x19\xc0\xdb\x6c\xeb\x2e\xc0\x0f\x99\x14\x33\x3f\xd3\x62\x8d\x0b\x3a\x7a\x36\x24\x56\x40\xe1\xf6\x47\x9e\x56\x34\x43\xe2\x1a\xb2\xca\x37\x77\x37\x38\x32\x9f\xcd\xf5\xf8\x89\x81\x32\x17\xd9\xa0\x06\xfd\xb9\xf9\xf2\x15\x17\x64\xae\x80\x0e\x6b\xa2\x65\xd7\x05\x65\x56\xad\x6f\xd6\xfc\x44\x17\x90\xbe\xd8\xba\xb2\xb6\x9c\x75\x5c\x42\x7c\x1c\x60\x2a\xbb\x08\x4d\xee\x48\xb8\x05\xa2\xee\x75\x5f\xba\x22\xda\xc0\x90\x83\x5a\xde\x80\x14\x20\x8e\xd5\x45\x77\x5f\x41\xaf\x72\x46\xfd\x11\x32\x25\x8a\x1a\x70\xed\x94\xdb\x0e\x20\x51\x3d\x36\x30\xfb\x91\xe5\x45\x46\xf5\x41\x1c\x68\xfe\xec\xd9\x0d\x3c\x7b\xb6\xc1\x63\x54\xa4\x63\x9a\x99\xcb\x72\xfb\xc3\x1b\x1b\xaa\x88\xb8\x27\xd2\x53\xee\xa3\x23\x44\xa2\x2e\x7f\x68\x58\xf1\xb5\x68\x07\x32\x0a\xde\xb3\x14\x88\x88\xab\x6b\x1d\xe4\xf3\x2a\x9f\x04\x2b\x1d\xf0\xdd\xfe\xf0\x66\x44\xf8\x84\x4d\xdc\x5f\x75\x67\x8e\x44\x6a\x39\xc3\xc0\x10\x17\x5c\x14\x62\x1b\x97\xe9\x04\x97\xe3\x2b\xe9\xfd\xde\x7f\xfc\x83\x59\xa8\xf9\xf5\x8f\xe3\x3f\x78\x45\x8d\xfe\xf8\xa3\xa1\xc9\x41\xb5\xa8\x7e\x5c\xfa\xce\x0f\x21\xa8\x8b\xd3\xfe\x78\x6b\x2b\x0d\xda\x3a\x84\x3f\x06\x3a\x45\x10\xc2\x84\x2e\x17\x13\x72\x2b\xc1\x8f\x8e\xa7\x78\x67\x61\xfe\x25\xfb\x9b\xb3\xed\xc0\x71\xd5\x6a\xf0\x84\x6a\x26\x80\x33\xd9\x5a\xb4\xaf\x69\x36\x76\x1b\x06\x00\xec\x44\x61\x97\xce\x40\x7f\x8a\x89\x4c\x46\x44\x4b\x09\xf8\x32\x00\x9d\x9b\x76\x29\x08\xfb\xc4\x15\xe4\x71\xc2\x2d\x87\x73\xa3\x36\xc4\xc1\x71\x73\x66\x5c\x03\x0a\x75\xf6\xaf\x42\x86\x38\x5f\xc0\x06\xfc\x4a\x48\xfd\xab\xfa\x36\x38\x97\x50\x60\xdb\x24\xa1\x8f\x92\xbb\xba\x98\x06\xf3\x08\x30\x95\x04\xe5\x08\xb0\x07\x7a\xbf\x20\x39\x57\x9a\x3e\xb0\x09\xb9\x33\x3c\x9d\xef\x25\x82\xc7\x2c\x08\x54\xc9\x61\x29\xa9\x84\xe6\x59\xa0\x58\x57\xcf\x05\x36\xc6\xe3\xf7\x20\x2b\x40\x95\x18\xbe\xa4\x28\xd9\xd8\xf1\x97\xf8\x56\x90\xf2\xc5\xd6\xfb\x72\x7b\xd2\xec\xe9\xa8\x86\xfd\x39\x45\xdd\x48\x91\x42\xe7\x70\x2e\x9d\x1e\xad\xa4\xbe\xb1\x2b\xd1\x01\x66\x37\xa4\x48\x1a\xf6\x11\x8e\x5d\x4d\xc8\x7b\xe0\x09\xb3\x10\x28\x47\xaf\x2f\x54\x06\x59\x5b\x99\x60\x09\x53\x8a\x96\x8b\x11\x54\x46\xe5\x75\x45\x4c\xeb\x36\x6d\x78\xe6\x90\x2d\xa1\x02\xab\x8f\x96\x2c\x91\x42\xe9\xb2\x4a\xe0\x1c\x29\xb9\x2f\xe5\x03\x13\x4d\x58\x4d\x08\x50\xb7\xa3\x02\x1a\xe7\x64\x70\x69\x91\x24\x99\x53\x31\xf3\x2a\xfc\xe7\x34\x05\x30\xfa\xa6\x16\xb3\x42\xf6\x42\xd6\x47\x45\xa7\x46\xb6\xe1\x1a\xce\xec\xde\xb0\x65\xce\xac\x18\x34\x5b\xa7\x09\x1e\x35\x86\x41\xb3\xb1\x3c\xdb\xb3\x2f\x6e\x8c\xcd\x69\x0c\x5c\x78\xb7\xfc\x1e\x65\x63\xca\x99\xa6\x29\xd5\xf4\x90\x91\x07\xef\x68\x5d\x7c\xd5\xba\x33\xc1\xa9\x7b\x6e\x4e\x96\xd5\x72\xc2\xa1\x2c\xb8\x9f\x95\xe3\xf6\x87\x37\x81\x23\x81\x34\x08\x07\x0d\x39\xf0\xb4\xb9\x49\xd6\xcc\x8e\xb1\x02\x20\x0b\xd1\x2c\x93\x4f\x36\x77\xa6\x1b\x13\x29\x02\x4b\x49\x5a\x45\x68\xed\x1b\xba\x12\x66\x97\x8c\xb4\x4a\x9a\xf3\x3e\xe4\xc1\x7c\x6c\xdc\x7d\x92\x76\x70\xc0\x5a\x89\x02\x2d\xe9\x4c\x68\x5e\x32\x2f\x37\x4b\xe0\x60\xf6\x54\x2b\x81\x57\xbd\x7d\xbe\x08\x00\x33\xa6\x55\xe3\x55\x8c\x1c\x40\x70\xff\xda\xf2\x8e\x38\x4b\x60\x67\xdd\x99\x5b\x35\xde\xda\x45\x05\xf6\x8e\x70\xa3\xa4\xa5\xf4\x86\xc3\x39\xc8\x91\xf7\xb1\x11\x63\xa1\xe3\x77\x32\x8d\x31\x2b\xf7\xf5\x22\x68\x0d\xd7\x04\x5c\x61\x9c\x9f\x02\x1d\x34\xbe\x00\x8e\x2d\xaa\x95\x99\x06\xa9\xd4\x9c\x76\xd5\xb1\x6e\xb7\x9e\x8a\xcf\x46\xd4\x19\xd7\x15\xfa\x60\x62\x63\x98\xd8\xf8\xcb\xe0\x29\xc4\xf8\xe2\xba\x16\xec\x93\xdb\x1e\x24\xca\x66\x68\xf0\xf6\x5d\xa4\xc9\xb3\xff\xb1\x37\xa3\x59\x32\x6e\xbd\x98\x6a\x0f\x38\x1b\x86\xce\xb8\xc1\xb7\x31\x4b\xff\x55\x8b\xe3\xb5\x42\x52\xad\xf2\xc2\xc8\xbe\x33\xa7\x03\x9b\xd8\xf3\x75\xd9\x01\xdb\xaf\x9f\xf7\x1e\x16\xb8\xf6\xf5\x4a\x98\x88\x3e\x6f\xac\x2f\xaf\x93\x1f\x8d\x9c\x56\x82\x0d\xcc\x05\x98\x9b\x1b\x53\xca\x2c\x63\x25\x6c\xa0\xd5\x7e\x2d\x79\x5e\x42\x8d\x2f\xb4\x40\x87\x64\x7f\x72\xcd\x29\x58\x6b\xd1\x56\xb0\xa7\x9a\x25\xa7\x0a\x53\x44\x3b\x87\x1f\x50\x11\x3b\xb7\xd7\x75\x23\xc7\xdc\xd1\x3f\x3b\x35\xec\xa5\x58\xe0\xd6\x5d\x79\xe0\x82\xda\x4e\x32\x33\x93\x32\x62\xaf\xa0\xf7\x99\xe1\xad\x3c\x90\xaa\x67\xb4\xc4\x04\x68\xe9\xbd\xf5\x81\x4d\x63\xb6\x03\xf4\xc4\xfe\xc7\x61\xa3\x20\x17\xd1\xfa\x70\xd2\x38\x5d\x5b\xc1\x2b\x2a\xd3\xb1\x6b\x16\x3a\x5a\x9d\xb5\x1d\x1e\x97\xc6\xf5\xb3\x8d\xad\x9d\x6b\xf8\xe8\x3d\x1c\xa2\xfa\xb8\x44\x41\xce\x2a\xde\xa9\x87\x6a\x7f\x10\x28\x6b\x63\xeb\xe3\x43\x05\xae\xe2\xe0\x8b\x19\xe7\x10\xd3\x1f\x5b\x12\x54\xa2\xc2\x98\x4e\xb1\x31\x83\x3f\x1c\x8b\x55\xbb\x98\xdc\x33\x83\x7f\x9a\x54\x7c\x31\x10\x45\x10\xaa\xfc\x91\xd6\x78\xd1\x36\xd7\xfb\x1b\x28\x06\x67\x4d\xf3\x2e\x3b\x82\xa1\xaf\x97\xb7\x37\x38\xbf\xd8\xd1\xdf\x02\x7e\x5b\x58\x2e\x5b\xcf\x79\x99\x8e\x0b\x5a\xea\x05\x2a\x2a\x47\xad\xb9\xd5\x01\xde\x51\x83\xf4\x74\x2c\x0a\x2b\xf7\xe8\xb7\xd6\x71\xc3\x56\x39\xe3\xbb\xf5\xc1\xd8\x78\x66\xc7\x58\x4f\x78\x80\xf8\xda\xf5\xf8\x05\xcc\x9c\x52\xef\x19\xd7\xb3\xbb\xcb\x3f\x69\xe3\xca\xe3\xf2\x40\x06\x39\xab\xb6\xdb\x21\x32\x2a\x20\xb6\x58\xe5\xaf\xf4\x03\x53\x6b\x36\x18\xd4\x46\xa6\xa7\x11\xe1\x53\x43\xa4\xa5\x18\x83\x75\x3e\x62\x22\x8d\x2d\xd2\x32\xdd\x13\xeb\xe1\x8e\x8a\x1e\xb8\x90\xde\x7c\xbc\x41\x9a\x9b\x4e\xce\x84\x0c\xd1\x03\xb9\x06\x78\x02\x7b\x3d\xc7\xe0\x83\x0d\x76\xa7\xfb\x98\x34\x7f\xa4\xe1\x1e\x7c\x05\x91\x87\xc1\x1c\x03\xc3\x45\x6a\x80\x14\x48\x22\xa8\x8e\x54\x95\x24\x8c\xd5\xea\x5b\x7b\x49\x63\x78\xee\x16\x6e\xb4\x1b\x96\x53\x9d\xcc\x99\x22\x4a\x42\x2e\x6b\xa5\x69\x96\xb1\xb4\xb6\x4a\xe2\x81\x4a\xe0\xeb\xac\xc5\x32\x62\x44\x8f\x31\x8c\xd9\x20\x4f\x79\x66\xf5\xd7\x45\x46\xad\xde\x70\x5a\x89\x04\x9d\x76\xb9\x5e\xf8\x35\x9a\x5b\xcc\x3a\x28\x5c\x14\xa8\x48\x63\x18\xca\x29\xda\x9c\x3c\xe5\x49\x0d\x48\x40\x5a\x16\x48\x4c\x8c\x48\xd7\x58\x91\x6c\x9e\x56\x43\x19\xee\x69\xf2\xf0\x44\xcb\x34\xdc\x6b\x9c\x40\x16\x13\xaa\x39\x96\xb1\x1d\x21\x37\xe6\xb3\x4c\xe2\xd4\x77\xea\xe1\xa2\x3f\x83\xe8\xaf\xed\xcc\xdb\xb2\x15\xc6\xf1\xbc\x66\x18\x15\xab\xcb\xa8\xaa\x18\xae\x85\x58\x2f\x26\x5a\x69\x99\x53\xcd\x13\xd0\xac\xf2\xa9\x67\xa2\xcd\xeb\x22\x53\xb5\x93\x12\x12\x55\x20\xea\x76\xd7\xa3\xaf\xd5\x7a\x66\x73\xa7\x6d\xf3\x76\xca\x9e\x46\x7b\x53\xdc\x52\x3d\x56\x23\x7a\xee\x1f\xd1\x59\x0b\x7c\x43\x4a\xc6\x08\xcf\x8d\x98\x44\xa1\xe2\xff\xb4\x4e\xdd\xe2\x4c\xee\xdb\xce\x2e\x4e\x12\xfd\x33\xb8\x73\x78\xfd\xa1\x92\x3a\xcb\xe4\x93\x22\xfa\x49\xd6\xfa\xb2\xc6\x0e\x6b\xf3\x9a\x8c\xda\xc3\x46\x51\x50\xdb\xbf\x41\xdb\xe6\xa4\x3d\x4c\x3b\x32\xb7\xf6\x89\x65\x99\xf9\xff\x36\x7c\x1b\x11\x6a\xb5\x76\x9d\x7c\x26\x30\x09\x06\x57\x4e\x3f\x6a\x03\xba\xce\xd2\x52\x16\x85\xb5\xe0\xe4\xe7\xbb\xac\x13\x5c\x93\xca\x47\xa6\xc0\xcd\xce\x85\x93\x99\x23\x9b\x31\xc1\x4a\xaa\xc1\x88\x6d\xf3\x16\x03\x71\x5c\x9e\x4e\xb8\xbe\x11\x5b\x2f\x39\xad\x03\x0c\xd0\xe7\x60\xfd\xb1\xbb\x77\xec\xaf\x51\x73\xe5\x02\x21\xc0\xdd\xd8\xa8\x23\x85\x64\x75\xe7\xe4\x7b\x85\x07\x55\xd3\x8b\x3a\x4c\x2f\x48\x3a\x47\x03\x98\x15\xd0\xa3\x86\xbf\xcc\x8a\xb9\x37\xbe\x2f\xe5\xd6\x61\xce\xed\x9d\x6a\xcd\xec\x4d\x29\x95\x7a\xef\x3e\x39\xc8\x24\x07\x09\x78\x90\x80\x07\x09\x78\x7b\x1b\x24\xe0\x63\xaf\x07\xf0\xdd\x31\xef\xe4\x7b\x9f\x21\x6c\x23\xea\xbd\xed\x07\x21\xef\xa5\xb6\x9e\x2a\xc0\xbf\xd3\x8d\x4a\x4f\x0a\x38\xfd\x89\x2e\x26\x82\x69\x9b\x2f\xce\xe9\xf6\x3f\xb8\xd1\xbf\x2e\x0d\xe7\x67\x05\x34\xef\x16\xb9\x0b\xec\xf2\xd9\x79\xa3\x68\x89\xa4\xb8\x71\x9c\x81\xe7\xa7\xca\x3a\x63\x98\xdf\x21\xda\x9d\xb4\x0a\x61\x4c\xc8\x9d\x75\xf5\x5b\x1a\x7c\x35\x4d\x57\xca\x34\xe5\x61\x29\x11\xfd\xe6\x28\xe5\xc7\x0d\x34\xfa\x08\x94\x90\xf4\x03\xd9\x3a\x76\xf2\x18\xaa\x96\x26\x06\xd9\xf3\x68\xf7\xa3\x42\x9a\x17\x76\x37\x31\xde\x4c\xc9\x07\x96\xc8\x47\x56\xe2\x7e\x5f\x7f\x2a\xa8\x30\x62\xfa\x5b\xca\x33\xb3\xdb\x6e\xd7\x1b\xeb\x05\x54\x31\x6d\xfb\x13\x78\x46\xb0\xfa\x1a\xd9\xa3\x35\x90\x13\xc3\x0c\xd6\xf9\xe6\x4c\xcf\xd6\xcb\xb6\x28\xd9\x23\x97\x95\x72\xf1\x30\x95\x46\x3a\xa6\xb4\x95\x4d\xe7\x7c\x56\x17\x3f\x77\x6e\xe2\xe0\xbc\x53\xa6\xf5\x55\x89\x98\x83\xd2\x54\x57\xaa\x9d\xa4\x26\x01\x3f\x80\x67\x31\xde\xd6\xe7\x7d\x58\x86\xaf\x1f\x73\x85\xf1\x43\xc7\x44\xe3\xdf\x62\xc4\x12\x76\x72\x6f\x6f\x81\x0b\xb3\x6a\xc2\xc4\x12\x99\x17\x95\x66\xde\x6d\xb1\xd0\x1a\x8b\xb6\x22\x0f\xb2\x95\x73\xf2\x22\xa7\x82\xce\xd8\xb8\x9e\xc4\xb8\x89\xb0\xba\xe8\x81\xb5\x22\x8f\x94\xec\x90\xf4\xd0\x6f\x2f\x38\x32\x6a\x69\xb1\xf1\xa1\xdf\x64\xc7\xf0\x6f\xb2\x4b\x08\x38\xd9\x67\x18\x38\xa9\x73\x49\x1c\xf3\x3a\x7e\xb0\x63\x2e\x5f\x48\x4b\xac\xb6\x5d\xc8\x7e\x22\x81\x25\x5a\x76\x54\xae\x88\xcc\xb9\xd6\xcc\x39\x21\xd7\x17\x6c\x44\xb8\x6e\xa5\x3a\xb0\x88\x03\x94\xe6\xe8\x48\xcc\x3e\xd5\xb5\x7d\x1b\xc6\x2c\x72\x32\x20\xfc\x3c\x71\x85\x8c\x97\x20\x3c\x2f\xb0\x1c\x06\x20\x80\xb1\x8d\x73\x74\xaa\xe1\x7a\xde\x09\x38\x01\x12\xf6\x09\x14\xf9\x38\xb5\x01\x33\x0d\x98\x69\xa9\xfd\x1c\x30\x13\xa6\x91\x88\xc9\x72\xd2\xc2\x48\xee\x73\x9b\x5f\x92\xde\xb3\x8c\xfc\x54\xb1\x72\x41\x0c\xdb\xda\xc4\x69\x41\x49\x62\xc5\x53\x0c\x48\x72\x56\xb3\x03\x6b\xc9\xfa\x31\x4d\x60\x69\xbb\xfe\x64\xb8\x7b\x48\x9a\xb6\x03\xbe\x5e\xee\xaa\x9d\x85\x13\x77\xab\xde\x41\x9f\x27\x47\x6f\x51\xff\x09\xb0\xdd\x97\xef\xaf\xfa\x09\x54\x71\x5e\x82\xa4\x8f\xa7\xe0\xca\xe2\xa3\x89\x15\x21\x97\x5b\xf6\x04\xf7\xae\xfe\x05\xa8\x44\xed\xe7\x59\xeb\xec\xc9\x03\x5b\x8c\xac\x1f\xb7\x2d\x39\x6f\x5f\x8e\x9e\x0c\x86\x74\x34\xb5\xe2\x4c\xa7\xa1\x99\xaf\xdb\xad\x37\x12\xee\xa7\xe8\xc5\x16\x5e\xa4\xaf\xfd\x95\xdb\xb4\x58\x5c\xdf\x9b\x4a\x44\x15\xf3\xf3\xdb\xa6\xc2\x7e\x08\x43\x50\x85\xcb\xe5\x36\xa8\xc1\x06\xb2\x46\x00\x42\x8a\x3d\x44\xd2\x5f\xa1\x86\xcd\x6d\xec\xce\x4b\xed\x71\xb1\xfc\xf1\xdb\xb1\xf8\x0f\x6c\x71\xaa\x6c\xd6\x39\x29\xd4\x9c\x17\xae\xda\x3c\xe0\xa8\x7e\x00\x8f\xed\x07\xf0\x49\x77\xc3\x22\x06\xbb\x11\x23\xf2\x5e\x6a\xf3\xbf\x6b\x88\x2a\x82\x6b\x75\x25\x99\x7a\x2f\x35\x3c\x39\xfa\xb9\xe0\x12\x9f\xeb\x54\xac\x35\x93\x83\x85\x11\xd0\x34\x66\xd5\x81\x30\x7b\xbb\xfb\xce\x43\xb3\x3e\x41\xae\xc8\x8d\x20\xb2\xb4\x5b\xd9\x6b\x60\xed\x4a\xd7\x2a\x3b\xac\xb3\x3e\x34\x46\xfd\x75\xe3\xda\x53\x93\x65\xeb\xd0\xf6\x3c\x05\x3b\x3c\xe8\x22\xf1\x17\xd0\xae\x82\x77\x89\x8b\x85\xc1\x62\xa9\x54\xb3\x59\x94\xab\x4b\xd3\x72\x56\xce\x20\xcd\x62\x12\x51\x66\xcf\x9b\x7c\x4f\xc2\x8a\xad\x17\x79\xf5\x07\x8e\x06\x76\xe0\x45\xbe\x85\x38\xa7\x63\x4a\xa0\xde\xb0\x48\xc1\x73\x5a\x18\x08\xff\x6f\x43\xa8\xe1\xf0\xff\x07\xaa\x41\xab\x09\xb9\x24\x8a\x8b\x59\xc6\x5a\xbf\x59\x55\xba\xd7\x4d\xf4\x04\xc0\xc2\x65\xe8\xe8\x23\xcd\x18\x86\x53\x52\x51\xd7\x45\x94\xd3\x15\x36\x6d\x64\xcb\x43\x1b\x12\x52\xbb\x7e\x9d\x3c\xb0\xc5\xc9\x28\x52\x59\x49\x7c\xbc\x6b\x3a\xb9\x11\x27\x4d\xde\xd5\x16\xec\xd7\xbc\x0c\xd8\xf4\x4f\xe0\xb7\x93\x7d\xf3\x81\xcf\x24\x08\x3e\x9b\x2b\xa6\x55\xdc\xbe\xc9\x28\x1a\x2f\x8e\x61\x22\x58\x1e\x73\x5d\x0d\xba\x3b\xef\x9d\xc6\x6c\x64\x83\x7b\x9f\x51\x9b\x0d\x49\x53\xa2\x63\x90\xa2\x0e\x76\xb9\xcc\xcd\x51\xcf\x66\xe3\xe0\x5e\x2c\x72\x9d\x38\xdb\x9c\xc5\x0f\xeb\x3e\xf0\x42\xb1\xb9\x8a\x3f\xae\xd5\x4a\xf1\x5e\x3e\x10\x3f\x52\x46\x96\x36\xa8\x7b\xc5\x4f\x17\x0a\xe2\x35\x95\x82\x42\x2b\x67\x36\xad\x71\x31\x28\x99\x2a\x24\xfa\xb0\xae\x5d\xac\x25\xc3\x73\xa8\x9d\xef\xbc\xdc\x34\x29\xaa\xb2\x90\xca\x56\x33\x5b\x06\xf9\xc8\xe8\x20\x1b\xb2\xe5\x22\x30\x31\x48\xba\xbe\x09\xe6\xfe\xd4\xc9\x97\x2f\x97\xf2\xf6\xa1\xd1\xc9\xcb\x64\x26\xe4\xfa\x65\x44\xcc\xc8\x39\x55\xa2\xac\x50\x67\x8f\xc2\xc9\x60\xe8\xfa\x29\xba\x73\x78\x26\x36\xc3\x51\x6b\xdf\xc3\x49\xcb\xf6\x4c\x21\xa2\x1e\x13\xac\x45\x64\xd4\x26\x08\x2f\x95\x68\x5c\x45\x1c\xf5\x58\xef\x76\x07\xf9\xdb\xee\x65\x25\x2c\x68\xb9\xcc\x6f\xfb\xda\x14\xb3\x4a\x97\x84\xa0\x9e\x80\x05\x4d\x2f\x88\x8c\x4f\xcd\x5a\x6d\xe2\x80\xb8\xb5\xb6\x7c\x70\xc0\x02\x5e\xe2\x16\xdf\x2f\xd6\xdf\x5f\x92\x4a\x86\xe7\x01\xe3\x8d\xf0\x14\xd6\x6f\x8f\x5d\x46\x0c\x3a\x47\x2f\x52\x4a\x6e\x19\xde\x12\xa5\xa9\x66\x23\x2c\xe9\x39\xcd\xbc\x3a\x37\x8c\xe4\x32\xe5\x53\xeb\xcb\x76\xe7\xd9\x29\x47\x98\x4d\xc2\xa6\x82\xf0\x73\x5d\x47\x4c\x24\x7e\x33\xf7\x47\x17\xf0\xff\x0d\xc6\x49\x22\xa1\x67\xd9\x0f\x6f\xbd\x8f\xc1\x7a\x64\xbb\x3f\x27\xbb\x1e\x74\x2a\xac\x6e\x96\x6b\xbb\x12\x26\xa8\x24\xe0\x92\xd3\xb5\xd2\xac\x36\x91\x15\x3b\x73\x0b\x3f\x00\xca\x94\x53\xf2\xb6\x29\x7c\xca\x15\x98\x46\xb8\x4b\x5d\x67\x2e\x13\x17\x49\x56\x59\x13\x3d\xe2\x3e\x83\x83\x8e\xb0\xe7\x3b\x30\x03\x4d\x07\x8e\xeb\x72\xf1\x19\x2b\x59\x4e\x96\xf1\x03\x04\x05\xd4\xd0\x19\xb9\xab\x81\x6b\x9d\x76\xe4\x4d\x68\xad\x65\x9a\xb4\x35\x35\x6f\xf9\x7d\xc9\xc8\x9b\x39\x15\x82\x65\x5e\x2a\x68\x6b\x2e\xa3\x5a\xd3\x64\x8e\x98\x92\x12\x73\xcf\x33\x66\xe8\xd4\x5c\x2a\x4d\x72\x9a\xcc\xb9\xa8\xd3\x8c\x8a\x3a\xf1\x78\x93\xf2\xe5\xe8\x09\xb6\x0e\x5e\xaa\xd8\x42\x80\x5f\xdf\xb7\x55\xc1\x38\xa0\xa7\x3a\x5d\xf0\x4a\x2f\x4d\x35\x44\x7b\x0f\x61\x9f\x51\xd6\x03\x2a\x01\xef\x86\x8c\xb1\xb9\x8e\x32\xb9\xc9\x6b\x13\x28\x17\x1e\x21\x64\xf6\x03\x43\x66\x3d\xd6\x20\x28\x17\x18\xd4\x2c\x9d\xcb\x27\x92\x4a\xf2\xc4\xc0\x7d\xc7\xf0\x73\xe0\xdc\xae\x1c\x5f\xe8\xad\x16\x22\xb5\x12\x99\x17\xa5\xcc\x79\xed\x46\x6d\x01\xaa\x73\xc0\x08\x24\x90\x55\x01\xf5\x92\xda\x99\xd1\xb3\x4a\x98\x53\x6e\x2a\xe0\xbc\x7d\x43\x34\x2d\x67\x4c\x9b\xde\x88\xa8\xf2\x7b\x56\x76\xa7\x48\x3f\x5c\xbd\xb6\xa3\x94\x57\x6d\xed\x40\x47\x55\x54\xf2\xc1\x7d\x05\x91\x2c\xc0\x0e\x4d\x65\x18\x23\x82\xee\x87\xae\xa6\x2b\x56\xf4\x33\x00\xf3\x83\xa5\x5d\x95\x08\x61\x4f\x62\xca\xae\xe2\x59\xfe\xf9\xcf\xef\x63\x6b\xde\x9d\x36\x5f\x6e\x02\x90\x27\x59\x66\xe9\x13\x4f\xad\xa7\x29\x39\x33\x2f\x9f\x87\x02\xcb\x9e\x4b\xe0\x45\x5c\x93\xa7\x27\x9e\x1e\xa4\xfe\x2c\x74\xdc\xde\x2a\x27\x72\x9a\xad\x22\xb0\x57\x3c\x65\x42\x1b\x64\x53\x2a\x72\x06\x5f\x84\xe4\xa1\xb8\xe6\x98\xe9\x0f\x46\x80\x52\x39\xf9\x3d\x17\x4d\xb6\xca\xe6\xb0\x0c\x81\x32\x57\xd7\x69\x82\x15\xd3\x98\x2e\x0c\xb2\x0d\x48\x3d\x27\x8a\xe7\x55\xa6\xa9\x60\xb2\x52\xe1\x95\xda\x9f\xe7\xbc\xa6\x19\xfb\x84\xb7\x63\x9f\x59\x95\x9b\x5e\xdb\x0c\x02\x04\x2b\x35\x99\x6a\x97\x39\x84\x8e\x5e\x9b\x18\xd0\xf4\xa2\xe6\x25\xea\x6c\x7b\xec\x13\x4b\x6c\xb2\x8e\x22\xab\x66\xbc\x23\xb3\x54\x30\xbb\x10\x6a\xdf\x1c\x87\x14\xfc\x8f\xa8\x8a\x0b\x9d\x45\xde\xa2\x26\x63\xeb\xb2\x3a\xaf\xa9\x75\x5f\x29\xd6\x24\xbb\x0f\xcd\xd0\x19\x71\xfb\x07\xa6\x09\xdb\x16\xa6\xc9\xcf\x77\xef\x4d\x20\x65\x05\x13\x29\x94\xc0\x7b\xdb\x5c\x20\xdc\xa5\xbd\x1e\x91\x2d\xd7\x16\x4b\xb1\x5c\x95\xb7\x16\xb9\xf2\x24\xe5\xb9\xcc\x52\x45\xd8\x27\x5d\x52\x83\x3f\x73\x83\x29\xeb\x6f\xa6\x84\x8a\x45\x40\xad\xcd\x97\x54\x91\x9b\x3c\x0b\x7f\x94\xfe\x9c\xf8\x23\xc5\x92\x92\xe9\xa0\x68\xe2\x1e\xb5\x3e\x5c\xe7\xed\x0d\x6c\x3d\x5e\x91\xaa\xf1\x57\x17\x13\xd3\x14\xe3\x0d\x1a\x4f\x28\x0e\xa5\xef\x96\x4a\xfc\x16\x54\xa9\x5a\x50\x05\xe2\x63\xaf\xad\x6a\xa5\x97\x08\x18\x02\x15\xb2\x7c\x4a\x84\x5c\x9a\xa9\x1f\xfd\x53\xdb\xbd\x5b\xaf\x04\x74\x5f\x9b\xf0\x72\xac\x1e\x40\x05\xc4\xd1\x63\x37\x23\x08\x2e\xc6\x7f\xab\x35\x45\xfb\x71\x65\x21\xfb\x64\xd7\xbe\xdf\xcb\x1e\xe7\xbf\x13\x1e\xf2\xd6\x4f\x25\xf6\xde\x23\xae\x2e\x8a\x2a\x54\x1b\x13\xa9\xf5\x94\x8f\xac\x7c\xe4\xec\xe9\xc2\x46\x79\x8d\x9f\xb8\x9e\x8f\x6d\xa0\xf4\x05\xc8\x06\x17\xbf\x80\xff\x05\x8e\x8f\x12\xf6\x65\x9a\xda\xd0\x4b\x9b\xde\x16\x13\x3a\x4c\xbc\xea\xc0\x23\x88\x84\x1c\x91\x8a\xa7\x7f\x0a\xea\xbb\x7f\x2d\x90\x08\xf3\xe9\x14\xf2\x1f\xc7\x54\xee\xb2\x5f\x2c\x69\xab\xec\x43\xcb\x8c\x86\x68\xa7\xec\x6d\xf6\x08\xb5\x39\x7e\xd7\x91\x35\x2e\x10\x65\x8e\xab\x89\x04\xac\x44\x27\x7a\x39\x80\xee\x2a\xa5\x9a\x2a\xa6\xc3\x34\x95\xf1\x57\xc0\xeb\xde\x60\x26\xff\x36\xd8\x9f\xc0\xe4\xc6\x20\x79\x8a\xcb\x95\x4b\xc6\x7f\xb4\x4c\xa9\x68\xbd\x69\xd8\x51\xbb\x89\x21\xd8\x65\xee\x6a\x1d\x39\x87\x5d\x1c\x25\x35\x87\x9b\x04\xe5\xdb\x8e\x00\x53\x3b\xc7\xef\xbf\xbf\xb9\x8a\x65\xc6\x9b\x2f\x1d\xcf\x0a\xff\x6e\x6f\x93\x05\x29\x30\x8a\xf1\x9f\x2a\x5f\x7e\x85\x92\x0f\x35\x74\xd9\xf7\xf7\xb5\xb6\x59\xc2\x1a\xfd\xf2\x15\x57\x0f\xfb\x94\xff\x56\x3a\x6f\xdf\xbc\xaf\xdf\x5c\x13\xfb\x74\x9b\x8a\xb8\x63\x90\x7d\x2b\x90\x77\xae\x14\x35\x4b\x58\x63\x98\x4a\xb9\x7a\x38\xb6\x00\x5a\xa4\xef\xbb\xd2\x21\xbc\x2c\xe5\xf7\xb2\xf4\xe5\x4a\xae\x78\xd5\x97\x16\xb2\x22\x4f\x36\xc5\x7c\xb0\x7c\xf7\x91\x17\xaf\xc9\xb5\x50\x55\xc9\x1a\x0f\xdb\xe5\xc1\x0c\x43\xb5\x47\x69\x0f\x4a\x16\xa8\xd7\x47\x54\x94\x1f\x15\x5c\xed\xc6\xbe\x58\xdd\x7c\x41\x4b\x0d\xb2\xe0\x21\x20\xb6\xee\xdc\x21\x72\xef\x81\xd8\x0f\xc8\xde\x4c\x5d\x20\x5a\xdb\x2b\x82\xab\xba\x9b\xc6\xbd\x00\xa8\x68\x1c\x58\xbe\xad\x6b\x12\x91\x8b\x94\x3d\x5e\xa8\x94\x7e\x39\x82\xa9\xba\xd0\xeb\xf6\xba\xa8\x22\x27\x5f\x9e\x84\x8c\x71\xc7\x73\x9e\xd1\x32\x5b\xb4\x2a\xcf\x37\x3d\x19\xea\xee\x86\x04\x0f\xc3\x57\x27\xe4\x4c\x96\x30\x76\x42\x05\xc9\x98\x4b\x82\x66\x91\xd3\x02\xa5\xa0\xf3\x17\x79\x07\x0e\x67\x89\x41\xec\x7d\x10\xf0\x4d\x1d\x9f\x66\x79\x8c\x56\x6d\x9a\xab\x86\x0c\x73\x61\x68\xf3\x84\x7c\x6f\xe9\xa6\xe5\x45\x10\x36\xcc\xf6\xb8\x37\x5e\xee\xc9\xbc\x1c\xa5\xce\x92\x7a\x66\x4f\xca\x17\xb2\x6a\x3f\x7b\xc1\xa7\xd1\xad\x24\x9a\x71\xfd\x81\x15\x72\xaf\xdc\x27\x76\xb9\x64\x7a\xe0\xda\x3c\x90\x8a\x43\x01\x66\xaa\x09\x45\x1c\x95\x54\x19\x35\x92\x21\x9a\x16\xba\xf6\xf2\xea\xfa\xf6\xc3\xf5\x9b\xcb\x8f\xd7\x57\xaf\xc9\xd7\x76\x1c\xee\xcb\x1e\x13\xf2\xd1\x2f\x83\xe5\x05\x14\xdb\xb2\x37\xf5\x4c\x46\x16\xab\x77\xea\xd0\xea\x22\xaf\x50\xf8\x81\x0a\x72\x23\xb8\x6e\xca\xd2\x63\x9c\x59\x26\x85\xf5\x51\x32\x7d\x5b\xb3\xc8\x8c\x6b\x9b\x1d\x1b\x87\x32\x3f\xbb\xde\x3a\x06\x6d\x8a\x4c\x40\x71\xea\x7a\x15\x47\xb7\xaa\x34\x87\xb6\x2f\xc9\xd8\xd5\x7b\x3e\x88\x5c\x5c\x97\xf8\x76\xf9\x9f\xd0\x96\xdb\x3c\x0f\x25\xdd\xef\x5c\xfd\x1c\x57\x01\x46\x96\x58\xe6\x13\xe1\xe8\x74\x32\x39\x9d\x00\xdb\x70\x3a\x39\x75\xbc\x6c\x56\xfb\xeb\x5a\x2a\xdc\x0c\x1b\x57\x29\xad\x7d\x5b\x26\x84\x7c\xe7\xc2\xd4\x21\xf7\xee\x92\x73\x70\xed\xf7\xdb\x94\x00\xc6\xac\x65\xed\x3b\x17\xa4\x3b\x04\xad\x66\x75\xef\x4f\xdc\x7a\x13\xcf\xf8\xa3\x4d\xcb\xb9\x57\x63\x48\x33\xc1\x48\x78\xf0\x57\x66\xc5\xfb\x0f\xdf\xee\x77\x66\x88\x44\xa2\xe7\x65\x71\x8f\x9d\x55\x22\xf3\x1c\xeb\x39\xcd\xeb\x0c\x72\x8d\xaf\x6e\x28\xe2\x0b\x57\x2c\x60\x71\xab\x69\xc7\x3d\x8c\x44\xe9\xae\xd3\x25\x45\x42\xfd\xd8\xa6\x89\x10\x8d\x14\xb7\xe7\x12\xfb\xb6\x26\x9d\x72\x29\xb6\x2c\x65\xbc\xa8\x67\x76\xf1\xe1\xfa\xf2\xea\xdd\xf5\x24\xdf\xae\x7e\x3a\x00\x86\x64\x22\x2d\x24\xef\xce\x93\x34\x26\x05\xd5\xdb\xb3\x18\x87\x63\xd1\x7a\xd0\x43\x60\xd1\xba\x73\x07\xc3\xee\x81\x57\xc8\xcf\x66\x11\xf3\x60\x40\xcb\x42\x66\x72\xd6\xb7\x2c\x7e\xc4\x09\xff\x02\xbd\xfd\xc7\x74\x1c\x52\x3a\x30\x4a\x8a\xd5\xf3\xc3\x08\xb0\x7a\xee\xf6\xb2\xd9\xb0\x5a\x54\xd3\x41\xf1\x85\x2f\x74\xcf\x9e\x8d\x99\x5f\xd9\x48\xd4\xe7\x00\x2a\x72\x55\x0e\x9b\x7a\x7d\x05\x2b\x73\x8e\xd1\x7b\xc7\xe4\xf2\x0f\x7c\x42\xdd\x0c\xbe\x41\xc6\xb7\x9d\x60\x1d\x77\x34\xae\xcf\x36\x35\x28\x4a\x36\xae\xcb\x12\x4d\x79\x06\xe1\x49\x0d\x23\xe1\x11\x87\x8e\xee\x9d\x2a\xd9\x69\xa5\xb1\x8f\x6c\xb1\xac\x52\x6e\x98\xe2\x5a\x89\x8f\xe9\x98\xbb\x2b\x50\xd6\xe5\x43\xad\x9e\x8c\xce\xb0\xac\x50\x69\x4d\x72\x45\xc9\x1f\x79\xc6\x66\x50\x4d\x99\x8b\x99\x6a\x32\xdb\xd9\x90\x9e\x8e\x01\x20\x42\x8c\x35\xe4\xb0\xb6\x60\xbd\x33\x7f\x35\xc9\x7a\x10\xa8\xdf\x7f\xf7\x11\x2a\x9d\x83\x3b\xc7\x81\xd5\xe4\x66\x3a\x9d\x84\x88\x90\xf1\xb8\x0b\x0a\x3e\x7e\x77\xf5\xdd\xd9\xdf\x8c\xdc\x93\x66\xe7\xe4\xcf\xcc\xae\x00\x22\x9d\x74\xc9\x13\x4d\x9e\xe6\xb2\xae\x01\x0d\xbb\xd0\x40\x03\xdc\x52\xf4\xe6\xb3\x6f\x5d\x98\x37\x85\xec\x04\x0e\xe0\x34\x5a\xbd\x71\xa6\x30\xd8\xc6\x79\x69\x1c\x5d\x48\xda\x23\x61\x3f\x28\x09\x72\xb6\xaf\x75\x97\x32\x50\x4b\x8a\x6a\x4a\x24\x67\x94\xa8\x45\x9e\x71\xf1\x30\xaa\x4b\x78\x4d\xa5\x4d\x5e\xca\x88\xf9\xc1\x5d\xd5\x92\xd1\x6c\x17\x42\x77\x00\x00\x8f\x22\x72\xfa\x40\xb6\x18\xb0\x84\x18\x3c\xf4\xef\x0e\xa5\xa2\x3a\x2a\x92\x42\x9d\x9c\x7c\x7e\xdb\xca\x55\xa2\xf8\x3e\xa9\x12\x74\xd8\x22\x49\x82\xdc\xdc\xbd\xb9\xbb\xf9\x5c\x8c\x9d\x9b\x78\x05\x58\xd8\xf3\xc9\x37\xfc\xa7\x2e\xc5\xc1\x98\x64\x55\xf7\x3b\xa8\x8a\xb9\x95\xa5\xa6\xdb\xcb\x66\x87\x23\xcb\x64\x4e\x8b\xcb\x4a\xcf\xaf\xb8\x82\x2c\xb8\xb1\x4c\xe8\xca\xf7\x5e\x6c\x1d\xd6\x9e\x77\x75\x0e\xb9\x03\x24\xfb\xde\x9b\x7f\xbf\xbc\x25\xb4\x32\x87\xaf\x6d\x11\xda\xbd\xb1\x6c\xfe\xca\xee\x30\xe3\x44\xcf\x75\xd9\xaf\x3b\x56\xe5\xde\x3a\xf4\x9a\x9e\xcb\x35\x79\x30\x6b\x1f\xd1\xac\x0d\xc8\xea\xb3\x36\x65\x73\xc1\x35\xa7\x5a\x96\x87\xb2\x07\xb6\x06\xa8\xd5\x84\x95\xd2\x32\xb7\x37\xf2\xc6\xbd\x01\x9e\x5d\x81\x9c\xd9\x4a\xb7\x8d\x96\x11\x64\x61\x38\x99\x1b\x61\xa4\x4e\x9a\xb0\xa5\x30\x99\x11\xd4\x5c\xc5\xd1\xb9\x7b\x27\x60\xdc\x3f\x58\x05\x3b\x54\x39\xca\xfe\xf8\xfa\x0f\x9e\x85\xfc\x8f\x4d\xb9\x52\x57\x1b\xdb\xea\x3f\x13\x29\x04\x4b\xc2\xea\x8f\xc7\x9c\xdc\x4f\xb1\x88\x92\xff\x24\x96\x2c\x05\xb8\x05\xff\xb7\xa2\x19\x6e\x5d\xd8\x01\xc4\x4c\xb2\x75\x0c\x07\x81\xaf\xf6\x41\xdb\xf5\xd5\xa7\x8a\xde\x82\x80\xc0\x2a\x85\x85\x8b\x70\xd1\xba\xa4\x42\x99\x83\x8c\x55\x90\x9c\x5a\x6f\x89\x53\x72\xa6\x93\x22\xc0\x71\xe0\xa0\x41\x9f\x59\x25\x7c\x2e\x10\xd7\xf6\x11\x4f\xf7\xdb\x3a\xe8\x33\x74\x92\x07\x71\x35\x80\xcb\x72\x10\xd5\xad\xed\xba\x3e\x74\x7f\xf1\xc8\x7a\x91\x6f\xb9\xd2\x18\x04\x83\x2f\x43\xf2\x2b\x8c\xbf\x33\x1c\xf3\x2d\x91\x25\xe1\xc5\x7f\xd1\x34\x2d\x5f\x23\x97\x60\xa5\x3e\x59\x86\xf8\xb8\x73\x55\x57\x94\xa1\xa2\xf6\xa3\x39\xd3\x8b\xc2\x16\x8f\xfb\xf8\xe6\x16\xfa\x52\xe4\xf7\xbf\x7d\x05\x2c\xf4\xbf\xfe\xfa\xb7\xaf\x82\xa1\xe6\xf9\x02\x2b\xff\xd9\xdc\x16\x8e\x11\x68\xd2\x0a\x16\x81\x4c\x47\x86\x09\xbd\xc3\xb8\x0a\x43\x2e\x2c\x6a\x42\x08\x36\xc0\x52\x93\xb9\x7e\xac\xea\x10\xed\x30\x44\x3b\xc4\x26\x8b\xf3\x25\xd7\x83\x68\x81\xbc\xfe\x21\xd3\xca\x2a\xd6\x46\x84\x7d\xfb\x39\x22\xec\xce\x03\xea\xbe\x3d\x71\x5b\xea\xbb\xd7\x85\x45\xd8\x36\x01\xa9\x57\xef\xef\xfe\xeb\xdb\xcb\xaf\xae\xbf\x85\x75\x5a\x7f\x3d\x73\x05\xac\x40\xb2\x7f\x37\xf6\x3d\x5d\xb8\xd0\xbd\xde\xaf\x63\x80\x58\x72\x09\x10\xe4\xfd\xdb\xbb\x48\x6f\x80\xc3\x9a\x3b\xc4\x34\x64\xdf\x8e\x6b\x0d\x30\x2f\x41\x3d\xd1\x7d\x45\xab\x1f\xd4\x68\xe0\x95\xdb\x68\x69\x35\xcc\x49\xe3\x2a\x8e\xa0\x56\xe8\x3a\x46\xf2\x99\xb0\x72\x66\xd3\x70\x23\x5f\xa4\xb9\xfa\x30\x47\x12\xca\x42\x96\xf1\x29\x17\x02\x03\x95\x4b\x2f\x2f\x83\x41\x48\x48\x22\x4a\x43\x3c\x0d\xd9\x64\x4a\x39\x82\xf1\xb9\x42\x75\xb1\x2e\x9b\xe1\x3e\x51\xfd\xda\x01\x6c\x26\x43\x97\x8a\xd1\xf3\x06\x68\x05\x7e\x77\x99\x57\x36\x64\xaa\x44\x02\x02\xa5\xb9\xeb\x42\x88\x07\xb2\x8e\xaf\x49\x69\xb8\x9c\xbd\x12\x32\xbe\x1d\x9d\x98\xc0\xa8\x7b\x8c\x2b\xab\xfb\x3b\xc4\x45\xab\x3b\x5f\xce\x81\x42\x63\x8e\x98\x50\xe5\x78\x2d\xeb\x48\x1d\x95\x2c\xe5\x99\x61\x80\xbc\x40\x4a\xf4\xe7\x83\xe9\x13\xf6\xad\x4b\x28\xe6\x52\x4b\xd1\x3b\x34\x76\xdd\xe7\x6d\xbc\x74\x0b\x6f\xbc\x69\x12\xd1\x36\x47\x8c\x21\x36\xb5\x59\xd8\x08\x00\x8e\x3a\x4b\xe1\x4c\xc0\x6d\x0b\xf0\xd1\x59\xcb\xf4\xe6\x6a\x4f\x88\x60\x48\x14\x84\xed\x98\xd9\x15\x63\x5c\x51\xd3\xe8\x88\x77\xf3\x89\xdb\xf5\x9b\x2b\xcb\xb7\xbb\x70\x76\x65\x21\x9f\x6c\x06\xfd\xbd\xb1\x22\xb2\xd4\x4f\xb2\x8c\x4f\x6c\xd6\xfe\x70\xc9\xbb\xd0\xfe\xb6\x92\x2f\xe2\x25\x5e\x53\x9c\xe3\xe7\x70\x55\xef\xe0\xaa\x2e\x95\x2a\xde\x74\x65\x5f\xea\x8d\x7d\xde\x9b\x7a\x14\x0a\xfe\xb3\xca\x4a\xe5\xae\x47\xe4\x8e\xb9\xcf\xac\x5a\xce\x9c\x75\x83\xdd\x28\x28\x47\x3d\x0c\xb1\x37\x6c\x56\xca\xbf\x41\x0e\xf7\x18\x44\xe6\xbe\x41\x3b\x14\xd6\x36\xcd\x32\xb3\xab\x52\xf8\x35\x54\x6d\xb6\xa7\x11\xc1\xea\x9e\x39\x2d\x14\x56\x7f\x49\xe5\x93\x78\xa2\x65\x4a\x2e\x6f\x6f\xf6\x83\xbd\x22\x22\xf4\x10\xd6\xc2\x32\x9b\xf7\x88\xd1\x6b\xba\x07\x87\x6a\x9b\x17\x9f\x91\x7b\xae\x55\xab\xbe\x86\xa7\x04\x31\xa8\xbd\xf6\x22\x30\x98\xc5\x60\x11\xdb\x53\x14\x27\x21\x88\x4c\x34\xcd\x5c\x31\x72\xa6\x9f\x18\x13\xe4\xd5\xab\x57\xa8\xd9\x7e\xf5\xbb\xdf\xfd\x8e\x40\x25\xda\x94\x25\x3c\x5f\x7d\x11\xde\xfa\x5f\x5f\x7e\x19\x32\xe8\x7f\x5c\xbe\xfb\xd6\x56\xeb\x57\x98\x9b\x14\xc7\x86\x03\xf6\xbb\x57\x23\xf2\x7f\xee\xbe\x7b\xdf\x24\xbb\x6f\xff\x0a\xf0\x53\x6f\x51\x10\x77\xee\xb9\x46\xfb\xda\x6b\xaa\xe7\xb0\xe7\x50\x9b\x62\x3a\xf5\x6a\x13\x60\xd5\x09\x1d\x58\x73\x13\xb3\xaa\xf1\xd9\x1c\x36\x95\x0b\x80\xdf\x0c\x7c\xbe\xb9\x59\x26\xd8\x13\x5c\xf2\x41\x74\x9d\x87\xd1\x6a\xf2\x12\x30\x86\x59\xf0\x88\x64\xfc\x81\x91\xa9\xfa\xba\x94\x55\xd1\x14\x46\x2a\x99\x32\xc2\x87\xad\x0b\x82\xc3\x35\x30\x14\x54\x3e\xe3\x70\xe6\x7d\x7b\xb9\x63\x2d\xa1\x16\x25\xb8\x1a\x85\xb6\x06\xa8\x0b\x12\x42\x8c\x62\xf6\xf3\x79\xec\xe4\xad\xb9\xde\xd6\xb3\xc1\xc3\xb5\xb5\x71\x1a\xb4\x47\x33\x29\x66\x3e\x2c\x34\xd4\xdf\xb9\xe1\x2d\x8a\x20\x13\x62\x64\x59\xaa\xd8\x2a\x93\x09\xc6\xe1\x7c\x2c\x2b\xa5\xbf\xaa\x44\x9a\x05\x17\x16\xe8\x5b\xca\xe1\xcd\xca\x88\x18\x52\x62\x0d\x23\xa0\x2e\x4b\x12\xa6\x10\x0c\x7e\x9c\x40\x4d\x05\xdd\xbc\xfd\x23\x9a\x4e\x83\xc7\x93\xd3\x75\x43\x5a\xfb\x92\xb9\xba\x54\x10\x5a\x69\x39\x86\x4a\x42\x2e\x76\x67\xf2\xc5\x17\xc1\x23\x40\xe9\x8e\x11\x94\xdf\xa8\x99\xbb\xd5\x21\x3d\x98\xf1\x0b\x76\xc4\x0c\xb4\x65\x1d\x06\x13\x58\x9b\xe8\xbd\xab\xe6\x89\xb3\x11\x34\x67\x23\x83\xd2\x71\x66\xc1\x83\x2d\xa5\xa0\x56\x7c\x26\x58\x89\x0a\x2d\xa8\x1e\xbb\x54\x89\x36\x66\x1d\xdf\xa0\x8c\x62\xe8\x9b\xc1\x2b\x8a\xd0\xd9\x0c\x4a\xcb\x3d\x1a\xcc\x5c\xe6\x34\xe3\x7f\x6f\x72\x5f\xcf\x19\xb9\xbd\x7e\x07\x31\x43\xc0\xa1\x1b\x96\x4f\xb3\x90\x60\x6e\x6c\x75\x2a\x01\x03\x5d\x0d\x57\x3e\x21\xe4\x5a\x49\x0d\x09\xa1\x4d\xff\xf6\x50\x54\x5d\x83\x06\x1c\xc6\xc6\xf7\x99\x4c\x42\x52\x13\xd5\x9b\x66\x8b\xd0\x89\x94\xc0\xa7\x64\xce\x68\xca\x6c\x71\x4f\xc3\x6c\x15\x05\x4b\x27\x84\xbc\x31\xb7\x74\xca\x13\xa8\xa0\x6b\x7e\x4b\x59\x5a\x19\x26\x1e\xb2\x38\x04\x0f\xf8\x71\xce\x88\x2c\x53\x86\x15\x94\xa6\x24\xf1\xbb\xf5\x28\x1f\xc4\xa3\x41\xb1\xc8\x7b\xae\x4b\x5a\xda\x1a\xc0\xf6\x24\x82\x87\x33\x88\x0e\xab\x50\x41\xaf\x30\x32\x16\xb2\x0e\x89\x6b\x76\xad\x47\xa9\xbd\xf8\x32\xbf\x41\x76\x48\xd7\xfa\x14\xe7\x05\xf8\xbf\x8b\xae\x0e\xbe\x5b\xbd\x48\x1c\x0f\x98\xe9\x55\x6c\xa0\x1c\x35\xd2\xc9\x1c\x59\x9a\xa5\x3b\x4a\x08\xca\x48\x34\xae\x46\x24\x43\xde\x85\x3b\x2c\x50\x3b\xd8\x32\x3d\x31\xac\xa5\xae\x68\x96\x2d\xc6\xec\x93\xa1\x26\xe6\x12\x03\xe1\x83\x54\x09\xae\x38\x17\x8b\xac\x80\x0a\x97\xaf\x28\x99\xc6\xe4\x8a\x27\xb8\x26\x21\x21\x1a\xf1\x04\xbb\x85\x4a\x5b\x95\xc6\x74\x4d\xa3\xf5\x9f\xc4\xad\xf3\x91\x95\x0b\x3b\x42\xc4\x87\x3d\x2b\x47\xf6\x2d\x08\xbd\x5b\xf9\xf5\x97\x57\x80\x7d\x97\x4a\xb1\x3d\xab\xc4\xee\x5e\x97\xf8\x45\x15\x62\xdf\x67\x29\xf6\x9d\x8a\xb1\xef\x52\x8e\xbd\x6f\x41\xf6\x1d\x4a\xb2\xef\x56\x94\xbd\x77\x59\xf6\xe7\x28\xcc\xbe\x63\x09\xf0\xdd\x8a\xb3\xef\xa7\x10\xf8\x33\x14\x68\x3f\x66\x89\xf6\x9d\x4f\xa8\x7f\x99\xf6\x7d\x9d\xcf\xb3\x95\x6a\x7f\x11\xc5\xda\x9f\xbb\x5c\xfb\xce\x05\xdb\x77\x2d\xd9\xbe\x53\xd1\xf6\x1d\xc0\xbf\x77\xe1\xf6\xdd\xe1\xfe\xd9\x8b\xb7\xbf\x80\xf2\xed\x2f\xa5\x80\xfb\x4e\x9c\xcb\x3e\x8a\xb8\xf7\x06\xe1\x7d\x14\x72\x8f\x09\xc2\xc0\xb6\x0f\x31\xd4\xc1\xf4\x1a\xcd\xd4\xfd\xc2\x95\x0e\xb1\x82\xe0\xaa\x9c\x18\x35\x24\xc8\x94\x9e\xfc\x09\x85\xd0\x7c\x11\x3c\x5e\x64\x8b\x3c\x28\xe9\x4a\xbc\x1c\x69\x93\x0d\xbd\x2a\x2b\x36\x22\xa9\x14\xa7\xda\xaa\x93\x0a\x99\x62\x1e\xc6\xaa\x70\x71\x0e\xb5\xab\x61\xba\xe6\x1c\xce\x82\xea\xcf\x35\x8d\x96\xcc\x0c\x46\x1f\x29\xcf\xe8\x7d\xe6\x24\x78\x70\x43\x43\x55\x22\x24\x7c\x70\xce\x6d\xeb\x86\xec\x2e\xa5\xb6\x34\xa4\x2d\x12\x2e\x24\xe0\x2e\xc8\xa1\xe4\x0f\xdb\x1c\xba\x37\x78\x5b\x3d\x19\x35\xde\x36\x20\x02\x2c\xde\x14\x2d\x47\xb5\xc3\xdf\x59\x29\xa3\x46\x58\xa3\x9a\x89\x87\xce\x30\x5b\x72\xd3\xc2\x9c\xe0\x9b\xd6\x02\xcd\x0f\xc0\x3e\x3f\x5a\x13\x19\xc4\x9a\x7b\x39\x03\x4a\x89\x47\x03\xd6\x76\xf8\xe1\x1e\x56\x75\xf0\x2b\xd7\x1c\xd5\x0b\x55\xb0\x79\x6a\xf1\x38\x6a\xd5\xa1\x35\xfb\x68\xf3\x7b\x61\x5a\xae\xa9\x2d\x8d\x84\x5a\xfd\x5d\x41\xb1\x0e\x4b\xaf\x44\x53\x30\xbf\x9f\xfa\xb9\xc7\xb1\xa2\xa5\xff\x1d\x2d\x7a\x19\x9a\xea\xaf\x5b\x35\xb0\xe8\xbd\xac\xb4\x8b\xac\xb7\xbf\x43\xc5\x17\x2d\x9d\x51\xee\x70\xaa\xe9\x3e\x3a\x84\x68\x46\x79\x17\x90\x46\x1f\x8c\xb6\x07\xd0\x88\x30\x9a\xcc\x0d\x07\x38\x46\x03\xbf\xe1\x52\x1d\x3b\x7a\x65\xb6\x0e\x19\x43\xb9\x4c\x62\xe2\x80\xaf\x3e\x0d\x07\x72\x9e\x67\x88\x33\xcb\x38\x87\x36\x65\x9d\xa6\x2c\x73\x2a\x1a\x37\xea\xa8\x31\x9d\xfa\xcb\xde\x1e\xa7\x5a\x81\x55\x82\x0c\xb8\x94\x3d\x38\xe3\xca\x4c\xe7\x81\x2d\xea\x8b\x11\x35\xde\x9a\x15\x35\x89\x27\x0c\x36\xb5\x1e\x2d\x95\x58\x19\x09\x4a\xb6\xc6\x8e\x06\x7a\x0f\x58\x08\x75\xaa\x23\x2f\xd1\xc5\x9c\x27\x90\x9a\xcc\x74\x6d\xdf\x75\xa7\x5a\x1f\x46\x9c\x78\xeb\x1d\x91\x62\x86\xeb\x80\xa9\x43\x9a\x12\xb3\x26\xa6\x14\xe1\xb0\xcb\x39\x2d\x1f\x58\x5a\x73\x49\x13\x72\x6b\x16\xef\x64\xe0\xa8\x31\x4b\x47\x8d\xc0\xb9\x91\x2e\x5a\x89\xa8\xcd\x84\x4e\x27\x93\x53\x9b\xd2\x6d\x35\x2d\x75\x34\xf6\x8a\x15\x78\x7b\x88\xb9\xad\xfb\xfb\x8e\x16\x0a\xc5\x7d\xc3\xde\x80\xba\x4f\x42\x3e\x78\x3d\x77\x36\x3b\x1a\xe1\xee\xbf\xbc\x9c\x1e\x02\x50\x5f\xb5\x6d\x1f\x95\x6d\x94\x61\x0e\x5b\x7f\x35\x6d\x2f\x15\xed\x26\xf5\xac\x3d\x29\x7b\xe3\xfb\x6a\xd6\x7b\x29\xf8\xf2\x20\x67\xb4\xe5\xb6\xbb\x5a\x0f\x9c\x8a\x5a\xe5\x2d\x83\x5c\xd5\x6c\x59\xd6\x38\x0e\xd1\xb5\x67\xf1\x55\x5b\x6e\xcf\xe7\xbb\xb6\xdc\x6e\xa6\x80\xfe\xd6\x27\xbd\xf7\x9d\x09\x6b\xb6\x4e\xc5\xab\x4e\xc8\x91\x9c\xda\x96\xdb\x81\x9d\xdc\x96\x5b\x9c\xd3\xdb\x72\x8b\x71\x82\x5b\x6e\xb1\xd2\x19\xb6\xdd\x2f\xb0\x9f\x7a\xbb\x6c\x09\x79\x96\xb5\x03\x96\x0b\x44\xdd\xc2\x43\x72\xbd\xee\xad\x25\xd4\x78\x75\xe9\xbd\x92\x59\xa5\xc3\xf3\x7b\x6f\xea\xce\xa7\xfb\x30\x71\xa7\xd9\x8c\x25\xf6\xcb\x1d\x7b\x7c\x03\x70\x6d\x48\x8e\xfb\xf5\xda\x0b\xb5\x1f\x53\x63\xb7\x4b\x0a\x15\x6c\xcf\x9d\x48\x05\xdb\xe1\xd2\xa9\x60\x7b\x1e\xcd\xa0\xeb\xa0\xae\x86\xe6\x32\x55\xb6\x18\x77\x48\x74\xa2\x15\x4a\x10\xce\xb6\x84\xb9\x2d\x63\xe4\xb2\x3e\xea\xa5\xdd\x55\xd4\xce\xa3\xff\xf2\xf6\xa6\x97\xe4\xef\x7d\xbf\x41\xf6\xf7\xdf\xf8\x19\x4b\xff\x37\x28\xce\xfb\x7e\x3a\x57\xcd\xca\x6d\xec\x58\x24\x39\x7e\x1e\x39\x68\x65\xda\x6f\x0d\x2d\xf2\x73\xd7\xb5\xeb\x9c\x63\x00\x44\x43\xb5\x9a\xea\xe9\x9e\x7f\x67\x8c\x6f\x30\x79\x1e\x99\xe9\x88\xf2\x0f\xec\x47\x50\x5a\xb2\xe5\xd6\x3a\xa9\xd3\x0f\x6e\xb1\x56\x41\x8a\xca\x1a\x4f\x43\x54\xc8\xf4\x35\x1a\xf6\xa8\x10\x52\xa3\x2f\xc6\x08\x95\xeb\x6a\xd4\xf8\x0d\x7b\x51\xee\xa5\x17\x14\x37\x39\xfd\x9c\xfc\x94\x60\xe5\xb7\xb1\xa7\x48\x76\x76\x38\x6a\xa8\xdb\x1e\xdc\x3c\x6c\x4f\xee\x00\x55\x32\x67\x39\x85\x7f\xbe\x75\xcb\x33\x58\xc6\xba\x5b\x83\x16\x89\x95\xb9\x22\x72\x3a\x6a\x85\xe3\x9d\x3c\x86\x15\xea\x5c\x6d\x3b\x3a\xbc\xd4\xa7\xb0\x87\xcd\xb8\x6d\x71\xc4\x06\xae\x41\xb0\x05\x5b\x80\x4b\xd2\x50\x6b\xd9\x0c\x81\x79\xc4\xdd\x7b\x86\x85\xef\xc7\x5a\x8c\xed\xb9\xd4\x0a\x7d\xd5\x09\xa3\x9a\xed\x69\x2b\x07\x7a\x4c\x61\x50\x27\x0c\xea\x84\x7f\x6a\x75\x82\x47\xd3\x1d\xae\x5f\xa3\x25\xf0\x93\x09\x3a\x55\x41\x93\xd1\x7a\xd2\xd4\x89\x34\x77\xd2\x89\xfc\xb2\x6c\x6b\xeb\x8d\x4c\x8d\xfa\xfa\x49\xad\xdd\xab\xf4\x74\xfc\x7b\xc2\x44\x22\x53\x28\x5b\x0a\xfd\x97\x4a\x03\x57\xd9\x48\xaa\xfe\x5c\x72\x37\x96\xaf\xf1\x87\xbe\xfb\x72\x0f\xbd\x50\xb0\x0b\x5f\x7e\xbb\x1f\xde\xaa\x17\x02\x6d\xb8\xb0\xba\xae\x87\xdd\xb2\xba\xb6\x92\x65\xc7\x9a\x60\xeb\x8c\xe7\xdc\x3a\xab\x1a\xec\xc2\x54\x67\xc9\xbe\x75\xed\x0c\xbb\x99\x24\x45\x35\xb2\x5d\x4e\x72\x96\xcb\x72\x31\xaa\xbb\x35\x3f\xb6\xc6\xb1\x6f\x9c\x03\xd3\x97\x54\x65\xc9\x84\xce\x16\x1e\xfb\xf7\x39\x71\x7f\x6e\x47\x8f\xcc\xfc\xd5\x07\x1b\xeb\x0e\xd1\xb4\xf6\xfd\x6f\x6a\xf8\x82\x22\xaa\xde\x15\xa0\x31\x36\x03\xd4\xa8\x51\x4d\x98\xa7\x4c\x3c\x92\x47\x5a\xaa\xf8\xfb\x46\x76\xe7\xf7\x52\xfe\xc8\xd5\x5e\x3c\xd0\xef\x2c\xf1\x43\xb5\xa8\xac\x74\x51\x69\x8b\x8e\xdd\x35\x72\x15\x6d\xea\xeb\xb3\xc4\xf4\x7e\x19\x52\x72\x68\xb5\x15\x54\x6b\x56\x8a\xd7\xe4\xff\x9d\xfd\xe7\xbf\xfc\x63\x7c\xfe\xa7\xb3\xb3\xbf\xbc\x1a\xff\xef\xbf\xfe\xcb\xd9\x7f\x4e\xe0\x1f\xbf\x3a\xff\xd3\xf9\x3f\xdc\x1f\xff\x72\x7e\x7e\x76\xf6\x97\x6f\xde\x7d\xfd\xf1\xf6\xfa\xaf\xfc\xfc\x1f\x7f\x11\x55\xfe\x80\x7f\xfd\xe3\xec\x2f\xec\xfa\xaf\x81\x9d\x9c\x9f\xff\xe9\x97\xbd\xa6\x4b\xc5\xe2\xbb\x1e\xf8\x0d\xdb\x78\x47\xfa\xd8\xee\xa5\x37\xd8\x2c\x71\xcc\x5c\xe8\xb1\x2c\xc7\xd8\xdd\x6b\xf0\xb0\xeb\xd1\xa9\x03\x8b\x7d\xdc\xc3\x86\x0e\x37\x35\x9a\x9c\xf0\xf1\x0c\x17\x6d\x77\xf9\x02\xb3\x7a\xf4\xd2\xf2\xe1\xa7\x1b\x14\x7c\xf6\xc7\x9f\xb1\x6e\xef\xb3\xf1\xec\xb1\x19\xea\x07\xb7\x9e\x67\x77\xeb\xc1\x93\x18\x7c\x7a\x9a\xc5\x0d\x3e\x3d\xd0\x06\x9f\x1e\xbf\x0d\x3e\x3d\xad\x71\x07\x9f\x9e\x41\x09\x37\x28\xe1\x9e\x5f\x09\x37\xf8\xf4\x0c\x3e\x3d\x83\x4f\xcf\xcf\xdb\xa7\x07\xe5\xad\x75\x9e\x3d\x56\x8a\x6a\xdc\x7a\x3e\x3b\xaf\x1e\x65\x00\x22\x61\x97\x49\x22\x2b\xa1\x3f\xca\x07\x16\x6c\x9a\x5e\x92\xfb\x57\xfa\x81\x4a\x50\x1b\xf4\x00\xab\x2f\x1f\x4d\x29\xf0\x02\x33\x51\xd1\x2a\xe5\x46\x84\x3f\x16\xde\x71\xe3\xf9\xa5\x35\x45\xca\xd2\xe6\x07\x8b\x94\xb4\x39\x9a\x09\xb9\x24\x25\x4b\x78\xc1\x6d\x38\x3a\xc5\xe7\x51\x43\xc2\xbd\xb0\xe9\x6e\x17\xe6\xb6\xb0\x6c\x8a\x68\x9e\x8a\x26\x0d\x6e\xe9\xc9\xcc\x96\xba\x2c\x4d\x29\x4e\xf4\x32\xd3\x44\xde\x05\x10\xd3\x13\x57\x8c\xa8\xb9\xac\xb2\x94\x94\xec\x6f\x8e\x4d\xb2\xab\xfc\xe8\x8f\xe6\xeb\x8a\x63\x87\xf5\x96\x63\xf7\x91\x16\x3c\xbc\x26\x4b\x3d\xfb\x3e\x58\x8f\x7d\x2a\x78\x09\xf7\xed\x8e\x25\x52\xa4\x47\x53\x65\xad\x0c\xdc\x30\x38\x60\x42\xc2\x3c\x19\x75\x56\xc0\x47\x9a\xf1\x94\xeb\x45\xed\xbd\x82\x28\x21\x0e\x8c\x11\x7f\xd4\x50\xaa\x9a\xd3\x24\xb4\x28\x4a\x49\x93\x39\x53\xde\xcc\x90\x4b\xb7\x19\xd6\x43\xd3\x2c\xfb\xad\xc8\xaa\x19\x17\xc8\xd4\x43\xff\x86\x73\xcb\x16\xa4\x94\xda\x39\xb6\xd9\x85\x2c\x4f\xee\xa3\x37\xb0\xf9\x3c\x6a\x58\x64\x8a\x74\xb9\x00\x4f\x39\xe9\x0f\x87\xab\xe5\x53\xff\x0f\x45\x64\x96\xba\x7a\x78\xbf\x7f\x65\xe4\xc0\x04\xaf\x6e\xa4\x72\x52\x41\x56\x40\x33\x62\x66\x38\x54\x43\xe6\x36\x0f\xf4\xeb\xdf\x90\xb9\xac\x4a\x35\xf1\x6b\x39\x7d\x09\xcf\xe2\x4e\x55\xa4\x8d\x93\x88\x26\x19\xa3\x4a\x93\x2f\x5f\x91\x9c\x8b\x4a\xf7\x89\xc3\x8e\x97\x2c\x3c\x99\xe2\xb7\xbf\x09\xfe\x6e\xa7\xf8\xed\xc8\xdb\xe6\x4b\x10\xf0\xef\x5a\x8c\xb0\xba\x4e\x2c\x61\x57\x48\x2e\xf4\xb2\x50\x61\x29\x6c\x3f\x6c\x0a\xda\xd4\x03\x60\xb1\x9f\x2a\x79\xbf\xd0\x31\xc5\x16\xec\x17\xed\x5c\x52\xff\xd7\x3e\xdc\x63\x05\xbf\x03\x94\x57\x28\xd9\x8c\x2b\x5d\x76\x29\xe9\xc6\x21\x28\x2a\x9c\xdf\x98\x19\x49\xfe\x10\x09\xd1\xa1\x63\x27\xae\x3a\xb3\x81\x4d\x01\x1c\x92\x77\xc1\x95\xe2\x01\xfd\x38\xf6\xd6\xf9\xd5\x4b\xab\x6f\xb0\xae\x56\x9e\x03\x46\x97\x31\xfa\x79\xeb\xe5\xc5\xc8\x17\x0e\x40\x0f\xb3\x65\xd8\x77\xfb\xe2\xda\x3c\x34\xb2\x24\x79\x95\x69\x5e\x64\xcd\xf6\x7d\x70\x1f\x58\xd2\x1a\x22\x9b\x36\x6c\x24\xf5\xb4\xfa\x14\xab\xaa\x60\x91\x59\x30\xab\x9d\xd5\xa3\x31\xa1\x21\xdb\x3c\x78\x35\xb3\x82\x96\xb4\x3e\xa5\x44\xe6\x39\x0d\x4a\xc3\x82\x76\x1e\x0a\x8e\x3d\x88\x9c\x0d\xe1\x2d\x69\xd6\xac\xda\xf3\xcd\xd8\x27\x90\x6b\x26\xa8\x08\x30\xd9\xf6\x28\xee\x0b\x3d\x13\xf9\x54\xfb\xe9\xcf\xf8\x23\x13\xcb\xd0\x6d\xd9\xf5\xaf\x68\xf2\xc0\x44\x88\xdc\xfb\xbd\x72\xfb\x9b\x2e\x04\xcd\x6d\xad\xde\xa2\x94\x8f\xdc\x5c\x03\x96\x2e\x8d\xa0\x46\x56\x95\x8c\x89\x6b\x5d\xa2\x6e\x64\xc9\xf6\xb9\x95\x95\x3a\x4c\x15\x47\xd3\xef\xee\x58\x52\xa1\x76\xbf\xe4\x8f\x09\x73\x3c\xa6\xe9\x79\x9f\x3b\xf0\x18\x50\xf8\x88\xac\xaf\x6e\x62\x73\xa7\xe2\x7d\x03\x9a\x5b\x1b\xa8\x31\xab\x60\x66\x70\xde\xa2\xae\x85\xb1\x04\x45\x36\xdf\xf9\xde\xea\xdb\x94\xf7\x31\x65\x4f\x3a\x8f\xb1\xbc\x4f\xdb\x68\xeb\x03\x4d\xa5\x22\x5f\x41\x66\xa7\x2b\x06\x8c\x7f\x1c\xeb\xd1\xa3\x1c\x24\xfb\x44\xf3\x22\x63\x6a\xf2\xf0\x7b\x50\xf1\xd9\xeb\x71\x51\xde\xa7\x17\x1f\xae\x2f\xaf\xde\x5d\x4f\xf2\xed\x17\xf0\x00\x2c\x0d\xcf\xe9\xac\x8b\x9d\x1c\x93\x5c\x0a\xae\x65\xb9\x1d\xf3\xbd\x88\xba\x52\x5b\x4b\xc0\xb5\x6a\x73\xe3\xf1\x2e\x64\x45\x9e\x28\x26\xef\x0b\x2e\x0f\xf7\x91\x17\xaf\xc9\xb5\x50\x55\xc9\x9a\x84\xb1\xcb\x83\x19\x74\xb7\xc7\xd2\x53\x08\x3b\xaf\x8f\x56\x32\x6e\xe7\x1a\xb3\xe5\x7d\x08\x35\x41\x15\xf4\x5c\x3e\x91\x54\x92\x27\x46\x8a\x92\x3d\x1a\x99\x17\x7c\x22\x14\xf1\xb2\xe8\xdb\xbd\x85\x14\x59\x89\xcc\x8b\x52\xe6\x5c\x39\xd2\x16\x52\x6f\x8d\xc4\x21\x53\xb8\x19\x87\x80\x51\xe8\xb8\xd6\xb2\x00\x22\xc2\x47\xa1\xc9\xac\xfa\xe2\x96\x5f\xcc\xe5\xd3\x58\xcb\x71\xa5\xd8\x98\x77\xab\x5d\x23\xf6\xea\x81\x2d\xc0\xab\xef\x00\xbb\x65\xbb\x6e\x09\xcd\x5a\x82\xce\x1e\x9e\x1b\xbe\xec\xc3\x57\x57\xdf\xab\x30\x25\x9d\x27\xb3\x5c\x30\x9d\x5c\x24\xac\x98\x5f\xd8\x31\x3e\xcf\xbd\x77\xb8\xf9\x10\x9b\xef\xfa\x46\xee\x20\x91\x59\x66\x2b\xa9\xc8\x29\x79\xc3\x8a\x79\xfd\xc2\x8b\xdb\xba\x3d\x57\x21\x8a\x29\xa0\x29\x65\x80\xed\xaa\x47\x4d\x7c\x29\xb3\x36\xd6\x80\x27\xa1\x48\xc3\x03\xfc\xf2\xbe\x2f\xfe\x7f\x66\x50\x7f\x36\x8d\xc0\x1e\x0b\x17\xef\x5c\x2a\xff\x70\x67\x10\x5a\x2e\x3f\x29\x99\x0e\x0a\xbf\xe9\x53\x31\xdf\x76\x0e\x4a\x25\xcf\xcc\x4e\x2b\x3d\x67\x42\xf3\x04\x2d\x11\xd6\x23\xd9\x47\xfe\xe4\x66\x8a\x52\x68\x1a\x64\xbe\x95\x8f\xac\x2c\x79\xca\x14\x89\xc0\xfe\xbe\xc6\x8b\x67\x2f\xee\x00\x03\xed\xa9\x71\xa6\xce\x70\xc7\x8a\x7e\x8a\xf1\x5d\x9c\x29\x9e\xdb\x8d\xe2\x70\x0e\x14\x51\x46\xc4\x5d\xdc\x09\x0e\xaa\x35\x69\x91\x2b\x78\xd2\x83\x5c\xd1\x34\xe7\x41\xf1\xde\x2f\x8b\x60\xa9\x84\x66\xec\xe6\xbb\x08\x35\x86\xfd\xa2\xad\xa9\xb8\xb3\x0f\xbd\x9a\xd9\x1d\x95\xa8\xbf\xa9\x61\x81\x08\x99\x76\x59\xde\x0e\xa0\x53\x98\x51\xcd\x9e\x3a\xb9\xaf\x71\x83\xec\xbb\xdf\x04\xd9\xef\x33\xd7\x3e\x7c\x3e\x05\xe8\xe3\xee\x27\x96\xc2\xde\x27\x9f\x67\x01\x28\xf2\x88\xec\x57\x6e\xfb\x61\x5f\x68\x9a\x96\x4c\x29\x47\x5f\xdc\x65\xba\xbc\xbd\x21\x5f\xe3\xeb\xfb\x2d\x9e\x5f\x4a\x8d\x12\xd2\x95\xcc\x29\x0f\x70\xc9\x5a\x2e\xdf\xdc\xfa\xdc\x2d\xc5\x67\x84\xdc\x12\x6e\xeb\x77\x89\x7d\x79\x2a\x4b\x2f\x15\x73\x55\xb2\x94\x58\x9d\xcc\xe7\x57\x76\x7c\x85\x59\xfe\x9c\xcb\x8e\x1f\x89\x63\xf6\x14\xf6\x2e\x70\xaa\xe1\x92\x1d\xd8\x00\x11\xae\x1d\xab\x82\xfa\x17\x8a\x83\x87\x82\xe7\x13\x68\x6b\xfa\x70\xd5\xc4\x46\x21\xe3\x3d\x22\xdf\xca\x19\x77\x75\xd5\x0c\x70\xe2\xd9\xd0\x10\x6e\x79\x60\x62\x07\x26\xb6\x1f\x13\xab\x54\x76\x2d\xe8\x7d\x16\xe2\x1d\xda\x66\xb9\xea\x0f\xc9\xdb\x8c\xce\x08\x83\x3f\x2e\x52\xae\xcc\xff\xc9\xdd\xdd\xb7\x60\x45\xae\x84\x13\x3c\xc1\xf0\x69\x49\x47\x1d\x99\x8e\x28\x6a\xbf\x38\x03\x31\xf7\xa1\x6a\xe1\x7b\xdd\x13\x2e\x52\x57\xb7\xd6\x73\x91\xb6\x6f\x00\xf2\xa0\x75\xd0\x22\xfa\x60\xde\x33\xf2\x71\xce\x93\x87\x5b\xcf\xe8\x2b\x4b\xf3\x4c\x78\x8f\x22\xd9\x88\xe8\xaf\x23\xa0\xcb\x2e\xe6\x36\x5e\x35\xe7\x7d\xe9\xa8\xb1\x43\xa5\x77\x76\x87\xe0\x37\xaa\x94\x4c\x78\xe3\x7b\x00\xba\xea\x86\x44\xa7\x40\xa2\xf7\xbb\x26\x60\xf4\x62\x97\x83\x9c\xe4\x1a\xbe\xc2\x9d\xb7\x7d\x83\x2a\x9f\x8f\xe0\xc2\xad\x7a\xaf\x4b\x40\xa8\x0a\x4b\xab\x11\x0f\xe3\x4d\xef\xcb\xeb\xad\xe1\x79\xd9\xaa\xed\x42\x7b\xed\x09\x07\x88\x1d\x76\xcd\x73\x8a\xa2\xea\x0a\x14\x70\x55\xdf\x1d\xc8\x30\xb0\xb7\xfd\x0b\x89\xf5\x8f\xdb\x33\xcb\x2d\xb4\xdd\x7b\xf0\x99\xb5\x84\xc3\xe5\x2f\x64\x51\x65\xe8\xc6\x5a\x2f\xae\x87\x35\x3c\xc6\x94\x88\xb3\xd8\x8f\x18\x1b\xce\x37\x78\xe1\x80\x87\x00\x4f\x3f\xda\x30\x3e\x28\xd4\x41\x2c\x88\x87\x46\x14\xb4\xdd\x45\x09\x97\xc7\x8c\x09\xdd\x57\x0c\x68\x88\x18\xde\x8a\x12\x6d\xc9\x12\xaf\x7e\xfb\x9b\xdf\x04\xd1\x25\x5e\x42\x59\x2a\xde\xae\xe6\x0e\xd6\x47\x5a\x32\xe0\x79\x31\x60\xd3\x09\xe2\xe8\xdd\xa4\x03\x15\xc9\xc7\x08\x0f\x3d\x70\x38\x68\x9c\x93\x76\x4c\xb8\x67\xa0\x55\xae\x87\xe5\x1d\xd2\x76\xdc\x1c\x2d\x6d\xc7\x91\x92\x75\x1c\x27\x45\xc7\x31\x12\x73\x1c\x25\x1d\xc7\xf1\x92\x70\x1c\x38\xf5\xc6\x41\x2c\xdd\x87\x4c\xae\x11\x19\xf5\x17\x17\xf1\x17\x9e\x3e\x23\x38\x2e\x30\x36\x26\x30\x22\x41\xc6\x7e\xd3\x62\x44\x87\x9c\xc5\xa4\xc0\xe8\x1b\xef\x72\xbc\x74\x17\xcf\x98\xe4\xe2\xb9\x53\x5b\x1c\x38\xa1\xc5\xf1\xd2\x58\x1c\x25\x79\x45\x9f\xc0\xb2\xf8\x44\x15\x31\x01\x65\x7d\x2f\xd7\xc1\x53\x51\xec\x25\x01\xc5\x9e\xd3\x4e\xec\x2f\xd9\x44\x04\xc2\x0c\xcf\x47\xb0\x73\x16\x82\xf8\xe2\x22\xf1\x66\x88\x43\x69\x5b\x9a\xde\xd7\x6a\x97\x5c\x7a\x41\x57\xb3\xe0\x54\x79\x15\x09\xb4\x34\x68\xe9\x08\x3e\xc9\x01\x8a\x04\x12\xa1\x82\xc1\xde\x65\x07\x77\xb0\x4e\x9f\xf8\xdd\xdd\x92\x95\xbf\x7e\xfc\x3c\xc6\xfd\xc1\x7a\xbe\x3f\xeb\xf9\xfe\x7d\xf1\x5f\x9a\x75\x36\x1d\xac\xb3\xd1\xd6\x59\xd5\x4a\x7d\xec\xf4\xaa\x80\xf8\x80\xf7\x93\xf7\x7e\x49\x9d\x06\x1f\x5c\xde\xde\x04\x8c\x93\x94\x0c\x92\x57\xd0\x4c\x4d\xd6\x31\x85\xce\x50\x65\x99\x4d\xc7\x0c\x52\xad\x59\x5e\x04\xe5\x01\x1f\x8c\xb3\x83\x71\xb6\x9f\x71\xf6\xd8\x56\x9e\x79\x95\x53\x31\x36\x08\x09\x6c\xb8\x2d\xe7\x99\x25\x32\x3b\x21\x16\xb1\x04\x42\x29\x86\x19\x43\xe0\x77\x25\xf8\x4f\x15\x6b\xb4\x20\x35\x37\x73\x20\x0b\x19\xf4\x7d\xd8\x0d\x44\x66\x6c\x09\x51\x25\x72\x25\x70\xce\xae\xb9\xde\x4c\x87\x71\x42\x37\x11\x86\x69\x29\xf6\xf4\x9c\x21\x67\x78\xbb\xc4\x19\xb6\xa4\x56\x2b\x8e\xd2\x2c\x93\x4f\xa1\xba\x51\x9f\x5f\x32\x80\x60\xd6\x63\xb3\xb1\xdc\x33\x92\xf3\xb2\x94\xa5\xb5\xd6\xf9\x4b\x42\x67\x2a\x23\xf7\xb2\x12\xe5\x45\x74\x67\x09\x41\x1b\x77\x4c\x5b\xa8\x02\xa8\xd4\x92\x50\x81\xe1\xb1\xe6\xdf\xce\xef\x1c\x96\xeb\xd0\xf2\x3d\x9b\xd3\x47\x2e\xab\xa0\x10\xa6\x3b\x24\x1c\x27\xf6\x63\x60\x27\x16\xb2\xaa\xed\x12\x15\x44\xc5\xd5\x7b\xa8\x56\xcf\x2b\x60\x90\xf7\xcd\xe7\x20\xd6\xa7\xd2\x29\x5d\xc7\xec\x13\x57\x7a\x75\xc7\xdc\x51\xb9\x0a\x25\xfb\xba\x06\x8f\xaa\x30\x6c\xc4\x0f\x01\xb1\xcd\xed\xb8\x66\xff\xbb\x36\xb7\xfd\x78\x07\x3f\x75\xf1\xda\x36\xef\x0f\x26\x1f\x08\x0a\x31\x3c\x80\x33\x2d\xce\xb1\xb3\xe6\xd9\xcb\x62\xe0\x07\xe6\xbd\x69\x7d\xdc\x54\x32\x9e\x2c\x6e\xae\xfa\xba\xaa\xe0\xd7\x8e\x1c\xaa\xda\x4d\xc5\x3c\x27\x5f\x51\xc5\x52\xf2\x8e\x0a\x3a\x43\x15\xcc\xd9\xdd\xed\x57\xef\xce\x0d\x00\x81\xca\xe8\xe6\x6a\xad\x2f\xcb\x9d\xdf\xf9\xfb\x7d\x86\xfa\xaf\x2c\xbc\x07\xa7\xb0\xf2\x7d\xcf\xc5\xef\x35\x87\x01\xa9\x89\x6b\x58\xad\xbc\x35\x59\x19\x6e\x97\xd3\x45\xa1\xa3\x89\xcb\x53\xa7\x96\x31\xd9\x63\x9e\x3e\xec\x36\x7d\x2e\x94\xa6\x59\x76\x9b\x51\x71\x59\x14\xa5\x7c\x5c\xaf\xf8\x0a\x41\x0e\xee\x7b\xb7\x00\x74\x3d\x75\x0f\x0b\x3c\x11\x70\x2f\x13\xe4\xa6\x19\x76\xfd\xfe\xdf\xe8\x5a\x37\x26\x05\x30\x24\x27\x97\x95\x96\x39\xd5\x3c\x39\x21\xb2\x24\x27\xef\xa8\xa8\x68\xb6\xd6\x11\x7d\xeb\x8a\x37\x49\x1f\x5b\x3f\xda\x5c\x84\x24\xe0\xb3\xad\xec\xdc\xf6\xef\x35\x2d\x0d\xaa\x7b\x73\xf7\x43\xd4\xb7\x4a\x53\x5d\xad\x50\x86\x2d\xd4\x6a\x33\x7d\x1a\x93\x8c\x2a\xfd\x7d\x91\x1a\xfc\xb0\xf4\xeb\x36\x22\x94\x50\x4d\x33\x39\xfb\x77\x46\xb3\xf5\x97\x21\x04\xa4\xde\xf8\x9d\x38\xad\xb2\xf5\xca\xab\xee\xeb\xef\x4f\x15\x31\x42\x98\x81\x12\xae\x15\x29\x59\xc6\x1e\xa9\xd0\xee\xf3\x3b\x2c\x2c\x74\x6a\xb7\x65\x23\xc0\xf1\xc6\x4e\x95\x32\xcd\xca\x9c\x8b\xf6\x38\x77\xf0\xfd\x1b\x29\x52\x8e\x16\x10\xd0\xc4\xe3\x17\xed\xb1\x36\x43\xe5\x26\xf3\xed\x16\x83\x6d\xbb\xa4\x92\x37\x9f\xf6\xf6\xe0\x6b\xf7\x96\x91\x9f\xe3\x43\xf0\x7e\x6b\xcd\x6d\x65\xf7\xc8\x83\x30\xfc\x35\xa4\x7d\x5d\xbf\x37\x9d\x6c\x4e\x17\x7b\x33\x76\xe0\x80\x53\xd8\x1c\x02\x34\xb6\xf3\xde\x64\xd8\xdd\x06\x8d\xd8\xba\x19\xa3\xe5\xa9\x6c\xc6\xd4\xad\x8d\x7f\xb3\xf4\x19\xc6\xc8\xd7\xfe\x21\x68\x29\x6f\xbd\xb4\x99\xb2\x04\xf1\x8d\x61\x2c\x5e\x68\xa9\xda\xd6\x5a\xbc\xc2\xaa\x71\x8a\x92\x40\x52\x18\x58\x31\x36\x8e\xe5\xbc\xb1\x21\x0f\xa5\x95\xe7\x28\x29\x38\xc3\x84\xb3\x54\xd8\xcd\x04\x7a\xc6\x68\x6a\x1f\x1a\xba\x69\x04\x78\xf8\x6d\x64\xbd\xb6\x82\x18\x14\xf4\x7d\x74\x76\x2c\x8a\x79\x50\xc1\xa2\x7b\xf1\xb5\xb4\x36\x1e\x9b\x15\xca\x60\x15\xe0\x2e\x46\x44\x55\xc9\x9c\x50\x65\x16\x66\xae\x83\xc1\x17\x6c\x92\x53\xc1\xa7\x4c\xe9\x49\x5d\x58\x4e\xfd\xe5\xd7\x7f\xed\x62\x3b\xde\xca\x92\xd8\x68\xc6\x91\x4b\xe7\x69\xd7\xd8\xc0\x1c\x57\xb8\x11\x75\xcf\x8d\x7e\xa2\x90\xa9\x5d\xf0\x13\x2c\x45\xd3\x07\x43\x4a\x71\x29\x15\x03\xcb\x6b\x17\x8f\x72\x62\xd8\x5e\x6f\xda\xff\x6d\x68\xe7\xff\x9c\x90\xb3\x27\x60\x42\x4e\xcc\x9f\x27\x38\x9d\x3a\x06\xc5\x57\xbf\x34\xd3\xc2\xac\x39\x25\x9f\xcd\x58\xd9\x69\xe6\x82\xb2\x70\x8f\x4c\xe8\x73\x9b\xca\x54\x48\xaf\x2b\xe7\x2b\xd5\x68\x13\x96\xa7\xf9\x97\x5f\xff\xf5\x84\x9c\xb5\xf7\xa4\x63\x48\x2e\x52\xf6\x89\xfc\x1a\x0d\x56\x5c\x99\xdd\x3b\x9f\xa0\xfa\x41\x2d\x84\xa6\x9f\xcc\x88\xc9\x5c\x2a\x26\x50\x1d\xa4\x25\x99\xd3\x47\x46\x94\xcc\x19\x79\x62\x59\x36\xb6\x26\x3c\xf2\x44\x17\xdd\x19\x5c\xdd\x11\x42\xb6\x3b\x52\xd0\x52\xb7\xc0\xb8\x0b\x38\x50\x4b\x08\x33\x35\xa0\x36\x13\xce\x49\x6a\xca\x85\x75\x46\xb0\x6e\x15\x06\x4e\x21\x33\x11\x82\x8e\x96\x24\x99\x53\x31\xab\xf3\xc0\x4d\x2b\x5d\x95\x1d\x3c\x70\xe0\xa5\x7f\xe0\x62\xaf\x49\xbc\xbe\xe1\x62\xd9\x0d\xaf\x73\x63\xd6\xa8\x6f\x67\x5c\xbb\x68\x60\x1b\xda\xa1\x17\x17\x06\x38\x4a\x7e\x5f\x69\x59\xaa\x8b\x94\x3d\xb2\xec\x42\xf1\xd9\x98\x96\xc9\x9c\x6b\x96\x98\x3d\xb9\xa0\x05\x1f\x27\x52\x18\x40\x84\x74\x8f\x79\xfa\x0b\xb3\x13\x6a\x6c\x16\xba\x5d\x9f\x1b\xb8\x63\xdd\x8a\xf0\xb8\x1d\xeb\xa3\xf8\x7e\x1e\x85\x77\xc4\x06\x05\x28\x42\xe3\x77\x09\xb5\x8d\xcf\xbe\x55\xa0\x70\xbb\xd8\xc7\x4e\xb9\x8a\x86\xf1\xbc\x40\xe7\x7e\xd9\x22\x9e\xc9\xf2\x18\x06\x99\xa0\x87\x26\xe0\x9a\x16\x55\xca\x69\x8a\x64\x8b\x8a\xce\x88\xdb\x03\xdf\x59\x73\x1e\x50\x08\x37\x59\x8c\xa1\x0b\x99\x8d\xa9\x48\xcd\xbf\x31\xc0\x3e\xd9\xee\x45\x18\x78\x00\x15\xdf\x2b\xf2\xfb\xfe\xe6\xea\xf9\xc1\xf3\xe2\x17\x15\xdf\x07\xa6\xeb\x63\x4d\xb2\x72\x40\x20\x73\x8e\x22\x10\x7a\x55\x96\x15\x73\x0c\x53\x5b\xf0\xe1\xca\xf5\xfa\x6f\xd6\x8c\x5d\x57\x1b\xe8\x62\xd5\xb7\x9b\x96\x3d\x99\x24\x70\xbe\xdf\x36\x5f\xf8\xaa\x6a\xf0\xd6\xa6\x4a\xdb\x7c\xee\x2e\xd5\x60\x6b\x19\x4e\x18\x06\x32\xbe\x99\x95\x0a\x3a\x18\xe7\xeb\x66\x26\x32\x5e\x9b\x61\x3b\xa9\x85\xdd\x4e\x19\xde\x93\x8b\x41\x34\xca\xb8\xaa\x73\x9a\x1b\x31\x59\x69\x42\x1f\x29\xcf\xc0\x4a\x27\xef\x15\x2b\x1f\x29\xbe\x8e\x15\x47\xe8\xb2\x4c\x6f\xeb\x57\x23\x83\x7d\x24\x89\xda\xad\x61\xf5\x54\xb6\x2d\x00\xa4\xec\xa5\xd9\x6f\x9c\xf5\x5e\xe4\x69\x54\x65\x6c\xfc\xd9\x8c\xd0\x53\x3c\x36\xf0\xf7\xef\x8c\x96\xfa\x9e\x51\xfd\x91\x6f\xe3\x50\x56\x40\xba\xf5\x9d\xd3\x03\x36\x00\xfd\xc4\xc8\x4c\x6a\xc3\xe6\x56\x00\xfb\x28\x8f\x60\x9a\xe2\x1a\xd0\x0e\x0d\xd1\xcd\x2a\x3f\x96\x14\x62\xdd\xa5\x88\x5c\x66\xfb\xc3\xd5\x75\x5a\xd9\xc7\x42\x92\xc6\xb7\x31\x93\xa5\x14\xcc\x9e\x1d\x1a\x0a\xb7\x87\xe5\xef\x75\xc9\x39\x53\x6a\x6b\x8a\xcb\x76\x28\x00\xbe\x8d\x57\x79\xc9\xc4\x9e\xbb\xdf\x30\x92\xd8\x08\x31\x29\xd3\x94\x67\xee\x2a\xe3\x56\xd4\xbb\xd4\x85\x5d\xb7\x2e\xb0\x64\x54\x6d\x63\x68\x5a\xb3\xfe\x00\x2f\xe3\xa4\xa5\x60\xe3\x27\x59\xa6\xe4\x0d\xcd\x59\xf6\x86\x2a\x66\xfb\xf2\x33\x67\xe0\x19\x9d\xaa\xbd\x4e\x79\xbd\xfa\x75\xc3\x94\x51\xa9\xd8\x18\x30\xe0\xaf\x46\x80\xc6\x09\x8e\x9c\x16\xfc\x63\x59\xb1\x11\x79\x6b\xa8\xd7\x88\x7c\x2f\x1e\x84\x7c\xda\x6d\xae\x7a\xab\x71\xb0\x35\x53\xdf\x5d\xcf\xe5\xd7\x6d\x29\x12\xeb\xe9\xf6\x9c\x91\x45\xf8\x1b\xb4\xdd\x6d\x62\x53\xbf\xea\x66\x64\xfe\xb9\xa2\xda\x34\xa2\x7c\x29\x67\x25\x53\x98\x3a\x76\xad\x43\x74\xa8\x81\xe4\x6b\x26\x6c\x96\x8b\xce\xe9\xdd\xac\xfb\xca\xcd\xd4\xd1\xb5\x59\xf3\x8b\x3d\x6f\x3b\x58\x91\xad\x65\x35\xb6\x7b\xb3\x7b\x13\xdd\xa0\xd4\xdc\x34\xc3\xf5\xca\x4c\x8f\xea\x79\xef\x22\x53\xb2\x4d\x13\xef\x56\xf7\xe6\xee\x87\xcd\x9b\xbd\x91\xf6\x75\xd1\xa7\x6e\x75\xe7\xae\x8a\xce\xce\x3b\xd3\xa9\xdc\x0c\xe5\xf4\x8f\xa3\xd0\x7c\x4e\x55\xe6\xf3\x2a\x31\x8f\xae\xbe\x3c\xaa\xe2\xf2\x78\x2a\xcb\xde\xca\xca\x63\xa9\x29\x3b\xaf\xec\x36\xd5\x64\xe8\x6d\x8d\x53\x47\x3e\xbb\x22\xb2\x73\x4f\xb6\x29\x1f\x43\xf7\x24\x4e\xe1\x78\x6c\x55\x63\xd0\x16\x6c\x55\x2f\xc6\xec\x43\xa4\x4a\xf1\xc8\xca\xc4\xce\xbd\x08\x54\x20\x86\xee\xc8\xe1\x94\x86\x2f\x56\x5d\xd8\xb9\xc5\x5b\x54\x84\xa1\xdb\x1a\xa5\x16\x3c\xb2\x42\xb0\x63\xfd\x71\x4a\x40\xcb\xcd\xb2\x34\x44\x18\xb8\xf1\x5e\xf6\xc5\x01\xcb\x8a\x82\x6b\x9f\x7d\xc3\xb9\x12\xfa\x4c\x6b\x5f\x99\xc0\xb0\xe9\x7d\x3d\x5b\xec\x94\xc3\xf9\x6e\x2b\x2c\xb0\xb4\x96\x5e\xbb\x96\x40\xc8\xd5\xf5\xed\x87\xeb\x37\x97\x1f\xaf\xaf\x96\xf9\xfd\x78\xc6\x7c\xbb\x4a\x6a\xec\x31\xe6\x1b\x5e\x30\xc4\x6a\xc3\x4f\x06\xb6\x36\xfc\x54\x55\x7c\xdd\x57\xbb\x8b\x09\x3b\xf1\x0c\x3b\x11\xd7\x6e\x3c\xb1\x27\x44\x01\xb0\x85\xfe\xb8\x86\x7f\x9d\xcb\x2c\x55\x2e\x8e\xe1\xe6\xaa\x0e\x53\xe7\x22\xc9\xaa\xd4\x30\x77\xdf\x7f\x7f\x73\xa5\x26\x84\x7c\xc5\x12\x5a\x29\xc3\x24\x6e\x56\x0c\x48\x71\xaa\xc9\x77\xef\xbf\xfd\x0f\x88\x68\x82\x2f\x47\x75\x8a\x48\x28\x20\xc5\x29\xd6\xc0\x82\x85\x42\xaf\xc8\x40\xc2\x8c\x12\x5a\x18\x0c\xbc\xd9\xb8\xc0\x31\xb7\x89\xe1\x11\xe7\x2c\x2b\x0c\x75\x78\x60\xa4\x29\xc1\x63\x06\x84\x5f\x31\x4e\xc3\xfa\xab\xcf\x98\xc6\x90\xf5\x6d\x2e\xe9\x5b\x0f\xa0\x43\x97\xbf\x83\x16\xbf\xa5\x98\xb0\x7a\x9e\x27\xaa\xac\x2e\x74\xed\x6c\x3b\x40\xa5\x5b\xf3\xb7\x59\x79\xb6\x41\x6d\x86\x94\x05\xfe\x5a\x99\xb3\x99\x6c\xa3\x21\x43\xb7\x37\xae\x83\xf5\xf4\x9b\x7d\x1c\xd7\xd7\x13\x5d\xd1\x92\xb1\xe5\x4d\x6e\x0d\x5c\xc7\xfc\x78\x53\x0e\x9b\x0b\x94\x7c\x4e\x5f\x83\xe5\xc8\x3d\x42\x3f\xe2\xf6\xb3\xea\xde\x31\x33\x1e\xd6\xb1\xba\x3e\xf2\xdf\xff\xf3\xc5\xff\x1f\x00\x00\xff\xff\xba\xb8\x4c\xdd\xad\x46\x03\x00") +var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\xe4\xb6\x95\x28\xfe\x7f\x3e\x05\x4a\x49\x95\xa4\xa4\xbb\x35\xce\xe6\x66\xb3\x73\x53\x49\x29\x23\x8d\x57\xd7\x9e\xb1\xee\x68\xec\xd4\xfe\xbc\xb9\x6b\x34\x89\xee\x46\x44\x02\x34\x01\x4a\xd3\x59\xef\x77\xff\x15\xce\x01\x48\xb0\x5f\x04\xa8\xee\x96\xc6\x21\xfe\xb0\x47\x6c\x12\xcf\x83\xf3\x7e\xd0\x82\x7f\xc7\x4a\xc5\xa5\x78\x4d\x68\xc1\xd9\x27\xcd\x84\xf9\x4b\x4d\xee\xff\xa0\x26\x5c\x5e\x3c\x7c\xf1\x8b\x7b\x2e\xd2\xd7\xe4\x4d\xa5\xb4\xcc\x3f\x30\x25\xab\x32\x61\x57\x6c\xc6\x05\xd7\x5c\x8a\x5f\xe4\x4c\xd3\x94\x6a\xfa\xfa\x17\x84\x50\x21\xa4\xa6\xe6\xb1\x32\x7f\x12\x92\x48\xa1\x4b\x99\x65\xac\x1c\xcf\x99\x98\xdc\x57\x53\x36\xad\x78\x96\xb2\x12\x3a\x77\x43\x3f\xbc\x9a\x7c\xf1\xbf\x26\xaf\x7e\x41\x88\xa0\x39\x7b\x4d\x54\x35\x55\x49\xc9\x0b\xe8\x69\x22\x0b\x56\x52\x2d\x4b\x35\x49\x64\xc9\xa4\xf9\x5f\xfe\x0b\x55\xb0\xc4\x8c\x31\x2f\x65\x55\xbc\x26\x1b\xdf\xc1\xee\xdc\x54\xa8\x66\x73\x59\x72\xf7\x37\x21\x63\x22\xb3\x1c\xfe\x8d\x4b\xbc\xf3\x46\x85\xc7\x19\x57\xfa\xab\xb5\x9f\xbe\xe6\x4a\xc3\xcf\x45\x56\x95\x34\x5b\x99\x2d\xfc\xa2\x16\xb2\xd4\xef\x9b\xb1\xcd\x58\xaa\x9a\xfa\xff\xb6\x2f\x72\x31\xaf\x32\x5a\xb6\x3b\xf9\x05\x21\x2a\x91\x05\x7b\x4d\xa0\x8f\x82\x26\x2c\xfd\x05\x21\x76\xbb\x6c\x9f\x63\x42\xd3\x14\x8e\x80\x66\xb7\x25\x17\x9a\x95\x6f\x64\x56\xe5\xa2\x1e\xd3\xbc\x93\xb2\xba\xd7\xd7\xe4\xe3\x82\x91\x82\x26\xf7\x74\xce\xdc\x78\x53\x96\x12\x2d\xeb\x0f\x08\xf9\xbb\x92\xe2\x96\xea\xc5\x6b\x32\x31\x5b\x3c\x31\x3b\xe8\xfd\x8c\xe7\x73\x8b\x9d\x78\xcf\xf5\xd2\x4c\x57\xe9\x92\x8b\xf9\xae\xe1\x13\xaa\x69\x26\xe7\x04\xc1\x88\xcc\x64\x49\xf4\x82\x11\x33\x14\x9f\x71\x96\xba\xf9\xed\x98\x11\x7e\xba\x36\xa7\xbb\xd5\xc7\xc1\x53\x5a\x50\x21\x58\x46\xe4\x8c\x54\x45\x4a\x35\x53\x44\xcb\x66\x7f\x76\x6f\x8f\xfd\x78\x6d\x36\x6f\xd6\x9e\x6f\x98\x0e\xbe\xfa\xf0\x05\xcd\x8a\x05\xfd\xc2\x3e\x54\xc9\x82\xe5\xb4\x39\x43\x59\x30\x71\x79\x7b\xf3\xdd\xbf\xdc\xad\xfc\x40\xda\x4b\xf1\x41\x94\xdc\x33\x56\xa8\xe6\x52\x90\xaa\x30\x6b\x32\x8b\x23\xd3\x25\xd1\x25\x4d\xee\xb9\x98\xc3\xd2\xe7\xb8\xde\x37\x78\x30\x6a\xb2\x36\x65\x39\xfd\x3b\x4b\xb4\xf7\xb8\x64\x3f\x56\xbc\x64\xa9\x3f\x15\xb3\xb3\x0e\x13\xac\x3c\x36\xfb\xe4\x3d\x2a\x4a\x33\x2d\xed\xdd\x43\x6c\x1e\x2a\x6a\x3d\x5f\x59\xe6\x4f\xe3\x95\x5f\x09\x31\xbb\x83\x5f\x92\xd4\xe0\x25\xb3\xa0\x05\x73\xd7\x85\xa5\x76\x4b\xcd\x01\xeb\x05\x57\xa4\x64\x45\xc9\x14\x13\x88\xa9\xcc\x63\x2a\xec\x2a\x27\x6b\x9d\xdf\xb1\xd2\x74\x64\xae\x74\x95\xa5\x06\xa1\x3d\xb0\x52\x93\x92\x25\x72\x2e\xf8\x3f\xea\xde\x61\x13\xcd\xb0\x99\x81\x20\x4d\xe0\x42\x0a\x9a\x91\x07\x9a\x55\x6c\x44\xa8\x48\xd7\xfa\xce\xe9\x92\x94\xcc\x8c\x4b\x2a\xe1\xf5\x08\x9f\xa8\xf5\xb9\xbc\x93\x25\x23\x5c\xcc\xe4\x6b\xb2\xd0\xba\x50\xaf\x2f\x2e\xe6\x5c\x3b\x54\x9d\xc8\x3c\xaf\x04\xd7\xcb\x0b\xc0\xba\x7c\x5a\x99\xa3\xbf\x48\xd9\x03\xcb\x2e\x14\x9f\x8f\x69\x99\x2c\xb8\x66\x89\xae\x4a\x76\x41\x0b\x3e\x86\xc5\x08\x44\xb2\x79\xfa\xcb\xd2\x22\x77\xb5\x32\xf0\xc6\x8b\x44\x1c\xda\x8c\x3c\x2c\x83\x4f\x09\x57\x84\xda\x0e\x71\xb1\xcd\x99\x98\x47\x66\x1b\x3f\x5c\xdf\x7d\x24\x6e\x46\x78\x6e\x78\x44\xcd\xab\x1b\x76\xc8\x9d\x96\xd9\x59\x2e\x66\xac\xc4\x2f\x67\xa5\xcc\xa1\x57\x26\xd2\x42\x72\xa1\xe1\x8f\x24\xe3\x4c\x68\x73\xd3\x73\xae\x15\x80\x35\x53\xda\x1c\xe4\x7a\xc7\x6f\x80\xb4\x91\x29\xb3\x38\x22\x5d\x7f\xe5\x46\x90\x37\x34\x67\xd9\x1b\xaa\xd8\xd1\xcf\xce\x9c\x91\x1a\x9b\x03\x09\x3e\x3d\x9f\x70\xaf\x7f\xb0\x76\xeb\x09\x71\x24\x77\xeb\x71\xfb\x28\xe8\xae\x60\x49\x7d\x1d\xa9\x20\x97\x45\x91\xf1\x04\x6f\x9c\x5e\x50\x4d\x12\x2a\xcc\x76\x72\xa1\x34\xcd\x32\xb6\x7a\x3b\xb6\xce\x62\x1b\xfe\x21\x80\x6c\x56\xc8\x95\x7b\xbc\x46\x33\xda\x3f\xd4\x64\x76\xe5\x8d\x6d\xb8\xca\x34\x8b\xf9\xd7\x7f\xd8\xb1\xe5\x04\x59\xa2\x19\x9f\x6f\xfa\x6c\xeb\x5e\xbe\x81\x4f\x80\x99\xa2\x5c\x28\xdb\x45\x55\xe2\x6e\x36\xb4\xd3\x50\x53\xda\xe2\x24\xd6\xe1\x70\xe7\xce\x76\xad\xd9\x34\x3a\x03\xd6\x6f\xb9\xf9\xd7\x6e\x04\xe0\xda\xcd\xac\x99\xf9\x88\xc8\x07\x56\x96\x3c\xb5\xa8\xbb\x90\xe9\xa9\x02\xc4\x9a\x56\x19\x10\x2a\x29\x94\x2e\x29\xdf\x78\xe9\x5d\x13\x3c\x33\x8b\x1f\x53\x8d\x37\x88\x29\xf2\xc8\xb3\x8c\xfc\x5a\x48\xfd\xeb\x7a\x04\x18\x40\x96\x7c\xce\x6b\xec\xac\x08\x17\x6e\x5c\x20\xeb\x96\x2f\x91\x8a\xad\x74\xb8\x7d\xf0\x6f\x15\x23\x2c\x2f\xf4\xd2\xa1\xa9\xb3\xff\xfe\x9f\x73\x43\x13\x58\x49\x95\x37\x60\xab\xbf\xad\x98\x1e\x5b\xc7\x49\x91\x80\xd3\x82\x7d\x91\x29\xbb\xec\x38\x35\xb2\x7a\x72\x57\x0c\xd9\x1f\x05\x9f\xd7\xa7\xee\x1f\x4a\x59\x65\x4c\xd5\x2c\x9c\xd9\xbb\x1d\x9d\x07\xac\x25\x74\x3d\xf8\x1e\x9b\xb1\xb2\x64\xe9\x55\x65\x6e\xd9\x5d\x3d\xab\x9b\xb9\x90\xf5\xe3\xeb\x4f\x2c\xa9\xf4\x06\x96\x62\xe7\xd2\x77\x00\xad\x6b\x86\x6f\xb4\x3b\xc1\x4a\x84\x32\x9c\x11\xb0\x8e\xf6\x07\xb3\x25\xc0\x16\x98\x1d\x54\x88\xf5\x14\xd5\x5c\xcd\x96\x9d\x03\x98\x1d\xad\xf7\x9c\x7d\x32\x14\x0f\x78\x7f\xef\xb6\x1b\x46\x0e\x88\x1b\x67\x59\x3a\x22\xd3\x4a\x13\xae\x81\xf2\x25\x0b\x29\xd5\x3a\xb6\x5b\x6d\x14\x8f\x16\xe6\xf5\xc0\x25\x30\x2e\x44\x0a\x03\xac\x24\x37\xe4\x0a\x18\x26\xe6\x0f\x3f\x81\x95\x37\x9f\xf1\x55\x6a\xb3\xde\x72\xa9\x74\x73\x5c\x86\xf4\xc3\x05\x14\x8c\x3c\x72\xbd\x80\x3f\xe6\x25\x43\xa6\x49\x55\xb9\x19\xf4\x91\xf1\xf9\x42\xab\x11\xe1\x93\x0d\x94\x74\xb5\x19\x00\x64\x34\x59\x78\xd3\xca\x19\xd3\x8a\xd0\x2c\x73\x4b\xf0\xa1\x16\xa9\x47\x6e\x18\x08\x72\xe6\x38\x8c\xce\x51\x2c\x77\x30\xaa\xa9\xcf\x2a\xe0\x6d\x3c\xae\x11\x61\x3a\x99\x9c\x8f\x3a\xbb\x4f\x64\x5e\x18\x84\x40\x61\x0f\xa6\x4b\xc2\xb5\xe1\xdd\x91\x1b\x2a\x65\x35\xc7\x9d\x62\x99\x9d\xb8\xe3\x65\xe1\xf0\x0d\x73\x09\xd2\xe0\x06\x72\xb3\xda\x4e\x70\x73\x4f\x1c\xbb\x6a\x86\xe3\xb8\x49\xb0\x7f\x39\xd5\xc9\xc2\xa2\xe1\x44\x96\x25\x53\x85\x14\xa6\x67\xfc\xe5\xba\x59\xdb\xff\x36\xef\x74\x8e\x67\x3a\x3d\x53\xe7\xcd\x61\x2f\xf8\x7c\xe1\xce\x9a\x96\x88\x8e\xdb\x30\xd2\x75\xe4\x88\x4a\x68\x59\xd2\xae\x7b\xc4\x35\xcb\x3b\x10\x09\xe9\x71\xfb\x09\xb9\x14\x16\xd9\x37\x80\xed\x81\x98\x66\x65\x5e\x6f\x24\x40\x21\xa0\x3d\x85\x9b\xc0\x73\xc3\x09\x71\x6d\xc1\x9c\xbc\x0a\x18\xef\xcc\xdc\x04\xc2\xf5\xa9\x82\x5b\x3b\x96\xc5\xf9\x84\x5c\x12\x51\xd5\x88\x67\xd7\x14\x84\xac\x67\x60\x3b\x32\xd3\x52\xb2\xe9\xab\x1b\x1f\x85\xa1\x6f\x6c\xdb\x19\xb4\xf5\x36\xb6\xf3\x67\x22\xe0\x12\x9a\xd7\x71\xd7\x3a\x5f\x0d\x25\x24\xee\x6d\x37\x87\x90\xb7\x57\x20\xe6\x12\x6f\x8e\x62\x19\x4b\xb4\xa1\x86\xac\xcc\x47\x84\x2a\x25\x13\x6e\x44\x85\x06\xf6\xdb\x17\x0a\x57\xd2\xbd\xf7\x24\x76\xff\x49\xf4\xfa\x09\x48\xa3\xed\xfb\x1d\xfa\xdd\xda\x6e\x64\x5c\x69\x83\xa0\xda\xbb\xd2\xc2\xbb\xd3\x25\xfc\x7a\xaa\x48\x46\xa7\x2c\xdb\xc1\x57\xad\xb6\xf0\xcb\xdf\xb4\x40\x34\xb0\x65\x41\x41\x08\xa1\x69\xab\xd0\xe0\xad\xdb\xca\xbd\x35\x9c\x80\x18\xe4\x98\x7a\x64\x05\x47\x84\x92\x7b\xb6\x1c\x21\x4a\x17\xb5\x0a\x27\x6a\x0a\xd0\x71\xc9\x90\xa0\x1b\xb8\xbb\x67\x4b\xe8\x70\x37\xbb\xb9\xb1\xab\x58\xb8\xc3\x16\x83\x01\x9a\x36\x36\x13\x8d\xfc\xa2\xc7\x06\xc5\x5f\x0d\x6c\xf7\x6c\x27\xfb\xbc\xa9\xad\x29\x1b\x01\xdc\xe1\x3c\xe0\x90\x80\x02\x3b\x78\xa0\x46\x44\x66\x9b\xf5\x0f\xbb\xdb\x4e\x81\x73\x57\x73\xbb\xf7\xa4\x75\x45\x5e\x10\xd3\x3e\xd4\x3a\x1c\x84\xf7\x53\x85\xf0\x6a\xf0\xce\x82\x83\xb2\xd2\x5c\x14\x40\x23\xf1\x40\x8b\xed\x3b\x9a\xf1\xd4\xd3\x81\x1a\x66\xe3\x46\x8c\xc8\x7b\xa9\xcd\xff\xae\x3f\x71\x65\x78\xcc\x2b\xc9\xd4\x7b\xa9\xe1\xcf\x09\xf9\x52\xe3\xd5\xfb\x3a\x10\x2f\x37\xad\xf7\x19\xe0\xfa\x8e\x7d\x02\x97\x02\x91\xa8\xd9\x61\x5f\x13\xa7\x26\x46\x32\x07\x16\xdd\xee\x9c\xc1\x5a\x37\xc2\x08\x05\xb8\x73\xd1\x43\x81\x32\x16\xe5\x6c\x1c\x32\xaf\x14\xa8\xd2\x84\x14\x63\x60\xa3\x36\x8e\x89\x07\x64\xc6\xf5\x8f\x68\x8f\xc3\x6f\x1f\xfa\x4b\x6d\x86\xfd\x5a\x8f\xbc\x8f\xa3\xc7\xf5\x06\x5b\xd0\x07\x60\xed\xb9\x98\x67\x35\x13\x3f\x22\x8f\x0b\x9e\x2c\x50\x7a\x04\x4d\x98\x66\x65\x51\x32\xc3\x31\x50\xd0\x99\x99\x27\x73\x56\xc6\x83\xfe\x47\x23\x1a\xe0\xf8\xa8\xef\xce\x68\xc2\x52\x92\x82\xc8\x82\xaa\x57\xaa\xd9\x9c\x27\x24\x67\xe5\x9c\x91\xc2\x90\xfe\x7e\x00\x1f\x47\x89\xb1\x45\xd3\x63\x7f\xc0\x1e\x37\x8c\x90\x4f\xe3\xfb\x6a\xca\x4a\xc1\x34\x53\x63\xc3\x9f\x8c\xed\xec\xb5\xcc\x79\x12\xdc\xd9\x5e\xba\x01\x3e\xeb\xad\x91\xdb\x8e\xc4\x62\x81\x8c\x38\xb0\x58\x03\x8b\x35\xb0\x58\x03\x8b\x35\xb0\x58\xc1\x6d\x60\xb1\x9e\x3c\xfc\xc0\x62\x0d\x2c\xd6\xd1\x59\xac\x56\x17\x39\x2d\x62\x7b\x40\xbd\x5c\x0f\x45\xe0\x5f\x51\xa1\xbb\xaa\xf9\x03\x86\xcf\xf9\x35\xb4\x55\x80\x86\x8f\xb9\xb3\xc4\xe9\x23\xa8\x0d\xad\x25\xb2\xa4\x62\xce\xc8\x17\xe3\x2f\x5e\xbd\x8a\x51\x10\x5a\x70\x0e\xfa\x62\x26\xcb\x9c\x6a\xf8\xe6\x5f\x7e\xdb\xf1\xc5\x13\x4e\x65\x9b\xbd\xe4\x38\x86\x3a\x8b\x79\x6a\xdb\x4c\x8b\x45\xde\x62\x4b\x03\x32\x26\xa4\x26\x39\xd3\x84\x76\xf3\x64\xbe\xda\x9d\xe7\x6c\xe4\xcc\xa1\x88\x76\xac\xdb\x88\x33\x0a\xa6\x44\x0a\x6b\x7a\x31\x87\xdf\x7d\xb8\xbd\x56\x90\x30\xaa\x98\x21\xf1\x53\x66\x56\xd1\x6d\x0a\xd4\x44\xc9\xdc\xcc\x9a\x0b\xed\x90\x98\x59\x02\x73\x07\x43\xce\xd8\x64\x3e\x21\x69\x05\xdd\x52\x61\xfd\x60\xce\x71\xb5\x6a\xa9\x34\xcb\xbb\x6d\x81\x86\x18\x96\xf0\x3f\xb3\x2d\xba\x5c\x82\x85\xfc\x81\x09\x5d\xd1\x2c\x5b\x12\xf6\xc0\x13\x5d\xef\x1f\xb8\xed\x70\xad\x82\x76\x2a\x82\x8d\x0e\x67\x9d\xc7\x6b\x37\xb4\x8b\x48\xc5\x70\xbe\x6b\x7d\x87\xe0\x9c\xd6\x0d\xf8\x60\x57\x32\xd9\x2a\x13\x6a\xd3\x2f\x9a\x6d\xe1\x9f\x00\xdc\xdf\x7c\xe8\xb6\xb2\x91\x68\xfa\x13\x41\x73\xfa\xb1\x56\xd6\xe0\x25\x4b\x6b\x7c\x5b\x5f\xe9\x06\x93\x17\xae\xbd\x75\x6b\xe4\x2c\x70\x40\xbd\x60\x68\xa4\xbc\x7c\x7f\x15\xb6\x63\xc4\x3a\x07\x7c\x94\x85\xcc\xe4\x7c\xe9\x1f\x2f\x6c\x27\x98\xff\xec\x3c\xd0\x57\x07\x59\x70\x03\xf3\xef\x57\xe0\x61\x30\x0d\x0d\xa6\xa1\x41\x6f\x01\x6d\xd0\x5b\x0c\x7a\x8b\x41\x6f\x11\xd6\x06\xbd\xc5\x93\x87\x1f\xf4\x16\x83\xde\x62\x30\x0d\xad\xb7\x81\xc5\xea\x6e\x03\x8b\xb5\xb3\x0d\x2c\x56\xdd\x06\x16\x6b\x60\xb1\x06\x16\x6b\x60\xb1\x06\x16\xeb\x58\xdd\x3c\xd5\x34\xf4\xa4\x29\xf4\x1b\xbc\x90\xe9\x13\x82\xb7\x0a\x99\xee\x88\xdd\x42\x9d\x7e\x22\xc7\x99\x4c\xa8\xb6\x61\xb6\xe6\x13\x6b\x85\x52\x34\x47\x33\xc5\x88\xfc\x43\x0a\x86\xd1\x2c\xe6\x7a\x80\xb1\x40\xea\x05\x2b\xcd\xeb\x67\xea\x7c\x67\x08\xc1\x10\xfb\x35\xc4\x7e\x0d\xb1\x5f\x5b\xdb\x8b\x89\xfd\x5a\x50\x85\x70\x8b\xa4\x71\x7b\x28\x98\x87\x93\x3e\xb2\x32\xff\x99\x46\x82\x19\x70\xb7\xe0\x08\x49\x22\x1a\x90\xc2\x9d\x49\xad\xc1\x9f\xa5\xb7\xed\xfd\xb0\x62\x35\x2c\x8a\xa6\x29\x4b\x49\xc1\xca\x31\x82\xa8\x24\x33\x2e\xd2\x0d\x6b\x75\xfb\xd3\x8d\x1e\x0e\x18\x8a\xd5\x5e\x47\xd0\x37\x87\x89\xc7\x6a\x4f\xa4\x87\x51\xd1\xb7\x8c\xb6\x88\xe0\x8b\x88\xce\x8a\x95\xd0\xc7\x44\x5b\x83\xe2\x57\x81\x32\x7a\xbc\x98\x0d\xc2\xb1\x33\x3f\xf6\x54\x3f\x45\x89\x42\x97\x56\x1e\xff\xb1\x62\xe5\x12\xe2\xf3\x1b\xb1\xb3\xce\x45\x62\x3d\x62\xb8\x22\x09\x55\x48\x56\x63\x58\xe5\x9b\x19\x46\x4d\x8a\x2a\xcb\x46\xd8\xcf\xea\x65\x75\x68\x0e\xe0\x40\x48\xf3\x7b\xb4\x46\x2c\x52\x45\xd3\x4f\x07\xd2\xdf\x0a\x4b\x56\xcf\x69\xb5\x2b\xd4\x8d\x39\xd5\x21\x1e\xcb\x46\xdd\xe1\x06\x6b\x7a\xb4\x7d\x1c\x5b\x5f\x01\xa6\x97\xf8\xf2\x64\x79\x7d\xc7\x9e\x3c\x41\xaf\x08\x2f\x47\x4f\x66\x3f\xba\x45\xd2\x5f\xbf\x48\x7a\xeb\x18\x49\x2f\x3d\x23\xe9\xab\x6b\x24\x4f\xd0\x37\x92\x7e\x3a\x47\xb2\x0a\x6d\xe6\x84\x2c\xe3\x7b\x18\xf5\x23\x79\x9a\x70\xde\x5f\x0d\x49\xf6\x70\xb1\xfc\xf1\xbd\xcc\x4e\x87\xd3\x4b\x92\x50\xdd\x24\x5c\xab\x96\x7a\xf2\xd8\xe7\xd2\x4f\x35\x49\xf6\x74\x2a\x2e\x33\x0e\xe8\xc2\x8e\xa5\xac\x24\xcf\xaf\xb0\xdc\x39\x05\x3b\x7c\xb0\x86\xaf\xd7\xe8\x4f\xd0\x0a\x92\x27\x69\x06\x49\x7f\xed\x20\x79\x2a\xb0\xef\x4d\x4b\xb8\xd7\xae\x80\x4f\xfa\x1a\xfc\xd0\x9e\xc0\x6d\x45\xdf\x40\x6f\x58\xe4\x2e\x72\x5a\x98\xdb\xf7\xdf\x86\x89\x00\xc0\xfc\x1f\x52\x50\x5e\x2a\x23\xdd\x58\xbd\xb6\xff\x9b\x55\xdf\x79\xdd\x44\x4f\xa0\x30\x03\x1b\x1a\xff\x40\x33\xc3\xe4\xa0\xd3\xaf\xd5\x41\x98\xb9\xac\xb2\x90\x23\xf2\x08\x09\xb3\x0c\x79\x43\xcd\x04\x57\xe4\xe4\x9e\x2d\x4f\x46\x41\xea\x81\x76\xf3\x6f\xf6\xc9\x8d\x38\x41\xd6\x69\xed\x5e\xd6\x7c\x96\x14\xd9\x92\x9c\xc0\x6f\x27\xfb\xe6\x51\x7b\xf0\x47\x7e\x6a\xd6\xbe\xec\x47\xaf\xeb\xf4\x54\x05\x37\x69\x41\xdf\x57\x6c\xd9\xd7\x11\x21\x0a\xe6\xdf\xb5\x46\x74\x0c\x35\x80\x99\x91\xdd\x6b\xbe\x09\x33\xb3\x02\xcb\x64\x75\x54\xa8\xae\xe2\x59\x16\x31\xda\x94\x11\x4d\xef\x19\x58\x78\x24\xa4\x96\xe3\x29\xc3\x64\x7a\x08\x3a\x30\x92\x01\x99\x4a\x41\x7a\x5c\x92\x49\x79\x5f\x15\x0e\xf4\x5c\x36\xc9\x88\x21\xb9\x48\x64\xee\x7c\xea\xd1\xaf\x75\x64\x13\xcc\xdd\xb3\xe5\x18\x73\x60\xe2\x73\x18\x18\x48\x80\x55\x4d\xfc\xd0\x12\xcc\x7f\x20\x54\x91\x1f\x80\xa9\x14\xe4\x0c\x3e\x3c\xff\x21\xc6\xa5\xa0\xde\x40\xd4\xbe\xca\x0a\x30\x0b\x33\xc4\xd2\x4e\x50\xad\xee\xed\xae\x1d\x8b\x18\xda\x65\x8a\xf3\x37\xe3\x14\xed\x0d\x67\x54\x68\x7e\x5e\x2b\x69\x26\x04\xe0\x00\xb8\xe4\x54\x8a\x53\x8d\xf3\x73\x78\xcd\x75\x10\xe3\x75\x50\xef\x7b\x63\xf1\x43\x6b\x01\x1e\x79\xca\x66\xb4\xca\xb4\xcd\x46\x6a\x50\x1f\x50\xfa\x88\x11\x3e\x3a\x7b\x89\x65\xf8\x67\xb2\x9c\xf2\x34\x65\x02\x42\x1c\xdc\xf4\xa7\xd2\x05\x04\x35\xe0\x6e\x30\x5b\xeb\x8c\x63\x86\xbd\xcc\x94\x1c\xad\xf6\x98\xd4\xd9\x4a\xcd\x2d\x7a\x5c\x30\xd1\x1e\x80\x70\x65\x36\x55\xb1\x28\xa6\x16\xb8\x1e\xcb\x0f\x66\xc5\x82\x7a\x0a\x68\x8b\x6c\x15\x61\x82\x4e\x41\x23\xde\xbe\xd2\x37\xc2\xd3\xba\x90\x19\xa3\xba\x2a\x19\x99\x53\x1d\xa0\xe3\x77\xed\x28\xbe\x47\x4f\x47\xba\xbd\x7d\xbf\xb8\x7a\x06\xc4\xbb\x3a\xe8\x80\x7b\x83\x70\xaf\x90\x7a\x40\xbf\x9f\x2d\xfa\x5d\x03\xfa\x7d\x60\xe0\xb5\x4e\x07\x24\x6c\xdb\x67\x84\x84\x85\x4b\x04\xfd\xcc\x76\x10\x54\x0d\xa2\x1f\xaf\x9b\x92\x6a\xb4\x86\x10\xea\xd6\x4f\x63\xe8\x02\x01\x01\x86\xa0\x87\xd4\x99\x83\x2b\x61\xd3\xe1\x83\x41\xb8\x19\x16\x11\xd6\xaa\xd7\x41\xc4\x98\x4e\x74\x93\x82\x29\x30\x32\xb0\xda\xc3\xc4\x1b\x06\x7a\x8d\x59\x0a\x04\x03\x36\x0a\x54\x91\xae\x86\x07\x36\x7d\x83\x65\x23\x67\x54\x28\x72\xe2\x9c\x5c\x4e\x55\xf3\xc6\x49\xd4\x85\x77\xc9\x3f\xeb\xb1\x21\xd7\xb3\x9f\xf0\xb3\x19\x7a\xb0\x24\x0d\x96\x24\xbf\x0d\x96\xa4\xf5\x49\x0c\x96\xa4\x6d\x6d\xb0\x24\xf5\x1a\x7f\xb0\x24\xb5\xdb\x60\x49\x1a\x2c\x49\x83\x25\x69\xb0\x24\x0d\x96\xa4\xc1\x92\x14\xfa\xd1\x3e\x2c\x49\x8d\x18\x74\x0c\x39\xda\x17\x59\xad\xa7\x3c\xd6\x19\xa3\x9a\x27\x4d\x5c\xac\x7b\x0b\xff\xf5\x5c\x42\xb5\x2f\x06\x3f\x55\xa4\xf6\x05\xf4\x35\x0d\x46\xb4\x44\xbd\x55\x7e\xae\x25\xec\xb5\x31\xf6\x24\x5a\xff\xcc\x95\x4b\x9e\x0b\xef\x31\xae\xc3\x47\x17\xcc\x63\x4b\x17\x4e\x59\x13\xe9\x93\x92\x33\xa7\xec\x3d\x37\x07\x2e\xa4\x6e\xff\x28\x34\x1f\x37\x6f\xd4\x2e\xd2\xa0\x93\x76\xf9\xec\x62\x36\xdd\xc9\x2c\x8d\xf2\x53\xac\x14\xfe\x6c\xa0\xcd\xe0\x7f\x56\xb6\x66\xcb\x95\xad\x25\x07\xc1\x79\x65\x25\x84\x61\x8f\xa4\xb0\x71\x2c\x11\x33\x41\xd2\x82\x7a\x66\x7b\x2b\x51\x98\x82\x35\x82\x44\xd5\x1c\x93\x17\x02\x41\x35\x16\x8a\xb4\x59\xa7\xa4\xb0\x5a\x7a\xf3\x04\xfb\x89\x98\x44\x7d\x61\x61\x3f\x79\xbd\xa2\x98\xbb\x7a\x0d\x77\xd4\x9f\x2c\x57\x70\x8e\x34\xcb\xe4\x63\x0c\x7d\x8a\xbc\x11\xbd\xd3\x23\x06\x43\xef\x63\x74\x1e\xc5\x95\x78\x81\x50\x5e\x7d\x48\xb6\xb8\xb3\x0d\xc9\x16\x5f\x46\xb2\x45\xcf\x10\xeb\x67\x5d\xec\xde\x2b\xc8\xca\x78\xd0\xac\x8b\x84\xfc\x75\xc1\xe0\x16\x95\x0c\xad\xa7\x55\xa6\x79\xd1\xc4\x59\x2b\x3c\xa1\x0c\x45\xea\x99\x8d\x87\x6c\xdf\x5e\x33\x1b\x9a\x2c\x3a\x87\x5a\xb9\xe5\x30\x1e\xc4\x6d\x2b\xc0\xa6\x18\x33\x08\xfa\x77\x4c\x75\xe8\x64\x6d\x0c\xbc\xe4\xcf\x1d\x4f\x16\x84\xff\xae\x5c\xc9\x54\xcf\x08\xaf\xc8\x99\xa1\x8e\xd9\xd2\x9a\xad\x5b\x88\xb0\x45\x56\x03\x06\x40\x3d\xd8\x03\x73\x0c\xea\x9c\x3f\x30\xd1\x50\xdf\x33\x75\x7e\xee\x78\xe2\x55\xfe\x21\xa0\xf7\xa7\x70\x18\x21\x58\x3b\x96\x33\x58\xa1\xf7\x01\x23\x6c\xe0\x08\xfe\xe8\x51\xd9\x3f\x75\xf3\x04\x01\x83\xe0\x95\x76\x01\xaa\xde\x41\x37\xbc\x40\x67\x2f\x07\x8c\x03\x8c\x09\x36\x8b\xd3\x8a\xf7\x08\x32\xeb\x9b\x2b\xf4\xb0\xc1\x65\x07\x0d\x2c\xfb\x7c\x52\x7a\x3e\xb3\xf9\xef\x33\xc8\x47\xf5\x42\xcc\x7d\x43\x42\xaa\x6d\xed\xb9\x12\x52\x1d\xdc\x9c\xf7\xd9\xe5\xa5\x3a\xaa\xf9\xee\x38\xa6\xbb\xcf\x2c\x2f\xd5\xb3\x98\xea\x5e\x78\x86\xaa\xc3\x99\xe8\x86\xf4\x4f\xcf\x93\x61\x33\xd6\x0c\xd7\xff\x56\x3d\xab\xf9\xed\x59\x4d\x6f\xcf\x6f\x76\xeb\xc5\xab\x3c\xd5\xdc\x16\x7d\x4d\x9e\x6a\x66\xeb\x13\x33\xd0\x0f\x9e\x8f\x17\xa4\x75\xe4\x20\x81\x97\x11\x9c\xf5\x4c\x91\x01\xcf\x15\x15\x70\xd8\x88\x80\x67\x08\xc6\x3a\x52\x20\xd6\x33\xfa\xff\xc7\xf2\x1c\x51\x9c\xc6\xd3\x10\x67\x1f\x76\xa0\x67\xc0\x55\x4f\xe4\x79\xcc\x40\xab\x9f\x01\xfe\xec\x15\x60\x35\xa0\xd0\x67\x42\xa1\xfb\x0b\xa8\x3a\x5e\x30\xd5\x80\x48\x6d\x7b\x32\x22\xed\x19\x34\xb5\x37\xbd\xfe\x61\x82\xa5\x8e\x1d\x28\x75\x80\x20\xa9\xe7\x08\x90\x3a\x40\x70\xd4\x60\x0d\x09\x6c\x83\x35\x24\xb4\x0d\xd6\x90\x6d\x6d\xb0\x86\xac\xb6\xc1\x1a\x32\x58\x43\x06\x6b\xc8\x60\x0d\x59\x1f\x70\xb0\x86\x0c\xd6\x90\xb0\x36\x58\x43\x8e\x63\x0d\x89\x0d\x38\xea\x07\xcb\xcf\x13\x68\x74\xdc\x20\xa3\xfd\x07\x18\x3d\x63\x70\xd1\xcf\x4c\xe1\x12\x1d\x48\xd4\x0f\xcc\x5f\x4a\x00\xd1\xcb\x08\x1e\x7a\xf6\xc0\xa1\xa7\x06\x0d\xed\x27\x60\x28\x02\xda\x7b\xc2\x79\x21\xd3\x4b\xa1\xf9\x53\x8b\x5e\xf9\x00\xb8\xad\xf2\x15\x7d\x90\x3c\x25\x45\xa5\x6d\xb1\x9d\xa1\xfa\x55\x27\x0c\x1c\xa7\xfa\x55\xeb\xf0\x86\x12\x58\xbb\xda\x8b\x29\x81\xb5\xed\xcc\x86\x3a\x58\xed\x36\xd4\xc1\x1a\xea\x60\x0d\x75\xb0\xb0\x0d\x75\xb0\x86\x3a\x58\x43\xf6\xc2\x21\x7b\xe1\x90\xbd\x30\xfc\xab\x21\x7b\xe1\xf6\x36\x64\x2f\x8c\x69\x43\xf6\xc2\xe0\xd1\x87\xec\x85\x43\xf6\xc2\xb8\x81\x87\xec\x85\x64\xc8\x5e\x38\x64\x2f\xfc\x8c\xb3\x17\x0e\x75\xb0\x3e\x8b\x5a\x2c\x43\x21\x96\x88\xb1\x5f\x56\x21\x96\xa1\x0e\xd6\x50\x82\x65\xb5\x0d\x75\xb0\x3e\x23\xdc\x3b\xd4\xc1\xfa\x9c\xd1\xef\x50\x07\x6b\x40\xc2\x9b\xdb\x50\x07\x6b\xa8\x83\xd5\xd9\x86\x3a\x58\x83\x25\x69\xb0\x24\xb5\xdb\x60\x49\xda\xdd\x06\x4b\x52\x57\x1b\x2c\x49\x3b\xdb\x60\x49\x8a\x6f\x83\x25\x69\xb0\x24\x0d\x96\xa4\xc1\x92\x34\x58\x92\x86\x3a\x58\x43\x1d\xac\x90\x1d\x1c\xea\x60\x6d\x6e\x43\x1d\xac\xa1\x0e\xd6\x50\x07\x0b\xdb\x50\x07\x6b\xa8\x83\xb5\xb9\xb9\x2a\x52\xad\x88\xa8\xcf\xb7\x18\x56\xfc\x32\x86\x8a\x58\x43\x45\xac\x2d\x6d\xa8\x88\x35\x54\xc4\xda\xd4\x86\x8a\x58\x43\x45\xac\x1d\x6d\xc8\x01\x19\xd8\x86\x1c\x90\xa1\x6d\xc8\x01\xb9\xad\x0d\x39\x20\x57\xdb\x90\x03\x72\xc8\x01\x39\xe4\x80\x1c\x72\x40\xae\x0f\x38\xe4\x80\x1c\x72\x40\x86\xb5\xe7\x37\xc0\xfd\x73\xe4\x80\x1c\x2a\x62\xbd\xc8\x8a\x2e\x43\x39\x97\x8e\xf6\x72\xca\xb9\x0c\x15\xb1\xfe\x39\x0b\xb9\x0c\x15\xb1\x5e\x30\xfe\x1c\x2a\x62\x75\xb7\x97\x83\x42\x87\x8a\x58\xff\xcc\x88\x74\xa8\x88\x35\x54\xc4\xaa\xdb\x50\x11\x6b\xb0\x86\x6c\x6d\x83\x35\x84\x0c\xd6\x90\xba\x0d\xd6\x90\xa0\x71\x07\x6b\xc8\x60\x0d\x19\xac\x21\xbb\x27\x3d\x58\x43\x06\x6b\x48\xe7\xe0\x83\x35\xe4\x67\x6f\x0d\x19\x2a\x62\x0d\x15\xb1\x36\xb4\x9f\x99\xc2\x65\xa8\x88\x35\x54\xc4\xfa\x79\x56\xc4\x02\x2d\x2f\x4a\x36\xdb\x20\x3b\x14\x96\x2f\x9b\xae\x2c\x07\x5f\x09\xa5\xcb\x2a\xd1\x55\xc9\x52\x38\x30\x3c\x4c\xc3\x18\x28\x2d\x4b\x67\x92\x80\xf2\x42\x57\xac\xc8\xe4\xd2\x50\xdb\x11\xb9\x95\xe9\x88\x5c\xde\xde\xdc\xb1\xf2\x81\x27\xcc\x41\xdf\x37\x96\xa6\x6f\xdf\xb7\x8f\xcb\x82\x27\x34\xcb\x40\x63\xd1\xcc\x26\xa7\x4b\xa7\xc8\x9e\x2e\x09\xfb\xa4\x59\x29\x68\x46\xb4\x94\x19\xda\x7e\xcc\x64\xac\x22\x5a\x97\x9c\x3d\x30\x42\xcb\x29\xd7\x25\x2d\x97\x24\x67\x9a\xa6\x54\xd3\xed\xa3\x7e\xab\x98\x1f\x9d\xa2\x25\x29\x4a\x36\xc6\x1b\xd0\x9a\x07\xc0\xe6\x37\x5f\xbf\x73\xf7\x9b\xa6\xa9\x0b\xc5\x70\x10\x7e\x57\x4d\xeb\xdd\x3e\xdd\xce\x6d\xa5\xf5\x6e\xa9\x11\x80\xa7\x55\xd1\x14\x5c\xe1\x9e\x6d\x95\x48\x03\xd8\x92\x38\x26\xa4\x13\x3e\x99\x78\x78\x2a\x68\x5d\x8b\x87\xb6\x66\x8f\x89\x07\x5e\x4a\x01\x7c\xe4\x03\x2d\x39\x9d\x66\xcc\x9a\xf1\x6a\xe3\x8e\xe5\xed\xd8\x0e\x78\x79\x53\x1b\x39\x30\xcc\x67\xeb\x95\xec\xa6\x67\x1d\x14\xac\xb5\xd2\x6b\xf1\xf0\x1d\x6d\xab\x19\xc4\xc6\x25\x11\xfb\x82\x59\x12\x25\x6f\xba\x17\x14\xc4\x74\x86\xa8\xc3\xc6\x80\xe1\xb7\xbe\x10\xa6\xb4\x32\x5d\xec\xa6\x97\xad\x6d\x79\x4f\xf3\xa6\x2a\xda\x86\xdd\x98\x90\x77\x56\x34\xa6\xe4\xcd\x7f\xdd\x5c\x5d\xbf\xff\x78\xf3\xf6\xe6\xfa\xc3\x6e\x3c\x1a\x88\x3f\x01\x35\x45\x4c\xb6\x93\xa8\x7f\xe7\xce\x10\x2a\x4f\x31\x61\x18\xaf\x5f\x9d\x7d\x77\xf9\xe1\xbf\xde\x5f\xbe\xbb\x3e\x07\x91\x82\x7d\x2a\xa8\x48\x59\x17\x8b\x58\x29\x17\x7b\x54\x94\xec\x81\xcb\x4a\x65\xcb\x9a\xc2\x6e\xbe\x0a\xab\x77\xc0\xa0\x87\x8e\x51\x0c\x7d\xb4\xd8\x63\x73\xa7\xa0\x06\xa1\x0d\x70\x36\x26\xc2\x92\x29\x99\x3d\xb0\xb4\x4b\xfb\x01\x51\xa0\x6e\x3b\x1a\x23\x6c\x51\x69\xa7\xe4\x71\x76\xd5\x4a\x24\x0b\x2a\xe6\x2c\x9d\x90\x2b\x59\x99\xd1\x7e\xf5\x2b\xd8\xb2\x92\xa5\x55\xd2\xb9\x63\xa8\xa1\x43\x81\xf6\x57\x23\xc7\x00\x18\xb2\xab\xb0\xa2\x9d\x4a\x68\xe1\x36\xd5\x3f\x15\xb5\x14\x9a\x7e\x7a\x1d\x52\x1b\xef\xe4\x57\xde\x87\x27\xae\x56\xa1\x34\xd3\x43\x66\x09\x57\x94\x41\x99\xb9\x8c\x9c\xf8\x6f\x77\xf5\x7d\x6d\xe6\xc7\x52\x1f\x76\x30\xe6\x92\x3d\xb0\x12\x94\x43\x16\x72\x46\xa4\x64\x73\x5a\xa6\x19\x53\x10\xed\xf7\xb8\x60\x50\x38\x12\x25\x5d\x3c\xa8\x8e\xb1\x58\xad\xc8\x12\xb2\x53\xc1\x78\x85\x26\x6e\xc0\xb5\x27\x1d\xcb\x88\xb9\x79\x6f\x4b\xd9\x51\x7e\xac\x75\xfb\xee\x20\x9c\xa8\x76\x04\xd8\x04\xae\xa7\xd6\x88\x31\xf1\xb1\xbc\x32\xdc\xe9\xac\x31\xd0\x9b\xe7\x01\x46\xfa\x60\x59\x3e\x5c\x99\x9f\x48\x31\xe3\xf3\x77\xb4\xf8\x8a\x2d\x3f\xb0\x59\x64\x64\x23\x32\xe6\x56\x3d\x0d\xec\xae\xa1\x0e\xd8\x61\x37\x5b\x79\xc0\x40\xb6\x10\x93\x49\x9c\xc5\x23\xd8\xce\xb1\x56\x54\x10\x45\x04\xcb\xc6\xef\x9d\xd9\x26\x41\x04\x6e\xe3\xe4\x82\x05\x42\x9f\x22\x5a\x54\x10\xe7\x6e\x51\x2b\xd1\xd8\x6c\xc6\x12\xcd\x1f\x58\x56\xc7\x58\xdb\xaa\xa6\x36\xe6\x79\x4a\x93\xfb\x47\x5a\xa6\x0a\xea\x64\x52\xcd\xa7\x3c\xe3\x7a\x19\x52\x83\x14\x9b\x15\x6a\x6c\x58\xb6\xd3\x9b\x0b\xa5\x29\xa0\x2f\x57\x4d\xd3\xec\x30\xb2\xfd\xd4\x19\xae\xf1\x36\xba\x80\xe6\xe0\xe1\xa0\xae\x63\xc2\x4a\x43\xe0\xb2\x25\x79\x2c\x65\xb8\x68\xf6\xf1\x9b\xab\x6f\x5e\x93\xcb\x34\xb5\x75\x76\x2b\xc5\x66\x55\x66\x0b\x4a\x4e\x0c\x1f\xfd\x1d\x2b\x15\x97\x62\x44\xee\xb9\x48\x47\xa4\xe2\xe9\x9f\x03\xfb\x7e\x27\x21\x4a\x7a\x26\x5f\x93\x85\xd6\x85\x7a\x7d\x71\xd1\x88\x65\x13\x2e\x2f\x52\x99\xa8\x8b\x44\x8a\x84\x15\x5a\x5d\xc8\x07\x43\x73\xd9\xe3\xc5\xa3\x2c\xef\xb9\x98\x8f\xcd\xe6\x8c\xf1\x72\xaa\x0b\x90\xb3\x2f\x7e\x09\xff\x8b\x5a\xdb\x55\x29\x0b\xf2\x83\x19\x78\x5a\xf1\x2c\x65\xe5\x6b\xeb\x9d\xf4\x03\x3a\xf3\x18\xce\xa0\x94\x59\xc6\xca\xf1\x9c\x09\x92\x4a\x06\xfe\x3c\x82\x19\x0c\xa9\xeb\x99\xcf\xb9\x5e\x54\xd3\x49\x22\x73\x6f\x11\x63\xc5\xe7\xea\xc2\xeb\xfb\x82\x2b\x55\x31\x75\xf1\x2f\x7f\xf8\xb7\xdf\x1f\xe4\xa2\x11\xe7\x5b\xf5\x9a\x9c\x9c\x04\xbc\x2f\x0b\x14\x60\x7a\x5c\xce\x3b\xd0\x71\x2c\x5b\x94\xb4\xc6\xad\x86\x4a\x72\xad\x00\xb5\x38\x3b\x8d\x65\xc4\x22\x96\x3d\x95\x32\x63\xb4\xdb\xdb\xed\x29\xca\x59\x00\xe5\x78\xc2\x12\x84\x9a\x1a\xea\x83\xf8\xc5\x62\xa8\x42\xa6\xaf\x89\xaa\x8a\x42\x96\x5a\x35\x72\xb3\x81\xdd\x51\xfb\x4f\xd0\x1c\x8d\xc8\x0f\xf5\x43\xf4\xaa\xfb\xfe\xf4\x8f\x5f\x5d\xff\xc7\x9f\x4e\xff\xf6\x83\xff\x9b\x27\x41\x7b\x2f\x04\x4c\x53\x15\x2c\x99\x08\x99\xb2\xf7\x30\x03\xf8\xd3\x32\xb8\x97\x49\x22\x2b\xa1\xed\x0f\x9a\xea\x4a\x4d\x16\x52\xe9\x9b\xdb\xfa\xcf\x42\xa6\xab\x7f\x05\x98\x79\x0f\x48\x5a\x61\xaf\x6f\xa9\x0e\x48\xdb\x10\x45\x60\x1b\x64\xd7\xe3\xb6\xd8\x2f\xfd\x4a\xd0\x39\x85\x7f\xbe\x75\xd3\x35\xe4\xe7\xb1\xe4\x5a\x83\xcb\xa7\xcd\x14\x21\x67\x23\x77\xa5\x91\x97\x7c\xf8\x22\x4a\xb5\x1c\x8c\x39\xea\x5d\xeb\xb1\x38\x98\xbd\x5d\x59\xad\xdb\xb1\x0e\xaf\x6b\x1a\xd1\xcb\xdb\x1b\xf2\x80\xbb\x71\x80\x85\x3c\x05\x15\xb8\xe8\xfb\xb7\x47\x41\x09\x6e\x34\xb7\x71\xb5\x08\xfa\x1a\x8d\x6c\x75\x2e\x00\x92\xf1\x9c\x5b\x1f\x07\x5b\xff\x3b\x84\xc4\x9d\xe1\x67\x93\xa4\xa8\x46\xb6\x8b\x49\xce\x72\x59\x2e\xeb\x3f\x59\xb1\x60\xb9\x11\xba\xc6\x4a\xcb\x92\xce\xd9\xa8\x1e\x00\x3f\xab\xff\xc2\x0f\x5b\x53\x58\xff\x1a\x65\xf5\xa4\x2a\x0d\xfb\x95\x2d\x1d\x8a\x0b\x51\xe0\x1e\x10\x1d\x04\xd7\x56\x8f\xc3\x06\xf5\x71\xbd\xef\xc7\xdb\x9e\xd6\x5a\x2a\xe4\x8e\xeb\x55\x81\xb0\xf6\x20\xb3\x2a\x67\x6a\x54\x13\x68\x94\xc6\xc5\x83\x11\xdb\xd4\xe9\x21\x10\x40\xca\x1f\xb8\xea\xe5\x22\x7b\x57\x9b\x1a\xc1\x2e\x57\xe9\xa2\xd2\x36\xc3\x94\x57\xbc\x5f\x2a\x90\xd3\xeb\x04\x17\x2d\xac\xf6\x45\x08\xb3\x42\x48\x41\xb5\x66\xa5\x78\x4d\xfe\xdf\xd9\x7f\xfe\xe6\xa7\xf1\xf9\x9f\xcf\xce\xbe\x7f\x35\xfe\xb7\xbf\xfd\xe6\xec\x3f\x27\xf0\x8f\x5f\x9f\xff\xf9\xfc\x27\xf7\xc7\x6f\xce\xcf\xcf\xce\xbe\xff\xea\xdd\x97\x1f\x6f\xaf\xff\xc6\xcf\x7f\xfa\x5e\x54\xf9\x3d\xfe\xf5\xd3\xd9\xf7\xec\xfa\x6f\x81\x9d\x9c\x9f\xff\xf9\x57\x41\xd3\xa3\x62\xf9\x4d\x00\xd6\xc0\x36\xee\x91\xb6\xab\xf9\xaa\xaf\x55\x8f\x0b\x3d\x96\xe5\x18\x3f\x7f\x4d\x74\x59\x85\x08\x12\xee\xd8\xfa\xc0\xb9\xab\x7c\xfe\xba\xc1\x78\x35\x75\x38\x00\x20\x3f\x85\x00\x28\x96\x94\x4c\xef\x4b\xd1\x80\xbd\x39\x02\xb8\x62\x1f\x1e\x74\x0f\x8d\xee\xa1\xce\x36\x04\xfb\xd5\xb0\x0e\xb3\x52\xe6\x13\xe2\x29\xb3\x1f\xc0\x17\xd0\xbe\x77\xcf\x02\x23\x46\x06\x5d\xc5\xa0\xab\x18\x74\x15\x83\xae\x62\x45\x57\x71\x87\x68\xe4\x85\x2b\x2a\x98\x78\xd8\xa5\xf2\x8f\x30\x0c\xbf\x85\xec\x89\xbe\x71\xd8\xc9\x17\x5a\x92\x42\x16\x55\x46\xf5\x16\x83\x56\x84\xa5\xb8\x0e\xe2\x74\x66\x37\x03\xf9\x60\x95\xb5\xb4\x3f\xdf\x6c\x9a\x24\x97\x59\x46\xb8\x40\x0c\x6f\x3a\xd8\x3a\x82\xb3\x7c\x95\x0c\x85\x0b\x42\xd1\x2c\xfc\x60\xa6\xfc\x68\x73\x3e\x7a\x06\x3d\xae\x88\xd2\xb4\xd4\x5c\xcc\x27\x98\x13\x12\x69\xb4\x35\xe7\x70\x51\x67\x86\xdc\x3a\x64\xcd\xb3\xd6\x7e\x91\x6b\xc9\x60\xd1\xeb\x46\x69\xb7\x4c\x98\xa5\xa6\xf7\x60\x8a\x4c\x58\xca\x44\xb2\xc3\x50\xf6\x1d\xfa\x5a\xba\x3d\x9b\x1a\x49\x0b\x8c\xf9\x88\x54\x49\x5a\x15\x19\x4f\xcc\xf9\x98\x99\xc7\xf5\x7d\x93\xe7\x95\x06\xb3\xf0\xb1\x6c\xf6\x06\xd2\xac\xe1\xc9\x33\xdd\x03\x89\xaf\x25\xde\x3a\x2e\xa0\x56\x19\x6e\x3f\xf1\x20\x56\x28\x8c\x61\xa9\xad\x49\x9d\x1c\xde\x1a\xa7\xd2\xe8\x36\xdb\x1c\xca\xb1\x0d\x62\x61\xfc\x49\x3c\x6f\xd2\x97\x2f\x39\x26\x4f\x72\x44\x7e\xa4\x3f\x2f\x72\x28\x3e\xe4\x39\x79\x90\x17\xcf\x7f\x44\xf1\x1e\xe1\x7c\x47\x38\xcf\x11\x61\x1b\x89\xe5\x33\xc2\x79\x8c\xbe\xc2\x6f\x51\xb2\x19\xff\x14\x81\x10\x2f\x45\xa3\x99\xe2\x29\x13\x9a\xcf\xb8\x59\x27\xb8\xf4\x15\x4c\x34\xfe\x7a\x36\xe7\x4c\x6b\x07\x0e\xea\xa0\x84\xe2\x61\x3c\x7e\xbf\xdb\x24\x7e\x0e\xc8\x7d\x40\xee\xed\x0d\x19\x90\xfb\x80\xdc\xb7\x0a\x93\x2f\x09\xb3\x0b\x99\x76\xe6\xbd\x08\x45\x24\xef\xbd\xbe\x56\xc2\xe1\xd1\x65\xd0\x2d\x5c\x97\x55\xe3\x6d\x56\x48\xb8\xcc\x33\xae\x9b\x98\x86\xed\x87\x7d\xb7\xa1\x47\x08\x56\xb0\x5f\x9e\x2a\x97\x53\x66\xa5\xff\x95\xda\x0a\xe8\x3d\xbe\x7b\xac\xc8\xdb\x86\x52\x43\x85\xb9\x77\x2e\xa8\x52\x7c\x2e\xc6\x85\x4c\xc7\x66\x94\x8b\x9d\x62\xd5\x31\x1d\xc8\x6b\xe3\xca\x53\x8f\xfb\x43\x6d\x7a\xf4\xe4\x37\x83\xd1\x2b\xcd\x3c\xbb\x64\x6d\xb1\x72\x59\x45\x02\xf4\x03\x9d\xd2\xe8\x13\x0f\x27\xa7\x82\xce\xd9\xd8\x4e\x76\x5c\x4f\x76\x5c\xcf\xed\x09\xe7\x15\x42\xc7\x93\x8c\xf2\xdd\x21\x5a\x31\xd4\xfb\x0d\xf4\x66\x8b\x54\xd4\x31\x74\x2b\xa9\xe2\x9d\xda\x80\x0b\xf4\xdd\x70\x3f\xe1\xc7\xbb\x3d\x40\xe0\xb2\xd4\x09\xb7\x36\x1c\xe4\x2f\x76\x7e\x1e\x95\xab\xa8\x2b\xa2\xe8\x6a\x29\x68\xce\x13\x07\x7d\x97\x19\xc4\x49\x71\x29\x56\x32\x19\x05\x4c\xa9\x66\x59\x78\x0d\x6f\xe4\x46\x93\x84\x0a\x34\xae\xdb\x28\x17\x83\x49\xea\xb5\xee\xf4\x5a\x09\x0b\xd4\x0b\x08\xcf\x6b\x9d\xfe\x07\xff\xa4\x7c\x27\x66\x29\x18\x61\x42\x97\xc0\x3b\xdf\xca\xd4\xd0\x9c\x49\xeb\xed\x0e\x1f\x9b\x60\xde\x34\xd4\x74\xd4\x11\xe8\x40\x5e\x0e\x9b\xeb\x51\x0e\x77\x63\xcc\x85\x69\x6d\x69\x21\xd3\xc9\x86\xbb\x12\x5e\x88\xe3\x56\xa6\x36\x9e\x4f\xb7\xe0\xcd\x5c\x23\x00\xb5\x9c\xde\xbb\x28\xbb\xda\xee\x49\x1f\x28\xcf\x02\x3c\xcd\x09\xe4\xae\x53\x3c\x35\x02\x52\x00\x52\xad\x27\x16\xc6\x27\xad\x87\xbf\x19\x86\xe2\xbe\x33\xd1\x60\x27\x08\x6c\x8b\xab\xcb\x69\xb1\xf5\x2b\x74\x45\xd9\x17\xbe\xfc\x1a\x5d\x65\xf0\x93\xa9\xf5\x48\xc8\xe9\x27\x9e\x57\x39\xa1\xb9\xac\x30\x9e\x7e\x9d\x96\x05\x85\x1a\xee\x83\x32\x6d\xa0\x48\x6a\x1b\x49\x22\xe1\x17\x39\x3e\x20\xfe\x85\xfa\x52\x04\xf9\x50\xc4\xf9\x4e\x44\xf8\x4c\xf4\xf6\x95\x70\x5e\x51\xfb\x02\xe4\x0f\xb6\xbf\x55\x50\xe6\xa2\x13\x94\x1d\x46\xdf\x0d\xcb\x37\xb3\x66\x0c\xae\x88\xcc\xb9\xd6\xd6\xf9\xc8\xc3\x39\x23\x23\xda\xf9\x9e\x3a\xf6\x82\xf1\x19\xa2\x36\xae\x08\xfb\x54\x64\x3c\xe1\xe0\xf0\xe5\x9c\xfc\x76\xf3\x1c\x20\x39\x3f\x72\x2c\x4d\x46\x05\xe1\x79\x81\xa9\x2e\xe0\xa2\x8c\x1d\x3b\x63\xa3\x52\xea\x59\xda\x30\x2a\xf6\x29\x31\x22\x27\x4e\x64\xb8\xaf\xc3\x7d\x8d\xbe\xaf\x6a\x4f\x52\xb1\x2f\x11\x37\x51\xf7\xb5\x64\x6c\xae\x12\x44\xc4\xa3\x8c\xea\xa0\x6b\xd7\xc5\xbc\x76\x09\x61\x3f\x30\x30\xf8\xdd\x31\xad\x6c\x7c\x3f\xf4\xb4\x4b\xbb\xb5\x96\xe3\xb1\x4e\x22\xeb\x92\x65\x50\x50\xdf\x79\x6f\x34\xd1\xd1\x3b\x04\x36\xbd\xca\x50\x81\xd8\xcd\xf2\x22\xa3\xba\x11\xca\x9f\x10\x46\x1d\xc2\x36\xc6\xa4\x41\x7c\xde\xc4\x87\x87\x11\x14\x3a\xb9\xdf\x67\x4c\x60\xd8\x37\x65\xe1\x01\x44\x94\x6e\xcf\xb6\xc0\xd4\x83\xe1\xa2\x4c\x90\xeb\xdb\xa1\x13\x0a\x46\x28\x48\xc3\x93\x06\xc6\x8b\x5f\x07\x4e\x0c\x78\xa8\x54\x80\x11\xbb\x17\x9a\xee\x2f\x7e\xef\x8e\x94\xd2\xef\xe8\x49\xfc\x8e\x99\xb6\x2f\x2a\x51\x5f\x4c\xea\xa5\xe0\xb4\x4b\xfd\x5d\x95\x63\xd2\x2d\xf5\xfc\x30\x30\xa9\x5e\x0c\xec\x1e\x39\x71\xde\x91\x53\xe5\x3d\x47\x72\xbc\x83\xc9\x0f\x01\xa0\x19\x6f\x64\xd2\x32\xb3\x25\x09\xc2\x8c\x0e\x1f\x9b\xf7\x61\x3b\x1a\xcf\x78\xaf\xa7\xe3\x38\xaa\xed\x84\xec\x8f\x8e\xcf\x35\xd8\xa9\x99\x34\xc0\xb8\xd6\x34\x59\xd8\x14\x77\xf8\x8b\x81\x04\xb1\x24\x06\x08\x34\x52\x72\x9b\x65\x6b\xd7\x39\x2f\x18\xd1\x25\x14\xa4\xfe\x63\x7d\x21\x46\x68\x61\xff\x93\x97\xc9\xa4\x2e\xa9\x5c\x03\xe3\x1f\xdd\xbf\xfe\xf4\xc4\xfc\x36\x61\x4c\x0e\x4e\x69\x9f\xbc\xea\x35\xf4\x48\xb8\x48\xc1\xa7\x11\x59\x21\xdc\x3c\x1c\xcc\x6c\x2d\xac\x7b\x62\x73\x83\x61\xa2\x3d\x6b\x0d\x04\xe7\xc7\xe6\xe5\x4e\xd6\x01\x7c\x3e\x1b\xd5\x44\xed\x67\x50\xdf\x61\x46\xde\x4b\x5b\x9b\x9e\x8d\xc8\x2d\xa8\xe1\x9b\x27\x70\xe7\xdf\x4b\xac\x52\xdf\x91\xec\x24\x10\xfd\x77\xf2\x8c\x71\xfb\xf9\x55\xc3\x50\xe2\xc6\xb4\x18\xca\xe6\x62\xf9\x2c\xe5\xce\x8d\xbd\x67\xcb\xce\x5d\xb5\x4c\x82\x65\x66\x81\x98\x8f\x1a\x18\x75\x44\x1e\xf9\x86\xff\xed\xac\x4a\xf9\x94\x0b\x9c\x0a\x0e\xec\xce\x19\xc6\x76\xe7\x61\x24\x90\x2c\x0b\x98\x44\xe0\x6e\x87\x71\xbc\x71\x5b\xfe\x4d\x04\xa7\x5b\xd3\x8b\xae\x2d\xdd\xc4\xdf\x7a\x4c\xed\xf5\x8f\x15\xcd\x26\xad\xcc\x32\xf8\xa8\xeb\xba\x59\x47\xe7\x55\xba\xf9\xc8\xb3\x34\xa1\xa5\x0d\x38\x04\xf4\x43\x94\xb4\x16\x41\xc0\x7e\x49\xa7\x4b\xbb\x43\x80\x0d\xf0\x28\xf4\xee\x2d\x68\xa9\x79\x52\x65\xb4\x24\xe6\x8e\xcf\x65\x19\x94\x3a\xa6\xf3\x30\x1b\x68\xbe\x63\x89\x14\xe9\x5e\x85\xe8\x8f\xab\x9d\xaf\xfa\x2f\x17\xac\xe4\xb6\x3c\x3a\xcf\xd9\xea\xf5\x3a\x6b\xf9\x42\x74\xc9\x61\x33\x87\xec\x6a\xdc\x32\xf2\x35\xa3\x6d\x2b\x26\x56\xcf\x39\xf7\x08\x4e\x7d\xdb\x27\xe4\x2f\x4b\xa7\xa2\xed\x62\xc8\xb9\x76\xc9\x7c\x14\xd3\x2e\xdd\x93\xbb\x8a\xf6\x24\x1b\x34\x32\x93\x25\xa4\x51\x3a\x4b\x25\x26\x00\x7a\xe0\x89\x3e\x9f\x90\xff\x8f\x95\x32\x20\x4f\x96\x60\x73\xac\xe7\x6f\x2f\x76\xad\x8f\x2a\x19\xb5\x7e\xfb\xaf\xc8\x19\x74\x4a\x78\x9e\xb3\x94\x53\xcd\xb2\xe5\x39\xaa\xa7\x18\x51\x4b\xa5\x59\x1e\x02\x35\x21\x6a\x45\x8c\x47\x85\x77\x7f\xff\xbb\x1d\x6f\x1e\x20\xbf\x99\xcd\xa1\xd4\x6c\x2c\xfa\xab\xad\x40\x4f\x9d\x98\xb3\x53\xde\xdf\x2a\x9f\xf9\x01\x0a\x4d\x6a\x54\x87\x9b\x6b\xd8\xfa\xbb\x01\x50\x4a\x4a\x36\x87\xfb\x89\x77\xee\x89\xb7\x13\x03\x96\xdf\xc9\x4a\x6c\xb7\x81\xb4\xf6\xed\x6b\xab\x82\xfb\xce\xfb\x30\x36\x31\xe1\x7e\x19\x42\x6f\x26\x9e\xd5\x85\x12\x30\xb5\x00\x07\x66\x10\x1b\xbe\xd5\x84\xb5\x04\x98\x67\xf7\x98\x6c\x10\xe6\xd2\x91\xdb\x62\x2f\x29\x09\xeb\x81\xf6\x79\x15\x20\x4f\x84\xdd\xb9\x95\xac\x7b\xae\xa2\x1c\x00\x30\x6e\x71\x03\xc1\x30\x19\x96\xda\x58\xd0\x2e\xb4\x23\x6b\xed\x26\x39\x7d\x7d\xba\x17\xaa\x83\xbb\x51\xca\x82\xce\xe1\xb2\xee\x73\x53\x56\xfb\x26\x29\xd3\xac\xcc\xb9\x60\x8a\x2c\xe4\x23\xfe\x8e\xcc\x40\x61\xdf\x62\x69\x5d\x09\x8f\x2c\x64\xe7\x8e\x60\xf5\xb8\x26\xbf\x21\x62\x0f\xf0\x5d\x7c\xa4\x4b\x42\x4b\x59\x89\xce\x1c\x0d\xc0\x45\xd7\x94\xe3\xdd\xca\xa4\xdf\x4b\xc1\x6a\xf7\x87\x2e\x2a\xdb\x22\x6d\x53\xa6\xa9\xb9\xf0\x5f\x4c\xbe\x78\x15\x34\x87\x0f\x2c\xa9\x4a\xc5\x1f\xd8\x07\x46\xd3\x6f\x8c\xc4\xcd\x15\x60\x0d\x2d\xc9\xcd\xec\x56\x2a\xc5\xa7\x19\x23\x12\xbc\xd1\xaf\x05\x9d\x66\x86\xe9\x5f\x9d\x70\xcd\xa1\xc2\xcc\x65\x49\x2a\x51\x8b\x08\x1d\xb3\xb0\x64\xde\xb7\x8a\x9a\x4e\xce\xf7\x02\x69\x91\xa9\x40\x61\x2f\x57\xec\x33\xce\xd7\xdb\xe1\xaa\xbd\xcc\xab\xb4\x9b\xbd\x4f\xc8\x7f\x87\xd7\x1a\xfa\x1e\x83\xee\x84\xcf\xc0\x6a\x37\xc2\x47\x8f\x25\xd7\xcc\xa3\x5b\x67\x33\x9a\xa9\xd5\xc3\xea\xd8\xf6\x76\x26\x46\xe8\x20\x64\x3f\xba\x5d\x72\xcb\x55\x30\xdc\xe7\xce\xac\xc3\x78\x93\xce\xdf\xb9\x1d\x37\xbb\x66\x31\x44\x83\x2f\x17\x54\xa4\x59\x27\x1c\xd7\x2b\xc8\x96\x5d\x3e\x75\xd6\x5d\xa0\xb9\x6f\xb0\x91\x23\x9f\x4b\x5d\x50\xc3\x58\x02\x33\x09\x8a\x5b\x91\xd6\x57\xcc\x3b\xad\xe8\x81\x10\x1c\x10\x69\xf9\x68\xc3\x5e\xf8\x2b\xae\xec\x05\x07\x5d\x09\xd0\x6e\xcb\xe1\xe6\xb4\x33\x83\xba\xb7\x03\xcd\x76\x4e\x2c\x83\xb5\x61\xb4\x06\xbd\xac\x8c\xd7\x77\xac\x91\x81\x78\x64\xca\xeb\x64\x39\x8e\xfd\x6d\x50\x76\x69\xf8\x8f\x9c\x35\x13\xeb\x18\x6a\x75\xda\x35\x12\x5c\x9b\xf3\xe6\x59\xd5\x93\xea\x18\xa7\x7b\xca\x6d\x89\x06\x55\x6a\x98\x9f\xd5\x96\xcc\xd4\x14\x43\x78\x03\x92\xee\x12\x56\x96\xb2\xac\xa5\x88\x39\x13\x20\xaf\x80\x1e\xce\xa9\x92\x6c\x7c\x0b\x55\x52\x04\x41\x5a\xc7\x29\x1b\x54\xd3\x4d\x41\xf0\xb3\x8e\xc1\x80\xcc\x9c\xc9\x72\xe5\x3e\x38\x19\x6c\x03\x31\x89\x9e\x3e\x10\xe7\xa6\x63\x04\x2b\x4f\xd8\x32\x5b\xd8\x28\x00\xe4\xac\xbe\x3c\xfb\x09\xbb\xaa\xa6\x87\x66\x17\x2d\x5f\x08\xac\x4f\xc3\x2d\xd6\x40\x77\xaa\xb6\x73\x8e\x11\x34\xe2\xe4\x84\x9c\x61\x3f\xa7\x8a\x94\x52\xea\xfd\x10\x76\xbb\x3f\xd7\x9f\x8a\xbd\x2a\xa2\xae\x6d\x7e\x63\x52\x1c\x6d\xb3\xfe\xc2\x16\xf4\x81\x29\xa2\x78\xce\x33\x5a\x66\x90\x3c\xf6\x0e\x97\x07\xc1\x60\x1b\x33\xb4\x07\x64\xf7\xf6\xb4\xde\xfe\x3c\xbd\xee\x0e\x79\x8e\xc4\xad\xc1\x1c\x11\x50\x1c\xb7\x26\x28\x0d\x5d\xe9\x8a\x66\xd9\x92\xb0\x4f\x49\x56\x19\x8c\xb9\x17\x81\xb9\x8f\xac\xbc\x2a\x26\x17\xd6\x3d\xfc\x88\x42\x72\x5b\xed\x69\x78\xd6\xd4\x81\x13\x08\xc5\x68\x3a\x01\x3b\x08\xf8\xda\xd3\x24\x61\x4a\xb9\xcc\x06\x4b\x3f\x3b\x43\xbd\x86\xcf\x25\x59\x3f\x7d\x54\xd7\x19\x55\x9a\x27\x7f\xc9\x64\x72\x7f\xa7\x65\xb9\x57\x7d\xd1\xa6\xfe\x57\x4a\x20\x5c\xfe\xf5\xce\x20\xef\x7b\x2f\xa3\x96\x75\xc6\xf4\x8d\x53\xb4\x63\xa0\xfb\x6a\xca\x32\xa6\x4f\x15\xc8\x90\x24\xa7\xc9\x02\x0b\x71\x80\x80\x28\xea\x9c\x6d\x56\x85\xbd\xf3\x88\xb0\x45\xfa\x5b\xda\xb4\x81\x17\xf6\x2a\xfc\x92\x3e\x2a\x86\x2b\x9f\x9a\x95\x43\xb5\x91\x80\x4b\xb6\x57\x0f\x22\x9c\xcb\xcd\xd5\xce\x17\xc3\xbd\x83\x66\xea\xa3\x99\x63\xa7\x2b\x40\xbc\xbf\x08\xf6\xec\xf4\x8a\x33\x9e\x31\xd4\x97\x62\x7c\xac\x0d\xf5\xb5\x77\x12\xa0\x63\x29\x2b\xf2\x48\x51\xf5\x0f\x98\x3e\x28\xdc\x95\x17\xaf\xc9\xb5\x50\x55\xc9\x1a\x8b\xd2\xea\x60\x9b\xb8\x57\x00\x29\xd4\x50\x1a\x9c\x1e\xa2\xcb\xc5\x76\xfd\x89\xe6\x45\xc6\xd4\x6b\x72\xc2\x3e\xe9\xdf\x9d\x8c\xc8\xc9\xa7\x99\x32\xff\x13\x7a\xa6\x4e\x26\xe4\x26\xaf\xfd\x8d\xb9\x98\xb1\xb2\xac\x43\x86\xf1\x03\xc3\xbd\xb6\x24\x8e\xee\x31\x8f\x0d\xb7\x76\x6f\x21\xec\x76\x21\x1f\x49\x2a\xc9\x23\xd6\xac\x30\x24\x13\xf8\xdc\x3a\xe7\x8e\xb7\xd9\x40\xcb\x13\x99\x17\xa5\xcc\xb9\x67\x20\x86\x7b\xdb\x39\x60\x84\x6b\x0a\x18\x6f\xba\xf5\x5c\xa4\x17\xe0\xd6\x9d\x3b\xd8\xf5\x1e\x88\xfd\x40\xed\xcd\xcc\xf9\xb3\xa3\xcc\x63\xb9\x6b\x18\xd0\x76\x63\xe0\xd4\x8e\x63\x68\x42\x1c\x64\xbe\xad\x33\x74\x92\x8b\x94\x3d\x5c\xa8\x94\x7e\x31\x82\xa9\x2a\x1b\x1b\xdc\x5e\x17\x55\xe4\x24\x2c\x6d\xef\x9d\xe3\xa9\x46\xfe\x4e\x34\x3d\xcd\x64\x59\x0f\x09\x5e\x29\xaf\x4e\x40\xaa\x30\x63\x27\x54\x90\x8c\xd1\x07\x2b\x6a\x21\x8e\x5a\xa2\xfa\xbf\x93\xf7\x89\x31\xa5\x90\xb6\x39\xe5\x5f\x7e\xdb\x29\xfa\x86\x68\x48\x48\x2f\x68\x72\x7d\x3b\x9b\x4a\x59\xd9\xdc\x4b\x33\x59\x26\xb5\x3c\x68\x75\x28\x4c\x03\x32\xe2\xa2\x65\x75\x78\xa9\x18\x22\x26\xb5\x98\x23\x5b\x07\xf1\x4c\xb4\x7d\x83\x7e\x57\xf0\x1f\x2b\x46\x6e\xae\xea\x5c\xe6\xac\x54\x5c\x69\x83\xb7\xd2\x16\x47\xc2\x91\x4d\x39\xbb\xcc\xe9\x3f\xa4\x20\xd7\x7f\xb9\xb3\x1d\x05\x80\xe2\x73\xee\x77\x27\x82\xa4\xff\xa8\x4a\x66\xb8\xaf\x08\xa6\xaf\xfe\x66\x95\x91\x33\xcf\xc9\x15\xd5\x14\xf9\x39\x1b\xd5\x23\x1a\x12\x6a\xb8\xb1\x29\x17\xa9\xfd\x29\x94\x17\x3b\x00\x67\x64\x8e\xf7\x7d\x57\x08\xa8\x7b\xf1\xdb\x0f\x37\x7b\xe2\xa0\x12\x20\x6f\xf3\x77\x32\x8d\x65\xa3\x4e\xbd\x4f\x1d\xad\xf9\x77\xb3\xa7\x6f\xf0\x39\xc9\x4d\x9f\xa0\x6e\x19\x81\xce\x91\x7c\x03\x2a\x39\xf8\xe7\x5f\x4b\xae\xd9\xa4\x3b\x3f\x6d\x04\x55\x75\x1b\x18\xb9\x0c\xf7\x99\x5b\x82\x9f\xca\x25\x35\x90\x03\xf7\xce\x92\xce\x69\x26\xa7\xc4\xde\x86\x7d\xcf\xfd\xdb\x0f\x37\x3d\xa6\xfe\xed\x87\x1b\x37\x73\xf3\x4f\x39\x3b\xde\xa4\x8f\xc1\x7c\xbf\x5d\xe1\x85\x63\xd8\x94\x26\x09\xd2\x2a\x47\xbd\x4f\x76\x7a\x72\x34\x46\x3a\xe2\x68\xee\xb9\x08\x48\x56\xdc\xbe\xce\xe6\x1b\x23\x94\x62\x0c\x93\xe7\xbd\x77\xb7\xa0\x90\x5f\xda\xe5\x71\x44\x80\x32\x10\xa6\x0c\x7d\x72\xa0\x45\x28\x16\xb3\x20\xe4\x8a\xa1\xba\x38\x7d\xed\x7c\x92\xeb\x2f\x36\x7f\xf0\x0e\x62\x01\x53\x8b\xc8\x09\x86\x06\xa6\x1e\x24\x9f\xa1\xde\x5c\xd4\x3f\xd9\x50\x6f\x4c\x7f\xa4\x98\x3e\x9f\xb4\x74\xbc\x0a\xa6\xbc\x57\xf4\x72\x14\x2e\x6b\xcd\x98\x46\xce\xcc\x6f\x17\x60\xaa\x3b\x9f\x34\xa6\x1b\x08\x8d\x6f\x18\xb1\x80\x31\x0c\x98\x7f\x78\x32\xab\x16\xca\x34\xc1\x41\x9a\xcb\x1b\x4b\xc5\xcd\x37\x1b\xa9\x38\xfc\xe0\x2a\xb1\xbe\x64\x42\x8e\x09\xd2\x82\x48\x39\x80\x69\xe7\x9b\xe1\xc4\xfc\x28\x30\x9a\xfe\x5c\x60\x94\xd4\xd9\xec\x7a\xb0\x0d\xcd\x87\x8e\xfc\xd6\x99\x30\x5c\xa2\xf5\x56\x1c\x20\x02\xf1\x9d\xc5\x7c\xb6\xee\x0f\x32\x1b\x06\x74\xbf\x0a\xc8\x19\x1f\x81\xac\x6a\xc0\x8a\x5d\x95\xfb\xce\x2d\x0a\x11\x32\x3c\x26\x01\x20\x1d\x3c\xc9\x84\x15\x8b\x59\x8c\x73\xa9\xf9\xe0\xed\x5d\x5b\x31\xfe\x86\x15\x0b\xf2\xf6\x6e\x03\x36\x80\xbd\x87\x59\x2b\x54\x97\x9f\x2a\x92\xf1\x19\xd3\xbc\x63\x09\x07\xc0\x07\xb9\x14\x5c\xcb\x72\xb7\xb5\x37\xfc\x8e\xbb\xee\x0e\x71\xc7\x5d\xdf\xe6\xf4\x9b\xba\x12\xef\xbc\xa7\x94\x24\x32\xcb\x58\xa2\x6d\xb1\x25\x38\x82\xa0\x15\x62\xdb\x20\x78\x32\xab\xf7\x99\xdc\xff\x01\x44\x4f\x2b\x64\x5e\x20\x88\x5c\x7c\xb8\xbe\xbc\x7a\x77\x3d\xc9\xd3\x5f\x2e\xe4\xe3\x58\xcb\x71\xa5\xd8\x98\x77\xd7\x6c\xf8\x8c\xe3\xcf\x08\xa6\x23\x08\x28\x15\xd5\xe6\xe0\x0a\x5b\xe5\xea\x1b\x97\x78\x8f\x7c\xab\xd0\x36\x5d\x7b\x26\xb0\x14\x6c\x75\x23\x52\x52\x9b\x5c\x8f\x5a\x3d\x68\x95\x65\x78\x9a\xba\x64\x6c\xe4\xeb\xf4\x2e\x3e\x3f\x3e\xaa\xb5\x09\x2f\x9e\xa9\x3a\xfe\xb5\x88\x21\x8e\xdd\x5c\x1c\xe9\x75\x58\x4d\xef\xed\xe3\xba\x6b\x3d\x47\x4d\xaf\x5e\x98\xc3\xbb\x67\x4b\x02\x61\xab\x33\x59\x1a\xd0\x2e\xdb\x60\xca\x74\x02\xbb\x73\x51\x29\x56\x4e\xb0\xfb\x17\xb8\xf7\x61\x04\x3c\x2c\xcb\x2e\x79\xc2\xce\x7f\x60\xb3\x4d\x1b\x6f\x1f\x37\xe5\xb1\x2d\x2b\x4d\x2b\xbd\x60\x42\x73\x9b\x32\xce\x32\x39\x1b\x4f\x22\xa0\x92\x31\xb6\x63\x6f\x7d\x60\xb9\x9f\xb8\xe2\x3c\x43\x41\x9b\xa6\x0d\x05\x6d\x6c\x1b\x0a\xda\x04\xb4\x83\x16\xb4\x79\x4a\xa1\x32\x43\x40\x0e\x81\x78\x4d\xbf\x90\x0d\xcc\x67\xd0\xea\xfc\x46\x25\x4d\xa5\xc2\x77\xb0\x56\xad\x87\x52\x69\x9a\xf3\xee\xfa\x37\x2f\x90\x98\x25\x5c\xa4\x5d\x9b\x19\xb7\x91\xd8\x63\x5b\x12\xb4\xcf\xac\x3d\xb7\xf6\xd2\xa1\x4e\x1f\x84\x99\x8b\xad\x47\x4e\xdb\x21\xa7\x87\xd3\xcd\xea\x8e\xe6\x4b\xf5\x63\x36\xc6\x39\x8c\x8b\xb4\xd9\xd2\x63\x8b\x9a\x3f\x13\xef\x9a\x97\xa7\xe4\x7f\x11\x3e\x33\xfb\x01\x3b\xf2\x02\xc5\xb5\x17\xaf\x52\x3c\xca\x79\xc4\x08\x65\xc7\x90\x0c\x1a\x2a\x55\x48\x6e\xc3\x47\xeb\xb2\x9b\x88\xb7\x9c\x7e\xd3\x6c\x6a\x41\x4b\x9a\x33\xcd\x4a\x0c\x53\xb3\x61\x71\x22\x84\xe1\x86\x18\xba\x6f\x0a\x26\xee\x34\x4d\xee\xf7\x5c\xce\x78\xe0\xe6\x07\x6e\x7e\xe0\xe6\xff\x89\xb9\xf9\xa3\x38\x6f\x39\x94\x67\xab\x35\x2d\x7d\xff\x42\x2e\x2c\x83\xfa\x42\x08\x4d\x37\xd3\xee\x2a\x49\xc5\x18\x68\xea\xfa\x5b\x6d\xce\xbc\x29\xeb\x87\x36\x19\x88\x86\xa9\xeb\x61\x02\x02\xc1\x6d\xda\x0f\xb3\x1c\x8e\xed\x2d\xf8\xf5\xf0\x7c\x0a\x82\x0c\xaf\xfb\x36\x31\xcd\xcd\x93\x29\xd7\x0d\x99\x54\x4c\x93\x82\x95\x39\xb7\x39\x54\xa5\x20\x89\x8d\x2b\x03\xa6\xd6\x30\xb0\xb6\xbb\x28\x96\x58\x10\x99\x68\x6a\x33\xff\x90\x29\xd3\x8f\x8c\x09\xf2\xea\xd5\xab\x57\x20\x19\xbd\xfa\xd7\x7f\xfd\x57\x02\xf9\xa8\x53\x96\xf0\x7c\xfd\x45\x78\xeb\x7f\x7d\xf1\x45\xc8\xa0\xff\x71\xf9\xee\x6b\x88\x43\x29\xb4\x22\x53\xa9\x17\x76\x6c\xd3\x45\xab\x7b\x35\x22\xff\xe7\xee\x9b\xf7\x4d\xfd\x8a\xf6\xaf\xa0\x51\xac\xb7\x28\x64\x64\x5f\xbd\xff\xea\xf7\xbf\xfb\x5d\xd0\x37\xbc\x84\x2c\xa0\x10\xf0\xdb\x04\x75\x15\x2e\x1c\x49\x48\xbd\x9e\xce\xd7\x72\x8f\xc1\x75\xbd\x72\x3e\x5f\xc0\x41\x70\xc0\xcd\xb3\x8c\x27\x1a\xe9\x24\x52\x28\x04\x09\x5b\xc4\x80\xda\xcc\x5c\x56\x1c\x0a\x32\xd6\xa5\x6c\x44\x32\x7e\xcf\xc8\x4c\x7d\x59\xca\xaa\x68\xf2\xe7\x95\x4c\x55\x19\xd6\xe3\x98\xba\x5c\x04\x0d\xdc\x29\x16\x9c\xb5\xf3\x10\xfe\xca\x81\xd6\xb6\xf8\x2b\x07\x1d\xaf\xc8\x5a\xa3\xba\x4c\xde\x18\xa1\xbb\xa0\xbc\x0e\x8b\x02\xcf\x50\x64\xa8\xda\x2c\x59\x12\x54\x9e\xb8\x29\x39\xe8\xa2\x66\x8b\x52\xfe\x1d\x81\x86\x0b\x97\x9a\xca\xea\x24\x94\x15\x51\x6d\xbe\x44\xd1\x18\xd9\x03\x46\x72\x79\x7f\x0d\x89\xb7\x19\x87\x9b\xb4\x57\xe4\x66\xe6\x07\xa6\x42\xe2\x5b\xae\xcc\x24\xa0\x52\xb0\x9d\x5b\xc0\x28\x1b\x66\x5f\xf7\x0b\x77\x43\x21\x84\x55\x62\xad\x7f\x0c\x38\x0e\x1a\x03\x48\x03\x4c\x9a\xba\xf4\x66\xcd\x28\x18\x4a\x69\xa3\x6d\xed\xbb\x6b\xf5\x0d\x83\xf3\xa2\xda\x08\x4c\xa6\x2b\x7b\x44\x18\xe3\x5c\x89\x8c\x29\x65\x23\x78\x73\x5a\xde\xb3\xb4\xc6\xcf\x13\x08\x8b\x55\x81\x59\xa6\x88\xcb\xcf\xcc\x1f\xd0\x8f\x23\xa7\xcb\x56\x86\x14\x33\x8d\xd3\xc9\xe4\x14\x51\x8b\x2c\x31\x24\x1b\xb1\x80\x79\xfe\x4c\x79\x54\x5b\x77\xeb\x1d\x2d\x14\x66\x82\x35\x62\x1c\x24\xb7\x93\x90\x62\xac\x89\x78\xa5\x76\x2f\x43\x70\x5f\x94\x70\x16\xae\xdd\xc2\x16\x92\x83\xda\xbd\x59\xec\xce\xe3\xe3\x5a\x9c\x7c\x18\x98\x91\x1a\xdb\xb6\xbc\xd4\x76\x8f\xed\x7d\x0b\x95\x70\xa2\x19\xec\x3c\x88\xb5\xd9\x30\xd5\x60\x69\x16\xc7\x68\x9b\x11\x83\xf8\x1b\x1b\x5a\xbf\xab\x4e\xd9\x6a\x7b\x16\xb6\x06\xdb\xf3\x31\x37\xd8\x6e\x66\xab\xd9\x07\x3c\xf4\xe6\x33\x9a\x8e\x0e\x85\xe4\x09\x6a\xda\x31\xb8\x15\x6c\x07\xe6\x59\xb0\xc5\x71\x2e\xd8\x62\xf8\x17\x6c\x61\x0e\x3a\xd8\xfa\x5e\x2e\xe7\xd0\x83\xdb\x63\xc9\x0c\x52\x92\x59\xbd\xf9\x98\xe5\xb3\xf0\x10\x4b\xc4\x9d\xb2\xe4\x0a\xaf\x15\x9d\x2a\x99\x55\x1a\x87\x88\xef\xc4\xa7\x79\x30\x49\x97\x36\x3a\x8c\xd0\xad\x76\xe7\x51\x4a\xe0\x44\x90\x3c\xc5\xf4\x75\x3c\x6f\xad\xa1\xae\xf0\x50\x57\x78\xa8\x2b\xbc\xda\x5e\x56\x5d\xe1\xba\xa0\xba\xda\x59\x3d\x5e\x96\xc4\xd0\x1b\x10\x6d\x5e\x52\xbd\x61\x6c\x89\xe2\x31\x3a\x39\xc5\xc9\xd9\x9b\x3a\x19\x88\xf3\x3e\xbf\x11\x9a\x95\x33\x9a\xb0\x73\x5f\x57\xc7\x8a\x05\xcb\x59\x69\x36\xc8\xbe\xe7\xb2\x5e\xd8\x7c\x67\x64\xba\x74\x57\x8f\xb0\x4f\x9a\x95\x66\x33\xdf\xdc\xdd\x90\xb4\xe4\x0f\xac\x54\xe4\xec\x2f\xcc\xc8\xd3\x58\x4c\x34\x28\xad\xcf\x7e\x23\x28\x61\x1a\xfb\xd2\x0e\x42\x67\x07\x51\x0c\x42\xcf\x8e\xac\x0b\x0f\xc3\x37\x7b\x89\x5b\x8f\xfb\xae\x7c\x25\x69\x08\xae\x7b\x23\x05\x70\x52\x80\x6c\x97\xb2\x2a\xd1\x7b\xa4\xae\xeb\x9c\xc8\xb2\x34\xdc\x1b\x0c\x4d\x15\x29\xd9\xdc\x88\xf3\x25\x96\xb8\x85\x37\xb2\xca\x3c\xd8\xeb\x0d\x3f\xb8\x33\x41\xed\x35\xb0\x23\x28\x2f\xa0\x37\xcb\x6b\x17\xa5\x7c\xe0\xa9\x63\xb5\x7d\x7a\xc5\x15\x29\xa8\xf2\x32\xb7\x50\xa5\x64\xc2\x41\x5d\xdb\x9c\x60\xc0\x48\xa8\xeb\x00\x96\xbd\xce\x49\xda\xca\xa7\xe0\x7b\x34\x48\xc8\x2e\x1f\xe0\x55\x19\x71\x24\x42\xa6\xec\xb6\x9a\x66\x5c\x2d\xee\x0e\x69\x55\xde\x34\x0e\x06\x13\xac\x79\x99\x6e\xb3\x2e\x07\xd9\xae\x85\xe2\xc0\x21\x1b\x7a\x6c\xd8\x79\x6e\x04\x4d\x09\xa7\xe5\xfa\xf7\xaf\x98\x04\x6e\x27\x63\x36\xaf\xdd\x9b\xbb\xdd\x31\xd5\xd8\xde\x37\x6b\xb1\xb9\x9a\xb0\x7e\x41\xca\xbe\x15\x45\xeb\x79\x42\xb3\xed\x75\xdb\xfc\xd6\x66\xd6\x1c\x99\x42\xc1\xc8\x65\x78\x42\x00\xe4\x06\x36\xdd\x1e\x71\xaf\x14\xa5\xcd\x59\x1d\x6c\xe1\x5f\xd9\x60\x45\x72\x89\x19\x68\x04\xd4\xf1\xc5\x97\xa0\x94\x83\xfb\xc0\xcb\x2f\x06\xa9\x72\xe1\x06\x0c\x96\xfa\x2d\x6d\xb0\xd4\xef\xda\x9c\xc1\x52\x3f\x58\xea\x37\xb6\xa3\x38\x9b\x35\xa9\x7e\xa9\x97\x93\xb5\x55\x9c\xb6\x66\x95\xc2\x99\xae\x8e\x20\xa3\x3d\x8a\x0e\xce\xe9\xe0\x52\xeb\x92\x4f\x2b\x7d\xa0\x7a\x79\x2b\x63\x80\x50\xc0\x94\x25\x9e\x63\xbb\x89\x89\x87\xb3\xad\x66\xb0\x26\x0e\x1e\xc9\x0d\xe6\x8a\x27\x35\xf3\x0a\x7c\x2b\x3e\x3c\x55\x24\x95\x49\x55\x57\x30\x86\xd3\x69\xbc\x3b\x43\x0b\x1c\x46\x91\xa2\xf8\xfa\x5f\xfe\x20\x9d\x57\x2b\x95\x8f\xc2\x20\xfc\xcb\xdb\x8e\x9c\x1f\xed\x7c\x1f\xcd\x57\xbe\xe0\xe6\x1e\x13\xf3\x9c\x4e\x65\xa5\xeb\x64\xc0\xff\x64\x3e\x17\x9b\x8c\x10\x5a\x1a\x02\xb3\xd3\xa7\xa2\x31\x2d\xf4\x1c\x63\x70\xe4\x18\x1c\x39\x06\x47\x8e\x6d\xad\x75\x8f\x6f\xd0\x47\xc3\xaf\x12\xdd\xc2\x5f\x2e\xaf\x72\xc8\xd6\x1d\xde\x34\x7e\xd5\x60\x5c\x94\xea\x56\xd3\x93\xac\x88\x9a\x78\xdb\x1b\xd3\x8c\xe7\x1e\xed\x50\x32\xb0\xb9\xcf\x6f\x46\x3f\x90\x71\x1c\x56\x17\xa4\x46\xc0\xd6\x0e\x60\x6f\x72\x0e\x60\xed\x77\xf4\x99\xf1\xdc\x73\x0a\x99\xbe\xc6\x32\xa0\x54\x08\x89\xec\x80\x1a\xd9\x1a\xe9\x23\x1b\x36\x05\xfc\x7a\x41\x13\x14\xcd\x2b\x9e\x02\x26\xa8\x19\x86\x80\xac\x63\xd8\x22\x4f\x80\x44\x9f\x02\x81\x93\x80\x05\x76\xd4\x1c\xf2\x5b\xec\x91\x98\xd6\xc8\x54\xe1\xdf\xac\x66\xa6\xc6\xef\xdd\x49\xa8\x64\xc1\x72\x0a\xff\x7c\xeb\x16\x60\xae\xb5\xe1\x77\x35\xc3\x5c\xa3\xac\xcc\x8d\xec\x39\x6a\xc5\x77\x9c\x3c\x84\xa5\xea\x74\x2d\x5a\x58\x21\x0e\x0c\xbb\xf3\xe5\xef\x58\xee\x6d\xcb\xca\x6a\x40\x10\xe8\x7b\x86\x95\x35\x57\x7c\xa3\x00\x71\xe1\xfe\x1c\x78\x69\x4f\x91\xae\xb0\x1d\xc3\x29\xa4\xaf\x33\xc8\xa8\xb6\xb8\xb4\x59\x9e\xe0\x81\x07\x67\x90\xc1\x19\xa4\xdd\x5e\xb8\x33\x88\x47\xf2\x1c\x06\xdd\xe0\xed\xe1\x1b\x89\x9c\xcb\xc7\x94\x39\xd9\xc2\xca\x2f\xce\x8f\xc3\x39\x71\xc8\xb2\xed\x85\x78\x3a\x99\x9c\xa2\x1f\x62\x23\xf0\x54\x7a\x36\xfe\x03\x61\x22\x91\xa9\xe9\xe7\x23\xf4\x5f\x2a\x0d\xec\x52\xa3\xfc\xf4\xe7\x92\xbb\xb1\x7c\x4f\x46\xe8\x3b\x8e\xae\x46\xa0\x3d\x97\xf4\xf6\xed\x53\x98\x8b\x08\xf4\xd5\x30\x1f\x75\xba\x5d\xbb\x15\x75\x61\x05\xcb\x85\xb8\xdf\x15\xc9\x78\xce\x6d\x21\x59\x73\xdf\x99\xd2\xa1\x2a\x43\x42\xce\xf0\xe3\x49\x52\x54\x23\xdb\xd1\x24\x67\xb9\x2c\x97\xa3\xba\x33\xf3\x63\xab\x77\xfb\x06\x96\xf8\x48\xaa\xb2\x64\x42\x67\x4b\x8f\xcd\x79\x59\x5c\x8e\xdb\xa9\x03\x32\x39\xf5\xe1\x84\x25\x3e\x6b\x5a\xfb\x46\x36\xf6\x72\xb0\x30\xd4\xab\xc5\x3a\xbe\x18\x3c\x3f\x6a\xbc\x09\xcc\x53\x26\x1e\xc8\x03\x2d\x55\xe8\x0d\x20\x7d\xf9\x9a\x94\x3f\x70\xd5\x55\x6a\x79\xc7\xe2\xee\x6a\xdd\x27\xd4\x28\xac\x74\x51\x69\x8b\xee\x1c\x88\xbb\xb2\x14\x35\x68\xaf\xb0\x6f\x5f\x74\xab\x80\x9b\x56\x50\xad\x59\x29\x5e\x93\xff\x77\xf6\x9f\xbf\xf9\x69\x7c\xfe\xe7\xb3\xb3\xef\x5f\x8d\xff\xed\x6f\xbf\x39\xfb\xcf\x09\xfc\xe3\xd7\xe7\x7f\x3e\xff\xc9\xfd\xf1\x9b\xf3\xf3\xb3\xb3\xef\xbf\x7a\xf7\xe5\xc7\xdb\xeb\xbf\xf1\xf3\x9f\xbe\x17\x55\x7e\x8f\x7f\xfd\x74\xf6\x3d\xbb\xfe\x5b\x60\x27\xe7\xe7\x7f\xfe\x55\xc4\x24\xa9\x58\x7e\x13\x8c\x53\xb0\x8d\x7b\xd1\x95\xf6\xb7\x91\x47\xbf\xc2\xfb\x71\xa1\xc7\xb2\x1c\x63\x27\xaf\x21\x31\x7b\x70\x57\xee\x68\xfb\xdf\x91\x86\x6a\x35\x25\x52\x1c\x7b\x7c\xe0\x4b\xf0\x34\x0e\xb8\xb7\x97\x1f\x58\xcb\xae\xf8\x5e\x33\x59\xb8\x3e\xdb\x11\x73\x9a\xe5\x85\x2c\x69\xb9\x24\xa9\x55\x6e\x2d\x77\xe6\x33\x3c\x70\xd5\x18\x98\x64\xca\x77\xc3\xf8\x01\x54\xc5\x39\x4b\x79\x95\x1f\x24\xcb\x21\xf4\xec\x6f\xfa\x23\x94\x5e\xb1\x85\x5d\x9c\xf7\x93\x7d\xcd\xd5\xef\xa2\xc9\x3d\x0a\x2a\xf5\xa9\x84\xe9\x0f\x5b\xe5\x31\x4e\x4e\x56\x8a\x82\x83\x6e\x1a\xfc\x80\x64\xca\x4e\x55\xfd\x2e\x0e\x1e\xa9\x24\x46\x8b\xae\x75\x94\x3d\xb3\x5d\x9d\x1b\x46\xf0\x1d\xf0\x0a\x47\xa8\x0c\x10\x04\x2d\x24\x32\x17\x1a\xff\x07\xfb\xda\x70\x45\x07\xc9\x78\xe0\x3a\xaf\x4b\x88\x4b\x10\xe6\x6c\x4e\xd1\x19\xc9\x64\xe2\xb9\xc4\xb5\x98\x01\x00\x87\x6b\x77\x89\xc3\x6d\x85\x06\x28\xcc\xb8\xc8\xeb\x81\x32\x34\x53\xe8\xe0\xc3\x13\xa8\xe6\x06\xa2\x21\x9c\x59\x04\x24\x7c\x84\x6a\x35\x9f\x78\x5e\xe5\xa4\x52\x66\xb6\x52\xb4\x7b\x69\x26\xfb\xe8\x8a\xd2\x41\x66\x48\x2e\xe0\xa3\x96\x68\x1c\xa2\xa2\x5c\x30\x72\x57\xef\x5f\xa3\x0e\x41\x6f\x02\x2b\xc9\xa9\x0a\x04\x09\x3b\x0f\xcb\x26\xcb\x19\xf8\x96\xd4\x1c\x9b\xaa\xeb\x9a\xf5\xb8\x54\x82\x67\xed\x5b\xe5\x0a\x29\xd5\xdb\x5b\x09\xeb\xc1\xf9\x92\x6e\xc0\x0b\xe6\x8d\x82\x39\xa2\x78\x3e\x28\x92\xfb\x79\x02\xcf\x53\xfb\xb3\xee\x95\x64\xd7\x4e\xb2\x2d\x9a\xed\x97\x54\x6a\x3b\xcc\x52\xe7\x4c\x59\xa3\x10\x6b\xe9\xee\x18\xe8\x63\xad\xd3\xb1\xa4\x3e\x59\x26\x36\x23\x26\x6f\x15\x8d\xc3\x41\x11\xbe\x21\xa6\x71\x6c\xfe\xe3\x74\x3f\xce\xfc\x38\x65\x33\xf4\xf0\xc2\x6f\x40\x76\x57\x5d\x71\x94\xa8\xd1\xca\x98\x86\xc0\x4c\x56\x97\x12\x44\xd7\xb3\x5c\x3e\x84\x14\x1c\xfe\x56\x59\x8b\x33\xef\x84\x28\x7a\xde\xca\x9a\xa0\x50\xc6\x16\x8c\xa5\x18\x19\x9a\x35\x0b\x28\x2b\xd1\x39\xfd\xe9\xb9\xf3\x45\x06\x84\x23\x8c\x98\x93\x39\x09\x0e\xf5\x4e\x25\x33\xa7\x02\x29\x45\x4b\x99\x13\x25\x68\xa1\x16\x52\x83\xee\x84\x16\x34\xe1\x3a\x20\xd8\x50\x97\x34\xb9\x87\xa2\xcc\x25\xb3\xb3\xed\x9a\x5a\x72\x6e\x63\x5a\x7c\x90\x68\x47\xc2\xea\x45\x29\xab\xf9\x02\x02\x33\xf1\xad\x24\xa3\x0a\x23\x70\xbb\xac\xec\x1b\x7b\xb7\x9a\x01\x45\xd2\xa5\xa0\x39\x4f\xea\xea\x57\xa5\x7c\xe0\x8a\x4b\x6b\xa5\x82\x51\xbb\x17\x4d\xc9\x6d\x5d\x9a\x08\x4d\x63\x6f\x32\xca\x73\x72\xa6\x18\x23\xd7\xee\x96\xe0\x2f\x77\x28\x21\xa0\xbe\x33\xc4\xc9\xcc\xb7\xaa\xd9\xb4\xde\x36\x95\x90\x79\xe2\x74\xb7\x9e\x1f\x03\x20\x95\x80\x49\x8b\x74\xf3\xb4\x03\xea\x01\x1b\x38\xde\xbc\x64\x59\x82\xd3\xa4\xab\x09\xc8\x44\x2a\x1b\x07\x99\x8e\x5e\x2f\x6f\x6f\x94\xaf\x58\xc0\xdb\x6c\xab\x3e\xc1\x0f\x99\x14\x73\x3f\x51\x73\x8d\x0b\x3a\x7a\x36\x24\x56\x40\xe5\xe6\x07\x9e\x56\x34\x43\xe2\x1a\xb2\xca\x37\x77\x37\x38\x32\x9f\x2f\xf4\xf8\x91\x81\x2e\x18\xd9\xa0\x06\xfd\xb9\xf9\xf2\x35\xd7\x75\xae\x80\x0e\x07\x14\x6d\xb6\xba\x69\x5c\xf3\x23\x5d\x42\xf1\x04\xeb\x02\xdd\x72\xf8\x71\xe5\x78\x70\x80\x99\xec\x22\x34\xb9\x23\xe1\x16\x88\xba\xd7\x7d\x09\x58\x25\xa1\x02\x18\x72\xd0\xea\x1b\x90\x02\xc4\xb1\xbe\xe8\xee\x2b\xe8\xd5\xed\xaa\x3f\x42\xa6\x44\x51\x03\xae\x9d\x72\xdb\x01\x24\xaa\x87\x06\x66\x3f\xb2\xbc\xc8\xa8\x3e\x88\x13\xce\x5f\x3d\xb3\x83\x67\x13\x37\x78\x8c\x8a\x74\x4c\x33\x73\x59\x6e\xbf\x7b\x63\x23\xa0\x11\xf7\x44\x7a\xdb\x7d\x74\x84\x48\xd4\xc5\x97\x0d\x2b\xbe\x11\xed\x40\x42\xe2\x29\x4b\x81\x88\xd8\xb9\x85\xf9\x4a\xcb\x47\xc1\x4a\x07\x7c\xb7\xdf\xbd\x19\x11\x3e\x61\x13\xf7\x57\xdd\x99\x23\x91\x5a\xce\x31\xa0\xc8\xc5\x2c\x86\xd8\xd7\x65\x3a\xc1\xe5\xf8\x3a\x7e\xbf\xf7\x1f\xfe\x68\x16\x6a\x7e\xfd\xd3\xf8\x8f\x5e\x49\xc5\x3f\x81\x2f\x69\x90\xcb\xee\x0f\x2b\xdf\xf9\xa1\x27\x40\xf7\xcc\x5f\x3f\xdc\xda\x3a\xc7\xb6\x0a\xf2\x0f\x81\x8e\x15\x84\x30\xa1\xcb\xe5\x84\xdc\x4a\xf0\xc5\xe3\x29\xde\x59\x98\x7f\xc9\xfe\xee\x4c\x43\x70\x5c\xb5\x16\x3d\xa1\x9a\x09\xe0\x4c\x76\x96\x0c\x6e\x9a\x4d\x09\x01\x03\x00\x76\xa2\xb0\x4b\x67\xa0\x7e\xc5\xfc\x48\x23\xa2\xa5\x04\x7c\x19\x80\xce\x4d\xbb\x14\x84\x7d\xe2\x0a\x52\x02\xe2\x96\xc3\xb9\x51\x1b\x1a\xe3\xb8\x39\x33\xae\x01\x85\x3a\x91\x64\x21\x43\x1c\x38\x60\x03\x7e\x2d\xa4\xfe\x75\x7d\x1b\x9c\x5b\x29\xb0\x6d\x92\xd0\x07\xc9\x5d\x55\x6e\x83\x79\x04\x58\x5a\x82\x52\x8f\xd8\x03\x9d\x2e\x49\xce\x95\xa6\xf7\x6c\x42\xee\x0c\x4f\xe7\x7b\x9a\xe0\x31\x0b\x02\x35\xfa\x58\x4a\x2a\xa1\x79\x16\x28\xd6\xd5\x73\x81\x8d\xf1\xf8\x3d\x48\x36\x52\x25\x86\x2f\x29\x4a\x36\x76\xfc\x25\xbe\x15\xa4\x7c\xb1\xd5\x46\xdd\x9e\x34\x7b\x3a\xaa\x61\x7f\x41\x51\x37\x52\xa4\xd0\xb9\xf5\x58\x0f\xbe\xb1\x6b\x51\x25\x66\x37\xa4\x48\x1a\xf6\x11\x8e\x5d\x4d\xc8\x7b\xe0\x09\xb3\x10\x28\x47\xcf\x31\x54\x06\x59\x53\x9b\x60\x09\x53\x8a\x96\x4b\x74\xe6\xe7\x75\x3d\x6e\xeb\xd1\x6e\x78\xe6\x90\x2d\xa1\x02\x6b\x9f\x97\x2c\x91\x42\xe9\xb2\x4a\xe0\x1c\x29\x99\x96\xf2\x9e\x89\x26\x1c\x2b\x04\xa8\xdb\xa1\x07\x8d\x83\xb3\xe1\x7d\x84\x24\xc9\x82\x8a\x39\xab\xb3\xc2\x90\x9c\xa6\x00\x46\x5f\xd5\x62\x56\xc8\x5e\xc8\xfa\xa8\xe8\xcc\xc8\x36\x5c\xc3\x99\x4d\x0d\x5b\xe6\xac\x92\x41\xb3\xfd\x50\x87\x43\xe4\x9e\x0d\x53\xf0\x6c\xcf\xfe\xbc\x31\x26\xab\x31\x70\xe1\xdd\xf2\x7b\x94\x89\x2a\x67\x9a\xa6\x54\xd3\x43\x46\xac\xbc\xa3\x75\xe9\x77\xeb\x12\x05\xa7\xee\xb9\x4a\x59\x56\xcb\x09\x87\xb2\xe0\x7e\xb2\x9f\xdb\xef\xde\x04\x8e\x84\x51\x0c\xe6\xa0\x21\x9d\xaa\x36\x37\xc9\x5a\xe9\x31\x8c\x03\x64\x21\x17\x95\x62\x26\xe1\xc6\x44\x8a\xc0\x52\x92\x56\x11\x4a\xff\x86\xae\xc4\x44\x38\x04\x1b\x35\xcd\x79\x1f\xf2\x60\x3e\x36\xde\x42\x49\x3b\xc0\x60\xa3\x44\x81\x86\x78\x26\x34\x2f\x99\x97\xf2\x29\x70\x30\x7b\xaa\x95\xc0\xab\xde\x3e\x5f\x04\x80\x39\xd3\xaa\xf1\x4c\x46\x0e\x20\xb8\x7f\x6d\x79\x47\x9c\x25\xb0\xb3\xee\xcc\xad\x1a\x6f\xe3\xa2\x02\x7b\x47\xb8\x51\xd2\x52\x7a\xc3\xe1\x1c\xe4\xc8\xfb\x98\x98\x69\x62\xf0\xfd\x3b\x99\xc6\x58\xa5\xfb\x3a\x21\xb4\x86\x6b\x02\xf5\x30\x3e\x54\x81\x0e\x1a\x5f\x00\xbf\x18\xd5\x4a\x78\x85\x54\x6a\x41\x1f\x22\xd2\xeb\xf4\x56\x7c\x36\xa2\xce\xb8\xae\x0f\x0c\x13\x1b\xc3\xc4\xc6\x5f\x04\x4f\x21\xc6\x9f\xd7\xb5\x60\xbf\xde\xf6\x20\x91\xc6\xd7\x27\x25\x07\x71\xcd\xa0\xff\xbb\x48\xc3\x6b\x7f\xe8\x69\x46\xb3\xdc\x80\xf5\xa5\xaa\xfd\xf0\x6c\x16\x04\xc6\x0d\xda\x8e\xd9\xc1\x5f\xb7\x18\x67\x2b\x6b\xd5\x9a\x33\x0c\x2c\x3d\x73\xaa\xb4\x89\x05\x13\x97\xbb\xb4\xfd\xfa\x79\xef\x61\x81\xf9\xdf\xac\xcb\x89\xe8\xf3\xc6\xba\x15\x3b\x31\xd4\x88\x7b\x25\x98\xd2\x5c\x7e\x83\x26\x54\x0f\x36\xd0\x2a\xd1\x56\xfc\x3f\xa1\x50\x29\xda\xc1\x43\x72\xd3\xb9\xe6\xf4\xb4\xb5\x84\x2c\xd8\x63\xcd\xd9\x53\x85\x45\x0b\x9c\xdb\x11\x68\x9a\x9d\xf3\xed\xa6\x91\x63\xae\xfa\x5f\x9d\x36\xf7\x52\x2c\x71\xeb\xae\x3c\x70\x41\xa5\x29\x99\x9b\x49\x19\xe9\x59\xd0\x69\x66\x58\x34\x0f\xa4\xea\x19\xad\xf0\x12\x5a\x7a\x6f\x7d\x60\xb3\x98\xed\x00\x75\xb3\xff\x71\xd8\x28\xc8\x8c\xb4\x3e\x9c\x34\x2e\xe0\x56\x7e\x8b\xca\xbd\xef\x9a\x85\x8e\x56\x67\x6d\xb7\xcb\x95\x71\xfd\x5c\x88\x1b\xe7\x1a\x3e\x7a\x0f\xb7\xac\x3e\x8e\x59\x90\x51\x8f\x77\xaa\xb3\xda\x1f\x04\x8a\xec\xd8\xfa\x78\x72\x81\xc3\x3a\x78\x84\xc6\xb9\xe5\xf4\xc7\x96\x04\x75\xb1\x30\xa6\xd3\x8f\xcc\xe1\x0f\xc7\xa9\xd5\x8e\x2e\x53\x66\xf0\x4f\x93\x28\x34\x06\xa2\x08\x42\x95\x3f\xd2\x06\x5f\xde\xe6\x7a\x7f\x05\x15\x6d\xad\x85\xdf\x25\xe7\x30\x64\xfa\xf2\xf6\x06\xe7\x17\x3b\xfa\x5b\xc0\x6f\x4b\xcb\xac\xeb\x05\x2f\xd3\x71\x41\x4b\xbd\x44\x7d\xe7\xa8\x35\xb7\x3a\xbf\x40\xd4\x20\x3d\xdd\x9b\xc2\x6a\x56\xfb\xad\x75\xdc\xb0\x55\xce\x86\x6f\x5d\x39\xb6\x9e\xd9\x31\xd6\x13\x9e\x9f\x60\xe3\x7a\xfc\x2a\xac\x4e\x37\xf8\x8c\xeb\x79\x7a\xe0\x01\x69\xe3\xca\xe3\xf2\x40\x06\x39\xab\xb6\xf3\x23\x32\x2a\x20\xfd\x58\x1d\xb2\xf4\x63\x64\x6b\x6e\x1a\xb4\x4f\xa6\xa7\x11\xe1\x33\x43\xa4\xa5\x18\x83\x91\x3f\x62\x22\x8d\x49\xd3\xf2\xee\x13\xeb\x67\x8f\xfa\x22\xb8\x90\xde\x7c\xbc\x41\x9a\x9b\x4e\xce\x84\x0c\x51\x27\xb9\x06\x78\x02\x7b\x3d\xc7\x10\x88\x2d\xe6\xab\x69\x4c\x12\x52\xd2\x70\x0f\xbe\x9e\xc9\xc3\x60\x8e\x81\xe1\x22\x35\x40\x0a\x24\x11\x34\x50\xaa\x4a\x12\xc8\x70\x30\xf3\x2f\x69\x0c\xeb\xde\xc2\x8d\x76\xc3\x72\xaa\x93\x05\x53\x44\x49\xc8\xb4\xaf\x34\xcd\x32\x96\xd6\xc6\x4d\x3c\x50\x09\x7c\x9d\x35\x7c\x46\x8c\xe8\x31\x86\x31\x1b\xe4\xe9\xe0\xac\x1a\xbc\xc8\xa8\x55\x3f\xce\x2a\x91\xa0\xeb\x30\xd7\xcb\xda\xb2\xb5\xca\xac\x83\xde\x46\x81\xa6\x35\x86\xa1\x9c\xa1\xe9\xca\xd3\xc1\xd4\x80\x04\xa4\x65\x89\xc4\xc4\x48\x86\x8d\x31\xca\x66\x91\x36\x94\xa1\x4e\x44\x12\x05\x67\x5e\xca\x92\x11\x72\x63\x3e\xcb\x24\x4e\x7d\xdf\x20\x2e\xfa\x33\x88\xfe\xda\xce\xbc\x2d\x5b\x63\x1c\xcf\x6b\x86\x51\xb1\xba\x16\xbc\x8a\xe1\x5a\x88\x75\x86\xa2\x95\x96\x39\xd5\x3c\x01\x05\x2d\x9f\x79\x96\xde\xbc\x2e\x75\x59\xfb\x3a\x21\x51\x05\xa2\x6e\x77\x3d\xfa\x5a\x6d\x66\x36\x9f\xb4\x6d\xde\x4e\xd9\xd3\x68\x6f\x8a\x5b\xaa\xc7\x6a\x44\xcf\xfd\xa3\xcb\x20\x43\xf4\xa2\x64\x8c\xf0\xdc\x88\x49\x54\x68\x92\xf2\x59\x9d\x39\xc8\x59\xee\x77\x9d\x5d\x9c\x24\xfa\x57\xf0\x0a\xf1\xfa\x43\x5d\x77\x96\xc9\x47\x45\xf4\xa3\xac\xd5\x6e\x8d\x39\xd7\x66\x77\x19\xb5\x87\x8d\xa2\xa0\xb6\x7f\x83\xb6\xcd\x49\x7b\x98\x76\x64\x6e\xed\x23\xcb\x32\xf3\xff\x5d\xf8\x36\x22\xe0\x6b\xe3\x3a\xf9\x5c\x60\x3e\x0e\xae\x9c\x9a\xd5\x86\x95\x9d\xa5\xa5\x2c\x0a\x6b\x08\xca\xcf\x9f\xb2\x4e\xf0\x70\x2a\x1f\x98\x02\x6f\x3d\x17\xd4\x66\x8e\x6c\xce\x04\x2b\xa9\x06\x5b\xb8\xcd\xaa\x0e\xc4\x71\x75\x3a\xe1\x6a\x4b\x6c\xbd\xe4\xb4\x0e\x30\x40\xd7\x85\xcd\xc7\xee\xde\xb1\xbf\x46\xcd\x95\x0b\x84\x00\x77\x63\xa3\x8e\x14\x72\x25\x9e\x93\x6f\x15\x1e\x54\x4d\x2f\xea\x60\xc1\x20\xe9\xdc\xe6\x7b\x42\x01\x3d\x6a\xf8\xcb\xac\x58\x78\xe3\xfb\x52\x6e\x1d\x71\xdd\xde\xa9\xd6\xcc\xde\x94\x52\xa9\xf7\xee\x93\x83\x4c\x72\x90\x80\x07\x09\x78\x90\x80\x77\xb7\x41\x02\x3e\xf6\x7a\x00\xdf\x1d\xf3\x4e\xbe\xf7\x19\xc2\x36\xa2\xde\xdb\x7e\x10\xf2\x5e\x6a\xeb\xf0\x02\xfc\x3b\xdd\xaa\xf4\xa4\x80\xd3\x1f\xe9\x72\x22\x98\xb6\x59\xf3\x9c\x6e\xff\x83\x1b\xfd\xcb\xd2\x70\x7e\x56\x40\xf3\x6e\x91\xbb\xc0\x2e\x9d\xa2\x37\x8a\x96\x48\x8a\x1b\xff\x1b\x78\x7e\xaa\xac\x4f\x87\xf9\x1d\x62\xee\x49\xab\x4c\xcf\x84\xdc\x59\x8f\xc1\x95\xc1\xd7\x33\x86\xa5\x4c\x53\x1e\x96\x91\xd3\x6f\x8e\x52\x7e\xdc\x42\xa3\x8f\x40\x09\x49\x3f\x90\xad\x23\x38\x8f\xa1\x6a\x69\x22\xa1\x3d\xc7\x78\x3f\xb8\xa4\x79\xe1\xe9\x96\xca\x9b\x19\xf9\xc0\x12\xf9\xc0\x4a\xdc\xef\xeb\x4f\x05\x15\x46\x4c\x7f\x4b\x79\x66\x76\xdb\xed\x7a\x63\xbd\x80\xba\xda\x6d\xb7\x04\xcf\x08\x56\x5f\x23\x7b\xb4\x06\x72\x62\x98\xc1\x3a\xf5\x9d\xe9\xd9\x3a\xeb\x16\x25\x7b\xe0\xb2\x52\x2e\xac\xa6\xd2\x48\xc7\x94\xb6\xb2\xe9\x82\xcf\x17\xee\x65\xe7\x6d\x0e\x3e\x40\x65\x5a\x5f\x95\x88\x39\x28\x4d\x75\xa5\xda\xf9\x72\x12\x70\x27\x78\x16\x1b\x70\x7d\xde\x87\x65\xf8\xfa\x31\x57\x18\x86\x74\x4c\x34\xfe\x35\x06\x3e\x61\x27\x53\x7b\x0b\x5c\xb4\x56\x13\x6d\x96\xc8\xbc\xa8\x34\xf3\x6e\x8b\x85\xd6\x58\xb4\x15\x79\x90\xad\xf4\x97\x17\x39\x15\x74\xce\xc6\xf5\x24\xc6\x4d\xa0\xd6\x45\x0f\xac\x15\x79\xa4\xe4\x09\xf9\x17\xfd\xf6\x82\x03\xac\x56\x16\x1b\x1f\x80\x4e\x9e\x18\x84\x4e\x9e\x12\x88\x4e\xf6\x19\x8c\x4e\xea\x8c\x16\xc7\xbc\x8e\x1f\xec\x98\xab\x17\xd2\x12\xab\x5d\x17\xb2\x9f\x48\x60\x89\x96\x1d\x95\x2b\x22\x73\xae\x35\x73\xbe\xcc\xf5\x05\x1b\x11\xae\x5b\x09\x17\x2c\xe2\x00\xa5\x39\xfa\x23\xb3\x4f\x75\xb5\xf9\x86\x31\x8b\x9c\x0c\x08\x3f\x8f\x5c\x21\xe3\x25\x08\xcf\x0b\x2c\xd6\x03\x08\x60\x6c\xc3\x25\x9d\x6a\xb8\x9e\x77\x02\xbe\x84\x84\x7d\x02\x45\x3e\x4e\x6d\xc0\x4c\x03\x66\x5a\x69\x3f\x07\xcc\x84\xc9\x2c\x62\x72\xad\xb4\x30\x92\xfb\xdc\xa6\xba\xa4\x53\x96\x91\x1f\x2b\x56\x2e\x89\x61\x5b\x9b\x70\x2f\x28\x92\xaf\x78\x8a\x71\x4d\xce\x6a\x76\x60\x2d\x59\x3f\xa6\x09\x2c\x6d\xd7\x9f\x0c\x77\x0f\xa9\xdb\x9e\x80\xaf\x57\xbb\x6a\x27\x04\xc5\xdd\xaa\x77\xd0\xe7\xc9\xd1\xe9\xd4\x7f\x02\x6c\xf7\xe5\xfb\xab\x7e\x02\x55\x9c\xb3\x21\xe9\xe3\x70\xb8\xb6\xf8\x68\x62\x45\xc8\xe5\x8e\x3d\xc1\xbd\xab\x7f\x01\x2a\x51\xbb\x8b\xd6\x3a\x7b\x72\xcf\x96\x23\xeb\x0e\x4e\xcc\xe9\x53\xf7\x72\xf4\x64\x30\x32\xa4\xa9\x64\x69\x3a\x0d\x4d\xc2\xdd\x6e\xbd\x91\x70\x3f\x45\x2f\xb6\xf0\x12\xa2\xed\xaf\xdc\xa6\xc5\xe2\xfa\xde\x54\x22\xaa\xd4\xa8\xdf\xb6\x95\x1d\x45\x18\x82\x1a\x81\x2e\x45\x42\x0d\x36\x90\x7c\x02\x10\x52\xec\x21\x92\xfe\x0a\x35\x6c\x6e\x63\x9f\xbc\xd4\x1e\x17\xcb\x1f\xbf\x1d\xd2\x7f\xcf\x96\xa7\xca\xe6\xbe\x93\x42\x2d\x78\x81\x65\x71\x15\x03\x1c\xd5\x0f\xe0\xb1\x7d\x07\xae\xed\x6e\x58\xc4\x60\x37\x62\x44\xde\x4b\x6d\xfe\x77\x0d\xc1\x49\x70\xad\xae\x24\x53\xef\xa5\x86\x27\x47\x3f\x17\x5c\xe2\x73\x9d\x8a\xb5\x66\x72\xb0\x30\x02\x9a\xc6\xe4\x3c\x10\xad\x6f\x77\xdf\x79\x68\xd6\x27\xc8\x15\xb9\x11\x44\x96\x76\x2b\x7b\x0d\xac\x5d\x61\x6d\x65\x87\x75\xd6\x87\xc6\xa8\xbf\x69\x5c\x7b\x6a\xb2\x6c\x1d\xda\x9e\xa7\x60\x87\x07\x5d\x24\xfe\x02\xda\x55\xf0\x2e\x71\x21\x35\x58\xca\x99\x6a\x36\x8f\x72\x75\x69\x5a\xce\xca\x39\x24\x7b\x4c\x22\x8a\x80\x7a\x93\xef\x49\x58\xb1\xf5\x22\xaf\xfe\xc0\x3d\x81\x7d\x4f\x3e\xfe\x7b\xee\x0a\xf8\xa4\xaf\x21\x94\xeb\x98\xd2\xb1\x37\x2c\x72\x17\x39\x2d\xcc\xed\xfb\x6f\xc3\x44\x00\x60\xfe\x0f\xd4\xd1\x57\x13\x72\x49\x14\x17\xf3\x8c\xb5\x7e\xb3\x6a\x7e\xaf\x9b\xe8\x09\x80\xf5\xcd\xd0\xf8\x07\x9a\x31\x8c\x18\xa5\xa2\xae\x28\x2b\x67\x6b\x2c\xe4\xc8\x16\xd6\x37\xe4\xad\x76\x4b\x3b\xb9\x67\xcb\x93\x51\xa4\x22\x95\xf8\x34\xc1\x74\x72\x23\x4e\x9a\xcc\xb4\xad\x7b\x59\xf3\x59\xe0\x6f\x70\x02\xbf\x9d\xec\x9b\x47\x7d\x26\x21\xf5\xd9\xdc\x44\xad\x52\xf9\x4d\x46\xd1\xb0\x72\x0c\xf3\xc5\xea\x98\x9b\xca\x33\xde\x79\xef\x34\x26\x2d\x1b\xbf\xfc\x8c\x9a\x76\xc8\x0b\x13\x1d\x66\x15\x75\xb0\xab\xd5\x80\x8e\x7a\x36\x5b\x07\xf7\xc2\xad\xeb\xd4\xe2\xe6\x2c\xbe\xdb\xf4\x81\x17\x6d\xce\x55\xfc\x71\xdd\xcc\x56\x7d\x14\xbc\x94\x27\x7e\x14\x8f\x2c\x6d\xdc\xfa\x9a\x0f\x31\xd4\x8a\x6c\x0a\x2a\x85\x16\x95\x6d\x5a\xe3\xfe\x50\x32\x55\x48\xf4\xaf\xdd\xb8\x58\xcb\x22\x2c\xa8\x02\x9f\xac\x99\x35\xb7\x16\x55\x59\x48\x65\x0b\xfd\xad\x82\x7c\x64\xe4\x92\x0d\x27\x73\x41\xa6\x18\x07\x5e\xdf\x04\x73\x7f\xea\xf4\xd4\x97\x2b\xa9\x09\xd1\x20\xe6\x25\x6b\x13\x72\xf3\x32\x22\x66\xe4\x1c\x3e\x51\x8e\xa9\x13\x64\xe1\x64\x30\x3a\xff\x14\x5d\x4d\x3c\xf3\x9f\xe1\xf6\xb5\xef\x7d\xa5\x65\x7b\xa6\x90\x34\x00\x73\xc8\x45\xe4\x1c\x27\x08\x2f\x95\x68\xdc\x58\x1c\xf5\xd8\xec\x12\x08\x29\xea\xa6\xb2\x12\x16\xb4\x5c\x72\xbb\x7d\x6d\x8a\x59\xa5\xcb\xb3\x50\x4f\xc0\x82\xa6\x17\xe0\xc6\x67\x66\xad\x36\x37\x42\xdc\x5a\x5b\xfe\x41\x60\x9d\x2f\x6d\x39\xc2\xe5\xe6\xfb\x0b\x45\xef\x08\x2a\x93\x0d\x9f\x8c\xa7\xb0\x79\x7b\xec\x32\x62\xd0\x39\x7a\xb8\x52\x72\xcb\xf0\x96\x28\x4d\x35\x1b\x61\xb5\xdb\x59\xe6\x95\x03\x62\x24\x97\x29\x9f\x59\x3f\xbb\x3b\xcf\x86\x3a\xc2\x84\x19\x36\xdb\x85\x9f\x0d\x3c\x62\x22\xf1\x9b\xf9\xa4\xf4\x83\xe3\x06\xbf\x8c\x81\x2c\xb0\x28\xb5\xf8\xaa\x57\xe0\x66\x8f\x87\xcd\xe8\x75\x7f\x2e\x7f\x3d\x28\x53\x58\x41\x31\xd7\x9e\x4a\x8a\xa0\xba\x82\xcb\xb8\xd7\xca\x1d\xdb\xc4\x79\x3c\x99\x3f\xf8\x0e\x90\xa4\x9c\x91\xb7\x4d\x15\x60\xae\xc0\x50\xc3\x5d\x3e\x3e\x73\x7d\xb8\x48\xb2\xca\x3a\x0c\x20\xb6\x33\x58\xe7\x08\x7b\xfe\x04\xf2\xdf\x74\xe0\xf8\x2c\x17\x2d\xb2\x96\xba\x65\x15\x23\x40\x88\x42\x0d\x9d\x91\xbb\x1a\xb8\xd6\x59\x47\x32\x88\xd6\x5a\x66\x49\x5b\x6f\xf4\x96\x4f\x4b\x46\xde\x2c\xa8\x10\x2c\xf3\xd2\x63\x5b\xe3\x1d\xd5\x9a\x26\x0b\xc4\x8d\x94\x98\x9b\x9d\x31\x43\x99\x16\x52\x69\x92\xd3\x64\xc1\x45\x9d\x3b\x55\xd4\xc9\xd8\x9b\x3c\x36\x47\xcf\x1a\x76\xf0\xba\xdd\x16\x02\xfc\x62\xd7\xad\x72\xde\x01\x3d\xd5\x39\x90\xd7\x7a\x69\xca\x44\xda\x7b\x08\xfb\x8c\xd2\x1d\xd0\x05\x78\x37\x64\x8c\xed\x45\xc5\xc9\x4d\x5e\x1b\x64\xb9\xf0\x48\x1f\xb3\x1f\x18\xc2\xea\x31\x03\x41\x09\xce\xa0\x8e\xec\x42\x3e\x92\x54\x92\x47\x06\xce\x44\x86\x83\x03\x57\x7b\xe5\x38\x41\x6f\xb5\x10\x37\x96\xc8\xbc\x28\x65\xce\x6b\xa7\x6e\x0b\x50\x9d\x03\x46\x20\x81\xac\x0a\xa8\x21\xd5\xce\x16\x9f\x55\xc2\x9c\x72\x53\x15\xe8\xed\x1b\xa2\x69\x39\x67\xda\xf4\x46\x44\x95\x4f\x59\xd9\x9d\x36\xfe\x70\x85\xec\x8e\x52\x77\xb6\xb5\x03\x1d\xe5\x62\xc9\x07\xf7\x15\xc4\xd5\x00\x03\x34\x93\x61\xac\x07\x3a\x43\xba\x62\xb7\x58\xea\xd0\x00\xcc\x77\x96\x76\x55\x22\x84\x21\x89\xa9\x47\x8b\x67\xf9\xd7\xbf\xbe\x8f\x2d\x06\x78\xda\x7c\xb9\x0d\x40\x1e\x65\x99\xa5\x8f\x3c\xb5\x7e\xaf\xe4\xcc\xbc\x7c\x1e\x0a\x2c\x7b\xae\x0d\xd8\x3f\x75\x71\xac\x12\xf0\xf1\x91\xa7\x07\xa9\xeb\x0b\x1d\xb7\x77\xda\xc9\xa8\x66\xa7\x09\x6c\x35\x4f\x99\xd0\x06\x57\x95\x8a\x9c\xc1\x17\x21\x49\x35\xae\x39\x66\x3f\x84\x11\xa0\xfa\x50\x3e\xe5\xa2\xc9\xe0\xd9\x9c\xb5\xa1\x6f\xe6\xe6\x3b\xb5\xb6\x62\x1a\x53\xa8\x41\xea\x04\xa9\x17\x44\xf1\xbc\xca\x34\x15\x4c\x56\x2a\x0b\x88\x44\xfb\x8c\x8f\x7b\x96\xb1\x4f\x78\x37\xf7\x99\xa8\xba\xe9\xb5\xcd\x9e\x40\xe0\x56\x93\xfc\x77\x95\x3f\xe9\xe8\xb5\x89\x87\x4d\x2f\x6a\x4e\xa6\x4e\x60\xc8\x3e\xb1\xc4\x26\x2e\x29\xb2\x6a\xce\x3b\x92\x75\x05\x33\x2b\xa1\xb6\xde\xb1\xd5\xc7\xec\x89\xf3\xc1\xce\x22\x2f\x61\x93\x04\x77\x55\x7d\x68\x7f\xb1\x35\x1f\xea\xfa\x01\xa1\x49\x4f\x23\x80\x71\x60\xd9\xb0\xed\x60\xd9\xfc\x12\x02\xde\x04\x52\x56\x30\x91\x42\x51\xc2\xb7\xcd\x05\xc2\x5d\xda\xeb\x11\xd9\x02\x7a\xb1\xf4\xd2\xd5\xdd\x6b\x11\x4b\x4f\x4e\x5f\xc8\x2c\x55\x84\x7d\xd2\x25\x35\xe8\x37\x37\x88\xb6\xfe\x66\x46\xa8\x58\x06\x54\x3f\x7d\x49\x85\xd2\xc9\xb3\x70\x67\xe9\xcf\x89\x3b\x53\x2c\x29\x99\x0e\x8a\xac\xee\x51\x3e\xc5\x75\xde\xde\xc0\xd6\xe3\x35\x99\x1e\x7f\x75\xf1\x41\x4d\x8d\xe4\xa0\xf1\x84\xe2\x50\x8c\x70\xa5\xf2\x72\x41\x95\xaa\xc5\x64\x20\x3e\xf6\xda\xaa\x56\xaa\x8d\x80\x21\x50\x01\xcc\x67\x44\xc8\x95\x99\xfa\x91\x50\xb5\x0f\x40\xeb\x95\x80\xee\x6b\x93\x61\x8e\x05\x19\xa8\x80\x9c\x02\xd8\xcd\x08\x02\xad\xf1\xdf\x68\x35\x34\xeb\xf2\x14\x00\xb0\xb2\x90\x7d\xb2\x6b\xdf\xef\x65\x8f\xf3\x65\x0a\x0f\xff\xeb\xa7\x90\x7b\xef\x11\x57\x17\x51\x16\xaa\x0b\x6a\x67\xc9\x65\x50\xc1\x94\x3f\x30\x48\xc2\xeb\x32\xd2\x1a\x86\x34\xad\x50\x99\xe9\xf2\x62\xb4\xb3\x5d\x84\x47\xb7\x7b\x46\x87\xc6\x8d\xe3\x46\x28\x4d\x21\x31\x02\xac\xc2\x50\x55\x43\x00\x6d\xba\x63\x0b\x88\x68\x2c\x71\xe9\x15\x82\x87\xcb\x0d\xd1\x4c\x58\x69\x60\x2d\x5b\x92\xc7\x52\x86\x7b\x95\xa2\xf2\xe1\x32\x4d\x6d\x8c\xac\x4d\x67\x8c\x99\x37\x26\x5e\x31\xe9\x11\x84\xac\x8e\x48\xc5\xd3\x3f\x07\xf6\x1d\xa9\xde\x96\x0f\xac\x7c\xe0\xec\xf1\xc2\x86\x1a\x8e\xcd\xe6\x8c\x6d\xb4\xfe\x05\x88\x84\x17\xbf\x84\xff\x45\xad\xed\xaa\x94\x05\xf9\xc1\x0c\x3c\xad\x78\x96\xb2\xf2\xb5\x45\xf9\x3f\xd8\xd4\xb6\xb5\x51\x64\x3c\x67\x02\x6c\x15\xe2\x54\x43\x71\x0f\xc8\x75\x6c\x67\x3e\xe7\x7a\x51\x4d\x27\x89\xcc\xbd\x45\x8c\x15\x9f\xab\x0b\xaf\xef\x0b\xae\x54\xc5\xd4\xc5\xbf\xfc\xe1\xdf\x7e\x1f\x93\xcb\x34\x42\x27\x6b\x67\xff\x9a\x9c\x74\x57\x67\xec\x6b\xa2\x9f\x41\x1a\xf1\x98\x02\x78\xf6\x8b\x15\xfd\xa8\x7d\x68\x05\x90\x10\x7d\xa8\xc5\xe0\x1e\x73\x66\xae\xbc\xeb\xc8\x9e\x15\x51\x06\x52\x9a\x48\xd8\x4a\x74\x92\x94\x03\x68\x4b\x53\xaa\xa9\x62\x3a\x4c\x37\x1e\x8f\xf6\xbc\xee\x0d\xde\xf2\x31\xa0\xfd\x09\xcc\xba\x0c\x92\x07\xb9\x94\xd3\x64\xfc\x27\x2b\x88\x88\xd6\x9b\x46\x04\xb1\x9b\x18\x42\x51\x16\xae\x64\x98\x73\x58\xc7\x51\x52\x73\xb8\x49\x50\xda\xfa\x08\xb0\xb6\x73\xfc\xf6\xdb\x9b\xab\x58\x01\xac\xf9\xd2\xc9\x29\xf0\xef\xf6\x36\x59\x90\x02\xc3\x2b\xff\xb1\xf2\x55\x1e\x50\x39\xa5\x86\x2e\xfb\xfe\xbe\xd6\x36\x4f\x58\x63\xd1\xb8\xe2\xea\x7e\x9f\x32\xff\x5a\xe7\xed\x9b\xf7\xe5\x9b\x6b\x62\x9f\xee\x32\x4a\x74\x0c\xb2\x6f\x93\xc5\x93\x0b\xae\xcd\x13\xd6\x18\xb5\x53\xae\xee\x8f\xad\x74\x28\xd2\xf7\x5d\xe9\x40\x5e\x96\xb9\x65\x55\xe2\x76\x95\x8b\xbc\x22\x66\x4b\x59\x91\x47\x5b\xa9\x21\x58\xa6\xff\xc8\x8b\xd7\xe4\x5a\xa8\xaa\x64\x8d\x87\xf9\xea\x60\x86\x89\xde\xa3\x84\x0f\x95\x3f\xd4\xeb\x23\x9a\x66\x8e\x0a\xae\x76\x63\x5f\xac\x35\xa8\xa0\xa5\x06\xf9\xff\x10\x10\x5b\x77\xee\x10\xb9\xf7\x40\xec\x07\x64\x6f\x66\x2e\x10\xb3\xed\x79\xc3\x55\xdd\x4d\xe3\xc2\x02\x54\x34\x0e\x2c\xdf\xd6\xa5\xbd\xc8\x45\xca\x1e\x2e\x54\x4a\xbf\x18\xc1\x54\x5d\xea\x81\xf6\xba\xa8\x22\x27\x5f\x9c\x84\x8c\x71\xc7\x73\x9e\xd1\x32\xc3\xc4\x7e\x75\xbe\xc3\xba\x27\x43\xdd\xdd\x90\xe0\xc5\xfa\xea\x84\x9c\xc9\x12\xc6\x4e\xa8\x20\x19\x73\x49\x00\x2d\x72\x5a\xa2\xc0\x71\xfe\x22\xef\xc0\xe1\x6c\x7f\x88\xbd\x0f\x02\xbe\xa9\xe3\xd3\x2c\x8f\xd1\x2a\xf1\x74\xd5\x90\x61\x2e\x0c\x6d\x9e\x90\x6f\x2d\xdd\xb4\xbc\x08\xc2\x86\xd9\x1e\xf7\xc6\xcb\x3d\x99\x97\xa3\xc8\x5b\x51\xc9\xed\x49\xe1\x46\xd6\x2d\xb6\x2f\xf8\x34\xba\x15\x83\x73\xae\x3f\xb0\x42\xee\x95\xfb\xc4\x2e\x57\xcc\x4d\x5c\x9b\x07\x52\x71\xa8\x63\x4e\x35\xa1\x88\xa3\x92\x2a\xa3\x46\x32\x44\x73\x52\xd7\x5e\x5e\x5d\xdf\x7e\xb8\x7e\x73\xf9\xf1\xfa\xea\x35\xf9\xd2\x8e\xc3\x7d\xd9\x63\x42\x3e\xfa\xd5\xe4\xbc\x80\x7a\xab\x4e\xa9\x67\x32\xb2\x58\xbd\x53\x6f\x5a\xd7\x4a\x86\xfa\x29\x54\x90\x1b\xc1\xf5\x9b\xba\x5b\x8c\xb3\xcc\xa4\xb0\x5e\x71\xa6\x6f\x6b\x0a\x9b\x73\x6d\xb3\xc3\xe3\x50\xe6\x67\xd7\x5b\xc7\xa0\x4d\xad\x16\xa8\xf1\x5e\xaf\xe2\xe8\x96\xb4\xe6\xd0\xf6\x25\x19\xbb\xb2\xe9\x07\x91\x8b\xeb\x4a\xf9\x2e\xff\x19\x7a\x0f\x34\xcf\x43\x49\xf7\x3b\x57\x86\xca\x15\x52\x92\x25\x56\xcb\x45\x38\x3a\x9d\x4c\x4e\x27\xc0\x36\x9c\x4e\x4e\x1d\x2f\x9b\xd5\x3e\xe1\x96\x0a\x37\xc3\xc6\x15\x1c\x6c\xdf\x96\x09\x21\xdf\xb8\x34\x0d\x90\x7b\x7a\xc5\x01\xbd\xf6\x2d\x6f\x2a\x69\x63\xd6\xbe\xf6\x9d\x0b\xd2\x17\x83\x26\xbb\x9a\xfa\x13\xb7\x1e\xeb\x73\xfe\x60\xd3\xd2\xee\xd5\x00\xd6\x4c\x30\x12\x1e\xfc\x95\x59\xf1\xfe\xc3\xd7\xfb\x9d\x19\x22\x91\xe8\x79\x59\xdc\x63\x67\x95\xc8\x3c\xc7\xb2\x68\x8b\x3a\x83\x62\xe3\x0f\x1e\x8a\xf8\xc2\x15\x0b\x58\x23\x6e\xd6\x71\x0f\x23\x51\xba\xeb\x74\x45\x91\x50\x3f\xb6\x69\x52\x44\x23\xc5\x01\x5a\x54\x0b\x5a\x32\x85\x05\xdd\x6d\xf9\xea\xee\x8a\xa7\x1b\xa9\xa5\x2d\xed\xa8\x5c\x8a\x39\x4b\x19\x2f\xea\x99\x5d\x7c\xb8\xbe\xbc\x7a\x77\x3d\xc9\x77\xab\x9f\x0e\x80\x21\x99\x48\x0b\xc9\xbb\xf3\x84\x8d\x49\x41\xf5\xee\x2c\xde\xe1\x58\xb4\x1e\xf4\x10\x58\xb4\xee\xdc\xc1\xb0\x7b\xe0\xd5\xc3\xb4\x59\xf4\x3c\x18\xd0\xb2\x90\x99\x9c\x07\xa5\x8b\x7e\xda\x09\xff\x12\x23\x4a\xc6\x74\x1c\x52\x81\x33\x4a\x8a\xd5\x8b\xc3\x08\xb0\x7a\xe1\xf6\xb2\xd9\xb0\x5a\x54\xd3\x41\xf1\xb5\x2f\x74\xcf\x9e\x8d\x99\x5f\xdb\x48\xd4\xe7\x00\x2a\x72\xc5\x42\x9b\xb2\x97\x05\x2b\x73\x8e\x11\xa2\xc7\xe4\xf2\x0f\x7c\x42\xdd\x0c\xbe\x41\xc6\xb7\x9d\x60\x1d\x77\x34\xae\xcf\x36\x35\x28\x4a\x36\xae\xcb\x72\xcd\x78\x06\x21\x70\x0d\x23\xe1\x11\x87\x8e\xee\x9d\x2a\xd9\x69\xa5\xb1\x8f\x6c\xb9\xaa\x52\x6e\x98\xe2\x5a\x89\x8f\xe9\xc8\xbb\x0b\xb9\xd6\x55\x78\xad\x9e\x8c\xce\xb1\xac\x56\x69\x2d\x9d\x45\xc9\x1f\x78\xc6\xe6\x50\x94\x9c\x8b\xb9\x6a\x32\x3b\x5a\x0b\x6e\xc7\x00\x10\x85\xc8\x1a\x72\x58\x5b\xb0\xde\x81\x3d\xb6\x4e\x56\x85\x40\xfd\xfe\x9b\x8f\x68\x53\xd4\x0b\xde\x09\x9e\x4f\x94\x25\xcd\x74\x3a\x09\x11\x21\xe3\x71\x17\x14\x7c\xfc\xe6\xea\x9b\xb3\xbf\x1b\xb9\x27\xcd\xce\xc9\x5f\x99\x5d\x01\x44\xd3\xe9\x92\x27\x9a\x3c\x2e\x64\x5d\x4a\x1d\x76\xa1\x81\x06\xb8\xa5\xe8\x00\x6a\xdf\xba\x30\x6f\x0a\xd9\x09\x1c\xc0\x69\xb4\x7a\xe3\x4c\x61\x40\x97\xf3\xcc\x39\xba\x90\xb4\x47\xc2\x7e\x50\x12\xe4\x6c\x5f\x9b\x2e\x65\xa0\x96\x14\xd5\x94\x48\xce\x28\x51\xcb\x3c\xe3\xe2\x7e\x54\x97\xb0\x9b\x49\x9b\xbc\x97\x11\xf3\x83\xbb\xaa\x25\xa3\xd9\x53\x08\xdd\x01\x00\x3c\x8a\xc8\xe9\x03\xd9\x62\xc0\x12\x62\xf0\xd0\xbf\x3b\x94\x8a\xea\xa8\x48\x0a\x15\x60\xed\x7f\x71\xdb\xca\x55\xa2\xf8\x3e\xa9\x12\x74\xd8\x22\x49\x82\xdc\xdc\xbd\xb9\xbb\xf9\x5c\x8c\x9d\xdb\x78\x05\x58\xd8\xf3\xc9\x37\xfc\xc7\x2e\xc5\xc1\x98\x64\x55\xf7\x3b\xa8\x8a\xb9\x95\xa5\xa6\xbb\xab\xcf\x87\x23\xcb\x64\x41\x8b\xcb\x4a\x2f\xae\xb8\x82\x2c\xd0\xb1\x4c\xe8\xda\xf7\x5e\x34\x27\x03\x46\xc0\xd5\xf9\xe4\x0e\x90\xec\x7b\x6f\xfe\xfd\xf2\x96\xd0\xca\x1c\xbe\xb6\xb5\x9c\xf7\xc6\xb2\xf9\x2b\xbb\xc3\xac\x26\x3d\xd7\x65\xbf\xee\x58\x95\x7b\xeb\xd0\x6b\x7a\x2e\x77\xf4\xc1\xac\x7d\x44\xb3\x36\x20\xab\xcf\xda\x94\xcd\x05\xd7\x9c\x6a\x59\x1e\xca\x1e\xd8\x1a\xa0\x56\x13\x56\x4a\xcb\xdc\xde\xc8\x1b\xf7\x06\x78\x76\x05\x72\x66\x6b\xdd\x36\x5a\x46\x90\x85\xe1\x64\x6e\x84\x91\x3a\x69\xc2\x56\x22\xab\x46\x50\x73\x18\x47\xe7\xee\x9d\x80\x71\xff\x68\x15\xec\x50\xe5\x2b\xfb\xd3\xeb\x3f\x7a\x16\xf2\x3f\x35\xe5\x7a\x5d\x89\x79\xab\xff\x4c\xa4\x10\x2c\x09\x2b\xe3\x1f\x73\x72\x3f\xc6\x22\x4a\xfe\xa3\x58\xb1\x14\xe0\x16\xfc\xdf\x8a\x66\xb8\x75\x61\x07\x10\x33\xc9\xd6\x31\x1c\x04\xbe\xda\x07\x6d\xd7\x57\x9f\x2a\x7a\x0b\x02\x02\xab\x14\x16\xee\xc2\x45\xeb\x92\x0a\x65\x0e\x32\x56\x41\x72\x6a\xbd\x25\x4e\xc9\x99\x4e\x8a\x00\xc7\x81\x83\x86\x19\x67\x95\xf0\xb9\x40\x5c\xdb\x47\x3c\xdd\xaf\xeb\x30\xe3\xd0\x49\x1e\xc4\xd5\x00\x2e\xcb\x41\x54\xb7\xb6\xeb\xfa\xd0\xfd\xc5\x23\xeb\x45\xbe\xe6\x4a\x63\xe0\x13\xbe\x0c\x8e\xef\x18\xb2\x69\x38\xe6\x5b\x22\x4b\xc2\x8b\xff\xa2\x69\x5a\xbe\x46\x2e\xc1\x4a\x7d\xb2\x0c\x89\x6b\xe0\xaa\xae\xa8\x44\x45\xed\x47\x73\xa6\x97\x85\x2d\x9e\xf8\xf1\xcd\x2d\xf4\xa5\xc8\x1f\x7e\xff\x0a\x58\xe8\x7f\xf9\xed\xef\x5f\x05\x43\xcd\x67\x19\xdb\x49\xfe\x09\xbd\x1e\x8e\x11\x9b\xd4\x8a\x2f\x82\x64\x5c\x86\x87\xbd\xc3\x50\x1c\x43\x6d\x2c\x66\xc3\x0b\x60\x60\xad\xa6\x92\xfd\x38\xdd\x21\x40\x66\x08\x90\xf1\x36\x67\x08\x90\x19\x02\x64\x36\x4f\xcc\x53\x76\x1c\x44\x71\xe8\xf5\x0f\xe9\xa0\xd6\x09\x3d\xd2\xf8\xdb\xcf\x91\xc6\x77\x1e\x68\x37\xc6\x8c\xdb\x52\xdf\x23\x33\x2c\x10\xbf\x89\x5b\xbf\x7a\x7f\xf7\x5f\x5f\x5f\xfe\xe5\xfa\x6b\x58\xa7\x75\xf1\x34\xb7\xcf\xca\xb0\xfb\x8f\x7c\xd8\xd3\x5d\x0f\xdd\xeb\xfd\xfa\x92\x88\x15\x2f\x12\x41\xde\xbf\xbd\x8b\x74\x20\x39\xac\x85\x4c\xcc\x42\xf6\xed\xb8\x06\x24\xf3\x12\x94\x60\xde\x57\x52\x8b\x83\xda\x99\xbc\x0a\x45\x2d\x45\x98\x39\x69\x5c\xc5\x11\x34\x51\x5d\xc7\x48\x3e\x13\x3f\x07\xb3\x69\xb8\x91\x2f\xd2\xc3\xe1\x30\x47\x12\x2a\x36\x94\xf1\x99\x59\x02\xf3\x19\x94\x5e\xfa\x16\x83\x90\x90\x44\x94\x86\x78\x1a\xb2\xc9\x94\x72\x04\xe3\x73\x85\xea\x62\x53\x92\xd5\x7d\xa2\xfa\x8d\x03\xd8\x04\xab\x2e\x43\xac\xe7\x40\xd2\xca\x0f\xd1\x65\x91\xdb\x92\x40\x17\x09\x88\xa2\xb9\x57\x1f\xf7\x40\x0e\x15\x1b\x32\x70\xaf\x26\xd5\x85\xb4\x94\x47\x27\x26\x30\xea\x1e\x43\x11\xeb\xfe\x0e\x71\xd1\xea\xce\x57\x53\x25\xd1\x98\x23\x26\x54\x39\x5e\xcb\xfa\xde\x47\xe5\x54\x7a\x66\x18\x20\x2f\x90\x12\xfd\xf5\x60\x3a\xa4\x7d\xeb\x8f\x8a\x85\xd4\x52\xf4\x8e\xa6\xde\xf4\x79\x1b\x2f\xdd\xc2\x1b\x6f\x9a\xfc\xd8\xcd\x11\x63\x54\x56\xed\x49\x60\x04\x00\x47\x9d\xa5\x70\x5e\x03\x6d\xa7\x81\xa3\xb3\x96\xe9\xcd\xd5\x9e\x10\xc1\x90\x4f\x0c\xdb\x31\x53\xc0\xc6\x78\x2f\xa7\xd1\x49\x12\xcc\x27\x6e\xd7\x6f\xae\x2c\xdf\xee\x32\x20\x28\x0b\xf9\x64\x3b\xe8\xef\x8d\x15\x91\xa5\x7e\x94\x65\x7c\xfe\xc3\xf6\x87\x2b\x0e\xa9\xf6\xb7\xb5\x14\x23\x2f\xf1\x9a\xe2\x1c\x3f\x87\xab\x7a\x07\x57\x75\xa5\xba\xfb\xb6\x2b\xfb\x52\x6f\xec\xf3\xde\xd4\xa3\x50\xf0\x9f\x55\xf2\x3a\x77\x3d\x22\x77\xcc\x7d\x66\xd5\x72\xe6\xac\x1b\xec\x46\x41\x39\xea\x61\x88\xbd\x61\xb3\x52\xfe\x1d\x4a\x4b\xc4\x20\x32\xf7\x0d\x9a\x2e\xb1\x1c\x74\x96\x99\x5d\x95\xc2\x2f\x3b\x6d\x93\xc2\x8d\x08\x16\x44\xce\x69\xa1\xb0\x28\x55\x2a\x1f\xc5\x23\x2d\x53\x72\x79\x7b\xb3\x1f\xec\x15\x11\xd4\x89\xb0\x16\x56\x7e\xa1\x47\x58\x67\xd3\x3d\xf8\xe0\xdb\x72\x1d\x8c\x4c\xb9\x56\xad\xb2\x3f\x9e\x12\xc4\xa0\xf6\xda\xf1\xc4\x60\x16\x83\x45\x6c\x4f\x51\x9c\x84\x20\x32\xd1\x34\xb3\x06\xa6\x29\xd3\x8f\x8c\x09\xf2\xea\xd5\x2b\xd4\x6c\xbf\xfa\xd7\x7f\xfd\x57\x02\xc5\xbb\x53\x96\xf0\x7c\xfd\x45\x78\xeb\x7f\x7d\xf1\x45\xc8\xa0\xff\x71\xf9\xee\x6b\x42\x13\x90\x32\x30\x03\x32\x8e\x0d\x07\xec\x77\xaf\x46\xe4\xff\xdc\x7d\xf3\xbe\xa9\xc8\xd1\xfe\x15\xe0\xa7\xde\xa2\x20\xee\xdc\xf3\xa6\xf7\xb5\xd7\x54\x2f\x60\xcf\xa1\x64\x0e\x98\xff\xbc\xf2\x49\xf6\xee\x07\x79\xcf\x41\xf2\x45\x3e\x5f\xc0\xa6\x72\x30\x1d\xcd\x32\x08\x13\xe0\x66\x99\x60\x4f\x70\x39\x4a\x31\xda\x02\x46\xab\xc9\x4b\xc0\x18\x66\xc1\x23\x92\xf1\x7b\x46\x66\xea\xcb\x52\x56\x45\x53\xaf\xad\x64\xca\x08\x1f\xb6\x5c\x11\x0e\xd7\xc0\x50\x50\x55\x9f\xc3\x79\x84\xd8\xcb\x1d\x6b\xfd\xb6\x28\xc1\x95\x75\xb5\x65\x93\x5d\x5c\x19\x62\x14\xb3\x9f\x81\x2b\xdb\xb3\x6b\x45\x6b\xae\xb7\xf5\x6c\xf0\x70\x6d\xc9\xae\x06\xed\xd1\x4c\x8a\xb9\x0f\x0b\x0d\xf5\x77\x9e\x9b\xcb\x22\xc8\x7a\x19\x59\x2d\x2f\xb6\x30\x6f\x82\xa1\x5b\x1f\xcb\x4a\xe9\xbf\x54\x22\xcd\x82\xab\x9f\xf4\xad\x37\xf3\x66\x6d\x44\x34\x93\x5b\xc3\x08\xa8\xcb\x92\x84\x29\x04\x83\x1f\x26\x50\xf8\x45\x37\x6f\xff\x80\x16\xe9\xe0\xf1\xe4\x6c\xd3\x90\xd6\xbe\x64\xae\x2e\x15\x84\x56\x5a\x8e\xa1\xc0\x99\x0b\xf7\x9a\xfc\xe2\x17\xc1\x23\x40\x7d\xa1\x11\xd4\x08\xaa\x99\xbb\xf5\x21\x3d\x98\xf1\xab\x0a\xc5\x0c\xb4\x63\x1d\x06\x13\x58\x9b\xe8\xd4\x15\x40\xc6\xd9\x08\x9a\xb3\x91\x41\xe9\x38\xb3\xe0\xc1\x56\x12\xdd\x2b\x3e\x17\xac\x44\x85\x16\x14\xdc\x5e\x29\xde\x1d\xb3\x8e\xaf\x50\x46\x31\xf4\xcd\xe0\x15\x45\xe8\x7c\x0e\x15\x2f\x1f\x0c\x66\x2e\x73\x9a\xf1\x7f\x34\x19\xf6\x17\x8c\xdc\x5e\xbf\x03\xe3\x3c\x70\xe8\x86\xe5\xd3\x2c\x24\xfe\x1f\x5b\x9d\x7d\xc2\x40\x57\xc3\x95\x4f\x08\xb9\x56\x52\x43\xde\x78\xd3\xbf\x3d\x14\x55\x97\xc6\x02\x1f\xc3\xf1\x34\x93\x49\x48\x36\xab\x7a\xd3\x6c\x6d\x4c\x91\x12\xf8\x94\x2c\x18\x4d\x99\xad\x87\x6c\x98\xad\xa2\x60\xe9\x84\x90\x37\xe6\x96\xce\x78\x02\x45\xc7\xcd\x6f\x29\x4b\x2b\xc3\xc4\x43\xe2\x8f\xe0\x01\x3f\x2e\x18\x91\x65\xca\xb0\xb0\xdb\x0c\x7c\x3f\xea\x6e\x3d\xca\x07\x21\x8c\x50\x5f\x77\xca\x75\x49\x4b\x5b\x36\xdd\x9e\x44\xf0\x70\x06\xd1\x61\x71\x3c\xe8\x15\x46\xc6\xda\xff\x21\xa1\xf0\xae\xf5\xa8\x00\x1a\x5f\x19\x3d\xc8\x0e\xe9\x5a\x9f\x7a\xe6\x00\xff\x77\x16\xfc\x63\xea\x90\x3e\xa5\x8c\x2d\x8e\x07\xcc\xf4\x3a\x36\x50\x8e\x1a\xe9\x64\x81\x2c\xcd\xca\x1d\x25\x04\x65\x24\x1a\x57\xba\x16\x1d\xa5\x20\x59\x07\x60\x81\xda\x27\x9b\xe9\x89\x61\x2d\x75\x45\xb3\x6c\x39\x66\x9f\x0c\x35\x31\x97\x18\x08\x1f\x64\xd7\x70\x35\x03\x59\x64\xd1\x68\xb8\x7c\x45\xc9\x34\xe6\xe3\x3c\xc1\x35\x09\x09\x01\xac\x27\xd8\x2d\x14\x00\xac\x34\x7a\x4c\x8d\x36\x7f\x12\xb7\xce\x07\x56\x2e\xed\x08\x11\x1f\xf6\x2c\x68\xdb\xb7\x86\xfe\x6a\x8d\xe0\xd8\x12\xb8\x2d\xf0\x5b\xed\x0c\x23\x21\x1d\xf3\xd5\x06\x9f\x56\xf5\xdf\xfd\xd5\x03\x7e\x4a\x71\xed\x9e\x85\xb5\x9f\x5e\xca\xfd\x72\xc7\xde\xd8\x68\x52\xf7\x0b\xe6\x54\x72\x09\xd2\x9d\xbc\x03\xb5\xf8\x11\x09\x1b\x99\xcc\x55\x66\x36\x2f\xf7\x98\x0e\x54\xf4\xb7\x39\x9b\xee\xd9\x12\xba\xed\x5b\xcc\xbf\x77\x7d\x66\xd2\x0b\x4f\x37\x6d\x6c\xa6\xde\xeb\x3b\xb7\x7d\xd1\x1f\xf7\xbd\x83\xd8\xee\x59\x80\xd2\x6b\x53\x6b\xc1\x9f\x39\x2f\x27\xf4\x00\x4c\x99\x07\x75\x48\x56\x0d\x46\x58\x03\x56\x11\x2d\xfb\xd4\xaf\x7f\x72\x21\x79\xb7\xc5\x7b\x58\x70\xaf\x0b\xe7\xcf\xa1\xad\x19\xbf\x67\xcb\x53\x85\x37\xc0\x60\xb0\x05\x2f\x30\xed\xb6\x21\x0f\x46\x80\xec\x79\x0d\xb0\x7d\x47\x33\x9e\xd6\x03\x23\x8e\xbb\x11\x23\xf2\x5e\x6a\xf3\xbf\x6b\xa8\x84\x0a\xd7\xed\x4a\x32\xf5\x5e\x6a\x78\xf2\x2c\x27\x84\x0b\x7d\xce\xf3\xb1\xda\x1a\x0e\x8e\x70\x58\x4b\xde\x48\x0e\x5e\x7d\x64\x55\x57\x98\xf0\x6b\xd1\xdf\x40\x42\x32\xdc\xd2\x9e\x43\xeb\xd5\x22\xf6\xae\x0a\x97\x90\x62\xec\x1c\xaf\xd7\x47\xb6\xe7\x27\xcb\xd6\xf1\xed\x7d\x12\x76\x02\xa0\x35\xc2\x5f\xa0\x82\x48\x91\xd1\x84\xa5\x24\xad\x60\x83\xa8\xd9\x29\xaa\xd9\x3c\xb8\xa6\xfc\x6a\xcb\x59\x39\x07\x25\x57\x12\x94\x9a\x60\xc3\x02\x7a\x13\x62\x6c\x3d\xc9\xb1\x3f\x78\x6f\xf0\x7f\x62\x40\xcb\x01\x3b\x03\x1e\xeb\x6b\x83\xda\x9f\xc6\xab\xf5\xb8\x97\xde\xd0\xc8\x95\xe4\xb4\x30\x77\xf2\xbf\x0d\xf3\x01\xa0\xfa\x3f\xa4\xa0\xbc\x54\x13\x72\x49\x14\x17\xf3\x8c\xb5\x7e\xb3\xd2\xa3\xd7\x4d\x8f\x29\x14\xe0\x3d\xf9\x63\xc5\x1f\x68\xc6\x30\x4c\x99\x0a\xc2\x32\x64\x96\xe4\x6c\x8d\x09\x1d\x91\xc7\x85\x54\xc8\xc9\xd4\xd1\x1a\x27\xf7\x6c\x79\x32\x8a\x52\x61\xb8\xe6\xdf\xf8\x93\x1b\x71\xd2\xe8\x51\x5b\xb7\xb5\xe6\xd1\xc0\x03\xf1\x04\x7e\x3b\xd9\x3f\x9f\xdb\x8b\xb3\xea\x5b\x91\x6a\xd3\x04\xa2\xaf\xd8\x53\x62\x07\x9a\x16\x1e\x18\x84\x6d\x1f\x62\xb2\x83\xe9\x0d\x9a\xb3\xe9\xd2\x55\x40\xb2\x82\xea\xba\x1c\x1b\x35\x24\xc8\xbc\x9e\x7c\x0c\xe5\x20\x7d\x15\x41\xbc\x48\x19\x79\x50\xd2\x55\xaa\x3a\xd2\x26\x1b\x7a\x5a\x56\x6c\x44\x52\x29\x4e\xb5\x55\x77\x15\x32\xc5\xd4\xa2\x55\xe1\xe2\x30\x6a\x57\xc8\x74\xc3\x39\x9c\x05\x55\xe1\x6c\x1a\x2d\x99\x19\x8c\x3e\x50\x9e\xd1\x69\xe6\x34\x0c\xe0\x26\x87\xaa\x4e\xc8\x61\xe2\x9c\xef\x36\x0d\x19\x1e\xbf\x65\x87\xb4\x51\x5c\x42\x02\xee\x82\xb4\x60\xfe\xb0\xcd\xa1\x7b\x83\xb7\xd5\xa7\x51\xe3\xed\x02\x22\xc0\xe2\x4d\x54\x19\xaa\x45\xfe\xc1\x4a\x19\x35\xc2\x06\xd5\x51\x3c\x74\x86\xd9\xba\x9b\x16\xe6\xa4\xdf\xb4\x16\x68\x7e\x00\xf6\xfe\xc1\x9a\xf0\x20\x7d\x82\x97\x06\xa3\x94\x78\x34\xe0\x0d\x00\x3f\x4c\x61\x55\x07\xbf\x72\xcd\x51\xbd\x50\x05\xa0\xa7\xb6\x8f\xa3\x56\x1d\x5a\xbd\x8f\x36\x65\x1d\x66\x9a\x9b\xd9\x0a\x6f\x68\x75\x78\x2a\x28\xd6\x99\x16\x2a\x81\x69\x0b\xd0\x5e\xdc\x47\x3d\xde\xe3\x58\xd1\x13\xe1\x1d\x2d\x7a\x19\xc2\xea\xaf\x5b\xa5\xfc\xe8\x54\x56\xda\x25\x8b\xb0\xbf\x43\x11\x23\x2d\x9d\xd1\xf0\x70\xaa\xf3\x3e\x3a\x8e\x68\x46\xfe\x29\x20\x8d\x3e\x22\x6d\x0f\xa5\x11\x61\x34\x59\x18\x0e\x70\x8c\x0e\x08\x86\x4b\x75\xec\xe8\x95\xd9\x3a\x64\x0c\xe5\x2a\x89\x89\x03\xbe\xfa\x34\x1c\xc8\x79\x9e\x2b\xce\x6c\xe4\x1c\xee\x94\x75\xea\xb2\xcc\xa9\x68\xdc\xbc\xa3\xc6\x74\xea\x39\x7b\x7b\x9c\xea\x07\x56\x09\x32\xea\x4a\x42\x6c\x23\x7b\xb0\xd4\x7c\x56\x5f\x8c\xa8\xf1\x36\xac\xa8\xc9\xa5\x62\xb0\xa9\xf5\xb8\xa9\xc4\xda\x48\x50\xb8\x3a\x76\x34\xd0\xcb\xc0\x42\xa8\x53\x6d\x79\xb9\x5b\x16\x3c\x81\x6c\x7b\xa6\x6b\xfb\xae\x3b\xd5\xfa\x30\xe2\xc4\x6f\xef\x88\x14\x33\x5c\x07\x4c\x1d\x32\xef\x98\x35\x31\xa5\x08\x87\x5d\xce\x69\x79\xcf\xd2\x9a\x4b\x9a\x90\x5b\xb3\x78\x27\xa3\x47\x8d\x59\x3a\x6a\x04\xce\x97\x74\xd9\xca\xad\x6e\x26\x74\x3a\x99\x9c\xda\x2c\x85\xeb\x99\xd6\xa3\xb1\x57\xac\x40\xde\x43\x0c\x6f\xdd\xdf\x77\xb4\x50\xa8\x8e\x30\xec\x0d\xa8\x23\x25\x94\x38\xd0\x0b\x67\x53\xa4\x11\xe1\x08\xab\xcb\xe9\x21\x00\xf5\x55\x2b\xf7\x51\x29\x47\x19\x0e\xb1\xf5\x57\x23\xf7\x52\x21\x6f\x53\x1f\xdb\x93\xb2\x37\xbe\xaf\xe6\xbf\x97\x06\x26\x0f\x72\x96\x5b\x6d\x4f\x57\x3b\x82\xd3\x53\xab\x4a\x6f\x90\x2b\x9d\xad\x2e\x1d\xc7\x21\xba\xf6\x2c\xbe\x74\xab\xed\xf9\x7c\xeb\x56\xdb\xcd\x0c\xd0\xdf\xe6\x3a\x0e\xbe\xb3\x63\xcd\xd6\xa9\x78\xd5\x09\x39\x92\xd3\xdd\x6a\x3b\xb0\x13\xde\x6a\x8b\x73\xca\x5b\x6d\x31\x4e\x7a\xab\x2d\x56\x3a\xc3\xf6\xf4\x0b\xec\x67\x93\x2f\x5b\x42\x9e\x65\xed\x80\xe5\x02\x51\xb7\xf0\x90\x5c\xaf\x7b\x6b\x09\x35\x5e\x5d\x3a\x55\x32\xab\x74\x78\xca\xfa\x6d\xdd\xf9\x74\x1f\x26\xee\x34\x9b\xb1\xc4\x7e\xb5\x63\x8f\x6f\x00\xae\x0d\xc9\x71\xbf\x5e\xf7\xa1\xf9\xeb\xaf\x05\x3f\xa6\xea\xef\x29\xf9\x81\xb0\x1d\x3b\x4b\x10\xb6\x23\xe7\x0a\x72\x83\x3e\x25\x63\x90\xdd\xae\x03\xe6\x0d\xc2\xf6\xdc\xd9\x83\xfc\x75\xbe\xf0\x1c\x42\xd8\x7a\xde\xf6\x98\x7c\x42\xae\x3d\x59\xe9\xec\x3a\xa8\x6b\x47\xba\xbc\xbe\x2d\x99\x10\x72\xfc\x68\x85\xc2\xa9\x33\xab\x62\x26\xe0\x18\x91\xbf\x8f\xe6\xf2\xe9\xd6\x0f\x17\xcc\x72\x79\x7b\xd3\x4b\xa9\xe4\x7d\xbf\x45\xad\xe4\xbf\xf1\x33\x56\x2c\xdd\xa0\xa6\xc8\x77\x51\xbb\x6a\x56\x6e\xc3\x26\x23\x39\xbd\xe7\x11\xb1\xd7\xa6\xfd\xd6\xb0\x39\x7e\xa6\x4f\xef\x9c\xb5\xb4\xb1\x3f\x0d\x43\x64\x99\x0e\x97\x39\x18\x5d\x9b\x63\xdc\xe2\xc9\xf3\x88\xe3\x47\x14\xad\x61\x3f\x82\xb2\x30\xae\xb6\xd6\x49\x9d\x7e\x70\x8b\xb5\xba\x77\xd4\x03\x7a\xca\xc7\x42\xa6\xaf\xd1\x66\x4c\x85\x90\x1a\xdd\x90\x46\x68\xb7\x51\x23\x6b\x95\xf2\xb2\x3b\x88\xd4\x90\x40\x74\x08\x77\x61\x21\x93\xd3\xcf\xc9\x4f\x0f\x96\x7f\x1b\x7b\x94\xe4\xc9\x0e\x77\x0d\x2f\xb1\x07\x37\x27\xdb\x93\x3b\x45\x95\x2c\x58\x4e\xe1\x9f\x6f\xdd\xf2\x0c\xaa\xb1\xe1\x06\xa0\xa5\x64\x65\x6e\x38\xb1\x51\x2b\x1c\xf5\xe4\x21\xac\xb6\xf1\x7a\x7b\xa2\xc7\x4b\x7d\x0a\x7b\xd8\x8c\xdb\x96\xc4\x65\x80\x1b\x14\x27\x60\x6b\x72\x49\x4a\x6a\x2d\xae\xa1\x32\x0f\xb8\x7b\xcf\xb0\xf0\xfd\x78\x23\x60\x7b\x2e\xb5\x55\x5f\x75\xd5\xa8\xe6\x7d\xda\xca\xa7\x1e\x53\x18\xd4\x55\x83\xba\xea\x9f\x5a\x5d\xe5\x11\x76\x87\xeb\x37\x68\xa1\xfc\x64\x9a\x4e\x15\xd5\x14\x01\x98\x34\xa5\x75\xcd\x9d\x74\x2a\x25\x59\xb6\xad\x41\xa7\x93\xc9\x29\xda\x83\x26\xb5\xf6\xb8\xd2\xb3\xf1\x1f\x08\x13\x89\x4c\xa1\xd2\x33\xf4\x5f\x2a\x0d\xac\x65\xa3\xc0\xf0\xe7\x92\xbb\xb1\x7c\x8b\x12\xf4\xdd\x97\x7b\xe8\x85\x82\x5d\xf8\xfe\xdb\xfd\x30\x58\xbd\x10\x68\xc3\x8a\xd5\xa5\x90\xec\x96\xd5\xe5\xe8\x2c\x4f\xd6\x24\x1b\xc8\x78\xce\xad\xb3\xb6\xc1\x2e\x4c\x75\x56\x39\xdd\xd4\xce\xb0\x9b\x49\x52\x54\x23\xdb\xe5\x24\x67\xb9\x2c\x97\xa3\xba\x5b\xf3\x63\x6b\x1c\xfb\xc6\x39\x30\x7d\x49\x55\x96\x4c\xe8\x6c\xe9\xb1\x7f\x9f\x13\xf7\xe7\x76\xf4\xc8\xcc\x5f\x7d\xb0\xb1\xee\x36\x4d\x6b\xdf\xff\xa6\xec\x39\xe8\x27\xeb\x5d\x01\x1a\x63\x33\xa0\x8d\x1a\xfd\x84\x79\xca\xc4\x03\x79\xa0\xa5\x8a\xbf\x6f\xe4\xe9\xfc\x5e\xca\x1f\xb8\xda\x4b\x04\xc6\x9d\x25\x7e\xa8\x76\x97\x95\x2e\x2a\x6d\xd1\xb1\xbb\x46\xae\x08\x58\x7d\x7d\x56\x98\xde\x2f\xc2\x55\x44\x7e\x2b\xa8\xd6\xac\x14\xaf\xc9\xff\x3b\xfb\xcf\xdf\xfc\x34\x3e\xff\xf3\xd9\xd9\xf7\xaf\xc6\xff\xf6\xb7\xdf\x9c\xfd\xe7\x04\xfe\xf1\xeb\xf3\x3f\x9f\xff\xe4\xfe\xf8\xcd\xf9\xf9\xd9\xd9\xf7\x5f\xbd\xfb\xf2\xe3\xed\xf5\xdf\xf8\xf9\x4f\xdf\x8b\x2a\xbf\xc7\xbf\x7e\x3a\xfb\x9e\x5d\xff\x2d\xb0\x93\xf3\xf3\x3f\xff\xaa\xd7\x74\xa9\x58\x7e\xd3\x03\xbf\x61\x1b\x3f\x91\x3e\xb6\x7b\xd9\x97\x63\x3c\x17\x7a\x2c\xcb\x31\x76\xf7\x1a\x3c\x38\x7b\x74\xea\xc0\x62\x1f\xf7\xb0\xa1\xc3\x4d\x59\x3b\x27\x7c\x3c\xc3\x45\xdb\x97\x7c\xb1\x07\xdb\x09\xa6\xc7\xe9\xa5\x33\xc4\x4f\xb7\xa8\x0b\xed\x8f\x3f\x63\x4d\xe1\x67\xe3\x82\x66\xcb\x7b\x0c\xfe\x67\xcf\xee\x7f\x86\x27\x31\x38\x9f\x35\x8b\x1b\x9c\xcf\xa0\x0d\xce\x67\x7e\x1b\x9c\xcf\x5a\xe3\x0e\xce\x67\x83\x36\x6f\xd0\xe6\x3d\xbf\x36\x6f\x70\x3e\x1b\x9c\xcf\x36\xb7\xc1\xf9\xac\xbb\x0d\xce\x67\x5b\xdb\xe0\x7c\xf6\xcf\xe0\x7c\x86\x37\x6e\x93\x0b\x9a\x15\xd0\x1b\xff\xb3\xcf\xce\xfd\x4c\x19\x88\x4c\xd8\x65\x92\xc8\x4a\xe8\x8f\xf2\x9e\x05\xbb\x4f\xac\xa8\x94\xd6\xfa\x81\x6a\x7d\x5b\x54\x4c\xeb\x2f\x1f\x4d\xdf\xf4\x02\xb3\x05\xd2\x2a\xe5\x4c\xc4\x29\x4c\x9f\x42\x89\xdc\x78\x7e\xc5\x6c\x91\xb2\xb4\xf9\xc1\x92\x29\x6d\x8e\x66\x42\x2e\x49\xc9\x12\x5e\x70\x9b\x92\x83\xe2\xf3\xa8\x21\xe1\x5e\xd8\x94\xe4\x4b\x73\x5b\x58\x36\xab\xa9\x45\x9d\xaa\xbc\xf4\xd4\x31\x96\x71\x59\x99\x52\x9c\x54\x6f\xa6\x89\x6c\x31\x50\x80\x47\xae\x18\x51\x0b\x59\x65\x29\x29\xd9\xdf\x1d\x07\x6e\x57\xf9\xd1\x1f\xcd\xb7\x67\xc4\x0e\xeb\x2d\xc7\xee\x23\x2d\x78\x78\xdd\xac\x7a\xf6\x7d\x70\x25\xfb\x54\xf0\x12\xee\xdb\x1d\x4b\xa4\x48\x8f\xa6\x25\x5d\x1b\xb8\xe1\x9d\xc1\xcc\x89\xb9\x8c\xea\xcc\xad\x0f\x34\xe3\xa9\x61\x46\x9c\x87\x15\xa2\x84\x38\x30\x46\xfc\x51\x43\xa9\x6a\x4e\x93\xd0\xa2\x28\x25\x4d\x16\x4c\x79\x33\x43\x01\xd0\x56\xc1\x08\x4d\x85\xef\xb7\x22\xab\xe6\x5c\xa0\xbc\x08\xfd\x3b\xf6\x4b\x6a\xe7\x81\x69\x17\xb2\x3a\xb9\x8f\xde\xc0\xe6\xf3\xa8\x61\x91\xdf\xd6\xe5\x12\x5c\x3a\xa5\x3f\x1c\xae\x96\xcf\xfc\x3f\x14\x91\x86\x46\x63\xcd\xd2\x3f\xbc\x22\x05\x2b\x13\xbc\xba\x91\x7a\x6f\x05\x99\x5b\xcd\x88\x99\x11\x7e\x0c\x99\xdb\x3e\xd0\x6f\x7f\x47\x16\xb2\x2a\xd5\xc4\xaf\xb7\xf7\x05\x3c\x8b\x3b\x55\x91\x36\x8e\x4c\x9a\x64\x8c\x2a\x4d\xbe\x78\x45\x72\x2e\x2a\xdd\x27\x17\x45\xbc\xd0\xea\x89\xab\xbf\xff\x5d\xf0\x77\x4f\xca\x61\x11\x79\xdb\x7c\xe1\x14\xfe\x5d\x4b\xa8\x56\x8d\x8e\x65\x46\x0b\xc9\x85\x5e\x95\x57\x2d\x85\xed\x87\x4d\x41\x51\x7f\x30\x2c\xd6\x5b\xaa\xfb\xb1\x92\xd3\xa5\x8e\xa9\xa7\x63\xbf\x68\xa7\x0b\xfc\xbf\xf6\xe1\x1e\x8b\xb4\x1e\xa0\x82\x4e\xc9\xe6\x5c\xe9\xb2\x4b\x7d\x3c\x0e\xc1\x70\xe1\xec\xca\xbc\x94\x55\x40\xde\x8b\x78\xa8\x86\x8e\x9d\x22\xc5\x19\xb4\x6c\x96\xf7\x90\xd4\x35\xae\xda\x1a\x58\x6e\xb0\xb7\xce\xaf\x5e\x5a\x09\x9b\x4d\xe5\x50\x1d\x30\xba\xa2\x00\xcf\x5b\x12\x35\x46\x3c\x71\x00\x7a\x98\x2d\xc3\xbe\xdb\x17\xd7\xa6\xf2\x92\x25\xc9\xab\x4c\xf3\x22\x6b\xb6\xef\x83\xfb\xc0\x52\xe6\x10\xd9\xba\xe1\x42\xa9\x67\x6f\xa2\x58\x38\x0b\xeb\x88\x83\xc1\xf7\xac\x1e\x8d\x09\x0d\x05\x45\xc0\x71\x9f\x15\xb4\xa4\xf5\x29\x25\x32\xcf\x69\x50\x26\x2b\xb4\x40\x52\xf0\x5d\x43\xdc\x6e\xe8\x76\x49\xb3\x66\xd5\x9e\xfb\xd1\x3e\x81\x5c\x33\x41\x45\x80\x33\x41\x8f\xfa\xed\xd0\x33\x91\x8f\x75\x3c\xca\x9c\x3f\x30\xb1\x0a\xdd\x96\xdb\xff\x0b\x4d\xee\x99\x08\x11\x9b\xbf\x55\x6e\x7f\xd3\xa5\xa0\xb9\x2d\xc7\x5e\x94\xf2\x81\x9b\x6b\xc0\xd2\x95\x11\xd4\xc8\xaa\xa3\x30\x37\xb9\xab\xc5\x80\x1c\xdd\x3e\xb7\xb2\x52\x87\x29\xd4\x6b\xfa\x7d\x3a\x96\x54\x68\x77\x2a\xf9\x43\xc2\x1c\x8b\x6a\x7a\xde\xe7\x0e\x3c\x04\xd4\xb6\x23\x9b\x0b\x58\xd9\xf4\xd8\x78\xdf\x80\xe6\xd6\xae\x13\x98\x38\x36\x33\x38\x6f\x59\x97\x3b\x5a\x81\x22\x5b\xd2\x62\x6f\x25\xcc\xca\x69\x4c\x65\xab\xce\x63\x2c\xa7\x69\x1b\x6d\x7d\xa0\xa9\x54\xe4\x2f\x90\x1c\xef\x8a\x81\xdc\x10\xc7\x7a\xf4\xa8\xf8\xcb\x3e\xd1\xbc\xc8\x98\x9a\xdc\xff\x01\x54\x94\xf6\x7a\x5c\x94\xd3\xf4\xe2\xc3\xf5\xe5\xd5\xbb\xeb\x49\xbe\xfb\x02\x1e\x80\xa5\xe1\x39\x9d\x77\x71\xa3\x63\x92\x4b\xc1\xb5\x2c\x77\x63\xbe\x17\x51\x3a\x70\x67\x95\x4f\xcb\x8f\x3b\xba\x6e\x8e\x77\x29\x2b\xf2\x48\x31\xff\x69\x70\x05\xd0\x8f\xbc\x78\x4d\xae\x85\xaa\x4a\xd6\xe4\x04\x5f\x1d\xcc\xa0\xbb\x3d\x56\x17\x44\xd8\x79\x7d\xb4\xaa\xa0\x4f\x2e\x23\x5e\x4e\x43\xa8\x09\xaa\xd0\x17\xf2\x91\xa4\x92\x3c\x32\x52\x94\xec\xc1\x88\xcc\xe0\xad\xa3\x88\x57\x28\xc5\xee\x2d\x64\x19\x4c\x64\x5e\x94\x32\xe7\xca\x91\xb6\x90\x92\x9a\x24\x0e\x99\xc2\xcd\x38\x04\x8c\x42\xc7\xb5\x92\x06\x10\x11\x3e\x0a\xcd\x07\xd8\x17\xb7\xfc\x72\x21\x1f\xc7\x5a\x8e\x2b\xc5\xc6\xbc\x5b\x6b\x1b\xb1\x57\xf7\x6c\x09\x8e\xab\x07\xd8\x2d\xdb\x75\x4b\xe6\xd6\x12\x54\xfe\xf0\xdc\xf0\x65\x1f\xfe\x72\xf5\xad\x0a\xd3\xf1\x79\x32\xcb\x05\xd3\xc9\x45\xc2\x8a\xc5\x85\x1d\xe3\xf3\xdc\x7b\x87\x9b\x0f\xb1\xf9\xae\x6f\xe4\x0e\x12\x99\x65\xb6\x58\x96\x9c\x91\x37\xac\x58\xd4\x2f\xbc\xb8\xad\xdb\x73\xa1\xb9\xe3\x28\x53\x08\xd4\x29\x96\x01\x96\xb3\xf8\xa3\x34\xfd\xb6\x91\x0e\x3c\x09\xc5\x39\xde\xbd\x29\xa7\x7d\xc9\xc7\x33\xdf\x94\x67\x53\x28\xec\xb1\xb4\x7d\x8c\xe6\xe0\xc8\x67\x10\xa6\xa2\x40\x2f\xf7\xa0\x00\xb5\xf8\x53\xa8\x3b\x07\x9d\x94\xe7\xf6\x41\x2b\xbd\x60\x42\xf3\x04\xed\x20\xd6\xd5\xde\xa7\x1d\xe4\x66\x86\x42\x6c\x1a\x64\x3c\x96\x0f\xac\x2c\x79\xca\x14\x89\x20\x1e\xbe\xc2\x8c\x67\x2f\xee\x00\x03\xad\xb9\x71\x86\xd6\x70\x47\x9f\x7e\x6a\xf9\xa7\x38\xf7\x1c\xdb\xad\xe7\xc8\x0e\x3d\x4f\x73\xe5\x39\xa4\x13\xcf\x73\xbb\xef\x7c\x16\x8e\x3b\xd1\x66\xe8\x18\x67\x9d\xa7\x38\xb0\x1c\x54\xd1\xd6\x62\x51\xe0\x49\x0f\x16\x85\xa6\x39\x0f\xca\x82\xf1\xb2\x98\x14\x95\xd0\x8c\xdd\x7c\x13\xa1\xf9\xb2\x5f\xb4\x95\x5b\x77\xf6\x61\x61\xee\xa7\x82\x78\x22\xa7\xb7\xd4\x9a\x26\x0b\x9b\xbc\xdd\x59\x34\xa4\x80\x8a\xa3\x08\x0b\x44\xc8\xb4\xcb\xd6\x7b\x00\x35\xd4\x9c\x6a\xf6\xd8\xc9\xb0\x8f\x1b\x02\xdf\xfd\x26\xa8\x0b\x3e\x73\x85\x55\x8c\x52\xaa\x8e\x41\x58\xeb\x65\x9f\x6a\xa8\xc9\x16\x05\x54\xdc\xfd\x84\x6f\xf7\xa6\x2c\x36\xcd\x02\x50\xe4\x11\xd9\xaf\xdc\xf6\xc3\xbe\xd0\x34\x2d\x99\x52\x8e\xa7\x70\x97\xe9\xf2\xf6\x86\x7c\x89\xaf\xef\x75\xe2\x45\x29\x35\x0a\xd5\x57\x32\xa7\x3c\xc0\x09\xb0\xb5\x82\xd5\xcf\xdd\x52\x7c\xe6\xd7\x2d\xe1\xb6\x7e\x97\xd8\x97\x67\xb2\xf4\x0a\x20\x54\x25\x4b\x89\x55\xe3\xed\x75\x8d\x47\x11\xbc\xd6\x04\x24\x72\x66\x7e\xbb\x80\xf2\x23\xe7\x93\x46\x08\x5b\x91\xd0\x42\xa4\xff\xbd\xc8\x70\x2f\x50\x4a\xf2\x6c\x3c\x2e\x0a\xb4\x91\x8c\x1c\xd8\x00\x11\xae\x5d\xf9\x82\xfa\x17\x8a\x83\x4f\x8c\xe7\x85\x6a\x2b\xfd\x71\xd5\x04\x7a\xa2\xb0\x35\x22\x5f\xcb\x39\x77\xd5\x56\x0d\x70\xe2\xd9\xd0\x10\x09\x69\x10\x5c\x06\xc1\x65\x6d\x73\x06\xc1\x65\x10\x5c\x36\x36\xa5\xb2\x6b\x41\xa7\x59\x88\x0f\x7a\x9b\xcd\xae\x3f\x24\x6f\x33\x3a\x27\x0c\xfe\xb8\x48\xb9\x32\xff\x27\x77\x77\x5f\x83\xb3\x49\x25\x9c\x82\x09\x2e\x81\x65\x17\xea\x1c\x2d\x48\x96\xf6\x4b\x27\x90\x5a\xbf\x0b\x8a\xb5\xed\x41\x29\x9a\xee\x09\x17\x29\x14\x7a\x52\xad\x40\x0c\xfb\x06\x10\x0c\x5a\x47\xdd\xa3\xa7\xf7\x94\x19\x44\x95\xdc\xdf\x7a\xbe\x21\xb2\x34\xcf\x84\xf7\x28\x92\x75\x8c\xfe\x3a\x02\x1a\xed\x62\x6e\xe3\x55\xf0\xde\x97\x8e\x03\x73\xe4\xf3\xce\xee\x10\xfc\x46\x95\x92\x09\x6f\x5c\x94\xc0\xa4\xd5\xb0\x65\x29\xb0\x65\xfb\x5d\x13\x30\xf7\xb1\xcb\x41\xe9\x61\x03\x2f\xe9\xce\xdb\xbe\x41\x95\xcf\x3b\x72\xe1\x56\xbd\xd7\x25\x20\x54\x85\x25\x98\x8a\x87\xf1\xa6\xf7\xd5\xf5\xd6\xf0\xbc\xea\xfc\xe2\x72\x53\xd8\x13\x0e\x10\x35\xed\x9a\x17\x14\xd5\x13\x6b\x50\xc0\x55\x7d\x77\x20\xd7\xce\xde\xf6\x2f\x24\x59\x4d\xdc\x9e\x59\x0e\xb1\xed\x05\x88\xcf\xac\xc3\x0c\x5c\xfe\x42\x16\x55\x86\xce\xf2\xf5\xe2\x7a\x38\xcd\xc4\x78\x1c\xe0\x2c\xf6\xa3\xba\x08\xe7\x15\xbd\x78\xf6\x43\x80\xa7\x1f\x2e\x1f\x9f\xd5\xc0\x41\x2c\xa8\x04\x8c\xf8\x6f\xbb\x8b\x52\x28\x1c\x33\xa9\xc1\xbe\x92\x18\x84\xa8\x5e\x5a\x69\x0e\x5a\xf2\xe3\xab\xdf\xff\xee\x77\x41\x74\x89\x97\x50\x00\x94\x43\x7d\x44\x48\x83\x52\x3b\x29\xd0\x92\x81\x9c\x83\x19\x07\x9c\xf2\x05\x9d\x20\x75\xa0\xc1\xe8\x18\xf9\x0d\x0e\x9c\xcf\x20\x2e\x14\x24\x26\x5f\x41\xa0\xf1\xbe\x87\x83\x0e\xe4\x9d\xba\x39\x5a\xde\xa9\x23\x65\x9b\x3a\x4e\x8e\xa9\x63\x64\x96\x3a\x4a\x3e\xa9\xe3\x65\x91\x3a\x70\xee\xa8\x83\x38\xc4\x1c\x32\x3b\x54\x64\x6c\x71\x5c\x5c\x71\x78\xfe\xa7\xe0\xe8\xe3\xd8\xc8\xe3\x88\x0c\x4f\xfb\xcd\xeb\x14\x2d\x98\xc7\xe4\x70\xea\x1b\x55\x77\xbc\x7c\x4d\xcf\x98\xa5\xe9\xb9\x73\x33\x1d\x38\x23\xd3\xf1\xf2\x30\x1d\x25\xfb\x52\x9f\xf0\xd5\xf8\x4c\x4b\x31\x61\xab\x7d\x2f\xd7\xc1\x73\x29\xed\x25\x83\xd2\x9e\xf3\x26\xed\x2f\x5b\xd2\xf1\xdc\x3e\xc3\x93\xa6\x3c\x39\x55\x4a\x7c\xa9\xae\x78\xcb\xd5\xa1\x94\x35\x4d\xef\x1b\x95\x53\x2e\xbd\xae\xab\x00\x74\xaa\xbc\x12\x3f\x5a\x1a\xac\x76\x84\xc8\x87\x00\x3d\x04\x89\xd0\xe0\x60\xef\xb2\x83\xb9\xd8\xa4\x8e\xfc\xe6\x6e\xc5\x31\xa4\x7e\xfc\x3c\xfe\x20\x83\xc3\xc5\xfe\x1c\x2e\xf6\x1f\xf1\xf3\xd2\x0c\xfa\xe9\x60\xd0\x8f\x36\xe8\xab\x56\x0d\x01\xa7\x96\x05\xc4\x07\xac\xa3\x9c\xfa\x05\xea\x1a\x7c\x70\x79\x7b\x13\x30\x4e\x52\x32\xc8\xb0\x43\x33\x35\xd9\xc4\x53\x3a\x3b\x97\xe5\x55\x1d\x2f\x49\xb5\x66\x79\x11\x54\x50\x63\xb0\xe7\x0f\xf6\xfc\xb5\xcd\x19\xec\xf9\x83\x3d\x7f\x63\x3b\xb6\x61\x70\x51\xe5\x54\x8c\x0d\x11\x02\xb3\x7f\xcb\xc7\x6e\x85\xb5\x9a\x10\x4b\x4c\x02\x31\x13\x26\xb0\x80\x94\x22\x95\xe0\x3f\x56\xac\x51\x9c\xd5\x1c\xec\x81\x8c\xaa\xd0\xf7\x61\x37\x10\x19\xf0\x15\xe2\x94\xc8\xb5\x90\x6c\xbb\xe6\x7a\x33\x1d\x95\x09\xdd\x44\x18\xa6\xa5\x0b\xd6\xe6\xfe\x98\x11\x6e\x57\xa4\x81\x96\xa2\xc3\x62\x60\x40\x8b\xa1\xea\x74\x9f\x47\x36\x80\x60\xd6\x63\xd3\x84\x4d\x19\xc9\x79\x59\xca\xd2\x1a\x78\xfd\x25\xa1\xcf\x25\x9f\x2f\x34\x2b\x51\xc5\x80\x5e\x6f\x21\x57\xf1\x8e\x69\x0b\x55\x00\x95\x5a\x12\x2a\x30\xf1\x82\xf9\xb7\x0b\x49\x82\xe5\x3a\x52\x3c\x65\x0b\xfa\xc0\x65\x15\x14\x1c\x7b\x87\xcc\xc2\x89\xfd\x18\x58\xc8\xa5\xac\x6a\x53\x56\x05\xf1\xd6\xf5\x1e\xaa\xf5\xf3\x0a\x18\xe4\x7d\xf3\x39\x68\x82\x52\xe9\xf4\xf4\x63\xf6\x89\x2b\xbd\xbe\x63\xee\xa8\x5c\x79\xb7\x7d\x5d\x83\x07\x55\x18\x42\xf6\x5d\x40\xd6\x8c\x76\xc6\x0c\xff\xbb\xb6\x84\xf5\x70\x07\x3f\x75\xc9\x57\x36\x21\x1d\xa6\xb5\x09\x0a\x5e\x3f\x80\xcf\x3d\xce\xb1\xb3\x60\xec\xcb\x12\xda\x06\x81\xad\x69\x7d\x3c\x9b\x32\x9e\x2c\x6f\xae\xfa\x7a\x37\xe1\xd7\x8e\x1c\xaa\xda\xb3\xc9\x3c\x27\x7f\xa1\x8a\xa5\xe4\x1d\x15\x74\x8e\x5a\xbb\xb3\xbb\xdb\xbf\xbc\x3b\x37\x00\x04\x5a\xc6\x9b\xab\x8d\xee\x4f\x77\x7e\xe7\xef\xf7\x99\x44\x66\x6d\xe1\x3d\x38\x85\xb5\xef\x7b\x2e\x7e\xaf\xd9\x71\x48\x4d\x5c\xc3\x0a\x0d\x6f\xc8\xf7\x73\xbb\x9a\xc7\x10\x7d\x93\x5c\x02\x55\xb5\x8a\xc9\x1e\xf2\xf4\xfe\x69\xd3\xe7\x46\xbc\xc8\xb2\xdb\x8c\x8a\xcb\xa2\x28\xe5\xc3\x66\x65\x67\x08\x72\x70\xdf\xbb\x05\xa0\x87\xba\x7b\x58\xe0\x89\x80\x47\xa2\x40\xa9\x06\x87\xdd\xbc\xff\x37\xba\xd6\x87\x4a\x01\x0c\xc9\xc9\x65\xa5\x65\x4e\x35\x4f\x4e\x88\x2c\xc9\xc9\x3b\x2a\x2a\x9a\x6d\x8c\x57\xd9\xb9\xe2\x6d\x12\xe7\xce\x8f\xb6\x57\x70\x0b\xf8\x6c\x27\x3b\xb7\xfb\x7b\x4d\x4b\x83\xea\xde\xdc\x7d\x17\xf5\xad\xd2\x54\x57\x6b\x94\x61\x07\xb5\xda\x4e\x9f\xc6\x24\xa3\x4a\x7f\x5b\xa4\x06\x3f\xac\xfc\xba\x8b\x08\x25\x54\xd3\x4c\xce\xff\x9d\xd1\x6c\xf3\x65\x08\x01\xa9\x37\x7e\x27\xce\x10\x61\x1d\x39\xab\x69\xfd\xfd\xa9\x22\x46\xfe\x33\x50\xc2\xb5\x22\x25\xcb\xd8\x03\x15\xda\x7d\x7e\x87\x55\x19\x4f\xed\xb6\x6c\x05\x38\xde\x98\x36\x53\xa6\x59\x99\x73\xd1\x1e\xe7\x0e\xbe\x7f\x23\x45\xca\xd1\x68\x06\xc6\x1b\xfc\xa2\x3d\xd6\x76\xa8\xdc\x66\xf1\xdf\x61\xe3\x6f\xd7\xa3\xf4\xe6\xd3\xde\x1e\x7c\x6d\x6a\x19\xf9\x05\x3e\x04\x87\xc9\xd6\xdc\xd6\x76\x8f\xdc\x0b\xc3\x5f\x43\x3e\xf2\xcd\x7b\xd3\xc9\xe6\x74\xb1\x37\x63\x07\x0e\x38\x85\xed\x91\x82\x63\x3b\xef\x6d\xbe\x00\xbb\xa0\x11\x5b\x37\x63\xb4\x3a\x95\xed\x98\xba\xb5\xf1\x6f\x56\x3e\xc3\xec\x2b\xb5\x4b\x11\x3a\x57\xb4\x5e\xda\x4e\x59\x82\xf8\xc6\x30\x16\x2f\xb4\xce\x7f\x6b\x2d\x5e\x55\xfa\x38\xe5\x58\x20\x29\x0c\x2c\xb7\x1f\xc7\x72\xde\xd8\xc8\xa8\xd2\xca\x73\x94\x14\x9c\x61\x26\x74\x2a\xec\x66\x02\x3d\x63\x34\xb5\x0f\x0d\xdd\x34\x02\x3c\xfc\x36\xb2\x8e\x7e\x41\x0c\x0a\xba\xcb\x3a\xd3\x27\xc5\x04\xdd\xe0\x04\x70\xf1\xa5\xb4\x4a\x41\x9b\x6f\xd0\x60\x15\xe0\x2e\x46\x44\x55\xc9\x82\x50\x65\x16\x66\xae\x83\xc1\x17\x6c\x92\x53\xc1\x67\x4c\xe9\x49\x5d\x95\x57\x7d\xff\xdb\xbf\x75\xb1\x1d\x6f\x65\x49\x6c\xd0\xf3\xc8\xe5\x99\xb6\x6b\x6c\x60\x8e\x2b\xdc\x88\xba\xe7\x46\x3f\x51\xc8\xd4\x2e\xf8\x11\x96\xa2\xe9\xbd\x21\xa5\xb8\x94\x8a\x81\xb1\xbe\x8b\x47\x39\x31\x6c\xaf\x37\xed\xff\x36\xb4\xf3\x7f\x4e\xc8\xd9\x23\x30\x21\x27\xe6\xcf\x13\x9c\x4e\x1d\xaa\xe6\xab\x5f\x9a\x69\x61\x3e\xb6\x92\xcf\xe7\xac\xec\x34\x6d\x42\x4d\xdd\x07\x26\xf4\xb9\xcd\xb1\x2d\xa4\xd7\x95\x73\xaf\x6b\xb4\x09\xab\xd3\xfc\xfe\xb7\x7f\x3b\x21\x67\xed\x3d\xe9\x18\x92\x8b\x94\x7d\x22\xbf\x45\x23\x25\x57\x66\xf7\xce\x27\xa8\x7e\x50\x4b\xa1\xe9\x27\x33\x62\xb2\x90\x8a\x09\x54\x07\x69\x49\x16\xf4\x81\x11\x25\x73\x46\x1e\x59\x96\x8d\xad\xd9\x96\x3c\xd2\x65\x77\x6a\x71\x77\x84\x90\x47\x95\x14\xb4\xd4\x2d\x30\xee\x02\x0e\x54\x50\xc2\x4c\x0d\xa8\xcd\x85\xf3\xab\x9b\x71\x61\xfd\x57\x74\x4b\x79\xad\x2a\x04\x1d\x2d\x49\xb2\xa0\x62\x5e\x67\x18\x9d\x55\xba\x2a\x3b\x78\xe0\xc0\x4b\x7f\xcf\xc5\x5e\xd3\x43\x7e\xc5\xc5\xaa\xe7\x66\xe7\xc6\x6c\xd0\x1c\xcf\xb9\x76\x49\x03\x6c\x34\x90\x5e\x5e\x80\xee\x96\x4f\x2b\x2d\x4b\x75\x91\xb2\x07\x96\x5d\x28\x3e\x1f\xd3\x32\x59\x70\xcd\x12\xb3\x27\x17\xb4\xe0\xe3\x44\x0a\x03\x88\x90\x48\x38\x4f\x7f\x69\x76\x42\x8d\xcd\x42\x77\xab\x92\x03\x77\xac\xdb\xf8\x11\xb7\x63\x7d\x8c\x1d\xcf\xa3\x6b\x8f\xd8\xa0\x00\x45\x68\xfc\x2e\xa1\xb6\xf1\xd9\xb7\x0a\x14\x6e\x17\xfb\xd8\x29\x57\x0e\x3a\x9e\x17\xe8\xdc\x2f\x5b\x01\x3d\x59\x1d\xc3\x20\x13\x74\xea\x05\x5c\xd3\xa2\x4a\x39\x4d\x91\x6c\x51\xd1\x19\x98\x7f\xe0\x3b\x6b\xce\xa3\x2a\xcd\xcc\x96\x63\x6b\xb2\x19\x53\x91\x9a\x7f\x63\x1e\x8e\x64\xb7\xe3\x69\xe0\x01\x54\x7c\xaf\xc8\xef\xdb\x9b\xab\xe7\x07\xcf\x8b\x5f\x56\x7c\x1f\x98\xae\x8f\x35\xc9\xca\x01\x81\xcc\x39\x8a\x40\xe8\x88\x5b\x56\xcc\x31\x4c\x6d\xc1\x87\x2b\xd7\xeb\xff\xb6\xae\x0b\x75\x19\x9c\x2e\x56\x7d\xb7\x3b\x81\x27\x93\x04\xce\xf7\xeb\xe6\x0b\x5f\x55\x0d\x0e\xfe\x54\x69\x5b\x68\xc4\x25\xb1\x6d\x2d\xc3\x09\xc3\x40\xc6\xb7\xb3\x52\x41\x07\xe3\xdc\x23\xcd\x44\xc6\x1b\x6b\x37\x24\xb5\xb0\xdb\x29\xc3\x7b\x72\x31\x88\x46\x19\x57\x75\xb1\x0d\x23\x26\x2b\x4d\xe8\x03\xe5\x19\x58\xe9\xe4\x54\xb1\xf2\x81\xe2\xeb\x58\x0a\x8b\xae\xca\xf4\x78\x6d\x35\x32\xd8\x47\x92\xa8\xdd\x1a\xd6\x4f\x65\xd7\x02\x40\xca\x5e\x99\xfd\xd6\x59\xef\x45\x9e\x46\x55\xc6\xd6\x9f\xcd\x08\x3d\xc5\x63\x03\x7f\xff\xce\x68\xa9\xa7\x8c\xea\x8f\x7c\x17\x87\xb2\x06\xd2\xad\xef\x9c\x1e\xb0\x01\xe8\x47\x46\xe6\x52\x1b\x36\xb7\x02\xd8\x47\x79\x04\x13\xe0\xd7\x80\x76\x68\x88\x6e\x56\xf9\xb1\xa4\x90\x12\x43\x8a\xc8\x65\xb6\x3f\x5c\x5f\xa7\x95\x7d\x2c\x24\x69\x7c\x1b\x73\x24\x4b\xc1\xec\xd9\xa1\xa1\x70\x77\xf6\x8e\xbd\x2e\x39\x67\x4a\xed\x4c\x9e\xdc\x8e\x1e\xc1\xb7\xf1\x2a\xaf\x98\xd8\x73\xf7\x1b\x06\x9f\x1b\x21\x26\x65\x9a\xf2\xcc\x5d\x65\xdc\x8a\x7a\x97\xba\xb0\xeb\xce\x05\x96\x8c\xaa\x5d\x0c\x4d\x6b\xd6\x1f\xe0\x65\x9c\xb4\x14\x6c\xfc\x28\xcb\x94\xbc\xa1\x39\xcb\xde\x50\xc5\x6c\x5f\x7e\x82\x1d\x3c\xa3\x53\xb5\xd7\x29\x6f\x56\xbf\x6e\x99\x32\x2a\x15\x1b\x03\x06\xfc\xd5\x08\xd0\x38\xc1\x91\xd3\x82\x7f\x2c\x2b\x36\x22\x6f\x0d\xf5\x1a\x91\x6f\xc5\xbd\x90\x8f\x4f\x9b\xab\xde\x69\x1c\x6c\xcd\xd4\x77\xd1\x74\x99\xdb\x5b\x8a\xc4\x7a\xba\x3d\x67\x64\x11\xfe\x16\x6d\x77\x9b\xd8\xd4\xaf\xba\x19\x99\x7f\xae\xa9\x36\x8d\x28\x5f\xca\x79\xc9\x14\x26\x25\xdf\xe8\x43\x1f\x6a\x20\xf9\x92\x09\x9b\x0c\xa7\x73\x7a\x37\x9b\xbe\x72\x33\x75\x74\x6d\xde\xfc\x62\xcf\xdb\x0e\x56\x64\x1b\x59\x8d\xdd\x01\x10\xde\x44\xb7\x28\x35\xb7\xcd\x70\xb3\x32\xd3\xa3\x7a\xde\xbb\xc8\x94\xec\xd2\xc4\xbb\xd5\xbd\xb9\xfb\x6e\xfb\x66\x6f\xa5\x7d\x5d\xf4\xa9\x5b\xdd\xf9\x54\x45\x67\xe7\x9d\xe9\x54\x6e\x86\x72\xfa\xc7\x51\x68\x3e\xa7\x2a\xf3\x79\x95\x98\x47\x57\x5f\x1e\x55\x71\x79\x3c\x95\x65\x6f\x65\xe5\xb1\xd4\x94\x9d\x57\x76\x97\x6a\x32\xf4\xb6\xc6\xa9\x23\x9f\x5d\x11\xd9\xb9\x27\xbb\x94\x8f\xa1\x7b\x12\xa7\x70\x3c\xb6\xaa\x31\x68\x0b\x76\xaa\x17\x63\xf6\x21\x52\xa5\x78\x64\x65\x62\xe7\x5e\x04\x2a\x10\x43\x77\xe4\x70\x4a\xc3\x17\xab\x2e\xec\xdc\xe2\x1d\x2a\xc2\xd0\x6d\x8d\x52\x0b\x1e\x59\x21\xd8\xb1\xfe\x38\x25\xa0\xe5\x66\x59\x1a\x22\x0c\xdc\x78\x2f\xfb\xe2\x80\x65\x45\xc1\xb5\xcf\xbe\xe1\x5c\x09\x7d\xa6\xb5\xaf\x4c\x60\xd8\xf4\xbe\x9e\x2d\x76\xca\xe1\x7c\xb7\x15\x16\x58\x5a\x4b\xaf\x5d\x4b\x20\xe4\xea\xfa\xf6\xc3\xf5\x9b\xcb\x8f\xd7\x57\xab\xfc\x7e\x3c\x63\xbe\x5b\x25\x35\xf6\x18\xf3\x2d\x2f\x18\x62\xb5\xe5\x27\x03\x5b\x5b\x7e\xaa\x2a\xbe\xe9\xab\xa7\x8b\x09\x4f\xe2\x19\x9e\x44\x5c\xbb\xf1\xc4\x9e\x10\x05\xc0\x16\xfa\xe3\x1a\xfe\x75\x21\xb3\x54\xb9\x38\x86\x9b\xab\x3a\xb3\x01\x17\x49\x56\xa5\x86\xb9\xfb\xf6\xdb\x9b\x2b\x35\x21\xe4\x2f\x2c\xa1\x95\x32\x4c\xe2\x76\xc5\x80\x14\xa7\x9a\x7c\xf3\xfe\xeb\xff\x80\x28\x36\xf8\x72\x54\x67\x92\x85\xd2\x84\x9c\x62\x75\x45\x58\x28\xf4\x8a\x0c\x24\xcc\x28\xa1\x85\xc1\xc0\xdb\x8d\x0b\x1c\xd3\xe1\x18\x1e\x71\xc1\xb2\xc2\x50\x87\x7b\x46\x9a\xe2\x6e\x66\x40\xf8\x15\xe3\x34\xac\xbf\xfa\x9c\x69\xcc\x72\xb0\xcb\x25\x7d\xe7\x01\x74\xe8\xf2\x9f\xa0\xc5\x6f\x29\x26\xac\x9e\xe7\x91\x2a\xab\x0b\xdd\x38\xdb\x0e\x50\xe9\xd6\xfc\x6d\x57\x9e\x6d\x51\x9b\x21\x65\x81\xbf\xd6\xe6\x6c\x26\xdb\x68\xc8\xd0\xed\x8d\xeb\x60\x3d\xfd\x76\x1f\xc7\xcd\x95\xaa\xd7\xb4\x64\x6c\x75\x93\x5b\x03\xd7\x31\x3f\xde\x94\xc3\xe6\xa2\x58\xf9\xc0\xd2\xd7\x60\x39\x72\x8f\xd0\x8f\xb8\xfd\xac\x9a\x3a\x66\xc6\xc3\x3a\x56\xd7\x47\xfe\xfb\x7f\x7e\xf1\xff\x07\x00\x00\xff\xff\xc4\x49\x06\xc4\x66\x78\x03\x00") func operatorsCoreosCom_subscriptionsYamlBytes() ([]byte, error) { return bindataRead( diff --git a/vendor/github.com/ulikunitz/xz/.gitignore b/vendor/github.com/ulikunitz/xz/.gitignore deleted file mode 100644 index eb3d5f5173..0000000000 --- a/vendor/github.com/ulikunitz/xz/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# .gitignore - -TODO.html -README.html - -lzma/writer.txt -lzma/reader.txt - -cmd/gxz/gxz -cmd/xb/xb - -# test executables -*.test - -# profile files -*.out - -# vim swap file -.*.swp - -# executables on windows -*.exe - -# default compression test file -enwik8* - -# file generated by example -example.xz \ No newline at end of file diff --git a/vendor/github.com/ulikunitz/xz/LICENSE b/vendor/github.com/ulikunitz/xz/LICENSE deleted file mode 100644 index 8a7f0877d3..0000000000 --- a/vendor/github.com/ulikunitz/xz/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2014-2022 Ulrich Kunitz -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* My name, Ulrich Kunitz, may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/ulikunitz/xz/README.md b/vendor/github.com/ulikunitz/xz/README.md deleted file mode 100644 index 5547185213..0000000000 --- a/vendor/github.com/ulikunitz/xz/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Package xz - -This Go language package supports the reading and writing of xz -compressed streams. It includes also a gxz command for compressing and -decompressing data. The package is completely written in Go and doesn't -have any dependency on any C code. - -The package is currently under development. There might be bugs and APIs -are not considered stable. At this time the package cannot compete with -the xz tool regarding compression speed and size. The algorithms there -have been developed over a long time and are highly optimized. However -there are a number of improvements planned and I'm very optimistic about -parallel compression and decompression. Stay tuned! - -## Using the API - -The following example program shows how to use the API. - -```go -package main - -import ( - "bytes" - "io" - "log" - "os" - - "github.com/ulikunitz/xz" -) - -func main() { - const text = "The quick brown fox jumps over the lazy dog.\n" - var buf bytes.Buffer - // compress text - w, err := xz.NewWriter(&buf) - if err != nil { - log.Fatalf("xz.NewWriter error %s", err) - } - if _, err := io.WriteString(w, text); err != nil { - log.Fatalf("WriteString error %s", err) - } - if err := w.Close(); err != nil { - log.Fatalf("w.Close error %s", err) - } - // decompress buffer and write output to stdout - r, err := xz.NewReader(&buf) - if err != nil { - log.Fatalf("NewReader error %s", err) - } - if _, err = io.Copy(os.Stdout, r); err != nil { - log.Fatalf("io.Copy error %s", err) - } -} -``` - -## Documentation - -You can find the full documentation at [pkg.go.dev](https://pkg.go.dev/github.com/ulikunitz/xz). - -## Using the gxz compression tool - -The package includes a gxz command line utility for compression and -decompression. - -Use following command for installation: - - $ go get github.com/ulikunitz/xz/cmd/gxz - -To test it call the following command. - - $ gxz bigfile - -After some time a much smaller file bigfile.xz will replace bigfile. -To decompress it use the following command. - - $ gxz -d bigfile.xz - diff --git a/vendor/github.com/ulikunitz/xz/SECURITY.md b/vendor/github.com/ulikunitz/xz/SECURITY.md deleted file mode 100644 index 5f7ec01b3b..0000000000 --- a/vendor/github.com/ulikunitz/xz/SECURITY.md +++ /dev/null @@ -1,10 +0,0 @@ -# Security Policy - -## Supported Versions - -Currently the last minor version v0.5.x is supported. - -## Reporting a Vulnerability - -Report a vulnerability by creating a Github issue at -. Expect a response in a week. diff --git a/vendor/github.com/ulikunitz/xz/TODO.md b/vendor/github.com/ulikunitz/xz/TODO.md deleted file mode 100644 index a3d6f19250..0000000000 --- a/vendor/github.com/ulikunitz/xz/TODO.md +++ /dev/null @@ -1,372 +0,0 @@ -# TODO list - -## Release v0.5.x - -1. Support check flag in gxz command. - -## Release v0.6 - -1. Review encoder and check for lzma improvements under xz. -2. Fix binary tree matcher. -3. Compare compression ratio with xz tool using comparable parameters and optimize parameters -4. rename operation action and make it a simple type of size 8 -5. make maxMatches, wordSize parameters -6. stop searching after a certain length is found (parameter sweetLen) - -## Release v0.7 - -1. Optimize code -2. Do statistical analysis to get linear presets. -3. Test sync.Pool compatability for xz and lzma Writer and Reader -4. Fuzz optimized code. - -## Release v0.8 - -1. Support parallel go routines for writing and reading xz files. -2. Support a ReaderAt interface for xz files with small block sizes. -3. Improve compatibility between gxz and xz -4. Provide manual page for gxz - -## Release v0.9 - -1. Improve documentation -2. Fuzz again - -## Release v1.0 - -1. Full functioning gxz -2. Add godoc URL to README.md (godoc.org) -3. Resolve all issues. -4. Define release candidates. -5. Public announcement. - -## Package lzma - -### v0.6 - -* Rewrite Encoder into a simple greedy one-op-at-a-time encoder including - * simple scan at the dictionary head for the same byte - * use the killer byte (requiring matches to get longer, the first test should be the byte that would make the match longer) - -## Optimizations - -* There may be a lot of false sharing in lzma. State; check whether this can be improved by reorganizing the internal structure of it. - -* Check whether batching encoding and decoding improves speed. - -### DAG optimizations - -* Use full buffer to create minimal bit-length above range encoder. -* Might be too slow (see v0.4) - -### Different match finders - -* hashes with 2, 3 characters additional to 4 characters -* binary trees with 2-7 characters (uint64 as key, use uint32 as - - pointers into a an array) - -* rb-trees with 2-7 characters (uint64 as key, use uint32 as pointers - - into an array with bit-steeling for the colors) - -## Release Procedure - -* execute goch -l for all packages; probably with lower param like 0.5. -* check orthography with gospell -* Write release notes in doc/relnotes. -* Update README.md -* xb copyright . in xz directory to ensure all new files have Copyright header -* `VERSION= go generate github.com/ulikunitz/xz/...` to update version files -* Execute test for Linux/amd64, Linux/x86 and Windows/amd64. -* Update TODO.md - write short log entry -* `git checkout master && git merge dev` -* `git tag -a ` -* `git push` - -## Log - -### 2022-12-12 - -Matt Dantay (@bodgit) reported an issue with the LZMA reader. The implementation -returned an error if the dictionary size was less than 4096 byte, but the -recommendation stated the actual used window size should be set to 4096 byte in -that case. It actually was the pull request -[#52](https://github.com/ulikunitz/xz/pull/52). The new patch v0.5.11 will fix -it. - -### 2021-02-02 - -Mituo Heijo has fuzzed xz and found a bug in the function readIndexBody. The -function allocated a slice of records immediately after reading the value -without further checks. Sincex the number has been too large the make function -did panic. The fix is to check the number against the expected number of records -before allocating the records. - -### 2020-12-17 - -Release v0.5.9 fixes warnings, a typo and adds SECURITY.md. - -One fix is interesting. - -```go -const ( - a byte = 0x1 - b = 0x2 -) -``` - -The constants a and b don't have the same type. Correct is - -```go -const ( - a byte = 0x1 - b byte = 0x2 -) -``` - -### 2020-08-19 - -Release v0.5.8 fixes issue -[issue #35](https://github.com/ulikunitz/xz/issues/35). - -### 2020-02-24 - -Release v0.5.7 supports the check-ID None and fixes -[issue #27](https://github.com/ulikunitz/xz/issues/27). - -### 2019-02-20 - -Release v0.5.6 supports the go.mod file. - -### 2018-10-28 - -Release v0.5.5 fixes issues #19 observing ErrLimit outputs. - -### 2017-06-05 - -Release v0.5.4 fixes issues #15 of another problem with the padding size -check for the xz block header. I removed the check completely. - -### 2017-02-15 - -Release v0.5.3 fixes issue #12 regarding the decompression of an empty -XZ stream. Many thanks to Tomasz Kłak, who reported the issue. - -### 2016-12-02 - -Release v0.5.2 became necessary to allow the decoding of xz files with -4-byte padding in the block header. Many thanks to Greg, who reported -the issue. - -### 2016-07-23 - -Release v0.5.1 became necessary to fix problems with 32-bit platforms. -Many thanks to Bruno Brigas, who reported the issue. - -### 2016-07-04 - -Release v0.5 provides improvements to the compressor and provides support for -the decompression of xz files with multiple xz streams. - -### 2016-01-31 - -Another compression rate increase by checking the byte at length of the -best match first, before checking the whole prefix. This makes the -compressor even faster. We have now a large time budget to beat the -compression ratio of the xz tool. For enwik8 we have now over 40 seconds -to reduce the compressed file size for another 7 MiB. - -### 2016-01-30 - -I simplified the encoder. Speed and compression rate increased -dramatically. A high compression rate affects also the decompression -speed. The approach with the buffer and optimizing for operation -compression rate has not been successful. Going for the maximum length -appears to be the best approach. - -### 2016-01-28 - -The release v0.4 is ready. It provides a working xz implementation, -which is rather slow, but works and is interoperable with the xz tool. -It is an important milestone. - -### 2016-01-10 - -I have the first working implementation of an xz reader and writer. I'm -happy about reaching this milestone. - -### 2015-12-02 - -I'm now ready to implement xz because, I have a working LZMA2 -implementation. I decided today that v0.4 will use the slow encoder -using the operations buffer to be able to go back, if I intend to do so. - -### 2015-10-21 - -I have restarted the work on the library. While trying to implement -LZMA2, I discovered that I need to resimplify the encoder and decoder -functions. The option approach is too complicated. Using a limited byte -writer and not caring for written bytes at all and not to try to handle -uncompressed data simplifies the LZMA encoder and decoder much. -Processing uncompressed data and handling limits is a feature of the -LZMA2 format not of LZMA. - -I learned an interesting method from the LZO format. If the last copy is -too far away they are moving the head one 2 bytes and not 1 byte to -reduce processing times. - -### 2015-08-26 - -I have now reimplemented the lzma package. The code is reasonably fast, -but can still be optimized. The next step is to implement LZMA2 and then -xz. - -### 2015-07-05 - -Created release v0.3. The version is the foundation for a full xz -implementation that is the target of v0.4. - -### 2015-06-11 - -The gflag package has been developed because I couldn't use flag and -pflag for a fully compatible support of gzip's and lzma's options. It -seems to work now quite nicely. - -### 2015-06-05 - -The overflow issue was interesting to research, however Henry S. Warren -Jr. Hacker's Delight book was very helpful as usual and had the issue -explained perfectly. Fefe's information on his website was based on the -C FAQ and quite bad, because it didn't address the issue of -MININT == -MININT. - -### 2015-06-04 - -It has been a productive day. I improved the interface of lzma. Reader -and lzma. Writer and fixed the error handling. - -### 2015-06-01 - -By computing the bit length of the LZMA operations I was able to -improve the greedy algorithm implementation. By using an 8 MByte buffer -the compression rate was not as good as for xz but already better then -gzip default. - -Compression is currently slow, but this is something we will be able to -improve over time. - -### 2015-05-26 - -Checked the license of ogier/pflag. The binary lzmago binary should -include the license terms for the pflag library. - -I added the endorsement clause as used by Google for the Go sources the -LICENSE file. - -### 2015-05-22 - -The package lzb contains now the basic implementation for creating or -reading LZMA byte streams. It allows the support for the implementation -of the DAG-shortest-path algorithm for the compression function. - -### 2015-04-23 - -Completed yesterday the lzbase classes. I'm a little bit concerned that -using the components may require too much code, but on the other hand -there is a lot of flexibility. - -### 2015-04-22 - -Implemented Reader and Writer during the Bayern game against Porto. The -second half gave me enough time. - -### 2015-04-21 - -While showering today morning I discovered that the design for OpEncoder -and OpDecoder doesn't work, because encoding/decoding might depend on -the current status of the dictionary. This is not exactly the right way -to start the day. - -Therefore we need to keep the Reader and Writer design. This time around -we simplify it by ignoring size limits. These can be added by wrappers -around the Reader and Writer interfaces. The Parameters type isn't -needed anymore. - -However I will implement a ReaderState and WriterState type to use -static typing to ensure the right State object is combined with the -right lzbase. Reader and lzbase. Writer. - -As a start I have implemented ReaderState and WriterState to ensure -that the state for reading is only used by readers and WriterState only -used by Writers. - -### 2015-04-20 - -Today I implemented the OpDecoder and tested OpEncoder and OpDecoder. - -### 2015-04-08 - -Came up with a new simplified design for lzbase. I implemented already -the type State that replaces OpCodec. - -### 2015-04-06 - -The new lzma package is now fully usable and lzmago is using it now. The -old lzma package has been completely removed. - -### 2015-04-05 - -Implemented lzma. Reader and tested it. - -### 2015-04-04 - -Implemented baseReader by adapting code form lzma. Reader. - -### 2015-04-03 - -The opCodec has been copied yesterday to lzma2. opCodec has a high -number of dependencies on other files in lzma2. Therefore I had to copy -almost all files from lzma. - -### 2015-03-31 - -Removed only a TODO item. - -However in Francesco Campoy's presentation "Go for Javaneros -(Javaïstes?)" is the the idea that using an embedded field E, all the -methods of E will be defined on T. If E is an interface T satisfies E. - - - -I have never used this, but it seems to be a cool idea. - -### 2015-03-30 - -Finished the type writerDict and wrote a simple test. - -### 2015-03-25 - -I started to implement the writerDict. - -### 2015-03-24 - -After thinking long about the LZMA2 code and several false starts, I -have now a plan to create a self-sufficient lzma2 package that supports -the classic LZMA format as well as LZMA2. The core idea is to support a -baseReader and baseWriter type that support the basic LZMA stream -without any headers. Both types must support the reuse of dictionaries -and the opCodec. - -### 2015-01-10 - -1. Implemented simple lzmago tool -2. Tested tool against large 4.4G file - * compression worked correctly; tested decompression with lzma - * decompression hits a full buffer condition -3. Fixed a bug in the compressor and wrote a test for it -4. Executed full cycle for 4.4 GB file; performance can be improved ;-) - -### 2015-01-11 - -* Release v0.2 because of the working LZMA encoder and decoder diff --git a/vendor/github.com/ulikunitz/xz/bits.go b/vendor/github.com/ulikunitz/xz/bits.go deleted file mode 100644 index b30f1ec97d..0000000000 --- a/vendor/github.com/ulikunitz/xz/bits.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import ( - "errors" - "io" -) - -// putUint32LE puts the little-endian representation of x into the first -// four bytes of p. -func putUint32LE(p []byte, x uint32) { - p[0] = byte(x) - p[1] = byte(x >> 8) - p[2] = byte(x >> 16) - p[3] = byte(x >> 24) -} - -// putUint64LE puts the little-endian representation of x into the first -// eight bytes of p. -func putUint64LE(p []byte, x uint64) { - p[0] = byte(x) - p[1] = byte(x >> 8) - p[2] = byte(x >> 16) - p[3] = byte(x >> 24) - p[4] = byte(x >> 32) - p[5] = byte(x >> 40) - p[6] = byte(x >> 48) - p[7] = byte(x >> 56) -} - -// uint32LE converts a little endian representation to an uint32 value. -func uint32LE(p []byte) uint32 { - return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | - uint32(p[3])<<24 -} - -// putUvarint puts a uvarint representation of x into the byte slice. -func putUvarint(p []byte, x uint64) int { - i := 0 - for x >= 0x80 { - p[i] = byte(x) | 0x80 - x >>= 7 - i++ - } - p[i] = byte(x) - return i + 1 -} - -// errOverflow indicates an overflow of the 64-bit unsigned integer. -var errOverflowU64 = errors.New("xz: uvarint overflows 64-bit unsigned integer") - -// readUvarint reads a uvarint from the given byte reader. -func readUvarint(r io.ByteReader) (x uint64, n int, err error) { - const maxUvarintLen = 10 - - var s uint - i := 0 - for { - b, err := r.ReadByte() - if err != nil { - return x, i, err - } - i++ - if i > maxUvarintLen { - return x, i, errOverflowU64 - } - if b < 0x80 { - if i == maxUvarintLen && b > 1 { - return x, i, errOverflowU64 - } - return x | uint64(b)< 0 { - k = 4 - k - } - return k -} - -/*** Header ***/ - -// headerMagic stores the magic bytes for the header -var headerMagic = []byte{0xfd, '7', 'z', 'X', 'Z', 0x00} - -// HeaderLen provides the length of the xz file header. -const HeaderLen = 12 - -// Constants for the checksum methods supported by xz. -const ( - None byte = 0x0 - CRC32 byte = 0x1 - CRC64 byte = 0x4 - SHA256 byte = 0xa -) - -// errInvalidFlags indicates that flags are invalid. -var errInvalidFlags = errors.New("xz: invalid flags") - -// verifyFlags returns the error errInvalidFlags if the value is -// invalid. -func verifyFlags(flags byte) error { - switch flags { - case None, CRC32, CRC64, SHA256: - return nil - default: - return errInvalidFlags - } -} - -// flagstrings maps flag values to strings. -var flagstrings = map[byte]string{ - None: "None", - CRC32: "CRC-32", - CRC64: "CRC-64", - SHA256: "SHA-256", -} - -// flagString returns the string representation for the given flags. -func flagString(flags byte) string { - s, ok := flagstrings[flags] - if !ok { - return "invalid" - } - return s -} - -// newHashFunc returns a function that creates hash instances for the -// hash method encoded in flags. -func newHashFunc(flags byte) (newHash func() hash.Hash, err error) { - switch flags { - case None: - newHash = newNoneHash - case CRC32: - newHash = newCRC32 - case CRC64: - newHash = newCRC64 - case SHA256: - newHash = sha256.New - default: - err = errInvalidFlags - } - return -} - -// header provides the actual content of the xz file header: the flags. -type header struct { - flags byte -} - -// Errors returned by readHeader. -var errHeaderMagic = errors.New("xz: invalid header magic bytes") - -// ValidHeader checks whether data is a correct xz file header. The -// length of data must be HeaderLen. -func ValidHeader(data []byte) bool { - var h header - err := h.UnmarshalBinary(data) - return err == nil -} - -// String returns a string representation of the flags. -func (h header) String() string { - return flagString(h.flags) -} - -// UnmarshalBinary reads header from the provided data slice. -func (h *header) UnmarshalBinary(data []byte) error { - // header length - if len(data) != HeaderLen { - return errors.New("xz: wrong file header length") - } - - // magic header - if !bytes.Equal(headerMagic, data[:6]) { - return errHeaderMagic - } - - // checksum - crc := crc32.NewIEEE() - crc.Write(data[6:8]) - if uint32LE(data[8:]) != crc.Sum32() { - return errors.New("xz: invalid checksum for file header") - } - - // stream flags - if data[6] != 0 { - return errInvalidFlags - } - flags := data[7] - if err := verifyFlags(flags); err != nil { - return err - } - - h.flags = flags - return nil -} - -// MarshalBinary generates the xz file header. -func (h *header) MarshalBinary() (data []byte, err error) { - if err = verifyFlags(h.flags); err != nil { - return nil, err - } - - data = make([]byte, 12) - copy(data, headerMagic) - data[7] = h.flags - - crc := crc32.NewIEEE() - crc.Write(data[6:8]) - putUint32LE(data[8:], crc.Sum32()) - - return data, nil -} - -/*** Footer ***/ - -// footerLen defines the length of the footer. -const footerLen = 12 - -// footerMagic contains the footer magic bytes. -var footerMagic = []byte{'Y', 'Z'} - -// footer represents the content of the xz file footer. -type footer struct { - indexSize int64 - flags byte -} - -// String prints a string representation of the footer structure. -func (f footer) String() string { - return fmt.Sprintf("%s index size %d", flagString(f.flags), f.indexSize) -} - -// Minimum and maximum for the size of the index (backward size). -const ( - minIndexSize = 4 - maxIndexSize = (1 << 32) * 4 -) - -// MarshalBinary converts footer values into an xz file footer. Note -// that the footer value is checked for correctness. -func (f *footer) MarshalBinary() (data []byte, err error) { - if err = verifyFlags(f.flags); err != nil { - return nil, err - } - if !(minIndexSize <= f.indexSize && f.indexSize <= maxIndexSize) { - return nil, errors.New("xz: index size out of range") - } - if f.indexSize%4 != 0 { - return nil, errors.New( - "xz: index size not aligned to four bytes") - } - - data = make([]byte, footerLen) - - // backward size (index size) - s := (f.indexSize / 4) - 1 - putUint32LE(data[4:], uint32(s)) - // flags - data[9] = f.flags - // footer magic - copy(data[10:], footerMagic) - - // CRC-32 - crc := crc32.NewIEEE() - crc.Write(data[4:10]) - putUint32LE(data, crc.Sum32()) - - return data, nil -} - -// UnmarshalBinary sets the footer value by unmarshalling an xz file -// footer. -func (f *footer) UnmarshalBinary(data []byte) error { - if len(data) != footerLen { - return errors.New("xz: wrong footer length") - } - - // magic bytes - if !bytes.Equal(data[10:], footerMagic) { - return errors.New("xz: footer magic invalid") - } - - // CRC-32 - crc := crc32.NewIEEE() - crc.Write(data[4:10]) - if uint32LE(data) != crc.Sum32() { - return errors.New("xz: footer checksum error") - } - - var g footer - // backward size (index size) - g.indexSize = (int64(uint32LE(data[4:])) + 1) * 4 - - // flags - if data[8] != 0 { - return errInvalidFlags - } - g.flags = data[9] - if err := verifyFlags(g.flags); err != nil { - return err - } - - *f = g - return nil -} - -/*** Block Header ***/ - -// blockHeader represents the content of an xz block header. -type blockHeader struct { - compressedSize int64 - uncompressedSize int64 - filters []filter -} - -// String converts the block header into a string. -func (h blockHeader) String() string { - var buf bytes.Buffer - first := true - if h.compressedSize >= 0 { - fmt.Fprintf(&buf, "compressed size %d", h.compressedSize) - first = false - } - if h.uncompressedSize >= 0 { - if !first { - buf.WriteString(" ") - } - fmt.Fprintf(&buf, "uncompressed size %d", h.uncompressedSize) - first = false - } - for _, f := range h.filters { - if !first { - buf.WriteString(" ") - } - fmt.Fprintf(&buf, "filter %s", f) - first = false - } - return buf.String() -} - -// Masks for the block flags. -const ( - filterCountMask = 0x03 - compressedSizePresent = 0x40 - uncompressedSizePresent = 0x80 - reservedBlockFlags = 0x3C -) - -// errIndexIndicator signals that an index indicator (0x00) has been found -// instead of an expected block header indicator. -var errIndexIndicator = errors.New("xz: found index indicator") - -// readBlockHeader reads the block header. -func readBlockHeader(r io.Reader) (h *blockHeader, n int, err error) { - var buf bytes.Buffer - buf.Grow(20) - - // block header size - z, err := io.CopyN(&buf, r, 1) - n = int(z) - if err != nil { - return nil, n, err - } - s := buf.Bytes()[0] - if s == 0 { - return nil, n, errIndexIndicator - } - - // read complete header - headerLen := (int(s) + 1) * 4 - buf.Grow(headerLen - 1) - z, err = io.CopyN(&buf, r, int64(headerLen-1)) - n += int(z) - if err != nil { - return nil, n, err - } - - // unmarshal block header - h = new(blockHeader) - if err = h.UnmarshalBinary(buf.Bytes()); err != nil { - return nil, n, err - } - - return h, n, nil -} - -// readSizeInBlockHeader reads the uncompressed or compressed size -// fields in the block header. The present value informs the function -// whether the respective field is actually present in the header. -func readSizeInBlockHeader(r io.ByteReader, present bool) (n int64, err error) { - if !present { - return -1, nil - } - x, _, err := readUvarint(r) - if err != nil { - return 0, err - } - if x >= 1<<63 { - return 0, errors.New("xz: size overflow in block header") - } - return int64(x), nil -} - -// UnmarshalBinary unmarshals the block header. -func (h *blockHeader) UnmarshalBinary(data []byte) error { - // Check header length - s := data[0] - if data[0] == 0 { - return errIndexIndicator - } - headerLen := (int(s) + 1) * 4 - if len(data) != headerLen { - return fmt.Errorf("xz: data length %d; want %d", len(data), - headerLen) - } - n := headerLen - 4 - - // Check CRC-32 - crc := crc32.NewIEEE() - crc.Write(data[:n]) - if crc.Sum32() != uint32LE(data[n:]) { - return errors.New("xz: checksum error for block header") - } - - // Block header flags - flags := data[1] - if flags&reservedBlockFlags != 0 { - return errors.New("xz: reserved block header flags set") - } - - r := bytes.NewReader(data[2:n]) - - // Compressed size - var err error - h.compressedSize, err = readSizeInBlockHeader( - r, flags&compressedSizePresent != 0) - if err != nil { - return err - } - - // Uncompressed size - h.uncompressedSize, err = readSizeInBlockHeader( - r, flags&uncompressedSizePresent != 0) - if err != nil { - return err - } - - h.filters, err = readFilters(r, int(flags&filterCountMask)+1) - if err != nil { - return err - } - - // Check padding - // Since headerLen is a multiple of 4 we don't need to check - // alignment. - k := r.Len() - // The standard spec says that the padding should have not more - // than 3 bytes. However we found paddings of 4 or 5 in the - // wild. See https://github.com/ulikunitz/xz/pull/11 and - // https://github.com/ulikunitz/xz/issues/15 - // - // The only reasonable approach seems to be to ignore the - // padding size. We still check that all padding bytes are zero. - if !allZeros(data[n-k : n]) { - return errPadding - } - return nil -} - -// MarshalBinary marshals the binary header. -func (h *blockHeader) MarshalBinary() (data []byte, err error) { - if !(minFilters <= len(h.filters) && len(h.filters) <= maxFilters) { - return nil, errors.New("xz: filter count wrong") - } - for i, f := range h.filters { - if i < len(h.filters)-1 { - if f.id() == lzmaFilterID { - return nil, errors.New( - "xz: LZMA2 filter is not the last") - } - } else { - // last filter - if f.id() != lzmaFilterID { - return nil, errors.New("xz: " + - "last filter must be the LZMA2 filter") - } - } - } - - var buf bytes.Buffer - // header size must set at the end - buf.WriteByte(0) - - // flags - flags := byte(len(h.filters) - 1) - if h.compressedSize >= 0 { - flags |= compressedSizePresent - } - if h.uncompressedSize >= 0 { - flags |= uncompressedSizePresent - } - buf.WriteByte(flags) - - p := make([]byte, 10) - if h.compressedSize >= 0 { - k := putUvarint(p, uint64(h.compressedSize)) - buf.Write(p[:k]) - } - if h.uncompressedSize >= 0 { - k := putUvarint(p, uint64(h.uncompressedSize)) - buf.Write(p[:k]) - } - - for _, f := range h.filters { - fp, err := f.MarshalBinary() - if err != nil { - return nil, err - } - buf.Write(fp) - } - - // padding - for i := padLen(int64(buf.Len())); i > 0; i-- { - buf.WriteByte(0) - } - - // crc place holder - buf.Write(p[:4]) - - data = buf.Bytes() - if len(data)%4 != 0 { - panic("data length not aligned") - } - s := len(data)/4 - 1 - if !(1 < s && s <= 255) { - panic("wrong block header size") - } - data[0] = byte(s) - - crc := crc32.NewIEEE() - crc.Write(data[:len(data)-4]) - putUint32LE(data[len(data)-4:], crc.Sum32()) - - return data, nil -} - -// Constants used for marshalling and unmarshalling filters in the xz -// block header. -const ( - minFilters = 1 - maxFilters = 4 - minReservedID = 1 << 62 -) - -// filter represents a filter in the block header. -type filter interface { - id() uint64 - UnmarshalBinary(data []byte) error - MarshalBinary() (data []byte, err error) - reader(r io.Reader, c *ReaderConfig) (fr io.Reader, err error) - writeCloser(w io.WriteCloser, c *WriterConfig) (fw io.WriteCloser, err error) - // filter must be last filter - last() bool -} - -// readFilter reads a block filter from the block header. At this point -// in time only the LZMA2 filter is supported. -func readFilter(r io.Reader) (f filter, err error) { - br := lzma.ByteReader(r) - - // index - id, _, err := readUvarint(br) - if err != nil { - return nil, err - } - - var data []byte - switch id { - case lzmaFilterID: - data = make([]byte, lzmaFilterLen) - data[0] = lzmaFilterID - if _, err = io.ReadFull(r, data[1:]); err != nil { - return nil, err - } - f = new(lzmaFilter) - default: - if id >= minReservedID { - return nil, errors.New( - "xz: reserved filter id in block stream header") - } - return nil, errors.New("xz: invalid filter id") - } - if err = f.UnmarshalBinary(data); err != nil { - return nil, err - } - return f, err -} - -// readFilters reads count filters. At this point in time only the count -// 1 is supported. -func readFilters(r io.Reader, count int) (filters []filter, err error) { - if count != 1 { - return nil, errors.New("xz: unsupported filter count") - } - f, err := readFilter(r) - if err != nil { - return nil, err - } - return []filter{f}, err -} - -/*** Index ***/ - -// record describes a block in the xz file index. -type record struct { - unpaddedSize int64 - uncompressedSize int64 -} - -// readRecord reads an index record. -func readRecord(r io.ByteReader) (rec record, n int, err error) { - u, k, err := readUvarint(r) - n += k - if err != nil { - return rec, n, err - } - rec.unpaddedSize = int64(u) - if rec.unpaddedSize < 0 { - return rec, n, errors.New("xz: unpadded size negative") - } - - u, k, err = readUvarint(r) - n += k - if err != nil { - return rec, n, err - } - rec.uncompressedSize = int64(u) - if rec.uncompressedSize < 0 { - return rec, n, errors.New("xz: uncompressed size negative") - } - - return rec, n, nil -} - -// MarshalBinary converts an index record in its binary encoding. -func (rec *record) MarshalBinary() (data []byte, err error) { - // maximum length of a uvarint is 10 - p := make([]byte, 20) - n := putUvarint(p, uint64(rec.unpaddedSize)) - n += putUvarint(p[n:], uint64(rec.uncompressedSize)) - return p[:n], nil -} - -// writeIndex writes the index, a sequence of records. -func writeIndex(w io.Writer, index []record) (n int64, err error) { - crc := crc32.NewIEEE() - mw := io.MultiWriter(w, crc) - - // index indicator - k, err := mw.Write([]byte{0}) - n += int64(k) - if err != nil { - return n, err - } - - // number of records - p := make([]byte, 10) - k = putUvarint(p, uint64(len(index))) - k, err = mw.Write(p[:k]) - n += int64(k) - if err != nil { - return n, err - } - - // list of records - for _, rec := range index { - p, err := rec.MarshalBinary() - if err != nil { - return n, err - } - k, err = mw.Write(p) - n += int64(k) - if err != nil { - return n, err - } - } - - // index padding - k, err = mw.Write(make([]byte, padLen(int64(n)))) - n += int64(k) - if err != nil { - return n, err - } - - // crc32 checksum - putUint32LE(p, crc.Sum32()) - k, err = w.Write(p[:4]) - n += int64(k) - - return n, err -} - -// readIndexBody reads the index from the reader. It assumes that the -// index indicator has already been read. -func readIndexBody(r io.Reader, expectedRecordLen int) (records []record, n int64, err error) { - crc := crc32.NewIEEE() - // index indicator - crc.Write([]byte{0}) - - br := lzma.ByteReader(io.TeeReader(r, crc)) - - // number of records - u, k, err := readUvarint(br) - n += int64(k) - if err != nil { - return nil, n, err - } - recLen := int(u) - if recLen < 0 || uint64(recLen) != u { - return nil, n, errors.New("xz: record number overflow") - } - if recLen != expectedRecordLen { - return nil, n, fmt.Errorf( - "xz: index length is %d; want %d", - recLen, expectedRecordLen) - } - - // list of records - records = make([]record, recLen) - for i := range records { - records[i], k, err = readRecord(br) - n += int64(k) - if err != nil { - return nil, n, err - } - } - - p := make([]byte, padLen(int64(n+1)), 4) - k, err = io.ReadFull(br.(io.Reader), p) - n += int64(k) - if err != nil { - return nil, n, err - } - if !allZeros(p) { - return nil, n, errors.New("xz: non-zero byte in index padding") - } - - // crc32 - s := crc.Sum32() - p = p[:4] - k, err = io.ReadFull(br.(io.Reader), p) - n += int64(k) - if err != nil { - return records, n, err - } - if uint32LE(p) != s { - return nil, n, errors.New("xz: wrong checksum for index") - } - - return records, n, nil -} diff --git a/vendor/github.com/ulikunitz/xz/fox-check-none.xz b/vendor/github.com/ulikunitz/xz/fox-check-none.xz deleted file mode 100644 index 46043f7dc8..0000000000 Binary files a/vendor/github.com/ulikunitz/xz/fox-check-none.xz and /dev/null differ diff --git a/vendor/github.com/ulikunitz/xz/fox.xz b/vendor/github.com/ulikunitz/xz/fox.xz deleted file mode 100644 index 4b820bd5a1..0000000000 Binary files a/vendor/github.com/ulikunitz/xz/fox.xz and /dev/null differ diff --git a/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go b/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go deleted file mode 100644 index dae159db50..0000000000 --- a/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package hash - -// CyclicPoly provides a cyclic polynomial rolling hash. -type CyclicPoly struct { - h uint64 - p []uint64 - i int -} - -// ror rotates the unsigned 64-bit integer to right. The argument s must be -// less than 64. -func ror(x uint64, s uint) uint64 { - return (x >> s) | (x << (64 - s)) -} - -// NewCyclicPoly creates a new instance of the CyclicPoly structure. The -// argument n gives the number of bytes for which a hash will be executed. -// This number must be positive; the method panics if this isn't the case. -func NewCyclicPoly(n int) *CyclicPoly { - if n < 1 { - panic("argument n must be positive") - } - return &CyclicPoly{p: make([]uint64, 0, n)} -} - -// Len returns the length of the byte sequence for which a hash is generated. -func (r *CyclicPoly) Len() int { - return cap(r.p) -} - -// RollByte hashes the next byte and returns a hash value. The complete becomes -// available after at least Len() bytes have been hashed. -func (r *CyclicPoly) RollByte(x byte) uint64 { - y := hash[x] - if len(r.p) < cap(r.p) { - r.h = ror(r.h, 1) ^ y - r.p = append(r.p, y) - } else { - r.h ^= ror(r.p[r.i], uint(cap(r.p)-1)) - r.h = ror(r.h, 1) ^ y - r.p[r.i] = y - r.i = (r.i + 1) % cap(r.p) - } - return r.h -} - -// Stores the hash for the individual bytes. -var hash = [256]uint64{ - 0x2e4fc3f904065142, 0xc790984cfbc99527, - 0x879f95eb8c62f187, 0x3b61be86b5021ef2, - 0x65a896a04196f0a5, 0xc5b307b80470b59e, - 0xd3bff376a70df14b, 0xc332f04f0b3f1701, - 0x753b5f0e9abf3e0d, 0xb41538fdfe66ef53, - 0x1906a10c2c1c0208, 0xfb0c712a03421c0d, - 0x38be311a65c9552b, 0xfee7ee4ca6445c7e, - 0x71aadeded184f21e, 0xd73426fccda23b2d, - 0x29773fb5fb9600b5, 0xce410261cd32981a, - 0xfe2848b3c62dbc2d, 0x459eaaff6e43e11c, - 0xc13e35fc9c73a887, 0xf30ed5c201e76dbc, - 0xa5f10b3910482cea, 0x2945d59be02dfaad, - 0x06ee334ff70571b5, 0xbabf9d8070f44380, - 0xee3e2e9912ffd27c, 0x2a7118d1ea6b8ea7, - 0x26183cb9f7b1664c, 0xea71dac7da068f21, - 0xea92eca5bd1d0bb7, 0x415595862defcd75, - 0x248a386023c60648, 0x9cf021ab284b3c8a, - 0xfc9372df02870f6c, 0x2b92d693eeb3b3fc, - 0x73e799d139dc6975, 0x7b15ae312486363c, - 0xb70e5454a2239c80, 0x208e3fb31d3b2263, - 0x01f563cabb930f44, 0x2ac4533d2a3240d8, - 0x84231ed1064f6f7c, 0xa9f020977c2a6d19, - 0x213c227271c20122, 0x09fe8a9a0a03d07a, - 0x4236dc75bcaf910c, 0x460a8b2bead8f17e, - 0xd9b27be1aa07055f, 0xd202d5dc4b11c33e, - 0x70adb010543bea12, 0xcdae938f7ea6f579, - 0x3f3d870208672f4d, 0x8e6ccbce9d349536, - 0xe4c0871a389095ae, 0xf5f2a49152bca080, - 0x9a43f9b97269934e, 0xc17b3753cb6f475c, - 0xd56d941e8e206bd4, 0xac0a4f3e525eda00, - 0xa06d5a011912a550, 0x5537ed19537ad1df, - 0xa32fe713d611449d, 0x2a1d05b47c3b579f, - 0x991d02dbd30a2a52, 0x39e91e7e28f93eb0, - 0x40d06adb3e92c9ac, 0x9b9d3afde1c77c97, - 0x9a3f3f41c02c616f, 0x22ecd4ba00f60c44, - 0x0b63d5d801708420, 0x8f227ca8f37ffaec, - 0x0256278670887c24, 0x107e14877dbf540b, - 0x32c19f2786ac1c05, 0x1df5b12bb4bc9c61, - 0xc0cac129d0d4c4e2, 0x9fdb52ee9800b001, - 0x31f601d5d31c48c4, 0x72ff3c0928bcaec7, - 0xd99264421147eb03, 0x535a2d6d38aefcfe, - 0x6ba8b4454a916237, 0xfa39366eaae4719c, - 0x10f00fd7bbb24b6f, 0x5bd23185c76c84d4, - 0xb22c3d7e1b00d33f, 0x3efc20aa6bc830a8, - 0xd61c2503fe639144, 0x30ce625441eb92d3, - 0xe5d34cf359e93100, 0xa8e5aa13f2b9f7a5, - 0x5c2b8d851ca254a6, 0x68fb6c5e8b0d5fdf, - 0xc7ea4872c96b83ae, 0x6dd5d376f4392382, - 0x1be88681aaa9792f, 0xfef465ee1b6c10d9, - 0x1f98b65ed43fcb2e, 0x4d1ca11eb6e9a9c9, - 0x7808e902b3857d0b, 0x171c9c4ea4607972, - 0x58d66274850146df, 0x42b311c10d3981d1, - 0x647fa8c621c41a4c, 0xf472771c66ddfedc, - 0x338d27e3f847b46b, 0x6402ce3da97545ce, - 0x5162db616fc38638, 0x9c83be97bc22a50e, - 0x2d3d7478a78d5e72, 0xe621a9b938fd5397, - 0x9454614eb0f81c45, 0x395fb6e742ed39b6, - 0x77dd9179d06037bf, 0xc478d0fee4d2656d, - 0x35d9d6cb772007af, 0x83a56e92c883f0f6, - 0x27937453250c00a1, 0x27bd6ebc3a46a97d, - 0x9f543bf784342d51, 0xd158f38c48b0ed52, - 0x8dd8537c045f66b4, 0x846a57230226f6d5, - 0x6b13939e0c4e7cdf, 0xfca25425d8176758, - 0x92e5fc6cd52788e6, 0x9992e13d7a739170, - 0x518246f7a199e8ea, 0xf104c2a71b9979c7, - 0x86b3ffaabea4768f, 0x6388061cf3e351ad, - 0x09d9b5295de5bbb5, 0x38bf1638c2599e92, - 0x1d759846499e148d, 0x4c0ff015e5f96ef4, - 0xa41a94cfa270f565, 0x42d76f9cb2326c0b, - 0x0cf385dd3c9c23ba, 0x0508a6c7508d6e7a, - 0x337523aabbe6cf8d, 0x646bb14001d42b12, - 0xc178729d138adc74, 0xf900ef4491f24086, - 0xee1a90d334bb5ac4, 0x9755c92247301a50, - 0xb999bf7c4ff1b610, 0x6aeeb2f3b21e8fc9, - 0x0fa8084cf91ac6ff, 0x10d226cf136e6189, - 0xd302057a07d4fb21, 0x5f03800e20a0fcc3, - 0x80118d4ae46bd210, 0x58ab61a522843733, - 0x51edd575c5432a4b, 0x94ee6ff67f9197f7, - 0x765669e0e5e8157b, 0xa5347830737132f0, - 0x3ba485a69f01510c, 0x0b247d7b957a01c3, - 0x1b3d63449fd807dc, 0x0fdc4721c30ad743, - 0x8b535ed3829b2b14, 0xee41d0cad65d232c, - 0xe6a99ed97a6a982f, 0x65ac6194c202003d, - 0x692accf3a70573eb, 0xcc3c02c3e200d5af, - 0x0d419e8b325914a3, 0x320f160f42c25e40, - 0x00710d647a51fe7a, 0x3c947692330aed60, - 0x9288aa280d355a7a, 0xa1806a9b791d1696, - 0x5d60e38496763da1, 0x6c69e22e613fd0f4, - 0x977fc2a5aadffb17, 0xfb7bd063fc5a94ba, - 0x460c17992cbaece1, 0xf7822c5444d3297f, - 0x344a9790c69b74aa, 0xb80a42e6cae09dce, - 0x1b1361eaf2b1e757, 0xd84c1e758e236f01, - 0x88e0b7be347627cc, 0x45246009b7a99490, - 0x8011c6dd3fe50472, 0xc341d682bffb99d7, - 0x2511be93808e2d15, 0xd5bc13d7fd739840, - 0x2a3cd030679ae1ec, 0x8ad9898a4b9ee157, - 0x3245fef0a8eaf521, 0x3d6d8dbbb427d2b0, - 0x1ed146d8968b3981, 0x0c6a28bf7d45f3fc, - 0x4a1fd3dbcee3c561, 0x4210ff6a476bf67e, - 0xa559cce0d9199aac, 0xde39d47ef3723380, - 0xe5b69d848ce42e35, 0xefa24296f8e79f52, - 0x70190b59db9a5afc, 0x26f166cdb211e7bf, - 0x4deaf2df3c6b8ef5, 0xf171dbdd670f1017, - 0xb9059b05e9420d90, 0x2f0da855c9388754, - 0x611d5e9ab77949cc, 0x2912038ac01163f4, - 0x0231df50402b2fba, 0x45660fc4f3245f58, - 0xb91cc97c7c8dac50, 0xb72d2aafe4953427, - 0xfa6463f87e813d6b, 0x4515f7ee95d5c6a2, - 0x1310e1c1a48d21c3, 0xad48a7810cdd8544, - 0x4d5bdfefd5c9e631, 0xa43ed43f1fdcb7de, - 0xe70cfc8fe1ee9626, 0xef4711b0d8dda442, - 0xb80dd9bd4dab6c93, 0xa23be08d31ba4d93, - 0x9b37db9d0335a39c, 0x494b6f870f5cfebc, - 0x6d1b3c1149dda943, 0x372c943a518c1093, - 0xad27af45e77c09c4, 0x3b6f92b646044604, - 0xac2917909f5fcf4f, 0x2069a60e977e5557, - 0x353a469e71014de5, 0x24be356281f55c15, - 0x2b6d710ba8e9adea, 0x404ad1751c749c29, - 0xed7311bf23d7f185, 0xba4f6976b4acc43e, - 0x32d7198d2bc39000, 0xee667019014d6e01, - 0x494ef3e128d14c83, 0x1f95a152baecd6be, - 0x201648dff1f483a5, 0x68c28550c8384af6, - 0x5fc834a6824a7f48, 0x7cd06cb7365eaf28, - 0xd82bbd95e9b30909, 0x234f0d1694c53f6d, - 0xd2fb7f4a96d83f4a, 0xff0d5da83acac05e, - 0xf8f6b97f5585080a, 0x74236084be57b95b, - 0xa25e40c03bbc36ad, 0x6b6e5c14ce88465b, - 0x4378ffe93e1528c5, 0x94ca92a17118e2d2, -} diff --git a/vendor/github.com/ulikunitz/xz/internal/hash/doc.go b/vendor/github.com/ulikunitz/xz/internal/hash/doc.go deleted file mode 100644 index b4cf8b75e4..0000000000 --- a/vendor/github.com/ulikunitz/xz/internal/hash/doc.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -/* -Package hash provides rolling hashes. - -Rolling hashes have to be used for maintaining the positions of n-byte -sequences in the dictionary buffer. - -The package provides currently the Rabin-Karp rolling hash and a Cyclic -Polynomial hash. Both support the Hashes method to be used with an interface. -*/ -package hash diff --git a/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go b/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go deleted file mode 100644 index 5322342ee3..0000000000 --- a/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package hash - -// A is the default constant for Robin-Karp rolling hash. This is a random -// prime. -const A = 0x97b548add41d5da1 - -// RabinKarp supports the computation of a rolling hash. -type RabinKarp struct { - A uint64 - // a^n - aOldest uint64 - h uint64 - p []byte - i int -} - -// NewRabinKarp creates a new RabinKarp value. The argument n defines the -// length of the byte sequence to be hashed. The default constant will will be -// used. -func NewRabinKarp(n int) *RabinKarp { - return NewRabinKarpConst(n, A) -} - -// NewRabinKarpConst creates a new RabinKarp value. The argument n defines the -// length of the byte sequence to be hashed. The argument a provides the -// constant used to compute the hash. -func NewRabinKarpConst(n int, a uint64) *RabinKarp { - if n <= 0 { - panic("number of bytes n must be positive") - } - aOldest := uint64(1) - // There are faster methods. For the small n required by the LZMA - // compressor O(n) is sufficient. - for i := 0; i < n; i++ { - aOldest *= a - } - return &RabinKarp{ - A: a, aOldest: aOldest, - p: make([]byte, 0, n), - } -} - -// Len returns the length of the byte sequence. -func (r *RabinKarp) Len() int { - return cap(r.p) -} - -// RollByte computes the hash after x has been added. -func (r *RabinKarp) RollByte(x byte) uint64 { - if len(r.p) < cap(r.p) { - r.h += uint64(x) - r.h *= r.A - r.p = append(r.p, x) - } else { - r.h -= uint64(r.p[r.i]) * r.aOldest - r.h += uint64(x) - r.h *= r.A - r.p[r.i] = x - r.i = (r.i + 1) % cap(r.p) - } - return r.h -} diff --git a/vendor/github.com/ulikunitz/xz/internal/hash/roller.go b/vendor/github.com/ulikunitz/xz/internal/hash/roller.go deleted file mode 100644 index a989833561..0000000000 --- a/vendor/github.com/ulikunitz/xz/internal/hash/roller.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package hash - -// Roller provides an interface for rolling hashes. The hash value will become -// valid after hash has been called Len times. -type Roller interface { - Len() int - RollByte(x byte) uint64 -} - -// Hashes computes all hash values for the array p. Note that the state of the -// roller is changed. -func Hashes(r Roller, p []byte) []uint64 { - n := r.Len() - if len(p) < n { - return nil - } - h := make([]uint64, len(p)-n+1) - for i := 0; i < n-1; i++ { - r.RollByte(p[i]) - } - for i := range h { - h[i] = r.RollByte(p[i+n-1]) - } - return h -} diff --git a/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go b/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go deleted file mode 100644 index f4627ea113..0000000000 --- a/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go +++ /dev/null @@ -1,456 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package xlog provides a simple logging package that allows to disable -// certain message categories. It defines a type, Logger, with multiple -// methods for formatting output. The package has also a predefined -// 'standard' Logger accessible through helper function Print[f|ln], -// Fatal[f|ln], Panic[f|ln], Warn[f|ln], Print[f|ln] and Debug[f|ln] -// that are easier to use then creating a Logger manually. That logger -// writes to standard error and prints the date and time of each logged -// message, which can be configured using the function SetFlags. -// -// The Fatal functions call os.Exit(1) after the message is output -// unless not suppressed by the flags. The Panic functions call panic -// after the writing the log message unless suppressed. -package xlog - -import ( - "fmt" - "io" - "os" - "runtime" - "sync" - "time" -) - -// The flags define what information is prefixed to each log entry -// generated by the Logger. The Lno* versions allow the suppression of -// specific output. The bits are or'ed together to control what will be -// printed. There is no control over the order of the items printed and -// the format. The full format is: -// -// 2009-01-23 01:23:23.123123 /a/b/c/d.go:23: message -const ( - Ldate = 1 << iota // the date: 2009-01-23 - Ltime // the time: 01:23:23 - Lmicroseconds // microsecond resolution: 01:23:23.123123 - Llongfile // full file name and line number: /a/b/c/d.go:23 - Lshortfile // final file name element and line number: d.go:23 - Lnopanic // suppresses output from Panic[f|ln] but not the panic call - Lnofatal // suppresses output from Fatal[f|ln] but not the exit - Lnowarn // suppresses output from Warn[f|ln] - Lnoprint // suppresses output from Print[f|ln] - Lnodebug // suppresses output from Debug[f|ln] - // initial values for the standard logger - Lstdflags = Ldate | Ltime | Lnodebug -) - -// A Logger represents an active logging object that generates lines of -// output to an io.Writer. Each logging operation if not suppressed -// makes a single call to the Writer's Write method. A Logger can be -// used simultaneously from multiple goroutines; it guarantees to -// serialize access to the Writer. -type Logger struct { - mu sync.Mutex // ensures atomic writes; and protects the following - // fields - prefix string // prefix to write at beginning of each line - flag int // properties - out io.Writer // destination for output - buf []byte // for accumulating text to write -} - -// New creates a new Logger. The out argument sets the destination to -// which the log output will be written. The prefix appears at the -// beginning of each log line. The flag argument defines the logging -// properties. -func New(out io.Writer, prefix string, flag int) *Logger { - return &Logger{out: out, prefix: prefix, flag: flag} -} - -// std is the standard logger used by the package scope functions. -var std = New(os.Stderr, "", Lstdflags) - -// itoa converts the integer to ASCII. A negative widths will avoid -// zero-padding. The function supports only non-negative integers. -func itoa(buf *[]byte, i int, wid int) { - var u = uint(i) - if u == 0 && wid <= 1 { - *buf = append(*buf, '0') - return - } - var b [32]byte - bp := len(b) - for ; u > 0 || wid > 0; u /= 10 { - bp-- - wid-- - b[bp] = byte(u%10) + '0' - } - *buf = append(*buf, b[bp:]...) -} - -// formatHeader puts the header into the buf field of the buffer. -func (l *Logger) formatHeader(t time.Time, file string, line int) { - l.buf = append(l.buf, l.prefix...) - if l.flag&(Ldate|Ltime|Lmicroseconds) != 0 { - if l.flag&Ldate != 0 { - year, month, day := t.Date() - itoa(&l.buf, year, 4) - l.buf = append(l.buf, '-') - itoa(&l.buf, int(month), 2) - l.buf = append(l.buf, '-') - itoa(&l.buf, day, 2) - l.buf = append(l.buf, ' ') - } - if l.flag&(Ltime|Lmicroseconds) != 0 { - hour, min, sec := t.Clock() - itoa(&l.buf, hour, 2) - l.buf = append(l.buf, ':') - itoa(&l.buf, min, 2) - l.buf = append(l.buf, ':') - itoa(&l.buf, sec, 2) - if l.flag&Lmicroseconds != 0 { - l.buf = append(l.buf, '.') - itoa(&l.buf, t.Nanosecond()/1e3, 6) - } - l.buf = append(l.buf, ' ') - } - } - if l.flag&(Lshortfile|Llongfile) != 0 { - if l.flag&Lshortfile != 0 { - short := file - for i := len(file) - 1; i > 0; i-- { - if file[i] == '/' { - short = file[i+1:] - break - } - } - file = short - } - l.buf = append(l.buf, file...) - l.buf = append(l.buf, ':') - itoa(&l.buf, line, -1) - l.buf = append(l.buf, ": "...) - } -} - -func (l *Logger) output(calldepth int, now time.Time, s string) error { - var file string - var line int - if l.flag&(Lshortfile|Llongfile) != 0 { - l.mu.Unlock() - var ok bool - _, file, line, ok = runtime.Caller(calldepth) - if !ok { - file = "???" - line = 0 - } - l.mu.Lock() - } - l.buf = l.buf[:0] - l.formatHeader(now, file, line) - l.buf = append(l.buf, s...) - if len(s) == 0 || s[len(s)-1] != '\n' { - l.buf = append(l.buf, '\n') - } - _, err := l.out.Write(l.buf) - return err -} - -// Output writes the string s with the header controlled by the flags to -// the l.out writer. A newline will be appended if s doesn't end in a -// newline. Calldepth is used to recover the PC, although all current -// calls of Output use the call depth 2. Access to the function is serialized. -func (l *Logger) Output(calldepth, noflag int, v ...interface{}) error { - now := time.Now() - l.mu.Lock() - defer l.mu.Unlock() - if l.flag&noflag != 0 { - return nil - } - s := fmt.Sprint(v...) - return l.output(calldepth+1, now, s) -} - -// Outputf works like output but formats the output like Printf. -func (l *Logger) Outputf(calldepth int, noflag int, format string, v ...interface{}) error { - now := time.Now() - l.mu.Lock() - defer l.mu.Unlock() - if l.flag&noflag != 0 { - return nil - } - s := fmt.Sprintf(format, v...) - return l.output(calldepth+1, now, s) -} - -// Outputln works like output but formats the output like Println. -func (l *Logger) Outputln(calldepth int, noflag int, v ...interface{}) error { - now := time.Now() - l.mu.Lock() - defer l.mu.Unlock() - if l.flag&noflag != 0 { - return nil - } - s := fmt.Sprintln(v...) - return l.output(calldepth+1, now, s) -} - -// Panic prints the message like Print and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func (l *Logger) Panic(v ...interface{}) { - l.Output(2, Lnopanic, v...) - s := fmt.Sprint(v...) - panic(s) -} - -// Panic prints the message like Print and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func Panic(v ...interface{}) { - std.Output(2, Lnopanic, v...) - s := fmt.Sprint(v...) - panic(s) -} - -// Panicf prints the message like Printf and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func (l *Logger) Panicf(format string, v ...interface{}) { - l.Outputf(2, Lnopanic, format, v...) - s := fmt.Sprintf(format, v...) - panic(s) -} - -// Panicf prints the message like Printf and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func Panicf(format string, v ...interface{}) { - std.Outputf(2, Lnopanic, format, v...) - s := fmt.Sprintf(format, v...) - panic(s) -} - -// Panicln prints the message like Println and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func (l *Logger) Panicln(v ...interface{}) { - l.Outputln(2, Lnopanic, v...) - s := fmt.Sprintln(v...) - panic(s) -} - -// Panicln prints the message like Println and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func Panicln(v ...interface{}) { - std.Outputln(2, Lnopanic, v...) - s := fmt.Sprintln(v...) - panic(s) -} - -// Fatal prints the message like Print and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func (l *Logger) Fatal(v ...interface{}) { - l.Output(2, Lnofatal, v...) - os.Exit(1) -} - -// Fatal prints the message like Print and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func Fatal(v ...interface{}) { - std.Output(2, Lnofatal, v...) - os.Exit(1) -} - -// Fatalf prints the message like Printf and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func (l *Logger) Fatalf(format string, v ...interface{}) { - l.Outputf(2, Lnofatal, format, v...) - os.Exit(1) -} - -// Fatalf prints the message like Printf and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func Fatalf(format string, v ...interface{}) { - std.Outputf(2, Lnofatal, format, v...) - os.Exit(1) -} - -// Fatalln prints the message like Println and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func (l *Logger) Fatalln(format string, v ...interface{}) { - l.Outputln(2, Lnofatal, v...) - os.Exit(1) -} - -// Fatalln prints the message like Println and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func Fatalln(format string, v ...interface{}) { - std.Outputln(2, Lnofatal, v...) - os.Exit(1) -} - -// Warn prints the message like Print. The printing might be suppressed -// by the flag Lnowarn. -func (l *Logger) Warn(v ...interface{}) { - l.Output(2, Lnowarn, v...) -} - -// Warn prints the message like Print. The printing might be suppressed -// by the flag Lnowarn. -func Warn(v ...interface{}) { - std.Output(2, Lnowarn, v...) -} - -// Warnf prints the message like Printf. The printing might be suppressed -// by the flag Lnowarn. -func (l *Logger) Warnf(format string, v ...interface{}) { - l.Outputf(2, Lnowarn, format, v...) -} - -// Warnf prints the message like Printf. The printing might be suppressed -// by the flag Lnowarn. -func Warnf(format string, v ...interface{}) { - std.Outputf(2, Lnowarn, format, v...) -} - -// Warnln prints the message like Println. The printing might be suppressed -// by the flag Lnowarn. -func (l *Logger) Warnln(v ...interface{}) { - l.Outputln(2, Lnowarn, v...) -} - -// Warnln prints the message like Println. The printing might be suppressed -// by the flag Lnowarn. -func Warnln(v ...interface{}) { - std.Outputln(2, Lnowarn, v...) -} - -// Print prints the message like fmt.Print. The printing might be suppressed -// by the flag Lnoprint. -func (l *Logger) Print(v ...interface{}) { - l.Output(2, Lnoprint, v...) -} - -// Print prints the message like fmt.Print. The printing might be suppressed -// by the flag Lnoprint. -func Print(v ...interface{}) { - std.Output(2, Lnoprint, v...) -} - -// Printf prints the message like fmt.Printf. The printing might be suppressed -// by the flag Lnoprint. -func (l *Logger) Printf(format string, v ...interface{}) { - l.Outputf(2, Lnoprint, format, v...) -} - -// Printf prints the message like fmt.Printf. The printing might be suppressed -// by the flag Lnoprint. -func Printf(format string, v ...interface{}) { - std.Outputf(2, Lnoprint, format, v...) -} - -// Println prints the message like fmt.Println. The printing might be -// suppressed by the flag Lnoprint. -func (l *Logger) Println(v ...interface{}) { - l.Outputln(2, Lnoprint, v...) -} - -// Println prints the message like fmt.Println. The printing might be -// suppressed by the flag Lnoprint. -func Println(v ...interface{}) { - std.Outputln(2, Lnoprint, v...) -} - -// Debug prints the message like Print. The printing might be suppressed -// by the flag Lnodebug. -func (l *Logger) Debug(v ...interface{}) { - l.Output(2, Lnodebug, v...) -} - -// Debug prints the message like Print. The printing might be suppressed -// by the flag Lnodebug. -func Debug(v ...interface{}) { - std.Output(2, Lnodebug, v...) -} - -// Debugf prints the message like Printf. The printing might be suppressed -// by the flag Lnodebug. -func (l *Logger) Debugf(format string, v ...interface{}) { - l.Outputf(2, Lnodebug, format, v...) -} - -// Debugf prints the message like Printf. The printing might be suppressed -// by the flag Lnodebug. -func Debugf(format string, v ...interface{}) { - std.Outputf(2, Lnodebug, format, v...) -} - -// Debugln prints the message like Println. The printing might be suppressed -// by the flag Lnodebug. -func (l *Logger) Debugln(v ...interface{}) { - l.Outputln(2, Lnodebug, v...) -} - -// Debugln prints the message like Println. The printing might be suppressed -// by the flag Lnodebug. -func Debugln(v ...interface{}) { - std.Outputln(2, Lnodebug, v...) -} - -// Flags returns the current flags used by the logger. -func (l *Logger) Flags() int { - l.mu.Lock() - defer l.mu.Unlock() - return l.flag -} - -// Flags returns the current flags used by the standard logger. -func Flags() int { - return std.Flags() -} - -// SetFlags sets the flags of the logger. -func (l *Logger) SetFlags(flag int) { - l.mu.Lock() - defer l.mu.Unlock() - l.flag = flag -} - -// SetFlags sets the flags for the standard logger. -func SetFlags(flag int) { - std.SetFlags(flag) -} - -// Prefix returns the prefix used by the logger. -func (l *Logger) Prefix() string { - l.mu.Lock() - defer l.mu.Unlock() - return l.prefix -} - -// Prefix returns the prefix used by the standard logger of the package. -func Prefix() string { - return std.Prefix() -} - -// SetPrefix sets the prefix for the logger. -func (l *Logger) SetPrefix(prefix string) { - l.mu.Lock() - defer l.mu.Unlock() - l.prefix = prefix -} - -// SetPrefix sets the prefix of the standard logger of the package. -func SetPrefix(prefix string) { - std.SetPrefix(prefix) -} - -// SetOutput sets the output of the logger. -func (l *Logger) SetOutput(w io.Writer) { - l.mu.Lock() - defer l.mu.Unlock() - l.out = w -} - -// SetOutput sets the output for the standard logger of the package. -func SetOutput(w io.Writer) { - std.SetOutput(w) -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/bintree.go b/vendor/github.com/ulikunitz/xz/lzma/bintree.go deleted file mode 100644 index 2b39da6f75..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/bintree.go +++ /dev/null @@ -1,522 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "unicode" -) - -// node represents a node in the binary tree. -type node struct { - // x is the search value - x uint32 - // p parent node - p uint32 - // l left child - l uint32 - // r right child - r uint32 -} - -// wordLen is the number of bytes represented by the v field of a node. -const wordLen = 4 - -// binTree supports the identification of the next operation based on a -// binary tree. -// -// Nodes will be identified by their index into the ring buffer. -type binTree struct { - dict *encoderDict - // ring buffer of nodes - node []node - // absolute offset of the entry for the next node. Position 4 - // byte larger. - hoff int64 - // front position in the node ring buffer - front uint32 - // index of the root node - root uint32 - // current x value - x uint32 - // preallocated array - data []byte -} - -// null represents the nonexistent index. We can't use zero because it -// would always exist or we would need to decrease the index for each -// reference. -const null uint32 = 1<<32 - 1 - -// newBinTree initializes the binTree structure. The capacity defines -// the size of the buffer and defines the maximum distance for which -// matches will be found. -func newBinTree(capacity int) (t *binTree, err error) { - if capacity < 1 { - return nil, errors.New( - "newBinTree: capacity must be larger than zero") - } - if int64(capacity) >= int64(null) { - return nil, errors.New( - "newBinTree: capacity must less 2^{32}-1") - } - t = &binTree{ - node: make([]node, capacity), - hoff: -int64(wordLen), - root: null, - data: make([]byte, maxMatchLen), - } - return t, nil -} - -func (t *binTree) SetDict(d *encoderDict) { t.dict = d } - -// WriteByte writes a single byte into the binary tree. -func (t *binTree) WriteByte(c byte) error { - t.x = (t.x << 8) | uint32(c) - t.hoff++ - if t.hoff < 0 { - return nil - } - v := t.front - if int64(v) < t.hoff { - // We are overwriting old nodes stored in the tree. - t.remove(v) - } - t.node[v].x = t.x - t.add(v) - t.front++ - if int64(t.front) >= int64(len(t.node)) { - t.front = 0 - } - return nil -} - -// Writes writes a sequence of bytes into the binTree structure. -func (t *binTree) Write(p []byte) (n int, err error) { - for _, c := range p { - t.WriteByte(c) - } - return len(p), nil -} - -// add puts the node v into the tree. The node must not be part of the -// tree before. -func (t *binTree) add(v uint32) { - vn := &t.node[v] - // Set left and right to null indices. - vn.l, vn.r = null, null - // If the binary tree is empty make v the root. - if t.root == null { - t.root = v - vn.p = null - return - } - x := vn.x - p := t.root - // Search for the right leave link and add the new node. - for { - pn := &t.node[p] - if x <= pn.x { - if pn.l == null { - pn.l = v - vn.p = p - return - } - p = pn.l - } else { - if pn.r == null { - pn.r = v - vn.p = p - return - } - p = pn.r - } - } -} - -// parent returns the parent node index of v and the pointer to v value -// in the parent. -func (t *binTree) parent(v uint32) (p uint32, ptr *uint32) { - if t.root == v { - return null, &t.root - } - p = t.node[v].p - if t.node[p].l == v { - ptr = &t.node[p].l - } else { - ptr = &t.node[p].r - } - return -} - -// Remove node v. -func (t *binTree) remove(v uint32) { - vn := &t.node[v] - p, ptr := t.parent(v) - l, r := vn.l, vn.r - if l == null { - // Move the right child up. - *ptr = r - if r != null { - t.node[r].p = p - } - return - } - if r == null { - // Move the left child up. - *ptr = l - t.node[l].p = p - return - } - - // Search the in-order predecessor u. - un := &t.node[l] - ur := un.r - if ur == null { - // In order predecessor is l. Move it up. - un.r = r - t.node[r].p = l - un.p = p - *ptr = l - return - } - var u uint32 - for { - // Look for the max value in the tree where l is root. - u = ur - ur = t.node[u].r - if ur == null { - break - } - } - // replace u with ul - un = &t.node[u] - ul := un.l - up := un.p - t.node[up].r = ul - if ul != null { - t.node[ul].p = up - } - - // replace v by u - un.l, un.r = l, r - t.node[l].p = u - t.node[r].p = u - *ptr = u - un.p = p -} - -// search looks for the node that have the value x or for the nodes that -// brace it. The node highest in the tree with the value x will be -// returned. All other nodes with the same value live in left subtree of -// the returned node. -func (t *binTree) search(v uint32, x uint32) (a, b uint32) { - a, b = null, null - if v == null { - return - } - for { - vn := &t.node[v] - if x <= vn.x { - if x == vn.x { - return v, v - } - b = v - if vn.l == null { - return - } - v = vn.l - } else { - a = v - if vn.r == null { - return - } - v = vn.r - } - } -} - -// max returns the node with maximum value in the subtree with v as -// root. -func (t *binTree) max(v uint32) uint32 { - if v == null { - return null - } - for { - r := t.node[v].r - if r == null { - return v - } - v = r - } -} - -// min returns the node with the minimum value in the subtree with v as -// root. -func (t *binTree) min(v uint32) uint32 { - if v == null { - return null - } - for { - l := t.node[v].l - if l == null { - return v - } - v = l - } -} - -// pred returns the in-order predecessor of node v. -func (t *binTree) pred(v uint32) uint32 { - if v == null { - return null - } - u := t.max(t.node[v].l) - if u != null { - return u - } - for { - p := t.node[v].p - if p == null { - return null - } - if t.node[p].r == v { - return p - } - v = p - } -} - -// succ returns the in-order successor of node v. -func (t *binTree) succ(v uint32) uint32 { - if v == null { - return null - } - u := t.min(t.node[v].r) - if u != null { - return u - } - for { - p := t.node[v].p - if p == null { - return null - } - if t.node[p].l == v { - return p - } - v = p - } -} - -// xval converts the first four bytes of a into an 32-bit unsigned -// integer in big-endian order. -func xval(a []byte) uint32 { - var x uint32 - switch len(a) { - default: - x |= uint32(a[3]) - fallthrough - case 3: - x |= uint32(a[2]) << 8 - fallthrough - case 2: - x |= uint32(a[1]) << 16 - fallthrough - case 1: - x |= uint32(a[0]) << 24 - case 0: - } - return x -} - -// dumpX converts value x into a four-letter string. -func dumpX(x uint32) string { - a := make([]byte, 4) - for i := 0; i < 4; i++ { - c := byte(x >> uint((3-i)*8)) - if unicode.IsGraphic(rune(c)) { - a[i] = c - } else { - a[i] = '.' - } - } - return string(a) -} - -/* -// dumpNode writes a representation of the node v into the io.Writer. -func (t *binTree) dumpNode(w io.Writer, v uint32, indent int) { - if v == null { - return - } - - vn := &t.node[v] - - t.dumpNode(w, vn.r, indent+2) - - for i := 0; i < indent; i++ { - fmt.Fprint(w, " ") - } - if vn.p == null { - fmt.Fprintf(w, "node %d %q parent null\n", v, dumpX(vn.x)) - } else { - fmt.Fprintf(w, "node %d %q parent %d\n", v, dumpX(vn.x), vn.p) - } - - t.dumpNode(w, vn.l, indent+2) -} - -// dump prints a representation of the binary tree into the writer. -func (t *binTree) dump(w io.Writer) error { - bw := bufio.NewWriter(w) - t.dumpNode(bw, t.root, 0) - return bw.Flush() -} -*/ - -func (t *binTree) distance(v uint32) int { - dist := int(t.front) - int(v) - if dist <= 0 { - dist += len(t.node) - } - return dist -} - -type matchParams struct { - rep [4]uint32 - // length when match will be accepted - nAccept int - // nodes to check - check int - // finish if length get shorter - stopShorter bool -} - -func (t *binTree) match(m match, distIter func() (int, bool), p matchParams, -) (r match, checked int, accepted bool) { - buf := &t.dict.buf - for { - if checked >= p.check { - return m, checked, true - } - dist, ok := distIter() - if !ok { - return m, checked, false - } - checked++ - if m.n > 0 { - i := buf.rear - dist + m.n - 1 - if i < 0 { - i += len(buf.data) - } else if i >= len(buf.data) { - i -= len(buf.data) - } - if buf.data[i] != t.data[m.n-1] { - if p.stopShorter { - return m, checked, false - } - continue - } - } - n := buf.matchLen(dist, t.data) - switch n { - case 0: - if p.stopShorter { - return m, checked, false - } - continue - case 1: - if uint32(dist-minDistance) != p.rep[0] { - continue - } - } - if n < m.n || (n == m.n && int64(dist) >= m.distance) { - continue - } - m = match{int64(dist), n} - if n >= p.nAccept { - return m, checked, true - } - } -} - -func (t *binTree) NextOp(rep [4]uint32) operation { - // retrieve maxMatchLen data - n, _ := t.dict.buf.Peek(t.data[:maxMatchLen]) - if n == 0 { - panic("no data in buffer") - } - t.data = t.data[:n] - - var ( - m match - x, u, v uint32 - iterPred, iterSucc func() (int, bool) - ) - p := matchParams{ - rep: rep, - nAccept: maxMatchLen, - check: 32, - } - i := 4 - iterSmall := func() (dist int, ok bool) { - i-- - if i <= 0 { - return 0, false - } - return i, true - } - m, checked, accepted := t.match(m, iterSmall, p) - if accepted { - goto end - } - p.check -= checked - x = xval(t.data) - u, v = t.search(t.root, x) - if u == v && len(t.data) == 4 { - iter := func() (dist int, ok bool) { - if u == null { - return 0, false - } - dist = t.distance(u) - u, v = t.search(t.node[u].l, x) - if u != v { - u = null - } - return dist, true - } - m, _, _ = t.match(m, iter, p) - goto end - } - p.stopShorter = true - iterSucc = func() (dist int, ok bool) { - if v == null { - return 0, false - } - dist = t.distance(v) - v = t.succ(v) - return dist, true - } - m, checked, accepted = t.match(m, iterSucc, p) - if accepted { - goto end - } - p.check -= checked - iterPred = func() (dist int, ok bool) { - if u == null { - return 0, false - } - dist = t.distance(u) - u = t.pred(u) - return dist, true - } - m, _, _ = t.match(m, iterPred, p) -end: - if m.n == 0 { - return lit{t.data[0]} - } - return m -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/bitops.go b/vendor/github.com/ulikunitz/xz/lzma/bitops.go deleted file mode 100644 index 2010917092..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/bitops.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -/* Naming conventions follows the CodeReviewComments in the Go Wiki. */ - -// ntz32Const is used by the functions NTZ and NLZ. -const ntz32Const = 0x04d7651f - -// ntz32Table is a helper table for de Bruijn algorithm by Danny Dubé. -// See Henry S. Warren, Jr. "Hacker's Delight" section 5-1 figure 5-26. -var ntz32Table = [32]int8{ - 0, 1, 2, 24, 3, 19, 6, 25, - 22, 4, 20, 10, 16, 7, 12, 26, - 31, 23, 18, 5, 21, 9, 15, 11, - 30, 17, 8, 14, 29, 13, 28, 27, -} - -/* -// ntz32 computes the number of trailing zeros for an unsigned 32-bit integer. -func ntz32(x uint32) int { - if x == 0 { - return 32 - } - x = (x & -x) * ntz32Const - return int(ntz32Table[x>>27]) -} -*/ - -// nlz32 computes the number of leading zeros for an unsigned 32-bit integer. -func nlz32(x uint32) int { - // Smear left most bit to the right - x |= x >> 1 - x |= x >> 2 - x |= x >> 4 - x |= x >> 8 - x |= x >> 16 - // Use ntz mechanism to calculate nlz. - x++ - if x == 0 { - return 0 - } - x *= ntz32Const - return 32 - int(ntz32Table[x>>27]) -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/breader.go b/vendor/github.com/ulikunitz/xz/lzma/breader.go deleted file mode 100644 index 9dfdf28b22..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/breader.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" -) - -// breader provides the ReadByte function for a Reader. It doesn't read -// more data from the reader than absolutely necessary. -type breader struct { - io.Reader - // helper slice to save allocations - p []byte -} - -// ByteReader converts an io.Reader into an io.ByteReader. -func ByteReader(r io.Reader) io.ByteReader { - br, ok := r.(io.ByteReader) - if !ok { - return &breader{r, make([]byte, 1)} - } - return br -} - -// ReadByte read byte function. -func (r *breader) ReadByte() (c byte, err error) { - n, err := r.Reader.Read(r.p) - if n < 1 { - if err == nil { - err = errors.New("breader.ReadByte: no data") - } - return 0, err - } - return r.p[0], nil -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/buffer.go b/vendor/github.com/ulikunitz/xz/lzma/buffer.go deleted file mode 100644 index af41d5b2dc..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/buffer.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" -) - -// buffer provides a circular buffer of bytes. If the front index equals -// the rear index the buffer is empty. As a consequence front cannot be -// equal rear for a full buffer. So a full buffer has a length that is -// one byte less the the length of the data slice. -type buffer struct { - data []byte - front int - rear int -} - -// newBuffer creates a buffer with the given size. -func newBuffer(size int) *buffer { - return &buffer{data: make([]byte, size+1)} -} - -// Cap returns the capacity of the buffer. -func (b *buffer) Cap() int { - return len(b.data) - 1 -} - -// Resets the buffer. The front and rear index are set to zero. -func (b *buffer) Reset() { - b.front = 0 - b.rear = 0 -} - -// Buffered returns the number of bytes buffered. -func (b *buffer) Buffered() int { - delta := b.front - b.rear - if delta < 0 { - delta += len(b.data) - } - return delta -} - -// Available returns the number of bytes available for writing. -func (b *buffer) Available() int { - delta := b.rear - 1 - b.front - if delta < 0 { - delta += len(b.data) - } - return delta -} - -// addIndex adds a non-negative integer to the index i and returns the -// resulting index. The function takes care of wrapping the index as -// well as potential overflow situations. -func (b *buffer) addIndex(i int, n int) int { - // subtraction of len(b.data) prevents overflow - i += n - len(b.data) - if i < 0 { - i += len(b.data) - } - return i -} - -// Read reads bytes from the buffer into p and returns the number of -// bytes read. The function never returns an error but might return less -// data than requested. -func (b *buffer) Read(p []byte) (n int, err error) { - n, err = b.Peek(p) - b.rear = b.addIndex(b.rear, n) - return n, err -} - -// Peek reads bytes from the buffer into p without changing the buffer. -// Peek will never return an error but might return less data than -// requested. -func (b *buffer) Peek(p []byte) (n int, err error) { - m := b.Buffered() - n = len(p) - if m < n { - n = m - p = p[:n] - } - k := copy(p, b.data[b.rear:]) - if k < n { - copy(p[k:], b.data) - } - return n, nil -} - -// Discard skips the n next bytes to read from the buffer, returning the -// bytes discarded. -// -// If Discards skips fewer than n bytes, it returns an error. -func (b *buffer) Discard(n int) (discarded int, err error) { - if n < 0 { - return 0, errors.New("buffer.Discard: negative argument") - } - m := b.Buffered() - if m < n { - n = m - err = errors.New( - "buffer.Discard: discarded less bytes then requested") - } - b.rear = b.addIndex(b.rear, n) - return n, err -} - -// ErrNoSpace indicates that there is insufficient space for the Write -// operation. -var ErrNoSpace = errors.New("insufficient space") - -// Write puts data into the buffer. If less bytes are written than -// requested ErrNoSpace is returned. -func (b *buffer) Write(p []byte) (n int, err error) { - m := b.Available() - n = len(p) - if m < n { - n = m - p = p[:m] - err = ErrNoSpace - } - k := copy(b.data[b.front:], p) - if k < n { - copy(b.data, p[k:]) - } - b.front = b.addIndex(b.front, n) - return n, err -} - -// WriteByte writes a single byte into the buffer. The error ErrNoSpace -// is returned if no single byte is available in the buffer for writing. -func (b *buffer) WriteByte(c byte) error { - if b.Available() < 1 { - return ErrNoSpace - } - b.data[b.front] = c - b.front = b.addIndex(b.front, 1) - return nil -} - -// prefixLen returns the length of the common prefix of a and b. -func prefixLen(a, b []byte) int { - if len(a) > len(b) { - a, b = b, a - } - for i, c := range a { - if b[i] != c { - return i - } - } - return len(a) -} - -// matchLen returns the length of the common prefix for the given -// distance from the rear and the byte slice p. -func (b *buffer) matchLen(distance int, p []byte) int { - var n int - i := b.rear - distance - if i < 0 { - if n = prefixLen(p, b.data[len(b.data)+i:]); n < -i { - return n - } - p = p[n:] - i = 0 - } - n += prefixLen(p, b.data[i:]) - return n -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go b/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go deleted file mode 100644 index f27e31a4a8..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" -) - -// ErrLimit indicates that the limit of the LimitedByteWriter has been -// reached. -var ErrLimit = errors.New("limit reached") - -// LimitedByteWriter provides a byte writer that can be written until a -// limit is reached. The field N provides the number of remaining -// bytes. -type LimitedByteWriter struct { - BW io.ByteWriter - N int64 -} - -// WriteByte writes a single byte to the limited byte writer. It returns -// ErrLimit if the limit has been reached. If the byte is successfully -// written the field N of the LimitedByteWriter will be decremented by -// one. -func (l *LimitedByteWriter) WriteByte(c byte) error { - if l.N <= 0 { - return ErrLimit - } - if err := l.BW.WriteByte(c); err != nil { - return err - } - l.N-- - return nil -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/decoder.go b/vendor/github.com/ulikunitz/xz/lzma/decoder.go deleted file mode 100644 index 3765484e61..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/decoder.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - "io" -) - -// decoder decodes a raw LZMA stream without any header. -type decoder struct { - // dictionary; the rear pointer of the buffer will be used for - // reading the data. - Dict *decoderDict - // decoder state - State *state - // range decoder - rd *rangeDecoder - // start stores the head value of the dictionary for the LZMA - // stream - start int64 - // size of uncompressed data - size int64 - // end-of-stream encountered - eos bool - // EOS marker found - eosMarker bool -} - -// newDecoder creates a new decoder instance. The parameter size provides -// the expected byte size of the decompressed data. If the size is -// unknown use a negative value. In that case the decoder will look for -// a terminating end-of-stream marker. -func newDecoder(br io.ByteReader, state *state, dict *decoderDict, size int64) (d *decoder, err error) { - rd, err := newRangeDecoder(br) - if err != nil { - return nil, err - } - d = &decoder{ - State: state, - Dict: dict, - rd: rd, - size: size, - start: dict.pos(), - } - return d, nil -} - -// Reopen restarts the decoder with a new byte reader and a new size. Reopen -// resets the Decompressed counter to zero. -func (d *decoder) Reopen(br io.ByteReader, size int64) error { - var err error - if d.rd, err = newRangeDecoder(br); err != nil { - return err - } - d.start = d.Dict.pos() - d.size = size - d.eos = false - return nil -} - -// decodeLiteral decodes a single literal from the LZMA stream. -func (d *decoder) decodeLiteral() (op operation, err error) { - litState := d.State.litState(d.Dict.byteAt(1), d.Dict.head) - match := d.Dict.byteAt(int(d.State.rep[0]) + 1) - s, err := d.State.litCodec.Decode(d.rd, d.State.state, match, litState) - if err != nil { - return nil, err - } - return lit{s}, nil -} - -// errEOS indicates that an EOS marker has been found. -var errEOS = errors.New("EOS marker found") - -// readOp decodes the next operation from the compressed stream. It -// returns the operation. If an explicit end of stream marker is -// identified the eos error is returned. -func (d *decoder) readOp() (op operation, err error) { - // Value of the end of stream (EOS) marker - const eosDist = 1<<32 - 1 - - state, state2, posState := d.State.states(d.Dict.head) - - b, err := d.State.isMatch[state2].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - // literal - op, err := d.decodeLiteral() - if err != nil { - return nil, err - } - d.State.updateStateLiteral() - return op, nil - } - b, err = d.State.isRep[state].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - // simple match - d.State.rep[3], d.State.rep[2], d.State.rep[1] = - d.State.rep[2], d.State.rep[1], d.State.rep[0] - - d.State.updateStateMatch() - // The length decoder returns the length offset. - n, err := d.State.lenCodec.Decode(d.rd, posState) - if err != nil { - return nil, err - } - // The dist decoder returns the distance offset. The actual - // distance is 1 higher. - d.State.rep[0], err = d.State.distCodec.Decode(d.rd, n) - if err != nil { - return nil, err - } - if d.State.rep[0] == eosDist { - d.eosMarker = true - return nil, errEOS - } - op = match{n: int(n) + minMatchLen, - distance: int64(d.State.rep[0]) + minDistance} - return op, nil - } - b, err = d.State.isRepG0[state].Decode(d.rd) - if err != nil { - return nil, err - } - dist := d.State.rep[0] - if b == 0 { - // rep match 0 - b, err = d.State.isRepG0Long[state2].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - d.State.updateStateShortRep() - op = match{n: 1, distance: int64(dist) + minDistance} - return op, nil - } - } else { - b, err = d.State.isRepG1[state].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - dist = d.State.rep[1] - } else { - b, err = d.State.isRepG2[state].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - dist = d.State.rep[2] - } else { - dist = d.State.rep[3] - d.State.rep[3] = d.State.rep[2] - } - d.State.rep[2] = d.State.rep[1] - } - d.State.rep[1] = d.State.rep[0] - d.State.rep[0] = dist - } - n, err := d.State.repLenCodec.Decode(d.rd, posState) - if err != nil { - return nil, err - } - d.State.updateStateRep() - op = match{n: int(n) + minMatchLen, distance: int64(dist) + minDistance} - return op, nil -} - -// apply takes the operation and transforms the decoder dictionary accordingly. -func (d *decoder) apply(op operation) error { - var err error - switch x := op.(type) { - case match: - err = d.Dict.writeMatch(x.distance, x.n) - case lit: - err = d.Dict.WriteByte(x.b) - default: - panic("op is neither a match nor a literal") - } - return err -} - -// decompress fills the dictionary unless no space for new data is -// available. If the end of the LZMA stream has been reached io.EOF will -// be returned. -func (d *decoder) decompress() error { - if d.eos { - return io.EOF - } - for d.Dict.Available() >= maxMatchLen { - op, err := d.readOp() - switch err { - case nil: - // break - case errEOS: - d.eos = true - if !d.rd.possiblyAtEnd() { - return errDataAfterEOS - } - if d.size >= 0 && d.size != d.Decompressed() { - return errSize - } - return io.EOF - case io.EOF: - d.eos = true - return io.ErrUnexpectedEOF - default: - return err - } - if err = d.apply(op); err != nil { - return err - } - if d.size >= 0 && d.Decompressed() >= d.size { - d.eos = true - if d.Decompressed() > d.size { - return errSize - } - if !d.rd.possiblyAtEnd() { - switch _, err = d.readOp(); err { - case nil: - return errSize - case io.EOF: - return io.ErrUnexpectedEOF - case errEOS: - break - default: - return err - } - } - return io.EOF - } - } - return nil -} - -// Errors that may be returned while decoding data. -var ( - errDataAfterEOS = errors.New("lzma: data after end of stream marker") - errSize = errors.New("lzma: wrong uncompressed data size") -) - -// Read reads data from the buffer. If no more data is available io.EOF is -// returned. -func (d *decoder) Read(p []byte) (n int, err error) { - var k int - for { - // Read of decoder dict never returns an error. - k, err = d.Dict.Read(p[n:]) - if err != nil { - panic(fmt.Errorf("dictionary read error %s", err)) - } - if k == 0 && d.eos { - return n, io.EOF - } - n += k - if n >= len(p) { - return n, nil - } - if err = d.decompress(); err != nil && err != io.EOF { - return n, err - } - } -} - -// Decompressed returns the number of bytes decompressed by the decoder. -func (d *decoder) Decompressed() int64 { - return d.Dict.pos() - d.start -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go b/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go deleted file mode 100644 index d5b814f0a4..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" -) - -// decoderDict provides the dictionary for the decoder. The whole -// dictionary is used as reader buffer. -type decoderDict struct { - buf buffer - head int64 -} - -// newDecoderDict creates a new decoder dictionary. The whole dictionary -// will be used as reader buffer. -func newDecoderDict(dictCap int) (d *decoderDict, err error) { - // lower limit supports easy test cases - if !(1 <= dictCap && int64(dictCap) <= MaxDictCap) { - return nil, errors.New("lzma: dictCap out of range") - } - d = &decoderDict{buf: *newBuffer(dictCap)} - return d, nil -} - -// Reset clears the dictionary. The read buffer is not changed, so the -// buffered data can still be read. -func (d *decoderDict) Reset() { - d.head = 0 -} - -// WriteByte writes a single byte into the dictionary. It is used to -// write literals into the dictionary. -func (d *decoderDict) WriteByte(c byte) error { - if err := d.buf.WriteByte(c); err != nil { - return err - } - d.head++ - return nil -} - -// pos returns the position of the dictionary head. -func (d *decoderDict) pos() int64 { return d.head } - -// dictLen returns the actual length of the dictionary. -func (d *decoderDict) dictLen() int { - capacity := d.buf.Cap() - if d.head >= int64(capacity) { - return capacity - } - return int(d.head) -} - -// byteAt returns a byte stored in the dictionary. If the distance is -// non-positive or exceeds the current length of the dictionary the zero -// byte is returned. -func (d *decoderDict) byteAt(dist int) byte { - if !(0 < dist && dist <= d.dictLen()) { - return 0 - } - i := d.buf.front - dist - if i < 0 { - i += len(d.buf.data) - } - return d.buf.data[i] -} - -// writeMatch writes the match at the top of the dictionary. The given -// distance must point in the current dictionary and the length must not -// exceed the maximum length 273 supported in LZMA. -// -// The error value ErrNoSpace indicates that no space is available in -// the dictionary for writing. You need to read from the dictionary -// first. -func (d *decoderDict) writeMatch(dist int64, length int) error { - if !(0 < dist && dist <= int64(d.dictLen())) { - return errors.New("writeMatch: distance out of range") - } - if !(0 < length && length <= maxMatchLen) { - return errors.New("writeMatch: length out of range") - } - if length > d.buf.Available() { - return ErrNoSpace - } - d.head += int64(length) - - i := d.buf.front - int(dist) - if i < 0 { - i += len(d.buf.data) - } - for length > 0 { - var p []byte - if i >= d.buf.front { - p = d.buf.data[i:] - i = 0 - } else { - p = d.buf.data[i:d.buf.front] - i = d.buf.front - } - if len(p) > length { - p = p[:length] - } - if _, err := d.buf.Write(p); err != nil { - panic(fmt.Errorf("d.buf.Write returned error %s", err)) - } - length -= len(p) - } - return nil -} - -// Write writes the given bytes into the dictionary and advances the -// head. -func (d *decoderDict) Write(p []byte) (n int, err error) { - n, err = d.buf.Write(p) - d.head += int64(n) - return n, err -} - -// Available returns the number of available bytes for writing into the -// decoder dictionary. -func (d *decoderDict) Available() int { return d.buf.Available() } - -// Read reads data from the buffer contained in the decoder dictionary. -func (d *decoderDict) Read(p []byte) (n int, err error) { return d.buf.Read(p) } diff --git a/vendor/github.com/ulikunitz/xz/lzma/directcodec.go b/vendor/github.com/ulikunitz/xz/lzma/directcodec.go deleted file mode 100644 index 76b713106f..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/directcodec.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// directCodec allows the encoding and decoding of values with a fixed number -// of bits. The number of bits must be in the range [1,32]. -type directCodec byte - -// Bits returns the number of bits supported by this codec. -func (dc directCodec) Bits() int { - return int(dc) -} - -// Encode uses the range encoder to encode a value with the fixed number of -// bits. The most-significant bit is encoded first. -func (dc directCodec) Encode(e *rangeEncoder, v uint32) error { - for i := int(dc) - 1; i >= 0; i-- { - if err := e.DirectEncodeBit(v >> uint(i)); err != nil { - return err - } - } - return nil -} - -// Decode uses the range decoder to decode a value with the given number of -// given bits. The most-significant bit is decoded first. -func (dc directCodec) Decode(d *rangeDecoder) (v uint32, err error) { - for i := int(dc) - 1; i >= 0; i-- { - x, err := d.DirectDecodeBit() - if err != nil { - return 0, err - } - v = (v << 1) | x - } - return v, nil -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/distcodec.go b/vendor/github.com/ulikunitz/xz/lzma/distcodec.go deleted file mode 100644 index b447d8ec42..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/distcodec.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// Constants used by the distance codec. -const ( - // minimum supported distance - minDistance = 1 - // maximum supported distance, value is used for the eos marker. - maxDistance = 1 << 32 - // number of the supported len states - lenStates = 4 - // start for the position models - startPosModel = 4 - // first index with align bits support - endPosModel = 14 - // bits for the position slots - posSlotBits = 6 - // number of align bits - alignBits = 4 -) - -// distCodec provides encoding and decoding of distance values. -type distCodec struct { - posSlotCodecs [lenStates]treeCodec - posModel [endPosModel - startPosModel]treeReverseCodec - alignCodec treeReverseCodec -} - -// deepcopy initializes dc as deep copy of the source. -func (dc *distCodec) deepcopy(src *distCodec) { - if dc == src { - return - } - for i := range dc.posSlotCodecs { - dc.posSlotCodecs[i].deepcopy(&src.posSlotCodecs[i]) - } - for i := range dc.posModel { - dc.posModel[i].deepcopy(&src.posModel[i]) - } - dc.alignCodec.deepcopy(&src.alignCodec) -} - -// newDistCodec creates a new distance codec. -func (dc *distCodec) init() { - for i := range dc.posSlotCodecs { - dc.posSlotCodecs[i] = makeTreeCodec(posSlotBits) - } - for i := range dc.posModel { - posSlot := startPosModel + i - bits := (posSlot >> 1) - 1 - dc.posModel[i] = makeTreeReverseCodec(bits) - } - dc.alignCodec = makeTreeReverseCodec(alignBits) -} - -// lenState converts the value l to a supported lenState value. -func lenState(l uint32) uint32 { - if l >= lenStates { - l = lenStates - 1 - } - return l -} - -// Encode encodes the distance using the parameter l. Dist can have values from -// the full range of uint32 values. To get the distance offset the actual match -// distance has to be decreased by 1. A distance offset of 0xffffffff (eos) -// indicates the end of the stream. -func (dc *distCodec) Encode(e *rangeEncoder, dist uint32, l uint32) (err error) { - // Compute the posSlot using nlz32 - var posSlot uint32 - var bits uint32 - if dist < startPosModel { - posSlot = dist - } else { - bits = uint32(30 - nlz32(dist)) - posSlot = startPosModel - 2 + (bits << 1) - posSlot += (dist >> uint(bits)) & 1 - } - - if err = dc.posSlotCodecs[lenState(l)].Encode(e, posSlot); err != nil { - return - } - - switch { - case posSlot < startPosModel: - return nil - case posSlot < endPosModel: - tc := &dc.posModel[posSlot-startPosModel] - return tc.Encode(dist, e) - } - dic := directCodec(bits - alignBits) - if err = dic.Encode(e, dist>>alignBits); err != nil { - return - } - return dc.alignCodec.Encode(dist, e) -} - -// Decode decodes the distance offset using the parameter l. The dist value -// 0xffffffff (eos) indicates the end of the stream. Add one to the distance -// offset to get the actual match distance. -func (dc *distCodec) Decode(d *rangeDecoder, l uint32) (dist uint32, err error) { - posSlot, err := dc.posSlotCodecs[lenState(l)].Decode(d) - if err != nil { - return - } - - // posSlot equals distance - if posSlot < startPosModel { - return posSlot, nil - } - - // posSlot uses the individual models - bits := (posSlot >> 1) - 1 - dist = (2 | (posSlot & 1)) << bits - var u uint32 - if posSlot < endPosModel { - tc := &dc.posModel[posSlot-startPosModel] - if u, err = tc.Decode(d); err != nil { - return 0, err - } - dist += u - return dist, nil - } - - // posSlots use direct encoding and a single model for the four align - // bits. - dic := directCodec(bits - alignBits) - if u, err = dic.Decode(d); err != nil { - return 0, err - } - dist += u << alignBits - if u, err = dc.alignCodec.Decode(d); err != nil { - return 0, err - } - dist += u - return dist, nil -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/encoder.go b/vendor/github.com/ulikunitz/xz/lzma/encoder.go deleted file mode 100644 index e409383181..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/encoder.go +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "fmt" - "io" -) - -// opLenMargin provides the upper limit of the number of bytes required -// to encode a single operation. -const opLenMargin = 16 - -// compressFlags control the compression process. -type compressFlags uint32 - -// Values for compressFlags. -const ( - // all data should be compressed, even if compression is not - // optimal. - all compressFlags = 1 << iota -) - -// encoderFlags provide the flags for an encoder. -type encoderFlags uint32 - -// Flags for the encoder. -const ( - // eosMarker requests an EOS marker to be written. - eosMarker encoderFlags = 1 << iota -) - -// Encoder compresses data buffered in the encoder dictionary and writes -// it into a byte writer. -type encoder struct { - dict *encoderDict - state *state - re *rangeEncoder - start int64 - // generate eos marker - marker bool - limit bool - margin int -} - -// newEncoder creates a new encoder. If the byte writer must be -// limited use LimitedByteWriter provided by this package. The flags -// argument supports the eosMarker flag, controlling whether a -// terminating end-of-stream marker must be written. -func newEncoder(bw io.ByteWriter, state *state, dict *encoderDict, - flags encoderFlags) (e *encoder, err error) { - - re, err := newRangeEncoder(bw) - if err != nil { - return nil, err - } - e = &encoder{ - dict: dict, - state: state, - re: re, - marker: flags&eosMarker != 0, - start: dict.Pos(), - margin: opLenMargin, - } - if e.marker { - e.margin += 5 - } - return e, nil -} - -// Write writes the bytes from p into the dictionary. If not enough -// space is available the data in the dictionary buffer will be -// compressed to make additional space available. If the limit of the -// underlying writer has been reached ErrLimit will be returned. -func (e *encoder) Write(p []byte) (n int, err error) { - for { - k, err := e.dict.Write(p[n:]) - n += k - if err == ErrNoSpace { - if err = e.compress(0); err != nil { - return n, err - } - continue - } - return n, err - } -} - -// Reopen reopens the encoder with a new byte writer. -func (e *encoder) Reopen(bw io.ByteWriter) error { - var err error - if e.re, err = newRangeEncoder(bw); err != nil { - return err - } - e.start = e.dict.Pos() - e.limit = false - return nil -} - -// writeLiteral writes a literal into the LZMA stream -func (e *encoder) writeLiteral(l lit) error { - var err error - state, state2, _ := e.state.states(e.dict.Pos()) - if err = e.state.isMatch[state2].Encode(e.re, 0); err != nil { - return err - } - litState := e.state.litState(e.dict.ByteAt(1), e.dict.Pos()) - match := e.dict.ByteAt(int(e.state.rep[0]) + 1) - err = e.state.litCodec.Encode(e.re, l.b, state, match, litState) - if err != nil { - return err - } - e.state.updateStateLiteral() - return nil -} - -// iverson implements the Iverson operator as proposed by Donald Knuth in his -// book Concrete Mathematics. -func iverson(ok bool) uint32 { - if ok { - return 1 - } - return 0 -} - -// writeMatch writes a repetition operation into the operation stream -func (e *encoder) writeMatch(m match) error { - var err error - if !(minDistance <= m.distance && m.distance <= maxDistance) { - panic(fmt.Errorf("match distance %d out of range", m.distance)) - } - dist := uint32(m.distance - minDistance) - if !(minMatchLen <= m.n && m.n <= maxMatchLen) && - !(dist == e.state.rep[0] && m.n == 1) { - panic(fmt.Errorf( - "match length %d out of range; dist %d rep[0] %d", - m.n, dist, e.state.rep[0])) - } - state, state2, posState := e.state.states(e.dict.Pos()) - if err = e.state.isMatch[state2].Encode(e.re, 1); err != nil { - return err - } - g := 0 - for ; g < 4; g++ { - if e.state.rep[g] == dist { - break - } - } - b := iverson(g < 4) - if err = e.state.isRep[state].Encode(e.re, b); err != nil { - return err - } - n := uint32(m.n - minMatchLen) - if b == 0 { - // simple match - e.state.rep[3], e.state.rep[2], e.state.rep[1], e.state.rep[0] = - e.state.rep[2], e.state.rep[1], e.state.rep[0], dist - e.state.updateStateMatch() - if err = e.state.lenCodec.Encode(e.re, n, posState); err != nil { - return err - } - return e.state.distCodec.Encode(e.re, dist, n) - } - b = iverson(g != 0) - if err = e.state.isRepG0[state].Encode(e.re, b); err != nil { - return err - } - if b == 0 { - // g == 0 - b = iverson(m.n != 1) - if err = e.state.isRepG0Long[state2].Encode(e.re, b); err != nil { - return err - } - if b == 0 { - e.state.updateStateShortRep() - return nil - } - } else { - // g in {1,2,3} - b = iverson(g != 1) - if err = e.state.isRepG1[state].Encode(e.re, b); err != nil { - return err - } - if b == 1 { - // g in {2,3} - b = iverson(g != 2) - err = e.state.isRepG2[state].Encode(e.re, b) - if err != nil { - return err - } - if b == 1 { - e.state.rep[3] = e.state.rep[2] - } - e.state.rep[2] = e.state.rep[1] - } - e.state.rep[1] = e.state.rep[0] - e.state.rep[0] = dist - } - e.state.updateStateRep() - return e.state.repLenCodec.Encode(e.re, n, posState) -} - -// writeOp writes a single operation to the range encoder. The function -// checks whether there is enough space available to close the LZMA -// stream. -func (e *encoder) writeOp(op operation) error { - if e.re.Available() < int64(e.margin) { - return ErrLimit - } - switch x := op.(type) { - case lit: - return e.writeLiteral(x) - case match: - return e.writeMatch(x) - default: - panic("unexpected operation") - } -} - -// compress compressed data from the dictionary buffer. If the flag all -// is set, all data in the dictionary buffer will be compressed. The -// function returns ErrLimit if the underlying writer has reached its -// limit. -func (e *encoder) compress(flags compressFlags) error { - n := 0 - if flags&all == 0 { - n = maxMatchLen - 1 - } - d := e.dict - m := d.m - for d.Buffered() > n { - op := m.NextOp(e.state.rep) - if err := e.writeOp(op); err != nil { - return err - } - d.Discard(op.Len()) - } - return nil -} - -// eosMatch is a pseudo operation that indicates the end of the stream. -var eosMatch = match{distance: maxDistance, n: minMatchLen} - -// Close terminates the LZMA stream. If requested the end-of-stream -// marker will be written. If the byte writer limit has been or will be -// reached during compression of the remaining data in the buffer the -// LZMA stream will be closed and data will remain in the buffer. -func (e *encoder) Close() error { - err := e.compress(all) - if err != nil && err != ErrLimit { - return err - } - if e.marker { - if err := e.writeMatch(eosMatch); err != nil { - return err - } - } - err = e.re.Close() - return err -} - -// Compressed returns the number bytes of the input data that been -// compressed. -func (e *encoder) Compressed() int64 { - return e.dict.Pos() - e.start -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go b/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go deleted file mode 100644 index 4b3916eaba..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - "io" -) - -// matcher is an interface that supports the identification of the next -// operation. -type matcher interface { - io.Writer - SetDict(d *encoderDict) - NextOp(rep [4]uint32) operation -} - -// encoderDict provides the dictionary of the encoder. It includes an -// additional buffer atop of the actual dictionary. -type encoderDict struct { - buf buffer - m matcher - head int64 - capacity int - // preallocated array - data [maxMatchLen]byte -} - -// newEncoderDict creates the encoder dictionary. The argument bufSize -// defines the size of the additional buffer. -func newEncoderDict(dictCap, bufSize int, m matcher) (d *encoderDict, err error) { - if !(1 <= dictCap && int64(dictCap) <= MaxDictCap) { - return nil, errors.New( - "lzma: dictionary capacity out of range") - } - if bufSize < 1 { - return nil, errors.New( - "lzma: buffer size must be larger than zero") - } - d = &encoderDict{ - buf: *newBuffer(dictCap + bufSize), - capacity: dictCap, - m: m, - } - m.SetDict(d) - return d, nil -} - -// Discard discards n bytes. Note that n must not be larger than -// MaxMatchLen. -func (d *encoderDict) Discard(n int) { - p := d.data[:n] - k, _ := d.buf.Read(p) - if k < n { - panic(fmt.Errorf("lzma: can't discard %d bytes", n)) - } - d.head += int64(n) - d.m.Write(p) -} - -// Len returns the data available in the encoder dictionary. -func (d *encoderDict) Len() int { - n := d.buf.Available() - if int64(n) > d.head { - return int(d.head) - } - return n -} - -// DictLen returns the actual length of data in the dictionary. -func (d *encoderDict) DictLen() int { - if d.head < int64(d.capacity) { - return int(d.head) - } - return d.capacity -} - -// Available returns the number of bytes that can be written by a -// following Write call. -func (d *encoderDict) Available() int { - return d.buf.Available() - d.DictLen() -} - -// Write writes data into the dictionary buffer. Note that the position -// of the dictionary head will not be moved. If there is not enough -// space in the buffer ErrNoSpace will be returned. -func (d *encoderDict) Write(p []byte) (n int, err error) { - m := d.Available() - if len(p) > m { - p = p[:m] - err = ErrNoSpace - } - var e error - if n, e = d.buf.Write(p); e != nil { - err = e - } - return n, err -} - -// Pos returns the position of the head. -func (d *encoderDict) Pos() int64 { return d.head } - -// ByteAt returns the byte at the given distance. -func (d *encoderDict) ByteAt(distance int) byte { - if !(0 < distance && distance <= d.Len()) { - return 0 - } - i := d.buf.rear - distance - if i < 0 { - i += len(d.buf.data) - } - return d.buf.data[i] -} - -// CopyN copies the last n bytes from the dictionary into the provided -// writer. This is used for copying uncompressed data into an -// uncompressed segment. -func (d *encoderDict) CopyN(w io.Writer, n int) (written int, err error) { - if n <= 0 { - return 0, nil - } - m := d.Len() - if n > m { - n = m - err = ErrNoSpace - } - i := d.buf.rear - n - var e error - if i < 0 { - i += len(d.buf.data) - if written, e = w.Write(d.buf.data[i:]); e != nil { - return written, e - } - i = 0 - } - var k int - k, e = w.Write(d.buf.data[i:d.buf.rear]) - written += k - if e != nil { - err = e - } - return written, err -} - -// Buffered returns the number of bytes in the buffer. -func (d *encoderDict) Buffered() int { return d.buf.Buffered() } diff --git a/vendor/github.com/ulikunitz/xz/lzma/fox.lzma b/vendor/github.com/ulikunitz/xz/lzma/fox.lzma deleted file mode 100644 index 5edad63326..0000000000 Binary files a/vendor/github.com/ulikunitz/xz/lzma/fox.lzma and /dev/null differ diff --git a/vendor/github.com/ulikunitz/xz/lzma/hashtable.go b/vendor/github.com/ulikunitz/xz/lzma/hashtable.go deleted file mode 100644 index f66e9cdd9e..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/hashtable.go +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - - "github.com/ulikunitz/xz/internal/hash" -) - -/* For compression we need to find byte sequences that match the byte - * sequence at the dictionary head. A hash table is a simple method to - * provide this capability. - */ - -// maxMatches limits the number of matches requested from the Matches -// function. This controls the speed of the overall encoding. -const maxMatches = 16 - -// shortDists defines the number of short distances supported by the -// implementation. -const shortDists = 8 - -// The minimum is somehow arbitrary but the maximum is limited by the -// memory requirements of the hash table. -const ( - minTableExponent = 9 - maxTableExponent = 20 -) - -// newRoller contains the function used to create an instance of the -// hash.Roller. -var newRoller = func(n int) hash.Roller { return hash.NewCyclicPoly(n) } - -// hashTable stores the hash table including the rolling hash method. -// -// We implement chained hashing into a circular buffer. Each entry in -// the circular buffer stores the delta distance to the next position with a -// word that has the same hash value. -type hashTable struct { - dict *encoderDict - // actual hash table - t []int64 - // circular list data with the offset to the next word - data []uint32 - front int - // mask for computing the index for the hash table - mask uint64 - // hash offset; initial value is -int64(wordLen) - hoff int64 - // length of the hashed word - wordLen int - // hash roller for computing the hash values for the Write - // method - wr hash.Roller - // hash roller for computing arbitrary hashes - hr hash.Roller - // preallocated slices - p [maxMatches]int64 - distances [maxMatches + shortDists]int -} - -// hashTableExponent derives the hash table exponent from the dictionary -// capacity. -func hashTableExponent(n uint32) int { - e := 30 - nlz32(n) - switch { - case e < minTableExponent: - e = minTableExponent - case e > maxTableExponent: - e = maxTableExponent - } - return e -} - -// newHashTable creates a new hash table for words of length wordLen -func newHashTable(capacity int, wordLen int) (t *hashTable, err error) { - if !(0 < capacity) { - return nil, errors.New( - "newHashTable: capacity must not be negative") - } - exp := hashTableExponent(uint32(capacity)) - if !(1 <= wordLen && wordLen <= 4) { - return nil, errors.New("newHashTable: " + - "argument wordLen out of range") - } - n := 1 << uint(exp) - if n <= 0 { - panic("newHashTable: exponent is too large") - } - t = &hashTable{ - t: make([]int64, n), - data: make([]uint32, capacity), - mask: (uint64(1) << uint(exp)) - 1, - hoff: -int64(wordLen), - wordLen: wordLen, - wr: newRoller(wordLen), - hr: newRoller(wordLen), - } - return t, nil -} - -func (t *hashTable) SetDict(d *encoderDict) { t.dict = d } - -// buffered returns the number of bytes that are currently hashed. -func (t *hashTable) buffered() int { - n := t.hoff + 1 - switch { - case n <= 0: - return 0 - case n >= int64(len(t.data)): - return len(t.data) - } - return int(n) -} - -// addIndex adds n to an index ensuring that is stays inside the -// circular buffer for the hash chain. -func (t *hashTable) addIndex(i, n int) int { - i += n - len(t.data) - if i < 0 { - i += len(t.data) - } - return i -} - -// putDelta puts the delta instance at the current front of the circular -// chain buffer. -func (t *hashTable) putDelta(delta uint32) { - t.data[t.front] = delta - t.front = t.addIndex(t.front, 1) -} - -// putEntry puts a new entry into the hash table. If there is already a -// value stored it is moved into the circular chain buffer. -func (t *hashTable) putEntry(h uint64, pos int64) { - if pos < 0 { - return - } - i := h & t.mask - old := t.t[i] - 1 - t.t[i] = pos + 1 - var delta int64 - if old >= 0 { - delta = pos - old - if delta > 1<<32-1 || delta > int64(t.buffered()) { - delta = 0 - } - } - t.putDelta(uint32(delta)) -} - -// WriteByte converts a single byte into a hash and puts them into the hash -// table. -func (t *hashTable) WriteByte(b byte) error { - h := t.wr.RollByte(b) - t.hoff++ - t.putEntry(h, t.hoff) - return nil -} - -// Write converts the bytes provided into hash tables and stores the -// abbreviated offsets into the hash table. The method will never return an -// error. -func (t *hashTable) Write(p []byte) (n int, err error) { - for _, b := range p { - // WriteByte doesn't generate an error. - t.WriteByte(b) - } - return len(p), nil -} - -// getMatches the matches for a specific hash. The functions returns the -// number of positions found. -// -// TODO: Make a getDistances because that we are actually interested in. -func (t *hashTable) getMatches(h uint64, positions []int64) (n int) { - if t.hoff < 0 || len(positions) == 0 { - return 0 - } - buffered := t.buffered() - tailPos := t.hoff + 1 - int64(buffered) - rear := t.front - buffered - if rear >= 0 { - rear -= len(t.data) - } - // get the slot for the hash - pos := t.t[h&t.mask] - 1 - delta := pos - tailPos - for { - if delta < 0 { - return n - } - positions[n] = tailPos + delta - n++ - if n >= len(positions) { - return n - } - i := rear + int(delta) - if i < 0 { - i += len(t.data) - } - u := t.data[i] - if u == 0 { - return n - } - delta -= int64(u) - } -} - -// hash computes the rolling hash for the word stored in p. For correct -// results its length must be equal to t.wordLen. -func (t *hashTable) hash(p []byte) uint64 { - var h uint64 - for _, b := range p { - h = t.hr.RollByte(b) - } - return h -} - -// Matches fills the positions slice with potential matches. The -// functions returns the number of positions filled into positions. The -// byte slice p must have word length of the hash table. -func (t *hashTable) Matches(p []byte, positions []int64) int { - if len(p) != t.wordLen { - panic(fmt.Errorf( - "byte slice must have length %d", t.wordLen)) - } - h := t.hash(p) - return t.getMatches(h, positions) -} - -// NextOp identifies the next operation using the hash table. -// -// TODO: Use all repetitions to find matches. -func (t *hashTable) NextOp(rep [4]uint32) operation { - // get positions - data := t.dict.data[:maxMatchLen] - n, _ := t.dict.buf.Peek(data) - data = data[:n] - var p []int64 - if n < t.wordLen { - p = t.p[:0] - } else { - p = t.p[:maxMatches] - n = t.Matches(data[:t.wordLen], p) - p = p[:n] - } - - // convert positions in potential distances - head := t.dict.head - dists := append(t.distances[:0], 1, 2, 3, 4, 5, 6, 7, 8) - for _, pos := range p { - dis := int(head - pos) - if dis > shortDists { - dists = append(dists, dis) - } - } - - // check distances - var m match - dictLen := t.dict.DictLen() - for _, dist := range dists { - if dist > dictLen { - continue - } - - // Here comes a trick. We are only interested in matches - // that are longer than the matches we have been found - // before. So before we test the whole byte sequence at - // the given distance, we test the first byte that would - // make the match longer. If it doesn't match the byte - // to match, we don't to care any longer. - i := t.dict.buf.rear - dist + m.n - if i < 0 { - i += len(t.dict.buf.data) - } - if t.dict.buf.data[i] != data[m.n] { - // We can't get a longer match. Jump to the next - // distance. - continue - } - - n := t.dict.buf.matchLen(dist, data) - switch n { - case 0: - continue - case 1: - if uint32(dist-minDistance) != rep[0] { - continue - } - } - if n > m.n { - m = match{int64(dist), n} - if n == len(data) { - // No better match will be found. - break - } - } - } - - if m.n == 0 { - return lit{data[0]} - } - return m -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/header.go b/vendor/github.com/ulikunitz/xz/lzma/header.go deleted file mode 100644 index 1ae7d80cab..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/header.go +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" -) - -// uint32LE reads an uint32 integer from a byte slice -func uint32LE(b []byte) uint32 { - x := uint32(b[3]) << 24 - x |= uint32(b[2]) << 16 - x |= uint32(b[1]) << 8 - x |= uint32(b[0]) - return x -} - -// uint64LE converts the uint64 value stored as little endian to an uint64 -// value. -func uint64LE(b []byte) uint64 { - x := uint64(b[7]) << 56 - x |= uint64(b[6]) << 48 - x |= uint64(b[5]) << 40 - x |= uint64(b[4]) << 32 - x |= uint64(b[3]) << 24 - x |= uint64(b[2]) << 16 - x |= uint64(b[1]) << 8 - x |= uint64(b[0]) - return x -} - -// putUint32LE puts an uint32 integer into a byte slice that must have at least -// a length of 4 bytes. -func putUint32LE(b []byte, x uint32) { - b[0] = byte(x) - b[1] = byte(x >> 8) - b[2] = byte(x >> 16) - b[3] = byte(x >> 24) -} - -// putUint64LE puts the uint64 value into the byte slice as little endian -// value. The byte slice b must have at least place for 8 bytes. -func putUint64LE(b []byte, x uint64) { - b[0] = byte(x) - b[1] = byte(x >> 8) - b[2] = byte(x >> 16) - b[3] = byte(x >> 24) - b[4] = byte(x >> 32) - b[5] = byte(x >> 40) - b[6] = byte(x >> 48) - b[7] = byte(x >> 56) -} - -// noHeaderSize defines the value of the length field in the LZMA header. -const noHeaderSize uint64 = 1<<64 - 1 - -// HeaderLen provides the length of the LZMA file header. -const HeaderLen = 13 - -// header represents the header of an LZMA file. -type header struct { - properties Properties - dictCap int - // uncompressed size; negative value if no size is given - size int64 -} - -// marshalBinary marshals the header. -func (h *header) marshalBinary() (data []byte, err error) { - if err = h.properties.verify(); err != nil { - return nil, err - } - if !(0 <= h.dictCap && int64(h.dictCap) <= MaxDictCap) { - return nil, fmt.Errorf("lzma: DictCap %d out of range", - h.dictCap) - } - - data = make([]byte, 13) - - // property byte - data[0] = h.properties.Code() - - // dictionary capacity - putUint32LE(data[1:5], uint32(h.dictCap)) - - // uncompressed size - var s uint64 - if h.size > 0 { - s = uint64(h.size) - } else { - s = noHeaderSize - } - putUint64LE(data[5:], s) - - return data, nil -} - -// unmarshalBinary unmarshals the header. -func (h *header) unmarshalBinary(data []byte) error { - if len(data) != HeaderLen { - return errors.New("lzma.unmarshalBinary: data has wrong length") - } - - // properties - var err error - if h.properties, err = PropertiesForCode(data[0]); err != nil { - return err - } - - // dictionary capacity - h.dictCap = int(uint32LE(data[1:])) - if h.dictCap < 0 { - return errors.New( - "LZMA header: dictionary capacity exceeds maximum " + - "integer") - } - - // uncompressed size - s := uint64LE(data[5:]) - if s == noHeaderSize { - h.size = -1 - } else { - h.size = int64(s) - if h.size < 0 { - return errors.New( - "LZMA header: uncompressed size " + - "out of int64 range") - } - } - - return nil -} - -// validDictCap checks whether the dictionary capacity is correct. This -// is used to weed out wrong file headers. -func validDictCap(dictcap int) bool { - if int64(dictcap) == MaxDictCap { - return true - } - for n := uint(10); n < 32; n++ { - if dictcap == 1<= 10 or 2^32-1. If -// there is an explicit size it must not exceed 256 GiB. The length of -// the data argument must be HeaderLen. -func ValidHeader(data []byte) bool { - var h header - if err := h.unmarshalBinary(data); err != nil { - return false - } - if !validDictCap(h.dictCap) { - return false - } - return h.size < 0 || h.size <= 1<<38 -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/header2.go b/vendor/github.com/ulikunitz/xz/lzma/header2.go deleted file mode 100644 index 081fc840b6..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/header2.go +++ /dev/null @@ -1,398 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - "io" -) - -const ( - // maximum size of compressed data in a chunk - maxCompressed = 1 << 16 - // maximum size of uncompressed data in a chunk - maxUncompressed = 1 << 21 -) - -// chunkType represents the type of an LZMA2 chunk. Note that this -// value is an internal representation and no actual encoding of a LZMA2 -// chunk header. -type chunkType byte - -// Possible values for the chunk type. -const ( - // end of stream - cEOS chunkType = iota - // uncompressed; reset dictionary - cUD - // uncompressed; no reset of dictionary - cU - // LZMA compressed; no reset - cL - // LZMA compressed; reset state - cLR - // LZMA compressed; reset state; new property value - cLRN - // LZMA compressed; reset state; new property value; reset dictionary - cLRND -) - -// chunkTypeStrings provide a string representation for the chunk types. -var chunkTypeStrings = [...]string{ - cEOS: "EOS", - cU: "U", - cUD: "UD", - cL: "L", - cLR: "LR", - cLRN: "LRN", - cLRND: "LRND", -} - -// String returns a string representation of the chunk type. -func (c chunkType) String() string { - if !(cEOS <= c && c <= cLRND) { - return "unknown" - } - return chunkTypeStrings[c] -} - -// Actual encodings for the chunk types in the value. Note that the high -// uncompressed size bits are stored in the header byte additionally. -const ( - hEOS = 0 - hUD = 1 - hU = 2 - hL = 1 << 7 - hLR = 1<<7 | 1<<5 - hLRN = 1<<7 | 1<<6 - hLRND = 1<<7 | 1<<6 | 1<<5 -) - -// errHeaderByte indicates an unsupported value for the chunk header -// byte. These bytes starts the variable-length chunk header. -var errHeaderByte = errors.New("lzma: unsupported chunk header byte") - -// headerChunkType converts the header byte into a chunk type. It -// ignores the uncompressed size bits in the chunk header byte. -func headerChunkType(h byte) (c chunkType, err error) { - if h&hL == 0 { - // no compression - switch h { - case hEOS: - c = cEOS - case hUD: - c = cUD - case hU: - c = cU - default: - return 0, errHeaderByte - } - return - } - switch h & hLRND { - case hL: - c = cL - case hLR: - c = cLR - case hLRN: - c = cLRN - case hLRND: - c = cLRND - default: - return 0, errHeaderByte - } - return -} - -// uncompressedHeaderLen provides the length of an uncompressed header -const uncompressedHeaderLen = 3 - -// headerLen returns the length of the LZMA2 header for a given chunk -// type. -func headerLen(c chunkType) int { - switch c { - case cEOS: - return 1 - case cU, cUD: - return uncompressedHeaderLen - case cL, cLR: - return 5 - case cLRN, cLRND: - return 6 - } - panic(fmt.Errorf("unsupported chunk type %d", c)) -} - -// chunkHeader represents the contents of a chunk header. -type chunkHeader struct { - ctype chunkType - uncompressed uint32 - compressed uint16 - props Properties -} - -// String returns a string representation of the chunk header. -func (h *chunkHeader) String() string { - return fmt.Sprintf("%s %d %d %s", h.ctype, h.uncompressed, - h.compressed, &h.props) -} - -// UnmarshalBinary reads the content of the chunk header from the data -// slice. The slice must have the correct length. -func (h *chunkHeader) UnmarshalBinary(data []byte) error { - if len(data) == 0 { - return errors.New("no data") - } - c, err := headerChunkType(data[0]) - if err != nil { - return err - } - - n := headerLen(c) - if len(data) < n { - return errors.New("incomplete data") - } - if len(data) > n { - return errors.New("invalid data length") - } - - *h = chunkHeader{ctype: c} - if c == cEOS { - return nil - } - - h.uncompressed = uint32(uint16BE(data[1:3])) - if c <= cU { - return nil - } - h.uncompressed |= uint32(data[0]&^hLRND) << 16 - - h.compressed = uint16BE(data[3:5]) - if c <= cLR { - return nil - } - - h.props, err = PropertiesForCode(data[5]) - return err -} - -// MarshalBinary encodes the chunk header value. The function checks -// whether the content of the chunk header is correct. -func (h *chunkHeader) MarshalBinary() (data []byte, err error) { - if h.ctype > cLRND { - return nil, errors.New("invalid chunk type") - } - if err = h.props.verify(); err != nil { - return nil, err - } - - data = make([]byte, headerLen(h.ctype)) - - switch h.ctype { - case cEOS: - return data, nil - case cUD: - data[0] = hUD - case cU: - data[0] = hU - case cL: - data[0] = hL - case cLR: - data[0] = hLR - case cLRN: - data[0] = hLRN - case cLRND: - data[0] = hLRND - } - - putUint16BE(data[1:3], uint16(h.uncompressed)) - if h.ctype <= cU { - return data, nil - } - data[0] |= byte(h.uncompressed>>16) &^ hLRND - - putUint16BE(data[3:5], h.compressed) - if h.ctype <= cLR { - return data, nil - } - - data[5] = h.props.Code() - return data, nil -} - -// readChunkHeader reads the chunk header from the IO reader. -func readChunkHeader(r io.Reader) (h *chunkHeader, err error) { - p := make([]byte, 1, 6) - if _, err = io.ReadFull(r, p); err != nil { - return - } - c, err := headerChunkType(p[0]) - if err != nil { - return - } - p = p[:headerLen(c)] - if _, err = io.ReadFull(r, p[1:]); err != nil { - return - } - h = new(chunkHeader) - if err = h.UnmarshalBinary(p); err != nil { - return nil, err - } - return h, nil -} - -// uint16BE converts a big-endian uint16 representation to an uint16 -// value. -func uint16BE(p []byte) uint16 { - return uint16(p[0])<<8 | uint16(p[1]) -} - -// putUint16BE puts the big-endian uint16 presentation into the given -// slice. -func putUint16BE(p []byte, x uint16) { - p[0] = byte(x >> 8) - p[1] = byte(x) -} - -// chunkState is used to manage the state of the chunks -type chunkState byte - -// start and stop define the initial and terminating state of the chunk -// state -const ( - start chunkState = 'S' - stop chunkState = 'T' -) - -// errors for the chunk state handling -var ( - errChunkType = errors.New("lzma: unexpected chunk type") - errState = errors.New("lzma: wrong chunk state") -) - -// next transitions state based on chunk type input -func (c *chunkState) next(ctype chunkType) error { - switch *c { - // start state - case 'S': - switch ctype { - case cEOS: - *c = 'T' - case cUD: - *c = 'R' - case cLRND: - *c = 'L' - default: - return errChunkType - } - // normal LZMA mode - case 'L': - switch ctype { - case cEOS: - *c = 'T' - case cUD: - *c = 'R' - case cU: - *c = 'U' - case cL, cLR, cLRN, cLRND: - break - default: - return errChunkType - } - // reset required - case 'R': - switch ctype { - case cEOS: - *c = 'T' - case cUD, cU: - break - case cLRN, cLRND: - *c = 'L' - default: - return errChunkType - } - // uncompressed - case 'U': - switch ctype { - case cEOS: - *c = 'T' - case cUD: - *c = 'R' - case cU: - break - case cL, cLR, cLRN, cLRND: - *c = 'L' - default: - return errChunkType - } - // terminal state - case 'T': - return errChunkType - default: - return errState - } - return nil -} - -// defaultChunkType returns the default chunk type for each chunk state. -func (c chunkState) defaultChunkType() chunkType { - switch c { - case 'S': - return cLRND - case 'L', 'U': - return cL - case 'R': - return cLRN - default: - // no error - return cEOS - } -} - -// maxDictCap defines the maximum dictionary capacity supported by the -// LZMA2 dictionary capacity encoding. -const maxDictCap = 1<<32 - 1 - -// maxDictCapCode defines the maximum dictionary capacity code. -const maxDictCapCode = 40 - -// The function decodes the dictionary capacity byte, but doesn't change -// for the correct range of the given byte. -func decodeDictCap(c byte) int64 { - return (2 | int64(c)&1) << (11 + (c>>1)&0x1f) -} - -// DecodeDictCap decodes the encoded dictionary capacity. The function -// returns an error if the code is out of range. -func DecodeDictCap(c byte) (n int64, err error) { - if c >= maxDictCapCode { - if c == maxDictCapCode { - return maxDictCap, nil - } - return 0, errors.New("lzma: invalid dictionary size code") - } - return decodeDictCap(c), nil -} - -// EncodeDictCap encodes a dictionary capacity. The function returns the -// code for the capacity that is greater or equal n. If n exceeds the -// maximum support dictionary capacity, the maximum value is returned. -func EncodeDictCap(n int64) byte { - a, b := byte(0), byte(40) - for a < b { - c := a + (b-a)>>1 - m := decodeDictCap(c) - if n <= m { - if n == m { - return c - } - b = c - } else { - a = c + 1 - } - } - return a -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go b/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go deleted file mode 100644 index 1ea5320a0c..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import "errors" - -// maxPosBits defines the number of bits of the position value that are used to -// to compute the posState value. The value is used to select the tree codec -// for length encoding and decoding. -const maxPosBits = 4 - -// minMatchLen and maxMatchLen give the minimum and maximum values for -// encoding and decoding length values. minMatchLen is also used as base -// for the encoded length values. -const ( - minMatchLen = 2 - maxMatchLen = minMatchLen + 16 + 256 - 1 -) - -// lengthCodec support the encoding of the length value. -type lengthCodec struct { - choice [2]prob - low [1 << maxPosBits]treeCodec - mid [1 << maxPosBits]treeCodec - high treeCodec -} - -// deepcopy initializes the lc value as deep copy of the source value. -func (lc *lengthCodec) deepcopy(src *lengthCodec) { - if lc == src { - return - } - lc.choice = src.choice - for i := range lc.low { - lc.low[i].deepcopy(&src.low[i]) - } - for i := range lc.mid { - lc.mid[i].deepcopy(&src.mid[i]) - } - lc.high.deepcopy(&src.high) -} - -// init initializes a new length codec. -func (lc *lengthCodec) init() { - for i := range lc.choice { - lc.choice[i] = probInit - } - for i := range lc.low { - lc.low[i] = makeTreeCodec(3) - } - for i := range lc.mid { - lc.mid[i] = makeTreeCodec(3) - } - lc.high = makeTreeCodec(8) -} - -// Encode encodes the length offset. The length offset l can be compute by -// subtracting minMatchLen (2) from the actual length. -// -// l = length - minMatchLen -func (lc *lengthCodec) Encode(e *rangeEncoder, l uint32, posState uint32, -) (err error) { - if l > maxMatchLen-minMatchLen { - return errors.New("lengthCodec.Encode: l out of range") - } - if l < 8 { - if err = lc.choice[0].Encode(e, 0); err != nil { - return - } - return lc.low[posState].Encode(e, l) - } - if err = lc.choice[0].Encode(e, 1); err != nil { - return - } - if l < 16 { - if err = lc.choice[1].Encode(e, 0); err != nil { - return - } - return lc.mid[posState].Encode(e, l-8) - } - if err = lc.choice[1].Encode(e, 1); err != nil { - return - } - if err = lc.high.Encode(e, l-16); err != nil { - return - } - return nil -} - -// Decode reads the length offset. Add minMatchLen to compute the actual length -// to the length offset l. -func (lc *lengthCodec) Decode(d *rangeDecoder, posState uint32, -) (l uint32, err error) { - var b uint32 - if b, err = lc.choice[0].Decode(d); err != nil { - return - } - if b == 0 { - l, err = lc.low[posState].Decode(d) - return - } - if b, err = lc.choice[1].Decode(d); err != nil { - return - } - if b == 0 { - l, err = lc.mid[posState].Decode(d) - l += 8 - return - } - l, err = lc.high.Decode(d) - l += 16 - return -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go b/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go deleted file mode 100644 index e4ef5fc59c..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// literalCodec supports the encoding of literal. It provides 768 probability -// values per literal state. The upper 512 probabilities are used with the -// context of a match bit. -type literalCodec struct { - probs []prob -} - -// deepcopy initializes literal codec c as a deep copy of the source. -func (c *literalCodec) deepcopy(src *literalCodec) { - if c == src { - return - } - c.probs = make([]prob, len(src.probs)) - copy(c.probs, src.probs) -} - -// init initializes the literal codec. -func (c *literalCodec) init(lc, lp int) { - switch { - case !(minLC <= lc && lc <= maxLC): - panic("lc out of range") - case !(minLP <= lp && lp <= maxLP): - panic("lp out of range") - } - c.probs = make([]prob, 0x300<= 7 { - m := uint32(match) - for { - matchBit := (m >> 7) & 1 - m <<= 1 - bit := (r >> 7) & 1 - r <<= 1 - i := ((1 + matchBit) << 8) | symbol - if err = probs[i].Encode(e, bit); err != nil { - return - } - symbol = (symbol << 1) | bit - if matchBit != bit { - break - } - if symbol >= 0x100 { - break - } - } - } - for symbol < 0x100 { - bit := (r >> 7) & 1 - r <<= 1 - if err = probs[symbol].Encode(e, bit); err != nil { - return - } - symbol = (symbol << 1) | bit - } - return nil -} - -// Decode decodes a literal byte using the range decoder as well as the LZMA -// state, a match byte, and the literal state. -func (c *literalCodec) Decode(d *rangeDecoder, - state uint32, match byte, litState uint32, -) (s byte, err error) { - k := litState * 0x300 - probs := c.probs[k : k+0x300] - symbol := uint32(1) - if state >= 7 { - m := uint32(match) - for { - matchBit := (m >> 7) & 1 - m <<= 1 - i := ((1 + matchBit) << 8) | symbol - bit, err := d.DecodeBit(&probs[i]) - if err != nil { - return 0, err - } - symbol = (symbol << 1) | bit - if matchBit != bit { - break - } - if symbol >= 0x100 { - break - } - } - } - for symbol < 0x100 { - bit, err := d.DecodeBit(&probs[symbol]) - if err != nil { - return 0, err - } - symbol = (symbol << 1) | bit - } - s = byte(symbol - 0x100) - return s, nil -} - -// minLC and maxLC define the range for LC values. -const ( - minLC = 0 - maxLC = 8 -) - -// minLC and maxLC define the range for LP values. -const ( - minLP = 0 - maxLP = 4 -) diff --git a/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go b/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go deleted file mode 100644 index 02dfb8bf51..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import "errors" - -// MatchAlgorithm identifies an algorithm to find matches in the -// dictionary. -type MatchAlgorithm byte - -// Supported matcher algorithms. -const ( - HashTable4 MatchAlgorithm = iota - BinaryTree -) - -// maStrings are used by the String method. -var maStrings = map[MatchAlgorithm]string{ - HashTable4: "HashTable4", - BinaryTree: "BinaryTree", -} - -// String returns a string representation of the Matcher. -func (a MatchAlgorithm) String() string { - if s, ok := maStrings[a]; ok { - return s - } - return "unknown" -} - -var errUnsupportedMatchAlgorithm = errors.New( - "lzma: unsupported match algorithm value") - -// verify checks whether the matcher value is supported. -func (a MatchAlgorithm) verify() error { - if _, ok := maStrings[a]; !ok { - return errUnsupportedMatchAlgorithm - } - return nil -} - -func (a MatchAlgorithm) new(dictCap int) (m matcher, err error) { - switch a { - case HashTable4: - return newHashTable(dictCap, 4) - case BinaryTree: - return newBinTree(dictCap) - } - return nil, errUnsupportedMatchAlgorithm -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/operation.go b/vendor/github.com/ulikunitz/xz/lzma/operation.go deleted file mode 100644 index 7b7eddc3d4..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/operation.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "fmt" - "unicode" -) - -// operation represents an operation on the dictionary during encoding or -// decoding. -type operation interface { - Len() int -} - -// rep represents a repetition at the given distance and the given length -type match struct { - // supports all possible distance values, including the eos marker - distance int64 - // length - n int -} - -// Len returns the number of bytes matched. -func (m match) Len() int { - return m.n -} - -// String returns a string representation for the repetition. -func (m match) String() string { - return fmt.Sprintf("M{%d,%d}", m.distance, m.n) -} - -// lit represents a single byte literal. -type lit struct { - b byte -} - -// Len returns 1 for the single byte literal. -func (l lit) Len() int { - return 1 -} - -// String returns a string representation for the literal. -func (l lit) String() string { - var c byte - if unicode.IsPrint(rune(l.b)) { - c = l.b - } else { - c = '.' - } - return fmt.Sprintf("L{%c/%02x}", c, l.b) -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/prob.go b/vendor/github.com/ulikunitz/xz/lzma/prob.go deleted file mode 100644 index 2feccba11d..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/prob.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// movebits defines the number of bits used for the updates of probability -// values. -const movebits = 5 - -// probbits defines the number of bits of a probability value. -const probbits = 11 - -// probInit defines 0.5 as initial value for prob values. -const probInit prob = 1 << (probbits - 1) - -// Type prob represents probabilities. The type can also be used to encode and -// decode single bits. -type prob uint16 - -// Dec decreases the probability. The decrease is proportional to the -// probability value. -func (p *prob) dec() { - *p -= *p >> movebits -} - -// Inc increases the probability. The Increase is proportional to the -// difference of 1 and the probability value. -func (p *prob) inc() { - *p += ((1 << probbits) - *p) >> movebits -} - -// Computes the new bound for a given range using the probability value. -func (p prob) bound(r uint32) uint32 { - return (r >> probbits) * uint32(p) -} - -// Bits returns 1. One is the number of bits that can be encoded or decoded -// with a single prob value. -func (p prob) Bits() int { - return 1 -} - -// Encode encodes the least-significant bit of v. Note that the p value will be -// changed. -func (p *prob) Encode(e *rangeEncoder, v uint32) error { - return e.EncodeBit(v, p) -} - -// Decode decodes a single bit. Note that the p value will change. -func (p *prob) Decode(d *rangeDecoder) (v uint32, err error) { - return d.DecodeBit(p) -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/properties.go b/vendor/github.com/ulikunitz/xz/lzma/properties.go deleted file mode 100644 index 15b754ccb9..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/properties.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" -) - -// maximum and minimum values for the LZMA properties. -const ( - minPB = 0 - maxPB = 4 -) - -// maxPropertyCode is the possible maximum of a properties code byte. -const maxPropertyCode = (maxPB+1)*(maxLP+1)*(maxLC+1) - 1 - -// Properties contains the parameters LC, LP and PB. The parameter LC -// defines the number of literal context bits; parameter LP the number -// of literal position bits and PB the number of position bits. -type Properties struct { - LC int - LP int - PB int -} - -// String returns the properties in a string representation. -func (p *Properties) String() string { - return fmt.Sprintf("LC %d LP %d PB %d", p.LC, p.LP, p.PB) -} - -// PropertiesForCode converts a properties code byte into a Properties value. -func PropertiesForCode(code byte) (p Properties, err error) { - if code > maxPropertyCode { - return p, errors.New("lzma: invalid properties code") - } - p.LC = int(code % 9) - code /= 9 - p.LP = int(code % 5) - code /= 5 - p.PB = int(code % 5) - return p, err -} - -// verify checks the properties for correctness. -func (p *Properties) verify() error { - if p == nil { - return errors.New("lzma: properties are nil") - } - if !(minLC <= p.LC && p.LC <= maxLC) { - return errors.New("lzma: lc out of range") - } - if !(minLP <= p.LP && p.LP <= maxLP) { - return errors.New("lzma: lp out of range") - } - if !(minPB <= p.PB && p.PB <= maxPB) { - return errors.New("lzma: pb out of range") - } - return nil -} - -// Code converts the properties to a byte. The function assumes that -// the properties components are all in range. -func (p Properties) Code() byte { - return byte((p.PB*5+p.LP)*9 + p.LC) -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go b/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go deleted file mode 100644 index 4b0fee3ff8..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" -) - -// rangeEncoder implements range encoding of single bits. The low value can -// overflow therefore we need uint64. The cache value is used to handle -// overflows. -type rangeEncoder struct { - lbw *LimitedByteWriter - nrange uint32 - low uint64 - cacheLen int64 - cache byte -} - -// maxInt64 provides the maximal value of the int64 type -const maxInt64 = 1<<63 - 1 - -// newRangeEncoder creates a new range encoder. -func newRangeEncoder(bw io.ByteWriter) (re *rangeEncoder, err error) { - lbw, ok := bw.(*LimitedByteWriter) - if !ok { - lbw = &LimitedByteWriter{BW: bw, N: maxInt64} - } - return &rangeEncoder{ - lbw: lbw, - nrange: 0xffffffff, - cacheLen: 1}, nil -} - -// Available returns the number of bytes that still can be written. The -// method takes the bytes that will be currently written by Close into -// account. -func (e *rangeEncoder) Available() int64 { - return e.lbw.N - (e.cacheLen + 4) -} - -// writeByte writes a single byte to the underlying writer. An error is -// returned if the limit is reached. The written byte will be counted if -// the underlying writer doesn't return an error. -func (e *rangeEncoder) writeByte(c byte) error { - if e.Available() < 1 { - return ErrLimit - } - return e.lbw.WriteByte(c) -} - -// DirectEncodeBit encodes the least-significant bit of b with probability 1/2. -func (e *rangeEncoder) DirectEncodeBit(b uint32) error { - e.nrange >>= 1 - e.low += uint64(e.nrange) & (0 - (uint64(b) & 1)) - - // normalize - const top = 1 << 24 - if e.nrange >= top { - return nil - } - e.nrange <<= 8 - return e.shiftLow() -} - -// EncodeBit encodes the least significant bit of b. The p value will be -// updated by the function depending on the bit encoded. -func (e *rangeEncoder) EncodeBit(b uint32, p *prob) error { - bound := p.bound(e.nrange) - if b&1 == 0 { - e.nrange = bound - p.inc() - } else { - e.low += uint64(bound) - e.nrange -= bound - p.dec() - } - - // normalize - const top = 1 << 24 - if e.nrange >= top { - return nil - } - e.nrange <<= 8 - return e.shiftLow() -} - -// Close writes a complete copy of the low value. -func (e *rangeEncoder) Close() error { - for i := 0; i < 5; i++ { - if err := e.shiftLow(); err != nil { - return err - } - } - return nil -} - -// shiftLow shifts the low value for 8 bit. The shifted byte is written into -// the byte writer. The cache value is used to handle overflows. -func (e *rangeEncoder) shiftLow() error { - if uint32(e.low) < 0xff000000 || (e.low>>32) != 0 { - tmp := e.cache - for { - err := e.writeByte(tmp + byte(e.low>>32)) - if err != nil { - return err - } - tmp = 0xff - e.cacheLen-- - if e.cacheLen <= 0 { - if e.cacheLen < 0 { - panic("negative cacheLen") - } - break - } - } - e.cache = byte(uint32(e.low) >> 24) - } - e.cacheLen++ - e.low = uint64(uint32(e.low) << 8) - return nil -} - -// rangeDecoder decodes single bits of the range encoding stream. -type rangeDecoder struct { - br io.ByteReader - nrange uint32 - code uint32 -} - -// newRangeDecoder initializes a range decoder. It reads five bytes from the -// reader and therefore may return an error. -func newRangeDecoder(br io.ByteReader) (d *rangeDecoder, err error) { - d = &rangeDecoder{br: br, nrange: 0xffffffff} - - b, err := d.br.ReadByte() - if err != nil { - return nil, err - } - if b != 0 { - return nil, errors.New("newRangeDecoder: first byte not zero") - } - - for i := 0; i < 4; i++ { - if err = d.updateCode(); err != nil { - return nil, err - } - } - - if d.code >= d.nrange { - return nil, errors.New("newRangeDecoder: d.code >= d.nrange") - } - - return d, nil -} - -// possiblyAtEnd checks whether the decoder may be at the end of the stream. -func (d *rangeDecoder) possiblyAtEnd() bool { - return d.code == 0 -} - -// DirectDecodeBit decodes a bit with probability 1/2. The return value b will -// contain the bit at the least-significant position. All other bits will be -// zero. -func (d *rangeDecoder) DirectDecodeBit() (b uint32, err error) { - d.nrange >>= 1 - d.code -= d.nrange - t := 0 - (d.code >> 31) - d.code += d.nrange & t - b = (t + 1) & 1 - - // d.code will stay less then d.nrange - - // normalize - // assume d.code < d.nrange - const top = 1 << 24 - if d.nrange >= top { - return b, nil - } - d.nrange <<= 8 - // d.code < d.nrange will be maintained - return b, d.updateCode() -} - -// decodeBit decodes a single bit. The bit will be returned at the -// least-significant position. All other bits will be zero. The probability -// value will be updated. -func (d *rangeDecoder) DecodeBit(p *prob) (b uint32, err error) { - bound := p.bound(d.nrange) - if d.code < bound { - d.nrange = bound - p.inc() - b = 0 - } else { - d.code -= bound - d.nrange -= bound - p.dec() - b = 1 - } - // normalize - // assume d.code < d.nrange - const top = 1 << 24 - if d.nrange >= top { - return b, nil - } - d.nrange <<= 8 - // d.code < d.nrange will be maintained - return b, d.updateCode() -} - -// updateCode reads a new byte into the code. -func (d *rangeDecoder) updateCode() error { - b, err := d.br.ReadByte() - if err != nil { - return err - } - d.code = (d.code << 8) | uint32(b) - return nil -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/reader.go b/vendor/github.com/ulikunitz/xz/lzma/reader.go deleted file mode 100644 index ae911c3893..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/reader.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package lzma supports the decoding and encoding of LZMA streams. -// Reader and Writer support the classic LZMA format. Reader2 and -// Writer2 support the decoding and encoding of LZMA2 streams. -// -// The package is written completely in Go and doesn't rely on any external -// library. -package lzma - -import ( - "errors" - "io" -) - -// ReaderConfig stores the parameters for the reader of the classic LZMA -// format. -type ReaderConfig struct { - DictCap int -} - -// fill converts the zero values of the configuration to the default values. -func (c *ReaderConfig) fill() { - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } -} - -// Verify checks the reader configuration for errors. Zero values will -// be replaced by default values. -func (c *ReaderConfig) Verify() error { - c.fill() - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - return nil -} - -// Reader provides a reader for LZMA files or streams. -type Reader struct { - lzma io.Reader - h header - d *decoder -} - -// NewReader creates a new reader for an LZMA stream using the classic -// format. NewReader reads and checks the header of the LZMA stream. -func NewReader(lzma io.Reader) (r *Reader, err error) { - return ReaderConfig{}.NewReader(lzma) -} - -// NewReader creates a new reader for an LZMA stream in the classic -// format. The function reads and verifies the the header of the LZMA -// stream. -func (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - data := make([]byte, HeaderLen) - if _, err := io.ReadFull(lzma, data); err != nil { - if err == io.EOF { - return nil, errors.New("lzma: unexpected EOF") - } - return nil, err - } - r = &Reader{lzma: lzma} - if err = r.h.unmarshalBinary(data); err != nil { - return nil, err - } - if r.h.dictCap < MinDictCap { - r.h.dictCap = MinDictCap - } - dictCap := r.h.dictCap - if c.DictCap > dictCap { - dictCap = c.DictCap - } - - state := newState(r.h.properties) - dict, err := newDecoderDict(dictCap) - if err != nil { - return nil, err - } - r.d, err = newDecoder(ByteReader(lzma), state, dict, r.h.size) - if err != nil { - return nil, err - } - return r, nil -} - -// EOSMarker indicates that an EOS marker has been encountered. -func (r *Reader) EOSMarker() bool { - return r.d.eosMarker -} - -// Read returns uncompressed data. -func (r *Reader) Read(p []byte) (n int, err error) { - return r.d.Read(p) -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/reader2.go b/vendor/github.com/ulikunitz/xz/lzma/reader2.go deleted file mode 100644 index f36e265050..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/reader2.go +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" - - "github.com/ulikunitz/xz/internal/xlog" -) - -// Reader2Config stores the parameters for the LZMA2 reader. -// format. -type Reader2Config struct { - DictCap int -} - -// fill converts the zero values of the configuration to the default values. -func (c *Reader2Config) fill() { - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } -} - -// Verify checks the reader configuration for errors. Zero configuration values -// will be replaced by default values. -func (c *Reader2Config) Verify() error { - c.fill() - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - return nil -} - -// Reader2 supports the reading of LZMA2 chunk sequences. Note that the -// first chunk should have a dictionary reset and the first compressed -// chunk a properties reset. The chunk sequence may not be terminated by -// an end-of-stream chunk. -type Reader2 struct { - r io.Reader - err error - - dict *decoderDict - ur *uncompressedReader - decoder *decoder - chunkReader io.Reader - - cstate chunkState -} - -// NewReader2 creates a reader for an LZMA2 chunk sequence. -func NewReader2(lzma2 io.Reader) (r *Reader2, err error) { - return Reader2Config{}.NewReader2(lzma2) -} - -// NewReader2 creates an LZMA2 reader using the given configuration. -func (c Reader2Config) NewReader2(lzma2 io.Reader) (r *Reader2, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - r = &Reader2{r: lzma2, cstate: start} - r.dict, err = newDecoderDict(c.DictCap) - if err != nil { - return nil, err - } - if err = r.startChunk(); err != nil { - r.err = err - } - return r, nil -} - -// uncompressed tests whether the chunk type specifies an uncompressed -// chunk. -func uncompressed(ctype chunkType) bool { - return ctype == cU || ctype == cUD -} - -// startChunk parses a new chunk. -func (r *Reader2) startChunk() error { - r.chunkReader = nil - header, err := readChunkHeader(r.r) - if err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return err - } - xlog.Debugf("chunk header %v", header) - if err = r.cstate.next(header.ctype); err != nil { - return err - } - if r.cstate == stop { - return io.EOF - } - if header.ctype == cUD || header.ctype == cLRND { - r.dict.Reset() - } - size := int64(header.uncompressed) + 1 - if uncompressed(header.ctype) { - if r.ur != nil { - r.ur.Reopen(r.r, size) - } else { - r.ur = newUncompressedReader(r.r, r.dict, size) - } - r.chunkReader = r.ur - return nil - } - br := ByteReader(io.LimitReader(r.r, int64(header.compressed)+1)) - if r.decoder == nil { - state := newState(header.props) - r.decoder, err = newDecoder(br, state, r.dict, size) - if err != nil { - return err - } - r.chunkReader = r.decoder - return nil - } - switch header.ctype { - case cLR: - r.decoder.State.Reset() - case cLRN, cLRND: - r.decoder.State = newState(header.props) - } - err = r.decoder.Reopen(br, size) - if err != nil { - return err - } - r.chunkReader = r.decoder - return nil -} - -// Read reads data from the LZMA2 chunk sequence. -func (r *Reader2) Read(p []byte) (n int, err error) { - if r.err != nil { - return 0, r.err - } - for n < len(p) { - var k int - k, err = r.chunkReader.Read(p[n:]) - n += k - if err != nil { - if err == io.EOF { - err = r.startChunk() - if err == nil { - continue - } - } - r.err = err - return n, err - } - if k == 0 { - r.err = errors.New("lzma: Reader2 doesn't get data") - return n, r.err - } - } - return n, nil -} - -// EOS returns whether the LZMA2 stream has been terminated by an -// end-of-stream chunk. -func (r *Reader2) EOS() bool { - return r.cstate == stop -} - -// uncompressedReader is used to read uncompressed chunks. -type uncompressedReader struct { - lr io.LimitedReader - Dict *decoderDict - eof bool - err error -} - -// newUncompressedReader initializes a new uncompressedReader. -func newUncompressedReader(r io.Reader, dict *decoderDict, size int64) *uncompressedReader { - ur := &uncompressedReader{ - lr: io.LimitedReader{R: r, N: size}, - Dict: dict, - } - return ur -} - -// Reopen reinitializes an uncompressed reader. -func (ur *uncompressedReader) Reopen(r io.Reader, size int64) { - ur.err = nil - ur.eof = false - ur.lr = io.LimitedReader{R: r, N: size} -} - -// fill reads uncompressed data into the dictionary. -func (ur *uncompressedReader) fill() error { - if !ur.eof { - n, err := io.CopyN(ur.Dict, &ur.lr, int64(ur.Dict.Available())) - if err != io.EOF { - return err - } - ur.eof = true - if n > 0 { - return nil - } - } - if ur.lr.N != 0 { - return io.ErrUnexpectedEOF - } - return io.EOF -} - -// Read reads uncompressed data from the limited reader. -func (ur *uncompressedReader) Read(p []byte) (n int, err error) { - if ur.err != nil { - return 0, ur.err - } - for { - var k int - k, err = ur.Dict.Read(p[n:]) - n += k - if n >= len(p) { - return n, nil - } - if err != nil { - break - } - err = ur.fill() - if err != nil { - break - } - } - ur.err = err - return n, err -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/state.go b/vendor/github.com/ulikunitz/xz/lzma/state.go deleted file mode 100644 index 34779c513c..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/state.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// states defines the overall state count -const states = 12 - -// State maintains the full state of the operation encoding or decoding -// process. -type state struct { - rep [4]uint32 - isMatch [states << maxPosBits]prob - isRepG0Long [states << maxPosBits]prob - isRep [states]prob - isRepG0 [states]prob - isRepG1 [states]prob - isRepG2 [states]prob - litCodec literalCodec - lenCodec lengthCodec - repLenCodec lengthCodec - distCodec distCodec - state uint32 - posBitMask uint32 - Properties Properties -} - -// initProbSlice initializes a slice of probabilities. -func initProbSlice(p []prob) { - for i := range p { - p[i] = probInit - } -} - -// Reset sets all state information to the original values. -func (s *state) Reset() { - p := s.Properties - *s = state{ - Properties: p, - // dict: s.dict, - posBitMask: (uint32(1) << uint(p.PB)) - 1, - } - initProbSlice(s.isMatch[:]) - initProbSlice(s.isRep[:]) - initProbSlice(s.isRepG0[:]) - initProbSlice(s.isRepG1[:]) - initProbSlice(s.isRepG2[:]) - initProbSlice(s.isRepG0Long[:]) - s.litCodec.init(p.LC, p.LP) - s.lenCodec.init() - s.repLenCodec.init() - s.distCodec.init() -} - -// newState creates a new state from the give Properties. -func newState(p Properties) *state { - s := &state{Properties: p} - s.Reset() - return s -} - -// deepcopy initializes s as a deep copy of the source. -func (s *state) deepcopy(src *state) { - if s == src { - return - } - s.rep = src.rep - s.isMatch = src.isMatch - s.isRepG0Long = src.isRepG0Long - s.isRep = src.isRep - s.isRepG0 = src.isRepG0 - s.isRepG1 = src.isRepG1 - s.isRepG2 = src.isRepG2 - s.litCodec.deepcopy(&src.litCodec) - s.lenCodec.deepcopy(&src.lenCodec) - s.repLenCodec.deepcopy(&src.repLenCodec) - s.distCodec.deepcopy(&src.distCodec) - s.state = src.state - s.posBitMask = src.posBitMask - s.Properties = src.Properties -} - -// cloneState creates a new clone of the give state. -func cloneState(src *state) *state { - s := new(state) - s.deepcopy(src) - return s -} - -// updateStateLiteral updates the state for a literal. -func (s *state) updateStateLiteral() { - switch { - case s.state < 4: - s.state = 0 - return - case s.state < 10: - s.state -= 3 - return - } - s.state -= 6 -} - -// updateStateMatch updates the state for a match. -func (s *state) updateStateMatch() { - if s.state < 7 { - s.state = 7 - } else { - s.state = 10 - } -} - -// updateStateRep updates the state for a repetition. -func (s *state) updateStateRep() { - if s.state < 7 { - s.state = 8 - } else { - s.state = 11 - } -} - -// updateStateShortRep updates the state for a short repetition. -func (s *state) updateStateShortRep() { - if s.state < 7 { - s.state = 9 - } else { - s.state = 11 - } -} - -// states computes the states of the operation codec. -func (s *state) states(dictHead int64) (state1, state2, posState uint32) { - state1 = s.state - posState = uint32(dictHead) & s.posBitMask - state2 = (s.state << maxPosBits) | posState - return -} - -// litState computes the literal state. -func (s *state) litState(prev byte, dictHead int64) uint32 { - lp, lc := uint(s.Properties.LP), uint(s.Properties.LC) - litState := ((uint32(dictHead) & ((1 << lp) - 1)) << lc) | - (uint32(prev) >> (8 - lc)) - return litState -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go b/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go deleted file mode 100644 index 36b29b5982..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// treeCodec encodes or decodes values with a fixed bit size. It is using a -// tree of probability value. The root of the tree is the most-significant bit. -type treeCodec struct { - probTree -} - -// makeTreeCodec makes a tree codec. The bits value must be inside the range -// [1,32]. -func makeTreeCodec(bits int) treeCodec { - return treeCodec{makeProbTree(bits)} -} - -// deepcopy initializes tc as a deep copy of the source. -func (tc *treeCodec) deepcopy(src *treeCodec) { - tc.probTree.deepcopy(&src.probTree) -} - -// Encode uses the range encoder to encode a fixed-bit-size value. -func (tc *treeCodec) Encode(e *rangeEncoder, v uint32) (err error) { - m := uint32(1) - for i := int(tc.bits) - 1; i >= 0; i-- { - b := (v >> uint(i)) & 1 - if err := e.EncodeBit(b, &tc.probs[m]); err != nil { - return err - } - m = (m << 1) | b - } - return nil -} - -// Decodes uses the range decoder to decode a fixed-bit-size value. Errors may -// be caused by the range decoder. -func (tc *treeCodec) Decode(d *rangeDecoder) (v uint32, err error) { - m := uint32(1) - for j := 0; j < int(tc.bits); j++ { - b, err := d.DecodeBit(&tc.probs[m]) - if err != nil { - return 0, err - } - m = (m << 1) | b - } - return m - (1 << uint(tc.bits)), nil -} - -// treeReverseCodec is another tree codec, where the least-significant bit is -// the start of the probability tree. -type treeReverseCodec struct { - probTree -} - -// deepcopy initializes the treeReverseCodec as a deep copy of the -// source. -func (tc *treeReverseCodec) deepcopy(src *treeReverseCodec) { - tc.probTree.deepcopy(&src.probTree) -} - -// makeTreeReverseCodec creates treeReverseCodec value. The bits argument must -// be in the range [1,32]. -func makeTreeReverseCodec(bits int) treeReverseCodec { - return treeReverseCodec{makeProbTree(bits)} -} - -// Encode uses range encoder to encode a fixed-bit-size value. The range -// encoder may cause errors. -func (tc *treeReverseCodec) Encode(v uint32, e *rangeEncoder) (err error) { - m := uint32(1) - for i := uint(0); i < uint(tc.bits); i++ { - b := (v >> i) & 1 - if err := e.EncodeBit(b, &tc.probs[m]); err != nil { - return err - } - m = (m << 1) | b - } - return nil -} - -// Decodes uses the range decoder to decode a fixed-bit-size value. Errors -// returned by the range decoder will be returned. -func (tc *treeReverseCodec) Decode(d *rangeDecoder) (v uint32, err error) { - m := uint32(1) - for j := uint(0); j < uint(tc.bits); j++ { - b, err := d.DecodeBit(&tc.probs[m]) - if err != nil { - return 0, err - } - m = (m << 1) | b - v |= b << j - } - return v, nil -} - -// probTree stores enough probability values to be used by the treeEncode and -// treeDecode methods of the range coder types. -type probTree struct { - probs []prob - bits byte -} - -// deepcopy initializes the probTree value as a deep copy of the source. -func (t *probTree) deepcopy(src *probTree) { - if t == src { - return - } - t.probs = make([]prob, len(src.probs)) - copy(t.probs, src.probs) - t.bits = src.bits -} - -// makeProbTree initializes a probTree structure. -func makeProbTree(bits int) probTree { - if !(1 <= bits && bits <= 32) { - panic("bits outside of range [1,32]") - } - t := probTree{ - bits: byte(bits), - probs: make([]prob, 1< 0 { - c.SizeInHeader = true - } - if !c.SizeInHeader { - c.EOSMarker = true - } -} - -// Verify checks WriterConfig for errors. Verify will replace zero -// values with default values. -func (c *WriterConfig) Verify() error { - c.fill() - var err error - if c == nil { - return errors.New("lzma: WriterConfig is nil") - } - if c.Properties == nil { - return errors.New("lzma: WriterConfig has no Properties set") - } - if err = c.Properties.verify(); err != nil { - return err - } - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - if !(maxMatchLen <= c.BufSize) { - return errors.New("lzma: lookahead buffer size too small") - } - if c.SizeInHeader { - if c.Size < 0 { - return errors.New("lzma: negative size not supported") - } - } else if !c.EOSMarker { - return errors.New("lzma: EOS marker is required") - } - if err = c.Matcher.verify(); err != nil { - return err - } - - return nil -} - -// header returns the header structure for this configuration. -func (c *WriterConfig) header() header { - h := header{ - properties: *c.Properties, - dictCap: c.DictCap, - size: -1, - } - if c.SizeInHeader { - h.size = c.Size - } - return h -} - -// Writer writes an LZMA stream in the classic format. -type Writer struct { - h header - bw io.ByteWriter - buf *bufio.Writer - e *encoder -} - -// NewWriter creates a new LZMA writer for the classic format. The -// method will write the header to the underlying stream. -func (c WriterConfig) NewWriter(lzma io.Writer) (w *Writer, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - w = &Writer{h: c.header()} - - var ok bool - w.bw, ok = lzma.(io.ByteWriter) - if !ok { - w.buf = bufio.NewWriter(lzma) - w.bw = w.buf - } - state := newState(w.h.properties) - m, err := c.Matcher.new(w.h.dictCap) - if err != nil { - return nil, err - } - dict, err := newEncoderDict(w.h.dictCap, c.BufSize, m) - if err != nil { - return nil, err - } - var flags encoderFlags - if c.EOSMarker { - flags = eosMarker - } - if w.e, err = newEncoder(w.bw, state, dict, flags); err != nil { - return nil, err - } - - if err = w.writeHeader(); err != nil { - return nil, err - } - return w, nil -} - -// NewWriter creates a new LZMA writer using the classic format. The -// function writes the header to the underlying stream. -func NewWriter(lzma io.Writer) (w *Writer, err error) { - return WriterConfig{}.NewWriter(lzma) -} - -// writeHeader writes the LZMA header into the stream. -func (w *Writer) writeHeader() error { - data, err := w.h.marshalBinary() - if err != nil { - return err - } - _, err = w.bw.(io.Writer).Write(data) - return err -} - -// Write puts data into the Writer. -func (w *Writer) Write(p []byte) (n int, err error) { - if w.h.size >= 0 { - m := w.h.size - m -= w.e.Compressed() + int64(w.e.dict.Buffered()) - if m < 0 { - m = 0 - } - if m < int64(len(p)) { - p = p[:m] - err = ErrNoSpace - } - } - var werr error - if n, werr = w.e.Write(p); werr != nil { - err = werr - } - return n, err -} - -// Close closes the writer stream. It ensures that all data from the -// buffer will be compressed and the LZMA stream will be finished. -func (w *Writer) Close() error { - if w.h.size >= 0 { - n := w.e.Compressed() + int64(w.e.dict.Buffered()) - if n != w.h.size { - return errSize - } - } - err := w.e.Close() - if w.buf != nil { - ferr := w.buf.Flush() - if err == nil { - err = ferr - } - } - return err -} diff --git a/vendor/github.com/ulikunitz/xz/lzma/writer2.go b/vendor/github.com/ulikunitz/xz/lzma/writer2.go deleted file mode 100644 index 97bbafa116..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzma/writer2.go +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "bytes" - "errors" - "io" -) - -// Writer2Config is used to create a Writer2 using parameters. -type Writer2Config struct { - // The properties for the encoding. If the it is nil the value - // {LC: 3, LP: 0, PB: 2} will be chosen. - Properties *Properties - // The capacity of the dictionary. If DictCap is zero, the value - // 8 MiB will be chosen. - DictCap int - // Size of the lookahead buffer; value 0 indicates default size - // 4096 - BufSize int - // Match algorithm - Matcher MatchAlgorithm -} - -// fill replaces zero values with default values. -func (c *Writer2Config) fill() { - if c.Properties == nil { - c.Properties = &Properties{LC: 3, LP: 0, PB: 2} - } - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } - if c.BufSize == 0 { - c.BufSize = 4096 - } -} - -// Verify checks the Writer2Config for correctness. Zero values will be -// replaced by default values. -func (c *Writer2Config) Verify() error { - c.fill() - var err error - if c == nil { - return errors.New("lzma: WriterConfig is nil") - } - if c.Properties == nil { - return errors.New("lzma: WriterConfig has no Properties set") - } - if err = c.Properties.verify(); err != nil { - return err - } - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - if !(maxMatchLen <= c.BufSize) { - return errors.New("lzma: lookahead buffer size too small") - } - if c.Properties.LC+c.Properties.LP > 4 { - return errors.New("lzma: sum of lc and lp exceeds 4") - } - if err = c.Matcher.verify(); err != nil { - return err - } - return nil -} - -// Writer2 supports the creation of an LZMA2 stream. But note that -// written data is buffered, so call Flush or Close to write data to the -// underlying writer. The Close method writes the end-of-stream marker -// to the stream. So you may be able to concatenate the output of two -// writers as long the output of the first writer has only been flushed -// but not closed. -// -// Any change to the fields Properties, DictCap must be done before the -// first call to Write, Flush or Close. -type Writer2 struct { - w io.Writer - - start *state - encoder *encoder - - cstate chunkState - ctype chunkType - - buf bytes.Buffer - lbw LimitedByteWriter -} - -// NewWriter2 creates an LZMA2 chunk sequence writer with the default -// parameters and options. -func NewWriter2(lzma2 io.Writer) (w *Writer2, err error) { - return Writer2Config{}.NewWriter2(lzma2) -} - -// NewWriter2 creates a new LZMA2 writer using the given configuration. -func (c Writer2Config) NewWriter2(lzma2 io.Writer) (w *Writer2, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - w = &Writer2{ - w: lzma2, - start: newState(*c.Properties), - cstate: start, - ctype: start.defaultChunkType(), - } - w.buf.Grow(maxCompressed) - w.lbw = LimitedByteWriter{BW: &w.buf, N: maxCompressed} - m, err := c.Matcher.new(c.DictCap) - if err != nil { - return nil, err - } - d, err := newEncoderDict(c.DictCap, c.BufSize, m) - if err != nil { - return nil, err - } - w.encoder, err = newEncoder(&w.lbw, cloneState(w.start), d, 0) - if err != nil { - return nil, err - } - return w, nil -} - -// written returns the number of bytes written to the current chunk -func (w *Writer2) written() int { - if w.encoder == nil { - return 0 - } - return int(w.encoder.Compressed()) + w.encoder.dict.Buffered() -} - -// errClosed indicates that the writer is closed. -var errClosed = errors.New("lzma: writer closed") - -// Writes data to LZMA2 stream. Note that written data will be buffered. -// Use Flush or Close to ensure that data is written to the underlying -// writer. -func (w *Writer2) Write(p []byte) (n int, err error) { - if w.cstate == stop { - return 0, errClosed - } - for n < len(p) { - m := maxUncompressed - w.written() - if m <= 0 { - panic("lzma: maxUncompressed reached") - } - var q []byte - if n+m < len(p) { - q = p[n : n+m] - } else { - q = p[n:] - } - k, err := w.encoder.Write(q) - n += k - if err != nil && err != ErrLimit { - return n, err - } - if err == ErrLimit || k == m { - if err = w.flushChunk(); err != nil { - return n, err - } - } - } - return n, nil -} - -// writeUncompressedChunk writes an uncompressed chunk to the LZMA2 -// stream. -func (w *Writer2) writeUncompressedChunk() error { - u := w.encoder.Compressed() - if u <= 0 { - return errors.New("lzma: can't write empty uncompressed chunk") - } - if u > maxUncompressed { - panic("overrun of uncompressed data limit") - } - switch w.ctype { - case cLRND: - w.ctype = cUD - default: - w.ctype = cU - } - w.encoder.state = w.start - - header := chunkHeader{ - ctype: w.ctype, - uncompressed: uint32(u - 1), - } - hdata, err := header.MarshalBinary() - if err != nil { - return err - } - if _, err = w.w.Write(hdata); err != nil { - return err - } - _, err = w.encoder.dict.CopyN(w.w, int(u)) - return err -} - -// writeCompressedChunk writes a compressed chunk to the underlying -// writer. -func (w *Writer2) writeCompressedChunk() error { - if w.ctype == cU || w.ctype == cUD { - panic("chunk type uncompressed") - } - - u := w.encoder.Compressed() - if u <= 0 { - return errors.New("writeCompressedChunk: empty chunk") - } - if u > maxUncompressed { - panic("overrun of uncompressed data limit") - } - c := w.buf.Len() - if c <= 0 { - panic("no compressed data") - } - if c > maxCompressed { - panic("overrun of compressed data limit") - } - header := chunkHeader{ - ctype: w.ctype, - uncompressed: uint32(u - 1), - compressed: uint16(c - 1), - props: w.encoder.state.Properties, - } - hdata, err := header.MarshalBinary() - if err != nil { - return err - } - if _, err = w.w.Write(hdata); err != nil { - return err - } - _, err = io.Copy(w.w, &w.buf) - return err -} - -// writes a single chunk to the underlying writer. -func (w *Writer2) writeChunk() error { - u := int(uncompressedHeaderLen + w.encoder.Compressed()) - c := headerLen(w.ctype) + w.buf.Len() - if u < c { - return w.writeUncompressedChunk() - } - return w.writeCompressedChunk() -} - -// flushChunk terminates the current chunk. The encoder will be reset -// to support the next chunk. -func (w *Writer2) flushChunk() error { - if w.written() == 0 { - return nil - } - var err error - if err = w.encoder.Close(); err != nil { - return err - } - if err = w.writeChunk(); err != nil { - return err - } - w.buf.Reset() - w.lbw.N = maxCompressed - if err = w.encoder.Reopen(&w.lbw); err != nil { - return err - } - if err = w.cstate.next(w.ctype); err != nil { - return err - } - w.ctype = w.cstate.defaultChunkType() - w.start = cloneState(w.encoder.state) - return nil -} - -// Flush writes all buffered data out to the underlying stream. This -// could result in multiple chunks to be created. -func (w *Writer2) Flush() error { - if w.cstate == stop { - return errClosed - } - for w.written() > 0 { - if err := w.flushChunk(); err != nil { - return err - } - } - return nil -} - -// Close terminates the LZMA2 stream with an EOS chunk. -func (w *Writer2) Close() error { - if w.cstate == stop { - return errClosed - } - if err := w.Flush(); err != nil { - return nil - } - // write zero byte EOS chunk - _, err := w.w.Write([]byte{0}) - if err != nil { - return err - } - w.cstate = stop - return nil -} diff --git a/vendor/github.com/ulikunitz/xz/lzmafilter.go b/vendor/github.com/ulikunitz/xz/lzmafilter.go deleted file mode 100644 index bd5f42ee82..0000000000 --- a/vendor/github.com/ulikunitz/xz/lzmafilter.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import ( - "errors" - "fmt" - "io" - - "github.com/ulikunitz/xz/lzma" -) - -// LZMA filter constants. -const ( - lzmaFilterID = 0x21 - lzmaFilterLen = 3 -) - -// lzmaFilter declares the LZMA2 filter information stored in an xz -// block header. -type lzmaFilter struct { - dictCap int64 -} - -// String returns a representation of the LZMA filter. -func (f lzmaFilter) String() string { - return fmt.Sprintf("LZMA dict cap %#x", f.dictCap) -} - -// id returns the ID for the LZMA2 filter. -func (f lzmaFilter) id() uint64 { return lzmaFilterID } - -// MarshalBinary converts the lzmaFilter in its encoded representation. -func (f lzmaFilter) MarshalBinary() (data []byte, err error) { - c := lzma.EncodeDictCap(f.dictCap) - return []byte{lzmaFilterID, 1, c}, nil -} - -// UnmarshalBinary unmarshals the given data representation of the LZMA2 -// filter. -func (f *lzmaFilter) UnmarshalBinary(data []byte) error { - if len(data) != lzmaFilterLen { - return errors.New("xz: data for LZMA2 filter has wrong length") - } - if data[0] != lzmaFilterID { - return errors.New("xz: wrong LZMA2 filter id") - } - if data[1] != 1 { - return errors.New("xz: wrong LZMA2 filter size") - } - dc, err := lzma.DecodeDictCap(data[2]) - if err != nil { - return errors.New("xz: wrong LZMA2 dictionary size property") - } - - f.dictCap = dc - return nil -} - -// reader creates a new reader for the LZMA2 filter. -func (f lzmaFilter) reader(r io.Reader, c *ReaderConfig) (fr io.Reader, - err error) { - - config := new(lzma.Reader2Config) - if c != nil { - config.DictCap = c.DictCap - } - dc := int(f.dictCap) - if dc < 1 { - return nil, errors.New("xz: LZMA2 filter parameter " + - "dictionary capacity overflow") - } - if dc > config.DictCap { - config.DictCap = dc - } - - fr, err = config.NewReader2(r) - if err != nil { - return nil, err - } - return fr, nil -} - -// writeCloser creates a io.WriteCloser for the LZMA2 filter. -func (f lzmaFilter) writeCloser(w io.WriteCloser, c *WriterConfig, -) (fw io.WriteCloser, err error) { - config := new(lzma.Writer2Config) - if c != nil { - *config = lzma.Writer2Config{ - Properties: c.Properties, - DictCap: c.DictCap, - BufSize: c.BufSize, - Matcher: c.Matcher, - } - } - - dc := int(f.dictCap) - if dc < 1 { - return nil, errors.New("xz: LZMA2 filter parameter " + - "dictionary capacity overflow") - } - if dc > config.DictCap { - config.DictCap = dc - } - - fw, err = config.NewWriter2(w) - if err != nil { - return nil, err - } - return fw, nil -} - -// last returns true, because an LZMA2 filter must be the last filter in -// the filter list. -func (f lzmaFilter) last() bool { return true } diff --git a/vendor/github.com/ulikunitz/xz/make-docs b/vendor/github.com/ulikunitz/xz/make-docs deleted file mode 100644 index a8c612ce17..0000000000 --- a/vendor/github.com/ulikunitz/xz/make-docs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -set -x -pandoc -t html5 -f markdown -s --css=doc/md.css -o README.html README.md -pandoc -t html5 -f markdown -s --css=doc/md.css -o TODO.html TODO.md diff --git a/vendor/github.com/ulikunitz/xz/none-check.go b/vendor/github.com/ulikunitz/xz/none-check.go deleted file mode 100644 index 6a56a26128..0000000000 --- a/vendor/github.com/ulikunitz/xz/none-check.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import "hash" - -type noneHash struct{} - -func (h noneHash) Write(p []byte) (n int, err error) { return len(p), nil } - -func (h noneHash) Sum(b []byte) []byte { return b } - -func (h noneHash) Reset() {} - -func (h noneHash) Size() int { return 0 } - -func (h noneHash) BlockSize() int { return 0 } - -func newNoneHash() hash.Hash { - return &noneHash{} -} diff --git a/vendor/github.com/ulikunitz/xz/reader.go b/vendor/github.com/ulikunitz/xz/reader.go deleted file mode 100644 index bde1412cfe..0000000000 --- a/vendor/github.com/ulikunitz/xz/reader.go +++ /dev/null @@ -1,359 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package xz supports the compression and decompression of xz files. It -// supports version 1.0.4 of the specification without the non-LZMA2 -// filters. See http://tukaani.org/xz/xz-file-format-1.0.4.txt -package xz - -import ( - "bytes" - "errors" - "fmt" - "hash" - "io" - - "github.com/ulikunitz/xz/internal/xlog" - "github.com/ulikunitz/xz/lzma" -) - -// ReaderConfig defines the parameters for the xz reader. The -// SingleStream parameter requests the reader to assume that the -// underlying stream contains only a single stream. -type ReaderConfig struct { - DictCap int - SingleStream bool -} - -// Verify checks the reader parameters for Validity. Zero values will be -// replaced by default values. -func (c *ReaderConfig) Verify() error { - if c == nil { - return errors.New("xz: reader parameters are nil") - } - lc := lzma.Reader2Config{DictCap: c.DictCap} - if err := lc.Verify(); err != nil { - return err - } - return nil -} - -// Reader supports the reading of one or multiple xz streams. -type Reader struct { - ReaderConfig - - xz io.Reader - sr *streamReader -} - -// streamReader decodes a single xz stream -type streamReader struct { - ReaderConfig - - xz io.Reader - br *blockReader - newHash func() hash.Hash - h header - index []record -} - -// NewReader creates a new xz reader using the default parameters. -// The function reads and checks the header of the first XZ stream. The -// reader will process multiple streams including padding. -func NewReader(xz io.Reader) (r *Reader, err error) { - return ReaderConfig{}.NewReader(xz) -} - -// NewReader creates an xz stream reader. The created reader will be -// able to process multiple streams and padding unless a SingleStream -// has been set in the reader configuration c. -func (c ReaderConfig) NewReader(xz io.Reader) (r *Reader, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - r = &Reader{ - ReaderConfig: c, - xz: xz, - } - if r.sr, err = c.newStreamReader(xz); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return nil, err - } - return r, nil -} - -var errUnexpectedData = errors.New("xz: unexpected data after stream") - -// Read reads uncompressed data from the stream. -func (r *Reader) Read(p []byte) (n int, err error) { - for n < len(p) { - if r.sr == nil { - if r.SingleStream { - data := make([]byte, 1) - _, err = io.ReadFull(r.xz, data) - if err != io.EOF { - return n, errUnexpectedData - } - return n, io.EOF - } - for { - r.sr, err = r.ReaderConfig.newStreamReader(r.xz) - if err != errPadding { - break - } - } - if err != nil { - return n, err - } - } - k, err := r.sr.Read(p[n:]) - n += k - if err != nil { - if err == io.EOF { - r.sr = nil - continue - } - return n, err - } - } - return n, nil -} - -var errPadding = errors.New("xz: padding (4 zero bytes) encountered") - -// newStreamReader creates a new xz stream reader using the given configuration -// parameters. NewReader reads and checks the header of the xz stream. -func (c ReaderConfig) newStreamReader(xz io.Reader) (r *streamReader, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - data := make([]byte, HeaderLen) - if _, err := io.ReadFull(xz, data[:4]); err != nil { - return nil, err - } - if bytes.Equal(data[:4], []byte{0, 0, 0, 0}) { - return nil, errPadding - } - if _, err = io.ReadFull(xz, data[4:]); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return nil, err - } - r = &streamReader{ - ReaderConfig: c, - xz: xz, - index: make([]record, 0, 4), - } - if err = r.h.UnmarshalBinary(data); err != nil { - return nil, err - } - xlog.Debugf("xz header %s", r.h) - if r.newHash, err = newHashFunc(r.h.flags); err != nil { - return nil, err - } - return r, nil -} - -// readTail reads the index body and the xz footer. -func (r *streamReader) readTail() error { - index, n, err := readIndexBody(r.xz, len(r.index)) - if err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return err - } - - for i, rec := range r.index { - if rec != index[i] { - return fmt.Errorf("xz: record %d is %v; want %v", - i, rec, index[i]) - } - } - - p := make([]byte, footerLen) - if _, err = io.ReadFull(r.xz, p); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return err - } - var f footer - if err = f.UnmarshalBinary(p); err != nil { - return err - } - xlog.Debugf("xz footer %s", f) - if f.flags != r.h.flags { - return errors.New("xz: footer flags incorrect") - } - if f.indexSize != int64(n)+1 { - return errors.New("xz: index size in footer wrong") - } - return nil -} - -// Read reads actual data from the xz stream. -func (r *streamReader) Read(p []byte) (n int, err error) { - for n < len(p) { - if r.br == nil { - bh, hlen, err := readBlockHeader(r.xz) - if err != nil { - if err == errIndexIndicator { - if err = r.readTail(); err != nil { - return n, err - } - return n, io.EOF - } - return n, err - } - xlog.Debugf("block %v", *bh) - r.br, err = r.ReaderConfig.newBlockReader(r.xz, bh, - hlen, r.newHash()) - if err != nil { - return n, err - } - } - k, err := r.br.Read(p[n:]) - n += k - if err != nil { - if err == io.EOF { - r.index = append(r.index, r.br.record()) - r.br = nil - } else { - return n, err - } - } - } - return n, nil -} - -// countingReader is a reader that counts the bytes read. -type countingReader struct { - r io.Reader - n int64 -} - -// Read reads data from the wrapped reader and adds it to the n field. -func (lr *countingReader) Read(p []byte) (n int, err error) { - n, err = lr.r.Read(p) - lr.n += int64(n) - return n, err -} - -// blockReader supports the reading of a block. -type blockReader struct { - lxz countingReader - header *blockHeader - headerLen int - n int64 - hash hash.Hash - r io.Reader -} - -// newBlockReader creates a new block reader. -func (c *ReaderConfig) newBlockReader(xz io.Reader, h *blockHeader, - hlen int, hash hash.Hash) (br *blockReader, err error) { - - br = &blockReader{ - lxz: countingReader{r: xz}, - header: h, - headerLen: hlen, - hash: hash, - } - - fr, err := c.newFilterReader(&br.lxz, h.filters) - if err != nil { - return nil, err - } - if br.hash.Size() != 0 { - br.r = io.TeeReader(fr, br.hash) - } else { - br.r = fr - } - - return br, nil -} - -// uncompressedSize returns the uncompressed size of the block. -func (br *blockReader) uncompressedSize() int64 { - return br.n -} - -// compressedSize returns the compressed size of the block. -func (br *blockReader) compressedSize() int64 { - return br.lxz.n -} - -// unpaddedSize computes the unpadded size for the block. -func (br *blockReader) unpaddedSize() int64 { - n := int64(br.headerLen) - n += br.compressedSize() - n += int64(br.hash.Size()) - return n -} - -// record returns the index record for the current block. -func (br *blockReader) record() record { - return record{br.unpaddedSize(), br.uncompressedSize()} -} - -// Read reads data from the block. -func (br *blockReader) Read(p []byte) (n int, err error) { - n, err = br.r.Read(p) - br.n += int64(n) - - u := br.header.uncompressedSize - if u >= 0 && br.uncompressedSize() > u { - return n, errors.New("xz: wrong uncompressed size for block") - } - c := br.header.compressedSize - if c >= 0 && br.compressedSize() > c { - return n, errors.New("xz: wrong compressed size for block") - } - if err != io.EOF { - return n, err - } - if br.uncompressedSize() < u || br.compressedSize() < c { - return n, io.ErrUnexpectedEOF - } - - s := br.hash.Size() - k := padLen(br.lxz.n) - q := make([]byte, k+s, k+2*s) - if _, err = io.ReadFull(br.lxz.r, q); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return n, err - } - if !allZeros(q[:k]) { - return n, errors.New("xz: non-zero block padding") - } - checkSum := q[k:] - computedSum := br.hash.Sum(checkSum[s:]) - if !bytes.Equal(checkSum, computedSum) { - return n, errors.New("xz: checksum error for block") - } - return n, io.EOF -} - -func (c *ReaderConfig) newFilterReader(r io.Reader, f []filter) (fr io.Reader, - err error) { - - if err = verifyFilters(f); err != nil { - return nil, err - } - - fr = r - for i := len(f) - 1; i >= 0; i-- { - fr, err = f[i].reader(fr, c) - if err != nil { - return nil, err - } - } - return fr, nil -} diff --git a/vendor/github.com/ulikunitz/xz/writer.go b/vendor/github.com/ulikunitz/xz/writer.go deleted file mode 100644 index f693e0aef7..0000000000 --- a/vendor/github.com/ulikunitz/xz/writer.go +++ /dev/null @@ -1,399 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import ( - "errors" - "fmt" - "hash" - "io" - - "github.com/ulikunitz/xz/lzma" -) - -// WriterConfig describe the parameters for an xz writer. -type WriterConfig struct { - Properties *lzma.Properties - DictCap int - BufSize int - BlockSize int64 - // checksum method: CRC32, CRC64 or SHA256 (default: CRC64) - CheckSum byte - // Forces NoChecksum (default: false) - NoCheckSum bool - // match algorithm - Matcher lzma.MatchAlgorithm -} - -// fill replaces zero values with default values. -func (c *WriterConfig) fill() { - if c.Properties == nil { - c.Properties = &lzma.Properties{LC: 3, LP: 0, PB: 2} - } - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } - if c.BufSize == 0 { - c.BufSize = 4096 - } - if c.BlockSize == 0 { - c.BlockSize = maxInt64 - } - if c.CheckSum == 0 { - c.CheckSum = CRC64 - } - if c.NoCheckSum { - c.CheckSum = None - } -} - -// Verify checks the configuration for errors. Zero values will be -// replaced by default values. -func (c *WriterConfig) Verify() error { - if c == nil { - return errors.New("xz: writer configuration is nil") - } - c.fill() - lc := lzma.Writer2Config{ - Properties: c.Properties, - DictCap: c.DictCap, - BufSize: c.BufSize, - Matcher: c.Matcher, - } - if err := lc.Verify(); err != nil { - return err - } - if c.BlockSize <= 0 { - return errors.New("xz: block size out of range") - } - if err := verifyFlags(c.CheckSum); err != nil { - return err - } - return nil -} - -// filters creates the filter list for the given parameters. -func (c *WriterConfig) filters() []filter { - return []filter{&lzmaFilter{int64(c.DictCap)}} -} - -// maxInt64 defines the maximum 64-bit signed integer. -const maxInt64 = 1<<63 - 1 - -// verifyFilters checks the filter list for the length and the right -// sequence of filters. -func verifyFilters(f []filter) error { - if len(f) == 0 { - return errors.New("xz: no filters") - } - if len(f) > 4 { - return errors.New("xz: more than four filters") - } - for _, g := range f[:len(f)-1] { - if g.last() { - return errors.New("xz: last filter is not last") - } - } - if !f[len(f)-1].last() { - return errors.New("xz: wrong last filter") - } - return nil -} - -// newFilterWriteCloser converts a filter list into a WriteCloser that -// can be used by a blockWriter. -func (c *WriterConfig) newFilterWriteCloser(w io.Writer, f []filter) (fw io.WriteCloser, err error) { - if err = verifyFilters(f); err != nil { - return nil, err - } - fw = nopWriteCloser(w) - for i := len(f) - 1; i >= 0; i-- { - fw, err = f[i].writeCloser(fw, c) - if err != nil { - return nil, err - } - } - return fw, nil -} - -// nopWCloser implements a WriteCloser with a Close method not doing -// anything. -type nopWCloser struct { - io.Writer -} - -// Close returns nil and doesn't do anything else. -func (c nopWCloser) Close() error { - return nil -} - -// nopWriteCloser converts the Writer into a WriteCloser with a Close -// function that does nothing beside returning nil. -func nopWriteCloser(w io.Writer) io.WriteCloser { - return nopWCloser{w} -} - -// Writer compresses data written to it. It is an io.WriteCloser. -type Writer struct { - WriterConfig - - xz io.Writer - bw *blockWriter - newHash func() hash.Hash - h header - index []record - closed bool -} - -// newBlockWriter creates a new block writer writes the header out. -func (w *Writer) newBlockWriter() error { - var err error - w.bw, err = w.WriterConfig.newBlockWriter(w.xz, w.newHash()) - if err != nil { - return err - } - if err = w.bw.writeHeader(w.xz); err != nil { - return err - } - return nil -} - -// closeBlockWriter closes a block writer and records the sizes in the -// index. -func (w *Writer) closeBlockWriter() error { - var err error - if err = w.bw.Close(); err != nil { - return err - } - w.index = append(w.index, w.bw.record()) - return nil -} - -// NewWriter creates a new xz writer using default parameters. -func NewWriter(xz io.Writer) (w *Writer, err error) { - return WriterConfig{}.NewWriter(xz) -} - -// NewWriter creates a new Writer using the given configuration parameters. -func (c WriterConfig) NewWriter(xz io.Writer) (w *Writer, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - w = &Writer{ - WriterConfig: c, - xz: xz, - h: header{c.CheckSum}, - index: make([]record, 0, 4), - } - if w.newHash, err = newHashFunc(c.CheckSum); err != nil { - return nil, err - } - data, err := w.h.MarshalBinary() - if err != nil { - return nil, fmt.Errorf("w.h.MarshalBinary(): error %w", err) - } - if _, err = xz.Write(data); err != nil { - return nil, err - } - if err = w.newBlockWriter(); err != nil { - return nil, err - } - return w, nil - -} - -// Write compresses the uncompressed data provided. -func (w *Writer) Write(p []byte) (n int, err error) { - if w.closed { - return 0, errClosed - } - for { - k, err := w.bw.Write(p[n:]) - n += k - if err != errNoSpace { - return n, err - } - if err = w.closeBlockWriter(); err != nil { - return n, err - } - if err = w.newBlockWriter(); err != nil { - return n, err - } - } -} - -// Close closes the writer and adds the footer to the Writer. Close -// doesn't close the underlying writer. -func (w *Writer) Close() error { - if w.closed { - return errClosed - } - w.closed = true - var err error - if err = w.closeBlockWriter(); err != nil { - return err - } - - f := footer{flags: w.h.flags} - if f.indexSize, err = writeIndex(w.xz, w.index); err != nil { - return err - } - data, err := f.MarshalBinary() - if err != nil { - return err - } - if _, err = w.xz.Write(data); err != nil { - return err - } - return nil -} - -// countingWriter is a writer that counts all data written to it. -type countingWriter struct { - w io.Writer - n int64 -} - -// Write writes data to the countingWriter. -func (cw *countingWriter) Write(p []byte) (n int, err error) { - n, err = cw.w.Write(p) - cw.n += int64(n) - if err == nil && cw.n < 0 { - return n, errors.New("xz: counter overflow") - } - return -} - -// blockWriter is writes a single block. -type blockWriter struct { - cxz countingWriter - // mw combines io.WriteCloser w and the hash. - mw io.Writer - w io.WriteCloser - n int64 - blockSize int64 - closed bool - headerLen int - - filters []filter - hash hash.Hash -} - -// newBlockWriter creates a new block writer. -func (c *WriterConfig) newBlockWriter(xz io.Writer, hash hash.Hash) (bw *blockWriter, err error) { - bw = &blockWriter{ - cxz: countingWriter{w: xz}, - blockSize: c.BlockSize, - filters: c.filters(), - hash: hash, - } - bw.w, err = c.newFilterWriteCloser(&bw.cxz, bw.filters) - if err != nil { - return nil, err - } - if bw.hash.Size() != 0 { - bw.mw = io.MultiWriter(bw.w, bw.hash) - } else { - bw.mw = bw.w - } - return bw, nil -} - -// writeHeader writes the header. If the function is called after Close -// the commpressedSize and uncompressedSize fields will be filled. -func (bw *blockWriter) writeHeader(w io.Writer) error { - h := blockHeader{ - compressedSize: -1, - uncompressedSize: -1, - filters: bw.filters, - } - if bw.closed { - h.compressedSize = bw.compressedSize() - h.uncompressedSize = bw.uncompressedSize() - } - data, err := h.MarshalBinary() - if err != nil { - return err - } - if _, err = w.Write(data); err != nil { - return err - } - bw.headerLen = len(data) - return nil -} - -// compressed size returns the amount of data written to the underlying -// stream. -func (bw *blockWriter) compressedSize() int64 { - return bw.cxz.n -} - -// uncompressedSize returns the number of data written to the -// blockWriter -func (bw *blockWriter) uncompressedSize() int64 { - return bw.n -} - -// unpaddedSize returns the sum of the header length, the uncompressed -// size of the block and the hash size. -func (bw *blockWriter) unpaddedSize() int64 { - if bw.headerLen <= 0 { - panic("xz: block header not written") - } - n := int64(bw.headerLen) - n += bw.compressedSize() - n += int64(bw.hash.Size()) - return n -} - -// record returns the record for the current stream. Call Close before -// calling this method. -func (bw *blockWriter) record() record { - return record{bw.unpaddedSize(), bw.uncompressedSize()} -} - -var errClosed = errors.New("xz: writer already closed") - -var errNoSpace = errors.New("xz: no space") - -// Write writes uncompressed data to the block writer. -func (bw *blockWriter) Write(p []byte) (n int, err error) { - if bw.closed { - return 0, errClosed - } - - t := bw.blockSize - bw.n - if int64(len(p)) > t { - err = errNoSpace - p = p[:t] - } - - var werr error - n, werr = bw.mw.Write(p) - bw.n += int64(n) - if werr != nil { - return n, werr - } - return n, err -} - -// Close closes the writer. -func (bw *blockWriter) Close() error { - if bw.closed { - return errClosed - } - bw.closed = true - if err := bw.w.Close(); err != nil { - return err - } - s := bw.hash.Size() - k := padLen(bw.cxz.n) - p := make([]byte, k+s) - bw.hash.Sum(p[k:k]) - if _, err := bw.cxz.w.Write(p); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/vbatts/tar-split/LICENSE b/vendor/github.com/vbatts/tar-split/LICENSE deleted file mode 100644 index ca03685b15..0000000000 --- a/vendor/github.com/vbatts/tar-split/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2015 Vincent Batts, Raleigh, NC, USA - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/common.go b/vendor/github.com/vbatts/tar-split/archive/tar/common.go deleted file mode 100644 index dee9e47e4a..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/common.go +++ /dev/null @@ -1,723 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package tar implements access to tar archives. -// -// Tape archives (tar) are a file format for storing a sequence of files that -// can be read and written in a streaming manner. -// This package aims to cover most variations of the format, -// including those produced by GNU and BSD tar tools. -package tar - -import ( - "errors" - "fmt" - "math" - "os" - "path" - "reflect" - "strconv" - "strings" - "time" -) - -// BUG: Use of the Uid and Gid fields in Header could overflow on 32-bit -// architectures. If a large value is encountered when decoding, the result -// stored in Header will be the truncated version. - -var ( - ErrHeader = errors.New("archive/tar: invalid tar header") - ErrWriteTooLong = errors.New("archive/tar: write too long") - ErrFieldTooLong = errors.New("archive/tar: header field too long") - ErrWriteAfterClose = errors.New("archive/tar: write after close") - errMissData = errors.New("archive/tar: sparse file references non-existent data") - errUnrefData = errors.New("archive/tar: sparse file contains unreferenced data") - errWriteHole = errors.New("archive/tar: write non-NUL byte in sparse hole") -) - -type headerError []string - -func (he headerError) Error() string { - const prefix = "archive/tar: cannot encode header" - var ss []string - for _, s := range he { - if s != "" { - ss = append(ss, s) - } - } - if len(ss) == 0 { - return prefix - } - return fmt.Sprintf("%s: %v", prefix, strings.Join(ss, "; and ")) -} - -// Type flags for Header.Typeflag. -const ( - // Type '0' indicates a regular file. - TypeReg = '0' - TypeRegA = '\x00' // Deprecated: Use TypeReg instead. - - // Type '1' to '6' are header-only flags and may not have a data body. - TypeLink = '1' // Hard link - TypeSymlink = '2' // Symbolic link - TypeChar = '3' // Character device node - TypeBlock = '4' // Block device node - TypeDir = '5' // Directory - TypeFifo = '6' // FIFO node - - // Type '7' is reserved. - TypeCont = '7' - - // Type 'x' is used by the PAX format to store key-value records that - // are only relevant to the next file. - // This package transparently handles these types. - TypeXHeader = 'x' - - // Type 'g' is used by the PAX format to store key-value records that - // are relevant to all subsequent files. - // This package only supports parsing and composing such headers, - // but does not currently support persisting the global state across files. - TypeXGlobalHeader = 'g' - - // Type 'S' indicates a sparse file in the GNU format. - TypeGNUSparse = 'S' - - // Types 'L' and 'K' are used by the GNU format for a meta file - // used to store the path or link name for the next file. - // This package transparently handles these types. - TypeGNULongName = 'L' - TypeGNULongLink = 'K' -) - -// Keywords for PAX extended header records. -const ( - paxNone = "" // Indicates that no PAX key is suitable - paxPath = "path" - paxLinkpath = "linkpath" - paxSize = "size" - paxUid = "uid" - paxGid = "gid" - paxUname = "uname" - paxGname = "gname" - paxMtime = "mtime" - paxAtime = "atime" - paxCtime = "ctime" // Removed from later revision of PAX spec, but was valid - paxCharset = "charset" // Currently unused - paxComment = "comment" // Currently unused - - paxSchilyXattr = "SCHILY.xattr." - - // Keywords for GNU sparse files in a PAX extended header. - paxGNUSparse = "GNU.sparse." - paxGNUSparseNumBlocks = "GNU.sparse.numblocks" - paxGNUSparseOffset = "GNU.sparse.offset" - paxGNUSparseNumBytes = "GNU.sparse.numbytes" - paxGNUSparseMap = "GNU.sparse.map" - paxGNUSparseName = "GNU.sparse.name" - paxGNUSparseMajor = "GNU.sparse.major" - paxGNUSparseMinor = "GNU.sparse.minor" - paxGNUSparseSize = "GNU.sparse.size" - paxGNUSparseRealSize = "GNU.sparse.realsize" -) - -// basicKeys is a set of the PAX keys for which we have built-in support. -// This does not contain "charset" or "comment", which are both PAX-specific, -// so adding them as first-class features of Header is unlikely. -// Users can use the PAXRecords field to set it themselves. -var basicKeys = map[string]bool{ - paxPath: true, paxLinkpath: true, paxSize: true, paxUid: true, paxGid: true, - paxUname: true, paxGname: true, paxMtime: true, paxAtime: true, paxCtime: true, -} - -// A Header represents a single header in a tar archive. -// Some fields may not be populated. -// -// For forward compatibility, users that retrieve a Header from Reader.Next, -// mutate it in some ways, and then pass it back to Writer.WriteHeader -// should do so by creating a new Header and copying the fields -// that they are interested in preserving. -type Header struct { - // Typeflag is the type of header entry. - // The zero value is automatically promoted to either TypeReg or TypeDir - // depending on the presence of a trailing slash in Name. - Typeflag byte - - Name string // Name of file entry - Linkname string // Target name of link (valid for TypeLink or TypeSymlink) - - Size int64 // Logical file size in bytes - Mode int64 // Permission and mode bits - Uid int // User ID of owner - Gid int // Group ID of owner - Uname string // User name of owner - Gname string // Group name of owner - - // If the Format is unspecified, then Writer.WriteHeader rounds ModTime - // to the nearest second and ignores the AccessTime and ChangeTime fields. - // - // To use AccessTime or ChangeTime, specify the Format as PAX or GNU. - // To use sub-second resolution, specify the Format as PAX. - ModTime time.Time // Modification time - AccessTime time.Time // Access time (requires either PAX or GNU support) - ChangeTime time.Time // Change time (requires either PAX or GNU support) - - Devmajor int64 // Major device number (valid for TypeChar or TypeBlock) - Devminor int64 // Minor device number (valid for TypeChar or TypeBlock) - - // Xattrs stores extended attributes as PAX records under the - // "SCHILY.xattr." namespace. - // - // The following are semantically equivalent: - // h.Xattrs[key] = value - // h.PAXRecords["SCHILY.xattr."+key] = value - // - // When Writer.WriteHeader is called, the contents of Xattrs will take - // precedence over those in PAXRecords. - // - // Deprecated: Use PAXRecords instead. - Xattrs map[string]string - - // PAXRecords is a map of PAX extended header records. - // - // User-defined records should have keys of the following form: - // VENDOR.keyword - // Where VENDOR is some namespace in all uppercase, and keyword may - // not contain the '=' character (e.g., "GOLANG.pkg.version"). - // The key and value should be non-empty UTF-8 strings. - // - // When Writer.WriteHeader is called, PAX records derived from the - // other fields in Header take precedence over PAXRecords. - PAXRecords map[string]string - - // Format specifies the format of the tar header. - // - // This is set by Reader.Next as a best-effort guess at the format. - // Since the Reader liberally reads some non-compliant files, - // it is possible for this to be FormatUnknown. - // - // If the format is unspecified when Writer.WriteHeader is called, - // then it uses the first format (in the order of USTAR, PAX, GNU) - // capable of encoding this Header (see Format). - Format Format -} - -// sparseEntry represents a Length-sized fragment at Offset in the file. -type sparseEntry struct{ Offset, Length int64 } - -func (s sparseEntry) endOffset() int64 { return s.Offset + s.Length } - -// A sparse file can be represented as either a sparseDatas or a sparseHoles. -// As long as the total size is known, they are equivalent and one can be -// converted to the other form and back. The various tar formats with sparse -// file support represent sparse files in the sparseDatas form. That is, they -// specify the fragments in the file that has data, and treat everything else as -// having zero bytes. As such, the encoding and decoding logic in this package -// deals with sparseDatas. -// -// However, the external API uses sparseHoles instead of sparseDatas because the -// zero value of sparseHoles logically represents a normal file (i.e., there are -// no holes in it). On the other hand, the zero value of sparseDatas implies -// that the file has no data in it, which is rather odd. -// -// As an example, if the underlying raw file contains the 10-byte data: -// var compactFile = "abcdefgh" -// -// And the sparse map has the following entries: -// var spd sparseDatas = []sparseEntry{ -// {Offset: 2, Length: 5}, // Data fragment for 2..6 -// {Offset: 18, Length: 3}, // Data fragment for 18..20 -// } -// var sph sparseHoles = []sparseEntry{ -// {Offset: 0, Length: 2}, // Hole fragment for 0..1 -// {Offset: 7, Length: 11}, // Hole fragment for 7..17 -// {Offset: 21, Length: 4}, // Hole fragment for 21..24 -// } -// -// Then the content of the resulting sparse file with a Header.Size of 25 is: -// var sparseFile = "\x00"*2 + "abcde" + "\x00"*11 + "fgh" + "\x00"*4 -type ( - sparseDatas []sparseEntry - sparseHoles []sparseEntry -) - -// validateSparseEntries reports whether sp is a valid sparse map. -// It does not matter whether sp represents data fragments or hole fragments. -func validateSparseEntries(sp []sparseEntry, size int64) bool { - // Validate all sparse entries. These are the same checks as performed by - // the BSD tar utility. - if size < 0 { - return false - } - var pre sparseEntry - for _, cur := range sp { - switch { - case cur.Offset < 0 || cur.Length < 0: - return false // Negative values are never okay - case cur.Offset > math.MaxInt64-cur.Length: - return false // Integer overflow with large length - case cur.endOffset() > size: - return false // Region extends beyond the actual size - case pre.endOffset() > cur.Offset: - return false // Regions cannot overlap and must be in order - } - pre = cur - } - return true -} - -// alignSparseEntries mutates src and returns dst where each fragment's -// starting offset is aligned up to the nearest block edge, and each -// ending offset is aligned down to the nearest block edge. -// -// Even though the Go tar Reader and the BSD tar utility can handle entries -// with arbitrary offsets and lengths, the GNU tar utility can only handle -// offsets and lengths that are multiples of blockSize. -func alignSparseEntries(src []sparseEntry, size int64) []sparseEntry { - dst := src[:0] - for _, s := range src { - pos, end := s.Offset, s.endOffset() - pos += blockPadding(+pos) // Round-up to nearest blockSize - if end != size { - end -= blockPadding(-end) // Round-down to nearest blockSize - } - if pos < end { - dst = append(dst, sparseEntry{Offset: pos, Length: end - pos}) - } - } - return dst -} - -// invertSparseEntries converts a sparse map from one form to the other. -// If the input is sparseHoles, then it will output sparseDatas and vice-versa. -// The input must have been already validated. -// -// This function mutates src and returns a normalized map where: -// * adjacent fragments are coalesced together -// * only the last fragment may be empty -// * the endOffset of the last fragment is the total size -func invertSparseEntries(src []sparseEntry, size int64) []sparseEntry { - dst := src[:0] - var pre sparseEntry - for _, cur := range src { - if cur.Length == 0 { - continue // Skip empty fragments - } - pre.Length = cur.Offset - pre.Offset - if pre.Length > 0 { - dst = append(dst, pre) // Only add non-empty fragments - } - pre.Offset = cur.endOffset() - } - pre.Length = size - pre.Offset // Possibly the only empty fragment - return append(dst, pre) -} - -// fileState tracks the number of logical (includes sparse holes) and physical -// (actual in tar archive) bytes remaining for the current file. -// -// Invariant: LogicalRemaining >= PhysicalRemaining -type fileState interface { - LogicalRemaining() int64 - PhysicalRemaining() int64 -} - -// allowedFormats determines which formats can be used. -// The value returned is the logical OR of multiple possible formats. -// If the value is FormatUnknown, then the input Header cannot be encoded -// and an error is returned explaining why. -// -// As a by-product of checking the fields, this function returns paxHdrs, which -// contain all fields that could not be directly encoded. -// A value receiver ensures that this method does not mutate the source Header. -func (h Header) allowedFormats() (format Format, paxHdrs map[string]string, err error) { - format = FormatUSTAR | FormatPAX | FormatGNU - paxHdrs = make(map[string]string) - - var whyNoUSTAR, whyNoPAX, whyNoGNU string - var preferPAX bool // Prefer PAX over USTAR - verifyString := func(s string, size int, name, paxKey string) { - // NUL-terminator is optional for path and linkpath. - // Technically, it is required for uname and gname, - // but neither GNU nor BSD tar checks for it. - tooLong := len(s) > size - allowLongGNU := paxKey == paxPath || paxKey == paxLinkpath - if hasNUL(s) || (tooLong && !allowLongGNU) { - whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%q", name, s) - format.mustNotBe(FormatGNU) - } - if !isASCII(s) || tooLong { - canSplitUSTAR := paxKey == paxPath - if _, _, ok := splitUSTARPath(s); !canSplitUSTAR || !ok { - whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%q", name, s) - format.mustNotBe(FormatUSTAR) - } - if paxKey == paxNone { - whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%q", name, s) - format.mustNotBe(FormatPAX) - } else { - paxHdrs[paxKey] = s - } - } - if v, ok := h.PAXRecords[paxKey]; ok && v == s { - paxHdrs[paxKey] = v - } - } - verifyNumeric := func(n int64, size int, name, paxKey string) { - if !fitsInBase256(size, n) { - whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%d", name, n) - format.mustNotBe(FormatGNU) - } - if !fitsInOctal(size, n) { - whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%d", name, n) - format.mustNotBe(FormatUSTAR) - if paxKey == paxNone { - whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%d", name, n) - format.mustNotBe(FormatPAX) - } else { - paxHdrs[paxKey] = strconv.FormatInt(n, 10) - } - } - if v, ok := h.PAXRecords[paxKey]; ok && v == strconv.FormatInt(n, 10) { - paxHdrs[paxKey] = v - } - } - verifyTime := func(ts time.Time, size int, name, paxKey string) { - if ts.IsZero() { - return // Always okay - } - if !fitsInBase256(size, ts.Unix()) { - whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%v", name, ts) - format.mustNotBe(FormatGNU) - } - isMtime := paxKey == paxMtime - fitsOctal := fitsInOctal(size, ts.Unix()) - if (isMtime && !fitsOctal) || !isMtime { - whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%v", name, ts) - format.mustNotBe(FormatUSTAR) - } - needsNano := ts.Nanosecond() != 0 - if !isMtime || !fitsOctal || needsNano { - preferPAX = true // USTAR may truncate sub-second measurements - if paxKey == paxNone { - whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%v", name, ts) - format.mustNotBe(FormatPAX) - } else { - paxHdrs[paxKey] = formatPAXTime(ts) - } - } - if v, ok := h.PAXRecords[paxKey]; ok && v == formatPAXTime(ts) { - paxHdrs[paxKey] = v - } - } - - // Check basic fields. - var blk block - v7 := blk.V7() - ustar := blk.USTAR() - gnu := blk.GNU() - verifyString(h.Name, len(v7.Name()), "Name", paxPath) - verifyString(h.Linkname, len(v7.LinkName()), "Linkname", paxLinkpath) - verifyString(h.Uname, len(ustar.UserName()), "Uname", paxUname) - verifyString(h.Gname, len(ustar.GroupName()), "Gname", paxGname) - verifyNumeric(h.Mode, len(v7.Mode()), "Mode", paxNone) - verifyNumeric(int64(h.Uid), len(v7.UID()), "Uid", paxUid) - verifyNumeric(int64(h.Gid), len(v7.GID()), "Gid", paxGid) - verifyNumeric(h.Size, len(v7.Size()), "Size", paxSize) - verifyNumeric(h.Devmajor, len(ustar.DevMajor()), "Devmajor", paxNone) - verifyNumeric(h.Devminor, len(ustar.DevMinor()), "Devminor", paxNone) - verifyTime(h.ModTime, len(v7.ModTime()), "ModTime", paxMtime) - verifyTime(h.AccessTime, len(gnu.AccessTime()), "AccessTime", paxAtime) - verifyTime(h.ChangeTime, len(gnu.ChangeTime()), "ChangeTime", paxCtime) - - // Check for header-only types. - var whyOnlyPAX, whyOnlyGNU string - switch h.Typeflag { - case TypeReg, TypeChar, TypeBlock, TypeFifo, TypeGNUSparse: - // Exclude TypeLink and TypeSymlink, since they may reference directories. - if strings.HasSuffix(h.Name, "/") { - return FormatUnknown, nil, headerError{"filename may not have trailing slash"} - } - case TypeXHeader, TypeGNULongName, TypeGNULongLink: - return FormatUnknown, nil, headerError{"cannot manually encode TypeXHeader, TypeGNULongName, or TypeGNULongLink headers"} - case TypeXGlobalHeader: - h2 := Header{Name: h.Name, Typeflag: h.Typeflag, Xattrs: h.Xattrs, PAXRecords: h.PAXRecords, Format: h.Format} - if !reflect.DeepEqual(h, h2) { - return FormatUnknown, nil, headerError{"only PAXRecords should be set for TypeXGlobalHeader"} - } - whyOnlyPAX = "only PAX supports TypeXGlobalHeader" - format.mayOnlyBe(FormatPAX) - } - if !isHeaderOnlyType(h.Typeflag) && h.Size < 0 { - return FormatUnknown, nil, headerError{"negative size on header-only type"} - } - - // Check PAX records. - if len(h.Xattrs) > 0 { - for k, v := range h.Xattrs { - paxHdrs[paxSchilyXattr+k] = v - } - whyOnlyPAX = "only PAX supports Xattrs" - format.mayOnlyBe(FormatPAX) - } - if len(h.PAXRecords) > 0 { - for k, v := range h.PAXRecords { - switch _, exists := paxHdrs[k]; { - case exists: - continue // Do not overwrite existing records - case h.Typeflag == TypeXGlobalHeader: - paxHdrs[k] = v // Copy all records - case !basicKeys[k] && !strings.HasPrefix(k, paxGNUSparse): - paxHdrs[k] = v // Ignore local records that may conflict - } - } - whyOnlyPAX = "only PAX supports PAXRecords" - format.mayOnlyBe(FormatPAX) - } - for k, v := range paxHdrs { - if !validPAXRecord(k, v) { - return FormatUnknown, nil, headerError{fmt.Sprintf("invalid PAX record: %q", k+" = "+v)} - } - } - - // TODO(dsnet): Re-enable this when adding sparse support. - // See https://golang.org/issue/22735 - /* - // Check sparse files. - if len(h.SparseHoles) > 0 || h.Typeflag == TypeGNUSparse { - if isHeaderOnlyType(h.Typeflag) { - return FormatUnknown, nil, headerError{"header-only type cannot be sparse"} - } - if !validateSparseEntries(h.SparseHoles, h.Size) { - return FormatUnknown, nil, headerError{"invalid sparse holes"} - } - if h.Typeflag == TypeGNUSparse { - whyOnlyGNU = "only GNU supports TypeGNUSparse" - format.mayOnlyBe(FormatGNU) - } else { - whyNoGNU = "GNU supports sparse files only with TypeGNUSparse" - format.mustNotBe(FormatGNU) - } - whyNoUSTAR = "USTAR does not support sparse files" - format.mustNotBe(FormatUSTAR) - } - */ - - // Check desired format. - if wantFormat := h.Format; wantFormat != FormatUnknown { - if wantFormat.has(FormatPAX) && !preferPAX { - wantFormat.mayBe(FormatUSTAR) // PAX implies USTAR allowed too - } - format.mayOnlyBe(wantFormat) // Set union of formats allowed and format wanted - } - if format == FormatUnknown { - switch h.Format { - case FormatUSTAR: - err = headerError{"Format specifies USTAR", whyNoUSTAR, whyOnlyPAX, whyOnlyGNU} - case FormatPAX: - err = headerError{"Format specifies PAX", whyNoPAX, whyOnlyGNU} - case FormatGNU: - err = headerError{"Format specifies GNU", whyNoGNU, whyOnlyPAX} - default: - err = headerError{whyNoUSTAR, whyNoPAX, whyNoGNU, whyOnlyPAX, whyOnlyGNU} - } - } - return format, paxHdrs, err -} - -// FileInfo returns an os.FileInfo for the Header. -func (h *Header) FileInfo() os.FileInfo { - return headerFileInfo{h} -} - -// headerFileInfo implements os.FileInfo. -type headerFileInfo struct { - h *Header -} - -func (fi headerFileInfo) Size() int64 { return fi.h.Size } -func (fi headerFileInfo) IsDir() bool { return fi.Mode().IsDir() } -func (fi headerFileInfo) ModTime() time.Time { return fi.h.ModTime } -func (fi headerFileInfo) Sys() interface{} { return fi.h } - -// Name returns the base name of the file. -func (fi headerFileInfo) Name() string { - if fi.IsDir() { - return path.Base(path.Clean(fi.h.Name)) - } - return path.Base(fi.h.Name) -} - -// Mode returns the permission and mode bits for the headerFileInfo. -func (fi headerFileInfo) Mode() (mode os.FileMode) { - // Set file permission bits. - mode = os.FileMode(fi.h.Mode).Perm() - - // Set setuid, setgid and sticky bits. - if fi.h.Mode&c_ISUID != 0 { - mode |= os.ModeSetuid - } - if fi.h.Mode&c_ISGID != 0 { - mode |= os.ModeSetgid - } - if fi.h.Mode&c_ISVTX != 0 { - mode |= os.ModeSticky - } - - // Set file mode bits; clear perm, setuid, setgid, and sticky bits. - switch m := os.FileMode(fi.h.Mode) &^ 07777; m { - case c_ISDIR: - mode |= os.ModeDir - case c_ISFIFO: - mode |= os.ModeNamedPipe - case c_ISLNK: - mode |= os.ModeSymlink - case c_ISBLK: - mode |= os.ModeDevice - case c_ISCHR: - mode |= os.ModeDevice - mode |= os.ModeCharDevice - case c_ISSOCK: - mode |= os.ModeSocket - } - - switch fi.h.Typeflag { - case TypeSymlink: - mode |= os.ModeSymlink - case TypeChar: - mode |= os.ModeDevice - mode |= os.ModeCharDevice - case TypeBlock: - mode |= os.ModeDevice - case TypeDir: - mode |= os.ModeDir - case TypeFifo: - mode |= os.ModeNamedPipe - } - - return mode -} - -// sysStat, if non-nil, populates h from system-dependent fields of fi. -var sysStat func(fi os.FileInfo, h *Header) error - -const ( - // Mode constants from the USTAR spec: - // See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06 - c_ISUID = 04000 // Set uid - c_ISGID = 02000 // Set gid - c_ISVTX = 01000 // Save text (sticky bit) - - // Common Unix mode constants; these are not defined in any common tar standard. - // Header.FileInfo understands these, but FileInfoHeader will never produce these. - c_ISDIR = 040000 // Directory - c_ISFIFO = 010000 // FIFO - c_ISREG = 0100000 // Regular file - c_ISLNK = 0120000 // Symbolic link - c_ISBLK = 060000 // Block special file - c_ISCHR = 020000 // Character special file - c_ISSOCK = 0140000 // Socket -) - -// FileInfoHeader creates a partially-populated Header from fi. -// If fi describes a symlink, FileInfoHeader records link as the link target. -// If fi describes a directory, a slash is appended to the name. -// -// Since os.FileInfo's Name method only returns the base name of -// the file it describes, it may be necessary to modify Header.Name -// to provide the full path name of the file. -func FileInfoHeader(fi os.FileInfo, link string) (*Header, error) { - if fi == nil { - return nil, errors.New("archive/tar: FileInfo is nil") - } - fm := fi.Mode() - h := &Header{ - Name: fi.Name(), - ModTime: fi.ModTime(), - Mode: int64(fm.Perm()), // or'd with c_IS* constants later - } - switch { - case fm.IsRegular(): - h.Typeflag = TypeReg - h.Size = fi.Size() - case fi.IsDir(): - h.Typeflag = TypeDir - h.Name += "/" - case fm&os.ModeSymlink != 0: - h.Typeflag = TypeSymlink - h.Linkname = link - case fm&os.ModeDevice != 0: - if fm&os.ModeCharDevice != 0 { - h.Typeflag = TypeChar - } else { - h.Typeflag = TypeBlock - } - case fm&os.ModeNamedPipe != 0: - h.Typeflag = TypeFifo - case fm&os.ModeSocket != 0: - return nil, fmt.Errorf("archive/tar: sockets not supported") - default: - return nil, fmt.Errorf("archive/tar: unknown file mode %v", fm) - } - if fm&os.ModeSetuid != 0 { - h.Mode |= c_ISUID - } - if fm&os.ModeSetgid != 0 { - h.Mode |= c_ISGID - } - if fm&os.ModeSticky != 0 { - h.Mode |= c_ISVTX - } - // If possible, populate additional fields from OS-specific - // FileInfo fields. - if sys, ok := fi.Sys().(*Header); ok { - // This FileInfo came from a Header (not the OS). Use the - // original Header to populate all remaining fields. - h.Uid = sys.Uid - h.Gid = sys.Gid - h.Uname = sys.Uname - h.Gname = sys.Gname - h.AccessTime = sys.AccessTime - h.ChangeTime = sys.ChangeTime - if sys.Xattrs != nil { - h.Xattrs = make(map[string]string) - for k, v := range sys.Xattrs { - h.Xattrs[k] = v - } - } - if sys.Typeflag == TypeLink { - // hard link - h.Typeflag = TypeLink - h.Size = 0 - h.Linkname = sys.Linkname - } - if sys.PAXRecords != nil { - h.PAXRecords = make(map[string]string) - for k, v := range sys.PAXRecords { - h.PAXRecords[k] = v - } - } - } - if sysStat != nil { - return h, sysStat(fi, h) - } - return h, nil -} - -// isHeaderOnlyType checks if the given type flag is of the type that has no -// data section even if a size is specified. -func isHeaderOnlyType(flag byte) bool { - switch flag { - case TypeLink, TypeSymlink, TypeChar, TypeBlock, TypeDir, TypeFifo: - return true - default: - return false - } -} - -func min(a, b int64) int64 { - if a < b { - return a - } - return b -} diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/format.go b/vendor/github.com/vbatts/tar-split/archive/tar/format.go deleted file mode 100644 index 1f89d0c59a..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/format.go +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package tar - -import "strings" - -// Format represents the tar archive format. -// -// The original tar format was introduced in Unix V7. -// Since then, there have been multiple competing formats attempting to -// standardize or extend the V7 format to overcome its limitations. -// The most common formats are the USTAR, PAX, and GNU formats, -// each with their own advantages and limitations. -// -// The following table captures the capabilities of each format: -// -// | USTAR | PAX | GNU -// ------------------+--------+-----------+---------- -// Name | 256B | unlimited | unlimited -// Linkname | 100B | unlimited | unlimited -// Size | uint33 | unlimited | uint89 -// Mode | uint21 | uint21 | uint57 -// Uid/Gid | uint21 | unlimited | uint57 -// Uname/Gname | 32B | unlimited | 32B -// ModTime | uint33 | unlimited | int89 -// AccessTime | n/a | unlimited | int89 -// ChangeTime | n/a | unlimited | int89 -// Devmajor/Devminor | uint21 | uint21 | uint57 -// ------------------+--------+-----------+---------- -// string encoding | ASCII | UTF-8 | binary -// sub-second times | no | yes | no -// sparse files | no | yes | yes -// -// The table's upper portion shows the Header fields, where each format reports -// the maximum number of bytes allowed for each string field and -// the integer type used to store each numeric field -// (where timestamps are stored as the number of seconds since the Unix epoch). -// -// The table's lower portion shows specialized features of each format, -// such as supported string encodings, support for sub-second timestamps, -// or support for sparse files. -// -// The Writer currently provides no support for sparse files. -type Format int - -// Constants to identify various tar formats. -const ( - // Deliberately hide the meaning of constants from public API. - _ Format = (1 << iota) / 4 // Sequence of 0, 0, 1, 2, 4, 8, etc... - - // FormatUnknown indicates that the format is unknown. - FormatUnknown - - // The format of the original Unix V7 tar tool prior to standardization. - formatV7 - - // FormatUSTAR represents the USTAR header format defined in POSIX.1-1988. - // - // While this format is compatible with most tar readers, - // the format has several limitations making it unsuitable for some usages. - // Most notably, it cannot support sparse files, files larger than 8GiB, - // filenames larger than 256 characters, and non-ASCII filenames. - // - // Reference: - // http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06 - FormatUSTAR - - // FormatPAX represents the PAX header format defined in POSIX.1-2001. - // - // PAX extends USTAR by writing a special file with Typeflag TypeXHeader - // preceding the original header. This file contains a set of key-value - // records, which are used to overcome USTAR's shortcomings, in addition to - // providing the ability to have sub-second resolution for timestamps. - // - // Some newer formats add their own extensions to PAX by defining their - // own keys and assigning certain semantic meaning to the associated values. - // For example, sparse file support in PAX is implemented using keys - // defined by the GNU manual (e.g., "GNU.sparse.map"). - // - // Reference: - // http://pubs.opengroup.org/onlinepubs/009695399/utilities/pax.html - FormatPAX - - // FormatGNU represents the GNU header format. - // - // The GNU header format is older than the USTAR and PAX standards and - // is not compatible with them. The GNU format supports - // arbitrary file sizes, filenames of arbitrary encoding and length, - // sparse files, and other features. - // - // It is recommended that PAX be chosen over GNU unless the target - // application can only parse GNU formatted archives. - // - // Reference: - // https://www.gnu.org/software/tar/manual/html_node/Standard.html - FormatGNU - - // Schily's tar format, which is incompatible with USTAR. - // This does not cover STAR extensions to the PAX format; these fall under - // the PAX format. - formatSTAR - - formatMax -) - -func (f Format) has(f2 Format) bool { return f&f2 != 0 } -func (f *Format) mayBe(f2 Format) { *f |= f2 } -func (f *Format) mayOnlyBe(f2 Format) { *f &= f2 } -func (f *Format) mustNotBe(f2 Format) { *f &^= f2 } - -var formatNames = map[Format]string{ - formatV7: "V7", FormatUSTAR: "USTAR", FormatPAX: "PAX", FormatGNU: "GNU", formatSTAR: "STAR", -} - -func (f Format) String() string { - var ss []string - for f2 := Format(1); f2 < formatMax; f2 <<= 1 { - if f.has(f2) { - ss = append(ss, formatNames[f2]) - } - } - switch len(ss) { - case 0: - return "" - case 1: - return ss[0] - default: - return "(" + strings.Join(ss, " | ") + ")" - } -} - -// Magics used to identify various formats. -const ( - magicGNU, versionGNU = "ustar ", " \x00" - magicUSTAR, versionUSTAR = "ustar\x00", "00" - trailerSTAR = "tar\x00" -) - -// Size constants from various tar specifications. -const ( - blockSize = 512 // Size of each block in a tar stream - nameSize = 100 // Max length of the name field in USTAR format - prefixSize = 155 // Max length of the prefix field in USTAR format -) - -// blockPadding computes the number of bytes needed to pad offset up to the -// nearest block edge where 0 <= n < blockSize. -func blockPadding(offset int64) (n int64) { - return -offset & (blockSize - 1) -} - -var zeroBlock block - -type block [blockSize]byte - -// Convert block to any number of formats. -func (b *block) V7() *headerV7 { return (*headerV7)(b) } -func (b *block) GNU() *headerGNU { return (*headerGNU)(b) } -func (b *block) STAR() *headerSTAR { return (*headerSTAR)(b) } -func (b *block) USTAR() *headerUSTAR { return (*headerUSTAR)(b) } -func (b *block) Sparse() sparseArray { return (sparseArray)(b[:]) } - -// GetFormat checks that the block is a valid tar header based on the checksum. -// It then attempts to guess the specific format based on magic values. -// If the checksum fails, then FormatUnknown is returned. -func (b *block) GetFormat() Format { - // Verify checksum. - var p parser - value := p.parseOctal(b.V7().Chksum()) - chksum1, chksum2 := b.ComputeChecksum() - if p.err != nil || (value != chksum1 && value != chksum2) { - return FormatUnknown - } - - // Guess the magic values. - magic := string(b.USTAR().Magic()) - version := string(b.USTAR().Version()) - trailer := string(b.STAR().Trailer()) - switch { - case magic == magicUSTAR && trailer == trailerSTAR: - return formatSTAR - case magic == magicUSTAR: - return FormatUSTAR | FormatPAX - case magic == magicGNU && version == versionGNU: - return FormatGNU - default: - return formatV7 - } -} - -// SetFormat writes the magic values necessary for specified format -// and then updates the checksum accordingly. -func (b *block) SetFormat(format Format) { - // Set the magic values. - switch { - case format.has(formatV7): - // Do nothing. - case format.has(FormatGNU): - copy(b.GNU().Magic(), magicGNU) - copy(b.GNU().Version(), versionGNU) - case format.has(formatSTAR): - copy(b.STAR().Magic(), magicUSTAR) - copy(b.STAR().Version(), versionUSTAR) - copy(b.STAR().Trailer(), trailerSTAR) - case format.has(FormatUSTAR | FormatPAX): - copy(b.USTAR().Magic(), magicUSTAR) - copy(b.USTAR().Version(), versionUSTAR) - default: - panic("invalid format") - } - - // Update checksum. - // This field is special in that it is terminated by a NULL then space. - var f formatter - field := b.V7().Chksum() - chksum, _ := b.ComputeChecksum() // Possible values are 256..128776 - f.formatOctal(field[:7], chksum) // Never fails since 128776 < 262143 - field[7] = ' ' -} - -// ComputeChecksum computes the checksum for the header block. -// POSIX specifies a sum of the unsigned byte values, but the Sun tar used -// signed byte values. -// We compute and return both. -func (b *block) ComputeChecksum() (unsigned, signed int64) { - for i, c := range b { - if 148 <= i && i < 156 { - c = ' ' // Treat the checksum field itself as all spaces. - } - unsigned += int64(c) - signed += int64(int8(c)) - } - return unsigned, signed -} - -// Reset clears the block with all zeros. -func (b *block) Reset() { - *b = block{} -} - -type headerV7 [blockSize]byte - -func (h *headerV7) Name() []byte { return h[000:][:100] } -func (h *headerV7) Mode() []byte { return h[100:][:8] } -func (h *headerV7) UID() []byte { return h[108:][:8] } -func (h *headerV7) GID() []byte { return h[116:][:8] } -func (h *headerV7) Size() []byte { return h[124:][:12] } -func (h *headerV7) ModTime() []byte { return h[136:][:12] } -func (h *headerV7) Chksum() []byte { return h[148:][:8] } -func (h *headerV7) TypeFlag() []byte { return h[156:][:1] } -func (h *headerV7) LinkName() []byte { return h[157:][:100] } - -type headerGNU [blockSize]byte - -func (h *headerGNU) V7() *headerV7 { return (*headerV7)(h) } -func (h *headerGNU) Magic() []byte { return h[257:][:6] } -func (h *headerGNU) Version() []byte { return h[263:][:2] } -func (h *headerGNU) UserName() []byte { return h[265:][:32] } -func (h *headerGNU) GroupName() []byte { return h[297:][:32] } -func (h *headerGNU) DevMajor() []byte { return h[329:][:8] } -func (h *headerGNU) DevMinor() []byte { return h[337:][:8] } -func (h *headerGNU) AccessTime() []byte { return h[345:][:12] } -func (h *headerGNU) ChangeTime() []byte { return h[357:][:12] } -func (h *headerGNU) Sparse() sparseArray { return (sparseArray)(h[386:][:24*4+1]) } -func (h *headerGNU) RealSize() []byte { return h[483:][:12] } - -type headerSTAR [blockSize]byte - -func (h *headerSTAR) V7() *headerV7 { return (*headerV7)(h) } -func (h *headerSTAR) Magic() []byte { return h[257:][:6] } -func (h *headerSTAR) Version() []byte { return h[263:][:2] } -func (h *headerSTAR) UserName() []byte { return h[265:][:32] } -func (h *headerSTAR) GroupName() []byte { return h[297:][:32] } -func (h *headerSTAR) DevMajor() []byte { return h[329:][:8] } -func (h *headerSTAR) DevMinor() []byte { return h[337:][:8] } -func (h *headerSTAR) Prefix() []byte { return h[345:][:131] } -func (h *headerSTAR) AccessTime() []byte { return h[476:][:12] } -func (h *headerSTAR) ChangeTime() []byte { return h[488:][:12] } -func (h *headerSTAR) Trailer() []byte { return h[508:][:4] } - -type headerUSTAR [blockSize]byte - -func (h *headerUSTAR) V7() *headerV7 { return (*headerV7)(h) } -func (h *headerUSTAR) Magic() []byte { return h[257:][:6] } -func (h *headerUSTAR) Version() []byte { return h[263:][:2] } -func (h *headerUSTAR) UserName() []byte { return h[265:][:32] } -func (h *headerUSTAR) GroupName() []byte { return h[297:][:32] } -func (h *headerUSTAR) DevMajor() []byte { return h[329:][:8] } -func (h *headerUSTAR) DevMinor() []byte { return h[337:][:8] } -func (h *headerUSTAR) Prefix() []byte { return h[345:][:155] } - -type sparseArray []byte - -func (s sparseArray) Entry(i int) sparseElem { return (sparseElem)(s[i*24:]) } -func (s sparseArray) IsExtended() []byte { return s[24*s.MaxEntries():][:1] } -func (s sparseArray) MaxEntries() int { return len(s) / 24 } - -type sparseElem []byte - -func (s sparseElem) Offset() []byte { return s[00:][:12] } -func (s sparseElem) Length() []byte { return s[12:][:12] } diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/reader.go b/vendor/github.com/vbatts/tar-split/archive/tar/reader.go deleted file mode 100644 index af006fc92e..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/reader.go +++ /dev/null @@ -1,924 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package tar - -import ( - "bytes" - "io" - "strconv" - "strings" - "time" -) - -// Reader provides sequential access to the contents of a tar archive. -// Reader.Next advances to the next file in the archive (including the first), -// and then Reader can be treated as an io.Reader to access the file's data. -type Reader struct { - r io.Reader - pad int64 // Amount of padding (ignored) after current file entry - curr fileReader // Reader for current file entry - blk block // Buffer to use as temporary local storage - - // err is a persistent error. - // It is only the responsibility of every exported method of Reader to - // ensure that this error is sticky. - err error - - RawAccounting bool // Whether to enable the access needed to reassemble the tar from raw bytes. Some performance/memory hit for this. - rawBytes *bytes.Buffer // last raw bits -} - -type fileReader interface { - io.Reader - fileState - - WriteTo(io.Writer) (int64, error) -} - -// RawBytes accesses the raw bytes of the archive, apart from the file payload itself. -// This includes the header and padding. -// -// # This call resets the current rawbytes buffer -// -// Only when RawAccounting is enabled, otherwise this returns nil -func (tr *Reader) RawBytes() []byte { - if !tr.RawAccounting { - return nil - } - if tr.rawBytes == nil { - tr.rawBytes = bytes.NewBuffer(nil) - } - defer tr.rawBytes.Reset() // if we've read them, then flush them. - - return tr.rawBytes.Bytes() - -} - -// NewReader creates a new Reader reading from r. -func NewReader(r io.Reader) *Reader { - return &Reader{r: r, curr: ®FileReader{r, 0}} -} - -// Next advances to the next entry in the tar archive. -// The Header.Size determines how many bytes can be read for the next file. -// Any remaining data in the current file is automatically discarded. -// -// io.EOF is returned at the end of the input. -func (tr *Reader) Next() (*Header, error) { - if tr.err != nil { - return nil, tr.err - } - hdr, err := tr.next() - tr.err = err - return hdr, err -} - -func (tr *Reader) next() (*Header, error) { - var paxHdrs map[string]string - var gnuLongName, gnuLongLink string - - if tr.RawAccounting { - if tr.rawBytes == nil { - tr.rawBytes = bytes.NewBuffer(nil) - } else { - tr.rawBytes.Reset() - } - } - - // Externally, Next iterates through the tar archive as if it is a series of - // files. Internally, the tar format often uses fake "files" to add meta - // data that describes the next file. These meta data "files" should not - // normally be visible to the outside. As such, this loop iterates through - // one or more "header files" until it finds a "normal file". - format := FormatUSTAR | FormatPAX | FormatGNU - for { - // Discard the remainder of the file and any padding. - if err := discard(tr, tr.curr.PhysicalRemaining()); err != nil { - return nil, err - } - n, err := tryReadFull(tr.r, tr.blk[:tr.pad]) - if err != nil { - return nil, err - } - if tr.RawAccounting { - tr.rawBytes.Write(tr.blk[:n]) - } - tr.pad = 0 - - hdr, rawHdr, err := tr.readHeader() - if err != nil { - return nil, err - } - if err := tr.handleRegularFile(hdr); err != nil { - return nil, err - } - format.mayOnlyBe(hdr.Format) - - // Check for PAX/GNU special headers and files. - switch hdr.Typeflag { - case TypeXHeader, TypeXGlobalHeader: - format.mayOnlyBe(FormatPAX) - paxHdrs, err = parsePAX(tr) - if err != nil { - return nil, err - } - if hdr.Typeflag == TypeXGlobalHeader { - if err = mergePAX(hdr, paxHdrs); err != nil { - return nil, err - } - return &Header{ - Name: hdr.Name, - Typeflag: hdr.Typeflag, - Xattrs: hdr.Xattrs, - PAXRecords: hdr.PAXRecords, - Format: format, - }, nil - } - continue // This is a meta header affecting the next header - case TypeGNULongName, TypeGNULongLink: - format.mayOnlyBe(FormatGNU) - realname, err := io.ReadAll(tr) - if err != nil { - return nil, err - } - - if tr.RawAccounting { - tr.rawBytes.Write(realname) - } - - var p parser - switch hdr.Typeflag { - case TypeGNULongName: - gnuLongName = p.parseString(realname) - case TypeGNULongLink: - gnuLongLink = p.parseString(realname) - } - continue // This is a meta header affecting the next header - default: - // The old GNU sparse format is handled here since it is technically - // just a regular file with additional attributes. - - if err := mergePAX(hdr, paxHdrs); err != nil { - return nil, err - } - if gnuLongName != "" { - hdr.Name = gnuLongName - } - if gnuLongLink != "" { - hdr.Linkname = gnuLongLink - } - if hdr.Typeflag == TypeRegA { - if strings.HasSuffix(hdr.Name, "/") { - hdr.Typeflag = TypeDir // Legacy archives use trailing slash for directories - } else { - hdr.Typeflag = TypeReg - } - } - - // The extended headers may have updated the size. - // Thus, setup the regFileReader again after merging PAX headers. - if err := tr.handleRegularFile(hdr); err != nil { - return nil, err - } - - // Sparse formats rely on being able to read from the logical data - // section; there must be a preceding call to handleRegularFile. - if err := tr.handleSparseFile(hdr, rawHdr); err != nil { - return nil, err - } - - // Set the final guess at the format. - if format.has(FormatUSTAR) && format.has(FormatPAX) { - format.mayOnlyBe(FormatUSTAR) - } - hdr.Format = format - return hdr, nil // This is a file, so stop - } - } -} - -// handleRegularFile sets up the current file reader and padding such that it -// can only read the following logical data section. It will properly handle -// special headers that contain no data section. -func (tr *Reader) handleRegularFile(hdr *Header) error { - nb := hdr.Size - if isHeaderOnlyType(hdr.Typeflag) { - nb = 0 - } - if nb < 0 { - return ErrHeader - } - - tr.pad = blockPadding(nb) - tr.curr = ®FileReader{r: tr.r, nb: nb} - return nil -} - -// handleSparseFile checks if the current file is a sparse format of any type -// and sets the curr reader appropriately. -func (tr *Reader) handleSparseFile(hdr *Header, rawHdr *block) error { - var spd sparseDatas - var err error - if hdr.Typeflag == TypeGNUSparse { - spd, err = tr.readOldGNUSparseMap(hdr, rawHdr) - } else { - spd, err = tr.readGNUSparsePAXHeaders(hdr) - } - - // If sp is non-nil, then this is a sparse file. - // Note that it is possible for len(sp) == 0. - if err == nil && spd != nil { - if isHeaderOnlyType(hdr.Typeflag) || !validateSparseEntries(spd, hdr.Size) { - return ErrHeader - } - sph := invertSparseEntries(spd, hdr.Size) - tr.curr = &sparseFileReader{tr.curr, sph, 0} - } - return err -} - -// readGNUSparsePAXHeaders checks the PAX headers for GNU sparse headers. -// If they are found, then this function reads the sparse map and returns it. -// This assumes that 0.0 headers have already been converted to 0.1 headers -// by the PAX header parsing logic. -func (tr *Reader) readGNUSparsePAXHeaders(hdr *Header) (sparseDatas, error) { - // Identify the version of GNU headers. - var is1x0 bool - major, minor := hdr.PAXRecords[paxGNUSparseMajor], hdr.PAXRecords[paxGNUSparseMinor] - switch { - case major == "0" && (minor == "0" || minor == "1"): - is1x0 = false - case major == "1" && minor == "0": - is1x0 = true - case major != "" || minor != "": - return nil, nil // Unknown GNU sparse PAX version - case hdr.PAXRecords[paxGNUSparseMap] != "": - is1x0 = false // 0.0 and 0.1 did not have explicit version records, so guess - default: - return nil, nil // Not a PAX format GNU sparse file. - } - hdr.Format.mayOnlyBe(FormatPAX) - - // Update hdr from GNU sparse PAX headers. - if name := hdr.PAXRecords[paxGNUSparseName]; name != "" { - hdr.Name = name - } - size := hdr.PAXRecords[paxGNUSparseSize] - if size == "" { - size = hdr.PAXRecords[paxGNUSparseRealSize] - } - if size != "" { - n, err := strconv.ParseInt(size, 10, 64) - if err != nil { - return nil, ErrHeader - } - hdr.Size = n - } - - // Read the sparse map according to the appropriate format. - if is1x0 { - return readGNUSparseMap1x0(tr.curr) - } - return readGNUSparseMap0x1(hdr.PAXRecords) -} - -// mergePAX merges paxHdrs into hdr for all relevant fields of Header. -func mergePAX(hdr *Header, paxHdrs map[string]string) (err error) { - for k, v := range paxHdrs { - if v == "" { - continue // Keep the original USTAR value - } - var id64 int64 - switch k { - case paxPath: - hdr.Name = v - case paxLinkpath: - hdr.Linkname = v - case paxUname: - hdr.Uname = v - case paxGname: - hdr.Gname = v - case paxUid: - id64, err = strconv.ParseInt(v, 10, 64) - hdr.Uid = int(id64) // Integer overflow possible - case paxGid: - id64, err = strconv.ParseInt(v, 10, 64) - hdr.Gid = int(id64) // Integer overflow possible - case paxAtime: - hdr.AccessTime, err = parsePAXTime(v) - case paxMtime: - hdr.ModTime, err = parsePAXTime(v) - case paxCtime: - hdr.ChangeTime, err = parsePAXTime(v) - case paxSize: - hdr.Size, err = strconv.ParseInt(v, 10, 64) - default: - if strings.HasPrefix(k, paxSchilyXattr) { - if hdr.Xattrs == nil { - hdr.Xattrs = make(map[string]string) - } - hdr.Xattrs[k[len(paxSchilyXattr):]] = v - } - } - if err != nil { - return ErrHeader - } - } - hdr.PAXRecords = paxHdrs - return nil -} - -// parsePAX parses PAX headers. -// If an extended header (type 'x') is invalid, ErrHeader is returned -func parsePAX(r io.Reader) (map[string]string, error) { - buf, err := io.ReadAll(r) - if err != nil { - return nil, err - } - // leaving this function for io.Reader makes it more testable - if tr, ok := r.(*Reader); ok && tr.RawAccounting { - if _, err = tr.rawBytes.Write(buf); err != nil { - return nil, err - } - } - sbuf := string(buf) - - // For GNU PAX sparse format 0.0 support. - // This function transforms the sparse format 0.0 headers into format 0.1 - // headers since 0.0 headers were not PAX compliant. - var sparseMap []string - - paxHdrs := make(map[string]string) - for len(sbuf) > 0 { - key, value, residual, err := parsePAXRecord(sbuf) - if err != nil { - return nil, ErrHeader - } - sbuf = residual - - switch key { - case paxGNUSparseOffset, paxGNUSparseNumBytes: - // Validate sparse header order and value. - if (len(sparseMap)%2 == 0 && key != paxGNUSparseOffset) || - (len(sparseMap)%2 == 1 && key != paxGNUSparseNumBytes) || - strings.Contains(value, ",") { - return nil, ErrHeader - } - sparseMap = append(sparseMap, value) - default: - paxHdrs[key] = value - } - } - if len(sparseMap) > 0 { - paxHdrs[paxGNUSparseMap] = strings.Join(sparseMap, ",") - } - return paxHdrs, nil -} - -// readHeader reads the next block header and assumes that the underlying reader -// is already aligned to a block boundary. It returns the raw block of the -// header in case further processing is required. -// -// The err will be set to io.EOF only when one of the following occurs: -// - Exactly 0 bytes are read and EOF is hit. -// - Exactly 1 block of zeros is read and EOF is hit. -// - At least 2 blocks of zeros are read. -func (tr *Reader) readHeader() (*Header, *block, error) { - // Two blocks of zero bytes marks the end of the archive. - n, err := io.ReadFull(tr.r, tr.blk[:]) - if tr.RawAccounting && (err == nil || err == io.EOF) { - tr.rawBytes.Write(tr.blk[:n]) - } - if err != nil { - return nil, nil, err // EOF is okay here; exactly 0 bytes read - } - - if bytes.Equal(tr.blk[:], zeroBlock[:]) { - n, err = io.ReadFull(tr.r, tr.blk[:]) - if tr.RawAccounting && (err == nil || err == io.EOF) { - tr.rawBytes.Write(tr.blk[:n]) - } - if err != nil { - return nil, nil, err // EOF is okay here; exactly 1 block of zeros read - } - if bytes.Equal(tr.blk[:], zeroBlock[:]) { - return nil, nil, io.EOF // normal EOF; exactly 2 block of zeros read - } - return nil, nil, ErrHeader // Zero block and then non-zero block - } - - // Verify the header matches a known format. - format := tr.blk.GetFormat() - if format == FormatUnknown { - return nil, nil, ErrHeader - } - - var p parser - hdr := new(Header) - - // Unpack the V7 header. - v7 := tr.blk.V7() - hdr.Typeflag = v7.TypeFlag()[0] - hdr.Name = p.parseString(v7.Name()) - hdr.Linkname = p.parseString(v7.LinkName()) - hdr.Size = p.parseNumeric(v7.Size()) - hdr.Mode = p.parseNumeric(v7.Mode()) - hdr.Uid = int(p.parseNumeric(v7.UID())) - hdr.Gid = int(p.parseNumeric(v7.GID())) - hdr.ModTime = time.Unix(p.parseNumeric(v7.ModTime()), 0) - - // Unpack format specific fields. - if format > formatV7 { - ustar := tr.blk.USTAR() - hdr.Uname = p.parseString(ustar.UserName()) - hdr.Gname = p.parseString(ustar.GroupName()) - hdr.Devmajor = p.parseNumeric(ustar.DevMajor()) - hdr.Devminor = p.parseNumeric(ustar.DevMinor()) - - var prefix string - switch { - case format.has(FormatUSTAR | FormatPAX): - hdr.Format = format - ustar := tr.blk.USTAR() - prefix = p.parseString(ustar.Prefix()) - - // For Format detection, check if block is properly formatted since - // the parser is more liberal than what USTAR actually permits. - notASCII := func(r rune) bool { return r >= 0x80 } - if bytes.IndexFunc(tr.blk[:], notASCII) >= 0 { - hdr.Format = FormatUnknown // Non-ASCII characters in block. - } - nul := func(b []byte) bool { return int(b[len(b)-1]) == 0 } - if !(nul(v7.Size()) && nul(v7.Mode()) && nul(v7.UID()) && nul(v7.GID()) && - nul(v7.ModTime()) && nul(ustar.DevMajor()) && nul(ustar.DevMinor())) { - hdr.Format = FormatUnknown // Numeric fields must end in NUL - } - case format.has(formatSTAR): - star := tr.blk.STAR() - prefix = p.parseString(star.Prefix()) - hdr.AccessTime = time.Unix(p.parseNumeric(star.AccessTime()), 0) - hdr.ChangeTime = time.Unix(p.parseNumeric(star.ChangeTime()), 0) - case format.has(FormatGNU): - hdr.Format = format - var p2 parser - gnu := tr.blk.GNU() - if b := gnu.AccessTime(); b[0] != 0 { - hdr.AccessTime = time.Unix(p2.parseNumeric(b), 0) - } - if b := gnu.ChangeTime(); b[0] != 0 { - hdr.ChangeTime = time.Unix(p2.parseNumeric(b), 0) - } - - // Prior to Go1.8, the Writer had a bug where it would output - // an invalid tar file in certain rare situations because the logic - // incorrectly believed that the old GNU format had a prefix field. - // This is wrong and leads to an output file that mangles the - // atime and ctime fields, which are often left unused. - // - // In order to continue reading tar files created by former, buggy - // versions of Go, we skeptically parse the atime and ctime fields. - // If we are unable to parse them and the prefix field looks like - // an ASCII string, then we fallback on the pre-Go1.8 behavior - // of treating these fields as the USTAR prefix field. - // - // Note that this will not use the fallback logic for all possible - // files generated by a pre-Go1.8 toolchain. If the generated file - // happened to have a prefix field that parses as valid - // atime and ctime fields (e.g., when they are valid octal strings), - // then it is impossible to distinguish between an valid GNU file - // and an invalid pre-Go1.8 file. - // - // See https://golang.org/issues/12594 - // See https://golang.org/issues/21005 - if p2.err != nil { - hdr.AccessTime, hdr.ChangeTime = time.Time{}, time.Time{} - ustar := tr.blk.USTAR() - if s := p.parseString(ustar.Prefix()); isASCII(s) { - prefix = s - } - hdr.Format = FormatUnknown // Buggy file is not GNU - } - } - if len(prefix) > 0 { - hdr.Name = prefix + "/" + hdr.Name - } - } - return hdr, &tr.blk, p.err -} - -// readOldGNUSparseMap reads the sparse map from the old GNU sparse format. -// The sparse map is stored in the tar header if it's small enough. -// If it's larger than four entries, then one or more extension headers are used -// to store the rest of the sparse map. -// -// The Header.Size does not reflect the size of any extended headers used. -// Thus, this function will read from the raw io.Reader to fetch extra headers. -// This method mutates blk in the process. -func (tr *Reader) readOldGNUSparseMap(hdr *Header, blk *block) (sparseDatas, error) { - // Make sure that the input format is GNU. - // Unfortunately, the STAR format also has a sparse header format that uses - // the same type flag but has a completely different layout. - if blk.GetFormat() != FormatGNU { - return nil, ErrHeader - } - hdr.Format.mayOnlyBe(FormatGNU) - - var p parser - hdr.Size = p.parseNumeric(blk.GNU().RealSize()) - if p.err != nil { - return nil, p.err - } - s := blk.GNU().Sparse() - spd := make(sparseDatas, 0, s.MaxEntries()) - for { - for i := 0; i < s.MaxEntries(); i++ { - // This termination condition is identical to GNU and BSD tar. - if s.Entry(i).Offset()[0] == 0x00 { - break // Don't return, need to process extended headers (even if empty) - } - offset := p.parseNumeric(s.Entry(i).Offset()) - length := p.parseNumeric(s.Entry(i).Length()) - if p.err != nil { - return nil, p.err - } - spd = append(spd, sparseEntry{Offset: offset, Length: length}) - } - - if s.IsExtended()[0] > 0 { - // There are more entries. Read an extension header and parse its entries. - if _, err := mustReadFull(tr.r, blk[:]); err != nil { - return nil, err - } - if tr.RawAccounting { - tr.rawBytes.Write(blk[:]) - } - s = blk.Sparse() - continue - } - return spd, nil // Done - } -} - -// readGNUSparseMap1x0 reads the sparse map as stored in GNU's PAX sparse format -// version 1.0. The format of the sparse map consists of a series of -// newline-terminated numeric fields. The first field is the number of entries -// and is always present. Following this are the entries, consisting of two -// fields (offset, length). This function must stop reading at the end -// boundary of the block containing the last newline. -// -// Note that the GNU manual says that numeric values should be encoded in octal -// format. However, the GNU tar utility itself outputs these values in decimal. -// As such, this library treats values as being encoded in decimal. -func readGNUSparseMap1x0(r io.Reader) (sparseDatas, error) { - var ( - cntNewline int64 - buf bytes.Buffer - blk block - ) - - // feedTokens copies data in blocks from r into buf until there are - // at least cnt newlines in buf. It will not read more blocks than needed. - feedTokens := func(n int64) error { - for cntNewline < n { - if _, err := mustReadFull(r, blk[:]); err != nil { - return err - } - buf.Write(blk[:]) - for _, c := range blk { - if c == '\n' { - cntNewline++ - } - } - } - return nil - } - - // nextToken gets the next token delimited by a newline. This assumes that - // at least one newline exists in the buffer. - nextToken := func() string { - cntNewline-- - tok, _ := buf.ReadString('\n') - return strings.TrimRight(tok, "\n") - } - - // Parse for the number of entries. - // Use integer overflow resistant math to check this. - if err := feedTokens(1); err != nil { - return nil, err - } - numEntries, err := strconv.ParseInt(nextToken(), 10, 0) // Intentionally parse as native int - if err != nil || numEntries < 0 || int(2*numEntries) < int(numEntries) { - return nil, ErrHeader - } - - // Parse for all member entries. - // numEntries is trusted after this since a potential attacker must have - // committed resources proportional to what this library used. - if err := feedTokens(2 * numEntries); err != nil { - return nil, err - } - spd := make(sparseDatas, 0, numEntries) - for i := int64(0); i < numEntries; i++ { - offset, err1 := strconv.ParseInt(nextToken(), 10, 64) - length, err2 := strconv.ParseInt(nextToken(), 10, 64) - if err1 != nil || err2 != nil { - return nil, ErrHeader - } - spd = append(spd, sparseEntry{Offset: offset, Length: length}) - } - return spd, nil -} - -// readGNUSparseMap0x1 reads the sparse map as stored in GNU's PAX sparse format -// version 0.1. The sparse map is stored in the PAX headers. -func readGNUSparseMap0x1(paxHdrs map[string]string) (sparseDatas, error) { - // Get number of entries. - // Use integer overflow resistant math to check this. - numEntriesStr := paxHdrs[paxGNUSparseNumBlocks] - numEntries, err := strconv.ParseInt(numEntriesStr, 10, 0) // Intentionally parse as native int - if err != nil || numEntries < 0 || int(2*numEntries) < int(numEntries) { - return nil, ErrHeader - } - - // There should be two numbers in sparseMap for each entry. - sparseMap := strings.Split(paxHdrs[paxGNUSparseMap], ",") - if len(sparseMap) == 1 && sparseMap[0] == "" { - sparseMap = sparseMap[:0] - } - if int64(len(sparseMap)) != 2*numEntries { - return nil, ErrHeader - } - - // Loop through the entries in the sparse map. - // numEntries is trusted now. - spd := make(sparseDatas, 0, numEntries) - for len(sparseMap) >= 2 { - offset, err1 := strconv.ParseInt(sparseMap[0], 10, 64) - length, err2 := strconv.ParseInt(sparseMap[1], 10, 64) - if err1 != nil || err2 != nil { - return nil, ErrHeader - } - spd = append(spd, sparseEntry{Offset: offset, Length: length}) - sparseMap = sparseMap[2:] - } - return spd, nil -} - -// Read reads from the current file in the tar archive. -// It returns (0, io.EOF) when it reaches the end of that file, -// until Next is called to advance to the next file. -// -// If the current file is sparse, then the regions marked as a hole -// are read back as NUL-bytes. -// -// Calling Read on special types like TypeLink, TypeSymlink, TypeChar, -// TypeBlock, TypeDir, and TypeFifo returns (0, io.EOF) regardless of what -// the Header.Size claims. -func (tr *Reader) Read(b []byte) (int, error) { - if tr.err != nil { - return 0, tr.err - } - n, err := tr.curr.Read(b) - if err != nil && err != io.EOF { - tr.err = err - } - return n, err -} - -// writeTo writes the content of the current file to w. -// The bytes written matches the number of remaining bytes in the current file. -// -// If the current file is sparse and w is an io.WriteSeeker, -// then writeTo uses Seek to skip past holes defined in Header.SparseHoles, -// assuming that skipped regions are filled with NULs. -// This always writes the last byte to ensure w is the right size. -// -// TODO(dsnet): Re-export this when adding sparse file support. -// See https://golang.org/issue/22735 -func (tr *Reader) writeTo(w io.Writer) (int64, error) { - if tr.err != nil { - return 0, tr.err - } - n, err := tr.curr.WriteTo(w) - if err != nil { - tr.err = err - } - return n, err -} - -// regFileReader is a fileReader for reading data from a regular file entry. -type regFileReader struct { - r io.Reader // Underlying Reader - nb int64 // Number of remaining bytes to read -} - -func (fr *regFileReader) Read(b []byte) (n int, err error) { - if int64(len(b)) > fr.nb { - b = b[:fr.nb] - } - if len(b) > 0 { - n, err = fr.r.Read(b) - fr.nb -= int64(n) - } - switch { - case err == io.EOF && fr.nb > 0: - return n, io.ErrUnexpectedEOF - case err == nil && fr.nb == 0: - return n, io.EOF - default: - return n, err - } -} - -func (fr *regFileReader) WriteTo(w io.Writer) (int64, error) { - return io.Copy(w, struct{ io.Reader }{fr}) -} - -func (fr regFileReader) LogicalRemaining() int64 { - return fr.nb -} - -func (fr regFileReader) PhysicalRemaining() int64 { - return fr.nb -} - -// sparseFileReader is a fileReader for reading data from a sparse file entry. -type sparseFileReader struct { - fr fileReader // Underlying fileReader - sp sparseHoles // Normalized list of sparse holes - pos int64 // Current position in sparse file -} - -func (sr *sparseFileReader) Read(b []byte) (n int, err error) { - finished := int64(len(b)) >= sr.LogicalRemaining() - if finished { - b = b[:sr.LogicalRemaining()] - } - - b0 := b - endPos := sr.pos + int64(len(b)) - for endPos > sr.pos && err == nil { - var nf int // Bytes read in fragment - holeStart, holeEnd := sr.sp[0].Offset, sr.sp[0].endOffset() - if sr.pos < holeStart { // In a data fragment - bf := b[:min(int64(len(b)), holeStart-sr.pos)] - nf, err = tryReadFull(sr.fr, bf) - } else { // In a hole fragment - bf := b[:min(int64(len(b)), holeEnd-sr.pos)] - nf, err = tryReadFull(zeroReader{}, bf) - } - b = b[nf:] - sr.pos += int64(nf) - if sr.pos >= holeEnd && len(sr.sp) > 1 { - sr.sp = sr.sp[1:] // Ensure last fragment always remains - } - } - - n = len(b0) - len(b) - switch { - case err == io.EOF: - return n, errMissData // Less data in dense file than sparse file - case err != nil: - return n, err - case sr.LogicalRemaining() == 0 && sr.PhysicalRemaining() > 0: - return n, errUnrefData // More data in dense file than sparse file - case finished: - return n, io.EOF - default: - return n, nil - } -} - -func (sr *sparseFileReader) WriteTo(w io.Writer) (n int64, err error) { - ws, ok := w.(io.WriteSeeker) - if ok { - if _, err := ws.Seek(0, io.SeekCurrent); err != nil { - ok = false // Not all io.Seeker can really seek - } - } - if !ok { - return io.Copy(w, struct{ io.Reader }{sr}) - } - - var writeLastByte bool - pos0 := sr.pos - for sr.LogicalRemaining() > 0 && !writeLastByte && err == nil { - var nf int64 // Size of fragment - holeStart, holeEnd := sr.sp[0].Offset, sr.sp[0].endOffset() - if sr.pos < holeStart { // In a data fragment - nf = holeStart - sr.pos - nf, err = io.CopyN(ws, sr.fr, nf) - } else { // In a hole fragment - nf = holeEnd - sr.pos - if sr.PhysicalRemaining() == 0 { - writeLastByte = true - nf-- - } - _, err = ws.Seek(nf, io.SeekCurrent) - } - sr.pos += nf - if sr.pos >= holeEnd && len(sr.sp) > 1 { - sr.sp = sr.sp[1:] // Ensure last fragment always remains - } - } - - // If the last fragment is a hole, then seek to 1-byte before EOF, and - // write a single byte to ensure the file is the right size. - if writeLastByte && err == nil { - _, err = ws.Write([]byte{0}) - sr.pos++ - } - - n = sr.pos - pos0 - switch { - case err == io.EOF: - return n, errMissData // Less data in dense file than sparse file - case err != nil: - return n, err - case sr.LogicalRemaining() == 0 && sr.PhysicalRemaining() > 0: - return n, errUnrefData // More data in dense file than sparse file - default: - return n, nil - } -} - -func (sr sparseFileReader) LogicalRemaining() int64 { - return sr.sp[len(sr.sp)-1].endOffset() - sr.pos -} -func (sr sparseFileReader) PhysicalRemaining() int64 { - return sr.fr.PhysicalRemaining() -} - -type zeroReader struct{} - -func (zeroReader) Read(b []byte) (int, error) { - for i := range b { - b[i] = 0 - } - return len(b), nil -} - -// mustReadFull is like io.ReadFull except it returns -// io.ErrUnexpectedEOF when io.EOF is hit before len(b) bytes are read. -func mustReadFull(r io.Reader, b []byte) (int, error) { - n, err := tryReadFull(r, b) - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return n, err -} - -// tryReadFull is like io.ReadFull except it returns -// io.EOF when it is hit before len(b) bytes are read. -func tryReadFull(r io.Reader, b []byte) (n int, err error) { - for len(b) > n && err == nil { - var nn int - nn, err = r.Read(b[n:]) - n += nn - } - if len(b) == n && err == io.EOF { - err = nil - } - return n, err -} - -// discard skips n bytes in r, reporting an error if unable to do so. -func discard(tr *Reader, n int64) error { - var seekSkipped, copySkipped int64 - var err error - r := tr.r - if tr.RawAccounting { - - copySkipped, err = io.CopyN(tr.rawBytes, tr.r, n) - goto out - } - - // If possible, Seek to the last byte before the end of the data section. - // Do this because Seek is often lazy about reporting errors; this will mask - // the fact that the stream may be truncated. We can rely on the - // io.CopyN done shortly afterwards to trigger any IO errors. - if sr, ok := r.(io.Seeker); ok && n > 1 { - // Not all io.Seeker can actually Seek. For example, os.Stdin implements - // io.Seeker, but calling Seek always returns an error and performs - // no action. Thus, we try an innocent seek to the current position - // to see if Seek is really supported. - pos1, err := sr.Seek(0, io.SeekCurrent) - if pos1 >= 0 && err == nil { - // Seek seems supported, so perform the real Seek. - pos2, err := sr.Seek(n-1, io.SeekCurrent) - if pos2 < 0 || err != nil { - return err - } - seekSkipped = pos2 - pos1 - } - } - - copySkipped, err = io.CopyN(io.Discard, r, n-seekSkipped) -out: - if err == io.EOF && seekSkipped+copySkipped < n { - err = io.ErrUnexpectedEOF - } - return err -} diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime1.go b/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime1.go deleted file mode 100644 index cf9cc79c59..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime1.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux dragonfly openbsd solaris - -package tar - -import ( - "syscall" - "time" -) - -func statAtime(st *syscall.Stat_t) time.Time { - return time.Unix(st.Atim.Unix()) -} - -func statCtime(st *syscall.Stat_t) time.Time { - return time.Unix(st.Ctim.Unix()) -} diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime2.go b/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime2.go deleted file mode 100644 index 6f17dbe307..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime2.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin freebsd netbsd - -package tar - -import ( - "syscall" - "time" -) - -func statAtime(st *syscall.Stat_t) time.Time { - return time.Unix(st.Atimespec.Unix()) -} - -func statCtime(st *syscall.Stat_t) time.Time { - return time.Unix(st.Ctimespec.Unix()) -} diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go b/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go deleted file mode 100644 index 868105f338..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux darwin dragonfly freebsd openbsd netbsd solaris - -package tar - -import ( - "os" - "os/user" - "runtime" - "strconv" - "sync" - "syscall" -) - -func init() { - sysStat = statUnix -} - -// userMap and groupMap caches UID and GID lookups for performance reasons. -// The downside is that renaming uname or gname by the OS never takes effect. -var userMap, groupMap sync.Map // map[int]string - -func statUnix(fi os.FileInfo, h *Header) error { - sys, ok := fi.Sys().(*syscall.Stat_t) - if !ok { - return nil - } - h.Uid = int(sys.Uid) - h.Gid = int(sys.Gid) - - // Best effort at populating Uname and Gname. - // The os/user functions may fail for any number of reasons - // (not implemented on that platform, cgo not enabled, etc). - if u, ok := userMap.Load(h.Uid); ok { - h.Uname = u.(string) - } else if u, err := user.LookupId(strconv.Itoa(h.Uid)); err == nil { - h.Uname = u.Username - userMap.Store(h.Uid, h.Uname) - } - if g, ok := groupMap.Load(h.Gid); ok { - h.Gname = g.(string) - } else if g, err := user.LookupGroupId(strconv.Itoa(h.Gid)); err == nil { - h.Gname = g.Name - groupMap.Store(h.Gid, h.Gname) - } - - h.AccessTime = statAtime(sys) - h.ChangeTime = statCtime(sys) - - // Best effort at populating Devmajor and Devminor. - if h.Typeflag == TypeChar || h.Typeflag == TypeBlock { - dev := uint64(sys.Rdev) // May be int32 or uint32 - switch runtime.GOOS { - case "linux": - // Copied from golang.org/x/sys/unix/dev_linux.go. - major := uint32((dev & 0x00000000000fff00) >> 8) - major |= uint32((dev & 0xfffff00000000000) >> 32) - minor := uint32((dev & 0x00000000000000ff) >> 0) - minor |= uint32((dev & 0x00000ffffff00000) >> 12) - h.Devmajor, h.Devminor = int64(major), int64(minor) - case "darwin": - // Copied from golang.org/x/sys/unix/dev_darwin.go. - major := uint32((dev >> 24) & 0xff) - minor := uint32(dev & 0xffffff) - h.Devmajor, h.Devminor = int64(major), int64(minor) - case "dragonfly": - // Copied from golang.org/x/sys/unix/dev_dragonfly.go. - major := uint32((dev >> 8) & 0xff) - minor := uint32(dev & 0xffff00ff) - h.Devmajor, h.Devminor = int64(major), int64(minor) - case "freebsd": - // Copied from golang.org/x/sys/unix/dev_freebsd.go. - major := uint32((dev >> 8) & 0xff) - minor := uint32(dev & 0xffff00ff) - h.Devmajor, h.Devminor = int64(major), int64(minor) - case "netbsd": - // Copied from golang.org/x/sys/unix/dev_netbsd.go. - major := uint32((dev & 0x000fff00) >> 8) - minor := uint32((dev & 0x000000ff) >> 0) - minor |= uint32((dev & 0xfff00000) >> 12) - h.Devmajor, h.Devminor = int64(major), int64(minor) - case "openbsd": - // Copied from golang.org/x/sys/unix/dev_openbsd.go. - major := uint32((dev & 0x0000ff00) >> 8) - minor := uint32((dev & 0x000000ff) >> 0) - minor |= uint32((dev & 0xffff0000) >> 8) - h.Devmajor, h.Devminor = int64(major), int64(minor) - default: - // TODO: Implement solaris (see https://golang.org/issue/8106) - } - } - return nil -} diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/strconv.go b/vendor/github.com/vbatts/tar-split/archive/tar/strconv.go deleted file mode 100644 index d144485a49..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/strconv.go +++ /dev/null @@ -1,326 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package tar - -import ( - "bytes" - "fmt" - "strconv" - "strings" - "time" -) - -// hasNUL reports whether the NUL character exists within s. -func hasNUL(s string) bool { - return strings.IndexByte(s, 0) >= 0 -} - -// isASCII reports whether the input is an ASCII C-style string. -func isASCII(s string) bool { - for _, c := range s { - if c >= 0x80 || c == 0x00 { - return false - } - } - return true -} - -// toASCII converts the input to an ASCII C-style string. -// This a best effort conversion, so invalid characters are dropped. -func toASCII(s string) string { - if isASCII(s) { - return s - } - b := make([]byte, 0, len(s)) - for _, c := range s { - if c < 0x80 && c != 0x00 { - b = append(b, byte(c)) - } - } - return string(b) -} - -type parser struct { - err error // Last error seen -} - -type formatter struct { - err error // Last error seen -} - -// parseString parses bytes as a NUL-terminated C-style string. -// If a NUL byte is not found then the whole slice is returned as a string. -func (*parser) parseString(b []byte) string { - if i := bytes.IndexByte(b, 0); i >= 0 { - return string(b[:i]) - } - return string(b) -} - -// formatString copies s into b, NUL-terminating if possible. -func (f *formatter) formatString(b []byte, s string) { - if len(s) > len(b) { - f.err = ErrFieldTooLong - } - copy(b, s) - if len(s) < len(b) { - b[len(s)] = 0 - } - - // Some buggy readers treat regular files with a trailing slash - // in the V7 path field as a directory even though the full path - // recorded elsewhere (e.g., via PAX record) contains no trailing slash. - if len(s) > len(b) && b[len(b)-1] == '/' { - n := len(strings.TrimRight(s[:len(b)], "/")) - b[n] = 0 // Replace trailing slash with NUL terminator - } -} - -// fitsInBase256 reports whether x can be encoded into n bytes using base-256 -// encoding. Unlike octal encoding, base-256 encoding does not require that the -// string ends with a NUL character. Thus, all n bytes are available for output. -// -// If operating in binary mode, this assumes strict GNU binary mode; which means -// that the first byte can only be either 0x80 or 0xff. Thus, the first byte is -// equivalent to the sign bit in two's complement form. -func fitsInBase256(n int, x int64) bool { - binBits := uint(n-1) * 8 - return n >= 9 || (x >= -1< 0 && b[0]&0x80 != 0 { - // Handling negative numbers relies on the following identity: - // -a-1 == ^a - // - // If the number is negative, we use an inversion mask to invert the - // data bytes and treat the value as an unsigned number. - var inv byte // 0x00 if positive or zero, 0xff if negative - if b[0]&0x40 != 0 { - inv = 0xff - } - - var x uint64 - for i, c := range b { - c ^= inv // Inverts c only if inv is 0xff, otherwise does nothing - if i == 0 { - c &= 0x7f // Ignore signal bit in first byte - } - if (x >> 56) > 0 { - p.err = ErrHeader // Integer overflow - return 0 - } - x = x<<8 | uint64(c) - } - if (x >> 63) > 0 { - p.err = ErrHeader // Integer overflow - return 0 - } - if inv == 0xff { - return ^int64(x) - } - return int64(x) - } - - // Normal case is base-8 (octal) format. - return p.parseOctal(b) -} - -// formatNumeric encodes x into b using base-8 (octal) encoding if possible. -// Otherwise it will attempt to use base-256 (binary) encoding. -func (f *formatter) formatNumeric(b []byte, x int64) { - if fitsInOctal(len(b), x) { - f.formatOctal(b, x) - return - } - - if fitsInBase256(len(b), x) { - for i := len(b) - 1; i >= 0; i-- { - b[i] = byte(x) - x >>= 8 - } - b[0] |= 0x80 // Highest bit indicates binary format - return - } - - f.formatOctal(b, 0) // Last resort, just write zero - f.err = ErrFieldTooLong -} - -func (p *parser) parseOctal(b []byte) int64 { - // Because unused fields are filled with NULs, we need - // to skip leading NULs. Fields may also be padded with - // spaces or NULs. - // So we remove leading and trailing NULs and spaces to - // be sure. - b = bytes.Trim(b, " \x00") - - if len(b) == 0 { - return 0 - } - x, perr := strconv.ParseUint(p.parseString(b), 8, 64) - if perr != nil { - p.err = ErrHeader - } - return int64(x) -} - -func (f *formatter) formatOctal(b []byte, x int64) { - if !fitsInOctal(len(b), x) { - x = 0 // Last resort, just write zero - f.err = ErrFieldTooLong - } - - s := strconv.FormatInt(x, 8) - // Add leading zeros, but leave room for a NUL. - if n := len(b) - len(s) - 1; n > 0 { - s = strings.Repeat("0", n) + s - } - f.formatString(b, s) -} - -// fitsInOctal reports whether the integer x fits in a field n-bytes long -// using octal encoding with the appropriate NUL terminator. -func fitsInOctal(n int, x int64) bool { - octBits := uint(n-1) * 3 - return x >= 0 && (n >= 22 || x < 1<= 0 { - ss, sn = s[:pos], s[pos+1:] - } - - // Parse the seconds. - secs, err := strconv.ParseInt(ss, 10, 64) - if err != nil { - return time.Time{}, ErrHeader - } - if len(sn) == 0 { - return time.Unix(secs, 0), nil // No sub-second values - } - - // Parse the nanoseconds. - if strings.Trim(sn, "0123456789") != "" { - return time.Time{}, ErrHeader - } - if len(sn) < maxNanoSecondDigits { - sn += strings.Repeat("0", maxNanoSecondDigits-len(sn)) // Right pad - } else { - sn = sn[:maxNanoSecondDigits] // Right truncate - } - nsecs, _ := strconv.ParseInt(sn, 10, 64) // Must succeed - if len(ss) > 0 && ss[0] == '-' { - return time.Unix(secs, -1*nsecs), nil // Negative correction - } - return time.Unix(secs, nsecs), nil -} - -// formatPAXTime converts ts into a time of the form %d.%d as described in the -// PAX specification. This function is capable of negative timestamps. -func formatPAXTime(ts time.Time) (s string) { - secs, nsecs := ts.Unix(), ts.Nanosecond() - if nsecs == 0 { - return strconv.FormatInt(secs, 10) - } - - // If seconds is negative, then perform correction. - sign := "" - if secs < 0 { - sign = "-" // Remember sign - secs = -(secs + 1) // Add a second to secs - nsecs = -(nsecs - 1E9) // Take that second away from nsecs - } - return strings.TrimRight(fmt.Sprintf("%s%d.%09d", sign, secs, nsecs), "0") -} - -// parsePAXRecord parses the input PAX record string into a key-value pair. -// If parsing is successful, it will slice off the currently read record and -// return the remainder as r. -func parsePAXRecord(s string) (k, v, r string, err error) { - // The size field ends at the first space. - sp := strings.IndexByte(s, ' ') - if sp == -1 { - return "", "", s, ErrHeader - } - - // Parse the first token as a decimal integer. - n, perr := strconv.ParseInt(s[:sp], 10, 0) // Intentionally parse as native int - if perr != nil || n < 5 || int64(len(s)) < n { - return "", "", s, ErrHeader - } - - // Extract everything between the space and the final newline. - rec, nl, rem := s[sp+1:n-1], s[n-1:n], s[n:] - if nl != "\n" { - return "", "", s, ErrHeader - } - - // The first equals separates the key from the value. - eq := strings.IndexByte(rec, '=') - if eq == -1 { - return "", "", s, ErrHeader - } - k, v = rec[:eq], rec[eq+1:] - - if !validPAXRecord(k, v) { - return "", "", s, ErrHeader - } - return k, v, rem, nil -} - -// formatPAXRecord formats a single PAX record, prefixing it with the -// appropriate length. -func formatPAXRecord(k, v string) (string, error) { - if !validPAXRecord(k, v) { - return "", ErrHeader - } - - const padding = 3 // Extra padding for ' ', '=', and '\n' - size := len(k) + len(v) + padding - size += len(strconv.Itoa(size)) - record := strconv.Itoa(size) + " " + k + "=" + v + "\n" - - // Final adjustment if adding size field increased the record size. - if len(record) != size { - size = len(record) - record = strconv.Itoa(size) + " " + k + "=" + v + "\n" - } - return record, nil -} - -// validPAXRecord reports whether the key-value pair is valid where each -// record is formatted as: -// "%d %s=%s\n" % (size, key, value) -// -// Keys and values should be UTF-8, but the number of bad writers out there -// forces us to be a more liberal. -// Thus, we only reject all keys with NUL, and only reject NULs in values -// for the PAX version of the USTAR string fields. -// The key must not contain an '=' character. -func validPAXRecord(k, v string) bool { - if k == "" || strings.IndexByte(k, '=') >= 0 { - return false - } - switch k { - case paxPath, paxLinkpath, paxUname, paxGname: - return !hasNUL(v) - default: - return !hasNUL(k) - } -} diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/writer.go b/vendor/github.com/vbatts/tar-split/archive/tar/writer.go deleted file mode 100644 index e80498d03e..0000000000 --- a/vendor/github.com/vbatts/tar-split/archive/tar/writer.go +++ /dev/null @@ -1,653 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package tar - -import ( - "fmt" - "io" - "path" - "sort" - "strings" - "time" -) - -// Writer provides sequential writing of a tar archive. -// Write.WriteHeader begins a new file with the provided Header, -// and then Writer can be treated as an io.Writer to supply that file's data. -type Writer struct { - w io.Writer - pad int64 // Amount of padding to write after current file entry - curr fileWriter // Writer for current file entry - hdr Header // Shallow copy of Header that is safe for mutations - blk block // Buffer to use as temporary local storage - - // err is a persistent error. - // It is only the responsibility of every exported method of Writer to - // ensure that this error is sticky. - err error -} - -// NewWriter creates a new Writer writing to w. -func NewWriter(w io.Writer) *Writer { - return &Writer{w: w, curr: ®FileWriter{w, 0}} -} - -type fileWriter interface { - io.Writer - fileState - - ReadFrom(io.Reader) (int64, error) -} - -// Flush finishes writing the current file's block padding. -// The current file must be fully written before Flush can be called. -// -// This is unnecessary as the next call to WriteHeader or Close -// will implicitly flush out the file's padding. -func (tw *Writer) Flush() error { - if tw.err != nil { - return tw.err - } - if nb := tw.curr.LogicalRemaining(); nb > 0 { - return fmt.Errorf("archive/tar: missed writing %d bytes", nb) - } - if _, tw.err = tw.w.Write(zeroBlock[:tw.pad]); tw.err != nil { - return tw.err - } - tw.pad = 0 - return nil -} - -// WriteHeader writes hdr and prepares to accept the file's contents. -// The Header.Size determines how many bytes can be written for the next file. -// If the current file is not fully written, then this returns an error. -// This implicitly flushes any padding necessary before writing the header. -func (tw *Writer) WriteHeader(hdr *Header) error { - if err := tw.Flush(); err != nil { - return err - } - tw.hdr = *hdr // Shallow copy of Header - - // Avoid usage of the legacy TypeRegA flag, and automatically promote - // it to use TypeReg or TypeDir. - if tw.hdr.Typeflag == TypeRegA { - if strings.HasSuffix(tw.hdr.Name, "/") { - tw.hdr.Typeflag = TypeDir - } else { - tw.hdr.Typeflag = TypeReg - } - } - - // Round ModTime and ignore AccessTime and ChangeTime unless - // the format is explicitly chosen. - // This ensures nominal usage of WriteHeader (without specifying the format) - // does not always result in the PAX format being chosen, which - // causes a 1KiB increase to every header. - if tw.hdr.Format == FormatUnknown { - tw.hdr.ModTime = tw.hdr.ModTime.Round(time.Second) - tw.hdr.AccessTime = time.Time{} - tw.hdr.ChangeTime = time.Time{} - } - - allowedFormats, paxHdrs, err := tw.hdr.allowedFormats() - switch { - case allowedFormats.has(FormatUSTAR): - tw.err = tw.writeUSTARHeader(&tw.hdr) - return tw.err - case allowedFormats.has(FormatPAX): - tw.err = tw.writePAXHeader(&tw.hdr, paxHdrs) - return tw.err - case allowedFormats.has(FormatGNU): - tw.err = tw.writeGNUHeader(&tw.hdr) - return tw.err - default: - return err // Non-fatal error - } -} - -func (tw *Writer) writeUSTARHeader(hdr *Header) error { - // Check if we can use USTAR prefix/suffix splitting. - var namePrefix string - if prefix, suffix, ok := splitUSTARPath(hdr.Name); ok { - namePrefix, hdr.Name = prefix, suffix - } - - // Pack the main header. - var f formatter - blk := tw.templateV7Plus(hdr, f.formatString, f.formatOctal) - f.formatString(blk.USTAR().Prefix(), namePrefix) - blk.SetFormat(FormatUSTAR) - if f.err != nil { - return f.err // Should never happen since header is validated - } - return tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag) -} - -func (tw *Writer) writePAXHeader(hdr *Header, paxHdrs map[string]string) error { - realName, realSize := hdr.Name, hdr.Size - - // TODO(dsnet): Re-enable this when adding sparse support. - // See https://golang.org/issue/22735 - /* - // Handle sparse files. - var spd sparseDatas - var spb []byte - if len(hdr.SparseHoles) > 0 { - sph := append([]sparseEntry{}, hdr.SparseHoles...) // Copy sparse map - sph = alignSparseEntries(sph, hdr.Size) - spd = invertSparseEntries(sph, hdr.Size) - - // Format the sparse map. - hdr.Size = 0 // Replace with encoded size - spb = append(strconv.AppendInt(spb, int64(len(spd)), 10), '\n') - for _, s := range spd { - hdr.Size += s.Length - spb = append(strconv.AppendInt(spb, s.Offset, 10), '\n') - spb = append(strconv.AppendInt(spb, s.Length, 10), '\n') - } - pad := blockPadding(int64(len(spb))) - spb = append(spb, zeroBlock[:pad]...) - hdr.Size += int64(len(spb)) // Accounts for encoded sparse map - - // Add and modify appropriate PAX records. - dir, file := path.Split(realName) - hdr.Name = path.Join(dir, "GNUSparseFile.0", file) - paxHdrs[paxGNUSparseMajor] = "1" - paxHdrs[paxGNUSparseMinor] = "0" - paxHdrs[paxGNUSparseName] = realName - paxHdrs[paxGNUSparseRealSize] = strconv.FormatInt(realSize, 10) - paxHdrs[paxSize] = strconv.FormatInt(hdr.Size, 10) - delete(paxHdrs, paxPath) // Recorded by paxGNUSparseName - } - */ - _ = realSize - - // Write PAX records to the output. - isGlobal := hdr.Typeflag == TypeXGlobalHeader - if len(paxHdrs) > 0 || isGlobal { - // Sort keys for deterministic ordering. - var keys []string - for k := range paxHdrs { - keys = append(keys, k) - } - sort.Strings(keys) - - // Write each record to a buffer. - var buf strings.Builder - for _, k := range keys { - rec, err := formatPAXRecord(k, paxHdrs[k]) - if err != nil { - return err - } - buf.WriteString(rec) - } - - // Write the extended header file. - var name string - var flag byte - if isGlobal { - name = realName - if name == "" { - name = "GlobalHead.0.0" - } - flag = TypeXGlobalHeader - } else { - dir, file := path.Split(realName) - name = path.Join(dir, "PaxHeaders.0", file) - flag = TypeXHeader - } - data := buf.String() - if err := tw.writeRawFile(name, data, flag, FormatPAX); err != nil || isGlobal { - return err // Global headers return here - } - } - - // Pack the main header. - var f formatter // Ignore errors since they are expected - fmtStr := func(b []byte, s string) { f.formatString(b, toASCII(s)) } - blk := tw.templateV7Plus(hdr, fmtStr, f.formatOctal) - blk.SetFormat(FormatPAX) - if err := tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag); err != nil { - return err - } - - // TODO(dsnet): Re-enable this when adding sparse support. - // See https://golang.org/issue/22735 - /* - // Write the sparse map and setup the sparse writer if necessary. - if len(spd) > 0 { - // Use tw.curr since the sparse map is accounted for in hdr.Size. - if _, err := tw.curr.Write(spb); err != nil { - return err - } - tw.curr = &sparseFileWriter{tw.curr, spd, 0} - } - */ - return nil -} - -func (tw *Writer) writeGNUHeader(hdr *Header) error { - // Use long-link files if Name or Linkname exceeds the field size. - const longName = "././@LongLink" - if len(hdr.Name) > nameSize { - data := hdr.Name + "\x00" - if err := tw.writeRawFile(longName, data, TypeGNULongName, FormatGNU); err != nil { - return err - } - } - if len(hdr.Linkname) > nameSize { - data := hdr.Linkname + "\x00" - if err := tw.writeRawFile(longName, data, TypeGNULongLink, FormatGNU); err != nil { - return err - } - } - - // Pack the main header. - var f formatter // Ignore errors since they are expected - var spd sparseDatas - var spb []byte - blk := tw.templateV7Plus(hdr, f.formatString, f.formatNumeric) - if !hdr.AccessTime.IsZero() { - f.formatNumeric(blk.GNU().AccessTime(), hdr.AccessTime.Unix()) - } - if !hdr.ChangeTime.IsZero() { - f.formatNumeric(blk.GNU().ChangeTime(), hdr.ChangeTime.Unix()) - } - // TODO(dsnet): Re-enable this when adding sparse support. - // See https://golang.org/issue/22735 - /* - if hdr.Typeflag == TypeGNUSparse { - sph := append([]sparseEntry{}, hdr.SparseHoles...) // Copy sparse map - sph = alignSparseEntries(sph, hdr.Size) - spd = invertSparseEntries(sph, hdr.Size) - - // Format the sparse map. - formatSPD := func(sp sparseDatas, sa sparseArray) sparseDatas { - for i := 0; len(sp) > 0 && i < sa.MaxEntries(); i++ { - f.formatNumeric(sa.Entry(i).Offset(), sp[0].Offset) - f.formatNumeric(sa.Entry(i).Length(), sp[0].Length) - sp = sp[1:] - } - if len(sp) > 0 { - sa.IsExtended()[0] = 1 - } - return sp - } - sp2 := formatSPD(spd, blk.GNU().Sparse()) - for len(sp2) > 0 { - var spHdr block - sp2 = formatSPD(sp2, spHdr.Sparse()) - spb = append(spb, spHdr[:]...) - } - - // Update size fields in the header block. - realSize := hdr.Size - hdr.Size = 0 // Encoded size; does not account for encoded sparse map - for _, s := range spd { - hdr.Size += s.Length - } - copy(blk.V7().Size(), zeroBlock[:]) // Reset field - f.formatNumeric(blk.V7().Size(), hdr.Size) - f.formatNumeric(blk.GNU().RealSize(), realSize) - } - */ - blk.SetFormat(FormatGNU) - if err := tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag); err != nil { - return err - } - - // Write the extended sparse map and setup the sparse writer if necessary. - if len(spd) > 0 { - // Use tw.w since the sparse map is not accounted for in hdr.Size. - if _, err := tw.w.Write(spb); err != nil { - return err - } - tw.curr = &sparseFileWriter{tw.curr, spd, 0} - } - return nil -} - -type ( - stringFormatter func([]byte, string) - numberFormatter func([]byte, int64) -) - -// templateV7Plus fills out the V7 fields of a block using values from hdr. -// It also fills out fields (uname, gname, devmajor, devminor) that are -// shared in the USTAR, PAX, and GNU formats using the provided formatters. -// -// The block returned is only valid until the next call to -// templateV7Plus or writeRawFile. -func (tw *Writer) templateV7Plus(hdr *Header, fmtStr stringFormatter, fmtNum numberFormatter) *block { - tw.blk.Reset() - - modTime := hdr.ModTime - if modTime.IsZero() { - modTime = time.Unix(0, 0) - } - - v7 := tw.blk.V7() - v7.TypeFlag()[0] = hdr.Typeflag - fmtStr(v7.Name(), hdr.Name) - fmtStr(v7.LinkName(), hdr.Linkname) - fmtNum(v7.Mode(), hdr.Mode) - fmtNum(v7.UID(), int64(hdr.Uid)) - fmtNum(v7.GID(), int64(hdr.Gid)) - fmtNum(v7.Size(), hdr.Size) - fmtNum(v7.ModTime(), modTime.Unix()) - - ustar := tw.blk.USTAR() - fmtStr(ustar.UserName(), hdr.Uname) - fmtStr(ustar.GroupName(), hdr.Gname) - fmtNum(ustar.DevMajor(), hdr.Devmajor) - fmtNum(ustar.DevMinor(), hdr.Devminor) - - return &tw.blk -} - -// writeRawFile writes a minimal file with the given name and flag type. -// It uses format to encode the header format and will write data as the body. -// It uses default values for all of the other fields (as BSD and GNU tar does). -func (tw *Writer) writeRawFile(name, data string, flag byte, format Format) error { - tw.blk.Reset() - - // Best effort for the filename. - name = toASCII(name) - if len(name) > nameSize { - name = name[:nameSize] - } - name = strings.TrimRight(name, "/") - - var f formatter - v7 := tw.blk.V7() - v7.TypeFlag()[0] = flag - f.formatString(v7.Name(), name) - f.formatOctal(v7.Mode(), 0) - f.formatOctal(v7.UID(), 0) - f.formatOctal(v7.GID(), 0) - f.formatOctal(v7.Size(), int64(len(data))) // Must be < 8GiB - f.formatOctal(v7.ModTime(), 0) - tw.blk.SetFormat(format) - if f.err != nil { - return f.err // Only occurs if size condition is violated - } - - // Write the header and data. - if err := tw.writeRawHeader(&tw.blk, int64(len(data)), flag); err != nil { - return err - } - _, err := io.WriteString(tw, data) - return err -} - -// writeRawHeader writes the value of blk, regardless of its value. -// It sets up the Writer such that it can accept a file of the given size. -// If the flag is a special header-only flag, then the size is treated as zero. -func (tw *Writer) writeRawHeader(blk *block, size int64, flag byte) error { - if err := tw.Flush(); err != nil { - return err - } - if _, err := tw.w.Write(blk[:]); err != nil { - return err - } - if isHeaderOnlyType(flag) { - size = 0 - } - tw.curr = ®FileWriter{tw.w, size} - tw.pad = blockPadding(size) - return nil -} - -// splitUSTARPath splits a path according to USTAR prefix and suffix rules. -// If the path is not splittable, then it will return ("", "", false). -func splitUSTARPath(name string) (prefix, suffix string, ok bool) { - length := len(name) - if length <= nameSize || !isASCII(name) { - return "", "", false - } else if length > prefixSize+1 { - length = prefixSize + 1 - } else if name[length-1] == '/' { - length-- - } - - i := strings.LastIndex(name[:length], "/") - nlen := len(name) - i - 1 // nlen is length of suffix - plen := i // plen is length of prefix - if i <= 0 || nlen > nameSize || nlen == 0 || plen > prefixSize { - return "", "", false - } - return name[:i], name[i+1:], true -} - -// Write writes to the current file in the tar archive. -// Write returns the error ErrWriteTooLong if more than -// Header.Size bytes are written after WriteHeader. -// -// Calling Write on special types like TypeLink, TypeSymlink, TypeChar, -// TypeBlock, TypeDir, and TypeFifo returns (0, ErrWriteTooLong) regardless -// of what the Header.Size claims. -func (tw *Writer) Write(b []byte) (int, error) { - if tw.err != nil { - return 0, tw.err - } - n, err := tw.curr.Write(b) - if err != nil && err != ErrWriteTooLong { - tw.err = err - } - return n, err -} - -// readFrom populates the content of the current file by reading from r. -// The bytes read must match the number of remaining bytes in the current file. -// -// If the current file is sparse and r is an io.ReadSeeker, -// then readFrom uses Seek to skip past holes defined in Header.SparseHoles, -// assuming that skipped regions are all NULs. -// This always reads the last byte to ensure r is the right size. -// -// TODO(dsnet): Re-export this when adding sparse file support. -// See https://golang.org/issue/22735 -func (tw *Writer) readFrom(r io.Reader) (int64, error) { - if tw.err != nil { - return 0, tw.err - } - n, err := tw.curr.ReadFrom(r) - if err != nil && err != ErrWriteTooLong { - tw.err = err - } - return n, err -} - -// Close closes the tar archive by flushing the padding, and writing the footer. -// If the current file (from a prior call to WriteHeader) is not fully written, -// then this returns an error. -func (tw *Writer) Close() error { - if tw.err == ErrWriteAfterClose { - return nil - } - if tw.err != nil { - return tw.err - } - - // Trailer: two zero blocks. - err := tw.Flush() - for i := 0; i < 2 && err == nil; i++ { - _, err = tw.w.Write(zeroBlock[:]) - } - - // Ensure all future actions are invalid. - tw.err = ErrWriteAfterClose - return err // Report IO errors -} - -// regFileWriter is a fileWriter for writing data to a regular file entry. -type regFileWriter struct { - w io.Writer // Underlying Writer - nb int64 // Number of remaining bytes to write -} - -func (fw *regFileWriter) Write(b []byte) (n int, err error) { - overwrite := int64(len(b)) > fw.nb - if overwrite { - b = b[:fw.nb] - } - if len(b) > 0 { - n, err = fw.w.Write(b) - fw.nb -= int64(n) - } - switch { - case err != nil: - return n, err - case overwrite: - return n, ErrWriteTooLong - default: - return n, nil - } -} - -func (fw *regFileWriter) ReadFrom(r io.Reader) (int64, error) { - return io.Copy(struct{ io.Writer }{fw}, r) -} - -func (fw regFileWriter) LogicalRemaining() int64 { - return fw.nb -} -func (fw regFileWriter) PhysicalRemaining() int64 { - return fw.nb -} - -// sparseFileWriter is a fileWriter for writing data to a sparse file entry. -type sparseFileWriter struct { - fw fileWriter // Underlying fileWriter - sp sparseDatas // Normalized list of data fragments - pos int64 // Current position in sparse file -} - -func (sw *sparseFileWriter) Write(b []byte) (n int, err error) { - overwrite := int64(len(b)) > sw.LogicalRemaining() - if overwrite { - b = b[:sw.LogicalRemaining()] - } - - b0 := b - endPos := sw.pos + int64(len(b)) - for endPos > sw.pos && err == nil { - var nf int // Bytes written in fragment - dataStart, dataEnd := sw.sp[0].Offset, sw.sp[0].endOffset() - if sw.pos < dataStart { // In a hole fragment - bf := b[:min(int64(len(b)), dataStart-sw.pos)] - nf, err = zeroWriter{}.Write(bf) - } else { // In a data fragment - bf := b[:min(int64(len(b)), dataEnd-sw.pos)] - nf, err = sw.fw.Write(bf) - } - b = b[nf:] - sw.pos += int64(nf) - if sw.pos >= dataEnd && len(sw.sp) > 1 { - sw.sp = sw.sp[1:] // Ensure last fragment always remains - } - } - - n = len(b0) - len(b) - switch { - case err == ErrWriteTooLong: - return n, errMissData // Not possible; implies bug in validation logic - case err != nil: - return n, err - case sw.LogicalRemaining() == 0 && sw.PhysicalRemaining() > 0: - return n, errUnrefData // Not possible; implies bug in validation logic - case overwrite: - return n, ErrWriteTooLong - default: - return n, nil - } -} - -func (sw *sparseFileWriter) ReadFrom(r io.Reader) (n int64, err error) { - rs, ok := r.(io.ReadSeeker) - if ok { - if _, err := rs.Seek(0, io.SeekCurrent); err != nil { - ok = false // Not all io.Seeker can really seek - } - } - if !ok { - return io.Copy(struct{ io.Writer }{sw}, r) - } - - var readLastByte bool - pos0 := sw.pos - for sw.LogicalRemaining() > 0 && !readLastByte && err == nil { - var nf int64 // Size of fragment - dataStart, dataEnd := sw.sp[0].Offset, sw.sp[0].endOffset() - if sw.pos < dataStart { // In a hole fragment - nf = dataStart - sw.pos - if sw.PhysicalRemaining() == 0 { - readLastByte = true - nf-- - } - _, err = rs.Seek(nf, io.SeekCurrent) - } else { // In a data fragment - nf = dataEnd - sw.pos - nf, err = io.CopyN(sw.fw, rs, nf) - } - sw.pos += nf - if sw.pos >= dataEnd && len(sw.sp) > 1 { - sw.sp = sw.sp[1:] // Ensure last fragment always remains - } - } - - // If the last fragment is a hole, then seek to 1-byte before EOF, and - // read a single byte to ensure the file is the right size. - if readLastByte && err == nil { - _, err = mustReadFull(rs, []byte{0}) - sw.pos++ - } - - n = sw.pos - pos0 - switch { - case err == io.EOF: - return n, io.ErrUnexpectedEOF - case err == ErrWriteTooLong: - return n, errMissData // Not possible; implies bug in validation logic - case err != nil: - return n, err - case sw.LogicalRemaining() == 0 && sw.PhysicalRemaining() > 0: - return n, errUnrefData // Not possible; implies bug in validation logic - default: - return n, ensureEOF(rs) - } -} - -func (sw sparseFileWriter) LogicalRemaining() int64 { - return sw.sp[len(sw.sp)-1].endOffset() - sw.pos -} -func (sw sparseFileWriter) PhysicalRemaining() int64 { - return sw.fw.PhysicalRemaining() -} - -// zeroWriter may only be written with NULs, otherwise it returns errWriteHole. -type zeroWriter struct{} - -func (zeroWriter) Write(b []byte) (int, error) { - for i, c := range b { - if c != 0 { - return i, errWriteHole - } - } - return len(b), nil -} - -// ensureEOF checks whether r is at EOF, reporting ErrWriteTooLong if not so. -func ensureEOF(r io.Reader) error { - n, err := tryReadFull(r, []byte{0}) - switch { - case n > 0: - return ErrWriteTooLong - case err == io.EOF: - return nil - default: - return err - } -} diff --git a/vendor/github.com/vbatts/tar-split/tar/asm/README.md b/vendor/github.com/vbatts/tar-split/tar/asm/README.md deleted file mode 100644 index 2a3a5b56a6..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/asm/README.md +++ /dev/null @@ -1,44 +0,0 @@ -asm -=== - -This library for assembly and disassembly of tar archives, facilitated by -`github.com/vbatts/tar-split/tar/storage`. - - -Concerns --------- - -For completely safe assembly/disassembly, there will need to be a Content -Addressable Storage (CAS) directory, that maps to a checksum in the -`storage.Entity` of `storage.FileType`. - -This is due to the fact that tar archives _can_ allow multiple records for the -same path, but the last one effectively wins. Even if the prior records had a -different payload. - -In this way, when assembling an archive from relative paths, if the archive has -multiple entries for the same path, then all payloads read in from a relative -path would be identical. - - -Thoughts --------- - -Have a look-aside directory or storage. This way when a clobbering record is -encountered from the tar stream, then the payload of the prior/existing file is -stored to the CAS. This way the clobbering record's file payload can be -extracted, but we'll have preserved the payload needed to reassemble a precise -tar archive. - -clobbered/path/to/file.[0-N] - -*alternatively* - -We could just _not_ support tar streams that have clobbering file paths. -Appending records to the archive is not incredibly common, and doesn't happen -by default for most implementations. Not supporting them wouldn't be a -security concern either, as if it did occur, we would reassemble an archive -that doesn't validate signature/checksum, so it shouldn't be trusted anyway. - -Otherwise, this will allow us to defer support for appended files as a FUTURE FEATURE. - diff --git a/vendor/github.com/vbatts/tar-split/tar/asm/assemble.go b/vendor/github.com/vbatts/tar-split/tar/asm/assemble.go deleted file mode 100644 index 3eb32ab613..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/asm/assemble.go +++ /dev/null @@ -1,132 +0,0 @@ -package asm - -import ( - "bytes" - "fmt" - "hash" - "hash/crc64" - "io" - "sync" - - "github.com/vbatts/tar-split/tar/storage" -) - -// NewOutputTarStream returns an io.ReadCloser that is an assembled tar archive -// stream. -// -// It takes a storage.FileGetter, for mapping the file payloads that are to be read in, -// and a storage.Unpacker, which has access to the rawbytes and file order -// metadata. With the combination of these two items, a precise assembled Tar -// archive is possible. -func NewOutputTarStream(fg storage.FileGetter, up storage.Unpacker) io.ReadCloser { - // ... Since these are interfaces, this is possible, so let's not have a nil pointer - if fg == nil || up == nil { - return nil - } - pr, pw := io.Pipe() - go func() { - err := WriteOutputTarStream(fg, up, pw) - if err != nil { - pw.CloseWithError(err) - } else { - pw.Close() - } - }() - return pr -} - -// WriteOutputTarStream writes assembled tar archive to a writer. -func WriteOutputTarStream(fg storage.FileGetter, up storage.Unpacker, w io.Writer) error { - // ... Since these are interfaces, this is possible, so let's not have a nil pointer - if fg == nil || up == nil { - return nil - } - var copyBuffer []byte - var crcHash hash.Hash - var crcSum []byte - var multiWriter io.Writer - for { - entry, err := up.Next() - if err != nil { - if err == io.EOF { - return nil - } - return err - } - switch entry.Type { - case storage.SegmentType: - if _, err := w.Write(entry.Payload); err != nil { - return err - } - case storage.FileType: - if entry.Size == 0 { - continue - } - fh, err := fg.Get(entry.GetName()) - if err != nil { - return err - } - if crcHash == nil { - crcHash = crc64.New(storage.CRCTable) - crcSum = make([]byte, 8) - multiWriter = io.MultiWriter(w, crcHash) - copyBuffer = byteBufferPool.Get().([]byte) - // TODO once we have some benchmark or memory profile then we can experiment with using *bytes.Buffer - //nolint:staticcheck // SA6002 not going to do a pointer here - defer byteBufferPool.Put(copyBuffer) - } else { - crcHash.Reset() - } - - if _, err := copyWithBuffer(multiWriter, fh, copyBuffer); err != nil { - fh.Close() - return err - } - - if !bytes.Equal(crcHash.Sum(crcSum[:0]), entry.Payload) { - // I would rather this be a comparable ErrInvalidChecksum or such, - // but since it's coming through the PipeReader, the context of - // _which_ file would be lost... - fh.Close() - return fmt.Errorf("file integrity checksum failed for %q", entry.GetName()) - } - fh.Close() - } - } -} - -var byteBufferPool = &sync.Pool{ - New: func() interface{} { - return make([]byte, 32*1024) - }, -} - -// copyWithBuffer is taken from stdlib io.Copy implementation -// https://github.com/golang/go/blob/go1.5.1/src/io/io.go#L367 -func copyWithBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err error) { - for { - nr, er := src.Read(buf) - if nr > 0 { - nw, ew := dst.Write(buf[0:nr]) - if nw > 0 { - written += int64(nw) - } - if ew != nil { - err = ew - break - } - if nr != nw { - err = io.ErrShortWrite - break - } - } - if er == io.EOF { - break - } - if er != nil { - err = er - break - } - } - return written, err -} diff --git a/vendor/github.com/vbatts/tar-split/tar/asm/disassemble.go b/vendor/github.com/vbatts/tar-split/tar/asm/disassemble.go deleted file mode 100644 index 80c2522afe..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/asm/disassemble.go +++ /dev/null @@ -1,156 +0,0 @@ -package asm - -import ( - "io" - - "github.com/vbatts/tar-split/archive/tar" - "github.com/vbatts/tar-split/tar/storage" -) - -// NewInputTarStream wraps the Reader stream of a tar archive and provides a -// Reader stream of the same. -// -// In the middle it will pack the segments and file metadata to storage.Packer -// `p`. -// -// The the storage.FilePutter is where payload of files in the stream are -// stashed. If this stashing is not needed, you can provide a nil -// storage.FilePutter. Since the checksumming is still needed, then a default -// of NewDiscardFilePutter will be used internally -func NewInputTarStream(r io.Reader, p storage.Packer, fp storage.FilePutter) (io.Reader, error) { - // What to do here... folks will want their own access to the Reader that is - // their tar archive stream, but we'll need that same stream to use our - // forked 'archive/tar'. - // Perhaps do an io.TeeReader that hands back an io.Reader for them to read - // from, and we'll MITM the stream to store metadata. - // We'll need a storage.FilePutter too ... - - // Another concern, whether to do any storage.FilePutter operations, such that we - // don't extract any amount of the archive. But then again, we're not making - // files/directories, hardlinks, etc. Just writing the io to the storage.FilePutter. - // Perhaps we have a DiscardFilePutter that is a bit bucket. - - // we'll return the pipe reader, since TeeReader does not buffer and will - // only read what the outputRdr Read's. Since Tar archives have padding on - // the end, we want to be the one reading the padding, even if the user's - // `archive/tar` doesn't care. - pR, pW := io.Pipe() - outputRdr := io.TeeReader(r, pW) - - // we need a putter that will generate the crc64 sums of file payloads - if fp == nil { - fp = storage.NewDiscardFilePutter() - } - - go func() { - tr := tar.NewReader(outputRdr) - tr.RawAccounting = true - for { - hdr, err := tr.Next() - if err != nil { - if err != io.EOF { - pW.CloseWithError(err) - return - } - // even when an EOF is reached, there is often 1024 null bytes on - // the end of an archive. Collect them too. - if b := tr.RawBytes(); len(b) > 0 { - _, err := p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: b, - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - break // not return. We need the end of the reader. - } - if hdr == nil { - break // not return. We need the end of the reader. - } - - if b := tr.RawBytes(); len(b) > 0 { - _, err := p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: b, - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - - var csum []byte - if hdr.Size > 0 { - var err error - _, csum, err = fp.Put(hdr.Name, tr) - if err != nil { - pW.CloseWithError(err) - return - } - } - - entry := storage.Entry{ - Type: storage.FileType, - Size: hdr.Size, - Payload: csum, - } - // For proper marshalling of non-utf8 characters - entry.SetName(hdr.Name) - - // File entries added, regardless of size - _, err = p.AddEntry(entry) - if err != nil { - pW.CloseWithError(err) - return - } - - if b := tr.RawBytes(); len(b) > 0 { - _, err = p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: b, - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - } - - // It is allowable, and not uncommon that there is further padding on - // the end of an archive, apart from the expected 1024 null bytes. We - // do this in chunks rather than in one go to avoid cases where a - // maliciously crafted tar file tries to trick us into reading many GBs - // into memory. - const paddingChunkSize = 1024 * 1024 - var paddingChunk [paddingChunkSize]byte - for { - var isEOF bool - n, err := outputRdr.Read(paddingChunk[:]) - if err != nil { - if err != io.EOF { - pW.CloseWithError(err) - return - } - isEOF = true - } - if n != 0 { - _, err = p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: paddingChunk[:n], - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - if isEOF { - break - } - } - pW.Close() - }() - - return pR, nil -} diff --git a/vendor/github.com/vbatts/tar-split/tar/asm/doc.go b/vendor/github.com/vbatts/tar-split/tar/asm/doc.go deleted file mode 100644 index 4367b90220..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/asm/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -/* -Package asm provides the API for streaming assembly and disassembly of tar -archives. - -Using the `github.com/vbatts/tar-split/tar/storage` for Packing/Unpacking the -metadata for a stream, as well as an implementation of Getting/Putting the file -entries' payload. -*/ -package asm diff --git a/vendor/github.com/vbatts/tar-split/tar/storage/doc.go b/vendor/github.com/vbatts/tar-split/tar/storage/doc.go deleted file mode 100644 index 83f7089ff1..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/storage/doc.go +++ /dev/null @@ -1,12 +0,0 @@ -/* -Package storage is for metadata of a tar archive. - -Packing and unpacking the Entries of the stream. The types of streams are -either segments of raw bytes (for the raw headers and various padding) and for -an entry marking a file payload. - -The raw bytes are stored precisely in the packed (marshalled) Entry, whereas -the file payload marker include the name of the file, size, and crc64 checksum -(for basic file integrity). -*/ -package storage diff --git a/vendor/github.com/vbatts/tar-split/tar/storage/entry.go b/vendor/github.com/vbatts/tar-split/tar/storage/entry.go deleted file mode 100644 index c91e7ea1e8..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/storage/entry.go +++ /dev/null @@ -1,78 +0,0 @@ -package storage - -import "unicode/utf8" - -// Entries is for sorting by Position -type Entries []Entry - -func (e Entries) Len() int { return len(e) } -func (e Entries) Swap(i, j int) { e[i], e[j] = e[j], e[i] } -func (e Entries) Less(i, j int) bool { return e[i].Position < e[j].Position } - -// Type of Entry -type Type int - -const ( - // FileType represents a file payload from the tar stream. - // - // This will be used to map to relative paths on disk. Only Size > 0 will get - // read into a resulting output stream (due to hardlinks). - FileType Type = 1 + iota - // SegmentType represents a raw bytes segment from the archive stream. These raw - // byte segments consist of the raw headers and various padding. - // - // Its payload is to be marshalled base64 encoded. - SegmentType -) - -// Entry is the structure for packing and unpacking the information read from -// the Tar archive. -// -// FileType Payload checksum is using `hash/crc64` for basic file integrity, -// _not_ for cryptography. -// From http://www.backplane.com/matt/crc64.html, CRC32 has almost 40,000 -// collisions in a sample of 18.2 million, CRC64 had none. -type Entry struct { - Type Type `json:"type"` - Name string `json:"name,omitempty"` - NameRaw []byte `json:"name_raw,omitempty"` - Size int64 `json:"size,omitempty"` - Payload []byte `json:"payload"` // SegmentType stores payload here; FileType stores crc64 checksum here; - Position int `json:"position"` -} - -// SetName will check name for valid UTF-8 string, and set the appropriate -// field. See https://github.com/vbatts/tar-split/issues/17 -func (e *Entry) SetName(name string) { - if utf8.ValidString(name) { - e.Name = name - } else { - e.NameRaw = []byte(name) - } -} - -// SetNameBytes will check name for valid UTF-8 string, and set the appropriate -// field -func (e *Entry) SetNameBytes(name []byte) { - if utf8.Valid(name) { - e.Name = string(name) - } else { - e.NameRaw = name - } -} - -// GetName returns the string for the entry's name, regardless of the field stored in -func (e *Entry) GetName() string { - if len(e.NameRaw) > 0 { - return string(e.NameRaw) - } - return e.Name -} - -// GetNameBytes returns the bytes for the entry's name, regardless of the field stored in -func (e *Entry) GetNameBytes() []byte { - if len(e.NameRaw) > 0 { - return e.NameRaw - } - return []byte(e.Name) -} diff --git a/vendor/github.com/vbatts/tar-split/tar/storage/getter.go b/vendor/github.com/vbatts/tar-split/tar/storage/getter.go deleted file mode 100644 index 9fed24aa89..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/storage/getter.go +++ /dev/null @@ -1,105 +0,0 @@ -package storage - -import ( - "bytes" - "errors" - "hash/crc64" - "io" - "os" - "path/filepath" -) - -// FileGetter is the interface for getting a stream of a file payload, -// addressed by name/filename. Presumably, the names will be scoped to relative -// file paths. -type FileGetter interface { - // Get returns a stream for the provided file path - Get(filename string) (output io.ReadCloser, err error) -} - -// FilePutter is the interface for storing a stream of a file payload, -// addressed by name/filename. -type FilePutter interface { - // Put returns the size of the stream received, and the crc64 checksum for - // the provided stream - Put(filename string, input io.Reader) (size int64, checksum []byte, err error) -} - -// FileGetPutter is the interface that groups both Getting and Putting file -// payloads. -type FileGetPutter interface { - FileGetter - FilePutter -} - -// NewPathFileGetter returns a FileGetter that is for files relative to path -// relpath. -func NewPathFileGetter(relpath string) FileGetter { - return &pathFileGetter{root: relpath} -} - -type pathFileGetter struct { - root string -} - -func (pfg pathFileGetter) Get(filename string) (io.ReadCloser, error) { - return os.Open(filepath.Join(pfg.root, filename)) -} - -type bufferFileGetPutter struct { - files map[string][]byte -} - -func (bfgp bufferFileGetPutter) Get(name string) (io.ReadCloser, error) { - if _, ok := bfgp.files[name]; !ok { - return nil, errors.New("no such file") - } - b := bytes.NewBuffer(bfgp.files[name]) - return &readCloserWrapper{b}, nil -} - -func (bfgp *bufferFileGetPutter) Put(name string, r io.Reader) (int64, []byte, error) { - crc := crc64.New(CRCTable) - buf := bytes.NewBuffer(nil) - cw := io.MultiWriter(crc, buf) - i, err := io.Copy(cw, r) - if err != nil { - return 0, nil, err - } - bfgp.files[name] = buf.Bytes() - return i, crc.Sum(nil), nil -} - -type readCloserWrapper struct { - io.Reader -} - -func (w *readCloserWrapper) Close() error { return nil } - -// NewBufferFileGetPutter is a simple in-memory FileGetPutter -// -// Implication is this is memory intensive... -// Probably best for testing or light weight cases. -func NewBufferFileGetPutter() FileGetPutter { - return &bufferFileGetPutter{ - files: map[string][]byte{}, - } -} - -// NewDiscardFilePutter is a bit bucket FilePutter -func NewDiscardFilePutter() FilePutter { - return &bitBucketFilePutter{} -} - -type bitBucketFilePutter struct { - buffer [32 * 1024]byte // 32 kB is the buffer size currently used by io.Copy, as of August 2021. -} - -func (bbfp *bitBucketFilePutter) Put(name string, r io.Reader) (int64, []byte, error) { - c := crc64.New(CRCTable) - i, err := io.CopyBuffer(c, r, bbfp.buffer[:]) - return i, c.Sum(nil), err -} - -// CRCTable is the default table used for crc64 sum calculations -var CRCTable = crc64.MakeTable(crc64.ISO) diff --git a/vendor/github.com/vbatts/tar-split/tar/storage/packer.go b/vendor/github.com/vbatts/tar-split/tar/storage/packer.go deleted file mode 100644 index 4ba62d9b7a..0000000000 --- a/vendor/github.com/vbatts/tar-split/tar/storage/packer.go +++ /dev/null @@ -1,110 +0,0 @@ -package storage - -import ( - "encoding/json" - "errors" - "io" - "path/filepath" - "unicode/utf8" -) - -// ErrDuplicatePath occurs when a tar archive has more than one entry for the -// same file path -var ErrDuplicatePath = errors.New("duplicates of file paths not supported") - -// Packer describes the methods to pack Entries to a storage destination -type Packer interface { - // AddEntry packs the Entry and returns its position - AddEntry(e Entry) (int, error) -} - -// Unpacker describes the methods to read Entries from a source -type Unpacker interface { - // Next returns the next Entry being unpacked, or error, until io.EOF - Next() (*Entry, error) -} - -type jsonUnpacker struct { - seen seenNames - dec *json.Decoder -} - -func (jup *jsonUnpacker) Next() (*Entry, error) { - var e Entry - err := jup.dec.Decode(&e) - if err != nil { - return nil, err - } - - // check for dup name - if e.Type == FileType { - cName := filepath.Clean(e.GetName()) - if _, ok := jup.seen[cName]; ok { - return nil, ErrDuplicatePath - } - jup.seen[cName] = struct{}{} - } - - return &e, err -} - -// NewJSONUnpacker provides an Unpacker that reads Entries (SegmentType and -// FileType) as a json document. -// -// Each Entry read are expected to be delimited by new line. -func NewJSONUnpacker(r io.Reader) Unpacker { - return &jsonUnpacker{ - dec: json.NewDecoder(r), - seen: seenNames{}, - } -} - -type jsonPacker struct { - w io.Writer - e *json.Encoder - pos int - seen seenNames -} - -type seenNames map[string]struct{} - -func (jp *jsonPacker) AddEntry(e Entry) (int, error) { - // if Name is not valid utf8, switch it to raw first. - if e.Name != "" { - if !utf8.ValidString(e.Name) { - e.NameRaw = []byte(e.Name) - e.Name = "" - } - } - - // check early for dup name - if e.Type == FileType { - cName := filepath.Clean(e.GetName()) - if _, ok := jp.seen[cName]; ok { - return -1, ErrDuplicatePath - } - jp.seen[cName] = struct{}{} - } - - e.Position = jp.pos - err := jp.e.Encode(e) - if err != nil { - return -1, err - } - - // made it this far, increment now - jp.pos++ - return e.Position, nil -} - -// NewJSONPacker provides a Packer that writes each Entry (SegmentType and -// FileType) as a json document. -// -// The Entries are delimited by new line. -func NewJSONPacker(w io.Writer) Packer { - return &jsonPacker{ - w: w, - e: json.NewEncoder(w), - seen: seenNames{}, - } -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go index c6f438774f..cabf645a5b 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go @@ -31,14 +31,6 @@ const ( // Server HTTP metrics. const ( - // Deprecated: This field is unused. - RequestCount = "http.server.request_count" // Incoming request count total - // Deprecated: Use of this field has been migrated to serverRequestSize. It will be removed in a future version. - RequestContentLength = "http.server.request_content_length" // Incoming request bytes total - // Deprecated: Use of this field has been migrated to serverResponseSize. It will be removed in a future version. - ResponseContentLength = "http.server.response_content_length" // Incoming response bytes total - // Deprecated: Use of this field has been migrated to serverDuration. It will be removed in a future version. - ServerLatency = "http.server.duration" // Incoming end to end duration, milliseconds serverRequestSize = "http.server.request.size" // Incoming request bytes total serverResponseSize = "http.server.response.size" // Incoming response bytes total serverDuration = "http.server.duration" // Incoming end to end duration, milliseconds diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go index 3d292dab6d..1fc15019e6 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go @@ -224,7 +224,7 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http next.ServeHTTP(w, r.WithContext(ctx)) - setAfterServeAttributes(span, bw.read, rww.written, rww.statusCode, bw.err, rww.err) + setAfterServeAttributes(span, bw.read.Load(), rww.written, rww.statusCode, bw.err, rww.err) // Add metrics attributes := append(labeler.Get(), semconvutil.HTTPServerRequestMetrics(h.server, r)...) @@ -232,7 +232,7 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http attributes = append(attributes, semconv.HTTPStatusCode(rww.statusCode)) } o := metric.WithAttributes(attributes...) - h.requestBytesCounter.Add(ctx, bw.read, o) + h.requestBytesCounter.Add(ctx, bw.read.Load(), o) h.responseBytesCounter.Add(ctx, rww.written, o) // Use floating point division here for higher precision (instead of Millisecond method). diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go index 495d700cfa..0efd5261f6 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go @@ -43,10 +43,10 @@ func HTTPClientResponse(resp *http.Response) []attribute.KeyValue { } // HTTPClientRequest returns trace attributes for an HTTP request made by a client. -// The following attributes are always returned: "http.url", "http.flavor", -// "http.method", "net.peer.name". The following attributes are returned if the -// related values are defined in req: "net.peer.port", "http.user_agent", -// "http.request_content_length", "enduser.id". +// The following attributes are always returned: "http.url", "http.method", +// "net.peer.name". The following attributes are returned if the related values +// are defined in req: "net.peer.port", "user_agent.original", +// "http.request_content_length". func HTTPClientRequest(req *http.Request) []attribute.KeyValue { return hc.ClientRequest(req) } @@ -83,10 +83,9 @@ func HTTPClientStatus(code int) (codes.Code, string) { // The req Host will be used to determine the server instead. // // The following attributes are always returned: "http.method", "http.scheme", -// "http.flavor", "http.target", "net.host.name". The following attributes are -// returned if they related values are defined in req: "net.host.port", -// "net.sock.peer.addr", "net.sock.peer.port", "http.user_agent", "enduser.id", -// "http.client_ip". +// "http.target", "net.host.name". The following attributes are returned if +// they related values are defined in req: "net.host.port", "net.sock.peer.addr", +// "net.sock.peer.port", "user_agent.original", "http.client_ip". func HTTPServerRequest(server string, req *http.Request) []attribute.KeyValue { return hc.ServerRequest(server, req) } @@ -109,8 +108,8 @@ func HTTPServerRequest(server string, req *http.Request) []attribute.KeyValue { // The req Host will be used to determine the server instead. // // The following attributes are always returned: "http.method", "http.scheme", -// "http.flavor", "net.host.name". The following attributes are -// returned if they related values are defined in req: "net.host.port". +// "net.host.name". The following attributes are returned if they related +// values are defined in req: "net.host.port". func HTTPServerRequestMetrics(server string, req *http.Request) []attribute.KeyValue { return hc.ServerRequestMetrics(server, req) } @@ -192,7 +191,7 @@ func (c *httpConv) ClientResponse(resp *http.Response) []attribute.KeyValue { // ClientRequest returns attributes for an HTTP request made by a client. The // following attributes are always returned: "http.url", "http.method", // "net.peer.name". The following attributes are returned if the related values -// are defined in req: "net.peer.port", "http.user_agent", +// are defined in req: "net.peer.port", "user_agent.original", // "http.request_content_length", "user_agent.original". func (c *httpConv) ClientRequest(req *http.Request) []attribute.KeyValue { /* The following semantic conventions are returned if present: @@ -449,8 +448,8 @@ func (c *httpConv) ServerRequest(server string, req *http.Request) []attribute.K // The req Host will be used to determine the server instead. // // The following attributes are always returned: "http.method", "http.scheme", -// "http.flavor", "net.host.name". The following attributes are -// returned if they related values are defined in req: "net.host.port". +// "net.host.name". The following attributes are returned if they related +// values are defined in req: "net.host.port". func (c *httpConv) ServerRequestMetrics(server string, req *http.Request) []attribute.KeyValue { /* The following semantic conventions are returned if present: http.scheme string diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go index 8d850df3ba..43e937a67a 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go @@ -182,7 +182,7 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { metricAttrs = append(metricAttrs, semconv.HTTPStatusCode(res.StatusCode)) } o := metric.WithAttributes(metricAttrs...) - t.requestBytesCounter.Add(ctx, bw.read, o) + t.requestBytesCounter.Add(ctx, bw.read.Load(), o) // For handling response bytes we leverage a callback when the client reads the http response readRecordFunc := func(n int64) { t.responseBytesCounter.Add(ctx, n, o) diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go index 7499f688b1..35254e888f 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go @@ -16,7 +16,7 @@ package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http // Version is the current release version of the otelhttp instrumentation. func Version() string { - return "0.48.0" + return "0.49.0" // This string is updated by the pre_release.sh script during release } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go index 11a35ed167..2852ec9717 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go @@ -18,6 +18,7 @@ import ( "context" "io" "net/http" + "sync/atomic" "go.opentelemetry.io/otel/propagation" ) @@ -30,14 +31,14 @@ type bodyWrapper struct { io.ReadCloser record func(n int64) // must not be nil - read int64 + read atomic.Int64 err error } func (w *bodyWrapper) Read(b []byte) (int, error) { n, err := w.ReadCloser.Read(b) n1 := int64(n) - w.read += n1 + w.read.Add(n1) w.err = err w.record(n1) return n, err diff --git a/vendor/go.opentelemetry.io/otel/.codespellignore b/vendor/go.opentelemetry.io/otel/.codespellignore index ae6a3bcf12..120b63a9c7 100644 --- a/vendor/go.opentelemetry.io/otel/.codespellignore +++ b/vendor/go.opentelemetry.io/otel/.codespellignore @@ -3,3 +3,5 @@ fo te collison consequentially +ans +nam diff --git a/vendor/go.opentelemetry.io/otel/CHANGELOG.md b/vendor/go.opentelemetry.io/otel/CHANGELOG.md index 5422ca7dcc..98f2d20438 100644 --- a/vendor/go.opentelemetry.io/otel/CHANGELOG.md +++ b/vendor/go.opentelemetry.io/otel/CHANGELOG.md @@ -8,6 +8,26 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [Unreleased] +## [1.24.0/0.46.0/0.0.1-alpha] 2024-02-23 + +This release is the last to support [Go 1.20]. +The next release will require at least [Go 1.21]. + +### Added + +- Support [Go 1.22]. (#4890) +- Add exemplar support to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4900) +- Add exemplar support to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4900) +- The `go.opentelemetry.io/otel/log` module is added. + This module includes OpenTelemetry Go's implementation of the Logs Bridge API. + This module is in an alpha state, it is subject to breaking changes. + See our [versioning policy](./VERSIONING.md) for more info. (#4961) + +### Fixed + +- Fix registration of multiple callbacks when using the global meter provider from `go.opentelemetry.io/otel`. (#4945) +- Fix negative buckets in output of exponential histograms. (#4956) + ## [1.23.1] 2024-02-07 ### Fixed @@ -31,7 +51,7 @@ See our [versioning policy](VERSIONING.md) for more information about these stab - Add `WithEndpointURL` option to the `exporters/otlp/otlpmetric/otlpmetricgrpc`, `exporters/otlp/otlpmetric/otlpmetrichttp`, `exporters/otlp/otlptrace/otlptracegrpc` and `exporters/otlp/otlptrace/otlptracehttp` packages. (#4808) - Experimental exemplar exporting is added to the metric SDK. - See [metric documentation](./sdk/metric/EXPERIMENTAL.md#exemplars) for more information about this feature and how to enable it. (#4871) + See [metric documentation](./sdk/metric/internal/x/README.md#exemplars) for more information about this feature and how to enable it. (#4871) - `ErrSchemaURLConflict` is added to `go.opentelemetry.io/otel/sdk/resource`. This error is returned when a merge of two `Resource`s with different (non-empty) schema URL is attempted. (#4876) @@ -76,7 +96,7 @@ See our [versioning policy](VERSIONING.md) for more information about these stab The package contains semantic conventions from the `v1.24.0` version of the OpenTelemetry Semantic Conventions. (#4770) - Add `WithResourceAsConstantLabels` option to apply resource attributes for every metric emitted by the Prometheus exporter. (#4733) - Experimental cardinality limiting is added to the metric SDK. - See [metric documentation](./sdk/metric/EXPERIMENTAL.md#cardinality-limit) for more information about this feature and how to enable it. (#4457) + See [metric documentation](./sdk/metric/internal/x/README.md#cardinality-limit) for more information about this feature and how to enable it. (#4457) - Add `NewMemberRaw` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage`. (#4804) ### Changed @@ -2829,7 +2849,8 @@ It contains api and sdk for trace and meter. - CircleCI build CI manifest files. - CODEOWNERS file to track owners of this project. -[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.23.1...HEAD +[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.24.0...HEAD +[1.24.0/0.46.0/0.0.1-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.24.0 [1.23.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.1 [1.23.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.0 [1.23.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.0-rc.1 @@ -2907,6 +2928,8 @@ It contains api and sdk for trace and meter. [0.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.1 [0.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.0 +[Go 1.22]: https://go.dev/doc/go1.22 +[Go 1.21]: https://go.dev/doc/go1.21 [Go 1.20]: https://go.dev/doc/go1.20 [Go 1.19]: https://go.dev/doc/go1.19 [Go 1.18]: https://go.dev/doc/go1.18 diff --git a/vendor/go.opentelemetry.io/otel/Makefile b/vendor/go.opentelemetry.io/otel/Makefile index 35fc189961..6de95219be 100644 --- a/vendor/go.opentelemetry.io/otel/Makefile +++ b/vendor/go.opentelemetry.io/otel/Makefile @@ -192,7 +192,7 @@ test-coverage: | $(GOCOVMERGE) done; \ $(GOCOVMERGE) $$(find . -name coverage.out) > coverage.txt -# Adding a directory will include all benchmarks in that direcotry if a filter is not specified. +# Adding a directory will include all benchmarks in that directory if a filter is not specified. BENCHMARK_TARGETS := sdk/trace .PHONY: benchmark benchmark: $(BENCHMARK_TARGETS:%=benchmark/%) @@ -315,4 +315,4 @@ add-tags: | $(MULTIMOD) .PHONY: lint-markdown lint-markdown: - docker run -v "$(CURDIR):$(WORKDIR)" docker://avtodev/markdown-lint:v1 -c $(WORKDIR)/.markdownlint.yaml $(WORKDIR)/**/*.md + docker run -v "$(CURDIR):$(WORKDIR)" avtodev/markdown-lint:v1 -c $(WORKDIR)/.markdownlint.yaml $(WORKDIR)/**/*.md diff --git a/vendor/go.opentelemetry.io/otel/README.md b/vendor/go.opentelemetry.io/otel/README.md index 44e1bfc9b5..7766259a5c 100644 --- a/vendor/go.opentelemetry.io/otel/README.md +++ b/vendor/go.opentelemetry.io/otel/README.md @@ -11,14 +11,11 @@ It provides a set of APIs to directly measure performance and behavior of your s ## Project Status -| Signal | Status | -|---------|------------| -| Traces | Stable | -| Metrics | Stable | -| Logs | Design [1] | - -- [1]: Currently the logs signal development is in a design phase ([#4696](https://github.com/open-telemetry/opentelemetry-go/issues/4696)). - No Logs Pull Requests are currently being accepted. +| Signal | Status | +|---------|--------------------| +| Traces | Stable | +| Metrics | Stable | +| Logs | In development[^1] | Progress and status specific to this repository is tracked in our [project boards](https://github.com/open-telemetry/opentelemetry-go/projects) @@ -28,6 +25,8 @@ and Project versioning information and stability guarantees can be found in the [versioning documentation](VERSIONING.md). +[^1]: https://github.com/orgs/open-telemetry/projects/43 + ### Compatibility OpenTelemetry-Go ensures compatibility with the current supported versions of @@ -50,14 +49,19 @@ Currently, this project supports the following environments. | OS | Go Version | Architecture | |---------|------------|--------------| +| Ubuntu | 1.22 | amd64 | | Ubuntu | 1.21 | amd64 | | Ubuntu | 1.20 | amd64 | +| Ubuntu | 1.22 | 386 | | Ubuntu | 1.21 | 386 | | Ubuntu | 1.20 | 386 | +| MacOS | 1.22 | amd64 | | MacOS | 1.21 | amd64 | | MacOS | 1.20 | amd64 | +| Windows | 1.22 | amd64 | | Windows | 1.21 | amd64 | | Windows | 1.20 | amd64 | +| Windows | 1.22 | 386 | | Windows | 1.21 | 386 | | Windows | 1.20 | 386 | diff --git a/vendor/go.opentelemetry.io/otel/internal/global/meter.go b/vendor/go.opentelemetry.io/otel/internal/global/meter.go index 0097db478c..7ed61c0e25 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/meter.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/meter.go @@ -130,9 +130,11 @@ func (m *meter) setDelegate(provider metric.MeterProvider) { inst.setDelegate(meter) } - for e := m.registry.Front(); e != nil; e = e.Next() { + var n *list.Element + for e := m.registry.Front(); e != nil; e = n { r := e.Value.(*registration) r.setDelegate(meter) + n = e.Next() m.registry.Remove(e) } diff --git a/vendor/go.opentelemetry.io/otel/internal/global/state.go b/vendor/go.opentelemetry.io/otel/internal/global/state.go index 7985005bcb..386c8bfdc0 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/state.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/state.go @@ -63,7 +63,7 @@ func SetTracerProvider(tp trace.TracerProvider) { // to itself. Error( errors.New("no delegate configured in tracer provider"), - "Setting tracer provider to it's current value. No delegate will be configured", + "Setting tracer provider to its current value. No delegate will be configured", ) return } @@ -92,7 +92,7 @@ func SetTextMapPropagator(p propagation.TextMapPropagator) { // delegate to itself. Error( errors.New("no delegate configured in text map propagator"), - "Setting text map propagator to it's current value. No delegate will be configured", + "Setting text map propagator to its current value. No delegate will be configured", ) return } @@ -123,7 +123,7 @@ func SetMeterProvider(mp metric.MeterProvider) { // to itself. Error( errors.New("no delegate configured in meter provider"), - "Setting meter provider to it's current value. No delegate will be configured", + "Setting meter provider to its current value. No delegate will be configured", ) return } diff --git a/vendor/go.opentelemetry.io/otel/version.go b/vendor/go.opentelemetry.io/otel/version.go index 0d998bcaf3..7b2993a1fe 100644 --- a/vendor/go.opentelemetry.io/otel/version.go +++ b/vendor/go.opentelemetry.io/otel/version.go @@ -16,5 +16,5 @@ package otel // import "go.opentelemetry.io/otel" // Version is the current release version of OpenTelemetry in use. func Version() string { - return "1.23.1" + return "1.24.0" } diff --git a/vendor/go.opentelemetry.io/otel/versions.yaml b/vendor/go.opentelemetry.io/otel/versions.yaml index 19a73c626a..1b556e6782 100644 --- a/vendor/go.opentelemetry.io/otel/versions.yaml +++ b/vendor/go.opentelemetry.io/otel/versions.yaml @@ -14,7 +14,7 @@ module-sets: stable-v1: - version: v1.23.1 + version: v1.24.0 modules: - go.opentelemetry.io/otel - go.opentelemetry.io/otel/bridge/opencensus @@ -40,10 +40,14 @@ module-sets: - go.opentelemetry.io/otel/sdk/metric - go.opentelemetry.io/otel/trace experimental-metrics: - version: v0.45.2 + version: v0.46.0 modules: - go.opentelemetry.io/otel/example/prometheus - go.opentelemetry.io/otel/exporters/prometheus + experimental-logs: + version: v0.0.1-alpha + modules: + - go.opentelemetry.io/otel/log experimental-schema: version: v0.0.7 modules: diff --git a/vendor/golang.org/x/oauth2/internal/client_appengine.go b/vendor/golang.org/x/oauth2/internal/client_appengine.go deleted file mode 100644 index d28140f789..0000000000 --- a/vendor/golang.org/x/oauth2/internal/client_appengine.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build appengine - -package internal - -import "google.golang.org/appengine/urlfetch" - -func init() { - appengineClientHook = urlfetch.Client -} diff --git a/vendor/golang.org/x/oauth2/internal/transport.go b/vendor/golang.org/x/oauth2/internal/transport.go index 572074a637..b9db01ddfd 100644 --- a/vendor/golang.org/x/oauth2/internal/transport.go +++ b/vendor/golang.org/x/oauth2/internal/transport.go @@ -18,16 +18,11 @@ var HTTPClient ContextKey // because nobody else can create a ContextKey, being unexported. type ContextKey struct{} -var appengineClientHook func(context.Context) *http.Client - func ContextClient(ctx context.Context) *http.Client { if ctx != nil { if hc, ok := ctx.Value(HTTPClient).(*http.Client); ok { return hc } } - if appengineClientHook != nil { - return appengineClientHook(ctx) - } return http.DefaultClient } diff --git a/vendor/golang.org/x/oauth2/oauth2.go b/vendor/golang.org/x/oauth2/oauth2.go index 90a2c3d6dc..09f6a49b80 100644 --- a/vendor/golang.org/x/oauth2/oauth2.go +++ b/vendor/golang.org/x/oauth2/oauth2.go @@ -393,7 +393,7 @@ func ReuseTokenSource(t *Token, src TokenSource) TokenSource { } } -// ReuseTokenSource returns a TokenSource that acts in the same manner as the +// ReuseTokenSourceWithExpiry returns a TokenSource that acts in the same manner as the // TokenSource returned by ReuseTokenSource, except the expiry buffer is // configurable. The expiration time of a token is calculated as // t.Expiry.Add(-earlyExpiry). diff --git a/vendor/golang.org/x/tools/cmd/stringer/stringer.go b/vendor/golang.org/x/tools/cmd/stringer/stringer.go deleted file mode 100644 index 2b19c93e8e..0000000000 --- a/vendor/golang.org/x/tools/cmd/stringer/stringer.go +++ /dev/null @@ -1,660 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer -// interface. Given the name of a (signed or unsigned) integer type T that has constants -// defined, stringer will create a new self-contained Go source file implementing -// -// func (t T) String() string -// -// The file is created in the same package and directory as the package that defines T. -// It has helpful defaults designed for use with go generate. -// -// Stringer works best with constants that are consecutive values such as created using iota, -// but creates good code regardless. In the future it might also provide custom support for -// constant sets that are bit patterns. -// -// For example, given this snippet, -// -// package painkiller -// -// type Pill int -// -// const ( -// Placebo Pill = iota -// Aspirin -// Ibuprofen -// Paracetamol -// Acetaminophen = Paracetamol -// ) -// -// running this command -// -// stringer -type=Pill -// -// in the same directory will create the file pill_string.go, in package painkiller, -// containing a definition of -// -// func (Pill) String() string -// -// That method will translate the value of a Pill constant to the string representation -// of the respective constant name, so that the call fmt.Print(painkiller.Aspirin) will -// print the string "Aspirin". -// -// Typically this process would be run using go generate, like this: -// -// //go:generate stringer -type=Pill -// -// If multiple constants have the same value, the lexically first matching name will -// be used (in the example, Acetaminophen will print as "Paracetamol"). -// -// With no arguments, it processes the package in the current directory. -// Otherwise, the arguments must name a single directory holding a Go package -// or a set of Go source files that represent a single Go package. -// -// The -type flag accepts a comma-separated list of types so a single run can -// generate methods for multiple types. The default output file is t_string.go, -// where t is the lower-cased name of the first type listed. It can be overridden -// with the -output flag. -// -// The -linecomment flag tells stringer to generate the text of any line comment, trimmed -// of leading spaces, instead of the constant name. For instance, if the constants above had a -// Pill prefix, one could write -// -// PillAspirin // Aspirin -// -// to suppress it in the output. -package main // import "golang.org/x/tools/cmd/stringer" - -import ( - "bytes" - "flag" - "fmt" - "go/ast" - "go/constant" - "go/format" - "go/token" - "go/types" - "log" - "os" - "path/filepath" - "sort" - "strings" - - "golang.org/x/tools/go/packages" -) - -var ( - typeNames = flag.String("type", "", "comma-separated list of type names; must be set") - output = flag.String("output", "", "output file name; default srcdir/_string.go") - trimprefix = flag.String("trimprefix", "", "trim the `prefix` from the generated constant names") - linecomment = flag.Bool("linecomment", false, "use line comment text as printed text when present") - buildTags = flag.String("tags", "", "comma-separated list of build tags to apply") -) - -// Usage is a replacement usage function for the flags package. -func Usage() { - fmt.Fprintf(os.Stderr, "Usage of stringer:\n") - fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T [directory]\n") - fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T files... # Must be a single package\n") - fmt.Fprintf(os.Stderr, "For more information, see:\n") - fmt.Fprintf(os.Stderr, "\thttps://pkg.go.dev/golang.org/x/tools/cmd/stringer\n") - fmt.Fprintf(os.Stderr, "Flags:\n") - flag.PrintDefaults() -} - -func main() { - log.SetFlags(0) - log.SetPrefix("stringer: ") - flag.Usage = Usage - flag.Parse() - if len(*typeNames) == 0 { - flag.Usage() - os.Exit(2) - } - types := strings.Split(*typeNames, ",") - var tags []string - if len(*buildTags) > 0 { - tags = strings.Split(*buildTags, ",") - } - - // We accept either one directory or a list of files. Which do we have? - args := flag.Args() - if len(args) == 0 { - // Default: process whole package in current directory. - args = []string{"."} - } - - // Parse the package once. - var dir string - g := Generator{ - trimPrefix: *trimprefix, - lineComment: *linecomment, - } - // TODO(suzmue): accept other patterns for packages (directories, list of files, import paths, etc). - if len(args) == 1 && isDirectory(args[0]) { - dir = args[0] - } else { - if len(tags) != 0 { - log.Fatal("-tags option applies only to directories, not when files are specified") - } - dir = filepath.Dir(args[0]) - } - - g.parsePackage(args, tags) - - // Print the header and package clause. - g.Printf("// Code generated by \"stringer %s\"; DO NOT EDIT.\n", strings.Join(os.Args[1:], " ")) - g.Printf("\n") - g.Printf("package %s", g.pkg.name) - g.Printf("\n") - g.Printf("import \"strconv\"\n") // Used by all methods. - - // Run generate for each type. - for _, typeName := range types { - g.generate(typeName) - } - - // Format the output. - src := g.format() - - // Write to file. - outputName := *output - if outputName == "" { - baseName := fmt.Sprintf("%s_string.go", types[0]) - outputName = filepath.Join(dir, strings.ToLower(baseName)) - } - err := os.WriteFile(outputName, src, 0644) - if err != nil { - log.Fatalf("writing output: %s", err) - } -} - -// isDirectory reports whether the named file is a directory. -func isDirectory(name string) bool { - info, err := os.Stat(name) - if err != nil { - log.Fatal(err) - } - return info.IsDir() -} - -// Generator holds the state of the analysis. Primarily used to buffer -// the output for format.Source. -type Generator struct { - buf bytes.Buffer // Accumulated output. - pkg *Package // Package we are scanning. - - trimPrefix string - lineComment bool - - logf func(format string, args ...interface{}) // test logging hook; nil when not testing -} - -func (g *Generator) Printf(format string, args ...interface{}) { - fmt.Fprintf(&g.buf, format, args...) -} - -// File holds a single parsed file and associated data. -type File struct { - pkg *Package // Package to which this file belongs. - file *ast.File // Parsed AST. - // These fields are reset for each type being generated. - typeName string // Name of the constant type. - values []Value // Accumulator for constant values of that type. - - trimPrefix string - lineComment bool -} - -type Package struct { - name string - defs map[*ast.Ident]types.Object - files []*File -} - -// parsePackage analyzes the single package constructed from the patterns and tags. -// parsePackage exits if there is an error. -func (g *Generator) parsePackage(patterns []string, tags []string) { - cfg := &packages.Config{ - Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax, - // TODO: Need to think about constants in test files. Maybe write type_string_test.go - // in a separate pass? For later. - Tests: false, - BuildFlags: []string{fmt.Sprintf("-tags=%s", strings.Join(tags, " "))}, - Logf: g.logf, - } - pkgs, err := packages.Load(cfg, patterns...) - if err != nil { - log.Fatal(err) - } - if len(pkgs) != 1 { - log.Fatalf("error: %d packages matching %v", len(pkgs), strings.Join(patterns, " ")) - } - g.addPackage(pkgs[0]) -} - -// addPackage adds a type checked Package and its syntax files to the generator. -func (g *Generator) addPackage(pkg *packages.Package) { - g.pkg = &Package{ - name: pkg.Name, - defs: pkg.TypesInfo.Defs, - files: make([]*File, len(pkg.Syntax)), - } - - for i, file := range pkg.Syntax { - g.pkg.files[i] = &File{ - file: file, - pkg: g.pkg, - trimPrefix: g.trimPrefix, - lineComment: g.lineComment, - } - } -} - -// generate produces the String method for the named type. -func (g *Generator) generate(typeName string) { - values := make([]Value, 0, 100) - for _, file := range g.pkg.files { - // Set the state for this run of the walker. - file.typeName = typeName - file.values = nil - if file.file != nil { - ast.Inspect(file.file, file.genDecl) - values = append(values, file.values...) - } - } - - if len(values) == 0 { - log.Fatalf("no values defined for type %s", typeName) - } - // Generate code that will fail if the constants change value. - g.Printf("func _() {\n") - g.Printf("\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n") - g.Printf("\t// Re-run the stringer command to generate them again.\n") - g.Printf("\tvar x [1]struct{}\n") - for _, v := range values { - g.Printf("\t_ = x[%s - %s]\n", v.originalName, v.str) - } - g.Printf("}\n") - runs := splitIntoRuns(values) - // The decision of which pattern to use depends on the number of - // runs in the numbers. If there's only one, it's easy. For more than - // one, there's a tradeoff between complexity and size of the data - // and code vs. the simplicity of a map. A map takes more space, - // but so does the code. The decision here (crossover at 10) is - // arbitrary, but considers that for large numbers of runs the cost - // of the linear scan in the switch might become important, and - // rather than use yet another algorithm such as binary search, - // we punt and use a map. In any case, the likelihood of a map - // being necessary for any realistic example other than bitmasks - // is very low. And bitmasks probably deserve their own analysis, - // to be done some other day. - switch { - case len(runs) == 1: - g.buildOneRun(runs, typeName) - case len(runs) <= 10: - g.buildMultipleRuns(runs, typeName) - default: - g.buildMap(runs, typeName) - } -} - -// splitIntoRuns breaks the values into runs of contiguous sequences. -// For example, given 1,2,3,5,6,7 it returns {1,2,3},{5,6,7}. -// The input slice is known to be non-empty. -func splitIntoRuns(values []Value) [][]Value { - // We use stable sort so the lexically first name is chosen for equal elements. - sort.Stable(byValue(values)) - // Remove duplicates. Stable sort has put the one we want to print first, - // so use that one. The String method won't care about which named constant - // was the argument, so the first name for the given value is the only one to keep. - // We need to do this because identical values would cause the switch or map - // to fail to compile. - j := 1 - for i := 1; i < len(values); i++ { - if values[i].value != values[i-1].value { - values[j] = values[i] - j++ - } - } - values = values[:j] - runs := make([][]Value, 0, 10) - for len(values) > 0 { - // One contiguous sequence per outer loop. - i := 1 - for i < len(values) && values[i].value == values[i-1].value+1 { - i++ - } - runs = append(runs, values[:i]) - values = values[i:] - } - return runs -} - -// format returns the gofmt-ed contents of the Generator's buffer. -func (g *Generator) format() []byte { - src, err := format.Source(g.buf.Bytes()) - if err != nil { - // Should never happen, but can arise when developing this code. - // The user can compile the output to see the error. - log.Printf("warning: internal error: invalid Go generated: %s", err) - log.Printf("warning: compile the package to analyze the error") - return g.buf.Bytes() - } - return src -} - -// Value represents a declared constant. -type Value struct { - originalName string // The name of the constant. - name string // The name with trimmed prefix. - // The value is stored as a bit pattern alone. The boolean tells us - // whether to interpret it as an int64 or a uint64; the only place - // this matters is when sorting. - // Much of the time the str field is all we need; it is printed - // by Value.String. - value uint64 // Will be converted to int64 when needed. - signed bool // Whether the constant is a signed type. - str string // The string representation given by the "go/constant" package. -} - -func (v *Value) String() string { - return v.str -} - -// byValue lets us sort the constants into increasing order. -// We take care in the Less method to sort in signed or unsigned order, -// as appropriate. -type byValue []Value - -func (b byValue) Len() int { return len(b) } -func (b byValue) Swap(i, j int) { b[i], b[j] = b[j], b[i] } -func (b byValue) Less(i, j int) bool { - if b[i].signed { - return int64(b[i].value) < int64(b[j].value) - } - return b[i].value < b[j].value -} - -// genDecl processes one declaration clause. -func (f *File) genDecl(node ast.Node) bool { - decl, ok := node.(*ast.GenDecl) - if !ok || decl.Tok != token.CONST { - // We only care about const declarations. - return true - } - // The name of the type of the constants we are declaring. - // Can change if this is a multi-element declaration. - typ := "" - // Loop over the elements of the declaration. Each element is a ValueSpec: - // a list of names possibly followed by a type, possibly followed by values. - // If the type and value are both missing, we carry down the type (and value, - // but the "go/types" package takes care of that). - for _, spec := range decl.Specs { - vspec := spec.(*ast.ValueSpec) // Guaranteed to succeed as this is CONST. - if vspec.Type == nil && len(vspec.Values) > 0 { - // "X = 1". With no type but a value. If the constant is untyped, - // skip this vspec and reset the remembered type. - typ = "" - - // If this is a simple type conversion, remember the type. - // We don't mind if this is actually a call; a qualified call won't - // be matched (that will be SelectorExpr, not Ident), and only unusual - // situations will result in a function call that appears to be - // a type conversion. - ce, ok := vspec.Values[0].(*ast.CallExpr) - if !ok { - continue - } - id, ok := ce.Fun.(*ast.Ident) - if !ok { - continue - } - typ = id.Name - } - if vspec.Type != nil { - // "X T". We have a type. Remember it. - ident, ok := vspec.Type.(*ast.Ident) - if !ok { - continue - } - typ = ident.Name - } - if typ != f.typeName { - // This is not the type we're looking for. - continue - } - // We now have a list of names (from one line of source code) all being - // declared with the desired type. - // Grab their names and actual values and store them in f.values. - for _, name := range vspec.Names { - if name.Name == "_" { - continue - } - // This dance lets the type checker find the values for us. It's a - // bit tricky: look up the object declared by the name, find its - // types.Const, and extract its value. - obj, ok := f.pkg.defs[name] - if !ok { - log.Fatalf("no value for constant %s", name) - } - info := obj.Type().Underlying().(*types.Basic).Info() - if info&types.IsInteger == 0 { - log.Fatalf("can't handle non-integer constant type %s", typ) - } - value := obj.(*types.Const).Val() // Guaranteed to succeed as this is CONST. - if value.Kind() != constant.Int { - log.Fatalf("can't happen: constant is not an integer %s", name) - } - i64, isInt := constant.Int64Val(value) - u64, isUint := constant.Uint64Val(value) - if !isInt && !isUint { - log.Fatalf("internal error: value of %s is not an integer: %s", name, value.String()) - } - if !isInt { - u64 = uint64(i64) - } - v := Value{ - originalName: name.Name, - value: u64, - signed: info&types.IsUnsigned == 0, - str: value.String(), - } - if c := vspec.Comment; f.lineComment && c != nil && len(c.List) == 1 { - v.name = strings.TrimSpace(c.Text()) - } else { - v.name = strings.TrimPrefix(v.originalName, f.trimPrefix) - } - f.values = append(f.values, v) - } - } - return false -} - -// Helpers - -// usize returns the number of bits of the smallest unsigned integer -// type that will hold n. Used to create the smallest possible slice of -// integers to use as indexes into the concatenated strings. -func usize(n int) int { - switch { - case n < 1<<8: - return 8 - case n < 1<<16: - return 16 - default: - // 2^32 is enough constants for anyone. - return 32 - } -} - -// declareIndexAndNameVars declares the index slices and concatenated names -// strings representing the runs of values. -func (g *Generator) declareIndexAndNameVars(runs [][]Value, typeName string) { - var indexes, names []string - for i, run := range runs { - index, name := g.createIndexAndNameDecl(run, typeName, fmt.Sprintf("_%d", i)) - if len(run) != 1 { - indexes = append(indexes, index) - } - names = append(names, name) - } - g.Printf("const (\n") - for _, name := range names { - g.Printf("\t%s\n", name) - } - g.Printf(")\n\n") - - if len(indexes) > 0 { - g.Printf("var (") - for _, index := range indexes { - g.Printf("\t%s\n", index) - } - g.Printf(")\n\n") - } -} - -// declareIndexAndNameVar is the single-run version of declareIndexAndNameVars -func (g *Generator) declareIndexAndNameVar(run []Value, typeName string) { - index, name := g.createIndexAndNameDecl(run, typeName, "") - g.Printf("const %s\n", name) - g.Printf("var %s\n", index) -} - -// createIndexAndNameDecl returns the pair of declarations for the run. The caller will add "const" and "var". -func (g *Generator) createIndexAndNameDecl(run []Value, typeName string, suffix string) (string, string) { - b := new(bytes.Buffer) - indexes := make([]int, len(run)) - for i := range run { - b.WriteString(run[i].name) - indexes[i] = b.Len() - } - nameConst := fmt.Sprintf("_%s_name%s = %q", typeName, suffix, b.String()) - nameLen := b.Len() - b.Reset() - fmt.Fprintf(b, "_%s_index%s = [...]uint%d{0, ", typeName, suffix, usize(nameLen)) - for i, v := range indexes { - if i > 0 { - fmt.Fprintf(b, ", ") - } - fmt.Fprintf(b, "%d", v) - } - fmt.Fprintf(b, "}") - return b.String(), nameConst -} - -// declareNameVars declares the concatenated names string representing all the values in the runs. -func (g *Generator) declareNameVars(runs [][]Value, typeName string, suffix string) { - g.Printf("const _%s_name%s = \"", typeName, suffix) - for _, run := range runs { - for i := range run { - g.Printf("%s", run[i].name) - } - } - g.Printf("\"\n") -} - -// buildOneRun generates the variables and String method for a single run of contiguous values. -func (g *Generator) buildOneRun(runs [][]Value, typeName string) { - values := runs[0] - g.Printf("\n") - g.declareIndexAndNameVar(values, typeName) - // The generated code is simple enough to write as a Printf format. - lessThanZero := "" - if values[0].signed { - lessThanZero = "i < 0 || " - } - if values[0].value == 0 { // Signed or unsigned, 0 is still 0. - g.Printf(stringOneRun, typeName, usize(len(values)), lessThanZero) - } else { - g.Printf(stringOneRunWithOffset, typeName, values[0].String(), usize(len(values)), lessThanZero) - } -} - -// Arguments to format are: -// -// [1]: type name -// [2]: size of index element (8 for uint8 etc.) -// [3]: less than zero check (for signed types) -const stringOneRun = `func (i %[1]s) String() string { - if %[3]si >= %[1]s(len(_%[1]s_index)-1) { - return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _%[1]s_name[_%[1]s_index[i]:_%[1]s_index[i+1]] -} -` - -// Arguments to format are: -// [1]: type name -// [2]: lowest defined value for type, as a string -// [3]: size of index element (8 for uint8 etc.) -// [4]: less than zero check (for signed types) -/* - */ -const stringOneRunWithOffset = `func (i %[1]s) String() string { - i -= %[2]s - if %[4]si >= %[1]s(len(_%[1]s_index)-1) { - return "%[1]s(" + strconv.FormatInt(int64(i + %[2]s), 10) + ")" - } - return _%[1]s_name[_%[1]s_index[i] : _%[1]s_index[i+1]] -} -` - -// buildMultipleRuns generates the variables and String method for multiple runs of contiguous values. -// For this pattern, a single Printf format won't do. -func (g *Generator) buildMultipleRuns(runs [][]Value, typeName string) { - g.Printf("\n") - g.declareIndexAndNameVars(runs, typeName) - g.Printf("func (i %s) String() string {\n", typeName) - g.Printf("\tswitch {\n") - for i, values := range runs { - if len(values) == 1 { - g.Printf("\tcase i == %s:\n", &values[0]) - g.Printf("\t\treturn _%s_name_%d\n", typeName, i) - continue - } - if values[0].value == 0 && !values[0].signed { - // For an unsigned lower bound of 0, "0 <= i" would be redundant. - g.Printf("\tcase i <= %s:\n", &values[len(values)-1]) - } else { - g.Printf("\tcase %s <= i && i <= %s:\n", &values[0], &values[len(values)-1]) - } - if values[0].value != 0 { - g.Printf("\t\ti -= %s\n", &values[0]) - } - g.Printf("\t\treturn _%s_name_%d[_%s_index_%d[i]:_%s_index_%d[i+1]]\n", - typeName, i, typeName, i, typeName, i) - } - g.Printf("\tdefault:\n") - g.Printf("\t\treturn \"%s(\" + strconv.FormatInt(int64(i), 10) + \")\"\n", typeName) - g.Printf("\t}\n") - g.Printf("}\n") -} - -// buildMap handles the case where the space is so sparse a map is a reasonable fallback. -// It's a rare situation but has simple code. -func (g *Generator) buildMap(runs [][]Value, typeName string) { - g.Printf("\n") - g.declareNameVars(runs, typeName, "") - g.Printf("\nvar _%s_map = map[%s]string{\n", typeName, typeName) - n := 0 - for _, values := range runs { - for _, value := range values { - g.Printf("\t%s: _%s_name[%d:%d],\n", &value, typeName, n, n+len(value.name)) - n += len(value.name) - } - } - g.Printf("}\n\n") - g.Printf(stringMap, typeName) -} - -// Argument to format is the type name. -const stringMap = `func (i %[1]s) String() string { - if str, ok := _%[1]s_map[i]; ok { - return str - } - return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")" -} -` diff --git a/vendor/google.golang.org/appengine/LICENSE b/vendor/google.golang.org/appengine/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/vendor/google.golang.org/appengine/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/google.golang.org/appengine/internal/api.go b/vendor/google.golang.org/appengine/internal/api.go deleted file mode 100644 index 0569f5dd43..0000000000 --- a/vendor/google.golang.org/appengine/internal/api.go +++ /dev/null @@ -1,653 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -//go:build !appengine -// +build !appengine - -package internal - -import ( - "bytes" - "context" - "errors" - "fmt" - "io/ioutil" - "log" - "net" - "net/http" - "net/url" - "os" - "runtime" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/golang/protobuf/proto" - - basepb "google.golang.org/appengine/internal/base" - logpb "google.golang.org/appengine/internal/log" - remotepb "google.golang.org/appengine/internal/remote_api" -) - -const ( - apiPath = "/rpc_http" -) - -var ( - // Incoming headers. - ticketHeader = http.CanonicalHeaderKey("X-AppEngine-API-Ticket") - dapperHeader = http.CanonicalHeaderKey("X-Google-DapperTraceInfo") - traceHeader = http.CanonicalHeaderKey("X-Cloud-Trace-Context") - curNamespaceHeader = http.CanonicalHeaderKey("X-AppEngine-Current-Namespace") - userIPHeader = http.CanonicalHeaderKey("X-AppEngine-User-IP") - remoteAddrHeader = http.CanonicalHeaderKey("X-AppEngine-Remote-Addr") - devRequestIdHeader = http.CanonicalHeaderKey("X-Appengine-Dev-Request-Id") - - // Outgoing headers. - apiEndpointHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Endpoint") - apiEndpointHeaderValue = []string{"app-engine-apis"} - apiMethodHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Method") - apiMethodHeaderValue = []string{"/VMRemoteAPI.CallRemoteAPI"} - apiDeadlineHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Deadline") - apiContentType = http.CanonicalHeaderKey("Content-Type") - apiContentTypeValue = []string{"application/octet-stream"} - logFlushHeader = http.CanonicalHeaderKey("X-AppEngine-Log-Flush-Count") - - apiHTTPClient = &http.Client{ - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - Dial: limitDial, - MaxIdleConns: 1000, - MaxIdleConnsPerHost: 10000, - IdleConnTimeout: 90 * time.Second, - }, - } -) - -func apiURL(ctx context.Context) *url.URL { - host, port := "appengine.googleapis.internal", "10001" - if h := os.Getenv("API_HOST"); h != "" { - host = h - } - if hostOverride := ctx.Value(apiHostOverrideKey); hostOverride != nil { - host = hostOverride.(string) - } - if p := os.Getenv("API_PORT"); p != "" { - port = p - } - if portOverride := ctx.Value(apiPortOverrideKey); portOverride != nil { - port = portOverride.(string) - } - return &url.URL{ - Scheme: "http", - Host: host + ":" + port, - Path: apiPath, - } -} - -// Middleware wraps an http handler so that it can make GAE API calls -func Middleware(next http.Handler) http.Handler { - return handleHTTPMiddleware(executeRequestSafelyMiddleware(next)) -} - -func handleHTTPMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - c := &aeContext{ - req: r, - outHeader: w.Header(), - } - r = r.WithContext(withContext(r.Context(), c)) - c.req = r - - stopFlushing := make(chan int) - - // Patch up RemoteAddr so it looks reasonable. - if addr := r.Header.Get(userIPHeader); addr != "" { - r.RemoteAddr = addr - } else if addr = r.Header.Get(remoteAddrHeader); addr != "" { - r.RemoteAddr = addr - } else { - // Should not normally reach here, but pick a sensible default anyway. - r.RemoteAddr = "127.0.0.1" - } - // The address in the headers will most likely be of these forms: - // 123.123.123.123 - // 2001:db8::1 - // net/http.Request.RemoteAddr is specified to be in "IP:port" form. - if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil { - // Assume the remote address is only a host; add a default port. - r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80") - } - - if logToLogservice() { - // Start goroutine responsible for flushing app logs. - // This is done after adding c to ctx.m (and stopped before removing it) - // because flushing logs requires making an API call. - go c.logFlusher(stopFlushing) - } - - next.ServeHTTP(c, r) - c.outHeader = nil // make sure header changes aren't respected any more - - flushed := make(chan struct{}) - if logToLogservice() { - stopFlushing <- 1 // any logging beyond this point will be dropped - - // Flush any pending logs asynchronously. - c.pendingLogs.Lock() - flushes := c.pendingLogs.flushes - if len(c.pendingLogs.lines) > 0 { - flushes++ - } - c.pendingLogs.Unlock() - go func() { - defer close(flushed) - // Force a log flush, because with very short requests we - // may not ever flush logs. - c.flushLog(true) - }() - w.Header().Set(logFlushHeader, strconv.Itoa(flushes)) - } - - // Avoid nil Write call if c.Write is never called. - if c.outCode != 0 { - w.WriteHeader(c.outCode) - } - if c.outBody != nil { - w.Write(c.outBody) - } - if logToLogservice() { - // Wait for the last flush to complete before returning, - // otherwise the security ticket will not be valid. - <-flushed - } - }) -} - -func executeRequestSafelyMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - defer func() { - if x := recover(); x != nil { - c := w.(*aeContext) - logf(c, 4, "%s", renderPanic(x)) // 4 == critical - c.outCode = 500 - } - }() - - next.ServeHTTP(w, r) - }) -} - -func renderPanic(x interface{}) string { - buf := make([]byte, 16<<10) // 16 KB should be plenty - buf = buf[:runtime.Stack(buf, false)] - - // Remove the first few stack frames: - // this func - // the recover closure in the caller - // That will root the stack trace at the site of the panic. - const ( - skipStart = "internal.renderPanic" - skipFrames = 2 - ) - start := bytes.Index(buf, []byte(skipStart)) - p := start - for i := 0; i < skipFrames*2 && p+1 < len(buf); i++ { - p = bytes.IndexByte(buf[p+1:], '\n') + p + 1 - if p < 0 { - break - } - } - if p >= 0 { - // buf[start:p+1] is the block to remove. - // Copy buf[p+1:] over buf[start:] and shrink buf. - copy(buf[start:], buf[p+1:]) - buf = buf[:len(buf)-(p+1-start)] - } - - // Add panic heading. - head := fmt.Sprintf("panic: %v\n\n", x) - if len(head) > len(buf) { - // Extremely unlikely to happen. - return head - } - copy(buf[len(head):], buf) - copy(buf, head) - - return string(buf) -} - -// aeContext represents the aeContext of an in-flight HTTP request. -// It implements the appengine.Context and http.ResponseWriter interfaces. -type aeContext struct { - req *http.Request - - outCode int - outHeader http.Header - outBody []byte - - pendingLogs struct { - sync.Mutex - lines []*logpb.UserAppLogLine - flushes int - } -} - -var contextKey = "holds a *context" - -// jointContext joins two contexts in a superficial way. -// It takes values and timeouts from a base context, and only values from another context. -type jointContext struct { - base context.Context - valuesOnly context.Context -} - -func (c jointContext) Deadline() (time.Time, bool) { - return c.base.Deadline() -} - -func (c jointContext) Done() <-chan struct{} { - return c.base.Done() -} - -func (c jointContext) Err() error { - return c.base.Err() -} - -func (c jointContext) Value(key interface{}) interface{} { - if val := c.base.Value(key); val != nil { - return val - } - return c.valuesOnly.Value(key) -} - -// fromContext returns the App Engine context or nil if ctx is not -// derived from an App Engine context. -func fromContext(ctx context.Context) *aeContext { - c, _ := ctx.Value(&contextKey).(*aeContext) - return c -} - -func withContext(parent context.Context, c *aeContext) context.Context { - ctx := context.WithValue(parent, &contextKey, c) - if ns := c.req.Header.Get(curNamespaceHeader); ns != "" { - ctx = withNamespace(ctx, ns) - } - return ctx -} - -func toContext(c *aeContext) context.Context { - return withContext(context.Background(), c) -} - -func IncomingHeaders(ctx context.Context) http.Header { - if c := fromContext(ctx); c != nil { - return c.req.Header - } - return nil -} - -func ReqContext(req *http.Request) context.Context { - return req.Context() -} - -func WithContext(parent context.Context, req *http.Request) context.Context { - return jointContext{ - base: parent, - valuesOnly: req.Context(), - } -} - -// RegisterTestRequest registers the HTTP request req for testing, such that -// any API calls are sent to the provided URL. -// It should only be used by aetest package. -func RegisterTestRequest(req *http.Request, apiURL *url.URL, appID string) *http.Request { - ctx := req.Context() - ctx = withAPIHostOverride(ctx, apiURL.Hostname()) - ctx = withAPIPortOverride(ctx, apiURL.Port()) - ctx = WithAppIDOverride(ctx, appID) - - // use the unregistered request as a placeholder so that withContext can read the headers - c := &aeContext{req: req} - c.req = req.WithContext(withContext(ctx, c)) - return c.req -} - -var errTimeout = &CallError{ - Detail: "Deadline exceeded", - Code: int32(remotepb.RpcError_CANCELLED), - Timeout: true, -} - -func (c *aeContext) Header() http.Header { return c.outHeader } - -// Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status -// codes do not permit a response body (nor response entity headers such as -// Content-Length, Content-Type, etc). -func bodyAllowedForStatus(status int) bool { - switch { - case status >= 100 && status <= 199: - return false - case status == 204: - return false - case status == 304: - return false - } - return true -} - -func (c *aeContext) Write(b []byte) (int, error) { - if c.outCode == 0 { - c.WriteHeader(http.StatusOK) - } - if len(b) > 0 && !bodyAllowedForStatus(c.outCode) { - return 0, http.ErrBodyNotAllowed - } - c.outBody = append(c.outBody, b...) - return len(b), nil -} - -func (c *aeContext) WriteHeader(code int) { - if c.outCode != 0 { - logf(c, 3, "WriteHeader called multiple times on request.") // error level - return - } - c.outCode = code -} - -func post(ctx context.Context, body []byte, timeout time.Duration) (b []byte, err error) { - apiURL := apiURL(ctx) - hreq := &http.Request{ - Method: "POST", - URL: apiURL, - Header: http.Header{ - apiEndpointHeader: apiEndpointHeaderValue, - apiMethodHeader: apiMethodHeaderValue, - apiContentType: apiContentTypeValue, - apiDeadlineHeader: []string{strconv.FormatFloat(timeout.Seconds(), 'f', -1, 64)}, - }, - Body: ioutil.NopCloser(bytes.NewReader(body)), - ContentLength: int64(len(body)), - Host: apiURL.Host, - } - c := fromContext(ctx) - if c != nil { - if info := c.req.Header.Get(dapperHeader); info != "" { - hreq.Header.Set(dapperHeader, info) - } - if info := c.req.Header.Get(traceHeader); info != "" { - hreq.Header.Set(traceHeader, info) - } - } - - tr := apiHTTPClient.Transport.(*http.Transport) - - var timedOut int32 // atomic; set to 1 if timed out - t := time.AfterFunc(timeout, func() { - atomic.StoreInt32(&timedOut, 1) - tr.CancelRequest(hreq) - }) - defer t.Stop() - defer func() { - // Check if timeout was exceeded. - if atomic.LoadInt32(&timedOut) != 0 { - err = errTimeout - } - }() - - hresp, err := apiHTTPClient.Do(hreq) - if err != nil { - return nil, &CallError{ - Detail: fmt.Sprintf("service bridge HTTP failed: %v", err), - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - defer hresp.Body.Close() - hrespBody, err := ioutil.ReadAll(hresp.Body) - if hresp.StatusCode != 200 { - return nil, &CallError{ - Detail: fmt.Sprintf("service bridge returned HTTP %d (%q)", hresp.StatusCode, hrespBody), - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - if err != nil { - return nil, &CallError{ - Detail: fmt.Sprintf("service bridge response bad: %v", err), - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - return hrespBody, nil -} - -func Call(ctx context.Context, service, method string, in, out proto.Message) error { - if ns := NamespaceFromContext(ctx); ns != "" { - if fn, ok := NamespaceMods[service]; ok { - fn(in, ns) - } - } - - if f, ctx, ok := callOverrideFromContext(ctx); ok { - return f(ctx, service, method, in, out) - } - - // Handle already-done contexts quickly. - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - - c := fromContext(ctx) - - // Apply transaction modifications if we're in a transaction. - if t := transactionFromContext(ctx); t != nil { - if t.finished { - return errors.New("transaction aeContext has expired") - } - applyTransaction(in, &t.transaction) - } - - // Default RPC timeout is 60s. - timeout := 60 * time.Second - if deadline, ok := ctx.Deadline(); ok { - timeout = deadline.Sub(time.Now()) - } - - data, err := proto.Marshal(in) - if err != nil { - return err - } - - ticket := "" - if c != nil { - ticket = c.req.Header.Get(ticketHeader) - if dri := c.req.Header.Get(devRequestIdHeader); IsDevAppServer() && dri != "" { - ticket = dri - } - } - req := &remotepb.Request{ - ServiceName: &service, - Method: &method, - Request: data, - RequestId: &ticket, - } - hreqBody, err := proto.Marshal(req) - if err != nil { - return err - } - - hrespBody, err := post(ctx, hreqBody, timeout) - if err != nil { - return err - } - - res := &remotepb.Response{} - if err := proto.Unmarshal(hrespBody, res); err != nil { - return err - } - if res.RpcError != nil { - ce := &CallError{ - Detail: res.RpcError.GetDetail(), - Code: *res.RpcError.Code, - } - switch remotepb.RpcError_ErrorCode(ce.Code) { - case remotepb.RpcError_CANCELLED, remotepb.RpcError_DEADLINE_EXCEEDED: - ce.Timeout = true - } - return ce - } - if res.ApplicationError != nil { - return &APIError{ - Service: *req.ServiceName, - Detail: res.ApplicationError.GetDetail(), - Code: *res.ApplicationError.Code, - } - } - if res.Exception != nil || res.JavaException != nil { - // This shouldn't happen, but let's be defensive. - return &CallError{ - Detail: "service bridge returned exception", - Code: int32(remotepb.RpcError_UNKNOWN), - } - } - return proto.Unmarshal(res.Response, out) -} - -func (c *aeContext) Request() *http.Request { - return c.req -} - -func (c *aeContext) addLogLine(ll *logpb.UserAppLogLine) { - // Truncate long log lines. - // TODO(dsymonds): Check if this is still necessary. - const lim = 8 << 10 - if len(*ll.Message) > lim { - suffix := fmt.Sprintf("...(length %d)", len(*ll.Message)) - ll.Message = proto.String((*ll.Message)[:lim-len(suffix)] + suffix) - } - - c.pendingLogs.Lock() - c.pendingLogs.lines = append(c.pendingLogs.lines, ll) - c.pendingLogs.Unlock() -} - -var logLevelName = map[int64]string{ - 0: "DEBUG", - 1: "INFO", - 2: "WARNING", - 3: "ERROR", - 4: "CRITICAL", -} - -func logf(c *aeContext, level int64, format string, args ...interface{}) { - if c == nil { - panic("not an App Engine aeContext") - } - s := fmt.Sprintf(format, args...) - s = strings.TrimRight(s, "\n") // Remove any trailing newline characters. - if logToLogservice() { - c.addLogLine(&logpb.UserAppLogLine{ - TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3), - Level: &level, - Message: &s, - }) - } - // Log to stdout if not deployed - if !IsSecondGen() { - log.Print(logLevelName[level] + ": " + s) - } -} - -// flushLog attempts to flush any pending logs to the appserver. -// It should not be called concurrently. -func (c *aeContext) flushLog(force bool) (flushed bool) { - c.pendingLogs.Lock() - // Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious. - n, rem := 0, 30<<20 - for ; n < len(c.pendingLogs.lines); n++ { - ll := c.pendingLogs.lines[n] - // Each log line will require about 3 bytes of overhead. - nb := proto.Size(ll) + 3 - if nb > rem { - break - } - rem -= nb - } - lines := c.pendingLogs.lines[:n] - c.pendingLogs.lines = c.pendingLogs.lines[n:] - c.pendingLogs.Unlock() - - if len(lines) == 0 && !force { - // Nothing to flush. - return false - } - - rescueLogs := false - defer func() { - if rescueLogs { - c.pendingLogs.Lock() - c.pendingLogs.lines = append(lines, c.pendingLogs.lines...) - c.pendingLogs.Unlock() - } - }() - - buf, err := proto.Marshal(&logpb.UserAppLogGroup{ - LogLine: lines, - }) - if err != nil { - log.Printf("internal.flushLog: marshaling UserAppLogGroup: %v", err) - rescueLogs = true - return false - } - - req := &logpb.FlushRequest{ - Logs: buf, - } - res := &basepb.VoidProto{} - c.pendingLogs.Lock() - c.pendingLogs.flushes++ - c.pendingLogs.Unlock() - if err := Call(toContext(c), "logservice", "Flush", req, res); err != nil { - log.Printf("internal.flushLog: Flush RPC: %v", err) - rescueLogs = true - return false - } - return true -} - -const ( - // Log flushing parameters. - flushInterval = 1 * time.Second - forceFlushInterval = 60 * time.Second -) - -func (c *aeContext) logFlusher(stop <-chan int) { - lastFlush := time.Now() - tick := time.NewTicker(flushInterval) - for { - select { - case <-stop: - // Request finished. - tick.Stop() - return - case <-tick.C: - force := time.Now().Sub(lastFlush) > forceFlushInterval - if c.flushLog(force) { - lastFlush = time.Now() - } - } - } -} - -func ContextForTesting(req *http.Request) context.Context { - return toContext(&aeContext{req: req}) -} - -func logToLogservice() bool { - // TODO: replace logservice with json structured logs to $LOG_DIR/app.log.json - // where $LOG_DIR is /var/log in prod and some tmpdir in dev - return os.Getenv("LOG_TO_LOGSERVICE") != "0" -} diff --git a/vendor/google.golang.org/appengine/internal/api_classic.go b/vendor/google.golang.org/appengine/internal/api_classic.go deleted file mode 100644 index 87c33c798e..0000000000 --- a/vendor/google.golang.org/appengine/internal/api_classic.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2015 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -//go:build appengine -// +build appengine - -package internal - -import ( - "context" - "errors" - "fmt" - "net/http" - "time" - - "appengine" - "appengine_internal" - basepb "appengine_internal/base" - - "github.com/golang/protobuf/proto" -) - -var contextKey = "holds an appengine.Context" - -// fromContext returns the App Engine context or nil if ctx is not -// derived from an App Engine context. -func fromContext(ctx context.Context) appengine.Context { - c, _ := ctx.Value(&contextKey).(appengine.Context) - return c -} - -// This is only for classic App Engine adapters. -func ClassicContextFromContext(ctx context.Context) (appengine.Context, error) { - c := fromContext(ctx) - if c == nil { - return nil, errNotAppEngineContext - } - return c, nil -} - -func withContext(parent context.Context, c appengine.Context) context.Context { - ctx := context.WithValue(parent, &contextKey, c) - - s := &basepb.StringProto{} - c.Call("__go__", "GetNamespace", &basepb.VoidProto{}, s, nil) - if ns := s.GetValue(); ns != "" { - ctx = NamespacedContext(ctx, ns) - } - - return ctx -} - -func IncomingHeaders(ctx context.Context) http.Header { - if c := fromContext(ctx); c != nil { - if req, ok := c.Request().(*http.Request); ok { - return req.Header - } - } - return nil -} - -func ReqContext(req *http.Request) context.Context { - return WithContext(context.Background(), req) -} - -func WithContext(parent context.Context, req *http.Request) context.Context { - c := appengine.NewContext(req) - return withContext(parent, c) -} - -type testingContext struct { - appengine.Context - - req *http.Request -} - -func (t *testingContext) FullyQualifiedAppID() string { return "dev~testcontext" } -func (t *testingContext) Call(service, method string, _, _ appengine_internal.ProtoMessage, _ *appengine_internal.CallOptions) error { - if service == "__go__" && method == "GetNamespace" { - return nil - } - return fmt.Errorf("testingContext: unsupported Call") -} -func (t *testingContext) Request() interface{} { return t.req } - -func ContextForTesting(req *http.Request) context.Context { - return withContext(context.Background(), &testingContext{req: req}) -} - -func Call(ctx context.Context, service, method string, in, out proto.Message) error { - if ns := NamespaceFromContext(ctx); ns != "" { - if fn, ok := NamespaceMods[service]; ok { - fn(in, ns) - } - } - - if f, ctx, ok := callOverrideFromContext(ctx); ok { - return f(ctx, service, method, in, out) - } - - // Handle already-done contexts quickly. - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - - c := fromContext(ctx) - if c == nil { - // Give a good error message rather than a panic lower down. - return errNotAppEngineContext - } - - // Apply transaction modifications if we're in a transaction. - if t := transactionFromContext(ctx); t != nil { - if t.finished { - return errors.New("transaction context has expired") - } - applyTransaction(in, &t.transaction) - } - - var opts *appengine_internal.CallOptions - if d, ok := ctx.Deadline(); ok { - opts = &appengine_internal.CallOptions{ - Timeout: d.Sub(time.Now()), - } - } - - err := c.Call(service, method, in, out, opts) - switch v := err.(type) { - case *appengine_internal.APIError: - return &APIError{ - Service: v.Service, - Detail: v.Detail, - Code: v.Code, - } - case *appengine_internal.CallError: - return &CallError{ - Detail: v.Detail, - Code: v.Code, - Timeout: v.Timeout, - } - } - return err -} - -func Middleware(next http.Handler) http.Handler { - panic("Middleware called; this should be impossible") -} - -func logf(c appengine.Context, level int64, format string, args ...interface{}) { - var fn func(format string, args ...interface{}) - switch level { - case 0: - fn = c.Debugf - case 1: - fn = c.Infof - case 2: - fn = c.Warningf - case 3: - fn = c.Errorf - case 4: - fn = c.Criticalf - default: - // This shouldn't happen. - fn = c.Criticalf - } - fn(format, args...) -} diff --git a/vendor/google.golang.org/appengine/internal/api_common.go b/vendor/google.golang.org/appengine/internal/api_common.go deleted file mode 100644 index 5b95c13d92..0000000000 --- a/vendor/google.golang.org/appengine/internal/api_common.go +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2015 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -package internal - -import ( - "context" - "errors" - "os" - - "github.com/golang/protobuf/proto" -) - -type ctxKey string - -func (c ctxKey) String() string { - return "appengine context key: " + string(c) -} - -var errNotAppEngineContext = errors.New("not an App Engine context") - -type CallOverrideFunc func(ctx context.Context, service, method string, in, out proto.Message) error - -var callOverrideKey = "holds []CallOverrideFunc" - -func WithCallOverride(ctx context.Context, f CallOverrideFunc) context.Context { - // We avoid appending to any existing call override - // so we don't risk overwriting a popped stack below. - var cofs []CallOverrideFunc - if uf, ok := ctx.Value(&callOverrideKey).([]CallOverrideFunc); ok { - cofs = append(cofs, uf...) - } - cofs = append(cofs, f) - return context.WithValue(ctx, &callOverrideKey, cofs) -} - -func callOverrideFromContext(ctx context.Context) (CallOverrideFunc, context.Context, bool) { - cofs, _ := ctx.Value(&callOverrideKey).([]CallOverrideFunc) - if len(cofs) == 0 { - return nil, nil, false - } - // We found a list of overrides; grab the last, and reconstitute a - // context that will hide it. - f := cofs[len(cofs)-1] - ctx = context.WithValue(ctx, &callOverrideKey, cofs[:len(cofs)-1]) - return f, ctx, true -} - -type logOverrideFunc func(level int64, format string, args ...interface{}) - -var logOverrideKey = "holds a logOverrideFunc" - -func WithLogOverride(ctx context.Context, f logOverrideFunc) context.Context { - return context.WithValue(ctx, &logOverrideKey, f) -} - -var appIDOverrideKey = "holds a string, being the full app ID" - -func WithAppIDOverride(ctx context.Context, appID string) context.Context { - return context.WithValue(ctx, &appIDOverrideKey, appID) -} - -var apiHostOverrideKey = ctxKey("holds a string, being the alternate API_HOST") - -func withAPIHostOverride(ctx context.Context, apiHost string) context.Context { - return context.WithValue(ctx, apiHostOverrideKey, apiHost) -} - -var apiPortOverrideKey = ctxKey("holds a string, being the alternate API_PORT") - -func withAPIPortOverride(ctx context.Context, apiPort string) context.Context { - return context.WithValue(ctx, apiPortOverrideKey, apiPort) -} - -var namespaceKey = "holds the namespace string" - -func withNamespace(ctx context.Context, ns string) context.Context { - return context.WithValue(ctx, &namespaceKey, ns) -} - -func NamespaceFromContext(ctx context.Context) string { - // If there's no namespace, return the empty string. - ns, _ := ctx.Value(&namespaceKey).(string) - return ns -} - -// FullyQualifiedAppID returns the fully-qualified application ID. -// This may contain a partition prefix (e.g. "s~" for High Replication apps), -// or a domain prefix (e.g. "example.com:"). -func FullyQualifiedAppID(ctx context.Context) string { - if id, ok := ctx.Value(&appIDOverrideKey).(string); ok { - return id - } - return fullyQualifiedAppID(ctx) -} - -func Logf(ctx context.Context, level int64, format string, args ...interface{}) { - if f, ok := ctx.Value(&logOverrideKey).(logOverrideFunc); ok { - f(level, format, args...) - return - } - c := fromContext(ctx) - if c == nil { - panic(errNotAppEngineContext) - } - logf(c, level, format, args...) -} - -// NamespacedContext wraps a Context to support namespaces. -func NamespacedContext(ctx context.Context, namespace string) context.Context { - return withNamespace(ctx, namespace) -} - -// SetTestEnv sets the env variables for testing background ticket in Flex. -func SetTestEnv() func() { - var environ = []struct { - key, value string - }{ - {"GAE_LONG_APP_ID", "my-app-id"}, - {"GAE_MINOR_VERSION", "067924799508853122"}, - {"GAE_MODULE_INSTANCE", "0"}, - {"GAE_MODULE_NAME", "default"}, - {"GAE_MODULE_VERSION", "20150612t184001"}, - } - - for _, v := range environ { - old := os.Getenv(v.key) - os.Setenv(v.key, v.value) - v.value = old - } - return func() { // Restore old environment after the test completes. - for _, v := range environ { - if v.value == "" { - os.Unsetenv(v.key) - continue - } - os.Setenv(v.key, v.value) - } - } -} diff --git a/vendor/google.golang.org/appengine/internal/app_id.go b/vendor/google.golang.org/appengine/internal/app_id.go deleted file mode 100644 index 11df8c07b5..0000000000 --- a/vendor/google.golang.org/appengine/internal/app_id.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -package internal - -import ( - "strings" -) - -func parseFullAppID(appid string) (partition, domain, displayID string) { - if i := strings.Index(appid, "~"); i != -1 { - partition, appid = appid[:i], appid[i+1:] - } - if i := strings.Index(appid, ":"); i != -1 { - domain, appid = appid[:i], appid[i+1:] - } - return partition, domain, appid -} - -// appID returns "appid" or "domain.com:appid". -func appID(fullAppID string) string { - _, dom, dis := parseFullAppID(fullAppID) - if dom != "" { - return dom + ":" + dis - } - return dis -} diff --git a/vendor/google.golang.org/appengine/internal/base/api_base.pb.go b/vendor/google.golang.org/appengine/internal/base/api_base.pb.go deleted file mode 100644 index db4777e68e..0000000000 --- a/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +++ /dev/null @@ -1,308 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google.golang.org/appengine/internal/base/api_base.proto - -package base - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type StringProto struct { - Value *string `protobuf:"bytes,1,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *StringProto) Reset() { *m = StringProto{} } -func (m *StringProto) String() string { return proto.CompactTextString(m) } -func (*StringProto) ProtoMessage() {} -func (*StringProto) Descriptor() ([]byte, []int) { - return fileDescriptor_api_base_9d49f8792e0c1140, []int{0} -} -func (m *StringProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_StringProto.Unmarshal(m, b) -} -func (m *StringProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_StringProto.Marshal(b, m, deterministic) -} -func (dst *StringProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_StringProto.Merge(dst, src) -} -func (m *StringProto) XXX_Size() int { - return xxx_messageInfo_StringProto.Size(m) -} -func (m *StringProto) XXX_DiscardUnknown() { - xxx_messageInfo_StringProto.DiscardUnknown(m) -} - -var xxx_messageInfo_StringProto proto.InternalMessageInfo - -func (m *StringProto) GetValue() string { - if m != nil && m.Value != nil { - return *m.Value - } - return "" -} - -type Integer32Proto struct { - Value *int32 `protobuf:"varint,1,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Integer32Proto) Reset() { *m = Integer32Proto{} } -func (m *Integer32Proto) String() string { return proto.CompactTextString(m) } -func (*Integer32Proto) ProtoMessage() {} -func (*Integer32Proto) Descriptor() ([]byte, []int) { - return fileDescriptor_api_base_9d49f8792e0c1140, []int{1} -} -func (m *Integer32Proto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Integer32Proto.Unmarshal(m, b) -} -func (m *Integer32Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Integer32Proto.Marshal(b, m, deterministic) -} -func (dst *Integer32Proto) XXX_Merge(src proto.Message) { - xxx_messageInfo_Integer32Proto.Merge(dst, src) -} -func (m *Integer32Proto) XXX_Size() int { - return xxx_messageInfo_Integer32Proto.Size(m) -} -func (m *Integer32Proto) XXX_DiscardUnknown() { - xxx_messageInfo_Integer32Proto.DiscardUnknown(m) -} - -var xxx_messageInfo_Integer32Proto proto.InternalMessageInfo - -func (m *Integer32Proto) GetValue() int32 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -type Integer64Proto struct { - Value *int64 `protobuf:"varint,1,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Integer64Proto) Reset() { *m = Integer64Proto{} } -func (m *Integer64Proto) String() string { return proto.CompactTextString(m) } -func (*Integer64Proto) ProtoMessage() {} -func (*Integer64Proto) Descriptor() ([]byte, []int) { - return fileDescriptor_api_base_9d49f8792e0c1140, []int{2} -} -func (m *Integer64Proto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Integer64Proto.Unmarshal(m, b) -} -func (m *Integer64Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Integer64Proto.Marshal(b, m, deterministic) -} -func (dst *Integer64Proto) XXX_Merge(src proto.Message) { - xxx_messageInfo_Integer64Proto.Merge(dst, src) -} -func (m *Integer64Proto) XXX_Size() int { - return xxx_messageInfo_Integer64Proto.Size(m) -} -func (m *Integer64Proto) XXX_DiscardUnknown() { - xxx_messageInfo_Integer64Proto.DiscardUnknown(m) -} - -var xxx_messageInfo_Integer64Proto proto.InternalMessageInfo - -func (m *Integer64Proto) GetValue() int64 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -type BoolProto struct { - Value *bool `protobuf:"varint,1,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BoolProto) Reset() { *m = BoolProto{} } -func (m *BoolProto) String() string { return proto.CompactTextString(m) } -func (*BoolProto) ProtoMessage() {} -func (*BoolProto) Descriptor() ([]byte, []int) { - return fileDescriptor_api_base_9d49f8792e0c1140, []int{3} -} -func (m *BoolProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BoolProto.Unmarshal(m, b) -} -func (m *BoolProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BoolProto.Marshal(b, m, deterministic) -} -func (dst *BoolProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_BoolProto.Merge(dst, src) -} -func (m *BoolProto) XXX_Size() int { - return xxx_messageInfo_BoolProto.Size(m) -} -func (m *BoolProto) XXX_DiscardUnknown() { - xxx_messageInfo_BoolProto.DiscardUnknown(m) -} - -var xxx_messageInfo_BoolProto proto.InternalMessageInfo - -func (m *BoolProto) GetValue() bool { - if m != nil && m.Value != nil { - return *m.Value - } - return false -} - -type DoubleProto struct { - Value *float64 `protobuf:"fixed64,1,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DoubleProto) Reset() { *m = DoubleProto{} } -func (m *DoubleProto) String() string { return proto.CompactTextString(m) } -func (*DoubleProto) ProtoMessage() {} -func (*DoubleProto) Descriptor() ([]byte, []int) { - return fileDescriptor_api_base_9d49f8792e0c1140, []int{4} -} -func (m *DoubleProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DoubleProto.Unmarshal(m, b) -} -func (m *DoubleProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DoubleProto.Marshal(b, m, deterministic) -} -func (dst *DoubleProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_DoubleProto.Merge(dst, src) -} -func (m *DoubleProto) XXX_Size() int { - return xxx_messageInfo_DoubleProto.Size(m) -} -func (m *DoubleProto) XXX_DiscardUnknown() { - xxx_messageInfo_DoubleProto.DiscardUnknown(m) -} - -var xxx_messageInfo_DoubleProto proto.InternalMessageInfo - -func (m *DoubleProto) GetValue() float64 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -type BytesProto struct { - Value []byte `protobuf:"bytes,1,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BytesProto) Reset() { *m = BytesProto{} } -func (m *BytesProto) String() string { return proto.CompactTextString(m) } -func (*BytesProto) ProtoMessage() {} -func (*BytesProto) Descriptor() ([]byte, []int) { - return fileDescriptor_api_base_9d49f8792e0c1140, []int{5} -} -func (m *BytesProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BytesProto.Unmarshal(m, b) -} -func (m *BytesProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BytesProto.Marshal(b, m, deterministic) -} -func (dst *BytesProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_BytesProto.Merge(dst, src) -} -func (m *BytesProto) XXX_Size() int { - return xxx_messageInfo_BytesProto.Size(m) -} -func (m *BytesProto) XXX_DiscardUnknown() { - xxx_messageInfo_BytesProto.DiscardUnknown(m) -} - -var xxx_messageInfo_BytesProto proto.InternalMessageInfo - -func (m *BytesProto) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -type VoidProto struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *VoidProto) Reset() { *m = VoidProto{} } -func (m *VoidProto) String() string { return proto.CompactTextString(m) } -func (*VoidProto) ProtoMessage() {} -func (*VoidProto) Descriptor() ([]byte, []int) { - return fileDescriptor_api_base_9d49f8792e0c1140, []int{6} -} -func (m *VoidProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_VoidProto.Unmarshal(m, b) -} -func (m *VoidProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_VoidProto.Marshal(b, m, deterministic) -} -func (dst *VoidProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_VoidProto.Merge(dst, src) -} -func (m *VoidProto) XXX_Size() int { - return xxx_messageInfo_VoidProto.Size(m) -} -func (m *VoidProto) XXX_DiscardUnknown() { - xxx_messageInfo_VoidProto.DiscardUnknown(m) -} - -var xxx_messageInfo_VoidProto proto.InternalMessageInfo - -func init() { - proto.RegisterType((*StringProto)(nil), "appengine.base.StringProto") - proto.RegisterType((*Integer32Proto)(nil), "appengine.base.Integer32Proto") - proto.RegisterType((*Integer64Proto)(nil), "appengine.base.Integer64Proto") - proto.RegisterType((*BoolProto)(nil), "appengine.base.BoolProto") - proto.RegisterType((*DoubleProto)(nil), "appengine.base.DoubleProto") - proto.RegisterType((*BytesProto)(nil), "appengine.base.BytesProto") - proto.RegisterType((*VoidProto)(nil), "appengine.base.VoidProto") -} - -func init() { - proto.RegisterFile("google.golang.org/appengine/internal/base/api_base.proto", fileDescriptor_api_base_9d49f8792e0c1140) -} - -var fileDescriptor_api_base_9d49f8792e0c1140 = []byte{ - // 199 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0xcf, 0x3f, 0x4b, 0xc6, 0x30, - 0x10, 0x06, 0x70, 0x5a, 0xad, 0xb4, 0x57, 0xe9, 0x20, 0x0e, 0x1d, 0xb5, 0x05, 0x71, 0x4a, 0x40, - 0x45, 0x9c, 0x83, 0x8b, 0x9b, 0x28, 0x38, 0xb8, 0x48, 0x8a, 0xc7, 0x11, 0x08, 0xb9, 0x90, 0xa6, - 0x82, 0xdf, 0x5e, 0xda, 0xd2, 0xfa, 0xc2, 0x9b, 0xed, 0xfe, 0xfc, 0xe0, 0xe1, 0x81, 0x27, 0x62, - 0x26, 0x8b, 0x82, 0xd8, 0x6a, 0x47, 0x82, 0x03, 0x49, 0xed, 0x3d, 0x3a, 0x32, 0x0e, 0xa5, 0x71, - 0x11, 0x83, 0xd3, 0x56, 0x0e, 0x7a, 0x44, 0xa9, 0xbd, 0xf9, 0x9a, 0x07, 0xe1, 0x03, 0x47, 0xbe, - 0x68, 0x76, 0x27, 0xe6, 0x6b, 0xd7, 0x43, 0xfd, 0x1e, 0x83, 0x71, 0xf4, 0xba, 0xbc, 0x2f, 0xa1, - 0xf8, 0xd1, 0x76, 0xc2, 0x36, 0xbb, 0xca, 0x6f, 0xab, 0xb7, 0x75, 0xe9, 0x6e, 0xa0, 0x79, 0x71, - 0x11, 0x09, 0xc3, 0xfd, 0x5d, 0xc2, 0x15, 0xc7, 0xee, 0xf1, 0x21, 0xe1, 0x4e, 0x36, 0x77, 0x0d, - 0x95, 0x62, 0xb6, 0x09, 0x52, 0x6e, 0xa4, 0x87, 0xfa, 0x99, 0xa7, 0xc1, 0x62, 0x02, 0x65, 0xff, - 0x79, 0xa0, 0x7e, 0x23, 0x8e, 0xab, 0x69, 0x0f, 0xcd, 0xb9, 0xca, 0xcb, 0xdd, 0xd5, 0x50, 0x7d, - 0xb0, 0xf9, 0x5e, 0x98, 0x3a, 0xfb, 0x3c, 0x9d, 0x9b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xba, - 0x37, 0x25, 0xea, 0x44, 0x01, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/appengine/internal/base/api_base.proto b/vendor/google.golang.org/appengine/internal/base/api_base.proto deleted file mode 100644 index 56cd7a3cad..0000000000 --- a/vendor/google.golang.org/appengine/internal/base/api_base.proto +++ /dev/null @@ -1,33 +0,0 @@ -// Built-in base types for API calls. Primarily useful as return types. - -syntax = "proto2"; -option go_package = "base"; - -package appengine.base; - -message StringProto { - required string value = 1; -} - -message Integer32Proto { - required int32 value = 1; -} - -message Integer64Proto { - required int64 value = 1; -} - -message BoolProto { - required bool value = 1; -} - -message DoubleProto { - required double value = 1; -} - -message BytesProto { - required bytes value = 1 [ctype=CORD]; -} - -message VoidProto { -} diff --git a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go deleted file mode 100644 index 2fb7482896..0000000000 --- a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +++ /dev/null @@ -1,4367 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google.golang.org/appengine/internal/datastore/datastore_v3.proto - -package datastore - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type Property_Meaning int32 - -const ( - Property_NO_MEANING Property_Meaning = 0 - Property_BLOB Property_Meaning = 14 - Property_TEXT Property_Meaning = 15 - Property_BYTESTRING Property_Meaning = 16 - Property_ATOM_CATEGORY Property_Meaning = 1 - Property_ATOM_LINK Property_Meaning = 2 - Property_ATOM_TITLE Property_Meaning = 3 - Property_ATOM_CONTENT Property_Meaning = 4 - Property_ATOM_SUMMARY Property_Meaning = 5 - Property_ATOM_AUTHOR Property_Meaning = 6 - Property_GD_WHEN Property_Meaning = 7 - Property_GD_EMAIL Property_Meaning = 8 - Property_GEORSS_POINT Property_Meaning = 9 - Property_GD_IM Property_Meaning = 10 - Property_GD_PHONENUMBER Property_Meaning = 11 - Property_GD_POSTALADDRESS Property_Meaning = 12 - Property_GD_RATING Property_Meaning = 13 - Property_BLOBKEY Property_Meaning = 17 - Property_ENTITY_PROTO Property_Meaning = 19 - Property_INDEX_VALUE Property_Meaning = 18 -) - -var Property_Meaning_name = map[int32]string{ - 0: "NO_MEANING", - 14: "BLOB", - 15: "TEXT", - 16: "BYTESTRING", - 1: "ATOM_CATEGORY", - 2: "ATOM_LINK", - 3: "ATOM_TITLE", - 4: "ATOM_CONTENT", - 5: "ATOM_SUMMARY", - 6: "ATOM_AUTHOR", - 7: "GD_WHEN", - 8: "GD_EMAIL", - 9: "GEORSS_POINT", - 10: "GD_IM", - 11: "GD_PHONENUMBER", - 12: "GD_POSTALADDRESS", - 13: "GD_RATING", - 17: "BLOBKEY", - 19: "ENTITY_PROTO", - 18: "INDEX_VALUE", -} -var Property_Meaning_value = map[string]int32{ - "NO_MEANING": 0, - "BLOB": 14, - "TEXT": 15, - "BYTESTRING": 16, - "ATOM_CATEGORY": 1, - "ATOM_LINK": 2, - "ATOM_TITLE": 3, - "ATOM_CONTENT": 4, - "ATOM_SUMMARY": 5, - "ATOM_AUTHOR": 6, - "GD_WHEN": 7, - "GD_EMAIL": 8, - "GEORSS_POINT": 9, - "GD_IM": 10, - "GD_PHONENUMBER": 11, - "GD_POSTALADDRESS": 12, - "GD_RATING": 13, - "BLOBKEY": 17, - "ENTITY_PROTO": 19, - "INDEX_VALUE": 18, -} - -func (x Property_Meaning) Enum() *Property_Meaning { - p := new(Property_Meaning) - *p = x - return p -} -func (x Property_Meaning) String() string { - return proto.EnumName(Property_Meaning_name, int32(x)) -} -func (x *Property_Meaning) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Property_Meaning_value, data, "Property_Meaning") - if err != nil { - return err - } - *x = Property_Meaning(value) - return nil -} -func (Property_Meaning) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 0} -} - -type Property_FtsTokenizationOption int32 - -const ( - Property_HTML Property_FtsTokenizationOption = 1 - Property_ATOM Property_FtsTokenizationOption = 2 -) - -var Property_FtsTokenizationOption_name = map[int32]string{ - 1: "HTML", - 2: "ATOM", -} -var Property_FtsTokenizationOption_value = map[string]int32{ - "HTML": 1, - "ATOM": 2, -} - -func (x Property_FtsTokenizationOption) Enum() *Property_FtsTokenizationOption { - p := new(Property_FtsTokenizationOption) - *p = x - return p -} -func (x Property_FtsTokenizationOption) String() string { - return proto.EnumName(Property_FtsTokenizationOption_name, int32(x)) -} -func (x *Property_FtsTokenizationOption) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Property_FtsTokenizationOption_value, data, "Property_FtsTokenizationOption") - if err != nil { - return err - } - *x = Property_FtsTokenizationOption(value) - return nil -} -func (Property_FtsTokenizationOption) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 1} -} - -type EntityProto_Kind int32 - -const ( - EntityProto_GD_CONTACT EntityProto_Kind = 1 - EntityProto_GD_EVENT EntityProto_Kind = 2 - EntityProto_GD_MESSAGE EntityProto_Kind = 3 -) - -var EntityProto_Kind_name = map[int32]string{ - 1: "GD_CONTACT", - 2: "GD_EVENT", - 3: "GD_MESSAGE", -} -var EntityProto_Kind_value = map[string]int32{ - "GD_CONTACT": 1, - "GD_EVENT": 2, - "GD_MESSAGE": 3, -} - -func (x EntityProto_Kind) Enum() *EntityProto_Kind { - p := new(EntityProto_Kind) - *p = x - return p -} -func (x EntityProto_Kind) String() string { - return proto.EnumName(EntityProto_Kind_name, int32(x)) -} -func (x *EntityProto_Kind) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(EntityProto_Kind_value, data, "EntityProto_Kind") - if err != nil { - return err - } - *x = EntityProto_Kind(value) - return nil -} -func (EntityProto_Kind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6, 0} -} - -type Index_Property_Direction int32 - -const ( - Index_Property_ASCENDING Index_Property_Direction = 1 - Index_Property_DESCENDING Index_Property_Direction = 2 -) - -var Index_Property_Direction_name = map[int32]string{ - 1: "ASCENDING", - 2: "DESCENDING", -} -var Index_Property_Direction_value = map[string]int32{ - "ASCENDING": 1, - "DESCENDING": 2, -} - -func (x Index_Property_Direction) Enum() *Index_Property_Direction { - p := new(Index_Property_Direction) - *p = x - return p -} -func (x Index_Property_Direction) String() string { - return proto.EnumName(Index_Property_Direction_name, int32(x)) -} -func (x *Index_Property_Direction) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Index_Property_Direction_value, data, "Index_Property_Direction") - if err != nil { - return err - } - *x = Index_Property_Direction(value) - return nil -} -func (Index_Property_Direction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0, 0} -} - -type CompositeIndex_State int32 - -const ( - CompositeIndex_WRITE_ONLY CompositeIndex_State = 1 - CompositeIndex_READ_WRITE CompositeIndex_State = 2 - CompositeIndex_DELETED CompositeIndex_State = 3 - CompositeIndex_ERROR CompositeIndex_State = 4 -) - -var CompositeIndex_State_name = map[int32]string{ - 1: "WRITE_ONLY", - 2: "READ_WRITE", - 3: "DELETED", - 4: "ERROR", -} -var CompositeIndex_State_value = map[string]int32{ - "WRITE_ONLY": 1, - "READ_WRITE": 2, - "DELETED": 3, - "ERROR": 4, -} - -func (x CompositeIndex_State) Enum() *CompositeIndex_State { - p := new(CompositeIndex_State) - *p = x - return p -} -func (x CompositeIndex_State) String() string { - return proto.EnumName(CompositeIndex_State_name, int32(x)) -} -func (x *CompositeIndex_State) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(CompositeIndex_State_value, data, "CompositeIndex_State") - if err != nil { - return err - } - *x = CompositeIndex_State(value) - return nil -} -func (CompositeIndex_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9, 0} -} - -type Snapshot_Status int32 - -const ( - Snapshot_INACTIVE Snapshot_Status = 0 - Snapshot_ACTIVE Snapshot_Status = 1 -) - -var Snapshot_Status_name = map[int32]string{ - 0: "INACTIVE", - 1: "ACTIVE", -} -var Snapshot_Status_value = map[string]int32{ - "INACTIVE": 0, - "ACTIVE": 1, -} - -func (x Snapshot_Status) Enum() *Snapshot_Status { - p := new(Snapshot_Status) - *p = x - return p -} -func (x Snapshot_Status) String() string { - return proto.EnumName(Snapshot_Status_name, int32(x)) -} -func (x *Snapshot_Status) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Snapshot_Status_value, data, "Snapshot_Status") - if err != nil { - return err - } - *x = Snapshot_Status(value) - return nil -} -func (Snapshot_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12, 0} -} - -type Query_Hint int32 - -const ( - Query_ORDER_FIRST Query_Hint = 1 - Query_ANCESTOR_FIRST Query_Hint = 2 - Query_FILTER_FIRST Query_Hint = 3 -) - -var Query_Hint_name = map[int32]string{ - 1: "ORDER_FIRST", - 2: "ANCESTOR_FIRST", - 3: "FILTER_FIRST", -} -var Query_Hint_value = map[string]int32{ - "ORDER_FIRST": 1, - "ANCESTOR_FIRST": 2, - "FILTER_FIRST": 3, -} - -func (x Query_Hint) Enum() *Query_Hint { - p := new(Query_Hint) - *p = x - return p -} -func (x Query_Hint) String() string { - return proto.EnumName(Query_Hint_name, int32(x)) -} -func (x *Query_Hint) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Query_Hint_value, data, "Query_Hint") - if err != nil { - return err - } - *x = Query_Hint(value) - return nil -} -func (Query_Hint) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0} -} - -type Query_Filter_Operator int32 - -const ( - Query_Filter_LESS_THAN Query_Filter_Operator = 1 - Query_Filter_LESS_THAN_OR_EQUAL Query_Filter_Operator = 2 - Query_Filter_GREATER_THAN Query_Filter_Operator = 3 - Query_Filter_GREATER_THAN_OR_EQUAL Query_Filter_Operator = 4 - Query_Filter_EQUAL Query_Filter_Operator = 5 - Query_Filter_IN Query_Filter_Operator = 6 - Query_Filter_EXISTS Query_Filter_Operator = 7 -) - -var Query_Filter_Operator_name = map[int32]string{ - 1: "LESS_THAN", - 2: "LESS_THAN_OR_EQUAL", - 3: "GREATER_THAN", - 4: "GREATER_THAN_OR_EQUAL", - 5: "EQUAL", - 6: "IN", - 7: "EXISTS", -} -var Query_Filter_Operator_value = map[string]int32{ - "LESS_THAN": 1, - "LESS_THAN_OR_EQUAL": 2, - "GREATER_THAN": 3, - "GREATER_THAN_OR_EQUAL": 4, - "EQUAL": 5, - "IN": 6, - "EXISTS": 7, -} - -func (x Query_Filter_Operator) Enum() *Query_Filter_Operator { - p := new(Query_Filter_Operator) - *p = x - return p -} -func (x Query_Filter_Operator) String() string { - return proto.EnumName(Query_Filter_Operator_name, int32(x)) -} -func (x *Query_Filter_Operator) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Query_Filter_Operator_value, data, "Query_Filter_Operator") - if err != nil { - return err - } - *x = Query_Filter_Operator(value) - return nil -} -func (Query_Filter_Operator) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0, 0} -} - -type Query_Order_Direction int32 - -const ( - Query_Order_ASCENDING Query_Order_Direction = 1 - Query_Order_DESCENDING Query_Order_Direction = 2 -) - -var Query_Order_Direction_name = map[int32]string{ - 1: "ASCENDING", - 2: "DESCENDING", -} -var Query_Order_Direction_value = map[string]int32{ - "ASCENDING": 1, - "DESCENDING": 2, -} - -func (x Query_Order_Direction) Enum() *Query_Order_Direction { - p := new(Query_Order_Direction) - *p = x - return p -} -func (x Query_Order_Direction) String() string { - return proto.EnumName(Query_Order_Direction_name, int32(x)) -} -func (x *Query_Order_Direction) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Query_Order_Direction_value, data, "Query_Order_Direction") - if err != nil { - return err - } - *x = Query_Order_Direction(value) - return nil -} -func (Query_Order_Direction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1, 0} -} - -type Error_ErrorCode int32 - -const ( - Error_BAD_REQUEST Error_ErrorCode = 1 - Error_CONCURRENT_TRANSACTION Error_ErrorCode = 2 - Error_INTERNAL_ERROR Error_ErrorCode = 3 - Error_NEED_INDEX Error_ErrorCode = 4 - Error_TIMEOUT Error_ErrorCode = 5 - Error_PERMISSION_DENIED Error_ErrorCode = 6 - Error_BIGTABLE_ERROR Error_ErrorCode = 7 - Error_COMMITTED_BUT_STILL_APPLYING Error_ErrorCode = 8 - Error_CAPABILITY_DISABLED Error_ErrorCode = 9 - Error_TRY_ALTERNATE_BACKEND Error_ErrorCode = 10 - Error_SAFE_TIME_TOO_OLD Error_ErrorCode = 11 -) - -var Error_ErrorCode_name = map[int32]string{ - 1: "BAD_REQUEST", - 2: "CONCURRENT_TRANSACTION", - 3: "INTERNAL_ERROR", - 4: "NEED_INDEX", - 5: "TIMEOUT", - 6: "PERMISSION_DENIED", - 7: "BIGTABLE_ERROR", - 8: "COMMITTED_BUT_STILL_APPLYING", - 9: "CAPABILITY_DISABLED", - 10: "TRY_ALTERNATE_BACKEND", - 11: "SAFE_TIME_TOO_OLD", -} -var Error_ErrorCode_value = map[string]int32{ - "BAD_REQUEST": 1, - "CONCURRENT_TRANSACTION": 2, - "INTERNAL_ERROR": 3, - "NEED_INDEX": 4, - "TIMEOUT": 5, - "PERMISSION_DENIED": 6, - "BIGTABLE_ERROR": 7, - "COMMITTED_BUT_STILL_APPLYING": 8, - "CAPABILITY_DISABLED": 9, - "TRY_ALTERNATE_BACKEND": 10, - "SAFE_TIME_TOO_OLD": 11, -} - -func (x Error_ErrorCode) Enum() *Error_ErrorCode { - p := new(Error_ErrorCode) - *p = x - return p -} -func (x Error_ErrorCode) String() string { - return proto.EnumName(Error_ErrorCode_name, int32(x)) -} -func (x *Error_ErrorCode) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Error_ErrorCode_value, data, "Error_ErrorCode") - if err != nil { - return err - } - *x = Error_ErrorCode(value) - return nil -} -func (Error_ErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19, 0} -} - -type PutRequest_AutoIdPolicy int32 - -const ( - PutRequest_CURRENT PutRequest_AutoIdPolicy = 0 - PutRequest_SEQUENTIAL PutRequest_AutoIdPolicy = 1 -) - -var PutRequest_AutoIdPolicy_name = map[int32]string{ - 0: "CURRENT", - 1: "SEQUENTIAL", -} -var PutRequest_AutoIdPolicy_value = map[string]int32{ - "CURRENT": 0, - "SEQUENTIAL": 1, -} - -func (x PutRequest_AutoIdPolicy) Enum() *PutRequest_AutoIdPolicy { - p := new(PutRequest_AutoIdPolicy) - *p = x - return p -} -func (x PutRequest_AutoIdPolicy) String() string { - return proto.EnumName(PutRequest_AutoIdPolicy_name, int32(x)) -} -func (x *PutRequest_AutoIdPolicy) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(PutRequest_AutoIdPolicy_value, data, "PutRequest_AutoIdPolicy") - if err != nil { - return err - } - *x = PutRequest_AutoIdPolicy(value) - return nil -} -func (PutRequest_AutoIdPolicy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23, 0} -} - -type BeginTransactionRequest_TransactionMode int32 - -const ( - BeginTransactionRequest_UNKNOWN BeginTransactionRequest_TransactionMode = 0 - BeginTransactionRequest_READ_ONLY BeginTransactionRequest_TransactionMode = 1 - BeginTransactionRequest_READ_WRITE BeginTransactionRequest_TransactionMode = 2 -) - -var BeginTransactionRequest_TransactionMode_name = map[int32]string{ - 0: "UNKNOWN", - 1: "READ_ONLY", - 2: "READ_WRITE", -} -var BeginTransactionRequest_TransactionMode_value = map[string]int32{ - "UNKNOWN": 0, - "READ_ONLY": 1, - "READ_WRITE": 2, -} - -func (x BeginTransactionRequest_TransactionMode) Enum() *BeginTransactionRequest_TransactionMode { - p := new(BeginTransactionRequest_TransactionMode) - *p = x - return p -} -func (x BeginTransactionRequest_TransactionMode) String() string { - return proto.EnumName(BeginTransactionRequest_TransactionMode_name, int32(x)) -} -func (x *BeginTransactionRequest_TransactionMode) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(BeginTransactionRequest_TransactionMode_value, data, "BeginTransactionRequest_TransactionMode") - if err != nil { - return err - } - *x = BeginTransactionRequest_TransactionMode(value) - return nil -} -func (BeginTransactionRequest_TransactionMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36, 0} -} - -type Action struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Action) Reset() { *m = Action{} } -func (m *Action) String() string { return proto.CompactTextString(m) } -func (*Action) ProtoMessage() {} -func (*Action) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{0} -} -func (m *Action) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Action.Unmarshal(m, b) -} -func (m *Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Action.Marshal(b, m, deterministic) -} -func (dst *Action) XXX_Merge(src proto.Message) { - xxx_messageInfo_Action.Merge(dst, src) -} -func (m *Action) XXX_Size() int { - return xxx_messageInfo_Action.Size(m) -} -func (m *Action) XXX_DiscardUnknown() { - xxx_messageInfo_Action.DiscardUnknown(m) -} - -var xxx_messageInfo_Action proto.InternalMessageInfo - -type PropertyValue struct { - Int64Value *int64 `protobuf:"varint,1,opt,name=int64Value" json:"int64Value,omitempty"` - BooleanValue *bool `protobuf:"varint,2,opt,name=booleanValue" json:"booleanValue,omitempty"` - StringValue *string `protobuf:"bytes,3,opt,name=stringValue" json:"stringValue,omitempty"` - DoubleValue *float64 `protobuf:"fixed64,4,opt,name=doubleValue" json:"doubleValue,omitempty"` - Pointvalue *PropertyValue_PointValue `protobuf:"group,5,opt,name=PointValue,json=pointvalue" json:"pointvalue,omitempty"` - Uservalue *PropertyValue_UserValue `protobuf:"group,8,opt,name=UserValue,json=uservalue" json:"uservalue,omitempty"` - Referencevalue *PropertyValue_ReferenceValue `protobuf:"group,12,opt,name=ReferenceValue,json=referencevalue" json:"referencevalue,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PropertyValue) Reset() { *m = PropertyValue{} } -func (m *PropertyValue) String() string { return proto.CompactTextString(m) } -func (*PropertyValue) ProtoMessage() {} -func (*PropertyValue) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1} -} -func (m *PropertyValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PropertyValue.Unmarshal(m, b) -} -func (m *PropertyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PropertyValue.Marshal(b, m, deterministic) -} -func (dst *PropertyValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_PropertyValue.Merge(dst, src) -} -func (m *PropertyValue) XXX_Size() int { - return xxx_messageInfo_PropertyValue.Size(m) -} -func (m *PropertyValue) XXX_DiscardUnknown() { - xxx_messageInfo_PropertyValue.DiscardUnknown(m) -} - -var xxx_messageInfo_PropertyValue proto.InternalMessageInfo - -func (m *PropertyValue) GetInt64Value() int64 { - if m != nil && m.Int64Value != nil { - return *m.Int64Value - } - return 0 -} - -func (m *PropertyValue) GetBooleanValue() bool { - if m != nil && m.BooleanValue != nil { - return *m.BooleanValue - } - return false -} - -func (m *PropertyValue) GetStringValue() string { - if m != nil && m.StringValue != nil { - return *m.StringValue - } - return "" -} - -func (m *PropertyValue) GetDoubleValue() float64 { - if m != nil && m.DoubleValue != nil { - return *m.DoubleValue - } - return 0 -} - -func (m *PropertyValue) GetPointvalue() *PropertyValue_PointValue { - if m != nil { - return m.Pointvalue - } - return nil -} - -func (m *PropertyValue) GetUservalue() *PropertyValue_UserValue { - if m != nil { - return m.Uservalue - } - return nil -} - -func (m *PropertyValue) GetReferencevalue() *PropertyValue_ReferenceValue { - if m != nil { - return m.Referencevalue - } - return nil -} - -type PropertyValue_PointValue struct { - X *float64 `protobuf:"fixed64,6,req,name=x" json:"x,omitempty"` - Y *float64 `protobuf:"fixed64,7,req,name=y" json:"y,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PropertyValue_PointValue) Reset() { *m = PropertyValue_PointValue{} } -func (m *PropertyValue_PointValue) String() string { return proto.CompactTextString(m) } -func (*PropertyValue_PointValue) ProtoMessage() {} -func (*PropertyValue_PointValue) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 0} -} -func (m *PropertyValue_PointValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PropertyValue_PointValue.Unmarshal(m, b) -} -func (m *PropertyValue_PointValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PropertyValue_PointValue.Marshal(b, m, deterministic) -} -func (dst *PropertyValue_PointValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_PropertyValue_PointValue.Merge(dst, src) -} -func (m *PropertyValue_PointValue) XXX_Size() int { - return xxx_messageInfo_PropertyValue_PointValue.Size(m) -} -func (m *PropertyValue_PointValue) XXX_DiscardUnknown() { - xxx_messageInfo_PropertyValue_PointValue.DiscardUnknown(m) -} - -var xxx_messageInfo_PropertyValue_PointValue proto.InternalMessageInfo - -func (m *PropertyValue_PointValue) GetX() float64 { - if m != nil && m.X != nil { - return *m.X - } - return 0 -} - -func (m *PropertyValue_PointValue) GetY() float64 { - if m != nil && m.Y != nil { - return *m.Y - } - return 0 -} - -type PropertyValue_UserValue struct { - Email *string `protobuf:"bytes,9,req,name=email" json:"email,omitempty"` - AuthDomain *string `protobuf:"bytes,10,req,name=auth_domain,json=authDomain" json:"auth_domain,omitempty"` - Nickname *string `protobuf:"bytes,11,opt,name=nickname" json:"nickname,omitempty"` - FederatedIdentity *string `protobuf:"bytes,21,opt,name=federated_identity,json=federatedIdentity" json:"federated_identity,omitempty"` - FederatedProvider *string `protobuf:"bytes,22,opt,name=federated_provider,json=federatedProvider" json:"federated_provider,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PropertyValue_UserValue) Reset() { *m = PropertyValue_UserValue{} } -func (m *PropertyValue_UserValue) String() string { return proto.CompactTextString(m) } -func (*PropertyValue_UserValue) ProtoMessage() {} -func (*PropertyValue_UserValue) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 1} -} -func (m *PropertyValue_UserValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PropertyValue_UserValue.Unmarshal(m, b) -} -func (m *PropertyValue_UserValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PropertyValue_UserValue.Marshal(b, m, deterministic) -} -func (dst *PropertyValue_UserValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_PropertyValue_UserValue.Merge(dst, src) -} -func (m *PropertyValue_UserValue) XXX_Size() int { - return xxx_messageInfo_PropertyValue_UserValue.Size(m) -} -func (m *PropertyValue_UserValue) XXX_DiscardUnknown() { - xxx_messageInfo_PropertyValue_UserValue.DiscardUnknown(m) -} - -var xxx_messageInfo_PropertyValue_UserValue proto.InternalMessageInfo - -func (m *PropertyValue_UserValue) GetEmail() string { - if m != nil && m.Email != nil { - return *m.Email - } - return "" -} - -func (m *PropertyValue_UserValue) GetAuthDomain() string { - if m != nil && m.AuthDomain != nil { - return *m.AuthDomain - } - return "" -} - -func (m *PropertyValue_UserValue) GetNickname() string { - if m != nil && m.Nickname != nil { - return *m.Nickname - } - return "" -} - -func (m *PropertyValue_UserValue) GetFederatedIdentity() string { - if m != nil && m.FederatedIdentity != nil { - return *m.FederatedIdentity - } - return "" -} - -func (m *PropertyValue_UserValue) GetFederatedProvider() string { - if m != nil && m.FederatedProvider != nil { - return *m.FederatedProvider - } - return "" -} - -type PropertyValue_ReferenceValue struct { - App *string `protobuf:"bytes,13,req,name=app" json:"app,omitempty"` - NameSpace *string `protobuf:"bytes,20,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"` - Pathelement []*PropertyValue_ReferenceValue_PathElement `protobuf:"group,14,rep,name=PathElement,json=pathelement" json:"pathelement,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PropertyValue_ReferenceValue) Reset() { *m = PropertyValue_ReferenceValue{} } -func (m *PropertyValue_ReferenceValue) String() string { return proto.CompactTextString(m) } -func (*PropertyValue_ReferenceValue) ProtoMessage() {} -func (*PropertyValue_ReferenceValue) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2} -} -func (m *PropertyValue_ReferenceValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PropertyValue_ReferenceValue.Unmarshal(m, b) -} -func (m *PropertyValue_ReferenceValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PropertyValue_ReferenceValue.Marshal(b, m, deterministic) -} -func (dst *PropertyValue_ReferenceValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_PropertyValue_ReferenceValue.Merge(dst, src) -} -func (m *PropertyValue_ReferenceValue) XXX_Size() int { - return xxx_messageInfo_PropertyValue_ReferenceValue.Size(m) -} -func (m *PropertyValue_ReferenceValue) XXX_DiscardUnknown() { - xxx_messageInfo_PropertyValue_ReferenceValue.DiscardUnknown(m) -} - -var xxx_messageInfo_PropertyValue_ReferenceValue proto.InternalMessageInfo - -func (m *PropertyValue_ReferenceValue) GetApp() string { - if m != nil && m.App != nil { - return *m.App - } - return "" -} - -func (m *PropertyValue_ReferenceValue) GetNameSpace() string { - if m != nil && m.NameSpace != nil { - return *m.NameSpace - } - return "" -} - -func (m *PropertyValue_ReferenceValue) GetPathelement() []*PropertyValue_ReferenceValue_PathElement { - if m != nil { - return m.Pathelement - } - return nil -} - -type PropertyValue_ReferenceValue_PathElement struct { - Type *string `protobuf:"bytes,15,req,name=type" json:"type,omitempty"` - Id *int64 `protobuf:"varint,16,opt,name=id" json:"id,omitempty"` - Name *string `protobuf:"bytes,17,opt,name=name" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PropertyValue_ReferenceValue_PathElement) Reset() { - *m = PropertyValue_ReferenceValue_PathElement{} -} -func (m *PropertyValue_ReferenceValue_PathElement) String() string { return proto.CompactTextString(m) } -func (*PropertyValue_ReferenceValue_PathElement) ProtoMessage() {} -func (*PropertyValue_ReferenceValue_PathElement) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2, 0} -} -func (m *PropertyValue_ReferenceValue_PathElement) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Unmarshal(m, b) -} -func (m *PropertyValue_ReferenceValue_PathElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Marshal(b, m, deterministic) -} -func (dst *PropertyValue_ReferenceValue_PathElement) XXX_Merge(src proto.Message) { - xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Merge(dst, src) -} -func (m *PropertyValue_ReferenceValue_PathElement) XXX_Size() int { - return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Size(m) -} -func (m *PropertyValue_ReferenceValue_PathElement) XXX_DiscardUnknown() { - xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.DiscardUnknown(m) -} - -var xxx_messageInfo_PropertyValue_ReferenceValue_PathElement proto.InternalMessageInfo - -func (m *PropertyValue_ReferenceValue_PathElement) GetType() string { - if m != nil && m.Type != nil { - return *m.Type - } - return "" -} - -func (m *PropertyValue_ReferenceValue_PathElement) GetId() int64 { - if m != nil && m.Id != nil { - return *m.Id - } - return 0 -} - -func (m *PropertyValue_ReferenceValue_PathElement) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -type Property struct { - Meaning *Property_Meaning `protobuf:"varint,1,opt,name=meaning,enum=appengine.Property_Meaning,def=0" json:"meaning,omitempty"` - MeaningUri *string `protobuf:"bytes,2,opt,name=meaning_uri,json=meaningUri" json:"meaning_uri,omitempty"` - Name *string `protobuf:"bytes,3,req,name=name" json:"name,omitempty"` - Value *PropertyValue `protobuf:"bytes,5,req,name=value" json:"value,omitempty"` - Multiple *bool `protobuf:"varint,4,req,name=multiple" json:"multiple,omitempty"` - Searchable *bool `protobuf:"varint,6,opt,name=searchable,def=0" json:"searchable,omitempty"` - FtsTokenizationOption *Property_FtsTokenizationOption `protobuf:"varint,8,opt,name=fts_tokenization_option,json=ftsTokenizationOption,enum=appengine.Property_FtsTokenizationOption" json:"fts_tokenization_option,omitempty"` - Locale *string `protobuf:"bytes,9,opt,name=locale,def=en" json:"locale,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Property) Reset() { *m = Property{} } -func (m *Property) String() string { return proto.CompactTextString(m) } -func (*Property) ProtoMessage() {} -func (*Property) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2} -} -func (m *Property) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Property.Unmarshal(m, b) -} -func (m *Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Property.Marshal(b, m, deterministic) -} -func (dst *Property) XXX_Merge(src proto.Message) { - xxx_messageInfo_Property.Merge(dst, src) -} -func (m *Property) XXX_Size() int { - return xxx_messageInfo_Property.Size(m) -} -func (m *Property) XXX_DiscardUnknown() { - xxx_messageInfo_Property.DiscardUnknown(m) -} - -var xxx_messageInfo_Property proto.InternalMessageInfo - -const Default_Property_Meaning Property_Meaning = Property_NO_MEANING -const Default_Property_Searchable bool = false -const Default_Property_Locale string = "en" - -func (m *Property) GetMeaning() Property_Meaning { - if m != nil && m.Meaning != nil { - return *m.Meaning - } - return Default_Property_Meaning -} - -func (m *Property) GetMeaningUri() string { - if m != nil && m.MeaningUri != nil { - return *m.MeaningUri - } - return "" -} - -func (m *Property) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *Property) GetValue() *PropertyValue { - if m != nil { - return m.Value - } - return nil -} - -func (m *Property) GetMultiple() bool { - if m != nil && m.Multiple != nil { - return *m.Multiple - } - return false -} - -func (m *Property) GetSearchable() bool { - if m != nil && m.Searchable != nil { - return *m.Searchable - } - return Default_Property_Searchable -} - -func (m *Property) GetFtsTokenizationOption() Property_FtsTokenizationOption { - if m != nil && m.FtsTokenizationOption != nil { - return *m.FtsTokenizationOption - } - return Property_HTML -} - -func (m *Property) GetLocale() string { - if m != nil && m.Locale != nil { - return *m.Locale - } - return Default_Property_Locale -} - -type Path struct { - Element []*Path_Element `protobuf:"group,1,rep,name=Element,json=element" json:"element,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Path) Reset() { *m = Path{} } -func (m *Path) String() string { return proto.CompactTextString(m) } -func (*Path) ProtoMessage() {} -func (*Path) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3} -} -func (m *Path) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Path.Unmarshal(m, b) -} -func (m *Path) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Path.Marshal(b, m, deterministic) -} -func (dst *Path) XXX_Merge(src proto.Message) { - xxx_messageInfo_Path.Merge(dst, src) -} -func (m *Path) XXX_Size() int { - return xxx_messageInfo_Path.Size(m) -} -func (m *Path) XXX_DiscardUnknown() { - xxx_messageInfo_Path.DiscardUnknown(m) -} - -var xxx_messageInfo_Path proto.InternalMessageInfo - -func (m *Path) GetElement() []*Path_Element { - if m != nil { - return m.Element - } - return nil -} - -type Path_Element struct { - Type *string `protobuf:"bytes,2,req,name=type" json:"type,omitempty"` - Id *int64 `protobuf:"varint,3,opt,name=id" json:"id,omitempty"` - Name *string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Path_Element) Reset() { *m = Path_Element{} } -func (m *Path_Element) String() string { return proto.CompactTextString(m) } -func (*Path_Element) ProtoMessage() {} -func (*Path_Element) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3, 0} -} -func (m *Path_Element) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Path_Element.Unmarshal(m, b) -} -func (m *Path_Element) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Path_Element.Marshal(b, m, deterministic) -} -func (dst *Path_Element) XXX_Merge(src proto.Message) { - xxx_messageInfo_Path_Element.Merge(dst, src) -} -func (m *Path_Element) XXX_Size() int { - return xxx_messageInfo_Path_Element.Size(m) -} -func (m *Path_Element) XXX_DiscardUnknown() { - xxx_messageInfo_Path_Element.DiscardUnknown(m) -} - -var xxx_messageInfo_Path_Element proto.InternalMessageInfo - -func (m *Path_Element) GetType() string { - if m != nil && m.Type != nil { - return *m.Type - } - return "" -} - -func (m *Path_Element) GetId() int64 { - if m != nil && m.Id != nil { - return *m.Id - } - return 0 -} - -func (m *Path_Element) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -type Reference struct { - App *string `protobuf:"bytes,13,req,name=app" json:"app,omitempty"` - NameSpace *string `protobuf:"bytes,20,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"` - Path *Path `protobuf:"bytes,14,req,name=path" json:"path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Reference) Reset() { *m = Reference{} } -func (m *Reference) String() string { return proto.CompactTextString(m) } -func (*Reference) ProtoMessage() {} -func (*Reference) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{4} -} -func (m *Reference) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Reference.Unmarshal(m, b) -} -func (m *Reference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Reference.Marshal(b, m, deterministic) -} -func (dst *Reference) XXX_Merge(src proto.Message) { - xxx_messageInfo_Reference.Merge(dst, src) -} -func (m *Reference) XXX_Size() int { - return xxx_messageInfo_Reference.Size(m) -} -func (m *Reference) XXX_DiscardUnknown() { - xxx_messageInfo_Reference.DiscardUnknown(m) -} - -var xxx_messageInfo_Reference proto.InternalMessageInfo - -func (m *Reference) GetApp() string { - if m != nil && m.App != nil { - return *m.App - } - return "" -} - -func (m *Reference) GetNameSpace() string { - if m != nil && m.NameSpace != nil { - return *m.NameSpace - } - return "" -} - -func (m *Reference) GetPath() *Path { - if m != nil { - return m.Path - } - return nil -} - -type User struct { - Email *string `protobuf:"bytes,1,req,name=email" json:"email,omitempty"` - AuthDomain *string `protobuf:"bytes,2,req,name=auth_domain,json=authDomain" json:"auth_domain,omitempty"` - Nickname *string `protobuf:"bytes,3,opt,name=nickname" json:"nickname,omitempty"` - FederatedIdentity *string `protobuf:"bytes,6,opt,name=federated_identity,json=federatedIdentity" json:"federated_identity,omitempty"` - FederatedProvider *string `protobuf:"bytes,7,opt,name=federated_provider,json=federatedProvider" json:"federated_provider,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *User) Reset() { *m = User{} } -func (m *User) String() string { return proto.CompactTextString(m) } -func (*User) ProtoMessage() {} -func (*User) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{5} -} -func (m *User) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_User.Unmarshal(m, b) -} -func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_User.Marshal(b, m, deterministic) -} -func (dst *User) XXX_Merge(src proto.Message) { - xxx_messageInfo_User.Merge(dst, src) -} -func (m *User) XXX_Size() int { - return xxx_messageInfo_User.Size(m) -} -func (m *User) XXX_DiscardUnknown() { - xxx_messageInfo_User.DiscardUnknown(m) -} - -var xxx_messageInfo_User proto.InternalMessageInfo - -func (m *User) GetEmail() string { - if m != nil && m.Email != nil { - return *m.Email - } - return "" -} - -func (m *User) GetAuthDomain() string { - if m != nil && m.AuthDomain != nil { - return *m.AuthDomain - } - return "" -} - -func (m *User) GetNickname() string { - if m != nil && m.Nickname != nil { - return *m.Nickname - } - return "" -} - -func (m *User) GetFederatedIdentity() string { - if m != nil && m.FederatedIdentity != nil { - return *m.FederatedIdentity - } - return "" -} - -func (m *User) GetFederatedProvider() string { - if m != nil && m.FederatedProvider != nil { - return *m.FederatedProvider - } - return "" -} - -type EntityProto struct { - Key *Reference `protobuf:"bytes,13,req,name=key" json:"key,omitempty"` - EntityGroup *Path `protobuf:"bytes,16,req,name=entity_group,json=entityGroup" json:"entity_group,omitempty"` - Owner *User `protobuf:"bytes,17,opt,name=owner" json:"owner,omitempty"` - Kind *EntityProto_Kind `protobuf:"varint,4,opt,name=kind,enum=appengine.EntityProto_Kind" json:"kind,omitempty"` - KindUri *string `protobuf:"bytes,5,opt,name=kind_uri,json=kindUri" json:"kind_uri,omitempty"` - Property []*Property `protobuf:"bytes,14,rep,name=property" json:"property,omitempty"` - RawProperty []*Property `protobuf:"bytes,15,rep,name=raw_property,json=rawProperty" json:"raw_property,omitempty"` - Rank *int32 `protobuf:"varint,18,opt,name=rank" json:"rank,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *EntityProto) Reset() { *m = EntityProto{} } -func (m *EntityProto) String() string { return proto.CompactTextString(m) } -func (*EntityProto) ProtoMessage() {} -func (*EntityProto) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6} -} -func (m *EntityProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EntityProto.Unmarshal(m, b) -} -func (m *EntityProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EntityProto.Marshal(b, m, deterministic) -} -func (dst *EntityProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_EntityProto.Merge(dst, src) -} -func (m *EntityProto) XXX_Size() int { - return xxx_messageInfo_EntityProto.Size(m) -} -func (m *EntityProto) XXX_DiscardUnknown() { - xxx_messageInfo_EntityProto.DiscardUnknown(m) -} - -var xxx_messageInfo_EntityProto proto.InternalMessageInfo - -func (m *EntityProto) GetKey() *Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *EntityProto) GetEntityGroup() *Path { - if m != nil { - return m.EntityGroup - } - return nil -} - -func (m *EntityProto) GetOwner() *User { - if m != nil { - return m.Owner - } - return nil -} - -func (m *EntityProto) GetKind() EntityProto_Kind { - if m != nil && m.Kind != nil { - return *m.Kind - } - return EntityProto_GD_CONTACT -} - -func (m *EntityProto) GetKindUri() string { - if m != nil && m.KindUri != nil { - return *m.KindUri - } - return "" -} - -func (m *EntityProto) GetProperty() []*Property { - if m != nil { - return m.Property - } - return nil -} - -func (m *EntityProto) GetRawProperty() []*Property { - if m != nil { - return m.RawProperty - } - return nil -} - -func (m *EntityProto) GetRank() int32 { - if m != nil && m.Rank != nil { - return *m.Rank - } - return 0 -} - -type CompositeProperty struct { - IndexId *int64 `protobuf:"varint,1,req,name=index_id,json=indexId" json:"index_id,omitempty"` - Value []string `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompositeProperty) Reset() { *m = CompositeProperty{} } -func (m *CompositeProperty) String() string { return proto.CompactTextString(m) } -func (*CompositeProperty) ProtoMessage() {} -func (*CompositeProperty) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{7} -} -func (m *CompositeProperty) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompositeProperty.Unmarshal(m, b) -} -func (m *CompositeProperty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompositeProperty.Marshal(b, m, deterministic) -} -func (dst *CompositeProperty) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompositeProperty.Merge(dst, src) -} -func (m *CompositeProperty) XXX_Size() int { - return xxx_messageInfo_CompositeProperty.Size(m) -} -func (m *CompositeProperty) XXX_DiscardUnknown() { - xxx_messageInfo_CompositeProperty.DiscardUnknown(m) -} - -var xxx_messageInfo_CompositeProperty proto.InternalMessageInfo - -func (m *CompositeProperty) GetIndexId() int64 { - if m != nil && m.IndexId != nil { - return *m.IndexId - } - return 0 -} - -func (m *CompositeProperty) GetValue() []string { - if m != nil { - return m.Value - } - return nil -} - -type Index struct { - EntityType *string `protobuf:"bytes,1,req,name=entity_type,json=entityType" json:"entity_type,omitempty"` - Ancestor *bool `protobuf:"varint,5,req,name=ancestor" json:"ancestor,omitempty"` - Property []*Index_Property `protobuf:"group,2,rep,name=Property,json=property" json:"property,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Index) Reset() { *m = Index{} } -func (m *Index) String() string { return proto.CompactTextString(m) } -func (*Index) ProtoMessage() {} -func (*Index) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8} -} -func (m *Index) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Index.Unmarshal(m, b) -} -func (m *Index) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Index.Marshal(b, m, deterministic) -} -func (dst *Index) XXX_Merge(src proto.Message) { - xxx_messageInfo_Index.Merge(dst, src) -} -func (m *Index) XXX_Size() int { - return xxx_messageInfo_Index.Size(m) -} -func (m *Index) XXX_DiscardUnknown() { - xxx_messageInfo_Index.DiscardUnknown(m) -} - -var xxx_messageInfo_Index proto.InternalMessageInfo - -func (m *Index) GetEntityType() string { - if m != nil && m.EntityType != nil { - return *m.EntityType - } - return "" -} - -func (m *Index) GetAncestor() bool { - if m != nil && m.Ancestor != nil { - return *m.Ancestor - } - return false -} - -func (m *Index) GetProperty() []*Index_Property { - if m != nil { - return m.Property - } - return nil -} - -type Index_Property struct { - Name *string `protobuf:"bytes,3,req,name=name" json:"name,omitempty"` - Direction *Index_Property_Direction `protobuf:"varint,4,opt,name=direction,enum=appengine.Index_Property_Direction,def=1" json:"direction,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Index_Property) Reset() { *m = Index_Property{} } -func (m *Index_Property) String() string { return proto.CompactTextString(m) } -func (*Index_Property) ProtoMessage() {} -func (*Index_Property) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0} -} -func (m *Index_Property) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Index_Property.Unmarshal(m, b) -} -func (m *Index_Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Index_Property.Marshal(b, m, deterministic) -} -func (dst *Index_Property) XXX_Merge(src proto.Message) { - xxx_messageInfo_Index_Property.Merge(dst, src) -} -func (m *Index_Property) XXX_Size() int { - return xxx_messageInfo_Index_Property.Size(m) -} -func (m *Index_Property) XXX_DiscardUnknown() { - xxx_messageInfo_Index_Property.DiscardUnknown(m) -} - -var xxx_messageInfo_Index_Property proto.InternalMessageInfo - -const Default_Index_Property_Direction Index_Property_Direction = Index_Property_ASCENDING - -func (m *Index_Property) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *Index_Property) GetDirection() Index_Property_Direction { - if m != nil && m.Direction != nil { - return *m.Direction - } - return Default_Index_Property_Direction -} - -type CompositeIndex struct { - AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` - Id *int64 `protobuf:"varint,2,req,name=id" json:"id,omitempty"` - Definition *Index `protobuf:"bytes,3,req,name=definition" json:"definition,omitempty"` - State *CompositeIndex_State `protobuf:"varint,4,req,name=state,enum=appengine.CompositeIndex_State" json:"state,omitempty"` - OnlyUseIfRequired *bool `protobuf:"varint,6,opt,name=only_use_if_required,json=onlyUseIfRequired,def=0" json:"only_use_if_required,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompositeIndex) Reset() { *m = CompositeIndex{} } -func (m *CompositeIndex) String() string { return proto.CompactTextString(m) } -func (*CompositeIndex) ProtoMessage() {} -func (*CompositeIndex) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9} -} -func (m *CompositeIndex) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompositeIndex.Unmarshal(m, b) -} -func (m *CompositeIndex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompositeIndex.Marshal(b, m, deterministic) -} -func (dst *CompositeIndex) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompositeIndex.Merge(dst, src) -} -func (m *CompositeIndex) XXX_Size() int { - return xxx_messageInfo_CompositeIndex.Size(m) -} -func (m *CompositeIndex) XXX_DiscardUnknown() { - xxx_messageInfo_CompositeIndex.DiscardUnknown(m) -} - -var xxx_messageInfo_CompositeIndex proto.InternalMessageInfo - -const Default_CompositeIndex_OnlyUseIfRequired bool = false - -func (m *CompositeIndex) GetAppId() string { - if m != nil && m.AppId != nil { - return *m.AppId - } - return "" -} - -func (m *CompositeIndex) GetId() int64 { - if m != nil && m.Id != nil { - return *m.Id - } - return 0 -} - -func (m *CompositeIndex) GetDefinition() *Index { - if m != nil { - return m.Definition - } - return nil -} - -func (m *CompositeIndex) GetState() CompositeIndex_State { - if m != nil && m.State != nil { - return *m.State - } - return CompositeIndex_WRITE_ONLY -} - -func (m *CompositeIndex) GetOnlyUseIfRequired() bool { - if m != nil && m.OnlyUseIfRequired != nil { - return *m.OnlyUseIfRequired - } - return Default_CompositeIndex_OnlyUseIfRequired -} - -type IndexPostfix struct { - IndexValue []*IndexPostfix_IndexValue `protobuf:"bytes,1,rep,name=index_value,json=indexValue" json:"index_value,omitempty"` - Key *Reference `protobuf:"bytes,2,opt,name=key" json:"key,omitempty"` - Before *bool `protobuf:"varint,3,opt,name=before,def=1" json:"before,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *IndexPostfix) Reset() { *m = IndexPostfix{} } -func (m *IndexPostfix) String() string { return proto.CompactTextString(m) } -func (*IndexPostfix) ProtoMessage() {} -func (*IndexPostfix) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10} -} -func (m *IndexPostfix) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_IndexPostfix.Unmarshal(m, b) -} -func (m *IndexPostfix) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_IndexPostfix.Marshal(b, m, deterministic) -} -func (dst *IndexPostfix) XXX_Merge(src proto.Message) { - xxx_messageInfo_IndexPostfix.Merge(dst, src) -} -func (m *IndexPostfix) XXX_Size() int { - return xxx_messageInfo_IndexPostfix.Size(m) -} -func (m *IndexPostfix) XXX_DiscardUnknown() { - xxx_messageInfo_IndexPostfix.DiscardUnknown(m) -} - -var xxx_messageInfo_IndexPostfix proto.InternalMessageInfo - -const Default_IndexPostfix_Before bool = true - -func (m *IndexPostfix) GetIndexValue() []*IndexPostfix_IndexValue { - if m != nil { - return m.IndexValue - } - return nil -} - -func (m *IndexPostfix) GetKey() *Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *IndexPostfix) GetBefore() bool { - if m != nil && m.Before != nil { - return *m.Before - } - return Default_IndexPostfix_Before -} - -type IndexPostfix_IndexValue struct { - PropertyName *string `protobuf:"bytes,1,req,name=property_name,json=propertyName" json:"property_name,omitempty"` - Value *PropertyValue `protobuf:"bytes,2,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *IndexPostfix_IndexValue) Reset() { *m = IndexPostfix_IndexValue{} } -func (m *IndexPostfix_IndexValue) String() string { return proto.CompactTextString(m) } -func (*IndexPostfix_IndexValue) ProtoMessage() {} -func (*IndexPostfix_IndexValue) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10, 0} -} -func (m *IndexPostfix_IndexValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_IndexPostfix_IndexValue.Unmarshal(m, b) -} -func (m *IndexPostfix_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_IndexPostfix_IndexValue.Marshal(b, m, deterministic) -} -func (dst *IndexPostfix_IndexValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_IndexPostfix_IndexValue.Merge(dst, src) -} -func (m *IndexPostfix_IndexValue) XXX_Size() int { - return xxx_messageInfo_IndexPostfix_IndexValue.Size(m) -} -func (m *IndexPostfix_IndexValue) XXX_DiscardUnknown() { - xxx_messageInfo_IndexPostfix_IndexValue.DiscardUnknown(m) -} - -var xxx_messageInfo_IndexPostfix_IndexValue proto.InternalMessageInfo - -func (m *IndexPostfix_IndexValue) GetPropertyName() string { - if m != nil && m.PropertyName != nil { - return *m.PropertyName - } - return "" -} - -func (m *IndexPostfix_IndexValue) GetValue() *PropertyValue { - if m != nil { - return m.Value - } - return nil -} - -type IndexPosition struct { - Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Before *bool `protobuf:"varint,2,opt,name=before,def=1" json:"before,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *IndexPosition) Reset() { *m = IndexPosition{} } -func (m *IndexPosition) String() string { return proto.CompactTextString(m) } -func (*IndexPosition) ProtoMessage() {} -func (*IndexPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{11} -} -func (m *IndexPosition) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_IndexPosition.Unmarshal(m, b) -} -func (m *IndexPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_IndexPosition.Marshal(b, m, deterministic) -} -func (dst *IndexPosition) XXX_Merge(src proto.Message) { - xxx_messageInfo_IndexPosition.Merge(dst, src) -} -func (m *IndexPosition) XXX_Size() int { - return xxx_messageInfo_IndexPosition.Size(m) -} -func (m *IndexPosition) XXX_DiscardUnknown() { - xxx_messageInfo_IndexPosition.DiscardUnknown(m) -} - -var xxx_messageInfo_IndexPosition proto.InternalMessageInfo - -const Default_IndexPosition_Before bool = true - -func (m *IndexPosition) GetKey() string { - if m != nil && m.Key != nil { - return *m.Key - } - return "" -} - -func (m *IndexPosition) GetBefore() bool { - if m != nil && m.Before != nil { - return *m.Before - } - return Default_IndexPosition_Before -} - -type Snapshot struct { - Ts *int64 `protobuf:"varint,1,req,name=ts" json:"ts,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Snapshot) Reset() { *m = Snapshot{} } -func (m *Snapshot) String() string { return proto.CompactTextString(m) } -func (*Snapshot) ProtoMessage() {} -func (*Snapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12} -} -func (m *Snapshot) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Snapshot.Unmarshal(m, b) -} -func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic) -} -func (dst *Snapshot) XXX_Merge(src proto.Message) { - xxx_messageInfo_Snapshot.Merge(dst, src) -} -func (m *Snapshot) XXX_Size() int { - return xxx_messageInfo_Snapshot.Size(m) -} -func (m *Snapshot) XXX_DiscardUnknown() { - xxx_messageInfo_Snapshot.DiscardUnknown(m) -} - -var xxx_messageInfo_Snapshot proto.InternalMessageInfo - -func (m *Snapshot) GetTs() int64 { - if m != nil && m.Ts != nil { - return *m.Ts - } - return 0 -} - -type InternalHeader struct { - Qos *string `protobuf:"bytes,1,opt,name=qos" json:"qos,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *InternalHeader) Reset() { *m = InternalHeader{} } -func (m *InternalHeader) String() string { return proto.CompactTextString(m) } -func (*InternalHeader) ProtoMessage() {} -func (*InternalHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{13} -} -func (m *InternalHeader) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_InternalHeader.Unmarshal(m, b) -} -func (m *InternalHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_InternalHeader.Marshal(b, m, deterministic) -} -func (dst *InternalHeader) XXX_Merge(src proto.Message) { - xxx_messageInfo_InternalHeader.Merge(dst, src) -} -func (m *InternalHeader) XXX_Size() int { - return xxx_messageInfo_InternalHeader.Size(m) -} -func (m *InternalHeader) XXX_DiscardUnknown() { - xxx_messageInfo_InternalHeader.DiscardUnknown(m) -} - -var xxx_messageInfo_InternalHeader proto.InternalMessageInfo - -func (m *InternalHeader) GetQos() string { - if m != nil && m.Qos != nil { - return *m.Qos - } - return "" -} - -type Transaction struct { - Header *InternalHeader `protobuf:"bytes,4,opt,name=header" json:"header,omitempty"` - Handle *uint64 `protobuf:"fixed64,1,req,name=handle" json:"handle,omitempty"` - App *string `protobuf:"bytes,2,req,name=app" json:"app,omitempty"` - MarkChanges *bool `protobuf:"varint,3,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Transaction) Reset() { *m = Transaction{} } -func (m *Transaction) String() string { return proto.CompactTextString(m) } -func (*Transaction) ProtoMessage() {} -func (*Transaction) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{14} -} -func (m *Transaction) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Transaction.Unmarshal(m, b) -} -func (m *Transaction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Transaction.Marshal(b, m, deterministic) -} -func (dst *Transaction) XXX_Merge(src proto.Message) { - xxx_messageInfo_Transaction.Merge(dst, src) -} -func (m *Transaction) XXX_Size() int { - return xxx_messageInfo_Transaction.Size(m) -} -func (m *Transaction) XXX_DiscardUnknown() { - xxx_messageInfo_Transaction.DiscardUnknown(m) -} - -var xxx_messageInfo_Transaction proto.InternalMessageInfo - -const Default_Transaction_MarkChanges bool = false - -func (m *Transaction) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *Transaction) GetHandle() uint64 { - if m != nil && m.Handle != nil { - return *m.Handle - } - return 0 -} - -func (m *Transaction) GetApp() string { - if m != nil && m.App != nil { - return *m.App - } - return "" -} - -func (m *Transaction) GetMarkChanges() bool { - if m != nil && m.MarkChanges != nil { - return *m.MarkChanges - } - return Default_Transaction_MarkChanges -} - -type Query struct { - Header *InternalHeader `protobuf:"bytes,39,opt,name=header" json:"header,omitempty"` - App *string `protobuf:"bytes,1,req,name=app" json:"app,omitempty"` - NameSpace *string `protobuf:"bytes,29,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"` - Kind *string `protobuf:"bytes,3,opt,name=kind" json:"kind,omitempty"` - Ancestor *Reference `protobuf:"bytes,17,opt,name=ancestor" json:"ancestor,omitempty"` - Filter []*Query_Filter `protobuf:"group,4,rep,name=Filter,json=filter" json:"filter,omitempty"` - SearchQuery *string `protobuf:"bytes,8,opt,name=search_query,json=searchQuery" json:"search_query,omitempty"` - Order []*Query_Order `protobuf:"group,9,rep,name=Order,json=order" json:"order,omitempty"` - Hint *Query_Hint `protobuf:"varint,18,opt,name=hint,enum=appengine.Query_Hint" json:"hint,omitempty"` - Count *int32 `protobuf:"varint,23,opt,name=count" json:"count,omitempty"` - Offset *int32 `protobuf:"varint,12,opt,name=offset,def=0" json:"offset,omitempty"` - Limit *int32 `protobuf:"varint,16,opt,name=limit" json:"limit,omitempty"` - CompiledCursor *CompiledCursor `protobuf:"bytes,30,opt,name=compiled_cursor,json=compiledCursor" json:"compiled_cursor,omitempty"` - EndCompiledCursor *CompiledCursor `protobuf:"bytes,31,opt,name=end_compiled_cursor,json=endCompiledCursor" json:"end_compiled_cursor,omitempty"` - CompositeIndex []*CompositeIndex `protobuf:"bytes,19,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"` - RequirePerfectPlan *bool `protobuf:"varint,20,opt,name=require_perfect_plan,json=requirePerfectPlan,def=0" json:"require_perfect_plan,omitempty"` - KeysOnly *bool `protobuf:"varint,21,opt,name=keys_only,json=keysOnly,def=0" json:"keys_only,omitempty"` - Transaction *Transaction `protobuf:"bytes,22,opt,name=transaction" json:"transaction,omitempty"` - Compile *bool `protobuf:"varint,25,opt,name=compile,def=0" json:"compile,omitempty"` - FailoverMs *int64 `protobuf:"varint,26,opt,name=failover_ms,json=failoverMs" json:"failover_ms,omitempty"` - Strong *bool `protobuf:"varint,32,opt,name=strong" json:"strong,omitempty"` - PropertyName []string `protobuf:"bytes,33,rep,name=property_name,json=propertyName" json:"property_name,omitempty"` - GroupByPropertyName []string `protobuf:"bytes,34,rep,name=group_by_property_name,json=groupByPropertyName" json:"group_by_property_name,omitempty"` - Distinct *bool `protobuf:"varint,24,opt,name=distinct" json:"distinct,omitempty"` - MinSafeTimeSeconds *int64 `protobuf:"varint,35,opt,name=min_safe_time_seconds,json=minSafeTimeSeconds" json:"min_safe_time_seconds,omitempty"` - SafeReplicaName []string `protobuf:"bytes,36,rep,name=safe_replica_name,json=safeReplicaName" json:"safe_replica_name,omitempty"` - PersistOffset *bool `protobuf:"varint,37,opt,name=persist_offset,json=persistOffset,def=0" json:"persist_offset,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Query) Reset() { *m = Query{} } -func (m *Query) String() string { return proto.CompactTextString(m) } -func (*Query) ProtoMessage() {} -func (*Query) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15} -} -func (m *Query) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Query.Unmarshal(m, b) -} -func (m *Query) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Query.Marshal(b, m, deterministic) -} -func (dst *Query) XXX_Merge(src proto.Message) { - xxx_messageInfo_Query.Merge(dst, src) -} -func (m *Query) XXX_Size() int { - return xxx_messageInfo_Query.Size(m) -} -func (m *Query) XXX_DiscardUnknown() { - xxx_messageInfo_Query.DiscardUnknown(m) -} - -var xxx_messageInfo_Query proto.InternalMessageInfo - -const Default_Query_Offset int32 = 0 -const Default_Query_RequirePerfectPlan bool = false -const Default_Query_KeysOnly bool = false -const Default_Query_Compile bool = false -const Default_Query_PersistOffset bool = false - -func (m *Query) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *Query) GetApp() string { - if m != nil && m.App != nil { - return *m.App - } - return "" -} - -func (m *Query) GetNameSpace() string { - if m != nil && m.NameSpace != nil { - return *m.NameSpace - } - return "" -} - -func (m *Query) GetKind() string { - if m != nil && m.Kind != nil { - return *m.Kind - } - return "" -} - -func (m *Query) GetAncestor() *Reference { - if m != nil { - return m.Ancestor - } - return nil -} - -func (m *Query) GetFilter() []*Query_Filter { - if m != nil { - return m.Filter - } - return nil -} - -func (m *Query) GetSearchQuery() string { - if m != nil && m.SearchQuery != nil { - return *m.SearchQuery - } - return "" -} - -func (m *Query) GetOrder() []*Query_Order { - if m != nil { - return m.Order - } - return nil -} - -func (m *Query) GetHint() Query_Hint { - if m != nil && m.Hint != nil { - return *m.Hint - } - return Query_ORDER_FIRST -} - -func (m *Query) GetCount() int32 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -func (m *Query) GetOffset() int32 { - if m != nil && m.Offset != nil { - return *m.Offset - } - return Default_Query_Offset -} - -func (m *Query) GetLimit() int32 { - if m != nil && m.Limit != nil { - return *m.Limit - } - return 0 -} - -func (m *Query) GetCompiledCursor() *CompiledCursor { - if m != nil { - return m.CompiledCursor - } - return nil -} - -func (m *Query) GetEndCompiledCursor() *CompiledCursor { - if m != nil { - return m.EndCompiledCursor - } - return nil -} - -func (m *Query) GetCompositeIndex() []*CompositeIndex { - if m != nil { - return m.CompositeIndex - } - return nil -} - -func (m *Query) GetRequirePerfectPlan() bool { - if m != nil && m.RequirePerfectPlan != nil { - return *m.RequirePerfectPlan - } - return Default_Query_RequirePerfectPlan -} - -func (m *Query) GetKeysOnly() bool { - if m != nil && m.KeysOnly != nil { - return *m.KeysOnly - } - return Default_Query_KeysOnly -} - -func (m *Query) GetTransaction() *Transaction { - if m != nil { - return m.Transaction - } - return nil -} - -func (m *Query) GetCompile() bool { - if m != nil && m.Compile != nil { - return *m.Compile - } - return Default_Query_Compile -} - -func (m *Query) GetFailoverMs() int64 { - if m != nil && m.FailoverMs != nil { - return *m.FailoverMs - } - return 0 -} - -func (m *Query) GetStrong() bool { - if m != nil && m.Strong != nil { - return *m.Strong - } - return false -} - -func (m *Query) GetPropertyName() []string { - if m != nil { - return m.PropertyName - } - return nil -} - -func (m *Query) GetGroupByPropertyName() []string { - if m != nil { - return m.GroupByPropertyName - } - return nil -} - -func (m *Query) GetDistinct() bool { - if m != nil && m.Distinct != nil { - return *m.Distinct - } - return false -} - -func (m *Query) GetMinSafeTimeSeconds() int64 { - if m != nil && m.MinSafeTimeSeconds != nil { - return *m.MinSafeTimeSeconds - } - return 0 -} - -func (m *Query) GetSafeReplicaName() []string { - if m != nil { - return m.SafeReplicaName - } - return nil -} - -func (m *Query) GetPersistOffset() bool { - if m != nil && m.PersistOffset != nil { - return *m.PersistOffset - } - return Default_Query_PersistOffset -} - -type Query_Filter struct { - Op *Query_Filter_Operator `protobuf:"varint,6,req,name=op,enum=appengine.Query_Filter_Operator" json:"op,omitempty"` - Property []*Property `protobuf:"bytes,14,rep,name=property" json:"property,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Query_Filter) Reset() { *m = Query_Filter{} } -func (m *Query_Filter) String() string { return proto.CompactTextString(m) } -func (*Query_Filter) ProtoMessage() {} -func (*Query_Filter) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0} -} -func (m *Query_Filter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Query_Filter.Unmarshal(m, b) -} -func (m *Query_Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Query_Filter.Marshal(b, m, deterministic) -} -func (dst *Query_Filter) XXX_Merge(src proto.Message) { - xxx_messageInfo_Query_Filter.Merge(dst, src) -} -func (m *Query_Filter) XXX_Size() int { - return xxx_messageInfo_Query_Filter.Size(m) -} -func (m *Query_Filter) XXX_DiscardUnknown() { - xxx_messageInfo_Query_Filter.DiscardUnknown(m) -} - -var xxx_messageInfo_Query_Filter proto.InternalMessageInfo - -func (m *Query_Filter) GetOp() Query_Filter_Operator { - if m != nil && m.Op != nil { - return *m.Op - } - return Query_Filter_LESS_THAN -} - -func (m *Query_Filter) GetProperty() []*Property { - if m != nil { - return m.Property - } - return nil -} - -type Query_Order struct { - Property *string `protobuf:"bytes,10,req,name=property" json:"property,omitempty"` - Direction *Query_Order_Direction `protobuf:"varint,11,opt,name=direction,enum=appengine.Query_Order_Direction,def=1" json:"direction,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Query_Order) Reset() { *m = Query_Order{} } -func (m *Query_Order) String() string { return proto.CompactTextString(m) } -func (*Query_Order) ProtoMessage() {} -func (*Query_Order) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1} -} -func (m *Query_Order) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Query_Order.Unmarshal(m, b) -} -func (m *Query_Order) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Query_Order.Marshal(b, m, deterministic) -} -func (dst *Query_Order) XXX_Merge(src proto.Message) { - xxx_messageInfo_Query_Order.Merge(dst, src) -} -func (m *Query_Order) XXX_Size() int { - return xxx_messageInfo_Query_Order.Size(m) -} -func (m *Query_Order) XXX_DiscardUnknown() { - xxx_messageInfo_Query_Order.DiscardUnknown(m) -} - -var xxx_messageInfo_Query_Order proto.InternalMessageInfo - -const Default_Query_Order_Direction Query_Order_Direction = Query_Order_ASCENDING - -func (m *Query_Order) GetProperty() string { - if m != nil && m.Property != nil { - return *m.Property - } - return "" -} - -func (m *Query_Order) GetDirection() Query_Order_Direction { - if m != nil && m.Direction != nil { - return *m.Direction - } - return Default_Query_Order_Direction -} - -type CompiledQuery struct { - Primaryscan *CompiledQuery_PrimaryScan `protobuf:"group,1,req,name=PrimaryScan,json=primaryscan" json:"primaryscan,omitempty"` - Mergejoinscan []*CompiledQuery_MergeJoinScan `protobuf:"group,7,rep,name=MergeJoinScan,json=mergejoinscan" json:"mergejoinscan,omitempty"` - IndexDef *Index `protobuf:"bytes,21,opt,name=index_def,json=indexDef" json:"index_def,omitempty"` - Offset *int32 `protobuf:"varint,10,opt,name=offset,def=0" json:"offset,omitempty"` - Limit *int32 `protobuf:"varint,11,opt,name=limit" json:"limit,omitempty"` - KeysOnly *bool `protobuf:"varint,12,req,name=keys_only,json=keysOnly" json:"keys_only,omitempty"` - PropertyName []string `protobuf:"bytes,24,rep,name=property_name,json=propertyName" json:"property_name,omitempty"` - DistinctInfixSize *int32 `protobuf:"varint,25,opt,name=distinct_infix_size,json=distinctInfixSize" json:"distinct_infix_size,omitempty"` - Entityfilter *CompiledQuery_EntityFilter `protobuf:"group,13,opt,name=EntityFilter,json=entityfilter" json:"entityfilter,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompiledQuery) Reset() { *m = CompiledQuery{} } -func (m *CompiledQuery) String() string { return proto.CompactTextString(m) } -func (*CompiledQuery) ProtoMessage() {} -func (*CompiledQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16} -} -func (m *CompiledQuery) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompiledQuery.Unmarshal(m, b) -} -func (m *CompiledQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompiledQuery.Marshal(b, m, deterministic) -} -func (dst *CompiledQuery) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompiledQuery.Merge(dst, src) -} -func (m *CompiledQuery) XXX_Size() int { - return xxx_messageInfo_CompiledQuery.Size(m) -} -func (m *CompiledQuery) XXX_DiscardUnknown() { - xxx_messageInfo_CompiledQuery.DiscardUnknown(m) -} - -var xxx_messageInfo_CompiledQuery proto.InternalMessageInfo - -const Default_CompiledQuery_Offset int32 = 0 - -func (m *CompiledQuery) GetPrimaryscan() *CompiledQuery_PrimaryScan { - if m != nil { - return m.Primaryscan - } - return nil -} - -func (m *CompiledQuery) GetMergejoinscan() []*CompiledQuery_MergeJoinScan { - if m != nil { - return m.Mergejoinscan - } - return nil -} - -func (m *CompiledQuery) GetIndexDef() *Index { - if m != nil { - return m.IndexDef - } - return nil -} - -func (m *CompiledQuery) GetOffset() int32 { - if m != nil && m.Offset != nil { - return *m.Offset - } - return Default_CompiledQuery_Offset -} - -func (m *CompiledQuery) GetLimit() int32 { - if m != nil && m.Limit != nil { - return *m.Limit - } - return 0 -} - -func (m *CompiledQuery) GetKeysOnly() bool { - if m != nil && m.KeysOnly != nil { - return *m.KeysOnly - } - return false -} - -func (m *CompiledQuery) GetPropertyName() []string { - if m != nil { - return m.PropertyName - } - return nil -} - -func (m *CompiledQuery) GetDistinctInfixSize() int32 { - if m != nil && m.DistinctInfixSize != nil { - return *m.DistinctInfixSize - } - return 0 -} - -func (m *CompiledQuery) GetEntityfilter() *CompiledQuery_EntityFilter { - if m != nil { - return m.Entityfilter - } - return nil -} - -type CompiledQuery_PrimaryScan struct { - IndexName *string `protobuf:"bytes,2,opt,name=index_name,json=indexName" json:"index_name,omitempty"` - StartKey *string `protobuf:"bytes,3,opt,name=start_key,json=startKey" json:"start_key,omitempty"` - StartInclusive *bool `protobuf:"varint,4,opt,name=start_inclusive,json=startInclusive" json:"start_inclusive,omitempty"` - EndKey *string `protobuf:"bytes,5,opt,name=end_key,json=endKey" json:"end_key,omitempty"` - EndInclusive *bool `protobuf:"varint,6,opt,name=end_inclusive,json=endInclusive" json:"end_inclusive,omitempty"` - StartPostfixValue []string `protobuf:"bytes,22,rep,name=start_postfix_value,json=startPostfixValue" json:"start_postfix_value,omitempty"` - EndPostfixValue []string `protobuf:"bytes,23,rep,name=end_postfix_value,json=endPostfixValue" json:"end_postfix_value,omitempty"` - EndUnappliedLogTimestampUs *int64 `protobuf:"varint,19,opt,name=end_unapplied_log_timestamp_us,json=endUnappliedLogTimestampUs" json:"end_unapplied_log_timestamp_us,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompiledQuery_PrimaryScan) Reset() { *m = CompiledQuery_PrimaryScan{} } -func (m *CompiledQuery_PrimaryScan) String() string { return proto.CompactTextString(m) } -func (*CompiledQuery_PrimaryScan) ProtoMessage() {} -func (*CompiledQuery_PrimaryScan) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 0} -} -func (m *CompiledQuery_PrimaryScan) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompiledQuery_PrimaryScan.Unmarshal(m, b) -} -func (m *CompiledQuery_PrimaryScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompiledQuery_PrimaryScan.Marshal(b, m, deterministic) -} -func (dst *CompiledQuery_PrimaryScan) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompiledQuery_PrimaryScan.Merge(dst, src) -} -func (m *CompiledQuery_PrimaryScan) XXX_Size() int { - return xxx_messageInfo_CompiledQuery_PrimaryScan.Size(m) -} -func (m *CompiledQuery_PrimaryScan) XXX_DiscardUnknown() { - xxx_messageInfo_CompiledQuery_PrimaryScan.DiscardUnknown(m) -} - -var xxx_messageInfo_CompiledQuery_PrimaryScan proto.InternalMessageInfo - -func (m *CompiledQuery_PrimaryScan) GetIndexName() string { - if m != nil && m.IndexName != nil { - return *m.IndexName - } - return "" -} - -func (m *CompiledQuery_PrimaryScan) GetStartKey() string { - if m != nil && m.StartKey != nil { - return *m.StartKey - } - return "" -} - -func (m *CompiledQuery_PrimaryScan) GetStartInclusive() bool { - if m != nil && m.StartInclusive != nil { - return *m.StartInclusive - } - return false -} - -func (m *CompiledQuery_PrimaryScan) GetEndKey() string { - if m != nil && m.EndKey != nil { - return *m.EndKey - } - return "" -} - -func (m *CompiledQuery_PrimaryScan) GetEndInclusive() bool { - if m != nil && m.EndInclusive != nil { - return *m.EndInclusive - } - return false -} - -func (m *CompiledQuery_PrimaryScan) GetStartPostfixValue() []string { - if m != nil { - return m.StartPostfixValue - } - return nil -} - -func (m *CompiledQuery_PrimaryScan) GetEndPostfixValue() []string { - if m != nil { - return m.EndPostfixValue - } - return nil -} - -func (m *CompiledQuery_PrimaryScan) GetEndUnappliedLogTimestampUs() int64 { - if m != nil && m.EndUnappliedLogTimestampUs != nil { - return *m.EndUnappliedLogTimestampUs - } - return 0 -} - -type CompiledQuery_MergeJoinScan struct { - IndexName *string `protobuf:"bytes,8,req,name=index_name,json=indexName" json:"index_name,omitempty"` - PrefixValue []string `protobuf:"bytes,9,rep,name=prefix_value,json=prefixValue" json:"prefix_value,omitempty"` - ValuePrefix *bool `protobuf:"varint,20,opt,name=value_prefix,json=valuePrefix,def=0" json:"value_prefix,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompiledQuery_MergeJoinScan) Reset() { *m = CompiledQuery_MergeJoinScan{} } -func (m *CompiledQuery_MergeJoinScan) String() string { return proto.CompactTextString(m) } -func (*CompiledQuery_MergeJoinScan) ProtoMessage() {} -func (*CompiledQuery_MergeJoinScan) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 1} -} -func (m *CompiledQuery_MergeJoinScan) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompiledQuery_MergeJoinScan.Unmarshal(m, b) -} -func (m *CompiledQuery_MergeJoinScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompiledQuery_MergeJoinScan.Marshal(b, m, deterministic) -} -func (dst *CompiledQuery_MergeJoinScan) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompiledQuery_MergeJoinScan.Merge(dst, src) -} -func (m *CompiledQuery_MergeJoinScan) XXX_Size() int { - return xxx_messageInfo_CompiledQuery_MergeJoinScan.Size(m) -} -func (m *CompiledQuery_MergeJoinScan) XXX_DiscardUnknown() { - xxx_messageInfo_CompiledQuery_MergeJoinScan.DiscardUnknown(m) -} - -var xxx_messageInfo_CompiledQuery_MergeJoinScan proto.InternalMessageInfo - -const Default_CompiledQuery_MergeJoinScan_ValuePrefix bool = false - -func (m *CompiledQuery_MergeJoinScan) GetIndexName() string { - if m != nil && m.IndexName != nil { - return *m.IndexName - } - return "" -} - -func (m *CompiledQuery_MergeJoinScan) GetPrefixValue() []string { - if m != nil { - return m.PrefixValue - } - return nil -} - -func (m *CompiledQuery_MergeJoinScan) GetValuePrefix() bool { - if m != nil && m.ValuePrefix != nil { - return *m.ValuePrefix - } - return Default_CompiledQuery_MergeJoinScan_ValuePrefix -} - -type CompiledQuery_EntityFilter struct { - Distinct *bool `protobuf:"varint,14,opt,name=distinct,def=0" json:"distinct,omitempty"` - Kind *string `protobuf:"bytes,17,opt,name=kind" json:"kind,omitempty"` - Ancestor *Reference `protobuf:"bytes,18,opt,name=ancestor" json:"ancestor,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompiledQuery_EntityFilter) Reset() { *m = CompiledQuery_EntityFilter{} } -func (m *CompiledQuery_EntityFilter) String() string { return proto.CompactTextString(m) } -func (*CompiledQuery_EntityFilter) ProtoMessage() {} -func (*CompiledQuery_EntityFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 2} -} -func (m *CompiledQuery_EntityFilter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompiledQuery_EntityFilter.Unmarshal(m, b) -} -func (m *CompiledQuery_EntityFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompiledQuery_EntityFilter.Marshal(b, m, deterministic) -} -func (dst *CompiledQuery_EntityFilter) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompiledQuery_EntityFilter.Merge(dst, src) -} -func (m *CompiledQuery_EntityFilter) XXX_Size() int { - return xxx_messageInfo_CompiledQuery_EntityFilter.Size(m) -} -func (m *CompiledQuery_EntityFilter) XXX_DiscardUnknown() { - xxx_messageInfo_CompiledQuery_EntityFilter.DiscardUnknown(m) -} - -var xxx_messageInfo_CompiledQuery_EntityFilter proto.InternalMessageInfo - -const Default_CompiledQuery_EntityFilter_Distinct bool = false - -func (m *CompiledQuery_EntityFilter) GetDistinct() bool { - if m != nil && m.Distinct != nil { - return *m.Distinct - } - return Default_CompiledQuery_EntityFilter_Distinct -} - -func (m *CompiledQuery_EntityFilter) GetKind() string { - if m != nil && m.Kind != nil { - return *m.Kind - } - return "" -} - -func (m *CompiledQuery_EntityFilter) GetAncestor() *Reference { - if m != nil { - return m.Ancestor - } - return nil -} - -type CompiledCursor struct { - Position *CompiledCursor_Position `protobuf:"group,2,opt,name=Position,json=position" json:"position,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompiledCursor) Reset() { *m = CompiledCursor{} } -func (m *CompiledCursor) String() string { return proto.CompactTextString(m) } -func (*CompiledCursor) ProtoMessage() {} -func (*CompiledCursor) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17} -} -func (m *CompiledCursor) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompiledCursor.Unmarshal(m, b) -} -func (m *CompiledCursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompiledCursor.Marshal(b, m, deterministic) -} -func (dst *CompiledCursor) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompiledCursor.Merge(dst, src) -} -func (m *CompiledCursor) XXX_Size() int { - return xxx_messageInfo_CompiledCursor.Size(m) -} -func (m *CompiledCursor) XXX_DiscardUnknown() { - xxx_messageInfo_CompiledCursor.DiscardUnknown(m) -} - -var xxx_messageInfo_CompiledCursor proto.InternalMessageInfo - -func (m *CompiledCursor) GetPosition() *CompiledCursor_Position { - if m != nil { - return m.Position - } - return nil -} - -type CompiledCursor_Position struct { - StartKey *string `protobuf:"bytes,27,opt,name=start_key,json=startKey" json:"start_key,omitempty"` - Indexvalue []*CompiledCursor_Position_IndexValue `protobuf:"group,29,rep,name=IndexValue,json=indexvalue" json:"indexvalue,omitempty"` - Key *Reference `protobuf:"bytes,32,opt,name=key" json:"key,omitempty"` - StartInclusive *bool `protobuf:"varint,28,opt,name=start_inclusive,json=startInclusive,def=1" json:"start_inclusive,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompiledCursor_Position) Reset() { *m = CompiledCursor_Position{} } -func (m *CompiledCursor_Position) String() string { return proto.CompactTextString(m) } -func (*CompiledCursor_Position) ProtoMessage() {} -func (*CompiledCursor_Position) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0} -} -func (m *CompiledCursor_Position) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompiledCursor_Position.Unmarshal(m, b) -} -func (m *CompiledCursor_Position) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompiledCursor_Position.Marshal(b, m, deterministic) -} -func (dst *CompiledCursor_Position) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompiledCursor_Position.Merge(dst, src) -} -func (m *CompiledCursor_Position) XXX_Size() int { - return xxx_messageInfo_CompiledCursor_Position.Size(m) -} -func (m *CompiledCursor_Position) XXX_DiscardUnknown() { - xxx_messageInfo_CompiledCursor_Position.DiscardUnknown(m) -} - -var xxx_messageInfo_CompiledCursor_Position proto.InternalMessageInfo - -const Default_CompiledCursor_Position_StartInclusive bool = true - -func (m *CompiledCursor_Position) GetStartKey() string { - if m != nil && m.StartKey != nil { - return *m.StartKey - } - return "" -} - -func (m *CompiledCursor_Position) GetIndexvalue() []*CompiledCursor_Position_IndexValue { - if m != nil { - return m.Indexvalue - } - return nil -} - -func (m *CompiledCursor_Position) GetKey() *Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *CompiledCursor_Position) GetStartInclusive() bool { - if m != nil && m.StartInclusive != nil { - return *m.StartInclusive - } - return Default_CompiledCursor_Position_StartInclusive -} - -type CompiledCursor_Position_IndexValue struct { - Property *string `protobuf:"bytes,30,opt,name=property" json:"property,omitempty"` - Value *PropertyValue `protobuf:"bytes,31,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompiledCursor_Position_IndexValue) Reset() { *m = CompiledCursor_Position_IndexValue{} } -func (m *CompiledCursor_Position_IndexValue) String() string { return proto.CompactTextString(m) } -func (*CompiledCursor_Position_IndexValue) ProtoMessage() {} -func (*CompiledCursor_Position_IndexValue) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0, 0} -} -func (m *CompiledCursor_Position_IndexValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompiledCursor_Position_IndexValue.Unmarshal(m, b) -} -func (m *CompiledCursor_Position_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompiledCursor_Position_IndexValue.Marshal(b, m, deterministic) -} -func (dst *CompiledCursor_Position_IndexValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompiledCursor_Position_IndexValue.Merge(dst, src) -} -func (m *CompiledCursor_Position_IndexValue) XXX_Size() int { - return xxx_messageInfo_CompiledCursor_Position_IndexValue.Size(m) -} -func (m *CompiledCursor_Position_IndexValue) XXX_DiscardUnknown() { - xxx_messageInfo_CompiledCursor_Position_IndexValue.DiscardUnknown(m) -} - -var xxx_messageInfo_CompiledCursor_Position_IndexValue proto.InternalMessageInfo - -func (m *CompiledCursor_Position_IndexValue) GetProperty() string { - if m != nil && m.Property != nil { - return *m.Property - } - return "" -} - -func (m *CompiledCursor_Position_IndexValue) GetValue() *PropertyValue { - if m != nil { - return m.Value - } - return nil -} - -type Cursor struct { - Cursor *uint64 `protobuf:"fixed64,1,req,name=cursor" json:"cursor,omitempty"` - App *string `protobuf:"bytes,2,opt,name=app" json:"app,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cursor) Reset() { *m = Cursor{} } -func (m *Cursor) String() string { return proto.CompactTextString(m) } -func (*Cursor) ProtoMessage() {} -func (*Cursor) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{18} -} -func (m *Cursor) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Cursor.Unmarshal(m, b) -} -func (m *Cursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Cursor.Marshal(b, m, deterministic) -} -func (dst *Cursor) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cursor.Merge(dst, src) -} -func (m *Cursor) XXX_Size() int { - return xxx_messageInfo_Cursor.Size(m) -} -func (m *Cursor) XXX_DiscardUnknown() { - xxx_messageInfo_Cursor.DiscardUnknown(m) -} - -var xxx_messageInfo_Cursor proto.InternalMessageInfo - -func (m *Cursor) GetCursor() uint64 { - if m != nil && m.Cursor != nil { - return *m.Cursor - } - return 0 -} - -func (m *Cursor) GetApp() string { - if m != nil && m.App != nil { - return *m.App - } - return "" -} - -type Error struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Error) Reset() { *m = Error{} } -func (m *Error) String() string { return proto.CompactTextString(m) } -func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19} -} -func (m *Error) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Error.Unmarshal(m, b) -} -func (m *Error) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Error.Marshal(b, m, deterministic) -} -func (dst *Error) XXX_Merge(src proto.Message) { - xxx_messageInfo_Error.Merge(dst, src) -} -func (m *Error) XXX_Size() int { - return xxx_messageInfo_Error.Size(m) -} -func (m *Error) XXX_DiscardUnknown() { - xxx_messageInfo_Error.DiscardUnknown(m) -} - -var xxx_messageInfo_Error proto.InternalMessageInfo - -type Cost struct { - IndexWrites *int32 `protobuf:"varint,1,opt,name=index_writes,json=indexWrites" json:"index_writes,omitempty"` - IndexWriteBytes *int32 `protobuf:"varint,2,opt,name=index_write_bytes,json=indexWriteBytes" json:"index_write_bytes,omitempty"` - EntityWrites *int32 `protobuf:"varint,3,opt,name=entity_writes,json=entityWrites" json:"entity_writes,omitempty"` - EntityWriteBytes *int32 `protobuf:"varint,4,opt,name=entity_write_bytes,json=entityWriteBytes" json:"entity_write_bytes,omitempty"` - Commitcost *Cost_CommitCost `protobuf:"group,5,opt,name=CommitCost,json=commitcost" json:"commitcost,omitempty"` - ApproximateStorageDelta *int32 `protobuf:"varint,8,opt,name=approximate_storage_delta,json=approximateStorageDelta" json:"approximate_storage_delta,omitempty"` - IdSequenceUpdates *int32 `protobuf:"varint,9,opt,name=id_sequence_updates,json=idSequenceUpdates" json:"id_sequence_updates,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cost) Reset() { *m = Cost{} } -func (m *Cost) String() string { return proto.CompactTextString(m) } -func (*Cost) ProtoMessage() {} -func (*Cost) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20} -} -func (m *Cost) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Cost.Unmarshal(m, b) -} -func (m *Cost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Cost.Marshal(b, m, deterministic) -} -func (dst *Cost) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cost.Merge(dst, src) -} -func (m *Cost) XXX_Size() int { - return xxx_messageInfo_Cost.Size(m) -} -func (m *Cost) XXX_DiscardUnknown() { - xxx_messageInfo_Cost.DiscardUnknown(m) -} - -var xxx_messageInfo_Cost proto.InternalMessageInfo - -func (m *Cost) GetIndexWrites() int32 { - if m != nil && m.IndexWrites != nil { - return *m.IndexWrites - } - return 0 -} - -func (m *Cost) GetIndexWriteBytes() int32 { - if m != nil && m.IndexWriteBytes != nil { - return *m.IndexWriteBytes - } - return 0 -} - -func (m *Cost) GetEntityWrites() int32 { - if m != nil && m.EntityWrites != nil { - return *m.EntityWrites - } - return 0 -} - -func (m *Cost) GetEntityWriteBytes() int32 { - if m != nil && m.EntityWriteBytes != nil { - return *m.EntityWriteBytes - } - return 0 -} - -func (m *Cost) GetCommitcost() *Cost_CommitCost { - if m != nil { - return m.Commitcost - } - return nil -} - -func (m *Cost) GetApproximateStorageDelta() int32 { - if m != nil && m.ApproximateStorageDelta != nil { - return *m.ApproximateStorageDelta - } - return 0 -} - -func (m *Cost) GetIdSequenceUpdates() int32 { - if m != nil && m.IdSequenceUpdates != nil { - return *m.IdSequenceUpdates - } - return 0 -} - -type Cost_CommitCost struct { - RequestedEntityPuts *int32 `protobuf:"varint,6,opt,name=requested_entity_puts,json=requestedEntityPuts" json:"requested_entity_puts,omitempty"` - RequestedEntityDeletes *int32 `protobuf:"varint,7,opt,name=requested_entity_deletes,json=requestedEntityDeletes" json:"requested_entity_deletes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cost_CommitCost) Reset() { *m = Cost_CommitCost{} } -func (m *Cost_CommitCost) String() string { return proto.CompactTextString(m) } -func (*Cost_CommitCost) ProtoMessage() {} -func (*Cost_CommitCost) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20, 0} -} -func (m *Cost_CommitCost) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Cost_CommitCost.Unmarshal(m, b) -} -func (m *Cost_CommitCost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Cost_CommitCost.Marshal(b, m, deterministic) -} -func (dst *Cost_CommitCost) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cost_CommitCost.Merge(dst, src) -} -func (m *Cost_CommitCost) XXX_Size() int { - return xxx_messageInfo_Cost_CommitCost.Size(m) -} -func (m *Cost_CommitCost) XXX_DiscardUnknown() { - xxx_messageInfo_Cost_CommitCost.DiscardUnknown(m) -} - -var xxx_messageInfo_Cost_CommitCost proto.InternalMessageInfo - -func (m *Cost_CommitCost) GetRequestedEntityPuts() int32 { - if m != nil && m.RequestedEntityPuts != nil { - return *m.RequestedEntityPuts - } - return 0 -} - -func (m *Cost_CommitCost) GetRequestedEntityDeletes() int32 { - if m != nil && m.RequestedEntityDeletes != nil { - return *m.RequestedEntityDeletes - } - return 0 -} - -type GetRequest struct { - Header *InternalHeader `protobuf:"bytes,6,opt,name=header" json:"header,omitempty"` - Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"` - Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` - FailoverMs *int64 `protobuf:"varint,3,opt,name=failover_ms,json=failoverMs" json:"failover_ms,omitempty"` - Strong *bool `protobuf:"varint,4,opt,name=strong" json:"strong,omitempty"` - AllowDeferred *bool `protobuf:"varint,5,opt,name=allow_deferred,json=allowDeferred,def=0" json:"allow_deferred,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetRequest) Reset() { *m = GetRequest{} } -func (m *GetRequest) String() string { return proto.CompactTextString(m) } -func (*GetRequest) ProtoMessage() {} -func (*GetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{21} -} -func (m *GetRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetRequest.Unmarshal(m, b) -} -func (m *GetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetRequest.Marshal(b, m, deterministic) -} -func (dst *GetRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetRequest.Merge(dst, src) -} -func (m *GetRequest) XXX_Size() int { - return xxx_messageInfo_GetRequest.Size(m) -} -func (m *GetRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GetRequest proto.InternalMessageInfo - -const Default_GetRequest_AllowDeferred bool = false - -func (m *GetRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *GetRequest) GetKey() []*Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *GetRequest) GetTransaction() *Transaction { - if m != nil { - return m.Transaction - } - return nil -} - -func (m *GetRequest) GetFailoverMs() int64 { - if m != nil && m.FailoverMs != nil { - return *m.FailoverMs - } - return 0 -} - -func (m *GetRequest) GetStrong() bool { - if m != nil && m.Strong != nil { - return *m.Strong - } - return false -} - -func (m *GetRequest) GetAllowDeferred() bool { - if m != nil && m.AllowDeferred != nil { - return *m.AllowDeferred - } - return Default_GetRequest_AllowDeferred -} - -type GetResponse struct { - Entity []*GetResponse_Entity `protobuf:"group,1,rep,name=Entity,json=entity" json:"entity,omitempty"` - Deferred []*Reference `protobuf:"bytes,5,rep,name=deferred" json:"deferred,omitempty"` - InOrder *bool `protobuf:"varint,6,opt,name=in_order,json=inOrder,def=1" json:"in_order,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetResponse) Reset() { *m = GetResponse{} } -func (m *GetResponse) String() string { return proto.CompactTextString(m) } -func (*GetResponse) ProtoMessage() {} -func (*GetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22} -} -func (m *GetResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetResponse.Unmarshal(m, b) -} -func (m *GetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetResponse.Marshal(b, m, deterministic) -} -func (dst *GetResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetResponse.Merge(dst, src) -} -func (m *GetResponse) XXX_Size() int { - return xxx_messageInfo_GetResponse.Size(m) -} -func (m *GetResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_GetResponse proto.InternalMessageInfo - -const Default_GetResponse_InOrder bool = true - -func (m *GetResponse) GetEntity() []*GetResponse_Entity { - if m != nil { - return m.Entity - } - return nil -} - -func (m *GetResponse) GetDeferred() []*Reference { - if m != nil { - return m.Deferred - } - return nil -} - -func (m *GetResponse) GetInOrder() bool { - if m != nil && m.InOrder != nil { - return *m.InOrder - } - return Default_GetResponse_InOrder -} - -type GetResponse_Entity struct { - Entity *EntityProto `protobuf:"bytes,2,opt,name=entity" json:"entity,omitempty"` - Key *Reference `protobuf:"bytes,4,opt,name=key" json:"key,omitempty"` - Version *int64 `protobuf:"varint,3,opt,name=version" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetResponse_Entity) Reset() { *m = GetResponse_Entity{} } -func (m *GetResponse_Entity) String() string { return proto.CompactTextString(m) } -func (*GetResponse_Entity) ProtoMessage() {} -func (*GetResponse_Entity) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22, 0} -} -func (m *GetResponse_Entity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetResponse_Entity.Unmarshal(m, b) -} -func (m *GetResponse_Entity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetResponse_Entity.Marshal(b, m, deterministic) -} -func (dst *GetResponse_Entity) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetResponse_Entity.Merge(dst, src) -} -func (m *GetResponse_Entity) XXX_Size() int { - return xxx_messageInfo_GetResponse_Entity.Size(m) -} -func (m *GetResponse_Entity) XXX_DiscardUnknown() { - xxx_messageInfo_GetResponse_Entity.DiscardUnknown(m) -} - -var xxx_messageInfo_GetResponse_Entity proto.InternalMessageInfo - -func (m *GetResponse_Entity) GetEntity() *EntityProto { - if m != nil { - return m.Entity - } - return nil -} - -func (m *GetResponse_Entity) GetKey() *Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *GetResponse_Entity) GetVersion() int64 { - if m != nil && m.Version != nil { - return *m.Version - } - return 0 -} - -type PutRequest struct { - Header *InternalHeader `protobuf:"bytes,11,opt,name=header" json:"header,omitempty"` - Entity []*EntityProto `protobuf:"bytes,1,rep,name=entity" json:"entity,omitempty"` - Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` - CompositeIndex []*CompositeIndex `protobuf:"bytes,3,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"` - Trusted *bool `protobuf:"varint,4,opt,name=trusted,def=0" json:"trusted,omitempty"` - Force *bool `protobuf:"varint,7,opt,name=force,def=0" json:"force,omitempty"` - MarkChanges *bool `protobuf:"varint,8,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"` - Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"` - AutoIdPolicy *PutRequest_AutoIdPolicy `protobuf:"varint,10,opt,name=auto_id_policy,json=autoIdPolicy,enum=appengine.PutRequest_AutoIdPolicy,def=0" json:"auto_id_policy,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PutRequest) Reset() { *m = PutRequest{} } -func (m *PutRequest) String() string { return proto.CompactTextString(m) } -func (*PutRequest) ProtoMessage() {} -func (*PutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23} -} -func (m *PutRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PutRequest.Unmarshal(m, b) -} -func (m *PutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PutRequest.Marshal(b, m, deterministic) -} -func (dst *PutRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_PutRequest.Merge(dst, src) -} -func (m *PutRequest) XXX_Size() int { - return xxx_messageInfo_PutRequest.Size(m) -} -func (m *PutRequest) XXX_DiscardUnknown() { - xxx_messageInfo_PutRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_PutRequest proto.InternalMessageInfo - -const Default_PutRequest_Trusted bool = false -const Default_PutRequest_Force bool = false -const Default_PutRequest_MarkChanges bool = false -const Default_PutRequest_AutoIdPolicy PutRequest_AutoIdPolicy = PutRequest_CURRENT - -func (m *PutRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *PutRequest) GetEntity() []*EntityProto { - if m != nil { - return m.Entity - } - return nil -} - -func (m *PutRequest) GetTransaction() *Transaction { - if m != nil { - return m.Transaction - } - return nil -} - -func (m *PutRequest) GetCompositeIndex() []*CompositeIndex { - if m != nil { - return m.CompositeIndex - } - return nil -} - -func (m *PutRequest) GetTrusted() bool { - if m != nil && m.Trusted != nil { - return *m.Trusted - } - return Default_PutRequest_Trusted -} - -func (m *PutRequest) GetForce() bool { - if m != nil && m.Force != nil { - return *m.Force - } - return Default_PutRequest_Force -} - -func (m *PutRequest) GetMarkChanges() bool { - if m != nil && m.MarkChanges != nil { - return *m.MarkChanges - } - return Default_PutRequest_MarkChanges -} - -func (m *PutRequest) GetSnapshot() []*Snapshot { - if m != nil { - return m.Snapshot - } - return nil -} - -func (m *PutRequest) GetAutoIdPolicy() PutRequest_AutoIdPolicy { - if m != nil && m.AutoIdPolicy != nil { - return *m.AutoIdPolicy - } - return Default_PutRequest_AutoIdPolicy -} - -type PutResponse struct { - Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"` - Cost *Cost `protobuf:"bytes,2,opt,name=cost" json:"cost,omitempty"` - Version []int64 `protobuf:"varint,3,rep,name=version" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PutResponse) Reset() { *m = PutResponse{} } -func (m *PutResponse) String() string { return proto.CompactTextString(m) } -func (*PutResponse) ProtoMessage() {} -func (*PutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{24} -} -func (m *PutResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PutResponse.Unmarshal(m, b) -} -func (m *PutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PutResponse.Marshal(b, m, deterministic) -} -func (dst *PutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_PutResponse.Merge(dst, src) -} -func (m *PutResponse) XXX_Size() int { - return xxx_messageInfo_PutResponse.Size(m) -} -func (m *PutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_PutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_PutResponse proto.InternalMessageInfo - -func (m *PutResponse) GetKey() []*Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *PutResponse) GetCost() *Cost { - if m != nil { - return m.Cost - } - return nil -} - -func (m *PutResponse) GetVersion() []int64 { - if m != nil { - return m.Version - } - return nil -} - -type TouchRequest struct { - Header *InternalHeader `protobuf:"bytes,10,opt,name=header" json:"header,omitempty"` - Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"` - CompositeIndex []*CompositeIndex `protobuf:"bytes,2,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"` - Force *bool `protobuf:"varint,3,opt,name=force,def=0" json:"force,omitempty"` - Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *TouchRequest) Reset() { *m = TouchRequest{} } -func (m *TouchRequest) String() string { return proto.CompactTextString(m) } -func (*TouchRequest) ProtoMessage() {} -func (*TouchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{25} -} -func (m *TouchRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_TouchRequest.Unmarshal(m, b) -} -func (m *TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_TouchRequest.Marshal(b, m, deterministic) -} -func (dst *TouchRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_TouchRequest.Merge(dst, src) -} -func (m *TouchRequest) XXX_Size() int { - return xxx_messageInfo_TouchRequest.Size(m) -} -func (m *TouchRequest) XXX_DiscardUnknown() { - xxx_messageInfo_TouchRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_TouchRequest proto.InternalMessageInfo - -const Default_TouchRequest_Force bool = false - -func (m *TouchRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *TouchRequest) GetKey() []*Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *TouchRequest) GetCompositeIndex() []*CompositeIndex { - if m != nil { - return m.CompositeIndex - } - return nil -} - -func (m *TouchRequest) GetForce() bool { - if m != nil && m.Force != nil { - return *m.Force - } - return Default_TouchRequest_Force -} - -func (m *TouchRequest) GetSnapshot() []*Snapshot { - if m != nil { - return m.Snapshot - } - return nil -} - -type TouchResponse struct { - Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *TouchResponse) Reset() { *m = TouchResponse{} } -func (m *TouchResponse) String() string { return proto.CompactTextString(m) } -func (*TouchResponse) ProtoMessage() {} -func (*TouchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{26} -} -func (m *TouchResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_TouchResponse.Unmarshal(m, b) -} -func (m *TouchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_TouchResponse.Marshal(b, m, deterministic) -} -func (dst *TouchResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_TouchResponse.Merge(dst, src) -} -func (m *TouchResponse) XXX_Size() int { - return xxx_messageInfo_TouchResponse.Size(m) -} -func (m *TouchResponse) XXX_DiscardUnknown() { - xxx_messageInfo_TouchResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_TouchResponse proto.InternalMessageInfo - -func (m *TouchResponse) GetCost() *Cost { - if m != nil { - return m.Cost - } - return nil -} - -type DeleteRequest struct { - Header *InternalHeader `protobuf:"bytes,10,opt,name=header" json:"header,omitempty"` - Key []*Reference `protobuf:"bytes,6,rep,name=key" json:"key,omitempty"` - Transaction *Transaction `protobuf:"bytes,5,opt,name=transaction" json:"transaction,omitempty"` - Trusted *bool `protobuf:"varint,4,opt,name=trusted,def=0" json:"trusted,omitempty"` - Force *bool `protobuf:"varint,7,opt,name=force,def=0" json:"force,omitempty"` - MarkChanges *bool `protobuf:"varint,8,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"` - Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } -func (m *DeleteRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteRequest) ProtoMessage() {} -func (*DeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{27} -} -func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteRequest.Unmarshal(m, b) -} -func (m *DeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteRequest.Marshal(b, m, deterministic) -} -func (dst *DeleteRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteRequest.Merge(dst, src) -} -func (m *DeleteRequest) XXX_Size() int { - return xxx_messageInfo_DeleteRequest.Size(m) -} -func (m *DeleteRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteRequest proto.InternalMessageInfo - -const Default_DeleteRequest_Trusted bool = false -const Default_DeleteRequest_Force bool = false -const Default_DeleteRequest_MarkChanges bool = false - -func (m *DeleteRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *DeleteRequest) GetKey() []*Reference { - if m != nil { - return m.Key - } - return nil -} - -func (m *DeleteRequest) GetTransaction() *Transaction { - if m != nil { - return m.Transaction - } - return nil -} - -func (m *DeleteRequest) GetTrusted() bool { - if m != nil && m.Trusted != nil { - return *m.Trusted - } - return Default_DeleteRequest_Trusted -} - -func (m *DeleteRequest) GetForce() bool { - if m != nil && m.Force != nil { - return *m.Force - } - return Default_DeleteRequest_Force -} - -func (m *DeleteRequest) GetMarkChanges() bool { - if m != nil && m.MarkChanges != nil { - return *m.MarkChanges - } - return Default_DeleteRequest_MarkChanges -} - -func (m *DeleteRequest) GetSnapshot() []*Snapshot { - if m != nil { - return m.Snapshot - } - return nil -} - -type DeleteResponse struct { - Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"` - Version []int64 `protobuf:"varint,3,rep,name=version" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } -func (m *DeleteResponse) String() string { return proto.CompactTextString(m) } -func (*DeleteResponse) ProtoMessage() {} -func (*DeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{28} -} -func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteResponse.Unmarshal(m, b) -} -func (m *DeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteResponse.Marshal(b, m, deterministic) -} -func (dst *DeleteResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteResponse.Merge(dst, src) -} -func (m *DeleteResponse) XXX_Size() int { - return xxx_messageInfo_DeleteResponse.Size(m) -} -func (m *DeleteResponse) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteResponse proto.InternalMessageInfo - -func (m *DeleteResponse) GetCost() *Cost { - if m != nil { - return m.Cost - } - return nil -} - -func (m *DeleteResponse) GetVersion() []int64 { - if m != nil { - return m.Version - } - return nil -} - -type NextRequest struct { - Header *InternalHeader `protobuf:"bytes,5,opt,name=header" json:"header,omitempty"` - Cursor *Cursor `protobuf:"bytes,1,req,name=cursor" json:"cursor,omitempty"` - Count *int32 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` - Offset *int32 `protobuf:"varint,4,opt,name=offset,def=0" json:"offset,omitempty"` - Compile *bool `protobuf:"varint,3,opt,name=compile,def=0" json:"compile,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NextRequest) Reset() { *m = NextRequest{} } -func (m *NextRequest) String() string { return proto.CompactTextString(m) } -func (*NextRequest) ProtoMessage() {} -func (*NextRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{29} -} -func (m *NextRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NextRequest.Unmarshal(m, b) -} -func (m *NextRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NextRequest.Marshal(b, m, deterministic) -} -func (dst *NextRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NextRequest.Merge(dst, src) -} -func (m *NextRequest) XXX_Size() int { - return xxx_messageInfo_NextRequest.Size(m) -} -func (m *NextRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NextRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NextRequest proto.InternalMessageInfo - -const Default_NextRequest_Offset int32 = 0 -const Default_NextRequest_Compile bool = false - -func (m *NextRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *NextRequest) GetCursor() *Cursor { - if m != nil { - return m.Cursor - } - return nil -} - -func (m *NextRequest) GetCount() int32 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -func (m *NextRequest) GetOffset() int32 { - if m != nil && m.Offset != nil { - return *m.Offset - } - return Default_NextRequest_Offset -} - -func (m *NextRequest) GetCompile() bool { - if m != nil && m.Compile != nil { - return *m.Compile - } - return Default_NextRequest_Compile -} - -type QueryResult struct { - Cursor *Cursor `protobuf:"bytes,1,opt,name=cursor" json:"cursor,omitempty"` - Result []*EntityProto `protobuf:"bytes,2,rep,name=result" json:"result,omitempty"` - SkippedResults *int32 `protobuf:"varint,7,opt,name=skipped_results,json=skippedResults" json:"skipped_results,omitempty"` - MoreResults *bool `protobuf:"varint,3,req,name=more_results,json=moreResults" json:"more_results,omitempty"` - KeysOnly *bool `protobuf:"varint,4,opt,name=keys_only,json=keysOnly" json:"keys_only,omitempty"` - IndexOnly *bool `protobuf:"varint,9,opt,name=index_only,json=indexOnly" json:"index_only,omitempty"` - SmallOps *bool `protobuf:"varint,10,opt,name=small_ops,json=smallOps" json:"small_ops,omitempty"` - CompiledQuery *CompiledQuery `protobuf:"bytes,5,opt,name=compiled_query,json=compiledQuery" json:"compiled_query,omitempty"` - CompiledCursor *CompiledCursor `protobuf:"bytes,6,opt,name=compiled_cursor,json=compiledCursor" json:"compiled_cursor,omitempty"` - Index []*CompositeIndex `protobuf:"bytes,8,rep,name=index" json:"index,omitempty"` - Version []int64 `protobuf:"varint,11,rep,name=version" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *QueryResult) Reset() { *m = QueryResult{} } -func (m *QueryResult) String() string { return proto.CompactTextString(m) } -func (*QueryResult) ProtoMessage() {} -func (*QueryResult) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{30} -} -func (m *QueryResult) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_QueryResult.Unmarshal(m, b) -} -func (m *QueryResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_QueryResult.Marshal(b, m, deterministic) -} -func (dst *QueryResult) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryResult.Merge(dst, src) -} -func (m *QueryResult) XXX_Size() int { - return xxx_messageInfo_QueryResult.Size(m) -} -func (m *QueryResult) XXX_DiscardUnknown() { - xxx_messageInfo_QueryResult.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryResult proto.InternalMessageInfo - -func (m *QueryResult) GetCursor() *Cursor { - if m != nil { - return m.Cursor - } - return nil -} - -func (m *QueryResult) GetResult() []*EntityProto { - if m != nil { - return m.Result - } - return nil -} - -func (m *QueryResult) GetSkippedResults() int32 { - if m != nil && m.SkippedResults != nil { - return *m.SkippedResults - } - return 0 -} - -func (m *QueryResult) GetMoreResults() bool { - if m != nil && m.MoreResults != nil { - return *m.MoreResults - } - return false -} - -func (m *QueryResult) GetKeysOnly() bool { - if m != nil && m.KeysOnly != nil { - return *m.KeysOnly - } - return false -} - -func (m *QueryResult) GetIndexOnly() bool { - if m != nil && m.IndexOnly != nil { - return *m.IndexOnly - } - return false -} - -func (m *QueryResult) GetSmallOps() bool { - if m != nil && m.SmallOps != nil { - return *m.SmallOps - } - return false -} - -func (m *QueryResult) GetCompiledQuery() *CompiledQuery { - if m != nil { - return m.CompiledQuery - } - return nil -} - -func (m *QueryResult) GetCompiledCursor() *CompiledCursor { - if m != nil { - return m.CompiledCursor - } - return nil -} - -func (m *QueryResult) GetIndex() []*CompositeIndex { - if m != nil { - return m.Index - } - return nil -} - -func (m *QueryResult) GetVersion() []int64 { - if m != nil { - return m.Version - } - return nil -} - -type AllocateIdsRequest struct { - Header *InternalHeader `protobuf:"bytes,4,opt,name=header" json:"header,omitempty"` - ModelKey *Reference `protobuf:"bytes,1,opt,name=model_key,json=modelKey" json:"model_key,omitempty"` - Size *int64 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` - Max *int64 `protobuf:"varint,3,opt,name=max" json:"max,omitempty"` - Reserve []*Reference `protobuf:"bytes,5,rep,name=reserve" json:"reserve,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *AllocateIdsRequest) Reset() { *m = AllocateIdsRequest{} } -func (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) } -func (*AllocateIdsRequest) ProtoMessage() {} -func (*AllocateIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{31} -} -func (m *AllocateIdsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AllocateIdsRequest.Unmarshal(m, b) -} -func (m *AllocateIdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AllocateIdsRequest.Marshal(b, m, deterministic) -} -func (dst *AllocateIdsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllocateIdsRequest.Merge(dst, src) -} -func (m *AllocateIdsRequest) XXX_Size() int { - return xxx_messageInfo_AllocateIdsRequest.Size(m) -} -func (m *AllocateIdsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AllocateIdsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_AllocateIdsRequest proto.InternalMessageInfo - -func (m *AllocateIdsRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AllocateIdsRequest) GetModelKey() *Reference { - if m != nil { - return m.ModelKey - } - return nil -} - -func (m *AllocateIdsRequest) GetSize() int64 { - if m != nil && m.Size != nil { - return *m.Size - } - return 0 -} - -func (m *AllocateIdsRequest) GetMax() int64 { - if m != nil && m.Max != nil { - return *m.Max - } - return 0 -} - -func (m *AllocateIdsRequest) GetReserve() []*Reference { - if m != nil { - return m.Reserve - } - return nil -} - -type AllocateIdsResponse struct { - Start *int64 `protobuf:"varint,1,req,name=start" json:"start,omitempty"` - End *int64 `protobuf:"varint,2,req,name=end" json:"end,omitempty"` - Cost *Cost `protobuf:"bytes,3,opt,name=cost" json:"cost,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *AllocateIdsResponse) Reset() { *m = AllocateIdsResponse{} } -func (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) } -func (*AllocateIdsResponse) ProtoMessage() {} -func (*AllocateIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{32} -} -func (m *AllocateIdsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AllocateIdsResponse.Unmarshal(m, b) -} -func (m *AllocateIdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AllocateIdsResponse.Marshal(b, m, deterministic) -} -func (dst *AllocateIdsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllocateIdsResponse.Merge(dst, src) -} -func (m *AllocateIdsResponse) XXX_Size() int { - return xxx_messageInfo_AllocateIdsResponse.Size(m) -} -func (m *AllocateIdsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_AllocateIdsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_AllocateIdsResponse proto.InternalMessageInfo - -func (m *AllocateIdsResponse) GetStart() int64 { - if m != nil && m.Start != nil { - return *m.Start - } - return 0 -} - -func (m *AllocateIdsResponse) GetEnd() int64 { - if m != nil && m.End != nil { - return *m.End - } - return 0 -} - -func (m *AllocateIdsResponse) GetCost() *Cost { - if m != nil { - return m.Cost - } - return nil -} - -type CompositeIndices struct { - Index []*CompositeIndex `protobuf:"bytes,1,rep,name=index" json:"index,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CompositeIndices) Reset() { *m = CompositeIndices{} } -func (m *CompositeIndices) String() string { return proto.CompactTextString(m) } -func (*CompositeIndices) ProtoMessage() {} -func (*CompositeIndices) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{33} -} -func (m *CompositeIndices) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CompositeIndices.Unmarshal(m, b) -} -func (m *CompositeIndices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CompositeIndices.Marshal(b, m, deterministic) -} -func (dst *CompositeIndices) XXX_Merge(src proto.Message) { - xxx_messageInfo_CompositeIndices.Merge(dst, src) -} -func (m *CompositeIndices) XXX_Size() int { - return xxx_messageInfo_CompositeIndices.Size(m) -} -func (m *CompositeIndices) XXX_DiscardUnknown() { - xxx_messageInfo_CompositeIndices.DiscardUnknown(m) -} - -var xxx_messageInfo_CompositeIndices proto.InternalMessageInfo - -func (m *CompositeIndices) GetIndex() []*CompositeIndex { - if m != nil { - return m.Index - } - return nil -} - -type AddActionsRequest struct { - Header *InternalHeader `protobuf:"bytes,3,opt,name=header" json:"header,omitempty"` - Transaction *Transaction `protobuf:"bytes,1,req,name=transaction" json:"transaction,omitempty"` - Action []*Action `protobuf:"bytes,2,rep,name=action" json:"action,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *AddActionsRequest) Reset() { *m = AddActionsRequest{} } -func (m *AddActionsRequest) String() string { return proto.CompactTextString(m) } -func (*AddActionsRequest) ProtoMessage() {} -func (*AddActionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{34} -} -func (m *AddActionsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AddActionsRequest.Unmarshal(m, b) -} -func (m *AddActionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AddActionsRequest.Marshal(b, m, deterministic) -} -func (dst *AddActionsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AddActionsRequest.Merge(dst, src) -} -func (m *AddActionsRequest) XXX_Size() int { - return xxx_messageInfo_AddActionsRequest.Size(m) -} -func (m *AddActionsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AddActionsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_AddActionsRequest proto.InternalMessageInfo - -func (m *AddActionsRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *AddActionsRequest) GetTransaction() *Transaction { - if m != nil { - return m.Transaction - } - return nil -} - -func (m *AddActionsRequest) GetAction() []*Action { - if m != nil { - return m.Action - } - return nil -} - -type AddActionsResponse struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *AddActionsResponse) Reset() { *m = AddActionsResponse{} } -func (m *AddActionsResponse) String() string { return proto.CompactTextString(m) } -func (*AddActionsResponse) ProtoMessage() {} -func (*AddActionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{35} -} -func (m *AddActionsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AddActionsResponse.Unmarshal(m, b) -} -func (m *AddActionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AddActionsResponse.Marshal(b, m, deterministic) -} -func (dst *AddActionsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_AddActionsResponse.Merge(dst, src) -} -func (m *AddActionsResponse) XXX_Size() int { - return xxx_messageInfo_AddActionsResponse.Size(m) -} -func (m *AddActionsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_AddActionsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_AddActionsResponse proto.InternalMessageInfo - -type BeginTransactionRequest struct { - Header *InternalHeader `protobuf:"bytes,3,opt,name=header" json:"header,omitempty"` - App *string `protobuf:"bytes,1,req,name=app" json:"app,omitempty"` - AllowMultipleEg *bool `protobuf:"varint,2,opt,name=allow_multiple_eg,json=allowMultipleEg,def=0" json:"allow_multiple_eg,omitempty"` - DatabaseId *string `protobuf:"bytes,4,opt,name=database_id,json=databaseId" json:"database_id,omitempty"` - Mode *BeginTransactionRequest_TransactionMode `protobuf:"varint,5,opt,name=mode,enum=appengine.BeginTransactionRequest_TransactionMode,def=0" json:"mode,omitempty"` - PreviousTransaction *Transaction `protobuf:"bytes,7,opt,name=previous_transaction,json=previousTransaction" json:"previous_transaction,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } -func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } -func (*BeginTransactionRequest) ProtoMessage() {} -func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36} -} -func (m *BeginTransactionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BeginTransactionRequest.Unmarshal(m, b) -} -func (m *BeginTransactionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BeginTransactionRequest.Marshal(b, m, deterministic) -} -func (dst *BeginTransactionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BeginTransactionRequest.Merge(dst, src) -} -func (m *BeginTransactionRequest) XXX_Size() int { - return xxx_messageInfo_BeginTransactionRequest.Size(m) -} -func (m *BeginTransactionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_BeginTransactionRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_BeginTransactionRequest proto.InternalMessageInfo - -const Default_BeginTransactionRequest_AllowMultipleEg bool = false -const Default_BeginTransactionRequest_Mode BeginTransactionRequest_TransactionMode = BeginTransactionRequest_UNKNOWN - -func (m *BeginTransactionRequest) GetHeader() *InternalHeader { - if m != nil { - return m.Header - } - return nil -} - -func (m *BeginTransactionRequest) GetApp() string { - if m != nil && m.App != nil { - return *m.App - } - return "" -} - -func (m *BeginTransactionRequest) GetAllowMultipleEg() bool { - if m != nil && m.AllowMultipleEg != nil { - return *m.AllowMultipleEg - } - return Default_BeginTransactionRequest_AllowMultipleEg -} - -func (m *BeginTransactionRequest) GetDatabaseId() string { - if m != nil && m.DatabaseId != nil { - return *m.DatabaseId - } - return "" -} - -func (m *BeginTransactionRequest) GetMode() BeginTransactionRequest_TransactionMode { - if m != nil && m.Mode != nil { - return *m.Mode - } - return Default_BeginTransactionRequest_Mode -} - -func (m *BeginTransactionRequest) GetPreviousTransaction() *Transaction { - if m != nil { - return m.PreviousTransaction - } - return nil -} - -type CommitResponse struct { - Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"` - Version []*CommitResponse_Version `protobuf:"group,3,rep,name=Version,json=version" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CommitResponse) Reset() { *m = CommitResponse{} } -func (m *CommitResponse) String() string { return proto.CompactTextString(m) } -func (*CommitResponse) ProtoMessage() {} -func (*CommitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37} -} -func (m *CommitResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CommitResponse.Unmarshal(m, b) -} -func (m *CommitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CommitResponse.Marshal(b, m, deterministic) -} -func (dst *CommitResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CommitResponse.Merge(dst, src) -} -func (m *CommitResponse) XXX_Size() int { - return xxx_messageInfo_CommitResponse.Size(m) -} -func (m *CommitResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CommitResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_CommitResponse proto.InternalMessageInfo - -func (m *CommitResponse) GetCost() *Cost { - if m != nil { - return m.Cost - } - return nil -} - -func (m *CommitResponse) GetVersion() []*CommitResponse_Version { - if m != nil { - return m.Version - } - return nil -} - -type CommitResponse_Version struct { - RootEntityKey *Reference `protobuf:"bytes,4,req,name=root_entity_key,json=rootEntityKey" json:"root_entity_key,omitempty"` - Version *int64 `protobuf:"varint,5,req,name=version" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CommitResponse_Version) Reset() { *m = CommitResponse_Version{} } -func (m *CommitResponse_Version) String() string { return proto.CompactTextString(m) } -func (*CommitResponse_Version) ProtoMessage() {} -func (*CommitResponse_Version) Descriptor() ([]byte, []int) { - return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37, 0} -} -func (m *CommitResponse_Version) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CommitResponse_Version.Unmarshal(m, b) -} -func (m *CommitResponse_Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CommitResponse_Version.Marshal(b, m, deterministic) -} -func (dst *CommitResponse_Version) XXX_Merge(src proto.Message) { - xxx_messageInfo_CommitResponse_Version.Merge(dst, src) -} -func (m *CommitResponse_Version) XXX_Size() int { - return xxx_messageInfo_CommitResponse_Version.Size(m) -} -func (m *CommitResponse_Version) XXX_DiscardUnknown() { - xxx_messageInfo_CommitResponse_Version.DiscardUnknown(m) -} - -var xxx_messageInfo_CommitResponse_Version proto.InternalMessageInfo - -func (m *CommitResponse_Version) GetRootEntityKey() *Reference { - if m != nil { - return m.RootEntityKey - } - return nil -} - -func (m *CommitResponse_Version) GetVersion() int64 { - if m != nil && m.Version != nil { - return *m.Version - } - return 0 -} - -func init() { - proto.RegisterType((*Action)(nil), "appengine.Action") - proto.RegisterType((*PropertyValue)(nil), "appengine.PropertyValue") - proto.RegisterType((*PropertyValue_PointValue)(nil), "appengine.PropertyValue.PointValue") - proto.RegisterType((*PropertyValue_UserValue)(nil), "appengine.PropertyValue.UserValue") - proto.RegisterType((*PropertyValue_ReferenceValue)(nil), "appengine.PropertyValue.ReferenceValue") - proto.RegisterType((*PropertyValue_ReferenceValue_PathElement)(nil), "appengine.PropertyValue.ReferenceValue.PathElement") - proto.RegisterType((*Property)(nil), "appengine.Property") - proto.RegisterType((*Path)(nil), "appengine.Path") - proto.RegisterType((*Path_Element)(nil), "appengine.Path.Element") - proto.RegisterType((*Reference)(nil), "appengine.Reference") - proto.RegisterType((*User)(nil), "appengine.User") - proto.RegisterType((*EntityProto)(nil), "appengine.EntityProto") - proto.RegisterType((*CompositeProperty)(nil), "appengine.CompositeProperty") - proto.RegisterType((*Index)(nil), "appengine.Index") - proto.RegisterType((*Index_Property)(nil), "appengine.Index.Property") - proto.RegisterType((*CompositeIndex)(nil), "appengine.CompositeIndex") - proto.RegisterType((*IndexPostfix)(nil), "appengine.IndexPostfix") - proto.RegisterType((*IndexPostfix_IndexValue)(nil), "appengine.IndexPostfix.IndexValue") - proto.RegisterType((*IndexPosition)(nil), "appengine.IndexPosition") - proto.RegisterType((*Snapshot)(nil), "appengine.Snapshot") - proto.RegisterType((*InternalHeader)(nil), "appengine.InternalHeader") - proto.RegisterType((*Transaction)(nil), "appengine.Transaction") - proto.RegisterType((*Query)(nil), "appengine.Query") - proto.RegisterType((*Query_Filter)(nil), "appengine.Query.Filter") - proto.RegisterType((*Query_Order)(nil), "appengine.Query.Order") - proto.RegisterType((*CompiledQuery)(nil), "appengine.CompiledQuery") - proto.RegisterType((*CompiledQuery_PrimaryScan)(nil), "appengine.CompiledQuery.PrimaryScan") - proto.RegisterType((*CompiledQuery_MergeJoinScan)(nil), "appengine.CompiledQuery.MergeJoinScan") - proto.RegisterType((*CompiledQuery_EntityFilter)(nil), "appengine.CompiledQuery.EntityFilter") - proto.RegisterType((*CompiledCursor)(nil), "appengine.CompiledCursor") - proto.RegisterType((*CompiledCursor_Position)(nil), "appengine.CompiledCursor.Position") - proto.RegisterType((*CompiledCursor_Position_IndexValue)(nil), "appengine.CompiledCursor.Position.IndexValue") - proto.RegisterType((*Cursor)(nil), "appengine.Cursor") - proto.RegisterType((*Error)(nil), "appengine.Error") - proto.RegisterType((*Cost)(nil), "appengine.Cost") - proto.RegisterType((*Cost_CommitCost)(nil), "appengine.Cost.CommitCost") - proto.RegisterType((*GetRequest)(nil), "appengine.GetRequest") - proto.RegisterType((*GetResponse)(nil), "appengine.GetResponse") - proto.RegisterType((*GetResponse_Entity)(nil), "appengine.GetResponse.Entity") - proto.RegisterType((*PutRequest)(nil), "appengine.PutRequest") - proto.RegisterType((*PutResponse)(nil), "appengine.PutResponse") - proto.RegisterType((*TouchRequest)(nil), "appengine.TouchRequest") - proto.RegisterType((*TouchResponse)(nil), "appengine.TouchResponse") - proto.RegisterType((*DeleteRequest)(nil), "appengine.DeleteRequest") - proto.RegisterType((*DeleteResponse)(nil), "appengine.DeleteResponse") - proto.RegisterType((*NextRequest)(nil), "appengine.NextRequest") - proto.RegisterType((*QueryResult)(nil), "appengine.QueryResult") - proto.RegisterType((*AllocateIdsRequest)(nil), "appengine.AllocateIdsRequest") - proto.RegisterType((*AllocateIdsResponse)(nil), "appengine.AllocateIdsResponse") - proto.RegisterType((*CompositeIndices)(nil), "appengine.CompositeIndices") - proto.RegisterType((*AddActionsRequest)(nil), "appengine.AddActionsRequest") - proto.RegisterType((*AddActionsResponse)(nil), "appengine.AddActionsResponse") - proto.RegisterType((*BeginTransactionRequest)(nil), "appengine.BeginTransactionRequest") - proto.RegisterType((*CommitResponse)(nil), "appengine.CommitResponse") - proto.RegisterType((*CommitResponse_Version)(nil), "appengine.CommitResponse.Version") -} - -func init() { - proto.RegisterFile("google.golang.org/appengine/internal/datastore/datastore_v3.proto", fileDescriptor_datastore_v3_83b17b80c34f6179) -} - -var fileDescriptor_datastore_v3_83b17b80c34f6179 = []byte{ - // 4156 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0xe3, 0x46, - 0x76, 0x37, 0xc1, 0xef, 0x47, 0x89, 0x82, 0x5a, 0xf3, 0xc1, 0xa1, 0x3f, 0x46, 0xc6, 0xac, 0x6d, - 0xd9, 0x6b, 0x73, 0x6c, 0xf9, 0x23, 0x5b, 0x4a, 0x76, 0x1d, 0x4a, 0xc4, 0x68, 0x90, 0xa1, 0x48, - 0xb9, 0x09, 0xd9, 0x9e, 0x5c, 0x50, 0x18, 0xa2, 0x29, 0x21, 0x43, 0x02, 0x30, 0x00, 0x6a, 0x46, - 0x93, 0xe4, 0x90, 0x4b, 0x2a, 0x55, 0x5b, 0xa9, 0x1c, 0x92, 0x4a, 0x25, 0xf9, 0x07, 0x72, 0xc8, - 0x39, 0x95, 0xaa, 0x54, 0xf6, 0x98, 0x5b, 0x0e, 0x7b, 0xc9, 0x31, 0x95, 0x73, 0xf2, 0x27, 0x24, - 0x39, 0xa4, 0xfa, 0x75, 0x03, 0x02, 0x28, 0x4a, 0x23, 0x6d, 0xf6, 0x90, 0x13, 0xd1, 0xef, 0xfd, - 0xba, 0xf1, 0xfa, 0xf5, 0xfb, 0x6c, 0x10, 0xba, 0xc7, 0xbe, 0x7f, 0x3c, 0x65, 0x9d, 0x63, 0x7f, - 0x6a, 0x7b, 0xc7, 0x1d, 0x3f, 0x3c, 0x7e, 0x68, 0x07, 0x01, 0xf3, 0x8e, 0x5d, 0x8f, 0x3d, 0x74, - 0xbd, 0x98, 0x85, 0x9e, 0x3d, 0x7d, 0xe8, 0xd8, 0xb1, 0x1d, 0xc5, 0x7e, 0xc8, 0xce, 0x9f, 0xac, - 0xd3, 0xcf, 0x3b, 0x41, 0xe8, 0xc7, 0x3e, 0xa9, 0xa7, 0x13, 0xb4, 0x1a, 0x54, 0xba, 0xe3, 0xd8, - 0xf5, 0x3d, 0xed, 0x1f, 0x2b, 0xb0, 0x7a, 0x18, 0xfa, 0x01, 0x0b, 0xe3, 0xb3, 0x6f, 0xed, 0xe9, - 0x9c, 0x91, 0x77, 0x00, 0x5c, 0x2f, 0xfe, 0xea, 0x0b, 0x1c, 0xb5, 0x0a, 0x9b, 0x85, 0xad, 0x22, - 0xcd, 0x50, 0x88, 0x06, 0x2b, 0xcf, 0x7c, 0x7f, 0xca, 0x6c, 0x4f, 0x20, 0x94, 0xcd, 0xc2, 0x56, - 0x8d, 0xe6, 0x68, 0x64, 0x13, 0x1a, 0x51, 0x1c, 0xba, 0xde, 0xb1, 0x80, 0x14, 0x37, 0x0b, 0x5b, - 0x75, 0x9a, 0x25, 0x71, 0x84, 0xe3, 0xcf, 0x9f, 0x4d, 0x99, 0x40, 0x94, 0x36, 0x0b, 0x5b, 0x05, - 0x9a, 0x25, 0x91, 0x3d, 0x80, 0xc0, 0x77, 0xbd, 0xf8, 0x14, 0x01, 0xe5, 0xcd, 0xc2, 0x16, 0x6c, - 0x3f, 0xe8, 0xa4, 0x7b, 0xe8, 0xe4, 0xa4, 0xee, 0x1c, 0x72, 0x28, 0x3e, 0xd2, 0xcc, 0x34, 0xf2, - 0xdb, 0x50, 0x9f, 0x47, 0x2c, 0x14, 0x6b, 0xd4, 0x70, 0x0d, 0xed, 0xd2, 0x35, 0x8e, 0x22, 0x16, - 0x8a, 0x25, 0xce, 0x27, 0x91, 0x21, 0x34, 0x43, 0x36, 0x61, 0x21, 0xf3, 0xc6, 0x4c, 0x2c, 0xb3, - 0x82, 0xcb, 0x7c, 0x70, 0xe9, 0x32, 0x34, 0x81, 0x8b, 0xb5, 0x16, 0xa6, 0xb7, 0xb7, 0x00, 0xce, - 0x85, 0x25, 0x2b, 0x50, 0x78, 0xd9, 0xaa, 0x6c, 0x2a, 0x5b, 0x05, 0x5a, 0x78, 0xc9, 0x47, 0x67, - 0xad, 0xaa, 0x18, 0x9d, 0xb5, 0xff, 0xa9, 0x00, 0xf5, 0x54, 0x26, 0x72, 0x0b, 0xca, 0x6c, 0x66, - 0xbb, 0xd3, 0x56, 0x7d, 0x53, 0xd9, 0xaa, 0x53, 0x31, 0x20, 0xf7, 0xa1, 0x61, 0xcf, 0xe3, 0x13, - 0xcb, 0xf1, 0x67, 0xb6, 0xeb, 0xb5, 0x00, 0x79, 0xc0, 0x49, 0x3d, 0xa4, 0x90, 0x36, 0xd4, 0x3c, - 0x77, 0xfc, 0xdc, 0xb3, 0x67, 0xac, 0xd5, 0xc0, 0x73, 0x48, 0xc7, 0xe4, 0x13, 0x20, 0x13, 0xe6, - 0xb0, 0xd0, 0x8e, 0x99, 0x63, 0xb9, 0x0e, 0xf3, 0x62, 0x37, 0x3e, 0x6b, 0xdd, 0x46, 0xd4, 0x7a, - 0xca, 0x31, 0x24, 0x23, 0x0f, 0x0f, 0x42, 0xff, 0xd4, 0x75, 0x58, 0xd8, 0xba, 0xb3, 0x00, 0x3f, - 0x94, 0x8c, 0xf6, 0xbf, 0x17, 0xa0, 0x99, 0xd7, 0x05, 0x51, 0xa1, 0x68, 0x07, 0x41, 0x6b, 0x15, - 0xa5, 0xe4, 0x8f, 0xe4, 0x6d, 0x00, 0x2e, 0x8a, 0x15, 0x05, 0xf6, 0x98, 0xb5, 0x6e, 0xe1, 0x5a, - 0x75, 0x4e, 0x19, 0x71, 0x02, 0x39, 0x82, 0x46, 0x60, 0xc7, 0x27, 0x6c, 0xca, 0x66, 0xcc, 0x8b, - 0x5b, 0xcd, 0xcd, 0xe2, 0x16, 0x6c, 0x7f, 0x7e, 0x4d, 0xd5, 0x77, 0x0e, 0xed, 0xf8, 0x44, 0x17, - 0x53, 0x69, 0x76, 0x9d, 0xb6, 0x0e, 0x8d, 0x0c, 0x8f, 0x10, 0x28, 0xc5, 0x67, 0x01, 0x6b, 0xad, - 0xa1, 0x5c, 0xf8, 0x4c, 0x9a, 0xa0, 0xb8, 0x4e, 0x4b, 0x45, 0xf3, 0x57, 0x5c, 0x87, 0x63, 0x50, - 0x87, 0xeb, 0x28, 0x22, 0x3e, 0x6b, 0xff, 0x51, 0x86, 0x5a, 0x22, 0x00, 0xe9, 0x42, 0x75, 0xc6, - 0x6c, 0xcf, 0xf5, 0x8e, 0xd1, 0x69, 0x9a, 0xdb, 0x6f, 0x2e, 0x11, 0xb3, 0x73, 0x20, 0x20, 0x3b, - 0x30, 0x18, 0x5a, 0x07, 0x7a, 0x77, 0x60, 0x0c, 0xf6, 0x69, 0x32, 0x8f, 0x1f, 0xa6, 0x7c, 0xb4, - 0xe6, 0xa1, 0x8b, 0x9e, 0x55, 0xa7, 0x20, 0x49, 0x47, 0xa1, 0x9b, 0x0a, 0x51, 0x14, 0x82, 0xe2, - 0x21, 0x76, 0xa0, 0x9c, 0xb8, 0x88, 0xb2, 0xd5, 0xd8, 0x6e, 0x5d, 0xa6, 0x1c, 0x2a, 0x60, 0xdc, - 0x20, 0x66, 0xf3, 0x69, 0xec, 0x06, 0x53, 0xee, 0x76, 0xca, 0x56, 0x8d, 0xa6, 0x63, 0xf2, 0x1e, - 0x40, 0xc4, 0xec, 0x70, 0x7c, 0x62, 0x3f, 0x9b, 0xb2, 0x56, 0x85, 0x7b, 0xf6, 0x4e, 0x79, 0x62, - 0x4f, 0x23, 0x46, 0x33, 0x0c, 0x62, 0xc3, 0xdd, 0x49, 0x1c, 0x59, 0xb1, 0xff, 0x9c, 0x79, 0xee, - 0x2b, 0x9b, 0x07, 0x12, 0xcb, 0x0f, 0xf8, 0x0f, 0xfa, 0x58, 0x73, 0xfb, 0xc3, 0x65, 0x5b, 0x7f, - 0x14, 0x47, 0x66, 0x66, 0xc6, 0x10, 0x27, 0xd0, 0xdb, 0x93, 0x65, 0x64, 0xd2, 0x86, 0xca, 0xd4, - 0x1f, 0xdb, 0x53, 0xd6, 0xaa, 0x73, 0x2d, 0xec, 0x28, 0xcc, 0xa3, 0x92, 0xa2, 0xfd, 0xb3, 0x02, - 0x55, 0xa9, 0x47, 0xd2, 0x84, 0x8c, 0x26, 0xd5, 0x37, 0x48, 0x0d, 0x4a, 0xbb, 0xfd, 0xe1, 0xae, - 0xda, 0xe4, 0x4f, 0xa6, 0xfe, 0xbd, 0xa9, 0xae, 0x71, 0xcc, 0xee, 0x53, 0x53, 0x1f, 0x99, 0x94, - 0x63, 0x54, 0xb2, 0x0e, 0xab, 0x5d, 0x73, 0x78, 0x60, 0xed, 0x75, 0x4d, 0x7d, 0x7f, 0x48, 0x9f, - 0xaa, 0x05, 0xb2, 0x0a, 0x75, 0x24, 0xf5, 0x8d, 0xc1, 0x13, 0x55, 0xe1, 0x33, 0x70, 0x68, 0x1a, - 0x66, 0x5f, 0x57, 0x8b, 0x44, 0x85, 0x15, 0x31, 0x63, 0x38, 0x30, 0xf5, 0x81, 0xa9, 0x96, 0x52, - 0xca, 0xe8, 0xe8, 0xe0, 0xa0, 0x4b, 0x9f, 0xaa, 0x65, 0xb2, 0x06, 0x0d, 0xa4, 0x74, 0x8f, 0xcc, - 0xc7, 0x43, 0xaa, 0x56, 0x48, 0x03, 0xaa, 0xfb, 0x3d, 0xeb, 0xbb, 0xc7, 0xfa, 0x40, 0xad, 0x92, - 0x15, 0xa8, 0xed, 0xf7, 0x2c, 0xfd, 0xa0, 0x6b, 0xf4, 0xd5, 0x1a, 0x9f, 0xbd, 0xaf, 0x0f, 0xe9, - 0x68, 0x64, 0x1d, 0x0e, 0x8d, 0x81, 0xa9, 0xd6, 0x49, 0x1d, 0xca, 0xfb, 0x3d, 0xcb, 0x38, 0x50, - 0x81, 0x10, 0x68, 0xee, 0xf7, 0xac, 0xc3, 0xc7, 0xc3, 0x81, 0x3e, 0x38, 0x3a, 0xd8, 0xd5, 0xa9, - 0xda, 0x20, 0xb7, 0x40, 0xe5, 0xb4, 0xe1, 0xc8, 0xec, 0xf6, 0xbb, 0xbd, 0x1e, 0xd5, 0x47, 0x23, - 0x75, 0x85, 0x4b, 0xbd, 0xdf, 0xb3, 0x68, 0xd7, 0xe4, 0xfb, 0x5a, 0xe5, 0x2f, 0xe4, 0x7b, 0x7f, - 0xa2, 0x3f, 0x55, 0xd7, 0xf9, 0x2b, 0xf4, 0x81, 0x69, 0x98, 0x4f, 0xad, 0x43, 0x3a, 0x34, 0x87, - 0xea, 0x06, 0x17, 0xd0, 0x18, 0xf4, 0xf4, 0xef, 0xad, 0x6f, 0xbb, 0xfd, 0x23, 0x5d, 0x25, 0xda, - 0x8f, 0xe1, 0xf6, 0xd2, 0x33, 0xe1, 0xaa, 0x7b, 0x6c, 0x1e, 0xf4, 0xd5, 0x02, 0x7f, 0xe2, 0x9b, - 0x52, 0x15, 0xed, 0x0f, 0xa0, 0xc4, 0x5d, 0x86, 0x7c, 0x06, 0xd5, 0xc4, 0x1b, 0x0b, 0xe8, 0x8d, - 0x77, 0xb3, 0x67, 0x6d, 0xc7, 0x27, 0x9d, 0xc4, 0xe3, 0x12, 0x5c, 0xbb, 0x0b, 0xd5, 0x45, 0x4f, - 0x53, 0x2e, 0x78, 0x5a, 0xf1, 0x82, 0xa7, 0x95, 0x32, 0x9e, 0x66, 0x43, 0x3d, 0xf5, 0xed, 0x9b, - 0x47, 0x91, 0x07, 0x50, 0xe2, 0xde, 0xdf, 0x6a, 0xa2, 0x87, 0xac, 0x2d, 0x08, 0x4c, 0x91, 0xa9, - 0xfd, 0x43, 0x01, 0x4a, 0x3c, 0xda, 0x9e, 0x07, 0xda, 0xc2, 0x15, 0x81, 0x56, 0xb9, 0x32, 0xd0, - 0x16, 0xaf, 0x15, 0x68, 0x2b, 0x37, 0x0b, 0xb4, 0xd5, 0x4b, 0x02, 0xad, 0xf6, 0x67, 0x45, 0x68, - 0xe8, 0x38, 0xf3, 0x10, 0x13, 0xfd, 0xfb, 0x50, 0x7c, 0xce, 0xce, 0x50, 0x3f, 0x8d, 0xed, 0x5b, - 0x99, 0xdd, 0xa6, 0x2a, 0xa4, 0x1c, 0x40, 0xb6, 0x61, 0x45, 0xbc, 0xd0, 0x3a, 0x0e, 0xfd, 0x79, - 0xd0, 0x52, 0x97, 0xab, 0xa7, 0x21, 0x40, 0xfb, 0x1c, 0x43, 0xde, 0x83, 0xb2, 0xff, 0xc2, 0x63, - 0x21, 0xc6, 0xc1, 0x3c, 0x98, 0x2b, 0x8f, 0x0a, 0x2e, 0x79, 0x08, 0xa5, 0xe7, 0xae, 0xe7, 0xe0, - 0x19, 0xe6, 0x23, 0x61, 0x46, 0xd0, 0xce, 0x13, 0xd7, 0x73, 0x28, 0x02, 0xc9, 0x3d, 0xa8, 0xf1, - 0x5f, 0x8c, 0x7b, 0x65, 0xdc, 0x68, 0x95, 0x8f, 0x79, 0xd0, 0x7b, 0x08, 0xb5, 0x40, 0xc6, 0x10, - 0x4c, 0x00, 0x8d, 0xed, 0x8d, 0x25, 0xe1, 0x85, 0xa6, 0x20, 0xf2, 0x15, 0xac, 0x84, 0xf6, 0x0b, - 0x2b, 0x9d, 0xb4, 0x76, 0xf9, 0xa4, 0x46, 0x68, 0xbf, 0x48, 0x23, 0x38, 0x81, 0x52, 0x68, 0x7b, - 0xcf, 0x5b, 0x64, 0xb3, 0xb0, 0x55, 0xa6, 0xf8, 0xac, 0x7d, 0x01, 0x25, 0x2e, 0x25, 0x8f, 0x08, - 0xfb, 0x3d, 0xf4, 0xff, 0xee, 0x9e, 0xa9, 0x16, 0x12, 0x7f, 0xfe, 0x96, 0x47, 0x03, 0x45, 0x72, - 0x0f, 0xf4, 0xd1, 0xa8, 0xbb, 0xaf, 0xab, 0x45, 0xad, 0x07, 0xeb, 0x7b, 0xfe, 0x2c, 0xf0, 0x23, - 0x37, 0x66, 0xe9, 0xf2, 0xf7, 0xa0, 0xe6, 0x7a, 0x0e, 0x7b, 0x69, 0xb9, 0x0e, 0x9a, 0x56, 0x91, - 0x56, 0x71, 0x6c, 0x38, 0xdc, 0xe4, 0x4e, 0x65, 0x31, 0x55, 0xe4, 0x26, 0x87, 0x03, 0xed, 0x2f, - 0x15, 0x28, 0x1b, 0x1c, 0xc1, 0x8d, 0x4f, 0x9e, 0x14, 0x7a, 0x8f, 0x30, 0x4c, 0x10, 0x24, 0x93, - 0xfb, 0x50, 0x1b, 0x6a, 0xb6, 0x37, 0x66, 0xbc, 0xe2, 0xc3, 0x3c, 0x50, 0xa3, 0xe9, 0x98, 0x7c, - 0x99, 0xd1, 0x9f, 0x82, 0x2e, 0x7b, 0x2f, 0xa3, 0x0a, 0x7c, 0xc1, 0x12, 0x2d, 0xb6, 0xff, 0xaa, - 0x90, 0x49, 0x6e, 0xcb, 0x12, 0x4f, 0x1f, 0xea, 0x8e, 0x1b, 0x32, 0xac, 0x23, 0xe5, 0x41, 0x3f, - 0xb8, 0x74, 0xe1, 0x4e, 0x2f, 0x81, 0xee, 0xd4, 0xbb, 0xa3, 0x3d, 0x7d, 0xd0, 0xe3, 0x99, 0xef, - 0x7c, 0x01, 0xed, 0x23, 0xa8, 0xa7, 0x10, 0x0c, 0xc7, 0x09, 0x48, 0x2d, 0x70, 0xf5, 0xf6, 0xf4, - 0x74, 0xac, 0x68, 0x7f, 0xad, 0x40, 0x33, 0xd5, 0xaf, 0xd0, 0xd0, 0x6d, 0xa8, 0xd8, 0x41, 0x90, - 0xa8, 0xb6, 0x4e, 0xcb, 0x76, 0x10, 0x18, 0x8e, 0x8c, 0x2d, 0x0a, 0x6a, 0x9b, 0xc7, 0x96, 0x4f, - 0x01, 0x1c, 0x36, 0x71, 0x3d, 0x17, 0x85, 0x2e, 0xa2, 0xc1, 0xab, 0x8b, 0x42, 0xd3, 0x0c, 0x86, - 0x7c, 0x09, 0xe5, 0x28, 0xb6, 0x63, 0x91, 0x2b, 0x9b, 0xdb, 0xf7, 0x33, 0xe0, 0xbc, 0x08, 0x9d, - 0x11, 0x87, 0x51, 0x81, 0x26, 0x5f, 0xc1, 0x2d, 0xdf, 0x9b, 0x9e, 0x59, 0xf3, 0x88, 0x59, 0xee, - 0xc4, 0x0a, 0xd9, 0x0f, 0x73, 0x37, 0x64, 0x4e, 0x3e, 0xa7, 0xae, 0x73, 0xc8, 0x51, 0xc4, 0x8c, - 0x09, 0x95, 0x7c, 0xed, 0x6b, 0x28, 0xe3, 0x3a, 0x7c, 0xcf, 0xdf, 0x51, 0xc3, 0xd4, 0xad, 0xe1, - 0xa0, 0xff, 0x54, 0xe8, 0x80, 0xea, 0xdd, 0x9e, 0x85, 0x44, 0x55, 0xe1, 0xc1, 0xbe, 0xa7, 0xf7, - 0x75, 0x53, 0xef, 0xa9, 0x45, 0x9e, 0x3d, 0x74, 0x4a, 0x87, 0x54, 0x2d, 0x69, 0xff, 0x53, 0x80, - 0x15, 0x94, 0xe7, 0xd0, 0x8f, 0xe2, 0x89, 0xfb, 0x92, 0xec, 0x41, 0x43, 0x98, 0xdd, 0xa9, 0x2c, - 0xe8, 0xb9, 0x33, 0x68, 0x8b, 0x7b, 0x96, 0x68, 0x31, 0x90, 0x75, 0xb4, 0x9b, 0x3e, 0x27, 0x21, - 0x45, 0x41, 0xa7, 0xbf, 0x22, 0xa4, 0xbc, 0x05, 0x95, 0x67, 0x6c, 0xe2, 0x87, 0x22, 0x04, 0xd6, - 0x76, 0x4a, 0x71, 0x38, 0x67, 0x54, 0xd2, 0xda, 0x36, 0xc0, 0xf9, 0xfa, 0xe4, 0x01, 0xac, 0x26, - 0xc6, 0x66, 0xa1, 0x71, 0x89, 0x93, 0x5b, 0x49, 0x88, 0x83, 0x5c, 0x75, 0xa3, 0x5c, 0xab, 0xba, - 0xd1, 0xbe, 0x86, 0xd5, 0x64, 0x3f, 0xe2, 0xfc, 0x54, 0x21, 0x79, 0x01, 0x63, 0xca, 0x82, 0x8c, - 0xca, 0x45, 0x19, 0xb5, 0x9f, 0x41, 0x6d, 0xe4, 0xd9, 0x41, 0x74, 0xe2, 0xc7, 0xdc, 0x7a, 0xe2, - 0x48, 0xfa, 0xaa, 0x12, 0x47, 0x9a, 0x06, 0x15, 0x7e, 0x38, 0xf3, 0x88, 0xbb, 0xbf, 0x31, 0xe8, - 0xee, 0x99, 0xc6, 0xb7, 0xba, 0xfa, 0x06, 0x01, 0xa8, 0xc8, 0xe7, 0x82, 0xa6, 0x41, 0xd3, 0x90, - 0xed, 0xd8, 0x63, 0x66, 0x3b, 0x2c, 0xe4, 0x12, 0xfc, 0xe0, 0x47, 0x89, 0x04, 0x3f, 0xf8, 0x91, - 0xf6, 0x17, 0x05, 0x68, 0x98, 0xa1, 0xed, 0x45, 0xb6, 0x30, 0xf7, 0xcf, 0xa0, 0x72, 0x82, 0x58, - 0x74, 0xa3, 0xc6, 0x82, 0x7f, 0x66, 0x17, 0xa3, 0x12, 0x48, 0xee, 0x40, 0xe5, 0xc4, 0xf6, 0x9c, - 0xa9, 0xd0, 0x5a, 0x85, 0xca, 0x51, 0x92, 0x1b, 0x95, 0xf3, 0xdc, 0xb8, 0x05, 0x2b, 0x33, 0x3b, - 0x7c, 0x6e, 0x8d, 0x4f, 0x6c, 0xef, 0x98, 0x45, 0xf2, 0x60, 0xa4, 0x05, 0x36, 0x38, 0x6b, 0x4f, - 0x70, 0xb4, 0xbf, 0x5f, 0x81, 0xf2, 0x37, 0x73, 0x16, 0x9e, 0x65, 0x04, 0xfa, 0xe0, 0xba, 0x02, - 0xc9, 0x17, 0x17, 0x2e, 0x4b, 0xca, 0x6f, 0x2f, 0x26, 0x65, 0x22, 0x53, 0x84, 0xc8, 0x95, 0x22, - 0x0b, 0x7c, 0x9a, 0x09, 0x63, 0xeb, 0x57, 0xd8, 0xda, 0x79, 0x70, 0x7b, 0x08, 0x95, 0x89, 0x3b, - 0x8d, 0x51, 0x75, 0x8b, 0xd5, 0x08, 0xee, 0xa5, 0xf3, 0x08, 0xd9, 0x54, 0xc2, 0xc8, 0xbb, 0xb0, - 0x22, 0x2a, 0x59, 0xeb, 0x07, 0xce, 0xc6, 0x82, 0x95, 0xf7, 0xa6, 0x48, 0x13, 0xbb, 0xff, 0x18, - 0xca, 0x7e, 0xc8, 0x37, 0x5f, 0xc7, 0x25, 0xef, 0x5c, 0x58, 0x72, 0xc8, 0xb9, 0x54, 0x80, 0xc8, - 0x87, 0x50, 0x3a, 0x71, 0xbd, 0x18, 0xb3, 0x46, 0x73, 0xfb, 0xf6, 0x05, 0xf0, 0x63, 0xd7, 0x8b, - 0x29, 0x42, 0x78, 0x98, 0x1f, 0xfb, 0x73, 0x2f, 0x6e, 0xdd, 0xc5, 0x0c, 0x23, 0x06, 0xe4, 0x1e, - 0x54, 0xfc, 0xc9, 0x24, 0x62, 0x31, 0x76, 0x96, 0xe5, 0x9d, 0xc2, 0xa7, 0x54, 0x12, 0xf8, 0x84, - 0xa9, 0x3b, 0x73, 0x63, 0xec, 0x43, 0xca, 0x54, 0x0c, 0xc8, 0x2e, 0xac, 0x8d, 0xfd, 0x59, 0xe0, - 0x4e, 0x99, 0x63, 0x8d, 0xe7, 0x61, 0xe4, 0x87, 0xad, 0x77, 0x2e, 0x1c, 0xd3, 0x9e, 0x44, 0xec, - 0x21, 0x80, 0x36, 0xc7, 0xb9, 0x31, 0x31, 0x60, 0x83, 0x79, 0x8e, 0xb5, 0xb8, 0xce, 0xfd, 0xd7, - 0xad, 0xb3, 0xce, 0x3c, 0x27, 0x4f, 0x4a, 0xc4, 0xc1, 0x48, 0x68, 0x61, 0xcc, 0x68, 0x6d, 0x60, - 0x90, 0xb9, 0x77, 0x69, 0xac, 0x14, 0xe2, 0x64, 0xc2, 0xf7, 0x6f, 0xc0, 0x2d, 0x19, 0x22, 0xad, - 0x80, 0x85, 0x13, 0x36, 0x8e, 0xad, 0x60, 0x6a, 0x7b, 0x58, 0xca, 0xa5, 0xc6, 0x4a, 0x24, 0xe4, - 0x50, 0x20, 0x0e, 0xa7, 0xb6, 0x47, 0x34, 0xa8, 0x3f, 0x67, 0x67, 0x91, 0xc5, 0x23, 0x29, 0x76, - 0xae, 0x29, 0xba, 0xc6, 0xe9, 0x43, 0x6f, 0x7a, 0x46, 0x7e, 0x02, 0x8d, 0xf8, 0xdc, 0xdb, 0xb0, - 0x61, 0x6d, 0xe4, 0x4e, 0x35, 0xe3, 0x8b, 0x34, 0x0b, 0x25, 0xf7, 0xa1, 0x2a, 0x35, 0xd4, 0xba, - 0x97, 0x5d, 0x3b, 0xa1, 0xf2, 0xc4, 0x3c, 0xb1, 0xdd, 0xa9, 0x7f, 0xca, 0x42, 0x6b, 0x16, 0xb5, - 0xda, 0xe2, 0xb6, 0x24, 0x21, 0x1d, 0x44, 0xdc, 0x4f, 0xa3, 0x38, 0xf4, 0xbd, 0xe3, 0xd6, 0x26, - 0xde, 0x93, 0xc8, 0xd1, 0xc5, 0xe0, 0xf7, 0x2e, 0x66, 0xfe, 0x7c, 0xf0, 0xfb, 0x1c, 0xee, 0x60, - 0x65, 0x66, 0x3d, 0x3b, 0xb3, 0xf2, 0x68, 0x0d, 0xd1, 0x1b, 0xc8, 0xdd, 0x3d, 0x3b, 0xcc, 0x4e, - 0x6a, 0x43, 0xcd, 0x71, 0xa3, 0xd8, 0xf5, 0xc6, 0x71, 0xab, 0x85, 0xef, 0x4c, 0xc7, 0xe4, 0x33, - 0xb8, 0x3d, 0x73, 0x3d, 0x2b, 0xb2, 0x27, 0xcc, 0x8a, 0x5d, 0xee, 0x9b, 0x6c, 0xec, 0x7b, 0x4e, - 0xd4, 0x7a, 0x80, 0x82, 0x93, 0x99, 0xeb, 0x8d, 0xec, 0x09, 0x33, 0xdd, 0x19, 0x1b, 0x09, 0x0e, - 0xf9, 0x08, 0xd6, 0x11, 0x1e, 0xb2, 0x60, 0xea, 0x8e, 0x6d, 0xf1, 0xfa, 0x1f, 0xe1, 0xeb, 0xd7, - 0x38, 0x83, 0x0a, 0x3a, 0xbe, 0xfa, 0x63, 0x68, 0x06, 0x2c, 0x8c, 0xdc, 0x28, 0xb6, 0xa4, 0x45, - 0xbf, 0x97, 0xd5, 0xda, 0xaa, 0x64, 0x0e, 0x91, 0xd7, 0xfe, 0xcf, 0x02, 0x54, 0x84, 0x73, 0x92, - 0x4f, 0x41, 0xf1, 0x03, 0xbc, 0x06, 0x69, 0x6e, 0x6f, 0x5e, 0xe2, 0xc1, 0x9d, 0x61, 0xc0, 0xeb, - 0x5e, 0x3f, 0xa4, 0x8a, 0x1f, 0xdc, 0xb8, 0x28, 0xd4, 0xfe, 0x10, 0x6a, 0xc9, 0x02, 0xbc, 0xbc, - 0xe8, 0xeb, 0xa3, 0x91, 0x65, 0x3e, 0xee, 0x0e, 0xd4, 0x02, 0xb9, 0x03, 0x24, 0x1d, 0x5a, 0x43, - 0x6a, 0xe9, 0xdf, 0x1c, 0x75, 0xfb, 0xaa, 0x82, 0x5d, 0x1a, 0xd5, 0xbb, 0xa6, 0x4e, 0x05, 0xb2, - 0x48, 0xee, 0xc1, 0xed, 0x2c, 0xe5, 0x1c, 0x5c, 0xc2, 0x14, 0x8c, 0x8f, 0x65, 0x52, 0x01, 0xc5, - 0x18, 0xa8, 0x15, 0x9e, 0x16, 0xf4, 0xef, 0x8d, 0x91, 0x39, 0x52, 0xab, 0xed, 0xbf, 0x29, 0x40, - 0x19, 0xc3, 0x06, 0x3f, 0x9f, 0x54, 0x72, 0x71, 0x5d, 0x73, 0x5e, 0xb9, 0x1a, 0xd9, 0x92, 0xaa, - 0x81, 0x01, 0x65, 0x73, 0x79, 0xf4, 0xf9, 0xb5, 0xd6, 0x53, 0x3f, 0x85, 0x12, 0x8f, 0x52, 0xbc, - 0x43, 0x1c, 0xd2, 0x9e, 0x4e, 0xad, 0x47, 0x06, 0x1d, 0xf1, 0x2a, 0x97, 0x40, 0xb3, 0x3b, 0xd8, - 0xd3, 0x47, 0xe6, 0x30, 0xa1, 0xa1, 0x56, 0x1e, 0x19, 0x7d, 0x33, 0x45, 0x15, 0xb5, 0x9f, 0xd7, - 0x60, 0x35, 0x89, 0x09, 0x22, 0x82, 0x3e, 0x82, 0x46, 0x10, 0xba, 0x33, 0x3b, 0x3c, 0x8b, 0xc6, - 0xb6, 0x87, 0x49, 0x01, 0xb6, 0x7f, 0xb4, 0x24, 0xaa, 0x88, 0x1d, 0x1d, 0x0a, 0xec, 0x68, 0x6c, - 0x7b, 0x34, 0x3b, 0x91, 0xf4, 0x61, 0x75, 0xc6, 0xc2, 0x63, 0xf6, 0x7b, 0xbe, 0xeb, 0xe1, 0x4a, - 0x55, 0x8c, 0xc8, 0xef, 0x5f, 0xba, 0xd2, 0x01, 0x47, 0xff, 0x8e, 0xef, 0x7a, 0xb8, 0x56, 0x7e, - 0x32, 0xf9, 0x04, 0xea, 0xa2, 0x12, 0x72, 0xd8, 0x04, 0x63, 0xc5, 0xb2, 0xda, 0x4f, 0xd4, 0xe8, - 0x3d, 0x36, 0xc9, 0xc4, 0x65, 0xb8, 0x34, 0x2e, 0x37, 0xb2, 0x71, 0xf9, 0xcd, 0x6c, 0x2c, 0x5a, - 0x11, 0x55, 0x78, 0x1a, 0x84, 0x2e, 0x38, 0x7c, 0x6b, 0x89, 0xc3, 0x77, 0x60, 0x23, 0xf1, 0x55, - 0xcb, 0xf5, 0x26, 0xee, 0x4b, 0x2b, 0x72, 0x5f, 0x89, 0xd8, 0x53, 0xa6, 0xeb, 0x09, 0xcb, 0xe0, - 0x9c, 0x91, 0xfb, 0x8a, 0x11, 0x23, 0xe9, 0xe0, 0x64, 0x0e, 0x5c, 0xc5, 0xab, 0xc9, 0xf7, 0x2e, - 0x55, 0x8f, 0x68, 0xbe, 0x64, 0x46, 0xcc, 0x4d, 0x6d, 0xff, 0x52, 0x81, 0x46, 0xe6, 0x1c, 0x78, - 0xf6, 0x16, 0xca, 0x42, 0x61, 0xc5, 0x55, 0x94, 0x50, 0x1f, 0x4a, 0xfa, 0x26, 0xd4, 0xa3, 0xd8, - 0x0e, 0x63, 0x8b, 0x17, 0x57, 0xb2, 0xdd, 0x45, 0xc2, 0x13, 0x76, 0x46, 0x3e, 0x80, 0x35, 0xc1, - 0x74, 0xbd, 0xf1, 0x74, 0x1e, 0xb9, 0xa7, 0xa2, 0x99, 0xaf, 0xd1, 0x26, 0x92, 0x8d, 0x84, 0x4a, - 0xee, 0x42, 0x95, 0x67, 0x21, 0xbe, 0x86, 0x68, 0xfa, 0x2a, 0xcc, 0x73, 0xf8, 0x0a, 0x0f, 0x60, - 0x95, 0x33, 0xce, 0xe7, 0x57, 0xc4, 0x2d, 0x33, 0xf3, 0x9c, 0xf3, 0xd9, 0x1d, 0xd8, 0x10, 0xaf, - 0x09, 0x44, 0xf1, 0x2a, 0x2b, 0xdc, 0x3b, 0xa8, 0xd8, 0x75, 0x64, 0xc9, 0xb2, 0x56, 0x14, 0x9c, - 0x1f, 0x01, 0xcf, 0x5e, 0x0b, 0xe8, 0xbb, 0x22, 0x94, 0x31, 0xcf, 0xc9, 0x61, 0x77, 0xe1, 0x1d, - 0x8e, 0x9d, 0x7b, 0x76, 0x10, 0x4c, 0x5d, 0xe6, 0x58, 0x53, 0xff, 0x18, 0x43, 0x66, 0x14, 0xdb, - 0xb3, 0xc0, 0x9a, 0x47, 0xad, 0x0d, 0x0c, 0x99, 0x6d, 0xe6, 0x39, 0x47, 0x09, 0xa8, 0xef, 0x1f, - 0x9b, 0x09, 0xe4, 0x28, 0x6a, 0xff, 0x3e, 0xac, 0xe6, 0xec, 0x71, 0x41, 0xa7, 0x35, 0x74, 0xfe, - 0x8c, 0x4e, 0xdf, 0x85, 0x95, 0x20, 0x64, 0xe7, 0xa2, 0xd5, 0x51, 0xb4, 0x86, 0xa0, 0x09, 0xb1, - 0xb6, 0x60, 0x05, 0x79, 0x96, 0x20, 0xe6, 0xf3, 0x63, 0x03, 0x59, 0x87, 0xc8, 0x69, 0xbf, 0x80, - 0x95, 0xec, 0x69, 0x93, 0x77, 0x33, 0x69, 0xa1, 0x99, 0xcb, 0x93, 0x69, 0x76, 0x48, 0x2a, 0xb2, - 0xf5, 0x4b, 0x2a, 0x32, 0x72, 0x9d, 0x8a, 0x4c, 0xfb, 0x2f, 0xd9, 0x9c, 0x65, 0x2a, 0x84, 0x9f, - 0x41, 0x2d, 0x90, 0xf5, 0x38, 0x5a, 0x52, 0xfe, 0x12, 0x3e, 0x0f, 0xee, 0x24, 0x95, 0x3b, 0x4d, - 0xe7, 0xb4, 0xff, 0x56, 0x81, 0x5a, 0x5a, 0xd0, 0xe7, 0x2c, 0xef, 0xcd, 0x05, 0xcb, 0x3b, 0x90, - 0x1a, 0x16, 0x0a, 0x7c, 0x1b, 0xa3, 0xc5, 0x27, 0xaf, 0x7f, 0xd7, 0xc5, 0xb6, 0xe7, 0x34, 0xdb, - 0xf6, 0x6c, 0xbe, 0xae, 0xed, 0xf9, 0xe4, 0xa2, 0xc1, 0xbf, 0x95, 0xe9, 0x2d, 0x16, 0xcc, 0xbe, - 0xfd, 0x7d, 0xae, 0x0f, 0xca, 0x26, 0x84, 0x77, 0xc4, 0x7e, 0xd2, 0x84, 0x90, 0xb6, 0x3f, 0xf7, - 0xaf, 0xd7, 0xfe, 0x6c, 0x43, 0x45, 0xea, 0xfc, 0x0e, 0x54, 0x64, 0x4d, 0x27, 0x1b, 0x04, 0x31, - 0x3a, 0x6f, 0x10, 0x0a, 0xb2, 0x4e, 0xd7, 0x7e, 0xae, 0x40, 0x59, 0x0f, 0x43, 0x3f, 0xd4, 0xfe, - 0x48, 0x81, 0x3a, 0x3e, 0xed, 0xf9, 0x0e, 0xe3, 0xd9, 0x60, 0xb7, 0xdb, 0xb3, 0xa8, 0xfe, 0xcd, - 0x91, 0x8e, 0xd9, 0xa0, 0x0d, 0x77, 0xf6, 0x86, 0x83, 0xbd, 0x23, 0x4a, 0xf5, 0x81, 0x69, 0x99, - 0xb4, 0x3b, 0x18, 0xf1, 0xb6, 0x67, 0x38, 0x50, 0x15, 0x9e, 0x29, 0x8c, 0x81, 0xa9, 0xd3, 0x41, - 0xb7, 0x6f, 0x89, 0x56, 0xb4, 0x88, 0x77, 0xb3, 0xba, 0xde, 0xb3, 0xf0, 0xd6, 0x51, 0x2d, 0xf1, - 0x96, 0xd5, 0x34, 0x0e, 0xf4, 0xe1, 0x91, 0xa9, 0x96, 0xc9, 0x6d, 0x58, 0x3f, 0xd4, 0xe9, 0x81, - 0x31, 0x1a, 0x19, 0xc3, 0x81, 0xd5, 0xd3, 0x07, 0x86, 0xde, 0x53, 0x2b, 0x7c, 0x9d, 0x5d, 0x63, - 0xdf, 0xec, 0xee, 0xf6, 0x75, 0xb9, 0x4e, 0x95, 0x6c, 0xc2, 0x5b, 0x7b, 0xc3, 0x83, 0x03, 0xc3, - 0x34, 0xf5, 0x9e, 0xb5, 0x7b, 0x64, 0x5a, 0x23, 0xd3, 0xe8, 0xf7, 0xad, 0xee, 0xe1, 0x61, 0xff, - 0x29, 0x4f, 0x60, 0x35, 0x72, 0x17, 0x36, 0xf6, 0xba, 0x87, 0xdd, 0x5d, 0xa3, 0x6f, 0x98, 0x4f, - 0xad, 0x9e, 0x31, 0xe2, 0xf3, 0x7b, 0x6a, 0x9d, 0x27, 0x6c, 0x93, 0x3e, 0xb5, 0xba, 0x7d, 0x14, - 0xcd, 0xd4, 0xad, 0xdd, 0xee, 0xde, 0x13, 0x7d, 0xd0, 0x53, 0x81, 0x0b, 0x30, 0xea, 0x3e, 0xd2, - 0x2d, 0x2e, 0x92, 0x65, 0x0e, 0x87, 0xd6, 0xb0, 0xdf, 0x53, 0x1b, 0xda, 0xbf, 0x14, 0xa1, 0xb4, - 0xe7, 0x47, 0x31, 0xf7, 0x46, 0xe1, 0xac, 0x2f, 0x42, 0x37, 0x66, 0xa2, 0x7f, 0x2b, 0x53, 0xd1, - 0x4b, 0x7f, 0x87, 0x24, 0x1e, 0x50, 0x32, 0x10, 0xeb, 0xd9, 0x19, 0xc7, 0x29, 0x88, 0x5b, 0x3b, - 0xc7, 0xed, 0x72, 0xb2, 0x88, 0x68, 0x78, 0x85, 0x23, 0xd7, 0x2b, 0x22, 0x4e, 0x06, 0x61, 0xb9, - 0xe0, 0xc7, 0x40, 0xb2, 0x20, 0xb9, 0x62, 0x09, 0x91, 0x6a, 0x06, 0x29, 0x96, 0xdc, 0x01, 0x18, - 0xfb, 0xb3, 0x99, 0x1b, 0x8f, 0xfd, 0x28, 0x96, 0x5f, 0xc8, 0xda, 0x39, 0x63, 0x8f, 0x62, 0x6e, - 0xf1, 0x33, 0x37, 0xe6, 0x8f, 0x34, 0x83, 0x26, 0x3b, 0x70, 0xcf, 0x0e, 0x82, 0xd0, 0x7f, 0xe9, - 0xce, 0xec, 0x98, 0x59, 0xdc, 0x73, 0xed, 0x63, 0x66, 0x39, 0x6c, 0x1a, 0xdb, 0xd8, 0x13, 0x95, - 0xe9, 0xdd, 0x0c, 0x60, 0x24, 0xf8, 0x3d, 0xce, 0xe6, 0x71, 0xd7, 0x75, 0xac, 0x88, 0xfd, 0x30, - 0xe7, 0x1e, 0x60, 0xcd, 0x03, 0xc7, 0xe6, 0x62, 0xd6, 0x45, 0x96, 0x72, 0x9d, 0x91, 0xe4, 0x1c, - 0x09, 0x46, 0xfb, 0x15, 0xc0, 0xb9, 0x14, 0x64, 0x1b, 0x6e, 0xf3, 0x3a, 0x9e, 0x45, 0x31, 0x73, - 0x2c, 0xb9, 0xdb, 0x60, 0x1e, 0x47, 0x18, 0xe2, 0xcb, 0x74, 0x23, 0x65, 0xca, 0x9b, 0xc2, 0x79, - 0x1c, 0x91, 0x9f, 0x40, 0xeb, 0xc2, 0x1c, 0x87, 0x4d, 0x19, 0x7f, 0x6d, 0x15, 0xa7, 0xdd, 0x59, - 0x98, 0xd6, 0x13, 0x5c, 0xed, 0x4f, 0x14, 0x80, 0x7d, 0x16, 0x53, 0xc1, 0xcd, 0x34, 0xb6, 0x95, - 0xeb, 0x36, 0xb6, 0xef, 0x27, 0x17, 0x08, 0xc5, 0xab, 0x63, 0xc0, 0x42, 0x97, 0xa1, 0xdc, 0xa4, - 0xcb, 0xc8, 0x35, 0x11, 0xc5, 0x2b, 0x9a, 0x88, 0x52, 0xae, 0x89, 0xf8, 0x18, 0x9a, 0xf6, 0x74, - 0xea, 0xbf, 0xe0, 0x05, 0x0d, 0x0b, 0x43, 0xe6, 0xa0, 0x11, 0x9c, 0xd7, 0xdb, 0xc8, 0xec, 0x49, - 0x9e, 0xf6, 0xe7, 0x0a, 0x34, 0x50, 0x15, 0x51, 0xe0, 0x7b, 0x11, 0x23, 0x5f, 0x42, 0x45, 0x5e, - 0x44, 0x8b, 0x8b, 0xfc, 0xb7, 0x33, 0xb2, 0x66, 0x70, 0xb2, 0x68, 0xa0, 0x12, 0xcc, 0x33, 0x42, - 0xe6, 0x75, 0x97, 0x2b, 0x25, 0x45, 0x91, 0xfb, 0x50, 0x73, 0x3d, 0x4b, 0xb4, 0xd4, 0x95, 0x4c, - 0x58, 0xac, 0xba, 0x1e, 0xd6, 0xb2, 0xed, 0x57, 0x50, 0x11, 0x2f, 0x21, 0x9d, 0x54, 0xa6, 0x8b, - 0xfa, 0xcb, 0xdc, 0x1c, 0xa7, 0xc2, 0xc8, 0xc3, 0x29, 0xbd, 0x2e, 0x40, 0xb7, 0xa0, 0x7a, 0xca, - 0x9b, 0x0f, 0xbc, 0xf4, 0xe3, 0xea, 0x4d, 0x86, 0xda, 0x1f, 0x97, 0x00, 0x0e, 0xe7, 0x4b, 0x0c, - 0xa4, 0x71, 0x5d, 0x03, 0xe9, 0xe4, 0xf4, 0xf8, 0x7a, 0x99, 0x7f, 0x75, 0x43, 0x59, 0xd2, 0x69, - 0x17, 0x6f, 0xda, 0x69, 0xdf, 0x87, 0x6a, 0x1c, 0xce, 0xb9, 0xa3, 0x08, 0x63, 0x4a, 0x5b, 0x5a, - 0x49, 0x25, 0x6f, 0x42, 0x79, 0xe2, 0x87, 0x63, 0x86, 0x8e, 0x95, 0xb2, 0x05, 0xed, 0xc2, 0x65, - 0x52, 0xed, 0xb2, 0xcb, 0x24, 0xde, 0xa0, 0x45, 0xf2, 0x1e, 0x0d, 0x0b, 0x99, 0x7c, 0x83, 0x96, - 0x5c, 0xb1, 0xd1, 0x14, 0x44, 0xbe, 0x81, 0xa6, 0x3d, 0x8f, 0x7d, 0xcb, 0xe5, 0x15, 0xda, 0xd4, - 0x1d, 0x9f, 0x61, 0xd9, 0xdd, 0xcc, 0x7f, 0xaf, 0x4f, 0x0f, 0xaa, 0xd3, 0x9d, 0xc7, 0xbe, 0xe1, - 0x1c, 0x22, 0x72, 0xa7, 0x2a, 0x93, 0x12, 0x5d, 0xb1, 0x33, 0x64, 0xed, 0xc7, 0xb0, 0x92, 0x85, - 0xf1, 0x04, 0x24, 0x81, 0xea, 0x1b, 0x3c, 0x3b, 0x8d, 0x78, 0x6a, 0x1b, 0x98, 0x46, 0xb7, 0xaf, - 0x16, 0xb4, 0x18, 0x1a, 0xb8, 0xbc, 0xf4, 0x8e, 0xeb, 0xba, 0xfd, 0x03, 0x28, 0x61, 0xf8, 0x55, - 0x2e, 0x7c, 0x0f, 0xc1, 0x98, 0x8b, 0xcc, 0xbc, 0xf9, 0x15, 0xb3, 0xe6, 0xf7, 0xdf, 0x05, 0x58, - 0x31, 0xfd, 0xf9, 0xf8, 0xe4, 0xa2, 0x01, 0xc2, 0xaf, 0x3b, 0x42, 0x2d, 0x31, 0x1f, 0xe5, 0xa6, - 0xe6, 0x93, 0x5a, 0x47, 0x71, 0x89, 0x75, 0xdc, 0xf4, 0xcc, 0xb5, 0x2f, 0x60, 0x55, 0x6e, 0x5e, - 0x6a, 0x3d, 0xd1, 0x66, 0xe1, 0x0a, 0x6d, 0x6a, 0xbf, 0x50, 0x60, 0x55, 0xc4, 0xf7, 0xff, 0xbb, - 0xd2, 0x2a, 0x37, 0x0c, 0xeb, 0xe5, 0x1b, 0x5d, 0x1e, 0xfd, 0xbf, 0xf4, 0x34, 0x6d, 0x08, 0xcd, - 0x44, 0x7d, 0x37, 0x50, 0xfb, 0x15, 0x46, 0xfc, 0x8b, 0x02, 0x34, 0x06, 0xec, 0xe5, 0x92, 0x20, - 0x5a, 0xbe, 0xee, 0x71, 0x7c, 0x98, 0x2b, 0x57, 0x1b, 0xdb, 0xeb, 0x59, 0x19, 0xc4, 0xd5, 0x63, - 0x52, 0xc1, 0xa6, 0xb7, 0xa8, 0xca, 0xf2, 0x5b, 0xd4, 0xd2, 0x62, 0xb7, 0x9e, 0xb9, 0xc5, 0x2b, - 0x2e, 0xbb, 0xc5, 0xd3, 0xfe, 0xad, 0x08, 0x0d, 0x6c, 0x90, 0x29, 0x8b, 0xe6, 0xd3, 0x38, 0x27, - 0x4c, 0xe1, 0x6a, 0x61, 0x3a, 0x50, 0x09, 0x71, 0x92, 0x74, 0xa5, 0x4b, 0x83, 0xbf, 0x40, 0x61, - 0x6b, 0xfc, 0xdc, 0x0d, 0x02, 0xe6, 0x58, 0x82, 0x92, 0x14, 0x30, 0x4d, 0x49, 0x16, 0x22, 0x44, - 0xbc, 0xfc, 0x9c, 0xf9, 0x21, 0x4b, 0x51, 0x45, 0xbc, 0x4f, 0x68, 0x70, 0x5a, 0x02, 0xc9, 0xdd, - 0x37, 0x88, 0xca, 0xe0, 0xfc, 0xbe, 0x21, 0xed, 0x35, 0x91, 0x5b, 0x47, 0xae, 0xe8, 0x35, 0x91, - 0xcd, 0xbb, 0xa8, 0x99, 0x3d, 0x9d, 0x5a, 0x7e, 0x10, 0xa1, 0xd3, 0xd4, 0x68, 0x0d, 0x09, 0xc3, - 0x20, 0x22, 0x5f, 0x43, 0x7a, 0x5d, 0x2c, 0x6f, 0xc9, 0xc5, 0x39, 0xb6, 0x2e, 0xbb, 0x58, 0xa0, - 0xab, 0xe3, 0xdc, 0xfd, 0xcf, 0x92, 0x1b, 0xea, 0xca, 0x4d, 0x6f, 0xa8, 0x1f, 0x42, 0x59, 0xc4, - 0xa8, 0xda, 0xeb, 0x62, 0x94, 0xc0, 0x65, 0xed, 0xb3, 0x91, 0xb7, 0xcf, 0x5f, 0x16, 0x80, 0x74, - 0xa7, 0x53, 0x7f, 0x6c, 0xc7, 0xcc, 0x70, 0xa2, 0x8b, 0x66, 0x7a, 0xed, 0xcf, 0x2e, 0x9f, 0x41, - 0x7d, 0xe6, 0x3b, 0x6c, 0x6a, 0x25, 0xdf, 0x94, 0x2e, 0xad, 0x7e, 0x10, 0xc6, 0x5b, 0x52, 0x02, - 0x25, 0xbc, 0xc4, 0x51, 0xb0, 0xee, 0xc0, 0x67, 0xde, 0x84, 0xcd, 0xec, 0x97, 0xb2, 0x14, 0xe1, - 0x8f, 0xa4, 0x03, 0xd5, 0x90, 0x45, 0x2c, 0x3c, 0x65, 0x57, 0x16, 0x55, 0x09, 0x48, 0x7b, 0x06, - 0x1b, 0xb9, 0x1d, 0x49, 0x47, 0xbe, 0x85, 0x5f, 0x2b, 0xc3, 0x58, 0x7e, 0xb4, 0x12, 0x03, 0xfe, - 0x3a, 0xe6, 0x25, 0x9f, 0x41, 0xf9, 0x63, 0xea, 0xf0, 0xc5, 0xab, 0xe2, 0xec, 0x1e, 0xa8, 0x59, - 0x4d, 0xbb, 0x63, 0x0c, 0x36, 0xf2, 0x54, 0x0a, 0xd7, 0x3b, 0x15, 0xed, 0xef, 0x0a, 0xb0, 0xde, - 0x75, 0x1c, 0xf1, 0x77, 0xc3, 0x25, 0xaa, 0x2f, 0x5e, 0x57, 0xf5, 0x0b, 0x81, 0x58, 0x84, 0x89, - 0x6b, 0x05, 0xe2, 0x0f, 0xa1, 0x92, 0xd6, 0x5a, 0xc5, 0x05, 0x77, 0x16, 0x72, 0x51, 0x09, 0xd0, - 0x6e, 0x01, 0xc9, 0x0a, 0x2b, 0xb4, 0xaa, 0xfd, 0x69, 0x11, 0xee, 0xee, 0xb2, 0x63, 0xd7, 0xcb, - 0xbe, 0xe2, 0x57, 0xdf, 0xc9, 0xc5, 0x4f, 0x65, 0x9f, 0xc1, 0xba, 0x28, 0xe4, 0x93, 0x7f, 0x62, - 0x59, 0xec, 0x58, 0x7e, 0x9d, 0x94, 0xb1, 0x6a, 0x0d, 0xf9, 0x07, 0x92, 0xad, 0xe3, 0x7f, 0xc5, - 0x1c, 0x3b, 0xb6, 0x9f, 0xd9, 0x11, 0xb3, 0x5c, 0x47, 0xfe, 0x59, 0x06, 0x12, 0x92, 0xe1, 0x90, - 0x21, 0x94, 0xb8, 0x0d, 0xa2, 0xeb, 0x36, 0xb7, 0xb7, 0x33, 0x62, 0x5d, 0xb2, 0x95, 0xac, 0x02, - 0x0f, 0x7c, 0x87, 0xed, 0x54, 0x8f, 0x06, 0x4f, 0x06, 0xc3, 0xef, 0x06, 0x14, 0x17, 0x22, 0x06, - 0xdc, 0x0a, 0x42, 0x76, 0xea, 0xfa, 0xf3, 0xc8, 0xca, 0x9e, 0x44, 0xf5, 0xca, 0x94, 0xb8, 0x91, - 0xcc, 0xc9, 0x10, 0xb5, 0x9f, 0xc2, 0xda, 0xc2, 0xcb, 0x78, 0x6d, 0x26, 0x5f, 0xa7, 0xbe, 0x41, - 0x56, 0xa1, 0x8e, 0x1f, 0xbb, 0x97, 0x7f, 0xfb, 0xd6, 0xfe, 0xb5, 0x80, 0x57, 0x4c, 0x33, 0x37, - 0xbe, 0x59, 0x06, 0xfb, 0xcd, 0x7c, 0x06, 0x83, 0xed, 0x77, 0xf3, 0xe6, 0x9b, 0x59, 0xb0, 0xf3, - 0xad, 0x00, 0xa6, 0x41, 0xa4, 0x6d, 0x43, 0x55, 0xd2, 0xc8, 0x6f, 0xc1, 0x5a, 0xe8, 0xfb, 0x71, - 0xd2, 0x89, 0x8a, 0x0e, 0xe4, 0xf2, 0x3f, 0xdb, 0xac, 0x72, 0xb0, 0x48, 0x06, 0x4f, 0xf2, 0xbd, - 0x48, 0x59, 0xfc, 0x0d, 0x44, 0x0e, 0x77, 0x1b, 0xbf, 0x5b, 0x4f, 0xff, 0xb7, 0xfb, 0xbf, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x35, 0x9f, 0x30, 0x98, 0xf2, 0x2b, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto b/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto deleted file mode 100644 index 497b4d9a9a..0000000000 --- a/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +++ /dev/null @@ -1,551 +0,0 @@ -syntax = "proto2"; -option go_package = "datastore"; - -package appengine; - -message Action{} - -message PropertyValue { - optional int64 int64Value = 1; - optional bool booleanValue = 2; - optional string stringValue = 3; - optional double doubleValue = 4; - - optional group PointValue = 5 { - required double x = 6; - required double y = 7; - } - - optional group UserValue = 8 { - required string email = 9; - required string auth_domain = 10; - optional string nickname = 11; - optional string federated_identity = 21; - optional string federated_provider = 22; - } - - optional group ReferenceValue = 12 { - required string app = 13; - optional string name_space = 20; - repeated group PathElement = 14 { - required string type = 15; - optional int64 id = 16; - optional string name = 17; - } - } -} - -message Property { - enum Meaning { - NO_MEANING = 0; - BLOB = 14; - TEXT = 15; - BYTESTRING = 16; - - ATOM_CATEGORY = 1; - ATOM_LINK = 2; - ATOM_TITLE = 3; - ATOM_CONTENT = 4; - ATOM_SUMMARY = 5; - ATOM_AUTHOR = 6; - - GD_WHEN = 7; - GD_EMAIL = 8; - GEORSS_POINT = 9; - GD_IM = 10; - - GD_PHONENUMBER = 11; - GD_POSTALADDRESS = 12; - - GD_RATING = 13; - - BLOBKEY = 17; - ENTITY_PROTO = 19; - - INDEX_VALUE = 18; - }; - - optional Meaning meaning = 1 [default = NO_MEANING]; - optional string meaning_uri = 2; - - required string name = 3; - - required PropertyValue value = 5; - - required bool multiple = 4; - - optional bool searchable = 6 [default=false]; - - enum FtsTokenizationOption { - HTML = 1; - ATOM = 2; - } - - optional FtsTokenizationOption fts_tokenization_option = 8; - - optional string locale = 9 [default = "en"]; -} - -message Path { - repeated group Element = 1 { - required string type = 2; - optional int64 id = 3; - optional string name = 4; - } -} - -message Reference { - required string app = 13; - optional string name_space = 20; - required Path path = 14; -} - -message User { - required string email = 1; - required string auth_domain = 2; - optional string nickname = 3; - optional string federated_identity = 6; - optional string federated_provider = 7; -} - -message EntityProto { - required Reference key = 13; - required Path entity_group = 16; - optional User owner = 17; - - enum Kind { - GD_CONTACT = 1; - GD_EVENT = 2; - GD_MESSAGE = 3; - } - optional Kind kind = 4; - optional string kind_uri = 5; - - repeated Property property = 14; - repeated Property raw_property = 15; - - optional int32 rank = 18; -} - -message CompositeProperty { - required int64 index_id = 1; - repeated string value = 2; -} - -message Index { - required string entity_type = 1; - required bool ancestor = 5; - repeated group Property = 2 { - required string name = 3; - enum Direction { - ASCENDING = 1; - DESCENDING = 2; - } - optional Direction direction = 4 [default = ASCENDING]; - } -} - -message CompositeIndex { - required string app_id = 1; - required int64 id = 2; - required Index definition = 3; - - enum State { - WRITE_ONLY = 1; - READ_WRITE = 2; - DELETED = 3; - ERROR = 4; - } - required State state = 4; - - optional bool only_use_if_required = 6 [default = false]; -} - -message IndexPostfix { - message IndexValue { - required string property_name = 1; - required PropertyValue value = 2; - } - - repeated IndexValue index_value = 1; - - optional Reference key = 2; - - optional bool before = 3 [default=true]; -} - -message IndexPosition { - optional string key = 1; - - optional bool before = 2 [default=true]; -} - -message Snapshot { - enum Status { - INACTIVE = 0; - ACTIVE = 1; - } - - required int64 ts = 1; -} - -message InternalHeader { - optional string qos = 1; -} - -message Transaction { - optional InternalHeader header = 4; - required fixed64 handle = 1; - required string app = 2; - optional bool mark_changes = 3 [default = false]; -} - -message Query { - optional InternalHeader header = 39; - - required string app = 1; - optional string name_space = 29; - - optional string kind = 3; - optional Reference ancestor = 17; - - repeated group Filter = 4 { - enum Operator { - LESS_THAN = 1; - LESS_THAN_OR_EQUAL = 2; - GREATER_THAN = 3; - GREATER_THAN_OR_EQUAL = 4; - EQUAL = 5; - IN = 6; - EXISTS = 7; - } - - required Operator op = 6; - repeated Property property = 14; - } - - optional string search_query = 8; - - repeated group Order = 9 { - enum Direction { - ASCENDING = 1; - DESCENDING = 2; - } - - required string property = 10; - optional Direction direction = 11 [default = ASCENDING]; - } - - enum Hint { - ORDER_FIRST = 1; - ANCESTOR_FIRST = 2; - FILTER_FIRST = 3; - } - optional Hint hint = 18; - - optional int32 count = 23; - - optional int32 offset = 12 [default = 0]; - - optional int32 limit = 16; - - optional CompiledCursor compiled_cursor = 30; - optional CompiledCursor end_compiled_cursor = 31; - - repeated CompositeIndex composite_index = 19; - - optional bool require_perfect_plan = 20 [default = false]; - - optional bool keys_only = 21 [default = false]; - - optional Transaction transaction = 22; - - optional bool compile = 25 [default = false]; - - optional int64 failover_ms = 26; - - optional bool strong = 32; - - repeated string property_name = 33; - - repeated string group_by_property_name = 34; - - optional bool distinct = 24; - - optional int64 min_safe_time_seconds = 35; - - repeated string safe_replica_name = 36; - - optional bool persist_offset = 37 [default=false]; -} - -message CompiledQuery { - required group PrimaryScan = 1 { - optional string index_name = 2; - - optional string start_key = 3; - optional bool start_inclusive = 4; - optional string end_key = 5; - optional bool end_inclusive = 6; - - repeated string start_postfix_value = 22; - repeated string end_postfix_value = 23; - - optional int64 end_unapplied_log_timestamp_us = 19; - } - - repeated group MergeJoinScan = 7 { - required string index_name = 8; - - repeated string prefix_value = 9; - - optional bool value_prefix = 20 [default=false]; - } - - optional Index index_def = 21; - - optional int32 offset = 10 [default = 0]; - - optional int32 limit = 11; - - required bool keys_only = 12; - - repeated string property_name = 24; - - optional int32 distinct_infix_size = 25; - - optional group EntityFilter = 13 { - optional bool distinct = 14 [default=false]; - - optional string kind = 17; - optional Reference ancestor = 18; - } -} - -message CompiledCursor { - optional group Position = 2 { - optional string start_key = 27; - - repeated group IndexValue = 29 { - optional string property = 30; - required PropertyValue value = 31; - } - - optional Reference key = 32; - - optional bool start_inclusive = 28 [default=true]; - } -} - -message Cursor { - required fixed64 cursor = 1; - - optional string app = 2; -} - -message Error { - enum ErrorCode { - BAD_REQUEST = 1; - CONCURRENT_TRANSACTION = 2; - INTERNAL_ERROR = 3; - NEED_INDEX = 4; - TIMEOUT = 5; - PERMISSION_DENIED = 6; - BIGTABLE_ERROR = 7; - COMMITTED_BUT_STILL_APPLYING = 8; - CAPABILITY_DISABLED = 9; - TRY_ALTERNATE_BACKEND = 10; - SAFE_TIME_TOO_OLD = 11; - } -} - -message Cost { - optional int32 index_writes = 1; - optional int32 index_write_bytes = 2; - optional int32 entity_writes = 3; - optional int32 entity_write_bytes = 4; - optional group CommitCost = 5 { - optional int32 requested_entity_puts = 6; - optional int32 requested_entity_deletes = 7; - }; - optional int32 approximate_storage_delta = 8; - optional int32 id_sequence_updates = 9; -} - -message GetRequest { - optional InternalHeader header = 6; - - repeated Reference key = 1; - optional Transaction transaction = 2; - - optional int64 failover_ms = 3; - - optional bool strong = 4; - - optional bool allow_deferred = 5 [default=false]; -} - -message GetResponse { - repeated group Entity = 1 { - optional EntityProto entity = 2; - optional Reference key = 4; - - optional int64 version = 3; - } - - repeated Reference deferred = 5; - - optional bool in_order = 6 [default=true]; -} - -message PutRequest { - optional InternalHeader header = 11; - - repeated EntityProto entity = 1; - optional Transaction transaction = 2; - repeated CompositeIndex composite_index = 3; - - optional bool trusted = 4 [default = false]; - - optional bool force = 7 [default = false]; - - optional bool mark_changes = 8 [default = false]; - repeated Snapshot snapshot = 9; - - enum AutoIdPolicy { - CURRENT = 0; - SEQUENTIAL = 1; - } - optional AutoIdPolicy auto_id_policy = 10 [default = CURRENT]; -} - -message PutResponse { - repeated Reference key = 1; - optional Cost cost = 2; - repeated int64 version = 3; -} - -message TouchRequest { - optional InternalHeader header = 10; - - repeated Reference key = 1; - repeated CompositeIndex composite_index = 2; - optional bool force = 3 [default = false]; - repeated Snapshot snapshot = 9; -} - -message TouchResponse { - optional Cost cost = 1; -} - -message DeleteRequest { - optional InternalHeader header = 10; - - repeated Reference key = 6; - optional Transaction transaction = 5; - - optional bool trusted = 4 [default = false]; - - optional bool force = 7 [default = false]; - - optional bool mark_changes = 8 [default = false]; - repeated Snapshot snapshot = 9; -} - -message DeleteResponse { - optional Cost cost = 1; - repeated int64 version = 3; -} - -message NextRequest { - optional InternalHeader header = 5; - - required Cursor cursor = 1; - optional int32 count = 2; - - optional int32 offset = 4 [default = 0]; - - optional bool compile = 3 [default = false]; -} - -message QueryResult { - optional Cursor cursor = 1; - - repeated EntityProto result = 2; - - optional int32 skipped_results = 7; - - required bool more_results = 3; - - optional bool keys_only = 4; - - optional bool index_only = 9; - - optional bool small_ops = 10; - - optional CompiledQuery compiled_query = 5; - - optional CompiledCursor compiled_cursor = 6; - - repeated CompositeIndex index = 8; - - repeated int64 version = 11; -} - -message AllocateIdsRequest { - optional InternalHeader header = 4; - - optional Reference model_key = 1; - - optional int64 size = 2; - - optional int64 max = 3; - - repeated Reference reserve = 5; -} - -message AllocateIdsResponse { - required int64 start = 1; - required int64 end = 2; - optional Cost cost = 3; -} - -message CompositeIndices { - repeated CompositeIndex index = 1; -} - -message AddActionsRequest { - optional InternalHeader header = 3; - - required Transaction transaction = 1; - repeated Action action = 2; -} - -message AddActionsResponse { -} - -message BeginTransactionRequest { - optional InternalHeader header = 3; - - required string app = 1; - optional bool allow_multiple_eg = 2 [default = false]; - optional string database_id = 4; - - enum TransactionMode { - UNKNOWN = 0; - READ_ONLY = 1; - READ_WRITE = 2; - } - optional TransactionMode mode = 5 [default = UNKNOWN]; - - optional Transaction previous_transaction = 7; -} - -message CommitResponse { - optional Cost cost = 1; - - repeated group Version = 3 { - required Reference root_entity_key = 4; - required int64 version = 5; - } -} diff --git a/vendor/google.golang.org/appengine/internal/identity.go b/vendor/google.golang.org/appengine/internal/identity.go deleted file mode 100644 index 0f95aa91d5..0000000000 --- a/vendor/google.golang.org/appengine/internal/identity.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -package internal - -import ( - "context" - "os" -) - -var ( - // This is set to true in identity_classic.go, which is behind the appengine build tag. - // The appengine build tag is set for the first generation runtimes (<= Go 1.9) but not - // the second generation runtimes (>= Go 1.11), so this indicates whether we're on a - // first-gen runtime. See IsStandard below for the second-gen check. - appengineStandard bool - - // This is set to true in identity_flex.go, which is behind the appenginevm build tag. - appengineFlex bool -) - -// AppID is the implementation of the wrapper function of the same name in -// ../identity.go. See that file for commentary. -func AppID(c context.Context) string { - return appID(FullyQualifiedAppID(c)) -} - -// IsStandard is the implementation of the wrapper function of the same name in -// ../appengine.go. See that file for commentary. -func IsStandard() bool { - // appengineStandard will be true for first-gen runtimes (<= Go 1.9) but not - // second-gen (>= Go 1.11). - return appengineStandard || IsSecondGen() -} - -// IsSecondGen is the implementation of the wrapper function of the same name in -// ../appengine.go. See that file for commentary. -func IsSecondGen() bool { - // Second-gen runtimes set $GAE_ENV so we use that to check if we're on a second-gen runtime. - return os.Getenv("GAE_ENV") == "standard" -} - -// IsFlex is the implementation of the wrapper function of the same name in -// ../appengine.go. See that file for commentary. -func IsFlex() bool { - return appengineFlex -} - -// IsAppEngine is the implementation of the wrapper function of the same name in -// ../appengine.go. See that file for commentary. -func IsAppEngine() bool { - return IsStandard() || IsFlex() -} diff --git a/vendor/google.golang.org/appengine/internal/identity_classic.go b/vendor/google.golang.org/appengine/internal/identity_classic.go deleted file mode 100644 index 5ad3548bf7..0000000000 --- a/vendor/google.golang.org/appengine/internal/identity_classic.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2015 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -//go:build appengine -// +build appengine - -package internal - -import ( - "context" - - "appengine" -) - -func init() { - appengineStandard = true -} - -func DefaultVersionHostname(ctx context.Context) string { - c := fromContext(ctx) - if c == nil { - panic(errNotAppEngineContext) - } - return appengine.DefaultVersionHostname(c) -} - -func Datacenter(_ context.Context) string { return appengine.Datacenter() } -func ServerSoftware() string { return appengine.ServerSoftware() } -func InstanceID() string { return appengine.InstanceID() } -func IsDevAppServer() bool { return appengine.IsDevAppServer() } - -func RequestID(ctx context.Context) string { - c := fromContext(ctx) - if c == nil { - panic(errNotAppEngineContext) - } - return appengine.RequestID(c) -} - -func ModuleName(ctx context.Context) string { - c := fromContext(ctx) - if c == nil { - panic(errNotAppEngineContext) - } - return appengine.ModuleName(c) -} -func VersionID(ctx context.Context) string { - c := fromContext(ctx) - if c == nil { - panic(errNotAppEngineContext) - } - return appengine.VersionID(c) -} - -func fullyQualifiedAppID(ctx context.Context) string { - c := fromContext(ctx) - if c == nil { - panic(errNotAppEngineContext) - } - return c.FullyQualifiedAppID() -} diff --git a/vendor/google.golang.org/appengine/internal/identity_flex.go b/vendor/google.golang.org/appengine/internal/identity_flex.go deleted file mode 100644 index 4201b6b585..0000000000 --- a/vendor/google.golang.org/appengine/internal/identity_flex.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2018 Google LLC. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -//go:build appenginevm -// +build appenginevm - -package internal - -func init() { - appengineFlex = true -} diff --git a/vendor/google.golang.org/appengine/internal/identity_vm.go b/vendor/google.golang.org/appengine/internal/identity_vm.go deleted file mode 100644 index 18ddda3a42..0000000000 --- a/vendor/google.golang.org/appengine/internal/identity_vm.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -//go:build !appengine -// +build !appengine - -package internal - -import ( - "context" - "log" - "net/http" - "os" - "strings" -) - -// These functions are implementations of the wrapper functions -// in ../appengine/identity.go. See that file for commentary. - -const ( - hDefaultVersionHostname = "X-AppEngine-Default-Version-Hostname" - hRequestLogId = "X-AppEngine-Request-Log-Id" - hDatacenter = "X-AppEngine-Datacenter" -) - -func ctxHeaders(ctx context.Context) http.Header { - c := fromContext(ctx) - if c == nil { - return nil - } - return c.Request().Header -} - -func DefaultVersionHostname(ctx context.Context) string { - return ctxHeaders(ctx).Get(hDefaultVersionHostname) -} - -func RequestID(ctx context.Context) string { - return ctxHeaders(ctx).Get(hRequestLogId) -} - -func Datacenter(ctx context.Context) string { - if dc := ctxHeaders(ctx).Get(hDatacenter); dc != "" { - return dc - } - // If the header isn't set, read zone from the metadata service. - // It has the format projects/[NUMERIC_PROJECT_ID]/zones/[ZONE] - zone, err := getMetadata("instance/zone") - if err != nil { - log.Printf("Datacenter: %v", err) - return "" - } - parts := strings.Split(string(zone), "/") - if len(parts) == 0 { - return "" - } - return parts[len(parts)-1] -} - -func ServerSoftware() string { - // TODO(dsymonds): Remove fallback when we've verified this. - if s := os.Getenv("SERVER_SOFTWARE"); s != "" { - return s - } - if s := os.Getenv("GAE_ENV"); s != "" { - return s - } - return "Google App Engine/1.x.x" -} - -// TODO(dsymonds): Remove the metadata fetches. - -func ModuleName(_ context.Context) string { - if s := os.Getenv("GAE_MODULE_NAME"); s != "" { - return s - } - if s := os.Getenv("GAE_SERVICE"); s != "" { - return s - } - return string(mustGetMetadata("instance/attributes/gae_backend_name")) -} - -func VersionID(_ context.Context) string { - if s1, s2 := os.Getenv("GAE_MODULE_VERSION"), os.Getenv("GAE_MINOR_VERSION"); s1 != "" && s2 != "" { - return s1 + "." + s2 - } - if s1, s2 := os.Getenv("GAE_VERSION"), os.Getenv("GAE_DEPLOYMENT_ID"); s1 != "" && s2 != "" { - return s1 + "." + s2 - } - return string(mustGetMetadata("instance/attributes/gae_backend_version")) + "." + string(mustGetMetadata("instance/attributes/gae_backend_minor_version")) -} - -func InstanceID() string { - if s := os.Getenv("GAE_MODULE_INSTANCE"); s != "" { - return s - } - if s := os.Getenv("GAE_INSTANCE"); s != "" { - return s - } - return string(mustGetMetadata("instance/attributes/gae_backend_instance")) -} - -func partitionlessAppID() string { - // gae_project has everything except the partition prefix. - if appID := os.Getenv("GAE_LONG_APP_ID"); appID != "" { - return appID - } - if project := os.Getenv("GOOGLE_CLOUD_PROJECT"); project != "" { - return project - } - return string(mustGetMetadata("instance/attributes/gae_project")) -} - -func fullyQualifiedAppID(_ context.Context) string { - if s := os.Getenv("GAE_APPLICATION"); s != "" { - return s - } - appID := partitionlessAppID() - - part := os.Getenv("GAE_PARTITION") - if part == "" { - part = string(mustGetMetadata("instance/attributes/gae_partition")) - } - - if part != "" { - appID = part + "~" + appID - } - return appID -} - -func IsDevAppServer() bool { - return os.Getenv("RUN_WITH_DEVAPPSERVER") != "" || os.Getenv("GAE_ENV") == "localdev" -} diff --git a/vendor/google.golang.org/appengine/internal/internal.go b/vendor/google.golang.org/appengine/internal/internal.go deleted file mode 100644 index 051ea3980a..0000000000 --- a/vendor/google.golang.org/appengine/internal/internal.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -// Package internal provides support for package appengine. -// -// Programs should not use this package directly. Its API is not stable. -// Use packages appengine and appengine/* instead. -package internal - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - - remotepb "google.golang.org/appengine/internal/remote_api" -) - -// errorCodeMaps is a map of service name to the error code map for the service. -var errorCodeMaps = make(map[string]map[int32]string) - -// RegisterErrorCodeMap is called from API implementations to register their -// error code map. This should only be called from init functions. -func RegisterErrorCodeMap(service string, m map[int32]string) { - errorCodeMaps[service] = m -} - -type timeoutCodeKey struct { - service string - code int32 -} - -// timeoutCodes is the set of service+code pairs that represent timeouts. -var timeoutCodes = make(map[timeoutCodeKey]bool) - -func RegisterTimeoutErrorCode(service string, code int32) { - timeoutCodes[timeoutCodeKey{service, code}] = true -} - -// APIError is the type returned by appengine.Context's Call method -// when an API call fails in an API-specific way. This may be, for instance, -// a taskqueue API call failing with TaskQueueServiceError::UNKNOWN_QUEUE. -type APIError struct { - Service string - Detail string - Code int32 // API-specific error code -} - -func (e *APIError) Error() string { - if e.Code == 0 { - if e.Detail == "" { - return "APIError " - } - return e.Detail - } - s := fmt.Sprintf("API error %d", e.Code) - if m, ok := errorCodeMaps[e.Service]; ok { - s += " (" + e.Service + ": " + m[e.Code] + ")" - } else { - // Shouldn't happen, but provide a bit more detail if it does. - s = e.Service + " " + s - } - if e.Detail != "" { - s += ": " + e.Detail - } - return s -} - -func (e *APIError) IsTimeout() bool { - return timeoutCodes[timeoutCodeKey{e.Service, e.Code}] -} - -// CallError is the type returned by appengine.Context's Call method when an -// API call fails in a generic way, such as RpcError::CAPABILITY_DISABLED. -type CallError struct { - Detail string - Code int32 - // TODO: Remove this if we get a distinguishable error code. - Timeout bool -} - -func (e *CallError) Error() string { - var msg string - switch remotepb.RpcError_ErrorCode(e.Code) { - case remotepb.RpcError_UNKNOWN: - return e.Detail - case remotepb.RpcError_OVER_QUOTA: - msg = "Over quota" - case remotepb.RpcError_CAPABILITY_DISABLED: - msg = "Capability disabled" - case remotepb.RpcError_CANCELLED: - msg = "Canceled" - default: - msg = fmt.Sprintf("Call error %d", e.Code) - } - s := msg + ": " + e.Detail - if e.Timeout { - s += " (timeout)" - } - return s -} - -func (e *CallError) IsTimeout() bool { - return e.Timeout -} - -// NamespaceMods is a map from API service to a function that will mutate an RPC request to attach a namespace. -// The function should be prepared to be called on the same message more than once; it should only modify the -// RPC request the first time. -var NamespaceMods = make(map[string]func(m proto.Message, namespace string)) diff --git a/vendor/google.golang.org/appengine/internal/log/log_service.pb.go b/vendor/google.golang.org/appengine/internal/log/log_service.pb.go deleted file mode 100644 index 8545ac4ad6..0000000000 --- a/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +++ /dev/null @@ -1,1313 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google.golang.org/appengine/internal/log/log_service.proto - -package log - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type LogServiceError_ErrorCode int32 - -const ( - LogServiceError_OK LogServiceError_ErrorCode = 0 - LogServiceError_INVALID_REQUEST LogServiceError_ErrorCode = 1 - LogServiceError_STORAGE_ERROR LogServiceError_ErrorCode = 2 -) - -var LogServiceError_ErrorCode_name = map[int32]string{ - 0: "OK", - 1: "INVALID_REQUEST", - 2: "STORAGE_ERROR", -} -var LogServiceError_ErrorCode_value = map[string]int32{ - "OK": 0, - "INVALID_REQUEST": 1, - "STORAGE_ERROR": 2, -} - -func (x LogServiceError_ErrorCode) Enum() *LogServiceError_ErrorCode { - p := new(LogServiceError_ErrorCode) - *p = x - return p -} -func (x LogServiceError_ErrorCode) String() string { - return proto.EnumName(LogServiceError_ErrorCode_name, int32(x)) -} -func (x *LogServiceError_ErrorCode) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(LogServiceError_ErrorCode_value, data, "LogServiceError_ErrorCode") - if err != nil { - return err - } - *x = LogServiceError_ErrorCode(value) - return nil -} -func (LogServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{0, 0} -} - -type LogServiceError struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogServiceError) Reset() { *m = LogServiceError{} } -func (m *LogServiceError) String() string { return proto.CompactTextString(m) } -func (*LogServiceError) ProtoMessage() {} -func (*LogServiceError) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{0} -} -func (m *LogServiceError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogServiceError.Unmarshal(m, b) -} -func (m *LogServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogServiceError.Marshal(b, m, deterministic) -} -func (dst *LogServiceError) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogServiceError.Merge(dst, src) -} -func (m *LogServiceError) XXX_Size() int { - return xxx_messageInfo_LogServiceError.Size(m) -} -func (m *LogServiceError) XXX_DiscardUnknown() { - xxx_messageInfo_LogServiceError.DiscardUnknown(m) -} - -var xxx_messageInfo_LogServiceError proto.InternalMessageInfo - -type UserAppLogLine struct { - TimestampUsec *int64 `protobuf:"varint,1,req,name=timestamp_usec,json=timestampUsec" json:"timestamp_usec,omitempty"` - Level *int64 `protobuf:"varint,2,req,name=level" json:"level,omitempty"` - Message *string `protobuf:"bytes,3,req,name=message" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserAppLogLine) Reset() { *m = UserAppLogLine{} } -func (m *UserAppLogLine) String() string { return proto.CompactTextString(m) } -func (*UserAppLogLine) ProtoMessage() {} -func (*UserAppLogLine) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{1} -} -func (m *UserAppLogLine) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserAppLogLine.Unmarshal(m, b) -} -func (m *UserAppLogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserAppLogLine.Marshal(b, m, deterministic) -} -func (dst *UserAppLogLine) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserAppLogLine.Merge(dst, src) -} -func (m *UserAppLogLine) XXX_Size() int { - return xxx_messageInfo_UserAppLogLine.Size(m) -} -func (m *UserAppLogLine) XXX_DiscardUnknown() { - xxx_messageInfo_UserAppLogLine.DiscardUnknown(m) -} - -var xxx_messageInfo_UserAppLogLine proto.InternalMessageInfo - -func (m *UserAppLogLine) GetTimestampUsec() int64 { - if m != nil && m.TimestampUsec != nil { - return *m.TimestampUsec - } - return 0 -} - -func (m *UserAppLogLine) GetLevel() int64 { - if m != nil && m.Level != nil { - return *m.Level - } - return 0 -} - -func (m *UserAppLogLine) GetMessage() string { - if m != nil && m.Message != nil { - return *m.Message - } - return "" -} - -type UserAppLogGroup struct { - LogLine []*UserAppLogLine `protobuf:"bytes,2,rep,name=log_line,json=logLine" json:"log_line,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UserAppLogGroup) Reset() { *m = UserAppLogGroup{} } -func (m *UserAppLogGroup) String() string { return proto.CompactTextString(m) } -func (*UserAppLogGroup) ProtoMessage() {} -func (*UserAppLogGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{2} -} -func (m *UserAppLogGroup) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserAppLogGroup.Unmarshal(m, b) -} -func (m *UserAppLogGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserAppLogGroup.Marshal(b, m, deterministic) -} -func (dst *UserAppLogGroup) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserAppLogGroup.Merge(dst, src) -} -func (m *UserAppLogGroup) XXX_Size() int { - return xxx_messageInfo_UserAppLogGroup.Size(m) -} -func (m *UserAppLogGroup) XXX_DiscardUnknown() { - xxx_messageInfo_UserAppLogGroup.DiscardUnknown(m) -} - -var xxx_messageInfo_UserAppLogGroup proto.InternalMessageInfo - -func (m *UserAppLogGroup) GetLogLine() []*UserAppLogLine { - if m != nil { - return m.LogLine - } - return nil -} - -type FlushRequest struct { - Logs []byte `protobuf:"bytes,1,opt,name=logs" json:"logs,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FlushRequest) Reset() { *m = FlushRequest{} } -func (m *FlushRequest) String() string { return proto.CompactTextString(m) } -func (*FlushRequest) ProtoMessage() {} -func (*FlushRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{3} -} -func (m *FlushRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FlushRequest.Unmarshal(m, b) -} -func (m *FlushRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FlushRequest.Marshal(b, m, deterministic) -} -func (dst *FlushRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FlushRequest.Merge(dst, src) -} -func (m *FlushRequest) XXX_Size() int { - return xxx_messageInfo_FlushRequest.Size(m) -} -func (m *FlushRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FlushRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_FlushRequest proto.InternalMessageInfo - -func (m *FlushRequest) GetLogs() []byte { - if m != nil { - return m.Logs - } - return nil -} - -type SetStatusRequest struct { - Status *string `protobuf:"bytes,1,req,name=status" json:"status,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SetStatusRequest) Reset() { *m = SetStatusRequest{} } -func (m *SetStatusRequest) String() string { return proto.CompactTextString(m) } -func (*SetStatusRequest) ProtoMessage() {} -func (*SetStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{4} -} -func (m *SetStatusRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SetStatusRequest.Unmarshal(m, b) -} -func (m *SetStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SetStatusRequest.Marshal(b, m, deterministic) -} -func (dst *SetStatusRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_SetStatusRequest.Merge(dst, src) -} -func (m *SetStatusRequest) XXX_Size() int { - return xxx_messageInfo_SetStatusRequest.Size(m) -} -func (m *SetStatusRequest) XXX_DiscardUnknown() { - xxx_messageInfo_SetStatusRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_SetStatusRequest proto.InternalMessageInfo - -func (m *SetStatusRequest) GetStatus() string { - if m != nil && m.Status != nil { - return *m.Status - } - return "" -} - -type LogOffset struct { - RequestId []byte `protobuf:"bytes,1,opt,name=request_id,json=requestId" json:"request_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogOffset) Reset() { *m = LogOffset{} } -func (m *LogOffset) String() string { return proto.CompactTextString(m) } -func (*LogOffset) ProtoMessage() {} -func (*LogOffset) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{5} -} -func (m *LogOffset) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogOffset.Unmarshal(m, b) -} -func (m *LogOffset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogOffset.Marshal(b, m, deterministic) -} -func (dst *LogOffset) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogOffset.Merge(dst, src) -} -func (m *LogOffset) XXX_Size() int { - return xxx_messageInfo_LogOffset.Size(m) -} -func (m *LogOffset) XXX_DiscardUnknown() { - xxx_messageInfo_LogOffset.DiscardUnknown(m) -} - -var xxx_messageInfo_LogOffset proto.InternalMessageInfo - -func (m *LogOffset) GetRequestId() []byte { - if m != nil { - return m.RequestId - } - return nil -} - -type LogLine struct { - Time *int64 `protobuf:"varint,1,req,name=time" json:"time,omitempty"` - Level *int32 `protobuf:"varint,2,req,name=level" json:"level,omitempty"` - LogMessage *string `protobuf:"bytes,3,req,name=log_message,json=logMessage" json:"log_message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogLine) Reset() { *m = LogLine{} } -func (m *LogLine) String() string { return proto.CompactTextString(m) } -func (*LogLine) ProtoMessage() {} -func (*LogLine) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{6} -} -func (m *LogLine) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogLine.Unmarshal(m, b) -} -func (m *LogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogLine.Marshal(b, m, deterministic) -} -func (dst *LogLine) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogLine.Merge(dst, src) -} -func (m *LogLine) XXX_Size() int { - return xxx_messageInfo_LogLine.Size(m) -} -func (m *LogLine) XXX_DiscardUnknown() { - xxx_messageInfo_LogLine.DiscardUnknown(m) -} - -var xxx_messageInfo_LogLine proto.InternalMessageInfo - -func (m *LogLine) GetTime() int64 { - if m != nil && m.Time != nil { - return *m.Time - } - return 0 -} - -func (m *LogLine) GetLevel() int32 { - if m != nil && m.Level != nil { - return *m.Level - } - return 0 -} - -func (m *LogLine) GetLogMessage() string { - if m != nil && m.LogMessage != nil { - return *m.LogMessage - } - return "" -} - -type RequestLog struct { - AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` - ModuleId *string `protobuf:"bytes,37,opt,name=module_id,json=moduleId,def=default" json:"module_id,omitempty"` - VersionId *string `protobuf:"bytes,2,req,name=version_id,json=versionId" json:"version_id,omitempty"` - RequestId []byte `protobuf:"bytes,3,req,name=request_id,json=requestId" json:"request_id,omitempty"` - Offset *LogOffset `protobuf:"bytes,35,opt,name=offset" json:"offset,omitempty"` - Ip *string `protobuf:"bytes,4,req,name=ip" json:"ip,omitempty"` - Nickname *string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` - StartTime *int64 `protobuf:"varint,6,req,name=start_time,json=startTime" json:"start_time,omitempty"` - EndTime *int64 `protobuf:"varint,7,req,name=end_time,json=endTime" json:"end_time,omitempty"` - Latency *int64 `protobuf:"varint,8,req,name=latency" json:"latency,omitempty"` - Mcycles *int64 `protobuf:"varint,9,req,name=mcycles" json:"mcycles,omitempty"` - Method *string `protobuf:"bytes,10,req,name=method" json:"method,omitempty"` - Resource *string `protobuf:"bytes,11,req,name=resource" json:"resource,omitempty"` - HttpVersion *string `protobuf:"bytes,12,req,name=http_version,json=httpVersion" json:"http_version,omitempty"` - Status *int32 `protobuf:"varint,13,req,name=status" json:"status,omitempty"` - ResponseSize *int64 `protobuf:"varint,14,req,name=response_size,json=responseSize" json:"response_size,omitempty"` - Referrer *string `protobuf:"bytes,15,opt,name=referrer" json:"referrer,omitempty"` - UserAgent *string `protobuf:"bytes,16,opt,name=user_agent,json=userAgent" json:"user_agent,omitempty"` - UrlMapEntry *string `protobuf:"bytes,17,req,name=url_map_entry,json=urlMapEntry" json:"url_map_entry,omitempty"` - Combined *string `protobuf:"bytes,18,req,name=combined" json:"combined,omitempty"` - ApiMcycles *int64 `protobuf:"varint,19,opt,name=api_mcycles,json=apiMcycles" json:"api_mcycles,omitempty"` - Host *string `protobuf:"bytes,20,opt,name=host" json:"host,omitempty"` - Cost *float64 `protobuf:"fixed64,21,opt,name=cost" json:"cost,omitempty"` - TaskQueueName *string `protobuf:"bytes,22,opt,name=task_queue_name,json=taskQueueName" json:"task_queue_name,omitempty"` - TaskName *string `protobuf:"bytes,23,opt,name=task_name,json=taskName" json:"task_name,omitempty"` - WasLoadingRequest *bool `protobuf:"varint,24,opt,name=was_loading_request,json=wasLoadingRequest" json:"was_loading_request,omitempty"` - PendingTime *int64 `protobuf:"varint,25,opt,name=pending_time,json=pendingTime" json:"pending_time,omitempty"` - ReplicaIndex *int32 `protobuf:"varint,26,opt,name=replica_index,json=replicaIndex,def=-1" json:"replica_index,omitempty"` - Finished *bool `protobuf:"varint,27,opt,name=finished,def=1" json:"finished,omitempty"` - CloneKey []byte `protobuf:"bytes,28,opt,name=clone_key,json=cloneKey" json:"clone_key,omitempty"` - Line []*LogLine `protobuf:"bytes,29,rep,name=line" json:"line,omitempty"` - LinesIncomplete *bool `protobuf:"varint,36,opt,name=lines_incomplete,json=linesIncomplete" json:"lines_incomplete,omitempty"` - AppEngineRelease []byte `protobuf:"bytes,38,opt,name=app_engine_release,json=appEngineRelease" json:"app_engine_release,omitempty"` - ExitReason *int32 `protobuf:"varint,30,opt,name=exit_reason,json=exitReason" json:"exit_reason,omitempty"` - WasThrottledForTime *bool `protobuf:"varint,31,opt,name=was_throttled_for_time,json=wasThrottledForTime" json:"was_throttled_for_time,omitempty"` - WasThrottledForRequests *bool `protobuf:"varint,32,opt,name=was_throttled_for_requests,json=wasThrottledForRequests" json:"was_throttled_for_requests,omitempty"` - ThrottledTime *int64 `protobuf:"varint,33,opt,name=throttled_time,json=throttledTime" json:"throttled_time,omitempty"` - ServerName []byte `protobuf:"bytes,34,opt,name=server_name,json=serverName" json:"server_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RequestLog) Reset() { *m = RequestLog{} } -func (m *RequestLog) String() string { return proto.CompactTextString(m) } -func (*RequestLog) ProtoMessage() {} -func (*RequestLog) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{7} -} -func (m *RequestLog) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RequestLog.Unmarshal(m, b) -} -func (m *RequestLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RequestLog.Marshal(b, m, deterministic) -} -func (dst *RequestLog) XXX_Merge(src proto.Message) { - xxx_messageInfo_RequestLog.Merge(dst, src) -} -func (m *RequestLog) XXX_Size() int { - return xxx_messageInfo_RequestLog.Size(m) -} -func (m *RequestLog) XXX_DiscardUnknown() { - xxx_messageInfo_RequestLog.DiscardUnknown(m) -} - -var xxx_messageInfo_RequestLog proto.InternalMessageInfo - -const Default_RequestLog_ModuleId string = "default" -const Default_RequestLog_ReplicaIndex int32 = -1 -const Default_RequestLog_Finished bool = true - -func (m *RequestLog) GetAppId() string { - if m != nil && m.AppId != nil { - return *m.AppId - } - return "" -} - -func (m *RequestLog) GetModuleId() string { - if m != nil && m.ModuleId != nil { - return *m.ModuleId - } - return Default_RequestLog_ModuleId -} - -func (m *RequestLog) GetVersionId() string { - if m != nil && m.VersionId != nil { - return *m.VersionId - } - return "" -} - -func (m *RequestLog) GetRequestId() []byte { - if m != nil { - return m.RequestId - } - return nil -} - -func (m *RequestLog) GetOffset() *LogOffset { - if m != nil { - return m.Offset - } - return nil -} - -func (m *RequestLog) GetIp() string { - if m != nil && m.Ip != nil { - return *m.Ip - } - return "" -} - -func (m *RequestLog) GetNickname() string { - if m != nil && m.Nickname != nil { - return *m.Nickname - } - return "" -} - -func (m *RequestLog) GetStartTime() int64 { - if m != nil && m.StartTime != nil { - return *m.StartTime - } - return 0 -} - -func (m *RequestLog) GetEndTime() int64 { - if m != nil && m.EndTime != nil { - return *m.EndTime - } - return 0 -} - -func (m *RequestLog) GetLatency() int64 { - if m != nil && m.Latency != nil { - return *m.Latency - } - return 0 -} - -func (m *RequestLog) GetMcycles() int64 { - if m != nil && m.Mcycles != nil { - return *m.Mcycles - } - return 0 -} - -func (m *RequestLog) GetMethod() string { - if m != nil && m.Method != nil { - return *m.Method - } - return "" -} - -func (m *RequestLog) GetResource() string { - if m != nil && m.Resource != nil { - return *m.Resource - } - return "" -} - -func (m *RequestLog) GetHttpVersion() string { - if m != nil && m.HttpVersion != nil { - return *m.HttpVersion - } - return "" -} - -func (m *RequestLog) GetStatus() int32 { - if m != nil && m.Status != nil { - return *m.Status - } - return 0 -} - -func (m *RequestLog) GetResponseSize() int64 { - if m != nil && m.ResponseSize != nil { - return *m.ResponseSize - } - return 0 -} - -func (m *RequestLog) GetReferrer() string { - if m != nil && m.Referrer != nil { - return *m.Referrer - } - return "" -} - -func (m *RequestLog) GetUserAgent() string { - if m != nil && m.UserAgent != nil { - return *m.UserAgent - } - return "" -} - -func (m *RequestLog) GetUrlMapEntry() string { - if m != nil && m.UrlMapEntry != nil { - return *m.UrlMapEntry - } - return "" -} - -func (m *RequestLog) GetCombined() string { - if m != nil && m.Combined != nil { - return *m.Combined - } - return "" -} - -func (m *RequestLog) GetApiMcycles() int64 { - if m != nil && m.ApiMcycles != nil { - return *m.ApiMcycles - } - return 0 -} - -func (m *RequestLog) GetHost() string { - if m != nil && m.Host != nil { - return *m.Host - } - return "" -} - -func (m *RequestLog) GetCost() float64 { - if m != nil && m.Cost != nil { - return *m.Cost - } - return 0 -} - -func (m *RequestLog) GetTaskQueueName() string { - if m != nil && m.TaskQueueName != nil { - return *m.TaskQueueName - } - return "" -} - -func (m *RequestLog) GetTaskName() string { - if m != nil && m.TaskName != nil { - return *m.TaskName - } - return "" -} - -func (m *RequestLog) GetWasLoadingRequest() bool { - if m != nil && m.WasLoadingRequest != nil { - return *m.WasLoadingRequest - } - return false -} - -func (m *RequestLog) GetPendingTime() int64 { - if m != nil && m.PendingTime != nil { - return *m.PendingTime - } - return 0 -} - -func (m *RequestLog) GetReplicaIndex() int32 { - if m != nil && m.ReplicaIndex != nil { - return *m.ReplicaIndex - } - return Default_RequestLog_ReplicaIndex -} - -func (m *RequestLog) GetFinished() bool { - if m != nil && m.Finished != nil { - return *m.Finished - } - return Default_RequestLog_Finished -} - -func (m *RequestLog) GetCloneKey() []byte { - if m != nil { - return m.CloneKey - } - return nil -} - -func (m *RequestLog) GetLine() []*LogLine { - if m != nil { - return m.Line - } - return nil -} - -func (m *RequestLog) GetLinesIncomplete() bool { - if m != nil && m.LinesIncomplete != nil { - return *m.LinesIncomplete - } - return false -} - -func (m *RequestLog) GetAppEngineRelease() []byte { - if m != nil { - return m.AppEngineRelease - } - return nil -} - -func (m *RequestLog) GetExitReason() int32 { - if m != nil && m.ExitReason != nil { - return *m.ExitReason - } - return 0 -} - -func (m *RequestLog) GetWasThrottledForTime() bool { - if m != nil && m.WasThrottledForTime != nil { - return *m.WasThrottledForTime - } - return false -} - -func (m *RequestLog) GetWasThrottledForRequests() bool { - if m != nil && m.WasThrottledForRequests != nil { - return *m.WasThrottledForRequests - } - return false -} - -func (m *RequestLog) GetThrottledTime() int64 { - if m != nil && m.ThrottledTime != nil { - return *m.ThrottledTime - } - return 0 -} - -func (m *RequestLog) GetServerName() []byte { - if m != nil { - return m.ServerName - } - return nil -} - -type LogModuleVersion struct { - ModuleId *string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,def=default" json:"module_id,omitempty"` - VersionId *string `protobuf:"bytes,2,opt,name=version_id,json=versionId" json:"version_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogModuleVersion) Reset() { *m = LogModuleVersion{} } -func (m *LogModuleVersion) String() string { return proto.CompactTextString(m) } -func (*LogModuleVersion) ProtoMessage() {} -func (*LogModuleVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{8} -} -func (m *LogModuleVersion) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogModuleVersion.Unmarshal(m, b) -} -func (m *LogModuleVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogModuleVersion.Marshal(b, m, deterministic) -} -func (dst *LogModuleVersion) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogModuleVersion.Merge(dst, src) -} -func (m *LogModuleVersion) XXX_Size() int { - return xxx_messageInfo_LogModuleVersion.Size(m) -} -func (m *LogModuleVersion) XXX_DiscardUnknown() { - xxx_messageInfo_LogModuleVersion.DiscardUnknown(m) -} - -var xxx_messageInfo_LogModuleVersion proto.InternalMessageInfo - -const Default_LogModuleVersion_ModuleId string = "default" - -func (m *LogModuleVersion) GetModuleId() string { - if m != nil && m.ModuleId != nil { - return *m.ModuleId - } - return Default_LogModuleVersion_ModuleId -} - -func (m *LogModuleVersion) GetVersionId() string { - if m != nil && m.VersionId != nil { - return *m.VersionId - } - return "" -} - -type LogReadRequest struct { - AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` - VersionId []string `protobuf:"bytes,2,rep,name=version_id,json=versionId" json:"version_id,omitempty"` - ModuleVersion []*LogModuleVersion `protobuf:"bytes,19,rep,name=module_version,json=moduleVersion" json:"module_version,omitempty"` - StartTime *int64 `protobuf:"varint,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` - EndTime *int64 `protobuf:"varint,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"` - Offset *LogOffset `protobuf:"bytes,5,opt,name=offset" json:"offset,omitempty"` - RequestId [][]byte `protobuf:"bytes,6,rep,name=request_id,json=requestId" json:"request_id,omitempty"` - MinimumLogLevel *int32 `protobuf:"varint,7,opt,name=minimum_log_level,json=minimumLogLevel" json:"minimum_log_level,omitempty"` - IncludeIncomplete *bool `protobuf:"varint,8,opt,name=include_incomplete,json=includeIncomplete" json:"include_incomplete,omitempty"` - Count *int64 `protobuf:"varint,9,opt,name=count" json:"count,omitempty"` - CombinedLogRegex *string `protobuf:"bytes,14,opt,name=combined_log_regex,json=combinedLogRegex" json:"combined_log_regex,omitempty"` - HostRegex *string `protobuf:"bytes,15,opt,name=host_regex,json=hostRegex" json:"host_regex,omitempty"` - ReplicaIndex *int32 `protobuf:"varint,16,opt,name=replica_index,json=replicaIndex" json:"replica_index,omitempty"` - IncludeAppLogs *bool `protobuf:"varint,10,opt,name=include_app_logs,json=includeAppLogs" json:"include_app_logs,omitempty"` - AppLogsPerRequest *int32 `protobuf:"varint,17,opt,name=app_logs_per_request,json=appLogsPerRequest" json:"app_logs_per_request,omitempty"` - IncludeHost *bool `protobuf:"varint,11,opt,name=include_host,json=includeHost" json:"include_host,omitempty"` - IncludeAll *bool `protobuf:"varint,12,opt,name=include_all,json=includeAll" json:"include_all,omitempty"` - CacheIterator *bool `protobuf:"varint,13,opt,name=cache_iterator,json=cacheIterator" json:"cache_iterator,omitempty"` - NumShards *int32 `protobuf:"varint,18,opt,name=num_shards,json=numShards" json:"num_shards,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogReadRequest) Reset() { *m = LogReadRequest{} } -func (m *LogReadRequest) String() string { return proto.CompactTextString(m) } -func (*LogReadRequest) ProtoMessage() {} -func (*LogReadRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{9} -} -func (m *LogReadRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogReadRequest.Unmarshal(m, b) -} -func (m *LogReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogReadRequest.Marshal(b, m, deterministic) -} -func (dst *LogReadRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogReadRequest.Merge(dst, src) -} -func (m *LogReadRequest) XXX_Size() int { - return xxx_messageInfo_LogReadRequest.Size(m) -} -func (m *LogReadRequest) XXX_DiscardUnknown() { - xxx_messageInfo_LogReadRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_LogReadRequest proto.InternalMessageInfo - -func (m *LogReadRequest) GetAppId() string { - if m != nil && m.AppId != nil { - return *m.AppId - } - return "" -} - -func (m *LogReadRequest) GetVersionId() []string { - if m != nil { - return m.VersionId - } - return nil -} - -func (m *LogReadRequest) GetModuleVersion() []*LogModuleVersion { - if m != nil { - return m.ModuleVersion - } - return nil -} - -func (m *LogReadRequest) GetStartTime() int64 { - if m != nil && m.StartTime != nil { - return *m.StartTime - } - return 0 -} - -func (m *LogReadRequest) GetEndTime() int64 { - if m != nil && m.EndTime != nil { - return *m.EndTime - } - return 0 -} - -func (m *LogReadRequest) GetOffset() *LogOffset { - if m != nil { - return m.Offset - } - return nil -} - -func (m *LogReadRequest) GetRequestId() [][]byte { - if m != nil { - return m.RequestId - } - return nil -} - -func (m *LogReadRequest) GetMinimumLogLevel() int32 { - if m != nil && m.MinimumLogLevel != nil { - return *m.MinimumLogLevel - } - return 0 -} - -func (m *LogReadRequest) GetIncludeIncomplete() bool { - if m != nil && m.IncludeIncomplete != nil { - return *m.IncludeIncomplete - } - return false -} - -func (m *LogReadRequest) GetCount() int64 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -func (m *LogReadRequest) GetCombinedLogRegex() string { - if m != nil && m.CombinedLogRegex != nil { - return *m.CombinedLogRegex - } - return "" -} - -func (m *LogReadRequest) GetHostRegex() string { - if m != nil && m.HostRegex != nil { - return *m.HostRegex - } - return "" -} - -func (m *LogReadRequest) GetReplicaIndex() int32 { - if m != nil && m.ReplicaIndex != nil { - return *m.ReplicaIndex - } - return 0 -} - -func (m *LogReadRequest) GetIncludeAppLogs() bool { - if m != nil && m.IncludeAppLogs != nil { - return *m.IncludeAppLogs - } - return false -} - -func (m *LogReadRequest) GetAppLogsPerRequest() int32 { - if m != nil && m.AppLogsPerRequest != nil { - return *m.AppLogsPerRequest - } - return 0 -} - -func (m *LogReadRequest) GetIncludeHost() bool { - if m != nil && m.IncludeHost != nil { - return *m.IncludeHost - } - return false -} - -func (m *LogReadRequest) GetIncludeAll() bool { - if m != nil && m.IncludeAll != nil { - return *m.IncludeAll - } - return false -} - -func (m *LogReadRequest) GetCacheIterator() bool { - if m != nil && m.CacheIterator != nil { - return *m.CacheIterator - } - return false -} - -func (m *LogReadRequest) GetNumShards() int32 { - if m != nil && m.NumShards != nil { - return *m.NumShards - } - return 0 -} - -type LogReadResponse struct { - Log []*RequestLog `protobuf:"bytes,1,rep,name=log" json:"log,omitempty"` - Offset *LogOffset `protobuf:"bytes,2,opt,name=offset" json:"offset,omitempty"` - LastEndTime *int64 `protobuf:"varint,3,opt,name=last_end_time,json=lastEndTime" json:"last_end_time,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogReadResponse) Reset() { *m = LogReadResponse{} } -func (m *LogReadResponse) String() string { return proto.CompactTextString(m) } -func (*LogReadResponse) ProtoMessage() {} -func (*LogReadResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{10} -} -func (m *LogReadResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogReadResponse.Unmarshal(m, b) -} -func (m *LogReadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogReadResponse.Marshal(b, m, deterministic) -} -func (dst *LogReadResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogReadResponse.Merge(dst, src) -} -func (m *LogReadResponse) XXX_Size() int { - return xxx_messageInfo_LogReadResponse.Size(m) -} -func (m *LogReadResponse) XXX_DiscardUnknown() { - xxx_messageInfo_LogReadResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_LogReadResponse proto.InternalMessageInfo - -func (m *LogReadResponse) GetLog() []*RequestLog { - if m != nil { - return m.Log - } - return nil -} - -func (m *LogReadResponse) GetOffset() *LogOffset { - if m != nil { - return m.Offset - } - return nil -} - -func (m *LogReadResponse) GetLastEndTime() int64 { - if m != nil && m.LastEndTime != nil { - return *m.LastEndTime - } - return 0 -} - -type LogUsageRecord struct { - VersionId *string `protobuf:"bytes,1,opt,name=version_id,json=versionId" json:"version_id,omitempty"` - StartTime *int32 `protobuf:"varint,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` - EndTime *int32 `protobuf:"varint,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` - Count *int64 `protobuf:"varint,4,opt,name=count" json:"count,omitempty"` - TotalSize *int64 `protobuf:"varint,5,opt,name=total_size,json=totalSize" json:"total_size,omitempty"` - Records *int32 `protobuf:"varint,6,opt,name=records" json:"records,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogUsageRecord) Reset() { *m = LogUsageRecord{} } -func (m *LogUsageRecord) String() string { return proto.CompactTextString(m) } -func (*LogUsageRecord) ProtoMessage() {} -func (*LogUsageRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{11} -} -func (m *LogUsageRecord) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogUsageRecord.Unmarshal(m, b) -} -func (m *LogUsageRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogUsageRecord.Marshal(b, m, deterministic) -} -func (dst *LogUsageRecord) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogUsageRecord.Merge(dst, src) -} -func (m *LogUsageRecord) XXX_Size() int { - return xxx_messageInfo_LogUsageRecord.Size(m) -} -func (m *LogUsageRecord) XXX_DiscardUnknown() { - xxx_messageInfo_LogUsageRecord.DiscardUnknown(m) -} - -var xxx_messageInfo_LogUsageRecord proto.InternalMessageInfo - -func (m *LogUsageRecord) GetVersionId() string { - if m != nil && m.VersionId != nil { - return *m.VersionId - } - return "" -} - -func (m *LogUsageRecord) GetStartTime() int32 { - if m != nil && m.StartTime != nil { - return *m.StartTime - } - return 0 -} - -func (m *LogUsageRecord) GetEndTime() int32 { - if m != nil && m.EndTime != nil { - return *m.EndTime - } - return 0 -} - -func (m *LogUsageRecord) GetCount() int64 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -func (m *LogUsageRecord) GetTotalSize() int64 { - if m != nil && m.TotalSize != nil { - return *m.TotalSize - } - return 0 -} - -func (m *LogUsageRecord) GetRecords() int32 { - if m != nil && m.Records != nil { - return *m.Records - } - return 0 -} - -type LogUsageRequest struct { - AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` - VersionId []string `protobuf:"bytes,2,rep,name=version_id,json=versionId" json:"version_id,omitempty"` - StartTime *int32 `protobuf:"varint,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` - EndTime *int32 `protobuf:"varint,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"` - ResolutionHours *uint32 `protobuf:"varint,5,opt,name=resolution_hours,json=resolutionHours,def=1" json:"resolution_hours,omitempty"` - CombineVersions *bool `protobuf:"varint,6,opt,name=combine_versions,json=combineVersions" json:"combine_versions,omitempty"` - UsageVersion *int32 `protobuf:"varint,7,opt,name=usage_version,json=usageVersion" json:"usage_version,omitempty"` - VersionsOnly *bool `protobuf:"varint,8,opt,name=versions_only,json=versionsOnly" json:"versions_only,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogUsageRequest) Reset() { *m = LogUsageRequest{} } -func (m *LogUsageRequest) String() string { return proto.CompactTextString(m) } -func (*LogUsageRequest) ProtoMessage() {} -func (*LogUsageRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{12} -} -func (m *LogUsageRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogUsageRequest.Unmarshal(m, b) -} -func (m *LogUsageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogUsageRequest.Marshal(b, m, deterministic) -} -func (dst *LogUsageRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogUsageRequest.Merge(dst, src) -} -func (m *LogUsageRequest) XXX_Size() int { - return xxx_messageInfo_LogUsageRequest.Size(m) -} -func (m *LogUsageRequest) XXX_DiscardUnknown() { - xxx_messageInfo_LogUsageRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_LogUsageRequest proto.InternalMessageInfo - -const Default_LogUsageRequest_ResolutionHours uint32 = 1 - -func (m *LogUsageRequest) GetAppId() string { - if m != nil && m.AppId != nil { - return *m.AppId - } - return "" -} - -func (m *LogUsageRequest) GetVersionId() []string { - if m != nil { - return m.VersionId - } - return nil -} - -func (m *LogUsageRequest) GetStartTime() int32 { - if m != nil && m.StartTime != nil { - return *m.StartTime - } - return 0 -} - -func (m *LogUsageRequest) GetEndTime() int32 { - if m != nil && m.EndTime != nil { - return *m.EndTime - } - return 0 -} - -func (m *LogUsageRequest) GetResolutionHours() uint32 { - if m != nil && m.ResolutionHours != nil { - return *m.ResolutionHours - } - return Default_LogUsageRequest_ResolutionHours -} - -func (m *LogUsageRequest) GetCombineVersions() bool { - if m != nil && m.CombineVersions != nil { - return *m.CombineVersions - } - return false -} - -func (m *LogUsageRequest) GetUsageVersion() int32 { - if m != nil && m.UsageVersion != nil { - return *m.UsageVersion - } - return 0 -} - -func (m *LogUsageRequest) GetVersionsOnly() bool { - if m != nil && m.VersionsOnly != nil { - return *m.VersionsOnly - } - return false -} - -type LogUsageResponse struct { - Usage []*LogUsageRecord `protobuf:"bytes,1,rep,name=usage" json:"usage,omitempty"` - Summary *LogUsageRecord `protobuf:"bytes,2,opt,name=summary" json:"summary,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LogUsageResponse) Reset() { *m = LogUsageResponse{} } -func (m *LogUsageResponse) String() string { return proto.CompactTextString(m) } -func (*LogUsageResponse) ProtoMessage() {} -func (*LogUsageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_log_service_f054fd4b5012319d, []int{13} -} -func (m *LogUsageResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogUsageResponse.Unmarshal(m, b) -} -func (m *LogUsageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogUsageResponse.Marshal(b, m, deterministic) -} -func (dst *LogUsageResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogUsageResponse.Merge(dst, src) -} -func (m *LogUsageResponse) XXX_Size() int { - return xxx_messageInfo_LogUsageResponse.Size(m) -} -func (m *LogUsageResponse) XXX_DiscardUnknown() { - xxx_messageInfo_LogUsageResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_LogUsageResponse proto.InternalMessageInfo - -func (m *LogUsageResponse) GetUsage() []*LogUsageRecord { - if m != nil { - return m.Usage - } - return nil -} - -func (m *LogUsageResponse) GetSummary() *LogUsageRecord { - if m != nil { - return m.Summary - } - return nil -} - -func init() { - proto.RegisterType((*LogServiceError)(nil), "appengine.LogServiceError") - proto.RegisterType((*UserAppLogLine)(nil), "appengine.UserAppLogLine") - proto.RegisterType((*UserAppLogGroup)(nil), "appengine.UserAppLogGroup") - proto.RegisterType((*FlushRequest)(nil), "appengine.FlushRequest") - proto.RegisterType((*SetStatusRequest)(nil), "appengine.SetStatusRequest") - proto.RegisterType((*LogOffset)(nil), "appengine.LogOffset") - proto.RegisterType((*LogLine)(nil), "appengine.LogLine") - proto.RegisterType((*RequestLog)(nil), "appengine.RequestLog") - proto.RegisterType((*LogModuleVersion)(nil), "appengine.LogModuleVersion") - proto.RegisterType((*LogReadRequest)(nil), "appengine.LogReadRequest") - proto.RegisterType((*LogReadResponse)(nil), "appengine.LogReadResponse") - proto.RegisterType((*LogUsageRecord)(nil), "appengine.LogUsageRecord") - proto.RegisterType((*LogUsageRequest)(nil), "appengine.LogUsageRequest") - proto.RegisterType((*LogUsageResponse)(nil), "appengine.LogUsageResponse") -} - -func init() { - proto.RegisterFile("google.golang.org/appengine/internal/log/log_service.proto", fileDescriptor_log_service_f054fd4b5012319d) -} - -var fileDescriptor_log_service_f054fd4b5012319d = []byte{ - // 1553 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x72, 0xdb, 0xc6, - 0x15, 0x2e, 0x48, 0x51, 0x24, 0x0f, 0x49, 0x91, 0x5a, 0xcb, 0xce, 0xda, 0xae, 0x6b, 0x1a, 0x4e, - 0x1c, 0xd6, 0x93, 0x48, 0x93, 0xa4, 0x57, 0xca, 0x95, 0xd3, 0x2a, 0x8e, 0x26, 0xb4, 0xd5, 0x40, - 0x72, 0x3a, 0xd3, 0x1b, 0x0c, 0x0a, 0x1c, 0x81, 0x18, 0x2f, 0xb1, 0xc8, 0xee, 0xc2, 0x91, 0x72, - 0xdb, 0xdb, 0x3e, 0x46, 0x1f, 0xa2, 0xaf, 0xd2, 0xb7, 0xe9, 0xec, 0xd9, 0x05, 0x44, 0x2a, 0x4d, - 0xc6, 0x33, 0xb9, 0xe0, 0x10, 0xfb, 0x9d, 0x83, 0xdd, 0xf3, 0xf3, 0x9d, 0x6f, 0x01, 0xc7, 0xb9, - 0x94, 0xb9, 0xc0, 0xc3, 0x5c, 0x8a, 0xa4, 0xcc, 0x0f, 0xa5, 0xca, 0x8f, 0x92, 0xaa, 0xc2, 0x32, - 0x2f, 0x4a, 0x3c, 0x2a, 0x4a, 0x83, 0xaa, 0x4c, 0xc4, 0x91, 0x90, 0xb9, 0xfd, 0xc5, 0x1a, 0xd5, - 0xbb, 0x22, 0xc5, 0xc3, 0x4a, 0x49, 0x23, 0xd9, 0xb0, 0xf5, 0x0c, 0x5f, 0xc3, 0x74, 0x29, 0xf3, - 0x73, 0x67, 0x3e, 0x51, 0x4a, 0xaa, 0xf0, 0x4b, 0x18, 0xd2, 0xc3, 0x9f, 0x65, 0x86, 0x6c, 0x17, - 0x3a, 0x67, 0xdf, 0xce, 0x7e, 0xc7, 0xee, 0xc0, 0xf4, 0xf4, 0xf5, 0xf7, 0x2f, 0x96, 0xa7, 0x7f, - 0x89, 0xa3, 0x93, 0xef, 0xde, 0x9c, 0x9c, 0x5f, 0xcc, 0x02, 0xb6, 0x0f, 0x93, 0xf3, 0x8b, 0xb3, - 0xe8, 0xc5, 0xcb, 0x93, 0xf8, 0x24, 0x8a, 0xce, 0xa2, 0x59, 0x27, 0xcc, 0x61, 0xef, 0x8d, 0x46, - 0xf5, 0xa2, 0xaa, 0x96, 0x32, 0x5f, 0x16, 0x25, 0xb2, 0x8f, 0x60, 0xcf, 0x14, 0x6b, 0xd4, 0x26, - 0x59, 0x57, 0x71, 0xad, 0x31, 0xe5, 0xc1, 0xbc, 0xb3, 0xe8, 0x46, 0x93, 0x16, 0x7d, 0xa3, 0x31, - 0x65, 0x07, 0xd0, 0x13, 0xf8, 0x0e, 0x05, 0xef, 0x90, 0xd5, 0x2d, 0x18, 0x87, 0xfe, 0x1a, 0xb5, - 0x4e, 0x72, 0xe4, 0xdd, 0x79, 0x67, 0x31, 0x8c, 0x9a, 0x65, 0xf8, 0x12, 0xa6, 0x37, 0x07, 0xbd, - 0x54, 0xb2, 0xae, 0xd8, 0x9f, 0x60, 0x60, 0x73, 0x15, 0x45, 0x89, 0xbc, 0x33, 0xef, 0x2e, 0x46, - 0x9f, 0xdf, 0x3f, 0x6c, 0x33, 0x3d, 0xdc, 0x0e, 0x2b, 0xea, 0x0b, 0xf7, 0x10, 0x86, 0x30, 0xfe, - 0x5a, 0xd4, 0x7a, 0x15, 0xe1, 0x0f, 0x35, 0x6a, 0xc3, 0x18, 0xec, 0x08, 0x99, 0x6b, 0x1e, 0xcc, - 0x83, 0xc5, 0x38, 0xa2, 0xe7, 0xf0, 0x39, 0xcc, 0xce, 0xd1, 0x9c, 0x9b, 0xc4, 0xd4, 0xba, 0xf1, - 0xbb, 0x07, 0xbb, 0x9a, 0x00, 0xca, 0x67, 0x18, 0xf9, 0x55, 0xf8, 0x1c, 0x86, 0x4b, 0x99, 0x9f, - 0x5d, 0x5e, 0x6a, 0x34, 0xec, 0x11, 0x80, 0x72, 0xfe, 0x71, 0x91, 0xf9, 0x2d, 0x87, 0x1e, 0x39, - 0xcd, 0xc2, 0x0b, 0xe8, 0x37, 0x65, 0x62, 0xb0, 0x63, 0x0b, 0xe2, 0x8b, 0x43, 0xcf, 0xdb, 0x35, - 0xe9, 0x35, 0x35, 0x79, 0x0c, 0x23, 0x9b, 0xe6, 0x76, 0x5d, 0x40, 0xc8, 0xfc, 0x95, 0x2f, 0xcd, - 0x3f, 0x01, 0xc0, 0x47, 0xb9, 0x94, 0x39, 0xbb, 0x0b, 0xbb, 0x49, 0x55, 0xb9, 0xf3, 0xad, 0x6b, - 0x2f, 0xa9, 0xaa, 0xd3, 0x8c, 0x7d, 0x08, 0xc3, 0xb5, 0xcc, 0x6a, 0x81, 0xd6, 0xf2, 0xd1, 0x3c, - 0x58, 0x0c, 0x8f, 0xfb, 0x19, 0x5e, 0x26, 0xb5, 0x30, 0xd1, 0xc0, 0x59, 0x4e, 0x33, 0x9b, 0xc0, - 0x3b, 0x54, 0xba, 0x90, 0xa5, 0x75, 0xeb, 0xd0, 0x06, 0x43, 0x8f, 0x38, 0xf3, 0x46, 0x7e, 0x36, - 0x94, 0xcd, 0xfc, 0xd8, 0x27, 0xb0, 0x2b, 0xa9, 0x10, 0xfc, 0xe9, 0x3c, 0x58, 0x8c, 0x3e, 0x3f, - 0xd8, 0xe8, 0x47, 0x5b, 0xa4, 0xc8, 0xfb, 0xb0, 0x3d, 0xe8, 0x14, 0x15, 0xdf, 0xa1, 0x33, 0x3a, - 0x45, 0xc5, 0x1e, 0xc0, 0xa0, 0x2c, 0xd2, 0xb7, 0x65, 0xb2, 0x46, 0xde, 0xb3, 0x01, 0x46, 0xed, - 0xda, 0x1e, 0xac, 0x4d, 0xa2, 0x4c, 0x4c, 0x45, 0xdb, 0xa5, 0xa2, 0x0d, 0x09, 0xb9, 0xb0, 0x95, - 0xbb, 0x0f, 0x03, 0x2c, 0x33, 0x67, 0xec, 0x93, 0xb1, 0x8f, 0x65, 0x46, 0x26, 0x0e, 0x7d, 0x91, - 0x18, 0x2c, 0xd3, 0x6b, 0x3e, 0x70, 0x16, 0xbf, 0x24, 0xb2, 0xa5, 0xd7, 0xa9, 0x40, 0xcd, 0x87, - 0xce, 0xe2, 0x97, 0xb6, 0xd7, 0x6b, 0x34, 0x2b, 0x99, 0x71, 0x70, 0xbd, 0x76, 0x2b, 0x1b, 0xa1, - 0x42, 0x2d, 0x6b, 0x95, 0x22, 0x1f, 0x91, 0xa5, 0x5d, 0xb3, 0x27, 0x30, 0x5e, 0x19, 0x53, 0xc5, - 0xbe, 0x58, 0x7c, 0x4c, 0xf6, 0x91, 0xc5, 0xbe, 0x77, 0xd0, 0x06, 0x85, 0x26, 0xd4, 0x60, 0xbf, - 0x62, 0x4f, 0x61, 0xa2, 0x50, 0x57, 0xb2, 0xd4, 0x18, 0xeb, 0xe2, 0x27, 0xe4, 0x7b, 0x14, 0xce, - 0xb8, 0x01, 0xcf, 0x8b, 0x9f, 0xd0, 0x9d, 0x7d, 0x89, 0x4a, 0xa1, 0xe2, 0x53, 0x57, 0x9d, 0x66, - 0x6d, 0xab, 0x53, 0x6b, 0x54, 0x71, 0x92, 0x63, 0x69, 0xf8, 0x8c, 0xac, 0x43, 0x8b, 0xbc, 0xb0, - 0x00, 0x0b, 0x61, 0x52, 0x2b, 0x11, 0xaf, 0x93, 0x2a, 0xc6, 0xd2, 0xa8, 0x6b, 0xbe, 0xef, 0x62, - 0xab, 0x95, 0x78, 0x95, 0x54, 0x27, 0x16, 0xb2, 0xdb, 0xa7, 0x72, 0xfd, 0x8f, 0xa2, 0xc4, 0x8c, - 0x33, 0x97, 0x5a, 0xb3, 0xb6, 0x0c, 0x4c, 0xaa, 0x22, 0x6e, 0x8a, 0x75, 0x67, 0x1e, 0x2c, 0xba, - 0x11, 0x24, 0x55, 0xf1, 0xca, 0xd7, 0x8b, 0xc1, 0xce, 0x4a, 0x6a, 0xc3, 0x0f, 0xe8, 0x64, 0x7a, - 0xb6, 0x58, 0x6a, 0xb1, 0xbb, 0xf3, 0x60, 0x11, 0x44, 0xf4, 0xcc, 0x9e, 0xc1, 0xd4, 0x24, 0xfa, - 0x6d, 0xfc, 0x43, 0x8d, 0x35, 0xc6, 0xd4, 0xe8, 0x7b, 0xf4, 0xca, 0xc4, 0xc2, 0xdf, 0x59, 0xf4, - 0xb5, 0xed, 0xf6, 0x43, 0x18, 0x92, 0x1f, 0x79, 0x7c, 0xe0, 0x92, 0xb5, 0x00, 0x19, 0x0f, 0xe1, - 0xce, 0x8f, 0x89, 0x8e, 0x85, 0x4c, 0xb2, 0xa2, 0xcc, 0x63, 0xcf, 0x3e, 0xce, 0xe7, 0xc1, 0x62, - 0x10, 0xed, 0xff, 0x98, 0xe8, 0xa5, 0xb3, 0x34, 0x83, 0xfb, 0x04, 0xc6, 0x15, 0x96, 0xe4, 0x4b, - 0xfc, 0xb8, 0x4f, 0xe1, 0x8f, 0x3c, 0x46, 0x1c, 0xf9, 0xd8, 0x36, 0xa0, 0x12, 0x45, 0x9a, 0xc4, - 0x45, 0x99, 0xe1, 0x15, 0x7f, 0x30, 0x0f, 0x16, 0xbd, 0xe3, 0xce, 0xa7, 0x9f, 0xd9, 0x26, 0x90, - 0xe1, 0xd4, 0xe2, 0x6c, 0x0e, 0x83, 0xcb, 0xa2, 0x2c, 0xf4, 0x0a, 0x33, 0xfe, 0xd0, 0x1e, 0x78, - 0xbc, 0x63, 0x54, 0x8d, 0x51, 0x8b, 0xda, 0xd0, 0x53, 0x21, 0x4b, 0x8c, 0xdf, 0xe2, 0x35, 0xff, - 0x3d, 0x09, 0xc0, 0x80, 0x80, 0x6f, 0xf1, 0x9a, 0x3d, 0x83, 0x1d, 0x52, 0xab, 0x47, 0xa4, 0x56, - 0x6c, 0x7b, 0x3a, 0x48, 0xa6, 0xc8, 0xce, 0xfe, 0x08, 0x33, 0xfb, 0xaf, 0xe3, 0xa2, 0x4c, 0xe5, - 0xba, 0x12, 0x68, 0x90, 0x7f, 0x48, 0xf9, 0x4d, 0x09, 0x3f, 0x6d, 0x61, 0xf6, 0x09, 0x30, 0x3b, - 0xed, 0x6e, 0x9b, 0x58, 0xa1, 0xc0, 0x44, 0x23, 0x7f, 0x46, 0x07, 0xcf, 0x92, 0xaa, 0x3a, 0x21, - 0x43, 0xe4, 0x70, 0xdb, 0x49, 0xbc, 0x2a, 0x4c, 0xac, 0x30, 0xd1, 0xb2, 0xe4, 0x7f, 0xb0, 0x69, - 0x46, 0x60, 0xa1, 0x88, 0x10, 0xf6, 0x05, 0xdc, 0xb3, 0xc5, 0x35, 0x2b, 0x25, 0x8d, 0x11, 0x98, - 0xc5, 0x97, 0x52, 0xb9, 0xb2, 0x3d, 0xa6, 0xf3, 0x6d, 0xe9, 0x2f, 0x1a, 0xe3, 0xd7, 0x52, 0x51, - 0xf9, 0xbe, 0x84, 0x07, 0x3f, 0x7f, 0xc9, 0xf7, 0x45, 0xf3, 0x39, 0xbd, 0xf8, 0xc1, 0xad, 0x17, - 0x7d, 0x77, 0x34, 0xdd, 0x17, 0xed, 0x8b, 0x74, 0xd2, 0x13, 0x6a, 0xd0, 0xa4, 0x45, 0xe9, 0x8c, - 0xc7, 0x30, 0xb2, 0x97, 0x1a, 0x2a, 0x47, 0x8a, 0x90, 0x12, 0x04, 0x07, 0x59, 0x5a, 0x84, 0x7f, - 0x83, 0xd9, 0x52, 0xe6, 0xaf, 0x48, 0xc8, 0x9a, 0x81, 0xdb, 0xd2, 0xbc, 0xe0, 0x7d, 0x35, 0x2f, - 0xd8, 0xd2, 0xbc, 0xf0, 0xbf, 0x3d, 0xd8, 0x5b, 0xca, 0x3c, 0xc2, 0x24, 0x6b, 0x28, 0xf5, 0x0b, - 0x12, 0x7b, 0x7b, 0xa3, 0xee, 0xb6, 0x78, 0x7e, 0x05, 0x7b, 0x3e, 0x9a, 0x46, 0x23, 0xee, 0x10, - 0x0f, 0x1e, 0x6e, 0xf3, 0x60, 0x2b, 0x85, 0x68, 0xb2, 0xde, 0xca, 0x68, 0x5b, 0x07, 0xbb, 0x54, - 0xa9, 0x5f, 0xd0, 0xc1, 0x1d, 0x32, 0xb6, 0x3a, 0x78, 0xa3, 0xcd, 0xbd, 0xf7, 0xd0, 0xe6, 0x6d, - 0xa1, 0xdf, 0x9d, 0x77, 0xb7, 0x85, 0xfe, 0x39, 0xec, 0xaf, 0x8b, 0xb2, 0x58, 0xd7, 0xeb, 0x98, - 0xae, 0x60, 0xba, 0xb5, 0xfa, 0xc4, 0xa6, 0xa9, 0x37, 0x58, 0x46, 0xd3, 0xfd, 0xf5, 0x29, 0xb0, - 0xa2, 0x4c, 0x45, 0x9d, 0xe1, 0x26, 0x9d, 0x07, 0x6e, 0x5c, 0xbd, 0x65, 0x83, 0xd0, 0x07, 0xd0, - 0x4b, 0x65, 0x5d, 0x1a, 0x3e, 0xa4, 0xf8, 0xdd, 0xc2, 0xd2, 0xbc, 0x91, 0x23, 0x3a, 0x51, 0x61, - 0x8e, 0x57, 0x7c, 0x8f, 0x7a, 0x35, 0x6b, 0x2c, 0xd4, 0xa5, 0x1c, 0xaf, 0x6c, 0xf4, 0x56, 0x83, - 0xbc, 0x97, 0x53, 0xcb, 0xa1, 0x45, 0x9c, 0xf9, 0xe9, 0xed, 0x71, 0x9f, 0x51, 0xe4, 0xdb, 0xa3, - 0xbe, 0x80, 0x59, 0x13, 0xb6, 0xed, 0x35, 0x7d, 0x23, 0x00, 0x05, 0xbd, 0xe7, 0x71, 0xf7, 0x75, - 0xa1, 0xd9, 0x11, 0x1c, 0x34, 0x1e, 0x71, 0x85, 0x2d, 0xf3, 0xf9, 0x3e, 0xed, 0xba, 0x9f, 0x38, - 0xb7, 0xbf, 0xa2, 0xda, 0x50, 0xa4, 0x66, 0x6b, 0x92, 0xcd, 0x11, 0x6d, 0x3b, 0xf2, 0xd8, 0x37, - 0x56, 0x29, 0x1f, 0xc3, 0xa8, 0x3d, 0x5d, 0x08, 0x3e, 0x26, 0x0f, 0x68, 0x0e, 0x16, 0xc2, 0x8e, - 0x4d, 0x9a, 0xa4, 0x2b, 0x8c, 0x0b, 0x83, 0x2a, 0x31, 0x52, 0xf1, 0x09, 0xf9, 0x4c, 0x08, 0x3d, - 0xf5, 0xa0, 0xad, 0x44, 0x59, 0xaf, 0x63, 0xbd, 0x4a, 0x54, 0xa6, 0x39, 0xa3, 0x88, 0x86, 0x65, - 0xbd, 0x3e, 0x27, 0x20, 0xfc, 0x57, 0x40, 0xdf, 0x83, 0x8e, 0xdb, 0xee, 0xb2, 0x61, 0x1f, 0x43, - 0x57, 0xc8, 0x9c, 0x07, 0xc4, 0xcd, 0xbb, 0x1b, 0x2c, 0xb9, 0xf9, 0xc6, 0x88, 0xac, 0xc7, 0x06, - 0xa3, 0x3a, 0xef, 0xc1, 0xa8, 0x10, 0x26, 0x22, 0xd1, 0x26, 0x6e, 0xf9, 0xe9, 0xc8, 0x3b, 0xb2, - 0xe0, 0x89, 0xe3, 0x68, 0xf8, 0x9f, 0x80, 0x46, 0xed, 0x8d, 0xfd, 0xac, 0x89, 0x30, 0x95, 0xea, - 0xf6, 0x4c, 0x05, 0xb7, 0x86, 0xf3, 0xd6, 0x3c, 0x74, 0x5c, 0x7e, 0xff, 0x7f, 0x1e, 0xba, 0x64, - 0x6c, 0xe7, 0xa1, 0xe5, 0xd9, 0xce, 0x26, 0xcf, 0x1e, 0x01, 0x18, 0x69, 0x12, 0xe1, 0xee, 0xe1, - 0x9e, 0x9b, 0x2f, 0x42, 0xe8, 0x12, 0xe6, 0xd0, 0x57, 0x14, 0x97, 0xe6, 0xbb, 0x6e, 0x3b, 0xbf, - 0x0c, 0xff, 0xdd, 0xa1, 0x4a, 0xfa, 0xd0, 0x7f, 0x8b, 0x4c, 0xfc, 0x7c, 0xc4, 0x7b, 0xbf, 0x36, - 0xe2, 0xbd, 0xcd, 0x11, 0x9f, 0xd9, 0xcf, 0x11, 0x51, 0x1b, 0xbb, 0xf7, 0x4a, 0xd6, 0x4a, 0x53, - 0x0a, 0x93, 0xe3, 0xe0, 0xb3, 0x68, 0x7a, 0x63, 0xfa, 0xc6, 0x5a, 0xec, 0x25, 0xe3, 0x07, 0xa7, - 0xd1, 0x23, 0x97, 0xd4, 0x20, 0x9a, 0x7a, 0xdc, 0x8b, 0x0e, 0x7d, 0xa0, 0xd4, 0x36, 0xb1, 0x56, - 0xb8, 0xdc, 0xa8, 0x8f, 0x09, 0x6c, 0xa4, 0xe9, 0x29, 0x4c, 0x9a, 0x7d, 0x62, 0x59, 0x8a, 0x6b, - 0x3f, 0xe2, 0xe3, 0x06, 0x3c, 0x2b, 0xc5, 0x75, 0x78, 0x45, 0x2a, 0xed, 0xab, 0xe4, 0x09, 0x77, - 0x04, 0x3d, 0xda, 0xc8, 0x53, 0xee, 0xfe, 0x36, 0x8d, 0x36, 0xc8, 0x10, 0x39, 0x3f, 0xf6, 0x05, - 0xf4, 0x75, 0xbd, 0x5e, 0x27, 0xea, 0xda, 0x33, 0xef, 0x57, 0x5e, 0x69, 0x3c, 0xbf, 0xea, 0xfd, - 0xdd, 0x92, 0xf6, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x70, 0xd9, 0xa0, 0xf8, 0x48, 0x0d, 0x00, - 0x00, -} diff --git a/vendor/google.golang.org/appengine/internal/log/log_service.proto b/vendor/google.golang.org/appengine/internal/log/log_service.proto deleted file mode 100644 index 8981dc4757..0000000000 --- a/vendor/google.golang.org/appengine/internal/log/log_service.proto +++ /dev/null @@ -1,150 +0,0 @@ -syntax = "proto2"; -option go_package = "log"; - -package appengine; - -message LogServiceError { - enum ErrorCode { - OK = 0; - INVALID_REQUEST = 1; - STORAGE_ERROR = 2; - } -} - -message UserAppLogLine { - required int64 timestamp_usec = 1; - required int64 level = 2; - required string message = 3; -} - -message UserAppLogGroup { - repeated UserAppLogLine log_line = 2; -} - -message FlushRequest { - optional bytes logs = 1; -} - -message SetStatusRequest { - required string status = 1; -} - - -message LogOffset { - optional bytes request_id = 1; -} - -message LogLine { - required int64 time = 1; - required int32 level = 2; - required string log_message = 3; -} - -message RequestLog { - required string app_id = 1; - optional string module_id = 37 [default="default"]; - required string version_id = 2; - required bytes request_id = 3; - optional LogOffset offset = 35; - required string ip = 4; - optional string nickname = 5; - required int64 start_time = 6; - required int64 end_time = 7; - required int64 latency = 8; - required int64 mcycles = 9; - required string method = 10; - required string resource = 11; - required string http_version = 12; - required int32 status = 13; - required int64 response_size = 14; - optional string referrer = 15; - optional string user_agent = 16; - required string url_map_entry = 17; - required string combined = 18; - optional int64 api_mcycles = 19; - optional string host = 20; - optional double cost = 21; - - optional string task_queue_name = 22; - optional string task_name = 23; - - optional bool was_loading_request = 24; - optional int64 pending_time = 25; - optional int32 replica_index = 26 [default = -1]; - optional bool finished = 27 [default = true]; - optional bytes clone_key = 28; - - repeated LogLine line = 29; - - optional bool lines_incomplete = 36; - optional bytes app_engine_release = 38; - - optional int32 exit_reason = 30; - optional bool was_throttled_for_time = 31; - optional bool was_throttled_for_requests = 32; - optional int64 throttled_time = 33; - - optional bytes server_name = 34; -} - -message LogModuleVersion { - optional string module_id = 1 [default="default"]; - optional string version_id = 2; -} - -message LogReadRequest { - required string app_id = 1; - repeated string version_id = 2; - repeated LogModuleVersion module_version = 19; - - optional int64 start_time = 3; - optional int64 end_time = 4; - optional LogOffset offset = 5; - repeated bytes request_id = 6; - - optional int32 minimum_log_level = 7; - optional bool include_incomplete = 8; - optional int64 count = 9; - - optional string combined_log_regex = 14; - optional string host_regex = 15; - optional int32 replica_index = 16; - - optional bool include_app_logs = 10; - optional int32 app_logs_per_request = 17; - optional bool include_host = 11; - optional bool include_all = 12; - optional bool cache_iterator = 13; - optional int32 num_shards = 18; -} - -message LogReadResponse { - repeated RequestLog log = 1; - optional LogOffset offset = 2; - optional int64 last_end_time = 3; -} - -message LogUsageRecord { - optional string version_id = 1; - optional int32 start_time = 2; - optional int32 end_time = 3; - optional int64 count = 4; - optional int64 total_size = 5; - optional int32 records = 6; -} - -message LogUsageRequest { - required string app_id = 1; - repeated string version_id = 2; - optional int32 start_time = 3; - optional int32 end_time = 4; - optional uint32 resolution_hours = 5 [default = 1]; - optional bool combine_versions = 6; - optional int32 usage_version = 7; - optional bool versions_only = 8; -} - -message LogUsageResponse { - repeated LogUsageRecord usage = 1; - optional LogUsageRecord summary = 2; -} diff --git a/vendor/google.golang.org/appengine/internal/main.go b/vendor/google.golang.org/appengine/internal/main.go deleted file mode 100644 index afd0ae84fd..0000000000 --- a/vendor/google.golang.org/appengine/internal/main.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -//go:build appengine -// +build appengine - -package internal - -import ( - "appengine_internal" -) - -func Main() { - MainPath = "" - appengine_internal.Main() -} diff --git a/vendor/google.golang.org/appengine/internal/main_common.go b/vendor/google.golang.org/appengine/internal/main_common.go deleted file mode 100644 index 357dce4dd0..0000000000 --- a/vendor/google.golang.org/appengine/internal/main_common.go +++ /dev/null @@ -1,7 +0,0 @@ -package internal - -// MainPath stores the file path of the main package. On App Engine Standard -// using Go version 1.9 and below, this will be unset. On App Engine Flex and -// App Engine Standard second-gen (Go 1.11 and above), this will be the -// filepath to package main. -var MainPath string diff --git a/vendor/google.golang.org/appengine/internal/main_vm.go b/vendor/google.golang.org/appengine/internal/main_vm.go deleted file mode 100644 index 86a8caf06f..0000000000 --- a/vendor/google.golang.org/appengine/internal/main_vm.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -//go:build !appengine -// +build !appengine - -package internal - -import ( - "io" - "log" - "net/http" - "net/url" - "os" - "path/filepath" - "runtime" -) - -func Main() { - MainPath = filepath.Dir(findMainPath()) - installHealthChecker(http.DefaultServeMux) - - port := "8080" - if s := os.Getenv("PORT"); s != "" { - port = s - } - - host := "" - if IsDevAppServer() { - host = "127.0.0.1" - } - if err := http.ListenAndServe(host+":"+port, Middleware(http.DefaultServeMux)); err != nil { - log.Fatalf("http.ListenAndServe: %v", err) - } -} - -// Find the path to package main by looking at the root Caller. -func findMainPath() string { - pc := make([]uintptr, 100) - n := runtime.Callers(2, pc) - frames := runtime.CallersFrames(pc[:n]) - for { - frame, more := frames.Next() - // Tests won't have package main, instead they have testing.tRunner - if frame.Function == "main.main" || frame.Function == "testing.tRunner" { - return frame.File - } - if !more { - break - } - } - return "" -} - -func installHealthChecker(mux *http.ServeMux) { - // If no health check handler has been installed by this point, add a trivial one. - const healthPath = "/_ah/health" - hreq := &http.Request{ - Method: "GET", - URL: &url.URL{ - Path: healthPath, - }, - } - if _, pat := mux.Handler(hreq); pat != healthPath { - mux.HandleFunc(healthPath, func(w http.ResponseWriter, r *http.Request) { - io.WriteString(w, "ok") - }) - } -} diff --git a/vendor/google.golang.org/appengine/internal/metadata.go b/vendor/google.golang.org/appengine/internal/metadata.go deleted file mode 100644 index c4ba63bb48..0000000000 --- a/vendor/google.golang.org/appengine/internal/metadata.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2014 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -package internal - -// This file has code for accessing metadata. -// -// References: -// https://cloud.google.com/compute/docs/metadata - -import ( - "fmt" - "io/ioutil" - "net/http" - "net/url" -) - -const ( - metadataHost = "metadata" - metadataPath = "/computeMetadata/v1/" -) - -var ( - metadataRequestHeaders = http.Header{ - "Metadata-Flavor": []string{"Google"}, - } -) - -// TODO(dsymonds): Do we need to support default values, like Python? -func mustGetMetadata(key string) []byte { - b, err := getMetadata(key) - if err != nil { - panic(fmt.Sprintf("Metadata fetch failed for '%s': %v", key, err)) - } - return b -} - -func getMetadata(key string) ([]byte, error) { - // TODO(dsymonds): May need to use url.Parse to support keys with query args. - req := &http.Request{ - Method: "GET", - URL: &url.URL{ - Scheme: "http", - Host: metadataHost, - Path: metadataPath + key, - }, - Header: metadataRequestHeaders, - Host: metadataHost, - } - resp, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - if resp.StatusCode != 200 { - return nil, fmt.Errorf("metadata server returned HTTP %d", resp.StatusCode) - } - return ioutil.ReadAll(resp.Body) -} diff --git a/vendor/google.golang.org/appengine/internal/net.go b/vendor/google.golang.org/appengine/internal/net.go deleted file mode 100644 index fe429720e1..0000000000 --- a/vendor/google.golang.org/appengine/internal/net.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2014 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -package internal - -// This file implements a network dialer that limits the number of concurrent connections. -// It is only used for API calls. - -import ( - "log" - "net" - "runtime" - "sync" - "time" -) - -var limitSem = make(chan int, 100) // TODO(dsymonds): Use environment variable. - -func limitRelease() { - // non-blocking - select { - case <-limitSem: - default: - // This should not normally happen. - log.Print("appengine: unbalanced limitSem release!") - } -} - -func limitDial(network, addr string) (net.Conn, error) { - limitSem <- 1 - - // Dial with a timeout in case the API host is MIA. - // The connection should normally be very fast. - conn, err := net.DialTimeout(network, addr, 10*time.Second) - if err != nil { - limitRelease() - return nil, err - } - lc := &limitConn{Conn: conn} - runtime.SetFinalizer(lc, (*limitConn).Close) // shouldn't usually be required - return lc, nil -} - -type limitConn struct { - close sync.Once - net.Conn -} - -func (lc *limitConn) Close() error { - defer lc.close.Do(func() { - limitRelease() - runtime.SetFinalizer(lc, nil) - }) - return lc.Conn.Close() -} diff --git a/vendor/google.golang.org/appengine/internal/regen.sh b/vendor/google.golang.org/appengine/internal/regen.sh deleted file mode 100644 index 2fdb546a63..0000000000 --- a/vendor/google.golang.org/appengine/internal/regen.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -e -# -# This script rebuilds the generated code for the protocol buffers. -# To run this you will need protoc and goprotobuf installed; -# see https://github.com/golang/protobuf for instructions. - -PKG=google.golang.org/appengine - -function die() { - echo 1>&2 $* - exit 1 -} - -# Sanity check that the right tools are accessible. -for tool in go protoc protoc-gen-go; do - q=$(which $tool) || die "didn't find $tool" - echo 1>&2 "$tool: $q" -done - -echo -n 1>&2 "finding package dir... " -pkgdir=$(go list -f '{{.Dir}}' $PKG) -echo 1>&2 $pkgdir -base=$(echo $pkgdir | sed "s,/$PKG\$,,") -echo 1>&2 "base: $base" -cd $base - -# Run protoc once per package. -for dir in $(find $PKG/internal -name '*.proto' | xargs dirname | sort | uniq); do - echo 1>&2 "* $dir" - protoc --go_out=. $dir/*.proto -done - -for f in $(find $PKG/internal -name '*.pb.go'); do - # Remove proto.RegisterEnum calls. - # These cause duplicate registration panics when these packages - # are used on classic App Engine. proto.RegisterEnum only affects - # parsing the text format; we don't care about that. - # https://code.google.com/p/googleappengine/issues/detail?id=11670#c17 - sed -i '/proto.RegisterEnum/d' $f -done diff --git a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go deleted file mode 100644 index 8d782a38e1..0000000000 --- a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +++ /dev/null @@ -1,361 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google.golang.org/appengine/internal/remote_api/remote_api.proto - -package remote_api - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type RpcError_ErrorCode int32 - -const ( - RpcError_UNKNOWN RpcError_ErrorCode = 0 - RpcError_CALL_NOT_FOUND RpcError_ErrorCode = 1 - RpcError_PARSE_ERROR RpcError_ErrorCode = 2 - RpcError_SECURITY_VIOLATION RpcError_ErrorCode = 3 - RpcError_OVER_QUOTA RpcError_ErrorCode = 4 - RpcError_REQUEST_TOO_LARGE RpcError_ErrorCode = 5 - RpcError_CAPABILITY_DISABLED RpcError_ErrorCode = 6 - RpcError_FEATURE_DISABLED RpcError_ErrorCode = 7 - RpcError_BAD_REQUEST RpcError_ErrorCode = 8 - RpcError_RESPONSE_TOO_LARGE RpcError_ErrorCode = 9 - RpcError_CANCELLED RpcError_ErrorCode = 10 - RpcError_REPLAY_ERROR RpcError_ErrorCode = 11 - RpcError_DEADLINE_EXCEEDED RpcError_ErrorCode = 12 -) - -var RpcError_ErrorCode_name = map[int32]string{ - 0: "UNKNOWN", - 1: "CALL_NOT_FOUND", - 2: "PARSE_ERROR", - 3: "SECURITY_VIOLATION", - 4: "OVER_QUOTA", - 5: "REQUEST_TOO_LARGE", - 6: "CAPABILITY_DISABLED", - 7: "FEATURE_DISABLED", - 8: "BAD_REQUEST", - 9: "RESPONSE_TOO_LARGE", - 10: "CANCELLED", - 11: "REPLAY_ERROR", - 12: "DEADLINE_EXCEEDED", -} -var RpcError_ErrorCode_value = map[string]int32{ - "UNKNOWN": 0, - "CALL_NOT_FOUND": 1, - "PARSE_ERROR": 2, - "SECURITY_VIOLATION": 3, - "OVER_QUOTA": 4, - "REQUEST_TOO_LARGE": 5, - "CAPABILITY_DISABLED": 6, - "FEATURE_DISABLED": 7, - "BAD_REQUEST": 8, - "RESPONSE_TOO_LARGE": 9, - "CANCELLED": 10, - "REPLAY_ERROR": 11, - "DEADLINE_EXCEEDED": 12, -} - -func (x RpcError_ErrorCode) Enum() *RpcError_ErrorCode { - p := new(RpcError_ErrorCode) - *p = x - return p -} -func (x RpcError_ErrorCode) String() string { - return proto.EnumName(RpcError_ErrorCode_name, int32(x)) -} -func (x *RpcError_ErrorCode) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(RpcError_ErrorCode_value, data, "RpcError_ErrorCode") - if err != nil { - return err - } - *x = RpcError_ErrorCode(value) - return nil -} -func (RpcError_ErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_remote_api_1978114ec33a273d, []int{2, 0} -} - -type Request struct { - ServiceName *string `protobuf:"bytes,2,req,name=service_name,json=serviceName" json:"service_name,omitempty"` - Method *string `protobuf:"bytes,3,req,name=method" json:"method,omitempty"` - Request []byte `protobuf:"bytes,4,req,name=request" json:"request,omitempty"` - RequestId *string `protobuf:"bytes,5,opt,name=request_id,json=requestId" json:"request_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Request) Reset() { *m = Request{} } -func (m *Request) String() string { return proto.CompactTextString(m) } -func (*Request) ProtoMessage() {} -func (*Request) Descriptor() ([]byte, []int) { - return fileDescriptor_remote_api_1978114ec33a273d, []int{0} -} -func (m *Request) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Request.Unmarshal(m, b) -} -func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Request.Marshal(b, m, deterministic) -} -func (dst *Request) XXX_Merge(src proto.Message) { - xxx_messageInfo_Request.Merge(dst, src) -} -func (m *Request) XXX_Size() int { - return xxx_messageInfo_Request.Size(m) -} -func (m *Request) XXX_DiscardUnknown() { - xxx_messageInfo_Request.DiscardUnknown(m) -} - -var xxx_messageInfo_Request proto.InternalMessageInfo - -func (m *Request) GetServiceName() string { - if m != nil && m.ServiceName != nil { - return *m.ServiceName - } - return "" -} - -func (m *Request) GetMethod() string { - if m != nil && m.Method != nil { - return *m.Method - } - return "" -} - -func (m *Request) GetRequest() []byte { - if m != nil { - return m.Request - } - return nil -} - -func (m *Request) GetRequestId() string { - if m != nil && m.RequestId != nil { - return *m.RequestId - } - return "" -} - -type ApplicationError struct { - Code *int32 `protobuf:"varint,1,req,name=code" json:"code,omitempty"` - Detail *string `protobuf:"bytes,2,req,name=detail" json:"detail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ApplicationError) Reset() { *m = ApplicationError{} } -func (m *ApplicationError) String() string { return proto.CompactTextString(m) } -func (*ApplicationError) ProtoMessage() {} -func (*ApplicationError) Descriptor() ([]byte, []int) { - return fileDescriptor_remote_api_1978114ec33a273d, []int{1} -} -func (m *ApplicationError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ApplicationError.Unmarshal(m, b) -} -func (m *ApplicationError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ApplicationError.Marshal(b, m, deterministic) -} -func (dst *ApplicationError) XXX_Merge(src proto.Message) { - xxx_messageInfo_ApplicationError.Merge(dst, src) -} -func (m *ApplicationError) XXX_Size() int { - return xxx_messageInfo_ApplicationError.Size(m) -} -func (m *ApplicationError) XXX_DiscardUnknown() { - xxx_messageInfo_ApplicationError.DiscardUnknown(m) -} - -var xxx_messageInfo_ApplicationError proto.InternalMessageInfo - -func (m *ApplicationError) GetCode() int32 { - if m != nil && m.Code != nil { - return *m.Code - } - return 0 -} - -func (m *ApplicationError) GetDetail() string { - if m != nil && m.Detail != nil { - return *m.Detail - } - return "" -} - -type RpcError struct { - Code *int32 `protobuf:"varint,1,req,name=code" json:"code,omitempty"` - Detail *string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RpcError) Reset() { *m = RpcError{} } -func (m *RpcError) String() string { return proto.CompactTextString(m) } -func (*RpcError) ProtoMessage() {} -func (*RpcError) Descriptor() ([]byte, []int) { - return fileDescriptor_remote_api_1978114ec33a273d, []int{2} -} -func (m *RpcError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RpcError.Unmarshal(m, b) -} -func (m *RpcError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RpcError.Marshal(b, m, deterministic) -} -func (dst *RpcError) XXX_Merge(src proto.Message) { - xxx_messageInfo_RpcError.Merge(dst, src) -} -func (m *RpcError) XXX_Size() int { - return xxx_messageInfo_RpcError.Size(m) -} -func (m *RpcError) XXX_DiscardUnknown() { - xxx_messageInfo_RpcError.DiscardUnknown(m) -} - -var xxx_messageInfo_RpcError proto.InternalMessageInfo - -func (m *RpcError) GetCode() int32 { - if m != nil && m.Code != nil { - return *m.Code - } - return 0 -} - -func (m *RpcError) GetDetail() string { - if m != nil && m.Detail != nil { - return *m.Detail - } - return "" -} - -type Response struct { - Response []byte `protobuf:"bytes,1,opt,name=response" json:"response,omitempty"` - Exception []byte `protobuf:"bytes,2,opt,name=exception" json:"exception,omitempty"` - ApplicationError *ApplicationError `protobuf:"bytes,3,opt,name=application_error,json=applicationError" json:"application_error,omitempty"` - JavaException []byte `protobuf:"bytes,4,opt,name=java_exception,json=javaException" json:"java_exception,omitempty"` - RpcError *RpcError `protobuf:"bytes,5,opt,name=rpc_error,json=rpcError" json:"rpc_error,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Response) Reset() { *m = Response{} } -func (m *Response) String() string { return proto.CompactTextString(m) } -func (*Response) ProtoMessage() {} -func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_remote_api_1978114ec33a273d, []int{3} -} -func (m *Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Response.Unmarshal(m, b) -} -func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Response.Marshal(b, m, deterministic) -} -func (dst *Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_Response.Merge(dst, src) -} -func (m *Response) XXX_Size() int { - return xxx_messageInfo_Response.Size(m) -} -func (m *Response) XXX_DiscardUnknown() { - xxx_messageInfo_Response.DiscardUnknown(m) -} - -var xxx_messageInfo_Response proto.InternalMessageInfo - -func (m *Response) GetResponse() []byte { - if m != nil { - return m.Response - } - return nil -} - -func (m *Response) GetException() []byte { - if m != nil { - return m.Exception - } - return nil -} - -func (m *Response) GetApplicationError() *ApplicationError { - if m != nil { - return m.ApplicationError - } - return nil -} - -func (m *Response) GetJavaException() []byte { - if m != nil { - return m.JavaException - } - return nil -} - -func (m *Response) GetRpcError() *RpcError { - if m != nil { - return m.RpcError - } - return nil -} - -func init() { - proto.RegisterType((*Request)(nil), "remote_api.Request") - proto.RegisterType((*ApplicationError)(nil), "remote_api.ApplicationError") - proto.RegisterType((*RpcError)(nil), "remote_api.RpcError") - proto.RegisterType((*Response)(nil), "remote_api.Response") -} - -func init() { - proto.RegisterFile("google.golang.org/appengine/internal/remote_api/remote_api.proto", fileDescriptor_remote_api_1978114ec33a273d) -} - -var fileDescriptor_remote_api_1978114ec33a273d = []byte{ - // 531 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x51, 0x6e, 0xd3, 0x40, - 0x10, 0x86, 0xb1, 0x9b, 0x34, 0xf1, 0xc4, 0x2d, 0xdb, 0xa5, 0x14, 0x0b, 0x15, 0x29, 0x44, 0x42, - 0xca, 0x53, 0x2a, 0x38, 0x00, 0x62, 0x63, 0x6f, 0x91, 0x85, 0x65, 0xa7, 0x6b, 0xbb, 0x50, 0x5e, - 0x56, 0x2b, 0x67, 0x65, 0x8c, 0x12, 0xaf, 0xd9, 0x98, 0x8a, 0x17, 0x6e, 0xc0, 0xb5, 0x38, 0x0c, - 0xb7, 0x40, 0x36, 0x6e, 0x63, 0xf5, 0x89, 0xb7, 0x7f, 0x7e, 0x7b, 0xe6, 0x1b, 0xcd, 0xcc, 0xc2, - 0xbb, 0x5c, 0xa9, 0x7c, 0x23, 0x17, 0xb9, 0xda, 0x88, 0x32, 0x5f, 0x28, 0x9d, 0x5f, 0x88, 0xaa, - 0x92, 0x65, 0x5e, 0x94, 0xf2, 0xa2, 0x28, 0x6b, 0xa9, 0x4b, 0xb1, 0xb9, 0xd0, 0x72, 0xab, 0x6a, - 0xc9, 0x45, 0x55, 0xf4, 0xe4, 0xa2, 0xd2, 0xaa, 0x56, 0x18, 0xf6, 0xce, 0xec, 0x27, 0x8c, 0x98, - 0xfc, 0xf6, 0x5d, 0xee, 0x6a, 0xfc, 0x12, 0xec, 0x9d, 0xd4, 0xb7, 0x45, 0x26, 0x79, 0x29, 0xb6, - 0xd2, 0x31, 0xa7, 0xe6, 0xdc, 0x62, 0x93, 0xce, 0x0b, 0xc5, 0x56, 0xe2, 0x33, 0x38, 0xdc, 0xca, - 0xfa, 0x8b, 0x5a, 0x3b, 0x07, 0xed, 0xc7, 0x2e, 0xc2, 0x0e, 0x8c, 0xf4, 0xbf, 0x2a, 0xce, 0x60, - 0x6a, 0xce, 0x6d, 0x76, 0x17, 0xe2, 0x17, 0x00, 0x9d, 0xe4, 0xc5, 0xda, 0x19, 0x4e, 0x8d, 0xb9, - 0xc5, 0xac, 0xce, 0xf1, 0xd7, 0xb3, 0xb7, 0x80, 0x48, 0x55, 0x6d, 0x8a, 0x4c, 0xd4, 0x85, 0x2a, - 0xa9, 0xd6, 0x4a, 0x63, 0x0c, 0x83, 0x4c, 0xad, 0xa5, 0x63, 0x4c, 0xcd, 0xf9, 0x90, 0xb5, 0xba, - 0x01, 0xaf, 0x65, 0x2d, 0x8a, 0x4d, 0xd7, 0x55, 0x17, 0xcd, 0x7e, 0x9b, 0x30, 0x66, 0x55, 0xf6, - 0x7f, 0x89, 0x46, 0x2f, 0xf1, 0x97, 0x09, 0x56, 0x9b, 0xe5, 0x36, 0x7f, 0x4d, 0x60, 0x94, 0x86, - 0x1f, 0xc2, 0xe8, 0x63, 0x88, 0x1e, 0x61, 0x0c, 0xc7, 0x2e, 0x09, 0x02, 0x1e, 0x46, 0x09, 0xbf, - 0x8c, 0xd2, 0xd0, 0x43, 0x06, 0x7e, 0x0c, 0x93, 0x15, 0x61, 0x31, 0xe5, 0x94, 0xb1, 0x88, 0x21, - 0x13, 0x9f, 0x01, 0x8e, 0xa9, 0x9b, 0x32, 0x3f, 0xb9, 0xe1, 0xd7, 0x7e, 0x14, 0x90, 0xc4, 0x8f, - 0x42, 0x74, 0x80, 0x8f, 0x01, 0xa2, 0x6b, 0xca, 0xf8, 0x55, 0x1a, 0x25, 0x04, 0x0d, 0xf0, 0x53, - 0x38, 0x61, 0xf4, 0x2a, 0xa5, 0x71, 0xc2, 0x93, 0x28, 0xe2, 0x01, 0x61, 0xef, 0x29, 0x1a, 0xe2, - 0x67, 0xf0, 0xc4, 0x25, 0x2b, 0xb2, 0xf4, 0x83, 0xa6, 0x80, 0xe7, 0xc7, 0x64, 0x19, 0x50, 0x0f, - 0x1d, 0xe2, 0x53, 0x40, 0x97, 0x94, 0x24, 0x29, 0xa3, 0x7b, 0x77, 0xd4, 0xe0, 0x97, 0xc4, 0xe3, - 0x5d, 0x25, 0x34, 0x6e, 0xf0, 0x8c, 0xc6, 0xab, 0x28, 0x8c, 0x69, 0xaf, 0xae, 0x85, 0x8f, 0xc0, - 0x72, 0x49, 0xe8, 0xd2, 0xa0, 0xc9, 0x03, 0x8c, 0xc0, 0x66, 0x74, 0x15, 0x90, 0x9b, 0xae, 0xef, - 0x49, 0xd3, 0x8f, 0x47, 0x89, 0x17, 0xf8, 0x21, 0xe5, 0xf4, 0x93, 0x4b, 0xa9, 0x47, 0x3d, 0x64, - 0xcf, 0xfe, 0x18, 0x30, 0x66, 0x72, 0x57, 0xa9, 0x72, 0x27, 0xf1, 0x73, 0x18, 0xeb, 0x4e, 0x3b, - 0xc6, 0xd4, 0x98, 0xdb, 0xec, 0x3e, 0xc6, 0xe7, 0x60, 0xc9, 0x1f, 0x99, 0xac, 0x9a, 0x75, 0xb5, - 0x23, 0xb5, 0xd9, 0xde, 0xc0, 0x3e, 0x9c, 0x88, 0xfd, 0x3a, 0xb9, 0x6c, 0x06, 0xec, 0x1c, 0x4c, - 0x8d, 0xf9, 0xe4, 0xcd, 0xf9, 0xa2, 0x77, 0x87, 0x0f, 0x77, 0xce, 0x90, 0x78, 0x78, 0x05, 0xaf, - 0xe0, 0xf8, 0xab, 0xb8, 0x15, 0x7c, 0x4f, 0x1b, 0xb4, 0xb4, 0xa3, 0xc6, 0xa5, 0xf7, 0xc4, 0xd7, - 0x60, 0xe9, 0x2a, 0xeb, 0x48, 0xc3, 0x96, 0x74, 0xda, 0x27, 0xdd, 0x1d, 0x07, 0x1b, 0xeb, 0x4e, - 0x2d, 0xed, 0xcf, 0xbd, 0x07, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x38, 0xd1, 0x0f, 0x22, 0x4f, - 0x03, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto b/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto deleted file mode 100644 index f21763a4e2..0000000000 --- a/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +++ /dev/null @@ -1,44 +0,0 @@ -syntax = "proto2"; -option go_package = "remote_api"; - -package remote_api; - -message Request { - required string service_name = 2; - required string method = 3; - required bytes request = 4; - optional string request_id = 5; -} - -message ApplicationError { - required int32 code = 1; - required string detail = 2; -} - -message RpcError { - enum ErrorCode { - UNKNOWN = 0; - CALL_NOT_FOUND = 1; - PARSE_ERROR = 2; - SECURITY_VIOLATION = 3; - OVER_QUOTA = 4; - REQUEST_TOO_LARGE = 5; - CAPABILITY_DISABLED = 6; - FEATURE_DISABLED = 7; - BAD_REQUEST = 8; - RESPONSE_TOO_LARGE = 9; - CANCELLED = 10; - REPLAY_ERROR = 11; - DEADLINE_EXCEEDED = 12; - } - required int32 code = 1; - optional string detail = 2; -} - -message Response { - optional bytes response = 1; - optional bytes exception = 2; - optional ApplicationError application_error = 3; - optional bytes java_exception = 4; - optional RpcError rpc_error = 5; -} diff --git a/vendor/google.golang.org/appengine/internal/transaction.go b/vendor/google.golang.org/appengine/internal/transaction.go deleted file mode 100644 index 2ae8ab9fa4..0000000000 --- a/vendor/google.golang.org/appengine/internal/transaction.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2014 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -package internal - -// This file implements hooks for applying datastore transactions. - -import ( - "context" - "errors" - "reflect" - - "github.com/golang/protobuf/proto" - - basepb "google.golang.org/appengine/internal/base" - pb "google.golang.org/appengine/internal/datastore" -) - -var transactionSetters = make(map[reflect.Type]reflect.Value) - -// RegisterTransactionSetter registers a function that sets transaction information -// in a protocol buffer message. f should be a function with two arguments, -// the first being a protocol buffer type, and the second being *datastore.Transaction. -func RegisterTransactionSetter(f interface{}) { - v := reflect.ValueOf(f) - transactionSetters[v.Type().In(0)] = v -} - -// applyTransaction applies the transaction t to message pb -// by using the relevant setter passed to RegisterTransactionSetter. -func applyTransaction(pb proto.Message, t *pb.Transaction) { - v := reflect.ValueOf(pb) - if f, ok := transactionSetters[v.Type()]; ok { - f.Call([]reflect.Value{v, reflect.ValueOf(t)}) - } -} - -var transactionKey = "used for *Transaction" - -func transactionFromContext(ctx context.Context) *transaction { - t, _ := ctx.Value(&transactionKey).(*transaction) - return t -} - -func withTransaction(ctx context.Context, t *transaction) context.Context { - return context.WithValue(ctx, &transactionKey, t) -} - -type transaction struct { - transaction pb.Transaction - finished bool -} - -var ErrConcurrentTransaction = errors.New("internal: concurrent transaction") - -func RunTransactionOnce(c context.Context, f func(context.Context) error, xg bool, readOnly bool, previousTransaction *pb.Transaction) (*pb.Transaction, error) { - if transactionFromContext(c) != nil { - return nil, errors.New("nested transactions are not supported") - } - - // Begin the transaction. - t := &transaction{} - req := &pb.BeginTransactionRequest{ - App: proto.String(FullyQualifiedAppID(c)), - } - if xg { - req.AllowMultipleEg = proto.Bool(true) - } - if previousTransaction != nil { - req.PreviousTransaction = previousTransaction - } - if readOnly { - req.Mode = pb.BeginTransactionRequest_READ_ONLY.Enum() - } else { - req.Mode = pb.BeginTransactionRequest_READ_WRITE.Enum() - } - if err := Call(c, "datastore_v3", "BeginTransaction", req, &t.transaction); err != nil { - return nil, err - } - - // Call f, rolling back the transaction if f returns a non-nil error, or panics. - // The panic is not recovered. - defer func() { - if t.finished { - return - } - t.finished = true - // Ignore the error return value, since we are already returning a non-nil - // error (or we're panicking). - Call(c, "datastore_v3", "Rollback", &t.transaction, &basepb.VoidProto{}) - }() - if err := f(withTransaction(c, t)); err != nil { - return &t.transaction, err - } - t.finished = true - - // Commit the transaction. - res := &pb.CommitResponse{} - err := Call(c, "datastore_v3", "Commit", &t.transaction, res) - if ae, ok := err.(*APIError); ok { - /* TODO: restore this conditional - if appengine.IsDevAppServer() { - */ - // The Python Dev AppServer raises an ApplicationError with error code 2 (which is - // Error.CONCURRENT_TRANSACTION) and message "Concurrency exception.". - if ae.Code == int32(pb.Error_BAD_REQUEST) && ae.Detail == "ApplicationError: 2 Concurrency exception." { - return &t.transaction, ErrConcurrentTransaction - } - if ae.Code == int32(pb.Error_CONCURRENT_TRANSACTION) { - return &t.transaction, ErrConcurrentTransaction - } - } - return &t.transaction, err -} diff --git a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go b/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go deleted file mode 100644 index 5f727750ad..0000000000 --- a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +++ /dev/null @@ -1,527 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto - -package urlfetch - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type URLFetchServiceError_ErrorCode int32 - -const ( - URLFetchServiceError_OK URLFetchServiceError_ErrorCode = 0 - URLFetchServiceError_INVALID_URL URLFetchServiceError_ErrorCode = 1 - URLFetchServiceError_FETCH_ERROR URLFetchServiceError_ErrorCode = 2 - URLFetchServiceError_UNSPECIFIED_ERROR URLFetchServiceError_ErrorCode = 3 - URLFetchServiceError_RESPONSE_TOO_LARGE URLFetchServiceError_ErrorCode = 4 - URLFetchServiceError_DEADLINE_EXCEEDED URLFetchServiceError_ErrorCode = 5 - URLFetchServiceError_SSL_CERTIFICATE_ERROR URLFetchServiceError_ErrorCode = 6 - URLFetchServiceError_DNS_ERROR URLFetchServiceError_ErrorCode = 7 - URLFetchServiceError_CLOSED URLFetchServiceError_ErrorCode = 8 - URLFetchServiceError_INTERNAL_TRANSIENT_ERROR URLFetchServiceError_ErrorCode = 9 - URLFetchServiceError_TOO_MANY_REDIRECTS URLFetchServiceError_ErrorCode = 10 - URLFetchServiceError_MALFORMED_REPLY URLFetchServiceError_ErrorCode = 11 - URLFetchServiceError_CONNECTION_ERROR URLFetchServiceError_ErrorCode = 12 -) - -var URLFetchServiceError_ErrorCode_name = map[int32]string{ - 0: "OK", - 1: "INVALID_URL", - 2: "FETCH_ERROR", - 3: "UNSPECIFIED_ERROR", - 4: "RESPONSE_TOO_LARGE", - 5: "DEADLINE_EXCEEDED", - 6: "SSL_CERTIFICATE_ERROR", - 7: "DNS_ERROR", - 8: "CLOSED", - 9: "INTERNAL_TRANSIENT_ERROR", - 10: "TOO_MANY_REDIRECTS", - 11: "MALFORMED_REPLY", - 12: "CONNECTION_ERROR", -} -var URLFetchServiceError_ErrorCode_value = map[string]int32{ - "OK": 0, - "INVALID_URL": 1, - "FETCH_ERROR": 2, - "UNSPECIFIED_ERROR": 3, - "RESPONSE_TOO_LARGE": 4, - "DEADLINE_EXCEEDED": 5, - "SSL_CERTIFICATE_ERROR": 6, - "DNS_ERROR": 7, - "CLOSED": 8, - "INTERNAL_TRANSIENT_ERROR": 9, - "TOO_MANY_REDIRECTS": 10, - "MALFORMED_REPLY": 11, - "CONNECTION_ERROR": 12, -} - -func (x URLFetchServiceError_ErrorCode) Enum() *URLFetchServiceError_ErrorCode { - p := new(URLFetchServiceError_ErrorCode) - *p = x - return p -} -func (x URLFetchServiceError_ErrorCode) String() string { - return proto.EnumName(URLFetchServiceError_ErrorCode_name, int32(x)) -} -func (x *URLFetchServiceError_ErrorCode) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(URLFetchServiceError_ErrorCode_value, data, "URLFetchServiceError_ErrorCode") - if err != nil { - return err - } - *x = URLFetchServiceError_ErrorCode(value) - return nil -} -func (URLFetchServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{0, 0} -} - -type URLFetchRequest_RequestMethod int32 - -const ( - URLFetchRequest_GET URLFetchRequest_RequestMethod = 1 - URLFetchRequest_POST URLFetchRequest_RequestMethod = 2 - URLFetchRequest_HEAD URLFetchRequest_RequestMethod = 3 - URLFetchRequest_PUT URLFetchRequest_RequestMethod = 4 - URLFetchRequest_DELETE URLFetchRequest_RequestMethod = 5 - URLFetchRequest_PATCH URLFetchRequest_RequestMethod = 6 -) - -var URLFetchRequest_RequestMethod_name = map[int32]string{ - 1: "GET", - 2: "POST", - 3: "HEAD", - 4: "PUT", - 5: "DELETE", - 6: "PATCH", -} -var URLFetchRequest_RequestMethod_value = map[string]int32{ - "GET": 1, - "POST": 2, - "HEAD": 3, - "PUT": 4, - "DELETE": 5, - "PATCH": 6, -} - -func (x URLFetchRequest_RequestMethod) Enum() *URLFetchRequest_RequestMethod { - p := new(URLFetchRequest_RequestMethod) - *p = x - return p -} -func (x URLFetchRequest_RequestMethod) String() string { - return proto.EnumName(URLFetchRequest_RequestMethod_name, int32(x)) -} -func (x *URLFetchRequest_RequestMethod) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(URLFetchRequest_RequestMethod_value, data, "URLFetchRequest_RequestMethod") - if err != nil { - return err - } - *x = URLFetchRequest_RequestMethod(value) - return nil -} -func (URLFetchRequest_RequestMethod) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1, 0} -} - -type URLFetchServiceError struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *URLFetchServiceError) Reset() { *m = URLFetchServiceError{} } -func (m *URLFetchServiceError) String() string { return proto.CompactTextString(m) } -func (*URLFetchServiceError) ProtoMessage() {} -func (*URLFetchServiceError) Descriptor() ([]byte, []int) { - return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{0} -} -func (m *URLFetchServiceError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_URLFetchServiceError.Unmarshal(m, b) -} -func (m *URLFetchServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_URLFetchServiceError.Marshal(b, m, deterministic) -} -func (dst *URLFetchServiceError) XXX_Merge(src proto.Message) { - xxx_messageInfo_URLFetchServiceError.Merge(dst, src) -} -func (m *URLFetchServiceError) XXX_Size() int { - return xxx_messageInfo_URLFetchServiceError.Size(m) -} -func (m *URLFetchServiceError) XXX_DiscardUnknown() { - xxx_messageInfo_URLFetchServiceError.DiscardUnknown(m) -} - -var xxx_messageInfo_URLFetchServiceError proto.InternalMessageInfo - -type URLFetchRequest struct { - Method *URLFetchRequest_RequestMethod `protobuf:"varint,1,req,name=Method,enum=appengine.URLFetchRequest_RequestMethod" json:"Method,omitempty"` - Url *string `protobuf:"bytes,2,req,name=Url" json:"Url,omitempty"` - Header []*URLFetchRequest_Header `protobuf:"group,3,rep,name=Header,json=header" json:"header,omitempty"` - Payload []byte `protobuf:"bytes,6,opt,name=Payload" json:"Payload,omitempty"` - FollowRedirects *bool `protobuf:"varint,7,opt,name=FollowRedirects,def=1" json:"FollowRedirects,omitempty"` - Deadline *float64 `protobuf:"fixed64,8,opt,name=Deadline" json:"Deadline,omitempty"` - MustValidateServerCertificate *bool `protobuf:"varint,9,opt,name=MustValidateServerCertificate,def=1" json:"MustValidateServerCertificate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *URLFetchRequest) Reset() { *m = URLFetchRequest{} } -func (m *URLFetchRequest) String() string { return proto.CompactTextString(m) } -func (*URLFetchRequest) ProtoMessage() {} -func (*URLFetchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1} -} -func (m *URLFetchRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_URLFetchRequest.Unmarshal(m, b) -} -func (m *URLFetchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_URLFetchRequest.Marshal(b, m, deterministic) -} -func (dst *URLFetchRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_URLFetchRequest.Merge(dst, src) -} -func (m *URLFetchRequest) XXX_Size() int { - return xxx_messageInfo_URLFetchRequest.Size(m) -} -func (m *URLFetchRequest) XXX_DiscardUnknown() { - xxx_messageInfo_URLFetchRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_URLFetchRequest proto.InternalMessageInfo - -const Default_URLFetchRequest_FollowRedirects bool = true -const Default_URLFetchRequest_MustValidateServerCertificate bool = true - -func (m *URLFetchRequest) GetMethod() URLFetchRequest_RequestMethod { - if m != nil && m.Method != nil { - return *m.Method - } - return URLFetchRequest_GET -} - -func (m *URLFetchRequest) GetUrl() string { - if m != nil && m.Url != nil { - return *m.Url - } - return "" -} - -func (m *URLFetchRequest) GetHeader() []*URLFetchRequest_Header { - if m != nil { - return m.Header - } - return nil -} - -func (m *URLFetchRequest) GetPayload() []byte { - if m != nil { - return m.Payload - } - return nil -} - -func (m *URLFetchRequest) GetFollowRedirects() bool { - if m != nil && m.FollowRedirects != nil { - return *m.FollowRedirects - } - return Default_URLFetchRequest_FollowRedirects -} - -func (m *URLFetchRequest) GetDeadline() float64 { - if m != nil && m.Deadline != nil { - return *m.Deadline - } - return 0 -} - -func (m *URLFetchRequest) GetMustValidateServerCertificate() bool { - if m != nil && m.MustValidateServerCertificate != nil { - return *m.MustValidateServerCertificate - } - return Default_URLFetchRequest_MustValidateServerCertificate -} - -type URLFetchRequest_Header struct { - Key *string `protobuf:"bytes,4,req,name=Key" json:"Key,omitempty"` - Value *string `protobuf:"bytes,5,req,name=Value" json:"Value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *URLFetchRequest_Header) Reset() { *m = URLFetchRequest_Header{} } -func (m *URLFetchRequest_Header) String() string { return proto.CompactTextString(m) } -func (*URLFetchRequest_Header) ProtoMessage() {} -func (*URLFetchRequest_Header) Descriptor() ([]byte, []int) { - return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1, 0} -} -func (m *URLFetchRequest_Header) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_URLFetchRequest_Header.Unmarshal(m, b) -} -func (m *URLFetchRequest_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_URLFetchRequest_Header.Marshal(b, m, deterministic) -} -func (dst *URLFetchRequest_Header) XXX_Merge(src proto.Message) { - xxx_messageInfo_URLFetchRequest_Header.Merge(dst, src) -} -func (m *URLFetchRequest_Header) XXX_Size() int { - return xxx_messageInfo_URLFetchRequest_Header.Size(m) -} -func (m *URLFetchRequest_Header) XXX_DiscardUnknown() { - xxx_messageInfo_URLFetchRequest_Header.DiscardUnknown(m) -} - -var xxx_messageInfo_URLFetchRequest_Header proto.InternalMessageInfo - -func (m *URLFetchRequest_Header) GetKey() string { - if m != nil && m.Key != nil { - return *m.Key - } - return "" -} - -func (m *URLFetchRequest_Header) GetValue() string { - if m != nil && m.Value != nil { - return *m.Value - } - return "" -} - -type URLFetchResponse struct { - Content []byte `protobuf:"bytes,1,opt,name=Content" json:"Content,omitempty"` - StatusCode *int32 `protobuf:"varint,2,req,name=StatusCode" json:"StatusCode,omitempty"` - Header []*URLFetchResponse_Header `protobuf:"group,3,rep,name=Header,json=header" json:"header,omitempty"` - ContentWasTruncated *bool `protobuf:"varint,6,opt,name=ContentWasTruncated,def=0" json:"ContentWasTruncated,omitempty"` - ExternalBytesSent *int64 `protobuf:"varint,7,opt,name=ExternalBytesSent" json:"ExternalBytesSent,omitempty"` - ExternalBytesReceived *int64 `protobuf:"varint,8,opt,name=ExternalBytesReceived" json:"ExternalBytesReceived,omitempty"` - FinalUrl *string `protobuf:"bytes,9,opt,name=FinalUrl" json:"FinalUrl,omitempty"` - ApiCpuMilliseconds *int64 `protobuf:"varint,10,opt,name=ApiCpuMilliseconds,def=0" json:"ApiCpuMilliseconds,omitempty"` - ApiBytesSent *int64 `protobuf:"varint,11,opt,name=ApiBytesSent,def=0" json:"ApiBytesSent,omitempty"` - ApiBytesReceived *int64 `protobuf:"varint,12,opt,name=ApiBytesReceived,def=0" json:"ApiBytesReceived,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *URLFetchResponse) Reset() { *m = URLFetchResponse{} } -func (m *URLFetchResponse) String() string { return proto.CompactTextString(m) } -func (*URLFetchResponse) ProtoMessage() {} -func (*URLFetchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{2} -} -func (m *URLFetchResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_URLFetchResponse.Unmarshal(m, b) -} -func (m *URLFetchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_URLFetchResponse.Marshal(b, m, deterministic) -} -func (dst *URLFetchResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_URLFetchResponse.Merge(dst, src) -} -func (m *URLFetchResponse) XXX_Size() int { - return xxx_messageInfo_URLFetchResponse.Size(m) -} -func (m *URLFetchResponse) XXX_DiscardUnknown() { - xxx_messageInfo_URLFetchResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_URLFetchResponse proto.InternalMessageInfo - -const Default_URLFetchResponse_ContentWasTruncated bool = false -const Default_URLFetchResponse_ApiCpuMilliseconds int64 = 0 -const Default_URLFetchResponse_ApiBytesSent int64 = 0 -const Default_URLFetchResponse_ApiBytesReceived int64 = 0 - -func (m *URLFetchResponse) GetContent() []byte { - if m != nil { - return m.Content - } - return nil -} - -func (m *URLFetchResponse) GetStatusCode() int32 { - if m != nil && m.StatusCode != nil { - return *m.StatusCode - } - return 0 -} - -func (m *URLFetchResponse) GetHeader() []*URLFetchResponse_Header { - if m != nil { - return m.Header - } - return nil -} - -func (m *URLFetchResponse) GetContentWasTruncated() bool { - if m != nil && m.ContentWasTruncated != nil { - return *m.ContentWasTruncated - } - return Default_URLFetchResponse_ContentWasTruncated -} - -func (m *URLFetchResponse) GetExternalBytesSent() int64 { - if m != nil && m.ExternalBytesSent != nil { - return *m.ExternalBytesSent - } - return 0 -} - -func (m *URLFetchResponse) GetExternalBytesReceived() int64 { - if m != nil && m.ExternalBytesReceived != nil { - return *m.ExternalBytesReceived - } - return 0 -} - -func (m *URLFetchResponse) GetFinalUrl() string { - if m != nil && m.FinalUrl != nil { - return *m.FinalUrl - } - return "" -} - -func (m *URLFetchResponse) GetApiCpuMilliseconds() int64 { - if m != nil && m.ApiCpuMilliseconds != nil { - return *m.ApiCpuMilliseconds - } - return Default_URLFetchResponse_ApiCpuMilliseconds -} - -func (m *URLFetchResponse) GetApiBytesSent() int64 { - if m != nil && m.ApiBytesSent != nil { - return *m.ApiBytesSent - } - return Default_URLFetchResponse_ApiBytesSent -} - -func (m *URLFetchResponse) GetApiBytesReceived() int64 { - if m != nil && m.ApiBytesReceived != nil { - return *m.ApiBytesReceived - } - return Default_URLFetchResponse_ApiBytesReceived -} - -type URLFetchResponse_Header struct { - Key *string `protobuf:"bytes,4,req,name=Key" json:"Key,omitempty"` - Value *string `protobuf:"bytes,5,req,name=Value" json:"Value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *URLFetchResponse_Header) Reset() { *m = URLFetchResponse_Header{} } -func (m *URLFetchResponse_Header) String() string { return proto.CompactTextString(m) } -func (*URLFetchResponse_Header) ProtoMessage() {} -func (*URLFetchResponse_Header) Descriptor() ([]byte, []int) { - return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{2, 0} -} -func (m *URLFetchResponse_Header) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_URLFetchResponse_Header.Unmarshal(m, b) -} -func (m *URLFetchResponse_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_URLFetchResponse_Header.Marshal(b, m, deterministic) -} -func (dst *URLFetchResponse_Header) XXX_Merge(src proto.Message) { - xxx_messageInfo_URLFetchResponse_Header.Merge(dst, src) -} -func (m *URLFetchResponse_Header) XXX_Size() int { - return xxx_messageInfo_URLFetchResponse_Header.Size(m) -} -func (m *URLFetchResponse_Header) XXX_DiscardUnknown() { - xxx_messageInfo_URLFetchResponse_Header.DiscardUnknown(m) -} - -var xxx_messageInfo_URLFetchResponse_Header proto.InternalMessageInfo - -func (m *URLFetchResponse_Header) GetKey() string { - if m != nil && m.Key != nil { - return *m.Key - } - return "" -} - -func (m *URLFetchResponse_Header) GetValue() string { - if m != nil && m.Value != nil { - return *m.Value - } - return "" -} - -func init() { - proto.RegisterType((*URLFetchServiceError)(nil), "appengine.URLFetchServiceError") - proto.RegisterType((*URLFetchRequest)(nil), "appengine.URLFetchRequest") - proto.RegisterType((*URLFetchRequest_Header)(nil), "appengine.URLFetchRequest.Header") - proto.RegisterType((*URLFetchResponse)(nil), "appengine.URLFetchResponse") - proto.RegisterType((*URLFetchResponse_Header)(nil), "appengine.URLFetchResponse.Header") -} - -func init() { - proto.RegisterFile("google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto", fileDescriptor_urlfetch_service_b245a7065f33bced) -} - -var fileDescriptor_urlfetch_service_b245a7065f33bced = []byte{ - // 770 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xe3, 0x54, - 0x10, 0xc6, 0x76, 0x7e, 0xa7, 0x5d, 0x7a, 0x76, 0xb6, 0x45, 0x66, 0xb5, 0xa0, 0x10, 0x09, 0x29, - 0x17, 0x90, 0x2e, 0x2b, 0x24, 0x44, 0xaf, 0x70, 0xed, 0x93, 0xad, 0xa9, 0x63, 0x47, 0xc7, 0x4e, - 0x61, 0xb9, 0xb1, 0xac, 0x78, 0x9a, 0x5a, 0xb2, 0xec, 0x60, 0x9f, 0x2c, 0xf4, 0x35, 0x78, 0x0d, - 0xde, 0x87, 0xa7, 0xe1, 0x02, 0x9d, 0xc4, 0xc9, 0x6e, 0xbb, 0xd1, 0x4a, 0x5c, 0x65, 0xe6, 0x9b, - 0xef, 0xcc, 0x99, 0x7c, 0xdf, 0xf8, 0x80, 0xb3, 0x2c, 0xcb, 0x65, 0x4e, 0xe3, 0x65, 0x99, 0x27, - 0xc5, 0x72, 0x5c, 0x56, 0xcb, 0xf3, 0x64, 0xb5, 0xa2, 0x62, 0x99, 0x15, 0x74, 0x9e, 0x15, 0x92, - 0xaa, 0x22, 0xc9, 0xcf, 0xd7, 0x55, 0x7e, 0x4b, 0x72, 0x71, 0xb7, 0x0f, 0xe2, 0x9a, 0xaa, 0xb7, - 0xd9, 0x82, 0xc6, 0xab, 0xaa, 0x94, 0x25, 0xf6, 0xf7, 0x67, 0x86, 0x7f, 0xeb, 0x70, 0x3a, 0x17, - 0xde, 0x44, 0xb1, 0xc2, 0x2d, 0x89, 0x57, 0x55, 0x59, 0x0d, 0xff, 0xd2, 0xa1, 0xbf, 0x89, 0xec, - 0x32, 0x25, 0xec, 0x80, 0x1e, 0x5c, 0xb3, 0x4f, 0xf0, 0x04, 0x8e, 0x5c, 0xff, 0xc6, 0xf2, 0x5c, - 0x27, 0x9e, 0x0b, 0x8f, 0x69, 0x0a, 0x98, 0xf0, 0xc8, 0xbe, 0x8a, 0xb9, 0x10, 0x81, 0x60, 0x3a, - 0x9e, 0xc1, 0xd3, 0xb9, 0x1f, 0xce, 0xb8, 0xed, 0x4e, 0x5c, 0xee, 0x34, 0xb0, 0x81, 0x9f, 0x01, - 0x0a, 0x1e, 0xce, 0x02, 0x3f, 0xe4, 0x71, 0x14, 0x04, 0xb1, 0x67, 0x89, 0xd7, 0x9c, 0xb5, 0x14, - 0xdd, 0xe1, 0x96, 0xe3, 0xb9, 0x3e, 0x8f, 0xf9, 0xaf, 0x36, 0xe7, 0x0e, 0x77, 0x58, 0x1b, 0x3f, - 0x87, 0xb3, 0x30, 0xf4, 0x62, 0x9b, 0x8b, 0xc8, 0x9d, 0xb8, 0xb6, 0x15, 0xf1, 0xa6, 0x53, 0x07, - 0x9f, 0x40, 0xdf, 0xf1, 0xc3, 0x26, 0xed, 0x22, 0x40, 0xc7, 0xf6, 0x82, 0x90, 0x3b, 0xac, 0x87, - 0x2f, 0xc0, 0x74, 0xfd, 0x88, 0x0b, 0xdf, 0xf2, 0xe2, 0x48, 0x58, 0x7e, 0xe8, 0x72, 0x3f, 0x6a, - 0x98, 0x7d, 0x35, 0x82, 0xba, 0x79, 0x6a, 0xf9, 0x6f, 0x62, 0xc1, 0x1d, 0x57, 0x70, 0x3b, 0x0a, - 0x19, 0xe0, 0x33, 0x38, 0x99, 0x5a, 0xde, 0x24, 0x10, 0x53, 0xee, 0xc4, 0x82, 0xcf, 0xbc, 0x37, - 0xec, 0x08, 0x4f, 0x81, 0xd9, 0x81, 0xef, 0x73, 0x3b, 0x72, 0x03, 0xbf, 0x69, 0x71, 0x3c, 0xfc, - 0xc7, 0x80, 0x93, 0x9d, 0x5a, 0x82, 0x7e, 0x5f, 0x53, 0x2d, 0xf1, 0x27, 0xe8, 0x4c, 0x49, 0xde, - 0x95, 0xa9, 0xa9, 0x0d, 0xf4, 0xd1, 0xa7, 0xaf, 0x46, 0xe3, 0xbd, 0xba, 0xe3, 0x47, 0xdc, 0x71, - 0xf3, 0xbb, 0xe5, 0x8b, 0xe6, 0x1c, 0x32, 0x30, 0xe6, 0x55, 0x6e, 0xea, 0x03, 0x7d, 0xd4, 0x17, - 0x2a, 0xc4, 0x1f, 0xa1, 0x73, 0x47, 0x49, 0x4a, 0x95, 0x69, 0x0c, 0x8c, 0x11, 0xbc, 0xfa, 0xea, - 0x23, 0x3d, 0xaf, 0x36, 0x44, 0xd1, 0x1c, 0xc0, 0x17, 0xd0, 0x9d, 0x25, 0xf7, 0x79, 0x99, 0xa4, - 0x66, 0x67, 0xa0, 0x8d, 0x8e, 0x2f, 0xf5, 0x9e, 0x26, 0x76, 0x10, 0x8e, 0xe1, 0x64, 0x52, 0xe6, - 0x79, 0xf9, 0x87, 0xa0, 0x34, 0xab, 0x68, 0x21, 0x6b, 0xb3, 0x3b, 0xd0, 0x46, 0xbd, 0x8b, 0x96, - 0xac, 0xd6, 0x24, 0x1e, 0x17, 0xf1, 0x39, 0xf4, 0x1c, 0x4a, 0xd2, 0x3c, 0x2b, 0xc8, 0xec, 0x0d, - 0xb4, 0x91, 0x26, 0xf6, 0x39, 0xfe, 0x0c, 0x5f, 0x4c, 0xd7, 0xb5, 0xbc, 0x49, 0xf2, 0x2c, 0x4d, - 0x24, 0xa9, 0xed, 0xa1, 0xca, 0xa6, 0x4a, 0x66, 0xb7, 0xd9, 0x22, 0x91, 0x64, 0xf6, 0xdf, 0xeb, - 0xfc, 0x71, 0xea, 0xf3, 0x97, 0xd0, 0xd9, 0xfe, 0x0f, 0x25, 0xc6, 0x35, 0xdd, 0x9b, 0xad, 0xad, - 0x18, 0xd7, 0x74, 0x8f, 0xa7, 0xd0, 0xbe, 0x49, 0xf2, 0x35, 0x99, 0xed, 0x0d, 0xb6, 0x4d, 0x86, - 0x1e, 0x3c, 0x79, 0xa0, 0x26, 0x76, 0xc1, 0x78, 0xcd, 0x23, 0xa6, 0x61, 0x0f, 0x5a, 0xb3, 0x20, - 0x8c, 0x98, 0xae, 0xa2, 0x2b, 0x6e, 0x39, 0xcc, 0x50, 0xc5, 0xd9, 0x3c, 0x62, 0x2d, 0xb5, 0x2e, - 0x0e, 0xf7, 0x78, 0xc4, 0x59, 0x1b, 0xfb, 0xd0, 0x9e, 0x59, 0x91, 0x7d, 0xc5, 0x3a, 0xc3, 0x7f, - 0x0d, 0x60, 0xef, 0x84, 0xad, 0x57, 0x65, 0x51, 0x13, 0x9a, 0xd0, 0xb5, 0xcb, 0x42, 0x52, 0x21, - 0x4d, 0x4d, 0x49, 0x29, 0x76, 0x29, 0x7e, 0x09, 0x10, 0xca, 0x44, 0xae, 0x6b, 0xf5, 0x71, 0x6c, - 0x8c, 0x6b, 0x8b, 0xf7, 0x10, 0xbc, 0x78, 0xe4, 0xdf, 0xf0, 0xa0, 0x7f, 0xdb, 0x6b, 0x1e, 0x1b, - 0xf8, 0x03, 0x3c, 0x6b, 0xae, 0xf9, 0x25, 0xa9, 0xa3, 0x6a, 0x5d, 0x28, 0x81, 0xb6, 0x66, 0xf6, - 0x2e, 0xda, 0xb7, 0x49, 0x5e, 0x93, 0x38, 0xc4, 0xc0, 0x6f, 0xe0, 0x29, 0xff, 0x73, 0xfb, 0x02, - 0x5c, 0xde, 0x4b, 0xaa, 0x43, 0x35, 0xb8, 0x72, 0xd7, 0x10, 0x1f, 0x16, 0xf0, 0x7b, 0x38, 0x7b, - 0x00, 0x0a, 0x5a, 0x50, 0xf6, 0x96, 0xd2, 0x8d, 0xcd, 0x86, 0x38, 0x5c, 0x54, 0xfb, 0x30, 0xc9, - 0x8a, 0x24, 0x57, 0xfb, 0xaa, 0xec, 0xed, 0x8b, 0x7d, 0x8e, 0xdf, 0x01, 0x5a, 0xab, 0xcc, 0x5e, - 0xad, 0xa7, 0x59, 0x9e, 0x67, 0x35, 0x2d, 0xca, 0x22, 0xad, 0x4d, 0x50, 0xed, 0x2e, 0xb4, 0x97, - 0xe2, 0x40, 0x11, 0xbf, 0x86, 0x63, 0x6b, 0x95, 0xbd, 0x9b, 0xf6, 0x68, 0x47, 0x7e, 0x00, 0xe3, - 0xb7, 0xc0, 0x76, 0xf9, 0x7e, 0xcc, 0xe3, 0x1d, 0xf5, 0x83, 0xd2, 0xff, 0x5f, 0xa6, 0x4b, 0xf8, - 0xad, 0xb7, 0x7b, 0x2a, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x9f, 0x6d, 0x24, 0x63, 0x05, - 0x00, 0x00, -} diff --git a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto b/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto deleted file mode 100644 index f695edf6a9..0000000000 --- a/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +++ /dev/null @@ -1,64 +0,0 @@ -syntax = "proto2"; -option go_package = "urlfetch"; - -package appengine; - -message URLFetchServiceError { - enum ErrorCode { - OK = 0; - INVALID_URL = 1; - FETCH_ERROR = 2; - UNSPECIFIED_ERROR = 3; - RESPONSE_TOO_LARGE = 4; - DEADLINE_EXCEEDED = 5; - SSL_CERTIFICATE_ERROR = 6; - DNS_ERROR = 7; - CLOSED = 8; - INTERNAL_TRANSIENT_ERROR = 9; - TOO_MANY_REDIRECTS = 10; - MALFORMED_REPLY = 11; - CONNECTION_ERROR = 12; - } -} - -message URLFetchRequest { - enum RequestMethod { - GET = 1; - POST = 2; - HEAD = 3; - PUT = 4; - DELETE = 5; - PATCH = 6; - } - required RequestMethod Method = 1; - required string Url = 2; - repeated group Header = 3 { - required string Key = 4; - required string Value = 5; - } - optional bytes Payload = 6 [ctype=CORD]; - - optional bool FollowRedirects = 7 [default=true]; - - optional double Deadline = 8; - - optional bool MustValidateServerCertificate = 9 [default=true]; -} - -message URLFetchResponse { - optional bytes Content = 1; - required int32 StatusCode = 2; - repeated group Header = 3 { - required string Key = 4; - required string Value = 5; - } - optional bool ContentWasTruncated = 6 [default=false]; - optional int64 ExternalBytesSent = 7; - optional int64 ExternalBytesReceived = 8; - - optional string FinalUrl = 9; - - optional int64 ApiCpuMilliseconds = 10 [default=0]; - optional int64 ApiBytesSent = 11 [default=0]; - optional int64 ApiBytesReceived = 12 [default=0]; -} diff --git a/vendor/google.golang.org/appengine/urlfetch/urlfetch.go b/vendor/google.golang.org/appengine/urlfetch/urlfetch.go deleted file mode 100644 index 6c0d72418d..0000000000 --- a/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by the Apache 2.0 -// license that can be found in the LICENSE file. - -// Package urlfetch provides an http.RoundTripper implementation -// for fetching URLs via App Engine's urlfetch service. -package urlfetch // import "google.golang.org/appengine/urlfetch" - -import ( - "context" - "errors" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/url" - "strconv" - "strings" - "time" - - "github.com/golang/protobuf/proto" - - "google.golang.org/appengine/internal" - pb "google.golang.org/appengine/internal/urlfetch" -) - -// Transport is an implementation of http.RoundTripper for -// App Engine. Users should generally create an http.Client using -// this transport and use the Client rather than using this transport -// directly. -type Transport struct { - Context context.Context - - // Controls whether the application checks the validity of SSL certificates - // over HTTPS connections. A value of false (the default) instructs the - // application to send a request to the server only if the certificate is - // valid and signed by a trusted certificate authority (CA), and also - // includes a hostname that matches the certificate. A value of true - // instructs the application to perform no certificate validation. - AllowInvalidServerCertificate bool -} - -// Verify statically that *Transport implements http.RoundTripper. -var _ http.RoundTripper = (*Transport)(nil) - -// Client returns an *http.Client using a default urlfetch Transport. This -// client will check the validity of SSL certificates. -// -// Any deadline of the provided context will be used for requests through this client. -// If the client does not have a deadline, then an App Engine default of 60 second is used. -func Client(ctx context.Context) *http.Client { - return &http.Client{ - Transport: &Transport{ - Context: ctx, - }, - } -} - -type bodyReader struct { - content []byte - truncated bool - closed bool -} - -// ErrTruncatedBody is the error returned after the final Read() from a -// response's Body if the body has been truncated by App Engine's proxy. -var ErrTruncatedBody = errors.New("urlfetch: truncated body") - -func statusCodeToText(code int) string { - if t := http.StatusText(code); t != "" { - return t - } - return strconv.Itoa(code) -} - -func (br *bodyReader) Read(p []byte) (n int, err error) { - if br.closed { - if br.truncated { - return 0, ErrTruncatedBody - } - return 0, io.EOF - } - n = copy(p, br.content) - if n > 0 { - br.content = br.content[n:] - return - } - if br.truncated { - br.closed = true - return 0, ErrTruncatedBody - } - return 0, io.EOF -} - -func (br *bodyReader) Close() error { - br.closed = true - br.content = nil - return nil -} - -// A map of the URL Fetch-accepted methods that take a request body. -var methodAcceptsRequestBody = map[string]bool{ - "POST": true, - "PUT": true, - "PATCH": true, -} - -// urlString returns a valid string given a URL. This function is necessary because -// the String method of URL doesn't correctly handle URLs with non-empty Opaque values. -// See http://code.google.com/p/go/issues/detail?id=4860. -func urlString(u *url.URL) string { - if u.Opaque == "" || strings.HasPrefix(u.Opaque, "//") { - return u.String() - } - aux := *u - aux.Opaque = "//" + aux.Host + aux.Opaque - return aux.String() -} - -// RoundTrip issues a single HTTP request and returns its response. Per the -// http.RoundTripper interface, RoundTrip only returns an error if there -// was an unsupported request or the URL Fetch proxy fails. -// Note that HTTP response codes such as 5xx, 403, 404, etc are not -// errors as far as the transport is concerned and will be returned -// with err set to nil. -func (t *Transport) RoundTrip(req *http.Request) (res *http.Response, err error) { - methNum, ok := pb.URLFetchRequest_RequestMethod_value[req.Method] - if !ok { - return nil, fmt.Errorf("urlfetch: unsupported HTTP method %q", req.Method) - } - - method := pb.URLFetchRequest_RequestMethod(methNum) - - freq := &pb.URLFetchRequest{ - Method: &method, - Url: proto.String(urlString(req.URL)), - FollowRedirects: proto.Bool(false), // http.Client's responsibility - MustValidateServerCertificate: proto.Bool(!t.AllowInvalidServerCertificate), - } - if deadline, ok := t.Context.Deadline(); ok { - freq.Deadline = proto.Float64(deadline.Sub(time.Now()).Seconds()) - } - - for k, vals := range req.Header { - for _, val := range vals { - freq.Header = append(freq.Header, &pb.URLFetchRequest_Header{ - Key: proto.String(k), - Value: proto.String(val), - }) - } - } - if methodAcceptsRequestBody[req.Method] && req.Body != nil { - // Avoid a []byte copy if req.Body has a Bytes method. - switch b := req.Body.(type) { - case interface { - Bytes() []byte - }: - freq.Payload = b.Bytes() - default: - freq.Payload, err = ioutil.ReadAll(req.Body) - if err != nil { - return nil, err - } - } - } - - fres := &pb.URLFetchResponse{} - if err := internal.Call(t.Context, "urlfetch", "Fetch", freq, fres); err != nil { - return nil, err - } - - res = &http.Response{} - res.StatusCode = int(*fres.StatusCode) - res.Status = fmt.Sprintf("%d %s", res.StatusCode, statusCodeToText(res.StatusCode)) - res.Header = make(http.Header) - res.Request = req - - // Faked: - res.ProtoMajor = 1 - res.ProtoMinor = 1 - res.Proto = "HTTP/1.1" - res.Close = true - - for _, h := range fres.Header { - hkey := http.CanonicalHeaderKey(*h.Key) - hval := *h.Value - if hkey == "Content-Length" { - // Will get filled in below for all but HEAD requests. - if req.Method == "HEAD" { - res.ContentLength, _ = strconv.ParseInt(hval, 10, 64) - } - continue - } - res.Header.Add(hkey, hval) - } - - if req.Method != "HEAD" { - res.ContentLength = int64(len(fres.Content)) - } - - truncated := fres.GetContentWasTruncated() - res.Body = &bodyReader{content: fres.Content, truncated: truncated} - return -} - -func init() { - internal.RegisterErrorCodeMap("urlfetch", pb.URLFetchServiceError_ErrorCode_name) - internal.RegisterTimeoutErrorCode("urlfetch", int32(pb.URLFetchServiceError_DEADLINE_EXCEEDED)) -} diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go index d5dccb9337..10f35d10e5 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go @@ -409,6 +409,9 @@ type Publishing struct { // Optional link to proto reference documentation. Example: // https://cloud.google.com/pubsub/lite/docs/reference/rpc ProtoReferenceDocumentationUri string `protobuf:"bytes,110,opt,name=proto_reference_documentation_uri,json=protoReferenceDocumentationUri,proto3" json:"proto_reference_documentation_uri,omitempty"` + // Optional link to REST reference documentation. Example: + // https://cloud.google.com/pubsub/lite/docs/reference/rest + RestReferenceDocumentationUri string `protobuf:"bytes,111,opt,name=rest_reference_documentation_uri,json=restReferenceDocumentationUri,proto3" json:"rest_reference_documentation_uri,omitempty"` } func (x *Publishing) Reset() { @@ -513,6 +516,13 @@ func (x *Publishing) GetProtoReferenceDocumentationUri() string { return "" } +func (x *Publishing) GetRestReferenceDocumentationUri() string { + if x != nil { + return x.RestReferenceDocumentationUri + } + return "" +} + // Settings for Java client libraries. type JavaSettings struct { state protoimpl.MessageState @@ -1210,6 +1220,14 @@ var file_google_api_client_proto_extTypes = []protoimpl.ExtensionInfo{ Tag: "bytes,1050,opt,name=oauth_scopes", Filename: "google/api/client.proto", }, + { + ExtendedType: (*descriptorpb.ServiceOptions)(nil), + ExtensionType: (*string)(nil), + Field: 525000001, + Name: "google.api.api_version", + Tag: "bytes,525000001,opt,name=api_version", + Filename: "google/api/client.proto", + }, } // Extension fields to descriptorpb.MethodOptions. @@ -1291,6 +1309,23 @@ var ( // // optional string oauth_scopes = 1050; E_OauthScopes = &file_google_api_client_proto_extTypes[2] + // The API version of this service, which should be sent by version-aware + // clients to the service. This allows services to abide by the schema and + // behavior of the service at the time this API version was deployed. + // The format of the API version must be treated as opaque by clients. + // Services may use a format with an apparent structure, but clients must + // not rely on this to determine components within an API version, or attempt + // to construct other valid API versions. Note that this is for upcoming + // functionality and may not be implemented for all services. + // + // Example: + // + // service Foo { + // option (google.api.api_version) = "v1_20230821_preview"; + // } + // + // optional string api_version = 525000001; + E_ApiVersion = &file_google_api_client_proto_extTypes[3] ) var File_google_api_client_proto protoreflect.FileDescriptor @@ -1355,7 +1390,7 @@ var file_google_api_client_proto_rawDesc = []byte{ 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0a, 0x67, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x22, 0xab, 0x04, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, + 0x6e, 0x67, 0x73, 0x22, 0xf4, 0x04, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, @@ -1390,154 +1425,163 @@ var file_google_api_client_proto_rawDesc = []byte{ 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, - 0x69, 0x22, 0x9a, 0x02, 0x0a, 0x0c, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x44, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x12, 0x47, 0x0a, 0x20, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1d, 0x72, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x22, 0x9a, 0x02, 0x0a, 0x0c, 0x4a, + 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, + 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, - 0x0a, 0x0b, 0x43, 0x70, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x68, 0x70, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, + 0x72, 0x79, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x1a, 0x44, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0b, 0x43, 0x70, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xae, - 0x04, 0x0a, 0x0e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x68, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, - 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x72, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, - 0x35, 0x0a, 0x16, 0x68, 0x61, 0x6e, 0x64, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x15, 0x68, 0x61, 0x6e, 0x64, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x52, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x4a, 0x0a, 0x0c, 0x52, 0x75, 0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, + 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x0a, 0x47, - 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, - 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xc2, 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x12, 0x49, 0x0a, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x52, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, - 0x32, 0x0a, 0x15, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, - 0x61, 0x75, 0x74, 0x6f, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x1a, 0x94, 0x02, 0x0a, 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, - 0x69, 0x6e, 0x67, 0x12, 0x47, 0x0a, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, - 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, - 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, - 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, - 0x12, 0x3f, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, - 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, + 0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xae, 0x04, 0x0a, 0x0e, 0x44, 0x6f, 0x74, 0x6e, + 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, + 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, + 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65, + 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67, + 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x38, + 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x68, 0x61, 0x6e, 0x64, + 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x68, 0x61, 0x6e, 0x64, 0x77, 0x72, + 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, + 0x42, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0c, 0x52, 0x75, 0x62, 0x79, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x0a, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xc2, + 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x49, 0x0a, + 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, + 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x6c, 0x6f, 0x6e, + 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x75, 0x74, 0x6f, + 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x75, 0x74, 0x6f, 0x50, 0x6f, 0x70, + 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x94, 0x02, 0x0a, + 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x47, 0x0a, 0x12, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, + 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, - 0x79, 0x12, 0x47, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, - 0x6f, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, - 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, - 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, - 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, - 0x54, 0x4f, 0x53, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, - 0x56, 0x49, 0x45, 0x57, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, - 0x4e, 0x47, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, - 0x0d, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, - 0x2a, 0x67, 0x0a, 0x18, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, - 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, - 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, - 0x45, 0x53, 0x54, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, - 0x55, 0x42, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, - 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52, 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, - 0x69, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, + 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, + 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x6d, 0x61, 0x78, + 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6d, 0x61, + 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x12, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, + 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, + 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x53, + 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, 0x03, 0x12, 0x0f, + 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x04, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x07, 0x0a, + 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, + 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, + 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12, 0x13, 0x0a, + 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52, + 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x43, + 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1f, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, + 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x3a, 0x44, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xc1, 0xba, 0xab, 0xfa, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, + 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -1610,10 +1654,11 @@ var file_google_api_client_proto_depIdxs = []int32{ 20, // 28: google.api.method_signature:extendee -> google.protobuf.MethodOptions 21, // 29: google.api.default_host:extendee -> google.protobuf.ServiceOptions 21, // 30: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions - 31, // [31:31] is the sub-list for method output_type - 31, // [31:31] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 28, // [28:31] is the sub-list for extension extendee + 21, // 31: google.api.api_version:extendee -> google.protobuf.ServiceOptions + 32, // [32:32] is the sub-list for method output_type + 32, // [32:32] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 28, // [28:32] is the sub-list for extension extendee 0, // [0:28] is the sub-list for field type_name } @@ -1787,7 +1832,7 @@ func file_google_api_client_proto_init() { RawDescriptor: file_google_api_client_proto_rawDesc, NumEnums: 2, NumMessages: 16, - NumExtensions: 3, + NumExtensions: 4, NumServices: 0, }, GoTypes: file_google_api_client_proto_goTypes, diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go index 6ce01ac9a6..312d7eb49a 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.12 +// protoc v4.24.4 // source: google/api/field_behavior.proto package annotations @@ -195,21 +195,21 @@ var file_google_api_field_behavior_proto_rawDesc = []byte{ 0x0e, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x4f, 0x4e, 0x5f, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x44, 0x45, 0x4e, - 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x10, 0x08, 0x3a, 0x60, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, + 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x10, 0x08, 0x3a, 0x64, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9c, 0x08, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x0d, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x42, 0x70, 0x0a, 0x0e, 0x63, 0x6f, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, - 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x42, 0x02, 0x10, 0x00, 0x52, + 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x42, 0x70, + 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x42, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, + 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/field_info.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/field_info.pb.go index d02e6bbc89..6ff36206da 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/field_info.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/field_info.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.12 +// protoc v4.24.4 // source: google/api/field_info.proto package annotations @@ -56,9 +56,9 @@ const ( FieldInfo_IPV4 FieldInfo_Format = 2 // Internet Protocol v6 value as defined by [RFC // 2460](https://datatracker.ietf.org/doc/html/rfc2460). The value may be - // normalized to entirely lowercase letters, and zero-padded partial and - // empty octets. For example, the value `2001:DB8::` would be normalized to - // `2001:0db8:0:0`. + // normalized to entirely lowercase letters with zeros compressed, following + // [RFC 5952](https://datatracker.ietf.org/doc/html/rfc5952). For example, + // the value `2001:0DB8:0::0` would be normalized to `2001:db8::`. FieldInfo_IPV6 FieldInfo_Format = 3 // An IP address in either v4 or v6 format as described by the individual // values defined herein. See the comments on the IPV4 and IPV6 types for diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go index d687f68e76..137ff5b1e9 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.5 +// protoc v4.24.4 // source: google/api/expr/v1alpha1/checked.proto package expr diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go index d38876ef04..ca4415956f 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.5 +// protoc v4.24.4 // source: google/api/expr/v1alpha1/eval.proto package expr diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go index c980d6fcc8..3f994b4e3e 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.5 +// protoc v4.24.4 // source: google/api/expr/v1alpha1/explain.proto package expr diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go index 63c1ad9344..0d718fc36d 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.9 +// protoc v4.24.4 // source: google/api/expr/v1alpha1/syntax.proto package expr @@ -38,6 +38,65 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// CEL component specifier. +type SourceInfo_Extension_Component int32 + +const ( + // Unspecified, default. + SourceInfo_Extension_COMPONENT_UNSPECIFIED SourceInfo_Extension_Component = 0 + // Parser. Converts a CEL string to an AST. + SourceInfo_Extension_COMPONENT_PARSER SourceInfo_Extension_Component = 1 + // Type checker. Checks that references in an AST are defined and types + // agree. + SourceInfo_Extension_COMPONENT_TYPE_CHECKER SourceInfo_Extension_Component = 2 + // Runtime. Evaluates a parsed and optionally checked CEL AST against a + // context. + SourceInfo_Extension_COMPONENT_RUNTIME SourceInfo_Extension_Component = 3 +) + +// Enum value maps for SourceInfo_Extension_Component. +var ( + SourceInfo_Extension_Component_name = map[int32]string{ + 0: "COMPONENT_UNSPECIFIED", + 1: "COMPONENT_PARSER", + 2: "COMPONENT_TYPE_CHECKER", + 3: "COMPONENT_RUNTIME", + } + SourceInfo_Extension_Component_value = map[string]int32{ + "COMPONENT_UNSPECIFIED": 0, + "COMPONENT_PARSER": 1, + "COMPONENT_TYPE_CHECKER": 2, + "COMPONENT_RUNTIME": 3, + } +) + +func (x SourceInfo_Extension_Component) Enum() *SourceInfo_Extension_Component { + p := new(SourceInfo_Extension_Component) + *p = x + return p +} + +func (x SourceInfo_Extension_Component) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SourceInfo_Extension_Component) Descriptor() protoreflect.EnumDescriptor { + return file_google_api_expr_v1alpha1_syntax_proto_enumTypes[0].Descriptor() +} + +func (SourceInfo_Extension_Component) Type() protoreflect.EnumType { + return &file_google_api_expr_v1alpha1_syntax_proto_enumTypes[0] +} + +func (x SourceInfo_Extension_Component) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SourceInfo_Extension_Component.Descriptor instead. +func (SourceInfo_Extension_Component) EnumDescriptor() ([]byte, []int) { + return file_google_api_expr_v1alpha1_syntax_proto_rawDescGZIP(), []int{3, 0, 0} +} + // An expression together with source information as returned by the parser. type ParsedExpr struct { state protoimpl.MessageState @@ -103,14 +162,16 @@ func (x *ParsedExpr) GetSourceInfo() *SourceInfo { // operators with the exception of the '.' operator are modelled as function // calls. This makes it easy to represent new operators into the existing AST. // -// All references within expressions must resolve to a [Decl][google.api.expr.v1alpha1.Decl] provided at -// type-check for an expression to be valid. A reference may either be a bare -// identifier `name` or a qualified identifier `google.api.name`. References -// may either refer to a value or a function declaration. +// All references within expressions must resolve to a +// [Decl][google.api.expr.v1alpha1.Decl] provided at type-check for an +// expression to be valid. A reference may either be a bare identifier `name` or +// a qualified identifier `google.api.name`. References may either refer to a +// value or a function declaration. // // For example, the expression `google.api.name.startsWith('expr')` references -// the declaration `google.api.name` within a [Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression, and -// the function declaration `startsWith`. +// the declaration `google.api.name` within a +// [Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression, and the +// function declaration `startsWith`. type Expr struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -291,7 +352,8 @@ func (*Expr_ComprehensionExpr) isExpr_ExprKind() {} // primitives. // // Lists and structs are not included as constants as these aggregate types may -// contain [Expr][google.api.expr.v1alpha1.Expr] elements which require evaluation and are thus not constant. +// contain [Expr][google.api.expr.v1alpha1.Expr] elements which require +// evaluation and are thus not constant. // // Examples of literals include: `"hello"`, `b'bytes'`, `1u`, `4.2`, `-2`, // `true`, `null`. @@ -528,6 +590,14 @@ type SourceInfo struct { // in the map corresponds to the expression id of the expanded macro, and the // value is the call `Expr` that was replaced. MacroCalls map[int64]*Expr `protobuf:"bytes,5,rep,name=macro_calls,json=macroCalls,proto3" json:"macro_calls,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // A list of tags for extensions that were used while parsing or type checking + // the source expression. For example, optimizations that require special + // runtime support may be specified. + // + // These are used to check feature support between components in separate + // implementations. This can be used to either skip redundant work or + // report an error if the extension is unsupported. + Extensions []*SourceInfo_Extension `protobuf:"bytes,6,rep,name=extensions,proto3" json:"extensions,omitempty"` } func (x *SourceInfo) Reset() { @@ -597,6 +667,13 @@ func (x *SourceInfo) GetMacroCalls() map[int64]*Expr { return nil } +func (x *SourceInfo) GetExtensions() []*SourceInfo_Extension { + if x != nil { + return x.Extensions + } + return nil +} + // A specific position in source. type SourcePosition struct { state protoimpl.MessageState @@ -684,7 +761,8 @@ type Expr_Ident struct { // Required. Holds a single, unqualified identifier, possibly preceded by a // '.'. // - // Qualified names are represented by the [Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression. + // Qualified names are represented by the + // [Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } @@ -1255,6 +1333,137 @@ func (*Expr_CreateStruct_Entry_FieldKey) isExpr_CreateStruct_Entry_KeyKind() {} func (*Expr_CreateStruct_Entry_MapKey) isExpr_CreateStruct_Entry_KeyKind() {} +// An extension that was requested for the source expression. +type SourceInfo_Extension struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Identifier for the extension. Example: constant_folding + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // If set, the listed components must understand the extension for the + // expression to evaluate correctly. + // + // This field has set semantics, repeated values should be deduplicated. + AffectedComponents []SourceInfo_Extension_Component `protobuf:"varint,2,rep,packed,name=affected_components,json=affectedComponents,proto3,enum=google.api.expr.v1alpha1.SourceInfo_Extension_Component" json:"affected_components,omitempty"` + // Version info. May be skipped if it isn't meaningful for the extension. + // (for example constant_folding might always be v0.0). + Version *SourceInfo_Extension_Version `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *SourceInfo_Extension) Reset() { + *x = SourceInfo_Extension{} + if protoimpl.UnsafeEnabled { + mi := &file_google_api_expr_v1alpha1_syntax_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SourceInfo_Extension) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SourceInfo_Extension) ProtoMessage() {} + +func (x *SourceInfo_Extension) ProtoReflect() protoreflect.Message { + mi := &file_google_api_expr_v1alpha1_syntax_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SourceInfo_Extension.ProtoReflect.Descriptor instead. +func (*SourceInfo_Extension) Descriptor() ([]byte, []int) { + return file_google_api_expr_v1alpha1_syntax_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *SourceInfo_Extension) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SourceInfo_Extension) GetAffectedComponents() []SourceInfo_Extension_Component { + if x != nil { + return x.AffectedComponents + } + return nil +} + +func (x *SourceInfo_Extension) GetVersion() *SourceInfo_Extension_Version { + if x != nil { + return x.Version + } + return nil +} + +// Version +type SourceInfo_Extension_Version struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Major version changes indicate different required support level from + // the required components. + Major int64 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"` + // Minor version changes must not change the observed behavior from + // existing implementations, but may be provided informationally. + Minor int64 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"` +} + +func (x *SourceInfo_Extension_Version) Reset() { + *x = SourceInfo_Extension_Version{} + if protoimpl.UnsafeEnabled { + mi := &file_google_api_expr_v1alpha1_syntax_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SourceInfo_Extension_Version) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SourceInfo_Extension_Version) ProtoMessage() {} + +func (x *SourceInfo_Extension_Version) ProtoReflect() protoreflect.Message { + mi := &file_google_api_expr_v1alpha1_syntax_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SourceInfo_Extension_Version.ProtoReflect.Descriptor instead. +func (*SourceInfo_Extension_Version) Descriptor() ([]byte, []int) { + return file_google_api_expr_v1alpha1_syntax_proto_rawDescGZIP(), []int{3, 0, 0} +} + +func (x *SourceInfo_Extension_Version) GetMajor() int64 { + if x != nil { + return x.Major + } + return 0 +} + +func (x *SourceInfo_Extension_Version) GetMinor() int64 { + if x != nil { + return x.Minor + } + return 0 +} + var File_google_api_expr_v1alpha1_syntax_proto protoreflect.FileDescriptor var file_google_api_expr_v1alpha1_syntax_proto_rawDesc = []byte{ @@ -1412,7 +1621,7 @@ var file_google_api_expr_v1alpha1_syntax_proto_rawDesc = []byte{ 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, - 0xb9, 0x03, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, + 0x8c, 0x07, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, @@ -1429,32 +1638,61 @@ var file_google_api_expr_v1alpha1_syntax_proto_rawDesc = []byte{ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x1a, 0x3c, - 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0f, - 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x78, - 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x72, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, 0x0e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x42, 0x6e, 0x0a, - 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x65, 0x78, 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0b, 0x53, - 0x79, 0x6e, 0x74, 0x61, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x78, 0x70, 0x72, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4e, + 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x65, 0x78, 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, + 0x03, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x69, 0x0a, 0x13, + 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x52, 0x12, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x35, 0x0a, 0x07, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, + 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, + 0x22, 0x6f, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, + 0x15, 0x43, 0x4f, 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, + 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x1a, + 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, + 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, + 0x03, 0x1a, 0x3c, 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x5d, 0x0a, 0x0f, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, + 0x78, 0x70, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, + 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x42, 0x6e, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x42, 0x0b, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x3c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x78, 0x70, 0x72, 0xf8, 0x01, 0x01, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1469,59 +1707,66 @@ func file_google_api_expr_v1alpha1_syntax_proto_rawDescGZIP() []byte { return file_google_api_expr_v1alpha1_syntax_proto_rawDescData } -var file_google_api_expr_v1alpha1_syntax_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_google_api_expr_v1alpha1_syntax_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_google_api_expr_v1alpha1_syntax_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_google_api_expr_v1alpha1_syntax_proto_goTypes = []interface{}{ - (*ParsedExpr)(nil), // 0: google.api.expr.v1alpha1.ParsedExpr - (*Expr)(nil), // 1: google.api.expr.v1alpha1.Expr - (*Constant)(nil), // 2: google.api.expr.v1alpha1.Constant - (*SourceInfo)(nil), // 3: google.api.expr.v1alpha1.SourceInfo - (*SourcePosition)(nil), // 4: google.api.expr.v1alpha1.SourcePosition - (*Expr_Ident)(nil), // 5: google.api.expr.v1alpha1.Expr.Ident - (*Expr_Select)(nil), // 6: google.api.expr.v1alpha1.Expr.Select - (*Expr_Call)(nil), // 7: google.api.expr.v1alpha1.Expr.Call - (*Expr_CreateList)(nil), // 8: google.api.expr.v1alpha1.Expr.CreateList - (*Expr_CreateStruct)(nil), // 9: google.api.expr.v1alpha1.Expr.CreateStruct - (*Expr_Comprehension)(nil), // 10: google.api.expr.v1alpha1.Expr.Comprehension - (*Expr_CreateStruct_Entry)(nil), // 11: google.api.expr.v1alpha1.Expr.CreateStruct.Entry - nil, // 12: google.api.expr.v1alpha1.SourceInfo.PositionsEntry - nil, // 13: google.api.expr.v1alpha1.SourceInfo.MacroCallsEntry - (structpb.NullValue)(0), // 14: google.protobuf.NullValue - (*durationpb.Duration)(nil), // 15: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp + (SourceInfo_Extension_Component)(0), // 0: google.api.expr.v1alpha1.SourceInfo.Extension.Component + (*ParsedExpr)(nil), // 1: google.api.expr.v1alpha1.ParsedExpr + (*Expr)(nil), // 2: google.api.expr.v1alpha1.Expr + (*Constant)(nil), // 3: google.api.expr.v1alpha1.Constant + (*SourceInfo)(nil), // 4: google.api.expr.v1alpha1.SourceInfo + (*SourcePosition)(nil), // 5: google.api.expr.v1alpha1.SourcePosition + (*Expr_Ident)(nil), // 6: google.api.expr.v1alpha1.Expr.Ident + (*Expr_Select)(nil), // 7: google.api.expr.v1alpha1.Expr.Select + (*Expr_Call)(nil), // 8: google.api.expr.v1alpha1.Expr.Call + (*Expr_CreateList)(nil), // 9: google.api.expr.v1alpha1.Expr.CreateList + (*Expr_CreateStruct)(nil), // 10: google.api.expr.v1alpha1.Expr.CreateStruct + (*Expr_Comprehension)(nil), // 11: google.api.expr.v1alpha1.Expr.Comprehension + (*Expr_CreateStruct_Entry)(nil), // 12: google.api.expr.v1alpha1.Expr.CreateStruct.Entry + (*SourceInfo_Extension)(nil), // 13: google.api.expr.v1alpha1.SourceInfo.Extension + nil, // 14: google.api.expr.v1alpha1.SourceInfo.PositionsEntry + nil, // 15: google.api.expr.v1alpha1.SourceInfo.MacroCallsEntry + (*SourceInfo_Extension_Version)(nil), // 16: google.api.expr.v1alpha1.SourceInfo.Extension.Version + (structpb.NullValue)(0), // 17: google.protobuf.NullValue + (*durationpb.Duration)(nil), // 18: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp } var file_google_api_expr_v1alpha1_syntax_proto_depIdxs = []int32{ - 1, // 0: google.api.expr.v1alpha1.ParsedExpr.expr:type_name -> google.api.expr.v1alpha1.Expr - 3, // 1: google.api.expr.v1alpha1.ParsedExpr.source_info:type_name -> google.api.expr.v1alpha1.SourceInfo - 2, // 2: google.api.expr.v1alpha1.Expr.const_expr:type_name -> google.api.expr.v1alpha1.Constant - 5, // 3: google.api.expr.v1alpha1.Expr.ident_expr:type_name -> google.api.expr.v1alpha1.Expr.Ident - 6, // 4: google.api.expr.v1alpha1.Expr.select_expr:type_name -> google.api.expr.v1alpha1.Expr.Select - 7, // 5: google.api.expr.v1alpha1.Expr.call_expr:type_name -> google.api.expr.v1alpha1.Expr.Call - 8, // 6: google.api.expr.v1alpha1.Expr.list_expr:type_name -> google.api.expr.v1alpha1.Expr.CreateList - 9, // 7: google.api.expr.v1alpha1.Expr.struct_expr:type_name -> google.api.expr.v1alpha1.Expr.CreateStruct - 10, // 8: google.api.expr.v1alpha1.Expr.comprehension_expr:type_name -> google.api.expr.v1alpha1.Expr.Comprehension - 14, // 9: google.api.expr.v1alpha1.Constant.null_value:type_name -> google.protobuf.NullValue - 15, // 10: google.api.expr.v1alpha1.Constant.duration_value:type_name -> google.protobuf.Duration - 16, // 11: google.api.expr.v1alpha1.Constant.timestamp_value:type_name -> google.protobuf.Timestamp - 12, // 12: google.api.expr.v1alpha1.SourceInfo.positions:type_name -> google.api.expr.v1alpha1.SourceInfo.PositionsEntry - 13, // 13: google.api.expr.v1alpha1.SourceInfo.macro_calls:type_name -> google.api.expr.v1alpha1.SourceInfo.MacroCallsEntry - 1, // 14: google.api.expr.v1alpha1.Expr.Select.operand:type_name -> google.api.expr.v1alpha1.Expr - 1, // 15: google.api.expr.v1alpha1.Expr.Call.target:type_name -> google.api.expr.v1alpha1.Expr - 1, // 16: google.api.expr.v1alpha1.Expr.Call.args:type_name -> google.api.expr.v1alpha1.Expr - 1, // 17: google.api.expr.v1alpha1.Expr.CreateList.elements:type_name -> google.api.expr.v1alpha1.Expr - 11, // 18: google.api.expr.v1alpha1.Expr.CreateStruct.entries:type_name -> google.api.expr.v1alpha1.Expr.CreateStruct.Entry - 1, // 19: google.api.expr.v1alpha1.Expr.Comprehension.iter_range:type_name -> google.api.expr.v1alpha1.Expr - 1, // 20: google.api.expr.v1alpha1.Expr.Comprehension.accu_init:type_name -> google.api.expr.v1alpha1.Expr - 1, // 21: google.api.expr.v1alpha1.Expr.Comprehension.loop_condition:type_name -> google.api.expr.v1alpha1.Expr - 1, // 22: google.api.expr.v1alpha1.Expr.Comprehension.loop_step:type_name -> google.api.expr.v1alpha1.Expr - 1, // 23: google.api.expr.v1alpha1.Expr.Comprehension.result:type_name -> google.api.expr.v1alpha1.Expr - 1, // 24: google.api.expr.v1alpha1.Expr.CreateStruct.Entry.map_key:type_name -> google.api.expr.v1alpha1.Expr - 1, // 25: google.api.expr.v1alpha1.Expr.CreateStruct.Entry.value:type_name -> google.api.expr.v1alpha1.Expr - 1, // 26: google.api.expr.v1alpha1.SourceInfo.MacroCallsEntry.value:type_name -> google.api.expr.v1alpha1.Expr - 27, // [27:27] is the sub-list for method output_type - 27, // [27:27] is the sub-list for method input_type - 27, // [27:27] is the sub-list for extension type_name - 27, // [27:27] is the sub-list for extension extendee - 0, // [0:27] is the sub-list for field type_name + 2, // 0: google.api.expr.v1alpha1.ParsedExpr.expr:type_name -> google.api.expr.v1alpha1.Expr + 4, // 1: google.api.expr.v1alpha1.ParsedExpr.source_info:type_name -> google.api.expr.v1alpha1.SourceInfo + 3, // 2: google.api.expr.v1alpha1.Expr.const_expr:type_name -> google.api.expr.v1alpha1.Constant + 6, // 3: google.api.expr.v1alpha1.Expr.ident_expr:type_name -> google.api.expr.v1alpha1.Expr.Ident + 7, // 4: google.api.expr.v1alpha1.Expr.select_expr:type_name -> google.api.expr.v1alpha1.Expr.Select + 8, // 5: google.api.expr.v1alpha1.Expr.call_expr:type_name -> google.api.expr.v1alpha1.Expr.Call + 9, // 6: google.api.expr.v1alpha1.Expr.list_expr:type_name -> google.api.expr.v1alpha1.Expr.CreateList + 10, // 7: google.api.expr.v1alpha1.Expr.struct_expr:type_name -> google.api.expr.v1alpha1.Expr.CreateStruct + 11, // 8: google.api.expr.v1alpha1.Expr.comprehension_expr:type_name -> google.api.expr.v1alpha1.Expr.Comprehension + 17, // 9: google.api.expr.v1alpha1.Constant.null_value:type_name -> google.protobuf.NullValue + 18, // 10: google.api.expr.v1alpha1.Constant.duration_value:type_name -> google.protobuf.Duration + 19, // 11: google.api.expr.v1alpha1.Constant.timestamp_value:type_name -> google.protobuf.Timestamp + 14, // 12: google.api.expr.v1alpha1.SourceInfo.positions:type_name -> google.api.expr.v1alpha1.SourceInfo.PositionsEntry + 15, // 13: google.api.expr.v1alpha1.SourceInfo.macro_calls:type_name -> google.api.expr.v1alpha1.SourceInfo.MacroCallsEntry + 13, // 14: google.api.expr.v1alpha1.SourceInfo.extensions:type_name -> google.api.expr.v1alpha1.SourceInfo.Extension + 2, // 15: google.api.expr.v1alpha1.Expr.Select.operand:type_name -> google.api.expr.v1alpha1.Expr + 2, // 16: google.api.expr.v1alpha1.Expr.Call.target:type_name -> google.api.expr.v1alpha1.Expr + 2, // 17: google.api.expr.v1alpha1.Expr.Call.args:type_name -> google.api.expr.v1alpha1.Expr + 2, // 18: google.api.expr.v1alpha1.Expr.CreateList.elements:type_name -> google.api.expr.v1alpha1.Expr + 12, // 19: google.api.expr.v1alpha1.Expr.CreateStruct.entries:type_name -> google.api.expr.v1alpha1.Expr.CreateStruct.Entry + 2, // 20: google.api.expr.v1alpha1.Expr.Comprehension.iter_range:type_name -> google.api.expr.v1alpha1.Expr + 2, // 21: google.api.expr.v1alpha1.Expr.Comprehension.accu_init:type_name -> google.api.expr.v1alpha1.Expr + 2, // 22: google.api.expr.v1alpha1.Expr.Comprehension.loop_condition:type_name -> google.api.expr.v1alpha1.Expr + 2, // 23: google.api.expr.v1alpha1.Expr.Comprehension.loop_step:type_name -> google.api.expr.v1alpha1.Expr + 2, // 24: google.api.expr.v1alpha1.Expr.Comprehension.result:type_name -> google.api.expr.v1alpha1.Expr + 2, // 25: google.api.expr.v1alpha1.Expr.CreateStruct.Entry.map_key:type_name -> google.api.expr.v1alpha1.Expr + 2, // 26: google.api.expr.v1alpha1.Expr.CreateStruct.Entry.value:type_name -> google.api.expr.v1alpha1.Expr + 0, // 27: google.api.expr.v1alpha1.SourceInfo.Extension.affected_components:type_name -> google.api.expr.v1alpha1.SourceInfo.Extension.Component + 16, // 28: google.api.expr.v1alpha1.SourceInfo.Extension.version:type_name -> google.api.expr.v1alpha1.SourceInfo.Extension.Version + 2, // 29: google.api.expr.v1alpha1.SourceInfo.MacroCallsEntry.value:type_name -> google.api.expr.v1alpha1.Expr + 30, // [30:30] is the sub-list for method output_type + 30, // [30:30] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name } func init() { file_google_api_expr_v1alpha1_syntax_proto_init() } @@ -1674,6 +1919,30 @@ func file_google_api_expr_v1alpha1_syntax_proto_init() { return nil } } + file_google_api_expr_v1alpha1_syntax_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SourceInfo_Extension); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_api_expr_v1alpha1_syntax_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SourceInfo_Extension_Version); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_google_api_expr_v1alpha1_syntax_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Expr_ConstExpr)(nil), @@ -1704,13 +1973,14 @@ func file_google_api_expr_v1alpha1_syntax_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_api_expr_v1alpha1_syntax_proto_rawDesc, - NumEnums: 0, - NumMessages: 14, + NumEnums: 1, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, GoTypes: file_google_api_expr_v1alpha1_syntax_proto_goTypes, DependencyIndexes: file_google_api_expr_v1alpha1_syntax_proto_depIdxs, + EnumInfos: file_google_api_expr_v1alpha1_syntax_proto_enumTypes, MessageInfos: file_google_api_expr_v1alpha1_syntax_proto_msgTypes, }.Build() File_google_api_expr_v1alpha1_syntax_proto = out.File diff --git a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go index 91d122c5be..033f238684 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.21.5 +// protoc v4.24.4 // source: google/api/expr/v1alpha1/value.proto package expr diff --git a/vendor/google.golang.org/genproto/googleapis/api/tidyfix.go b/vendor/google.golang.org/genproto/googleapis/api/tidyfix.go deleted file mode 100644 index 1d3f1b5b7e..0000000000 --- a/vendor/google.golang.org/genproto/googleapis/api/tidyfix.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// This file, and the {{.RootMod}} import, won't actually become part of -// the resultant binary. -//go:build modhack -// +build modhack - -package api - -// Necessary for safely adding multi-module repo. See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository -import _ "google.golang.org/genproto/internal" diff --git a/vendor/google.golang.org/genproto/internal/doc.go b/vendor/google.golang.org/genproto/internal/doc.go deleted file mode 100644 index 90e89b4aa3..0000000000 --- a/vendor/google.golang.org/genproto/internal/doc.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// This file makes internal an importable go package -// for use with backreferences from submodules. -package internal diff --git a/vendor/modules.txt b/vendor/modules.txt index 30fdc0c0b0..16f4cde719 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -5,8 +5,8 @@ github.com/AdaLogics/go-fuzz-headers ## explicit; go 1.16 github.com/BurntSushi/toml github.com/BurntSushi/toml/internal -# github.com/Microsoft/go-winio v0.6.1 -## explicit; go 1.17 +# github.com/Microsoft/go-winio v0.6.2 +## explicit; go 1.21 github.com/Microsoft/go-winio github.com/Microsoft/go-winio/backuptar github.com/Microsoft/go-winio/internal/fs @@ -15,8 +15,8 @@ github.com/Microsoft/go-winio/internal/stringbuffer github.com/Microsoft/go-winio/pkg/bindfilter github.com/Microsoft/go-winio/pkg/guid github.com/Microsoft/go-winio/vhd -# github.com/Microsoft/hcsshim v0.12.0-rc.3 -## explicit; go 1.18 +# github.com/Microsoft/hcsshim v0.12.3 +## explicit; go 1.21 github.com/Microsoft/hcsshim github.com/Microsoft/hcsshim/computestorage github.com/Microsoft/hcsshim/internal/cow @@ -64,10 +64,10 @@ github.com/cenkalti/backoff/v4 # github.com/cespare/xxhash/v2 v2.2.0 ## explicit; go 1.11 github.com/cespare/xxhash/v2 -# github.com/containerd/cgroups/v3 v3.0.2 +# github.com/containerd/cgroups/v3 v3.0.3 ## explicit; go 1.18 github.com/containerd/cgroups/v3/cgroup1/stats -# github.com/containerd/containerd v1.7.16 +# github.com/containerd/containerd v1.7.17 ## explicit; go 1.21 github.com/containerd/containerd/api/events github.com/containerd/containerd/api/runtime/sandbox/v1 @@ -78,6 +78,7 @@ github.com/containerd/containerd/archive/tarheader github.com/containerd/containerd/containers github.com/containerd/containerd/content github.com/containerd/containerd/content/local +github.com/containerd/containerd/contrib/seccomp/kernelversion github.com/containerd/containerd/errdefs github.com/containerd/containerd/events github.com/containerd/containerd/filters @@ -121,20 +122,20 @@ github.com/containerd/errdefs # github.com/containerd/log v0.1.0 ## explicit; go 1.20 github.com/containerd/log -# github.com/containerd/ttrpc v1.2.3 +# github.com/containerd/ttrpc v1.2.4 ## explicit; go 1.19 github.com/containerd/ttrpc # github.com/containerd/typeurl/v2 v2.1.1 ## explicit; go 1.13 github.com/containerd/typeurl/v2 -# github.com/containers/common v0.58.2 -## explicit; go 1.20 +# github.com/containers/common v0.59.0 +## explicit; go 1.21 github.com/containers/common/pkg/auth github.com/containers/common/pkg/capabilities github.com/containers/common/pkg/completion github.com/containers/common/pkg/password -# github.com/containers/image/v5 v5.30.1 -## explicit; go 1.19 +# github.com/containers/image/v5 v5.31.0 +## explicit; go 1.21 github.com/containers/image/v5/docker github.com/containers/image/v5/docker/policyconfiguration github.com/containers/image/v5/docker/reference @@ -147,6 +148,7 @@ github.com/containers/image/v5/internal/imagesource/impl github.com/containers/image/v5/internal/imagesource/stubs github.com/containers/image/v5/internal/iolimits github.com/containers/image/v5/internal/manifest +github.com/containers/image/v5/internal/multierr github.com/containers/image/v5/internal/pkg/platform github.com/containers/image/v5/internal/private github.com/containers/image/v5/internal/putblobdigest @@ -159,7 +161,6 @@ github.com/containers/image/v5/internal/uploadreader github.com/containers/image/v5/internal/useragent github.com/containers/image/v5/manifest github.com/containers/image/v5/pkg/blobinfocache/none -github.com/containers/image/v5/pkg/compression github.com/containers/image/v5/pkg/compression/internal github.com/containers/image/v5/pkg/compression/types github.com/containers/image/v5/pkg/docker/config @@ -172,13 +173,12 @@ github.com/containers/image/v5/version # github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 ## explicit github.com/containers/libtrust -# github.com/containers/ocicrypt v1.1.9 +# github.com/containers/ocicrypt v1.1.10 ## explicit; go 1.20 github.com/containers/ocicrypt/spec -# github.com/containers/storage v1.53.0 -## explicit; go 1.20 -github.com/containers/storage/pkg/chunked/compressor -github.com/containers/storage/pkg/chunked/internal +# github.com/containers/storage v1.54.0 +## explicit; go 1.21 +github.com/containers/storage/pkg/fileutils github.com/containers/storage/pkg/homedir github.com/containers/storage/pkg/idtools github.com/containers/storage/pkg/ioutils @@ -196,13 +196,13 @@ github.com/coreos/go-semver/semver ## explicit; go 1.12 github.com/coreos/go-systemd/v22/daemon github.com/coreos/go-systemd/v22/journal -# github.com/davecgh/go-spew v1.1.1 +# github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc ## explicit github.com/davecgh/go-spew/spew # github.com/distribution/reference v0.6.0 ## explicit; go 1.20 github.com/distribution/reference -# github.com/docker/cli v26.1.2+incompatible +# github.com/docker/cli v26.1.3+incompatible ## explicit github.com/docker/cli/cli/config github.com/docker/cli/cli/config/configfile @@ -213,7 +213,7 @@ github.com/docker/cli/cli/config/types github.com/docker/distribution/registry/api/errcode github.com/docker/distribution/registry/api/v2 github.com/docker/distribution/registry/client/auth/challenge -# github.com/docker/docker v25.0.5+incompatible +# github.com/docker/docker v26.1.3+incompatible ## explicit github.com/docker/docker/api/types/versions github.com/docker/docker/pkg/homedir @@ -238,7 +238,7 @@ github.com/evanphx/json-patch ## explicit; go 1.18 github.com/evanphx/json-patch/v5 github.com/evanphx/json-patch/v5/internal/json -# github.com/fatih/color v1.17.0 +# github.com/fatih/color v1.16.0 ## explicit; go 1.17 github.com/fatih/color # github.com/felixge/httpsnoop v1.0.4 @@ -269,15 +269,15 @@ github.com/go-logr/stdr # github.com/go-logr/zapr v1.3.0 ## explicit; go 1.18 github.com/go-logr/zapr -# github.com/go-openapi/jsonpointer v0.20.2 -## explicit; go 1.19 +# github.com/go-openapi/jsonpointer v0.21.0 +## explicit; go 1.20 github.com/go-openapi/jsonpointer -# github.com/go-openapi/jsonreference v0.20.4 -## explicit; go 1.19 +# github.com/go-openapi/jsonreference v0.21.0 +## explicit; go 1.20 github.com/go-openapi/jsonreference github.com/go-openapi/jsonreference/internal -# github.com/go-openapi/swag v0.22.10 -## explicit; go 1.19 +# github.com/go-openapi/swag v0.23.0 +## explicit; go 1.20 github.com/go-openapi/swag # github.com/go-task/slim-sprig/v3 v3.0.0 ## explicit; go 1.20 @@ -379,12 +379,6 @@ github.com/h2non/filetype/types # github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c ## explicit github.com/h2non/go-is-svg -# github.com/hashicorp/errwrap v1.1.0 -## explicit -github.com/hashicorp/errwrap -# github.com/hashicorp/go-multierror v1.1.1 -## explicit; go 1.13 -github.com/hashicorp/go-multierror # github.com/imdario/mergo v0.3.16 ## explicit; go 1.13 github.com/imdario/mergo @@ -403,19 +397,15 @@ github.com/josharian/intern # github.com/json-iterator/go v1.1.12 ## explicit; go 1.12 github.com/json-iterator/go -# github.com/klauspost/compress v1.17.7 +# github.com/klauspost/compress v1.17.8 ## explicit; go 1.20 github.com/klauspost/compress -github.com/klauspost/compress/flate github.com/klauspost/compress/fse github.com/klauspost/compress/huff0 github.com/klauspost/compress/internal/cpuinfo github.com/klauspost/compress/internal/snapref github.com/klauspost/compress/zstd github.com/klauspost/compress/zstd/internal/xxhash -# github.com/klauspost/pgzip v1.2.6 -## explicit -github.com/klauspost/pgzip # github.com/mailru/easyjson v0.7.7 ## explicit; go 1.12 github.com/mailru/easyjson/buffer @@ -532,8 +522,8 @@ github.com/openshift/client-go/config/informers/externalversions/config/v1alpha1 github.com/openshift/client-go/config/informers/externalversions/internalinterfaces github.com/openshift/client-go/config/listers/config/v1 github.com/openshift/client-go/config/listers/config/v1alpha1 -# github.com/operator-framework/api v0.23.0 -## explicit; go 1.21 +# github.com/operator-framework/api v0.25.0 +## explicit; go 1.22.0 github.com/operator-framework/api/crds github.com/operator-framework/api/pkg/constraints github.com/operator-framework/api/pkg/encoding @@ -550,8 +540,8 @@ github.com/operator-framework/api/pkg/validation github.com/operator-framework/api/pkg/validation/errors github.com/operator-framework/api/pkg/validation/interfaces github.com/operator-framework/api/pkg/validation/internal -# github.com/operator-framework/operator-registry v1.41.0 -## explicit; go 1.22 +# github.com/operator-framework/operator-registry v1.43.1 +## explicit; go 1.22.0 github.com/operator-framework/operator-registry/alpha/model github.com/operator-framework/operator-registry/alpha/property github.com/operator-framework/operator-registry/pkg/api @@ -573,15 +563,13 @@ github.com/operator-framework/operator-registry/pkg/sqlite/migrations # github.com/otiai10/copy v1.14.0 ## explicit; go 1.18 github.com/otiai10/copy -# github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 -## explicit # github.com/pkg/errors v0.9.1 ## explicit github.com/pkg/errors -# github.com/pmezard/go-difflib v1.0.0 +# github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 ## explicit github.com/pmezard/go-difflib/difflib -# github.com/prometheus/client_golang v1.18.0 +# github.com/prometheus/client_golang v1.19.0 => github.com/prometheus/client_golang v1.18.0 ## explicit; go 1.19 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/collectors @@ -593,7 +581,7 @@ github.com/prometheus/client_golang/prometheus/testutil/promlint/validations # github.com/prometheus/client_model v0.6.1 ## explicit; go 1.19 github.com/prometheus/client_model/go -# github.com/prometheus/common v0.47.0 +# github.com/prometheus/common v0.51.1 => github.com/prometheus/common v0.47.0 ## explicit; go 1.20 github.com/prometheus/common/expfmt github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg @@ -603,8 +591,6 @@ github.com/prometheus/common/model github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util -# github.com/rogpeppe/go-internal v1.12.0 -## explicit; go 1.20 # github.com/sirupsen/logrus v1.9.3 ## explicit; go 1.13 github.com/sirupsen/logrus @@ -625,17 +611,6 @@ github.com/stretchr/testify/require # github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 ## explicit github.com/syndtr/gocapability/capability -# github.com/ulikunitz/xz v0.5.11 -## explicit; go 1.12 -github.com/ulikunitz/xz -github.com/ulikunitz/xz/internal/hash -github.com/ulikunitz/xz/internal/xlog -github.com/ulikunitz/xz/lzma -# github.com/vbatts/tar-split v0.11.5 -## explicit; go 1.17 -github.com/vbatts/tar-split/archive/tar -github.com/vbatts/tar-split/tar/asm -github.com/vbatts/tar-split/tar/storage # go.etcd.io/bbolt v1.3.10 ## explicit; go 1.21 go.etcd.io/bbolt @@ -672,11 +647,11 @@ go.opencensus.io/trace/tracestate ## explicit; go 1.20 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal -# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 +# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 ## explicit; go 1.20 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil -# go.opentelemetry.io/otel v1.23.1 +# go.opentelemetry.io/otel v1.24.0 ## explicit; go 1.20 go.opentelemetry.io/otel go.opentelemetry.io/otel/attribute @@ -704,7 +679,7 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry -# go.opentelemetry.io/otel/metric v1.23.1 +# go.opentelemetry.io/otel/metric v1.24.0 ## explicit; go 1.20 go.opentelemetry.io/otel/metric go.opentelemetry.io/otel/metric/embedded @@ -717,7 +692,7 @@ go.opentelemetry.io/otel/sdk/internal go.opentelemetry.io/otel/sdk/internal/env go.opentelemetry.io/otel/sdk/resource go.opentelemetry.io/otel/sdk/trace -# go.opentelemetry.io/otel/trace v1.23.1 +# go.opentelemetry.io/otel/trace v1.24.0 ## explicit; go 1.20 go.opentelemetry.io/otel/trace go.opentelemetry.io/otel/trace/embedded @@ -752,7 +727,7 @@ golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/nacl/secretbox golang.org/x/crypto/salsa20/salsa -# golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 +# golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 ## explicit; go 1.20 golang.org/x/exp/constraints golang.org/x/exp/maps @@ -779,7 +754,7 @@ golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace golang.org/x/net/websocket -# golang.org/x/oauth2 v0.18.0 +# golang.org/x/oauth2 v0.20.0 ## explicit; go 1.18 golang.org/x/oauth2 golang.org/x/oauth2/internal @@ -835,7 +810,6 @@ golang.org/x/text/width golang.org/x/time/rate # golang.org/x/tools v0.21.0 ## explicit; go 1.19 -golang.org/x/tools/cmd/stringer golang.org/x/tools/cover golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/ast/inspector @@ -864,20 +838,10 @@ golang.org/x/tools/internal/versions # gomodules.xyz/jsonpatch/v2 v2.4.0 ## explicit; go 1.20 gomodules.xyz/jsonpatch/v2 -# google.golang.org/appengine v1.6.8 -## explicit; go 1.11 -google.golang.org/appengine/internal -google.golang.org/appengine/internal/base -google.golang.org/appengine/internal/datastore -google.golang.org/appengine/internal/log -google.golang.org/appengine/internal/remote_api -google.golang.org/appengine/internal/urlfetch -google.golang.org/appengine/urlfetch # google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de ## explicit; go 1.19 -google.golang.org/genproto/internal google.golang.org/genproto/protobuf/field_mask -# google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de +# google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 ## explicit; go 1.19 google.golang.org/genproto/googleapis/api google.golang.org/genproto/googleapis/api/annotations @@ -887,7 +851,7 @@ google.golang.org/genproto/googleapis/api/httpbody ## explicit; go 1.19 google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status -# google.golang.org/grpc v1.63.2 +# google.golang.org/grpc v1.64.0 => google.golang.org/grpc v1.63.2 ## explicit; go 1.19 google.golang.org/grpc google.golang.org/grpc/attributes @@ -1849,5 +1813,8 @@ sigs.k8s.io/structured-merge-diff/v4/value ## explicit; go 1.12 sigs.k8s.io/yaml sigs.k8s.io/yaml/goyaml.v2 +# github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.18.0 +# github.com/prometheus/common => github.com/prometheus/common v0.47.0 +# google.golang.org/grpc => google.golang.org/grpc v1.63.2 # github.com/openshift/api => github.com/openshift/api v0.0.0-20221021112143-4226c2167e40 # github.com/openshift/client-go => github.com/openshift/client-go v0.0.0-20221019143426-16aed247da5c