From 68827e6d06844d87411873c3d877997fc4c55e8a Mon Sep 17 00:00:00 2001
From: Justin Van Patten The Pulumi Python SDK (pulumi) is the core package used when writing Pulumi programs in Python. It contains everything
-that you’ll need in order to interact with Pulumi resource providers and express infrastructure using Python code.
-Pulumi resource providers all depend on this library and express their resources in terms of the types defined in this
-module. Note: The Pulumi Python SDK requires an officially supported version of Python. See
-Pulumi & Python for details on how to get started with
-Python. Like most languages usable with Pulumi, Pulumi represents cloud resources as classes and Python programs can instantiate
-those classes. All classes that can be instantiated to produce actual resources derive from the pulumi.Resource class. A class that derives from pulumi.Resource will, when instantiated, communicate with the Pulumi Engine and record that
-a piece of infrastructure that the instantiated class represents should be provisioned. All resources whose provisioning
-is implemented in a resource provider derive from the pulumi.CustomResource class. It is also possible to write your own resources, written in Python, that are themselves composed of custom resources.
-Resources written in Python are called “component resources” and they are written by deriving from the
-pulumi.ComponentResource class. Finally, Pulumi allows for resource providers to directly project themselves into Python, so that provider instances
-can be instantiated and used to create other resources. These “provider resources” derive from the
-pulumi.ProviderResource class. Resource represents a class whose CRUD operations are implemented by a provider plugin. t (str) – The type of this resource. name (str) – The name of this resource. custom (bool) – True if this resource is a custom resource. props (Optional[Inputs]) – An optional list of input properties to use as inputs for the resource.
-If props is an input type (decorated with opts (Optional[ResourceOptions]) – Optional set of remote (bool) – True if this is a remote component resource. dependency (bool) – True if this is a synthetic resource used internally for dependency tracking. The stable, logical URN used to distinctly address a resource, both before and after
-deployments. Provides subclasses of Resource an opportunity to translate names of output properties
-into a format of their choosing before writing those properties to the resource object. If the prop (str) – A property name. A potentially transformed property name. str Provides subclasses of Resource an opportunity to translate names of input properties into
-a format of their choosing before sending those properties to the Pulumi engine. If the prop (str) – A property name. A potentially transformed property name. str Fetches the provider for the given module member, if this resource has been provided a specific
-provider for the given module member. Returns None if no provider was provided. module_member (str) – The requested module member. The Optional[ProviderResource] CustomResource is a resource whose create, read, update, and delete (CRUD) operations are
-managed by performing external operations on some physical entity. The engine understands how
-to diff and perform partial updates of them, and these CRUD operations are implemented in a
-dynamically loaded plugin for the defining package. t (str) – The type of this resource. name (str) – The name of this resource. props (Optional[dict]) – An optional list of input properties to use as inputs for the resource. opts (Optional[ResourceOptions]) – Optional set of dependency (bool) – True if this is a synthetic resource used internally for dependency tracking. id is the provider-assigned unique ID for this managed resource. It is set during
-deployments and may be missing (undefined) during planning phases. ComponentResource is a resource that aggregates one or more other child resources into a higher
-level abstraction. The component itself is a resource, but does not require custom CRUD
-operations for provisioning. t (str) – The type of this resource. name (str) – The name of this resource. props (Optional[dict]) – An optional list of input properties to use as inputs for the resource. opts (Optional[ResourceOptions]) – Optional set of remote (bool) – True if this is a remote component resource. ProviderResource is a resource that implements CRUD operations for other custom resources. These resources are
-managed similarly to other resources, including the usual diffing and update semantics. pkg (str) – The package type of this provider resource. name (str) – The name of this resource. props (Optional[dict]) – An optional list of input properties to use as inputs for the resource. opts (Optional[ResourceOptions]) – Optional set of dependency (bool) – True if this is a synthetic resource used internally for dependency tracking. ResourceOptions is a bag of optional settings that control a resource’s behavior. parent (Optional[Resource]) – If provided, the currently-constructing resource should be the child of
-the provided parent resource. depends_on (Optional[Input[Union[List[Input[Resource]],Resource]]]) – If provided, declares that the
-currently-constructing resource depends on the given resources. protect (Optional[bool]) – If provided and True, this resource is not allowed to be deleted. provider (Optional[ProviderResource]) – An optional provider to use for this resource’s CRUD operations.
-If no provider is supplied, the default provider for the resource’s package will be used. The default
-provider is pulled from the providers field, then the parent’s provider bag. providers (Optional[Union[Mapping[str, ProviderResource], List[ProviderResource]]]) – An optional set of
-providers to use for this resource and child resources. Keyed by package name (e.g. “aws”), or just
-provided as a list. In the latter case, the package name will be retrieved from the provider itself.
-Note: Only a list should be used. Mapping keys are not respected. delete_before_replace (Optional[bool]) – If provided and True, this resource must be deleted before it is replaced. ignore_changes (Optional[List[str]]) – If provided, a list of property names to ignore for purposes of updates
-or replacements. version (Optional[str]) – An optional version. If provided, the engine loads a provider with exactly the
-requested version to operate on this resource. This version overrides the version information inferred
-from the current package and should rarely be used. aliases (Optional[List[Input[Union[str, Alias]]]]) – An optional list of aliases to treat this resource as
-matching. additional_secret*outputs (Optional[List[str]]) – If provided, a list of output property names that should
-also be treated as secret.Pulumi Python SDK
-
-
-The Pulumi Python Resource Model
-
-
-
-
-
-
-
-@input_type
), dict keys will be translated using
-the type’s and resource’s type/name metadata rather than using the translate_input_property
-and translate_output_property
methods.pulumi.ResourceOptions
to use for this
-resource.
-
-
-
-
-
-props
passed to __init__
is an input type (decorated with @input_type
), the
-type/name metadata of the resource will be used to translate names instead of calling this
-method.
-
-
-
-
-props
passed to __init__
is an input type (decorated with @input_type
), the
-type/name metadata of props
will be used to translate names instead of calling this
-method.
-
-
-
-
-
-
-ProviderResource
associated with the given module member, or None if one does not exist.
-
-
-
-
-
-
-pulumi.ResourceOptions
to use for this
-resource.
-
-
-
-
-
-
-
-
-
-
-
-pulumi.ResourceOptions
to use for this
-resource.
-
-
-
-
-
-
-
-
-pulumi.ResourceOptions
to use for this
-resource.
-
-
-
id (Optional[Input[str]]) – If provided, an existing resource ID to read, rather than create.
import its state from the cloud resource with the given ID. The inputs to the resource’s constructor must align -with the resource’s current state. Once a resource has been imported, the import property must be removed from -the resource’s options.
-custom_timeouts (Optional[CustomTimeouts]) – If provided, a config block for custom timeout information.
transformations (Optional[List[ResourceTransformation]]) – If provided, a list of transformations to apply -to this resource during construction.
urn (Optional[str]) – The URN of a previously-registered resource of this type to read from the engine.
replace_on_changes (Optional[List[str]]) – Changes to any of these property paths will force a replacement.
-If this list includes "*"
, changes to any properties will force a replacement. Initialization errors
-from previous deployments will require replacement instead of update only if "*"
is passed.
plugin_download_url (Optional[str]) – An optional url. If provided, the engine loads a provider with downloaded -from the provided url. This url overrides the plugin download url inferred from the current package and should -rarely be used.
retain_on_delete (Optional[bool]) – If set to True, the providers Delete method will not be called for this resource.
deleted_with (Optional[Resource]) – If set, the providers Delete method will not be called for this resource -if specified resource is being deleted as well.
If provided, the currently-constructing resource should be the child of the provided parent -resource.
-If provided and True, this resource is not allowed to be deleted.
-An optional provider to use for this resource’s CRUD operations. If no provider is supplied, the -default provider for the resource’s package will be used. The default provider is pulled from -the parent’s provider bag (see also ResourceOptions.providers).
-An optional set of providers to use for this resource and child resources. Keyed by package name -(e.g. “aws”), or just provided as a list. In the latter case, the package name will be retrieved -from the provider itself. -Note: Only a list should be used. Mapping keys are not respected.
-If provided and True, this resource must be deleted before it is replaced.
-If provided, ignore changes to any of the specified properties.
-An optional version. If provided, the engine loads a provider with exactly the requested version -to operate on this resource. This version overrides the version information inferred from the -current package and should rarely be used.
-An optional url. If provided, the engine loads a provider with downloaded from the provided url. -This url overrides the plugin download url inferred from the current package and should rarely -be used.
-An optional list of aliases to treat this resource as matching.
-The names of outputs for this resource that should be treated as secrets. This augments the list -that the resource provider and pulumi engine already determine based on inputs to your resource. -It can be used to mark certain outputs as a secrets on a per resource basis.
-An optional customTimeouts config block.
-An optional existing ID to load, rather than create.
-When provided with a resource ID, import indicates that this resource’s provider should import -its state from the cloud resource with the given ID. The inputs to the resource’s constructor -must align with the resource’s current state. Once a resource has been imported, the import -property must be removed from the resource’s options.
-Optional list of transformations to apply to this resource during construction. The -transformations are applied in order, and are applied prior to transformation applied to -parents walking from the resource up to the stack.
-The URN of a previously-registered resource of this type to read from the engine.
-Changes to any of these property paths will force a replacement. If this list includes "*"
, changes
-to any properties will force a replacement. Initialization errors from previous deployments will
-require replacement instead of update only if "*"
is passed.
If provided, declares that the currently-constructing resource depends on the given resources.
-If set to True, the providers Delete method will not be called for this resource.
-If set, the providers Delete method will not be called for this resource -if specified resource is being deleted as well.
-merge produces a new ResourceOptions object with the respective attributes of the opts1
-instance in it with the attributes of opts2
merged over them.
Both the opts1
instance and the opts2
instance will be unchanged. Both of opts1
and
-opts2
can be None
, in which case its attributes are ignored.
Conceptually attributes merging follows these basic rules:
-If the attributes is a collection, the final value will be a collection containing the -values from each options object. Both original collections in each options object will -be unchanged.
Simple scalar values from opts2
(i.e. strings, numbers, bools) will replace the values
-from opts1
.
For the purposes of merging depends_on
is always treated
-as collections, even if only a single value was provided.
Attributes with value ‘None’ will not be copied over.
This method can be called either as static-method like ResourceOptions.merge(opts1, opts2)
-or as an instance-method like opts1.merge(opts2)
. The former is useful for cases where
-opts1
may be None
so the caller does not need to check for this case.
InvokeOptions is a bag of options that control the behavior of a call to runtime.invoke.
-parent (Optional[Resource]) – An optional parent to use for default options for this invoke (e.g. the -default provider to use).
provider (Optional[ProviderResource]) – An optional provider to use for this invocation. If no provider is -supplied, the default provider for the invoked function’s package will be used.
version (Optional[str]) – An optional version. If provided, the provider plugin with exactly this version -will be used to service the invocation.
plugin_download_url (Optional[str]) – An optional URL. If provided, the provider plugin with this download -URL will be used to service the invocation. This will override the URL sourced from the host package, and -should be rarely used.
An optional parent to use for default options for this invoke (e.g. the default provider to use).
-An optional provider to use for this invocation. If no provider is supplied, the default provider for the -invoked function’s package will be used.
-An optional version. If provided, the provider plugin with exactly this version will be used to service -the invocation.
-An optional URL. If provided, the provider plugin with exactly this download URL will be used to service -the invocation. This will override the URL sourced from the host package, and should be rarely used.
-merge produces a new InvokeOptions object with the respective attributes of the opts1
-instance in it with the attributes of opts2
merged over them.
Both the opts1
instance and the opts2
instance will be unchanged. Both of opts1
and
-opts2
can be None
, in which case its attributes are ignored.
Conceptually attributes merging follows these basic rules:
-If the attributes is a collection, the final value will be a collection containing the -values from each options object. Both original collections in each options object will -be unchanged.
Simple scalar values from opts2
(i.e. strings, numbers, bools) will replace the values
-from opts1
.
For the purposes of merging depends_on
is always treated
-as collections, even if only a single value was provided.
Attributes with value ‘None’ will not be copied over.
This method can be called either as static-method like InvokeOptions.merge(opts1, opts2)
-or as an instance-method like opts1.merge(opts2)
. The former is useful for cases where
-opts1
may be None
so the caller does not need to check for this case.
Can be used for terminating a program abruptly, but resulting in a clean exit rather than the usual -verbose unhandled error logic which emits the source program text and complete stack trace.
-Pulumi programs can receive configuration that is specified by the command-line using pulumi config. This -configuration information can be retrieved at runtime using the pulumi.Config class:
-import pulumi
-# After running `pulumi config set myconfig 42`
-
-conf = pulumi.Config()
-print(conf.get_int("myconfig")) # prints 42
-
Pulumi programs also have the ability to query the current project and stack, as well as whether or not the current run -of the program is a preview or not.
-Config is a bag of related configuration state. Each bag contains any number of configuration variables, indexed by
-simple keys, and each has a name that uniquely identifies it; two bags with different names do not share values for
-variables that otherwise share the same key. For example, a bag whose name is pulumi:foo
, with keys a
, b
,
-and c
, is entirely separate from a bag whose name is pulumi:bar
with the same simple key names. Each key has a
-fully qualified names, such as pulumi:foo:a
, …, and pulumi:bar:a
, respectively.
name (str) – The configuration bag’s logical name that uniquely identifies it. If not provided, the name -of the current project is used.
-The configuration bag’s logical name that uniquely identifies it. The default is the name of the current project.
-Returns an optional configuration value by its key, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist.
-key (str) – The requested configuration key.
default (Optional[str]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[str]
-Returns an optional configuration value by its key, marked as a secret, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist.
-key (str) – The requested configuration key.
default (Optional[str]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[str]
-Returns an optional configuration value, as a bool, by its key, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist. -If the configuration value isn’t a legal boolean, this function will throw an error.
-key (str) – The requested configuration key.
default (Optional[bool]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[bool]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
-Returns an optional configuration value, as a bool, by its key, marked as a secret, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist. -If the configuration value isn’t a legal boolean, this function will throw an error.
-key (str) – The requested configuration key.
default (Optional[bool]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[bool]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
-Returns an optional configuration value, as an int, by its key, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist. -If the configuration value isn’t a legal int, this function will throw an error.
-key (str) – The requested configuration key.
default (Optional[int]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[int]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
-Returns an optional configuration value, as an int, by its key, marked as a secret, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist. -If the configuration value isn’t a legal int, this function will throw an error.
-key (str) – The requested configuration key.
default (Optional[int]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[int]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
-Returns an optional configuration value, as a float, by its key, marked as a secret, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist. -If the configuration value isn’t a legal float, this function will throw an error.
-key (str) – The requested configuration key.
default (Optional[float]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[float]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
-Returns an optional configuration value, as a float, by its key, marked as a secret, -a default value if that key is unset and a default is provided, -or None if it doesn’t exist. -If the configuration value isn’t a legal float, this function will throw an error.
-key (str) – The requested configuration key.
default (Optional[float]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[float]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
-Returns an optional configuration value, as an object, by its key, -a default value if that key is unset and a default is provided, or undefined if it -doesn’t exist. This routine simply JSON parses and doesn’t validate the shape of the -contents.
-key (str) – The requested configuration key.
default (Optional[Any]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[Any]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
-Returns an optional configuration value, as an object, by its key, marking it as a secret, -a default value if that key is unset and a default is provided, -or undefined if it doesn’t exist. This routine simply JSON parses and doesn’t validate the -shape of the contents.
-key (str) – The requested configuration key.
default (Optional[Any]) – An optional fallback value to use if the given configuration key is not set.
The configuration key’s value, or None if one does not exist.
-Optional[Any]
-ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
-Returns a configuration value by its given key. If it doesn’t exist, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-str
-ConfigMissingError – The configuration value did not exist.
-Returns a configuration value, marked as a secret by its given key. If it doesn’t exist, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-str
-ConfigMissingError – The configuration value did not exist.
-Returns a configuration value, as a bool, by its given key. If it doesn’t exist, or the -configuration value is not a legal bool, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-bool
-ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
Returns a configuration value, as a bool, marked as a secret by its given key. If it doesn’t exist, or the -configuration value is not a legal bool, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-bool
-ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
Returns a configuration value, as an int, by its given key. If it doesn’t exist, or the -configuration value is not a legal int, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-int
-ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
Returns a configuration value, as an int, marked as a secret by its given key. If it doesn’t exist, or the -configuration value is not a legal int, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-int
-ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
Returns a configuration value, as a float, by its given key. If it doesn’t exist, or the -configuration value is not a legal number, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-float
-ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
Returns a configuration value, as a float, marked as a secret by its given key. If it doesn’t exist, or the -configuration value is not a legal number, an error is thrown.
-key (str) – The requested configuration key.
-The configuration key’s value.
-float
-ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
Returns a configuration value as a JSON string and deserializes the JSON into a Python -object. If it doesn’t exist, or the configuration value is not a legal JSON string, an error -is thrown.
-Returns a configuration value as a JSON string and deserializes the JSON into a Python -object, marking it as a secret. If it doesn’t exist, or the configuration value is not a -legal JSON string, an error is thrown.
-Turns a simple configuration key into a fully resolved one, by prepending the bag’s name.
-key (str) – The name of the configuration key.
-The name of the configuration key, prefixed with the bag’s name.
-str
-Indicates a configuration value is missing.
-The name of the missing configuration key.
-If this is a secret configuration key.
-Indicates a configuration value is of the wrong type.
-The name of the key whose value was ill-typed.
-The ill-typed value.
-The expected type of this value.
-Returns the current project name.
-Returns the current stack name.
-Returns whether or not we are currently doing a preview.
-When writing unit tests, you can set this flag via pulumi.runtime.set_mocks
by supplying a value
-for the argument preview
.
Like other languages in the Pulumi ecosystem, all Resources in Python have two kinds of properties: inputs and -outputs. Inputs are specified as arguments to resource constructors, to be used as inputs to the resource itself. -Outputs are returned as properties on the instantiated resource object. Outputs are similar to futures in that they -are resolved asynchronously, but they also contain information about the dependency graph of resources within your -program.
-Pulumi does not offer direct access to the values contained within Outputs. Instead, you must use the apply function -on the Output class in order to observe the value of an output. See -the documentation for more details on this part of the Pulumi programming model.
-Output helps encode the relationship between Resources in a Pulumi application. Specifically an -Output holds onto a piece of Data and the Resource it was generated from. An Output value can -then be provided when constructing new Resources, allowing that new Resource to know both the -value as well as the Resource the value came from. This allows for a precise ‘Resource -dependency graph’ to be created, which properly tracks the relationship between resources.
-Syntax sugar for looking up attributes dynamically off of outputs.
-key (Any) – Key for the attribute dictionary.
-An Output of this Output’s underlying value, keyed with the given key as if it were a dictionary.
-Output[Any]
-Syntax sugar for retrieving attributes off of outputs.
-item (str) – An attribute name.
-An Output of this Output’s underlying value’s property with the given name.
-Output[Any]
-Transforms the data of the output with the provided func. The result remains an -Output so that dependent resources can be properly tracked.
-‘func’ is not allowed to make resources.
-‘func’ can return other Outputs. This can be handy if you have a Output
This function will be called during execution of a pulumi up
request. It may not run
-during pulumi preview
(as the values of resources are of course may not be known then).
func (Callable[[T_co],Input[U]]) – A function that will, given this Output’s value, transform the value to -an Input of some kind, where an Input is either a prompt value, a Future, or another Output of the given -type.
-A transformed Output obtained from running the transformation function on this Output’s value.
-Output[U]
-Takes an Input value and produces an Output value from it, deeply unwrapping nested Input values through nested -lists, dicts, and input classes. Nested objects of other types (including Resources) are not deeply unwrapped.
-val (Input[T_co]) – An Input to be converted to an Output.
-A deeply-unwrapped Output that is guaranteed to not contain any Input values.
-Output[T_co]
-Takes an existing Output, deeply unwraps the nested values and returns a new Output without any secrets included
- -Takes an Input value and produces an Output value from it, deeply unwrapping nested Input values as necessary -given the type. It also marks the returned Output as a secret, so its contents will be persisted in an encrypted -form in state files.
-val (Input[T]) – An Input to be converted to an Secret Output.
-A deeply-unwrapped Output that is guaranteed to not contain any Input values and is marked as a Secret.
-Output[T]
-Produces an Output of a list (if args i.e a list of inputs are supplied) -or dict (if kwargs i.e. keyworded arguments are supplied).
-This function can be used to combine multiple, separate Inputs into a single
-Output which can then be used as the target of apply
. Resource dependencies
-are preserved in the returned Output.
Examples:
-Output.all(foo, bar) -> Output[[foo, bar]]
-Output.all(foo=foo, bar=bar) -> Output[{"foo": foo, "bar": bar}]
-
args (Input[T]) – A list of Inputs to convert.
kwargs (Input[T]) – A list of named Inputs to convert.
An output of list or dict, converted from unnamed or named Inputs respectively.
-Concatenates a collection of Input[str] into a single Output[str].
-This function takes a sequence of Input[str], stringifies each, and concatenates all values -into one final string. This can be used like so:
-url = Output.concat("http://", server.hostname, ":", loadBalancer.port)
-
args (Input[str]) – A list of string Inputs to concatenate.
-A concatenated output string.
-Output[str]
-Perform a string formatting operation.
-This has the same semantics as str.format
except it handles Input types.
format_string (Input[str]) – A formatting string
args (Input[object]) – Positional arguments for the format string
kwargs (Input[object]) – Keyword arguments for the format string
A formatted output string.
-Output[str]
-Uses json.dumps to serialize the given Input[object] value into a JSON string.
-The arguments have the same meaning as in json.dumps
except obj is an Input.
Uses json.loads to deserialize the given JSON Input[str] value into a value.
-The arguments have the same meaning as in json.loads
except s is an Input.
The Pulumi SDK contains a few helper functions for logging to the console. Messages logged using these functions are -sent directly to the Pulumi Engine and rendered with the rest of the CLI output.
-Logs a message to the Pulumi CLI’s debug channel, associating it with a resource -and stream_id if provided.
-msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
stream_id (Optional[int]) – If provided, associate this message with a stream of other messages.
Logs a message to the Pulumi CLI’s info channel, associating it with a resource -and stream_id if provided.
-msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
stream_id (Optional[int]) – If provided, associate this message with a stream of other messages.
Logs a message to the Pulumi CLI’s warning channel, associating it with a resource -and stream_id if provided.
-msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
stream_id (Optional[int]) – If provided, associate this message with a stream of other messages.
Logs a message to the Pulumi CLI’s error channel, associating it -with a resource and stream_id if provided.
-Consider raising an exception after calling error to stop the Pulumi program.
-msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
stream_id (Optional[int]) – If provided, associate this message with a stream of other messages.
Python programs can export values. Exported values are attached to the program’s Stack resource and accessed using the -pulumi stack output CLI command:
-import pulumi
-
-pulumi.export("the-answer", 42)
-
-# pulumi stack export:
-# Current stack outputs (1):
-# OUTPUT VALUE
-# the-answer 42
-
Exports a named stack output.
-name (str) – The name to assign to this output.
value (Any) – The value of this output.
The automation module contains the Pulumi Automation API, the programmatic interface for driving Pulumi programs
-without the CLI.
-Generally this can be thought of as encapsulating the functionality of the CLI (pulumi up
, pulumi preview
,
-pulumi destroy
, pulumi stack init
, etc.) but with more flexibility. This still requires a
-CLI binary to be installed and available on your $PATH.
In addition to fine-grained building blocks, Automation API provides two out of the box ways to work with Stacks:
-Programs locally available on-disk and addressed via a filepath (local source):
-stack = create_stack("myOrg/myProj/myStack", work_dir=os.path.join("..", "path", "to", "project"))
-
Programs defined as a function alongside your Automation API code (inline source):
-def pulumi_program():
- bucket = s3.Bucket("bucket")
- pulumi.export("bucket_name", bucket.Bucket)
-
-stack = create_stack("myOrg/myProj/myStack", program=pulumi_program)
-
Each of these creates a stack with access to the full range of Pulumi lifecycle methods -(up/preview/refresh/destroy), as well as methods for managing config, stack, and project settings:
-stack.set_config("key", ConfigValue(value="value", secret=True))
-preview_response = stack.preview()
-
The Automation API provides a natural way to orchestrate multiple stacks, -feeding the output of one stack as an input to the next as shown in the package-level example below. -The package can be used for a number of use cases:
-Driving pulumi deployments within CI/CD workflows
Integration testing
Multi-stage deployments such as blue-green deployment patterns
Deployments involving application code like database migrations
Building higher level tools, custom CLIs over pulumi, etc.
Using pulumi behind a REST or GRPC API
Debugging Pulumi programs (by using a single main entrypoint with “inline” programs)
To enable a broad range of runtime customization the API defines a Workspace
interface.
-A Workspace is the execution context containing a single Pulumi project, a program, and multiple stacks.
-Workspaces are used to manage the execution environment, providing various utilities such as plugin
-installation, environment configuration ($PULUMI_HOME), and creation, deletion, and listing of Stacks.
-Every Stack including those in the above examples are backed by a Workspace which can be accessed via:
ws = stack.workspace()
-ws.install_plugin("aws", "v3.20.0")
-
Workspaces can be explicitly created and customized beyond the three Stack creation helpers noted above:
-ws = LocalWorkspace(work_dir=os.path.join(".", "project", "path"), pulumi_home="~/.pulumi")
-stack = create_stack("org/proj/stack", ws)
-
A default implementation of workspace is provided as LocalWorkspace
. This implementation relies on Pulumi.yaml
-and Pulumi.[stack].yaml as the intermediate format for Project and Stack settings. Modifying ProjectSettings will
-alter the Workspace Pulumi.yaml file, and setting config on a Stack will modify the Pulumi.[stack].yaml file.
-This is identical to the behavior of Pulumi CLI driven workspaces. Custom Workspace
-implementations can be used to store Project and Stack settings as well as Config in a different format,
-such as an in-memory data structure, a shared persistent SQL database, or cloud object storage. Regardless of
-the backing Workspace implementation, the Pulumi SaaS Console will still be able to display configuration
-applied to updates as it does with the local version of the Workspace today.
The Automation API also provides error handling utilities to detect common cases such as concurrent update -conflicts:
-try:
- up_response = stack.up()
-except ConcurrentUpdateError:
- { /* retry logic here */ }
-
Creates a Stack with a LocalWorkspace utilizing the specified inline (in process) Pulumi program or the local -Pulumi CLI program from the specified working dir.
-Inline Programs
-For inline programs, the program and project_name keyword arguments must be provided. This program is fully -debuggable and runs in process. The work_dir keyword argument is ignored (but see the note on the work_dir -field of opts, below).
-If no project_settings option is specified, default project settings will be created on behalf of the user.
-Similarly, unless a work_dir
option is specified, the working directory will default to a new temporary
-directory provided by the OS.
Example of creating a stack with an inline program:
-create_stack('dev', project_name='my-app', program=myAppFn)
-
Local Programs
-For local programs, the work_dir keyword argument must be provided, and will override the work_dir field in -opts. Keyword arguments other than work_dir and opts are ignored.
-This is a way to create drivers on top of pre-existing Pulumi programs. This Workspace will pick up any -available Settings files (Pulumi.yaml, Pulumi.[stack].yaml).
-Example of creating a stack with a local program:
-create_stack('dev', work_dir='myapp/')
-
stack_name – The name of the stack.
project_name – The name of the project - required for inline programs.
program – The inline program - required for inline programs.
work_dir – The directory for a CLI-driven stack - required for local programs.
opts – Extensibility options to configure a LocalWorkspace; e.g: settings to seed and environment -variables to pass through to every command.
Stack
-Selects a Stack with a LocalWorkspace utilizing the specified inline (in process) Pulumi program or the local -Pulumi CLI program from the specified working dir.
-Inline Programs
-For inline programs, the program and project_name keyword arguments must be provided. This program is fully -debuggable and runs in process. The work_dir keyword argument is ignored (but see the note on the work_dir -field of opts, below).
-If no project_settings option is specified, default project settings will be created on behalf of the user.
-Similarly, unless a work_dir
option is specified, the working directory will default to a new temporary
-directory provided by the OS.
Example of selecting a stack with an inline program:
-select_stack('dev', project_name='my-app', program=myAppFn)
-
Local Programs
-For local programs, the work_dir keyword argument must be provided, and will override the work_dir field in -opts. Keyword arguments other than work_dir and opts are ignored.
-This is a way to create drivers on top of pre-existing Pulumi programs. This Workspace will pick up any -available Settings files (Pulumi.yaml, Pulumi.[stack].yaml).
-Example of selecting a stack with a local program:
-select_stack('dev', work_dir='myapp/')
-
stack_name – The name of the stack.
project_name – The name of the project - required for inline programs.
program – The inline program - required for inline programs.
work_dir – The directory for a CLI-driven stack - required for local programs.
opts – Extensibility options to configure a LocalWorkspace; e.g: settings to seed and environment -variables to pass through to every command.
Stack
-Creates or selects an existing Stack with a LocalWorkspace utilizing the specified inline (in process) Pulumi -program or the local Pulumi CLI program from the specified working dir.
-Inline Programs
-For inline programs, the program and project_name keyword arguments must be provided. This program is fully -debuggable and runs in process. The work_dir keyword argument is ignored (but see the note on the work_dir -field of opts, below).
-If no project_settings option is specified, default project settings will be created on behalf of the user.
-Similarly, unless a work_dir
option is specified, the working directory will default to a new temporary
-directory provided by the OS.
Example of selecting a stack with an inline program:
-create_or_select_stack('dev', project_name='my-app', program=myAppFn)
-
Local Programs
-For local programs, the work_dir keyword argument must be provided, and will override the work_dir field in -opts. Keyword arguments other than work_dir and opts are ignored.
-This is a way to create drivers on top of pre-existing Pulumi programs. This Workspace will pick up any -available Settings files (Pulumi.yaml, Pulumi.[stack].yaml).
-Example of creating or selecting a stack with a local program:
-create_or_select_stack('dev', work_dir='myapp/')
-
stack_name – The name of the stack.
project_name – The name of the project - required for inline programs.
program – The inline program - required for inline programs.
work_dir – The directory for a CLI-driven stack - required for local programs.
opts – Extensibility options to configure a LocalWorkspace; e.g: settings to seed and environment -variables to pass through to every command.
Stack
-LocalWorkspace is a default implementation of the Workspace interface. -A Workspace is the execution context containing a single Pulumi project, a program, -and multiple stacks. Workspaces are used to manage the execution environment, -providing various utilities such as plugin installation, environment configuration -($PULUMI_HOME), and creation, deletion, and listing of Stacks. -LocalWorkspace relies on Pulumi.yaml and Pulumi.[stack].yaml as the intermediate format -for Project and Stack settings. Modifying ProjectSettings will -alter the Workspace Pulumi.yaml file, and setting config on a Stack will modify the Pulumi.[stack].yaml file. -This is identical to the behavior of Pulumi CLI driven workspaces.
-Returns the settings object for the current project if any.
-ProjectSettings
-Overwrites the settings object in the current project. -There can only be a single project per workspace. Fails is new project name does not match old.
-settings – The project settings to save.
-Returns the settings object for the stack matching the specified stack name if any.
-stack_name – The name of the stack.
-StackSettings
-Overwrites the settings object for the stack matching the specified stack name.
-stack_name – The name of the stack.
settings – The stack settings to save.
A hook to provide additional args to CLI commands before they are executed. -Provided with stack name, returns a list of args to append to an invoked command [”–config=…”, ] -LocalWorkspace does not utilize this extensibility point.
-stack_name – The name of the stack.
-A hook executed after every command. Called with the stack name. -An extensibility point to perform workspace cleanup (CLI operations may create/modify a Pulumi.stack.yaml) -LocalWorkspace does not utilize this extensibility point.
-stack_name – The name of the stack.
-Adds environments to the end of a stack’s import list. Imported environments are merged in order -per the ESC merge rules. The list of environments behaves as if it were the import list in an anonymous -environment.
-environment_names – The names of the environment to add.
-Removes the specified environment from the stack configuration.
-stack_name – The name of the stack.
environment_name – The name of the environment to remove.
Returns the value associated with the specified stack name and key, -scoped to the Workspace.
-stack_name – The name of the stack.
key – The key for the config item to get.
path – The key contains a path to a property in a map or list to get.
ConfigValue
-Returns the config map for the specified stack name, scoped to the current Workspace.
-stack_name – The name of the stack.
-ConfigMap
-Sets the specified key-value pair on the provided stack name.
-stack_name – The name of the stack.
key – The config key to add.
value – The config value to add.
path – The key contains a path to a property in a map or list to set.
Sets all values in the provided config map for the specified stack name.
-stack_name – The name of the stack.
config – A mapping of key to ConfigValue to set to config.
path – The keys contain a path to a property in a map or list to set.
Removes the specified key-value pair on the provided stack name.
-stack_name – The name of the stack.
key – The key to remove from config.
path – The key contains a path to a property in a map or list to remove.
Removes all values in the provided key list for the specified stack name.
-stack_name – The name of the stack.
keys – The keys to remove from config.
path – The keys contain a path to a property in a map or list to remove.
Gets and sets the config map used with the last update for Stack matching stack name.
-stack_name – The name of the stack.
-Returns the value associated with the specified stack name and key, -scoped to the Workspace.
-stack_name – The name of the stack.
key – The key to use for the tag lookup.
str
-Sets the specified key-value pair on the provided stack name.
-stack_name – The name of the stack.
key – The tag key to set.
value – The tag value to set.
Removes the specified key-value pair on the provided stack name.
-stack_name – The name of the stack.
key – The tag key to remove.
Returns the tag map for the specified tag name, scoped to the Workspace.
-stack_name – The name of the stack.
-TagMap
-Returns the currently authenticated user.
-WhoAmIResult
-Returns a summary of the currently selected stack, if any.
-Optional[StackSummary]
-Creates and sets a new stack with the stack name, failing if one already exists.
-stack_name (str) – The name of the stack to create
-None
-:raises CommandError Raised if a stack with the same name exists.
-Selects and sets an existing stack matching the stack stack_name, failing if none exists.
-stack_name – The name of the stack to select
-None
-:raises CommandError Raised if no matching stack exists.
-Deletes the stack and all associated configuration and history.
-stack_name – The name of the stack to remove
-Returns all Stacks created under the current Project.
-This queries underlying backend and may return stacks not present in the Workspace
-(as Pulumi.
List[StackSummary]
-Installs a plugin in the Workspace, for example to use cloud providers like AWS or GCP.
-name – The name of the plugin to install.
version – The version to install.
kind – The kind of plugin.
Installs a plugin in the Workspace from a remote server, for example a third party plugin.
-name – The name of the plugin to install.
version – The version to install.
server – The server to install from.
Removes a plugin from the Workspace matching the specified name and version.
-name – The name of the plugin to remove.
version_range – The version range to remove.
kind – The kind of plugin.
Returns a list of all plugins installed in the Workspace.
-List[PluginInfo]
-ExportStack exports the deployment state of the stack matching the given name. -This can be combined with ImportStack to edit a stack’s state (such as recovery from failed deployments).
-stack_name – The name of the stack to export.
-Deployment
-ImportStack imports the specified deployment state into a pre-existing stack. -This can be combined with ExportStack to edit a stack’s state (such as recovery from failed deployments).
-stack_name – The name of the stack to import.
state – The deployment state to import.
Gets the current set of Stack outputs from the last Stack.up().
-stack_name – The name of the stack.
-OutputMap
-Stack is an isolated, independently configurable instance of a Pulumi program. -Stack exposes methods for the full pulumi lifecycle (up/preview/refresh/destroy), as well as managing configuration. -Multiple Stacks are commonly used to denote different phases of development -(such as development, staging and production) or feature branches (such as feature-x-dev, jane-feature-x-dev).
-Creates a new stack using the given workspace, and stack name. -It fails if a stack with that name already exists.
-stack_name – The name identifying the Stack
workspace – The Workspace the Stack was created from.
Stack
-Selects stack using the given workspace, and stack name. -It returns an error if the given Stack does not exist.
-stack_name – The name identifying the Stack
workspace – The Workspace the Stack was created from.
Stack
-Tries to create a new stack using the given workspace and stack name if the stack does not already exist, -or falls back to selecting the existing stack. If the stack does not exist, -it will be created and selected.
-stack_name – The name identifying the Stack
workspace – The Workspace the Stack was created from.
Stack
-Creates or updates the resources in a stack by executing the program in the Workspace. -https://www.pulumi.com/docs/cli/commands/pulumi_up/
-parallel – Parallel is the number of resource operations to run in parallel at once. -(1 for no parallelism). Defaults to unbounded (2147483647).
message – Message (optional) to associate with the update operation.
target – Specify an exclusive list of resource URNs to destroy.
expect_no_changes – Return an error if any changes occur during this update.
policy_packs – Run one or more policy packs as part of this update.
policy_pack_configs – Path to JSON file containing the config for the policy pack of the corresponding “–policy-pack” flag.
diff – Display operation as a rich diff showing the overall change.
target_dependents – Allows updating of dependent targets discovered but not specified in the Target list.
replace – Specify resources to replace.
on_output – A function to process the stdout stream.
on_event – A function to process structured events from the Pulumi event stream.
program – The inline program.
color – Colorize output. Choices are: always, never, raw, auto (default “auto”)
plan – Plan specifies the path to an update plan to use for the update.
show_secrets – Include config secrets in the UpResult summary.
log_flow – Flow log settings to child processes (like plugins)
log_verbosity – Enable verbose logging (e.g., v=3); anything >3 is very verbose
log_to_std_err – Log to stderr instead of to files
tracing – Emit tracing to the specified endpoint. Use the file: scheme to write tracing data to a local file
debug – Print detailed debugging output during resource operations
UpResult
-Performs a dry-run update to a stack, returning pending changes. -https://www.pulumi.com/docs/cli/commands/pulumi_preview/
-parallel – Parallel is the number of resource operations to run in parallel at once. -(1 for no parallelism). Defaults to unbounded (2147483647).
message – Message to associate with the preview operation.
target – Specify an exclusive list of resource URNs to update.
policy_packs – Run one or more policy packs as part of this update.
policy_pack_configs – Path to JSON file containing the config for the policy pack of the corresponding “–policy-pack” flag.
expect_no_changes – Return an error if any changes occur during this update.
diff – Display operation as a rich diff showing the overall change.
target_dependents – Allows updating of dependent targets discovered but not specified in the Target list.
replace – Specify resources to replace.
on_output – A function to process the stdout stream.
on_event – A function to process structured events from the Pulumi event stream.
program – The inline program.
color – Colorize output. Choices are: always, never, raw, auto (default “auto”)
plan – Plan specifies the path where the update plan should be saved.
log_flow – Flow log settings to child processes (like plugins)
log_verbosity – Enable verbose logging (e.g., v=3); anything >3 is very verbose
log_to_std_err – Log to stderr instead of to files
tracing – Emit tracing to the specified endpoint. Use the file: scheme to write tracing data to a local file
debug – Print detailed debugging output during resource operations
PreviewResult
-Compares the current stack’s resource state with the state known to exist in the actual -cloud provider. Any such changes are adopted into the current stack.
-parallel – Parallel is the number of resource operations to run in parallel at once. -(1 for no parallelism). Defaults to unbounded (2147483647).
message – Message (optional) to associate with the refresh operation.
target – Specify an exclusive list of resource URNs to refresh.
expect_no_changes – Return an error if any changes occur during this update.
on_output – A function to process the stdout stream.
on_event – A function to process structured events from the Pulumi event stream.
color – Colorize output. Choices are: always, never, raw, auto (default “auto”)
show_secrets – Include config secrets in the RefreshResult summary.
log_flow – Flow log settings to child processes (like plugins)
log_verbosity – Enable verbose logging (e.g., v=3); anything >3 is very verbose
log_to_std_err – Log to stderr instead of to files
tracing – Emit tracing to the specified endpoint. Use the file: scheme to write tracing data to a local file
debug – Print detailed debugging output during resource operations
RefreshResult
-Destroy deletes all resources in a stack, leaving all history and configuration intact.
-parallel – Parallel is the number of resource operations to run in parallel at once. -(1 for no parallelism). Defaults to unbounded (2147483647).
message – Message (optional) to associate with the destroy operation.
target – Specify an exclusive list of resource URNs to destroy.
target_dependents – Allows updating of dependent targets discovered but not specified in the Target list.
on_output – A function to process the stdout stream.
on_event – A function to process structured events from the Pulumi event stream.
color – Colorize output. Choices are: always, never, raw, auto (default “auto”)
show_secrets – Include config secrets in the DestroyResult summary.
log_flow – Flow log settings to child processes (like plugins)
log_verbosity – Enable verbose logging (e.g., v=3); anything >3 is very verbose
log_to_std_err – Log to stderr instead of to files
tracing – Emit tracing to the specified endpoint. Use the file: scheme to write tracing data to a local file
debug – Print detailed debugging output during resource operations
DestroyResult
-Adds environments to the end of a stack’s import list. Imported environments are merged in order -per the ESC merge rules. The list of environments behaves as if it were the import list in an anonymous -environment.
-environment_names – The names of the environments to add.
-Removes an environment from a stack’s import list.
-Returns the config value associated with the specified key.
-key – The key for the config item to get.
path – The key contains a path to a property in a map or list to get.
ConfigValue
-Returns the full config map associated with the stack in the Workspace.
-ConfigMap
-Sets a config key-value pair on the Stack in the associated Workspace.
-key – The config key to add.
value – The config value to add.
path – The key contains a path to a property in a map or list to set.
Sets all specified config values on the stack in the associated Workspace.
-config – A mapping of key to ConfigValue to set to config.
path – The keys contain a path to a property in a map or list to set.
Removes the specified config key from the Stack in the associated Workspace.
-key – The key to remove from config.
path – The key contains a path to a property in a map or list to remove.
Removes the specified config keys from the Stack in the associated Workspace.
-keys – The keys to remove from config.
path – The keys contain a path to a property in a map or list to remove.
Gets and sets the config map used with the last update.
-Returns the tag value associated with specified key.
-key – The key to use for the tag lookup.
-str
-Sets a tag key-value pair on the Stack in the associated Workspace.
-key – The tag key to set.
value – The tag value to set.
Removes the specified key-value pair on the provided stack name.
-stack_name – The name of the stack.
key – The tag key to remove.
Returns the tag map for the specified tag name, scoped to the Workspace.
-stack_name – The name of the stack.
-TagMap
-Gets the current set of Stack outputs from the last Stack.up().
-OutputMap
-Returns a list summarizing all previous and current results from Stack lifecycle operations -(up/preview/refresh/destroy).
-page_size – Paginate history entries (used in combination with page), defaults to all.
page – Paginate history entries (used in combination with page_size), defaults to all.
show_secrets – Show config secrets when they appear in history.
List[UpdateSummary]
-Returns the current results from Stack lifecycle operations.
-Optional[UpdateSummary]
-Cancel stops a stack’s currently running update. It returns an error if no update is currently running. -Note that this operation is very dangerous, and may leave the stack in an inconsistent state -if a resource operation was pending when the update was canceled. -This command is not supported for local backends.
-export_stack exports the deployment state of the stack. -This can be combined with Stack.import_state to edit a stack’s state (such as recovery from failed deployments).
-Deployment
-import_stack imports the specified deployment state into a pre-existing stack. -This can be combined with Stack.export_state to edit a stack’s state (such as recovery from failed deployments).
-state – The deployment state to import.
-A Pulumi project manifest. It describes metadata applying to all sub-stacks created from the project.
-A description of the Stack’s configuration and encryption metadata.
-ConfigValue is the input/output of a pulumi config
command.
-It has a plaintext value, and an option boolean indicating secretness.
The Pulumi Policy SDK for Python.
-Indicates the impact of a policy violation.
-A policy function that returns true if a resource definition violates some policy (e.g., “no -public S3 buckets”), and a set of metadata useful for generating helpful messages when the policy -is violated.
-name (str) – An ID for the policy. Must be unique within the current policy set.
description (str) – A brief description of the policy rule. e.g., “S3 buckets should have -default encryptionenabled.”
enforcement_level (Optional[EnforcementLevel]) – Indicates what to do on policy violation, -e.g., block deployment but allow override with proper permissions.
config_schema (Optional[PolicyConfigSchema]) – This policy’s configuration schema.
An ID for the policy. Must be unique within the current policy set.
-A brief description of the policy rule. e.g., “S3 buckets should have default encryption -enabled.”
-Indicates what to do on policy violation, e.g., block deployment but allow override with -proper permissions.
-This policy’s configuration schema.
-Represents the configuration schema for a policy.
-properties (Dict[str, Dict[str, Any]]) – The policy’s configuration properties.
required (Optional[List[str]]) – The configuration properties that are required.
The policy’s configuration properties.
-The configuration properties that are required.
-Custom timeout options.
-The create resource timeout.
-The update resource timeout.
-The delete resource timeout.
-A policy pack contains one or more policies to enforce.
-name (str) – The name of the policy pack.
policies (List[Policy]) – The policies associated with a policy pack.
enforcement_level (Optional[EnforcementLevel]) – Indicates what to do on policy -violation, e.g., block deployment but allow override with -proper permissions. This is the default used for all policies in the policy pack. -Individual policies can override.
initial_config (Optional[Dict[str, Union['EnforcementLevel', Dict[str, Any]]]]) – Initial -configuration for the policy pack. Allows specifying configuration programmatically from reusable -policy libraries.
Information about the provider.
-The type of the provider resource.
-The properties of the provider resource.
-The URN of the provider resource.
-The name of the provider resource.
-PolicyResource represents a resource in the stack.
-The type of the resource.
-The outputs of the resource.
-The URN of the resource.
-The name of the resource.
-The options of the resource.
-The provider of the resource.
-An optional parent that this resource belongs to.
-The dependencies of the resource.
-The set of dependencies that affect each property.
-PolicyResourceOptions is the bag of settings that control a resource’s behavior.
-When set to true, protect ensures this resource cannot be deleted.
-Ignore changes to any of the specified properties.
-When set to true, indicates that this resource should be deleted before -its replacement is created when replacement is necessary.
-Additional URNs that should be aliased to this resource.
-Custom timeouts for resource create, update, and delete operations.
-Outputs that should always be treated as secrets.
-ResourceValidationArgs is the argument bag passed to a resource validation.
-Returns configuration for the policy.
-The type of the resource.
-The inputs of the resource.
-The URN of the resource.
-The name of the resource.
-The options of the resource.
-The provider of the resource.
-ResourceValidationPolicy is a policy that validates a resource definition.
-name (str) – An ID for the policy. Must be unique within the current policy set.
description (str) – A brief description of the policy rule. e.g., “S3 buckets should have -default encryptionenabled.”
validate (Optional[Union[ResourceValidation, List[ResourceValidation]]]) – A callback function -that validates if a resource definition violates a policy (e.g. “S3 buckets can’t be public”). -A single callback function can be specified, or multiple functions, which are called in order.
enforcement_level (Optional[EnforcementLevel]) – Indicates what to do on policy violation, -e.g., block deployment but allow override with proper permissions.
config_schema (Optional[PolicyConfigSchema]) – This policy’s configuration schema.
StackValidationArgs is the argument bag passed to a stack validation.
-Returns configuration for the policy.
-The resources in the stack.
-StackValidationPolicy is a policy that validates a stack.
-name (str) – An ID for the policy. Must be unique within the current policy set.
description (str) – A brief description of the policy rule. e.g., “S3 buckets should have -default encryptionenabled.”
validate (Optional[StackValidation]) – A callback function that validates if a stack violates a policy.
enforcement_level (Optional[EnforcementLevel]) – Indicates what to do on policy violation, -e.g., block deployment but allow override with proper permissions.
config_schema (Optional[PolicyConfigSchema]) – This policy’s configuration schema.
--This provider is a derived work of the Terraform Provider distributed under -MPL 2.0. If you encounter a bug or missing feature, first check the -pulumi/pulumi-terraform repo; however, if that doesn’t turn up -anything, please consult the source terraform-providers/terraform-provider-terraform repo.
-
--This provider is a derived work of the Terraform Provider distributed under -MPL 2.0. If you encounter a bug or missing feature, first check the -pulumi/pulumi-terraform repo; however, if that doesn’t turn up -anything, please consult the source terraform-providers/terraform-provider-terraform repo.
-
Special type indicating an unconstrained type.
-Any is compatible with every type.
Any assumed to have all methods.
All values assumed to be instances of Any.
Note that all the above statements are true from the point of view of -static type checkers. At runtime, Any should not be used with instance -checks.
-The configuration options for a Terraform Remote State stored in the Artifactory backend.
-Constructs an ArtifactoryBackendArgs.
-repo – The username with which to authenticate to Artifactory. Sourced from ARTIFACTORY_USERNAME
in the
-environment, if unset
subpath – Path within the repository.
url – The Artifactory URL. Note that this is the base URL to artifactory, not the full repo and subpath.
However, it must include the path to the artifactory installation - likely this will end in /artifactory
.
-Sourced from ARTIFACTORY_URL
in the environment, if unset.
-:param username: The username with which to authenticate to Artifactory. Sourced from ARTIFACTORY_USERNAME
-in the environment, if unset.
-:param password: The password with which to authenticate to Artifactory. Sourced from ARTIFACTORY_PASSWORD
-in the environment, if unset.
-:param workspace: The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the AzureRM backend.
---Constructs an AzureRMBackendArgs
--
-- param storage_account_name:
-- -
The name of the storage account.
-- param container_name:
-- -
The name of the storage container within the storage account.
-- param key:
-- -
The name of the blob in representing the Terraform State file inside the storage container.
-- param environment:
-- -
The Azure environment which should be used. Possible values are
-public
(default),china
,
german
, stack
and usgovernment
. Sourced from ARM_ENVIRONMENT
, if unset.The custom endpoint for Azure Resource Manager. Sourced from ARM_ENDPOINT
, if unset.
Whether to authenticate using Managed Service Identity (MSI). Sourced from ARM_USE_MSI
if
unset. Defaults to false if no value is specified.
-:param subscription_id: The Subscription ID in which the Storage Account exists. Used when authenticating using
-the Managed Service Identity (MSI) or a service principal. Sourced from ARM_SUBSCRIPTION_ID
, if unset.
-:param tenant_id: The Tenant ID in which the Subscription exists. Used when authenticating using the
-Managed Service Identity (MSI) or a service principal. Sourced from ARM_TENANT_ID
, if unset.
-:param msi_endpoint: The path to a custom Managed Service Identity endpoint. Used when authenticating using the
-Managed Service Identity (MSI). Sourced from ARM_MSI_ENDPOINT
in the environment, if unset. Automatically
-determined, if no value is provided.
-:param sas_token: The SAS Token used to access the Blob Storage Account. Used when authenticating using a SAS
-Token. Sourced from ARM_SAS_TOKEN
in the environment, if unset.
-:param access_key: The Access Key used to access the blob storage account. Used when authenticating using an
-access key. Sourced from ARM_ACCESS_KEY
in the environment, if unset.
-:param resource_group_name: The name of the resource group in which the storage account exists. Used when
-authenticating using a service principal.
-:param client_id: The client ID of the service principal. Used when authenticating using a service principal.
-Sourced from ARM_CLIENT_ID
in the environment, if unset.
-:param client_secret: The client secret of the service principal. Used when authenticating using a service
-principal. Sourced from ARM_CLIENT_SECRET
in the environment, if unset.
-:param workspace: The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the Consul backend.
-Constructs a ConsulBackendArgs.
-path – Path in the Consul KV store.
access_token – Consul Access Token. Sourced from CONSUL_HTTP_TOKEN
in the environment, if unset.
address – DNS name and port of the Consul HTTP endpoint specified in the format dnsname:port
. Defaults
to the local agent HTTP listener.
-:param scheme: Specifies which protocol to use when talking to the given address - either http
or https
. TLS
-support can also be enabled by setting the environment variable CONSUL_HTTP_SSL
to true
.
-:param datacenter: The datacenter to use. Defaults to that of the agent.
-:param http_auth: HTTP Basic Authentication credentials to be used when communicating with Consul, in the format
-of either user
or user:pass
. Sourced from CONSUL_HTTP_AUTH
, if unset.
-:param gzip: Whether to compress the state data using gzip. Set to true
to compress the state data using gzip,
-or false
(default) to leave it uncompressed.
-:param ca_file: A path to a PEM-encoded certificate authority used to verify the remote agent’s certificate.
-Sourced from CONSUL_CAFILE
in the environment, if unset.
-:param cert_file: A path to a PEM-encoded certificate provided to the remote agent; requires use of key_file.
-Sourced from CONSUL_CLIENT_CERT
in the environment, if unset.
-:param key_file: A path to a PEM-encoded private key, required if cert_file is specified. Sourced from
-CONSUL_CLIENT_KEY
in the environment, if unset.
-:param workspace: The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the etcd v2 backend. Note that there is a separate -configuration class for state stored in the ectd v3 backend.
-Constructs an EtcdV2BackendArgs.
-path – The path at which to store the state.
endpoints – A space-separated list of the etcd endpoints.
username – The username with which to authenticate to etcd.
password – The username with which to authenticate to etcd.
workspace – The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the etcd v3 backend. Note that there is a separate -configuration class for state stored in the ectd v2 backend.
-Constructs an EtcdV3BackendArgs.
-endpoints – A list of the etcd endpoints.
username – The username with which to authenticate to etcd. Sourced from ETCDV3_USERNAME
in the
environment, if unset.
-:param password: The username with which to authenticate to etcd. Sourced from ETCDV3_PASSWORD
in the
-environment, if unset.
-:param prefix: An optional prefix to be added to keys when storing state in etcd.
-:param cacert_path: Path to a PEM-encoded certificate authority bundle with which to verify certificates of
-TLS-enabled etcd servers.
-:param cert_path: Path to a PEM-encoded certificate to provide to etcd for client authentication.
-:param key_path: Path to a PEM-encoded key to use for client authentication.
-:param workspace: The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the Google Cloud Storage backend.
-Constructs a GcsBackendArgs.
-bucket – The name of the Google Cloud Storage bucket.
credentials – Local path to Google Cloud Platform account credentials in JSON format. Sourced from
GOOGLE_CREDENTIALS
in the environment if unset. If no value is provided Google Application Default Credentials
-are used.
-:param prefix: Prefix used inside the Google Cloud Storage bucket. Named states for workspaces are stored in an
-object named <prefix>/<name>.tfstate
.
-:param encryption_key: A 32 byte, base64-encoded customer supplied encryption key used to encrypt the state.
-Sourced from GOOGLE_ENCRYPTION_KEY
in the environment, if unset.
-:param workspace: The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the HTTP backend.
-Constructs an HttpBackendArgs.
-address – The address of the HTTP endpoint.
update_method – HTTP method to use when updating state. Defaults to POST
.
lock_address – The address of the lock REST endpoint. Not setting a value disables locking.
lock_method – The HTTP method to use when locking. Defaults to LOCK
.
unlock_address – The address of the unlock REST endpoint. Not setting a value disables locking.
unlock_method – The HTTP method to use when unlocking. Defaults to UNLOCK
.
username – The username used for HTTP basic authentication.
password – The password used for HTTP basic authentication.
skip_cert_validation – Whether to skip TLS verification. Defaults to false.
workspace – The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the local enhanced backend.
-Constructs a LocalBackendArgs.
-path – The path to the Terraform state file.
-The configuration options for a Terraform Remote State stored in the Manta backend.
-Constructs a MantaBackendArgs.
-account – The name of the Manta account. Sourced from SDC_ACCOUNT
or _ACCOUNT
in the environment, if
unset.
-:param user: The username of the Manta account with which to authenticate.
-:param url: The Manta API Endpoint. Sourced from MANTA_URL
in the environment, if unset. Defaults to
-https://us-east.manta.joyent.com
.
-:param key_material: The private key material corresponding with the SSH key whose fingerprint is specified in
-keyId. Sourced from SDC_KEY_MATERIAL
or TRITON_KEY_MATERIAL
in the environment, if unset. If no value is
-specified, the local SSH agent is used for signing requests.
-:param key_id: The fingerprint of the public key matching the key material specified in keyMaterial, or in the
-local SSH agent.
-:param path: The path relative to your private storage directory (/$MANTA_USER/stor
) where the state file
-will be stored.
-:param insecure_skip_tls_verify: Skip verifying the TLS certificate presented by the Manta endpoint. This can be
--useful for installations which do not have a certificate signed by a trusted root CA. Defaults to false.
-
workspace – The Terraform workspace from which to read state.
-The configuration options for a Terraform Remote State stored in the OSS backend.
-Constructs an OssBackendArgs.
-bucket – The name of the OSS bucket.
access_key – Alibaba Cloud access key. It supports environment variables ALICLOUD_ACCESS_KEY
and
ALICLOUD_ACCESS_KEY_ID
-:param secret_key: Alibaba Cloud secret access key. It supports environment variables ALICLOUD_SECRET_KEY
-and ALICLOUD_ACCESS_KEY_SECRET
.
-:param security_token: STS access token. It supports environment variable ALICLOUD_SECURITY_TOKEN
.
-:param ecs_role_name: The RAM Role Name attached on a ECS instance for API operations. You can retrieve this
-from the ‘Access Control’ section of the Alibaba Cloud console.
-:param region: The region of the OSS bucket. It supports environment variables ALICLOUD_REGION
and
-ALICLOUD_DEFAULT_REGION
.
-:param endpoint: A custom endpoint for the OSS API. It supports environment variables ALICLOUD_OSS_ENDPOINT
-and OSS_ENDPOINT
.
-:param prefix: The path directory of the state file will be stored. Default to env:
.
-:param key: The name of the state file. Defaults to terraform.tfstate
.
-:param profile: This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be
-sourced from the ALICLOUD_PROFILE
environment variable.
-:param shared_credentials_file: This is the path to the shared credentials file. It can also be sourced from the
-ALICLOUD_SHARED_CREDENTIALS_FILE
environment variable. If this is not set and a profile is specified,
-~/.aliyun/config.json
will be used.
-:param role_arn: The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching.
-It supports environment variable ALICLOUD_ASSUME_ROLE_ARN
.
-:param policy: A more restrictive policy to apply to the temporary credentials. This gives you a way to further
-restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant
-permissions which exceed those of the role that is being assumed.
-:param session_name: The session name to use when assuming the role. It supports environment variable
-ALICLOUD_ASSUME_ROLE_SESSION_NAME
.
-:param session_expiration: The time after which the established session for assuming role expires. Valid value
-range: [900-3600] seconds. Default to 3600
. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION
.
The configuration options for a Terraform Remote State stored in the Postgres backend.
-Constructs a PostgresBackendArgs.
-conn_str – Postgres connection string; a postgres://
URL.
schema_name – Name of the automatically-managed Postgres schema. Defaults to terraform_remote_state
.
workspace – The Terraform workspace from which to read state.
Configuration options for a workspace for use with the remote enhanced backend.
-Constructs a RemoteBackendArgs.
-organization – The name of the organization containing the targeted workspace(s).
token – The token used to authenticate with the remote backend.
hostname – The remote backend hostname to which to connect. Defaults to app.terraform.io
.
workspace_name – The full name of one remote workspace. When configured, only the default workspace can
be used. This option conflicts with workspace_prefix. -:param workspace_prefix: A prefix used in the names of one or more remote workspaces, all of which can be used -with this configuration. If unset, only the default workspace can be used. This option conflicts with -workspace_name.
-Manages a reference to a Terraform Remote State. The root outputs of the remote state are available via the
-outputs
property or the getOutput
method.
Create a RemoteStateReference resource with the given unique name, props, and options.
-resource_name (str) – The name of the resource.
opts (pulumi.ResourceOptions) – Options for the resource.
backend_type (str) – The name of the Remote State Backend
args (BackendArgs) – The arguments for the Remote State backend, which must match the given backend_type.
The root outputs of the referenced Terraform state.
-Fetches the value of a root output from the Terraform Remote State.
-name – The name of the output to fetch. The name is formatted exactly as per the “output” block in the
-Terraform configuration. -:return: A pulumi.Output representing the value.
-Provides subclasses of Resource an opportunity to translate names of output properties -into a format of their choosing before writing those properties to the resource object.
-If the props
passed to __init__
is an input type (decorated with @input_type
), the
-type/name metadata of the resource will be used to translate names instead of calling this
-method.
prop (str) – A property name.
-A potentially transformed property name.
-str
-Provides subclasses of Resource an opportunity to translate names of input properties into -a format of their choosing before sending those properties to the Pulumi engine.
-If the props
passed to __init__
is an input type (decorated with @input_type
), the
-type/name metadata of props
will be used to translate names instead of calling this
-method.
prop (str) – A property name.
-A potentially transformed property name.
-str
-The configuration options for a Terraform Remote State stored in the S3 backend.
-Constructs an S3BackendArgs.
-bucket – The name of the S3 bucket.
key – The path to the state file inside the bucket. When using a non-default workspace, the state path
will be /workspace_key_prefix/workspace_name/key
.
-:param region: The region of the S3 bucket. Also sourced from AWS_DEFAULT_REGION
in the environment, if unset.
-:param endpoint: A custom endpoint for the S3 API. Also sourced from AWS_S3_ENDPOINT
in the environment, if
-unset.
-:param access_key: AWS Access Key. Sourced from the standard credentials pipeline, if unset.
-:param secret_key: AWS Secret Access Key. Sourced from the standard credentials pipeline, if unset.
-:param profile: The AWS profile name as set in the shared credentials file.
-:param shared_credentials_file: The path to the shared credentials file. If this is not set and a profile is
-specified, ~/.aws/credentials
will be used by default.
-:param token: An MFA token. Sourced from AWS_SESSION_TOKEN
in the environment if needed and unset.
-:param role_arn: The ARN of an IAM Role to be assumed in order to read the state from S3.
-:param external_id: The external ID to use when assuming the IAM role.
-:param session_name: The session name to use when assuming the IAM role.
-:param workspace_key_prefix: The prefix applied to the state path inside the bucket. This is only relevant when
-using a non-default workspace, and defaults to env:
.
-:param iam_endpoint: A custom endpoint for the IAM API. Sourced from AWS_IAM_ENDPOINT
, if unset.
-:param sts_endpoint: A custom endpoint for the STS API. Sourced from AWS_STS_ENDPOINT
, if unset.
-:param skip_credentials_validation: Skip the credentials validation via STS API.
-:param skip_region_validation: Skip static validation of region name.
-:param skip_metadata_api_check: Skip the AWS Metadata API check.
-:param force_path_style: Force s3 to use path style api.
-:param workspace: The Terraform workspace from which to read state.
The configuration options for a Terraform Remote State stored in the Swift backend.
-Constructs a SwiftBackendArgs.
-auth_url – The Identity authentication URL. Sourced from OS_AUTH_URL
in the environment, if unset.
container – The name of the container in which the Terraform state file is stored.
username – The username with which to log in. Sourced from OS_USERNAME
in the environment, if unset.
user_id – The user ID with which to log in. Sourced from OS_USER_ID
in the environment, if unset.
password – The password with which to log in. Sourced from OS_PASSWORD
in the environment, if unset.
token – Access token with which to log in in stead of a username and password. Sourced from
OS_AUTH_TOKEN
in the environment, if unset.
-:param region_name: The region in which the state file is stored. Sourced from OS_REGION_NAME
, if unset.
-:param tenant_id: The ID of the tenant (for identity v2) or project (identity v3) which which to log in. Sourced
-from OS_TENANT_ID
or OS_PROJECT_ID
in the environment, if unset.
-:param tenant_name: The name of the tenant (for identity v2) or project (identity v3) which which to log in.
-Sourced from OS_TENANT_NAME
or OS_PROJECT_NAME
in the environment, if unset.
-:param domain_id: The ID of the domain to scope the log in to (identity v3). Sourced from OS_USER_DOMAIN_ID
,
-OS_PROJECT_DOMAIN_ID
or OS_DOMAIN_ID
in the environment, if unset.
-:param domain_name: The name of the domain to scope the log in to (identity v3). Sourced from
-OS_USER_DOMAIN_NAME
, OS_PROJECT_DOMAIN_NAME
or OS_DOMAIN_NAME
in the environment, if unset.
-:param insecure: Whether to disable verification of the server TLS certificate. Sourced from OS_INSECURE
in
-the environment, if unset.
-:param cacert_file: A path to a CA root certificate for verifying the server TLS certificate. Sourced from
-OS_CACERT
in the environment, if unset.
-:param cert: A path to a client certificate for TLS client authentication. Sourced from OS_CERT
in the
-environment, if unset.
-:param key: A path to the private key corresponding to the client certificate for TLS client authentication.
-Sourced from OS_KEY
in the environment, if unset.
!-d&vl};H(O^=}rny>5C*z3jE z@MRj^%4~(K;6$%+paBPEAvk%bDC}_gALPZA;;mk#w16u@3MAY`@{AU?1uxCvDOX=o z(6wF9tSUwnpa(d#2>rd$a?y z2MoU=I6pK-9#RhJ)MVc*;HnqY_57hqiR9=g`IcObP?V5nQnZx@OfiNHkOEwvm%h=1 z^6~~TCY;A&yCM`L;ZVFF?~t?7uFSxB0rk|KjpCg{?FyNHG7vD3lkop4_u}C~O-@+8 zuzZoytHL!9Os72~t++j(D#&?KN6ME3=k<@3Zl~iw8}`UA6INAe(+%QDth?RKcZYah zdUDFIlYp!eLqPX7p$o+HYs8h=!a?E2$cyDG%U6lJ2IKr6r`iOcdOSYKec*(lU7B(Z_MeT*1W>VBeT zr6?4ZcvS-8`(a=;x?aAie6t)|I*vg;5br50wrZ8GVvvXA^YR9{WqIX}$`O^vC-_a? zAiqyd*FR2x=wJ67`ejpHs5?2dTnB*y?r(J5Lc3TdKP~_eiI#p>kwyYUlZ9@`;RHaw z7pZ{VBH tsSTz#bRj0cktco01cR&kn#f38cH*>~&i`a)Gpmwp@5 C%7ba3&8S;CYMTPh1>y6h?CSZz@y~&(;IH1sdq-zrP!FuMahYUNro#)8@0AJ ztzzVh^Q1CxQE?W$k8ZgNZ6>yY{im0^-BxGk^mMV*n5uS4Zmn{#J=Ji#(~VYrT0ML9 zMbmEQl4;n?9rb!`N0DH|!wPA_gP;)uc1+-Vot{dmL^8iiUzo%G_J!LPTnWDSa;egR z(VZ7Idg%-I(nI_7L*77O2y!|ULG-&9(&jGa`bFXEdc&Z&1AO6 HdrrTzhW7pUKv?F;DD_viO7LlMg_sjdUoUTK4KG}z@_GG98IhTy2mSDa7l&8@ zAF2nF)5T6l3^OT*QMz1Q+8{3>5CpCix)K-=cTSXdNCU}Vb?lL#@eu=R0LekP=$U(< zYvC2k>nF%Jy3JP2J?Pe;R)lv*8@1i?iOuqfh@K7(8!*>P8%+h)G4e%mk2F6VU-ALO zd+X#q#8gClf)tXtew@4>uo<3LBJOXL_r;!G1vN+rR?ak=2XGPY0zx{qX1m=y)B&@L zcUG%+gtJwBm;_y1SMW)T9uPHgQ(@aQ_u`HM9TXOE5D)YXq=VqmLAQ8Y3^~z>{vGXW z1^FZLkl21hwIM`QX@efZWU9HnImmM*84%Y`@MmbdcOyp8&6nK*h3q`=HU=M&dtGc@ z#M^;e-AdhsIncBZ+&R>2AE5DWS{`|+&?v%fA*U+v3lp?)V7lFMZKzn#WJ_pKC*c zppoma+8ToEuWtXLaQx+ -< zN@K4Tk2Ksvgc#gj)@vZFAhr21;vPk8Jh#Hz#S&y2+VU}1}uf}A%gW<+3fI#*x(O=2SorXZjiQHr@)|j|9Jmh8EDg*^dWDE6Z}W& zl?MEic0FH%^8w}WBPD>d4lKFk*zy){kN}J_R*cAocXPczgW7klRvPu$pq9VT6aD8X zeokBg$)XSkgw2N~fO+pR8TH%ek9C|smRLCU4$^yGKi%uJr)MgS>2jsltW_`{R|Ai+io1-sF1vx)eEkLnFzD9NCHM2Z5i;-cWqjbswcNBXOz z9fB!P`crIq#6vN=KK~{eKfPhn?)TkrH%LJI`PC*;-4M}h5l~idtWh_Fn*u3lV4HnV zZ@q%|!dr>*)5@0#5iVa|-l>!ix!+huUZ!_EsmHMO$~`WkQc_3h$8;<{;5ms0PV^qo zxj0{gz(o+x__-q5idE_@L_K`XERswF38@jJNpY*c%7;e|ai*TedkAXG3;*QhE&)MK ziok{@71{}^3TPJokpO8+bUc-BLNbz~GHR6L^m8g+j^HM|&9+|IR(-qDK%@}<4Avnt zlAakmK|exqcei~InH-tc@FHaJQNsC5+Ic~Rbuo|J3RdCfA#_ffx6`gbA=BkvZ>GOi z?%hPr4l41cCH-TJE7G!oS^F#C@e^`)mrv-gQ~6oXFPXSiWlMF2w!E^uiqbm$l~|I@ zqr3*L_wjh+AoKtd(NYrft!AxKg!S7RxdXv#7YM6?)Moghg+BR4=7`>VBAM+jytX$} zKKUh>TxBqkxTXX`XR5ex)6)JHwG{7S8F^q}x=Xk?K76yHqHwsUbIaa~$hqINvcEa> ziqKdz)(N2-)xyDo xao4F zEtPenKqiPS18xfs^*0&U5y3&?135gkK vuhN`Ax6+{B>`uzQz0NKOg#F^%4EoYnOcf`s$ 8) zuQhAF((5CkO3?&F{wViZKC8c4sUidzs5C*QdcYshz( %3%6r_nvtacV5A0R zN~~_W1JB=`MsZ6QP9gH-&<^v!G!j)iZtU&4;ezWfyLY-)nZZ>mJ-KM=f(xcQh^p;? zbvr;&VqL;Q3<=2rHmCD&jiFHUV3&n{W!w|Xps1MZ=f^!)aFI}cA|b8iQb2HE+z`~U z(IasZv(1isHiWenhlrKN!R7&1%+(q9qS`&U!gY7rAl%s5RGRk1!KQF@NLw%T$Ig&2 z9HN9u%+?z>?ScXrz-V_d=S6^^ct9-o=N5BXp|0~3-4mrM0)Uq+CIDjHi1tV~gyw&( zFkxg~T4M%8`Kr^>Wfg00FVd7jYxY`UmubNdjeGWxD?P2^5)_>Zlr0HN)TXhun=Uu& z?o8V~G<^*PDcj0mUo9*){WEoO{(|Z2+Ni4%JT!f)Fz8dW`pWcku{D7C?o5kULN*^; zF*u)Mx)(3@(hUm0!BWL%rG@Gj;N4XJ7ycn zjFk2QM^{AH6QNBi_XL=jdb!;9;nzykfB1h;U{IuYaA$=qky{WxYJUPdOi@_3Zy~q4 zzahM}TX+CPsfk-ix|z0%d;m4BYZTdZo+ww{d^D(c9R0He|DX;Sr6#h7<;I`ke^^jK zmWb@`FPp11XRvKqQLdEW1>@IRHJo>0r3^O1i@)ip{-oFwbefGCk_9M$D;)Bd*8_$N zh?JtvvU(II#s*DTu!a70S!$@K#dcGa2lr{? neDO8u^584w<;J+aD zD)FEGdPVLXhuVmNAzfXlu9gq1mH$~U{?n_Th5uH6gt6qP|3SR6ig;IYWR)&d&!&gY zp?`At=cb9od1EK>P$7m;Q~o u_!zNO;x8=)4mwh zIH+)bu=+_1f}QS3=H@pq+_^l0BZ$T$TfTyTp&0jix%G+GgY-`h-3bj*y$!s9DsPI1 z#k_rzc_Z|4e}k7@01~KLaH0BH0(?vV806=Wgh7}ruvy(*p2RZ!PzAKzhwymyckoYt zZK+465R^|r7!nr{N)(}AguMFe#T8L5K>L3GQVVq>rDh(PBs_)6dlb-7v6=s-ATvr~ z4py*Z6+E^cIYb#;md+zyM9sXEe!=qnH58o0K3Y~ofbtZkL4}1^nOFTZ;C`^b8Y;yL z8-S%K0gKG22>8nc>B21=&Z&M35AUvigx32}TJNzGGZDcDu(Ed&0a_Z@cbs+p#jt6g z5U>0Jz4CE-Wfjupy7X=(#UM6x=24M$Pu?prMslmxL>)l&b9ny2>Yvc7pP^SzrnDZ4 zfe^KqMFX-N1zFX$$ShU=5KlpsLTE*rR0~M;kLY^!cWI#Cqkn#1{QY74`(X7`^c#U% zL@-xMDWJNWK1#x6epW?vg&9K8@(i%qg-Sq_1tANHULkH1yef?oE@QM=?~fJugX|iv zPtZm6dlmhrurS>biWCp5_2gcdHo8(&(L#zUi9y!V&OtvXVGCZ7&+Vh57W4I)X3eV* z7mscZUG$z_WsJB=&njNpWQ-4$fS52C<=F68>JDrcWTXi10OX 2*qc LCCQCaQOwO2biZzjH$uFGG(YWauEh(8g{64*q1fT %4amYOC!F2$@&jvWKR1Wkp#gy?5b{Mc&$jTx!4Hz+t0s;V(+^I>m&bV;^gtR42 zvw`(u(b$%>k+L_Y03s@FN53yt2{^G_ly4A{gucK)vry4uK{V2&JZLhdnK4&=FW8`e zd;;bnfdN+hXq00-R+Q9TFN4xhKiHGt_?}7Q{z^?rJ-wV=*QFSfeL7__3%>sp4JZ6k zS_Qa~*1hKzFx~jM>hb%3<^LJJGH95_FmC+DAWe6Dm}n?m{okiw!qs0Er_8jnSuJa6 zMV2DOiXT4r+})^nIQQJ0PCV~Zp&BZ$I*>U?)NBPuSZlR;ht4Cx1%^ba+!cwN)-HFr z?&N+Y*k@~Tzd{~q)hU$Dj!x+Sr5nVV)~ojC9oR95DOEB-b{h_=r%CIe_R|qYlC&EX z&!n2f6P=F$2LXH4f6A{&+EU@@lV4}r)0LWD-ui{&T1G@PwbZwWH%4bLzd^$Z#ql_P zDaFyhb<}KQu7RdXT7$BqNjmldHUpX%T_56K6R;nr0LIbE{bl6RVlx+>txqm+4;2Ib zlhWj7LAf(O3{yuq87owIg~>vvI_aY5;lYep^w+k;aqJyZWD%&4Aq=Id`s?Lw=WNG& zzzAV@E2^$t1_qJ=jdl2m0FAbjh~B8ENs!5=xvIfXzG*x(BIUbU3dYxkU?h;gk8@)c z>F}k7c)m)M3@LXtzUiq#1mA{d1FFx9B<8B`H1G6dl>6-}b>rLuKMWOIDhMgm$>7Hg z6kiA`CW&bRI@0W$@0(9Y2d?@yZv#*e*8bnSxpKgD>Nrj3c$Nlkr#Ms|@LRY0{;MeO zL4A#bnuuO0;7Atel8C7ae^c5W@^hs(U4%h|``j%cpNQBMd}l-;^cz#oF1R}Sb>UXi z^D}Pnl@i%EjE9;<*MVb=6ntQM)aq0Yx(*^~b>YV abfnJN><(;76#|M>r97Rf-` %6!P2_TI%HbG%|pW9AVlwqu7= zZ2g}i7zQ~n)H<-nI4x751~jnD;`}H@!`cp70(fHIfl@=oFtS_FIcjseU1~(s(vhjI zqxSG1cFZE*OHnzft)fr`{vcD6S}j2DgokrzAe@^;>e@M7jDkb3UH|3Ng@VLPh=k!u z{r=3n)I=0x({970$1Ie5reXBF3I4<1AJN!&{QgH`@bUQlk1{Y~%E0SWWFVqdw 0v*>lf7G2rThTV`|48=4-m*GCP*Gb+m}g`@qaso@gq`q zf|j}n9!;S;UI|_JF>~sVrc9kl=4egnGMBdM5y{-i2{K2uMdkC1K#&(MU__veLLr1G zVQQ#r+g8olPEPE3$ude}Y(s2Ikwrg42e7&e1sMS zvEq&Nw;*i{0jeA5u1JM>D_$j59JAb&T2{^V`j?FbpG70{5-B)+M+=s#T}fbY7J3GE zp_{})siFYoF>afh|AYwqwj*EVX<8V%+*?y RMPRn5A7(F3qc7PRf_A3~?VUEzw$h=!Jq+!WP;`O( zLVu7#FY $_8oJO!mQ;13_YMwO-h<4N$p)UwAWf2Z*I v-0}qHLityzG4U)_qM%+?T3T`6JN`^dKvf~i)mm;5%^8ZQTV4fCFUwR= zV7C%~$QO4jb=V_7g*v<&zmkifcH?d;g2PP8F_{r1{d5nirwOR4SKvQEYKa;?;dE)5 z<*H$d%A}|vt@4sVsYhrko?fmpknu(d{~aOt2MOl8EuhNdom3L}lBuBLO6G?xpkhd- zf+|c$LoyGVh#V-0e`*0TM-ZzIV1f}!;b$=1NTg6AbG%ZB@_kB8$W2GGAg+*)=?7Gq zn!0ER<995m#Sq4C3*=V0!uVqgs2IYipyCSS qkPsN z@JSXxXA?&Wgtb-N0)R&%j}o8bmB$lPA`Y5nQ9HR@yru6;=~UMY+FflyJBDyxAu!Dr z&fOMJF@#e=#TCvMT0q4RP6bt1IM*7XCQZ>?HC;?s$hXX$LBnDJ*#uRCVJ)gv$v|9E zz06{z3{okmA~xqfO&%51y3fS_Yb~H+u(c(w-fRICA6Mz@iXv5cJPlgy``FkQMGmWu!2gNS2% z>Z2>->o*BFM1vz)x1SF*I$C&0MHHyHb`Z5mOdcnI{6N4NGLND|v9W0r&0bO0XBoY% zZ%aiiFB$4({RH3BW{B`=43D5*#6k>+-JNU!6~jU(sJM#dJPW88ibX*cc6^SDr@yA` zAP;DL=yg;7TxqeSIOa}@ I!A2VcK(dH!JwgfZx-G})JdwP0X-kTdjl z3#cB)9I1g}-y5>j`X97_ijS)&Lbw{v4f>=7Y)9dpc#I9}`$$A4ac`Vp@qM4oan&Hc z%?lezoCTw{)cOGxhE*30hvzF6C}RlZ7csnr!}ARbs2J*ALB&-QPgp?3V0{Hun3fsC zuq*JHHEz-?j%SB=X)=akmjd9CgkdeI>{uX-Pi3w#n6iM1VGJyBb%g~~d|ZW%!E#Xx zXDT;!&CqQ(T0ocG97t4-*Bop~Dg)F=iSB>V#6?#Q>W8FR2;MNzSF}JM!!+bEyoG7F z+X5 k>2Bu1@JXM44pD0;1)1F-s&_>PPCk`qO3e?a7-%MTzmBX0Ol zs#x?lsm5BgK?oG~%EkSoQGTt9DrI>yHMPPSw}hI%T%=vV^K|?WCw#oa!Uc7HSe^&I z=Jva;Ma@4YKyYdp=LB)$E_fywr|xh(S)K54TD2ZNE9D)^mo|B9vls^c=vAZH8Yl{Q zU51X_+V-WAA&xQ@4u%lTPbTq+s~W!C6)A@HE6>Dp%f)kv91|Q%aH*NlnY>k3U5By} z!5apdPBEZ0Pr4-8!Z ;@#m}%mhlEw-`*jPOSxpn0SWD_1# z{fSl)X7l(ML_OiTh_Id2b#f?l-RA7rAsUQOJuIDI5Ut(X`h0_SXLTJoz7Y)B!zVAh z=qVd+hcu|Dd)H`@{R|J;PscCdR%Gy&Iyp1%KsS>%>B%J>BIk 0OR2s9vzcl7 z2ZJ@y!iogyqJ=?GLgCj&2kEqA8-q*&x67T!?|(z+)KV&O#aml(L{zjLjA3p=6{HOn zvCu}hrK-_dDX6i9D!7bIC^f{T9<47DLsXxJ{{*7kzP1QA-pP@2H04`dNs;fX&9PN4 zEHgPSRIY)vHxP)-vhNiA>5KGh @K3$1V%>HUqAnK+`SDC$e^JH+}p zLj 3ugX<8J)(V6{y@h0oWaU*z~j M79BCdT`N4dHdhVH?(mi3e@i?t4*C5X zfy@MxOgEEe9bSIT;JsiydC6dxCsO9(h+jm4zb97686t}W|0gYDcnJ=oKP +Cxdql8l{b$Nu V>o!Wo+W8y0S^z}f(2-Y?~NdtNl=GC_m^j!y|mYbzcifS9S z%Kp5`WEI1aS;Y^&V{#4#PTXtI&FqS8rDhzx`;uzZzibH4)hTmYtkic=t`sZf43R~_ zJ(HF(yn<6?2>WzP_L?}u-v+Ywj0;%`p2T{hFrd0j-*B+?MFZr@xIms=RQetm4Sl^< z8B!*e>@(^6(s3axDE484nkw~)26gaT?ZvkhCN@(+6p^e66(I=)M%M4&AFw+6_nShw zI&jaN@X^td?^kI!u?J6Gi6Bw)D2Hbq(Lmp{kK)467SddJDtwP%8G&to|D^r 6@JELaAFF&P$S?zGILYKA zpNX|D^0v1G54aQXk9FQh`aK=#C~GIk!6&H#t#v}rYFC-QS0KJ65)--(Z;yvNuJDb~ z@__F_J}wZRur;Qei|s-FC}mEL`xn_FKPgtq86t}Z`4d{k@E)WhL&!0!zJNvvwqFms zkjJb}rVwYT5o{@dhISz%$1M!7BX lq8;b35%HpxQrvuGKaN&fN($wOY{)5nFa zpehJ^m8qH_(W@N%)`qZRHBDdY03qJ&pDNqn?9@FWL(19r`$8^E^|^%6pp+e_&gz6l zFk#!nr$es4O!OU+`7Si>*&!SE#FtPgne_d}J24}Zo#|U4=n1zVKHz3BcM*g6IX18N zP)rhzzD>FCP+Y8D45&}fCLv8NLnPir4tgU+4@Ez=71AFzsjTA}TT`s5p+3yl&9r$Y zXXJ0$7DKJoJ_diKEZt9v!Bcn*VK*xImp!D7?$0Tas^QNGyqeF}u}%6EDtu4lA;G-~ zo(A2_?r97cgnwJgT$ya $@p 17;c|md(`L`4BL0$1#RL^$0mTL69Em95lx@0jyEg>Y{qY(d ztA!lz4YAo4icQ`SW)Y_8pH=_TY$WPe5t*NuGruTj);JlR$E#n*fc;Z??S_*JdGR`@ zIgifc$As=p;e~~`?&C4Q_xp#tqqE+Z2&jcCjZYm{{~-aDx$3vfJN-500J`1xcS4U{ z;`a{MNl||LaCFO-*;aG+bn}`Nb Iu zxbPcRNc@`8|H~GD#nrq8y{BL+ $?o;=5==f7aFTs9FnE?`8>rCJSB%|+&UCRXPi+p7LM zovV5R|0F2bCvnR>sU?bWt3RacA$Q?NG}bpUeBb{pLSGnyS1nY3LN~vKo63{)PiqCV zvUG5tW#Av`?Pqv5U~YUx60RsO+=;3#d|wrxW83c3nsfMKWX-wj_T6&3EWQHO=~mD{ zA3J7z)}rlpWZX=CCu2K4< ^XO^d;K=e4TW(!jzpssmF0$C!y1TvinRDN$VPSWJS-14jX>C%RBM9S_%@ zVmysVc_qHMzhi=x%c1*$r|+&ByG>*@AZwQItEDJ z{-jH44Ufa~4Fn&=YJ}%60@fbZ$jctjhUMbKT7cZP=tf3XCSn`2Exe6M9A? KbF>Q(z5P*ldKG 4dC4H# z6;V76A{(bOz-1U7;vDhZ26Sk=(E=)l)1aW@I{JGopkg@s3aW5d3ggTY*V(LEfP5r4 zo3ny%67&Y20V94}%3;2Uf9QWw<>FMR;_wz3% OpMZMTc4Kqpjl znTa)i=_$$@ug^||*V593`!SFR5zaXY?~cghKYg%8U#N -qbK00&A8okF @of(|R=sLZ7J!fb)EboGL$6GT3*(sqjFW|I!H=sgF0mYM#< z`4ahAc{+}wj@r Y5@*
wD8bll2*5;|`VyQjY9~dYBABVTQe~jZ* z#1{MaljGFczu##UI`s8$u;u>!d7Nshbn|&!9(ejHR0;n=sxrsOlQD(j;&gU^74-ov z{SoA_JkaNp-Gcn0Ilj^?*}Kx2lzSDAh1EwzC)AS6u;BkRFkv!BHB`0LU*)00bS2|H zbMobsfs;&moY7R mIyeEO^VhpiMV5fQ6v?EpU#dfkiaO_ajJhcbFh2#~e=~-RpO; z*rm<>yzmDC`Ylr6Kh$n_$7mPs7u{^bz*<8^+R@NW--R;KJ^a~s!`T K-mh6rmKgh(5} zR;7py%h_x~D6QnztB{Z;Mv2oR+ pXD7ewB!1uy_rCn%rXcqz}k<<^Jb~p8ubXkUf&A`K}M~eqxmIM#| zf}oxSDt#UzR4z6Tt(H6_Iue9Dm*5=(hwmOO4t-vF7Y&?+mkf2z4eNb!M9T^)>FV<^ z= )y&k0J8R#sjzKQ5`{dXV9 zslE`G_yPUHn&~?|ibhZVl6(P1|M^oeJa$0bOyBtyP%$!n3My` VRCHnZsnQo0E|Kzl*Wft1}C_q3Y9+5%F0#$;b~9GJ?s-hzdPC$;fpZ*wKVo zZ$1+4Urhsx5Uub2km@;7l96YOcHw?9@>C40Rcs^~NjH;%H=|8PUY0VGg$ePKk(Y?| zafS$PYPreCowSTVn45g|lw@QO`Qc<_D((}Lk%QkFkc> 6^$70@UIzW>E)xvgP+s6Ur>)D z%n=?UR4z6T*(4+1I$9k1y!0pyoQ0P%B_n@#M9T^)>FO;QG)ppafR_FshR>Lce4p(Q zzVaiwjf8P6w78#)H2pwx4{0&5pNuqvOkoC1OGXOn4@^eVQ!*L(E&3&rk>b}8nT$MV z4xe>HnaIIP$!(`5AWsUPHw?Zx&ZOgAUT`ruV@`f!GGBM=Gj7{IUZ^`fwDqYs6&P&m zQJnjn-OUD0km}Ya;Z7H8g45{7WUS7-WtgHR8$oQINzRgf{0Z@vIbHwFM_&5TM5UKm z2&Wu3MTzMl{)*5+#FS^F#|_sS1AAi%uQqhgpyn1nH96 s8+ zq+}T%mz#0%pn4xId7MtmEmmeL#mQmD4CT|05SU2D9zOage1s4Gd&xph;`*;fBy5qC z`BTI9S84Ju8dw0wh12BQ)WHm~QzMpXG&Os)okL(4%_||=Gu|_F;5Q6_%wR*3w-u)Y z!(^%c6Ac_pZ$*}Vc+y)x9PNVrpx^gtU=j55^$cxwhE8u?WbD}dLw9$Iv+;NLTpTqn znM%cDg6IcmLwh_U<{Y|bFvR*zk?r-sveXoY@Uvj6F)+{}HlUF#7~KqQ>b+S F zWhM)T_p@N9iS==Y2>K1&EZEt!j6fEQY-LIoEQtJY7AzI_iCM70Z=ICNxCYau4Hj`f zhD@@HjMz#xQ6kw4lIx5?;U~lpW6FrVXtWINE3~~da2AF3LSlehRfJW0Y51aUr&+9s zZ{3P-<0kq`_?#H|>|_M#KcyzTtwyu!xcA_jy#dW9Sacc9W$uNVDToQ{l>Q0&Gdf{- zlRuy{PvZwapfh0i{NfaN64XYnI)kq4x=|qW!#RgAA1|lUPyTSuD=`@V!#So_s&;8H zQ7kEui~ClNa+^$2YAf>Wk@1qDjLgYQmnf4ms<8 -`oQmY>ToJsaPf!Bvi z)BhF?oJA>Z)!*LQ8 b2cRh`=!Tg6P0Gj|7RiFHD2TRb3w^FG4Q-ip$R`A?IQWU^5E7x0=n#vA z_*rgqJD6F^`dMx>s1w!|X<2R|YXh^~^pwnUZ#o9QM3!6p%9iD}K&HRue>6M!3jMf& zzAm6s2MMF+s^aro%hNu{hf~J%kX-Vq-jc;H&XT7IMuN=W*o~*FuyakX({0v0hchQu zhXXAtnSc($$Evh~`DAP=Ux00 ~wBu;KK|Z zm8*BI6h82F^yTZ~UL@b67b%Te 4 `6=ld2-cLNL!tXf8x8KM=-pRo)=sE7z|hMBoMUji?rHa z7hZO76BoW|EUjp>H2crI3|?BeoaE;YuU^sYk&AT5ULgVV9|%`9Ea~cdlDF`;f% N#~OJq!;YIFfH2&=~tw7Em$rtqLlxf_&HlDu#koP=zU&sc7|G79hukorAl9Y;`HS z`}kC`j0!F64u&X%)_J?&mjrdjXS@XeEOt*E(S?3J%H0C0i14jy6zZ< &2GQ zGy1j^L3zoL!p~cfiBX*MSqVQ^3Lmq8iXnvxDy|fM(*i1n6e_4jDuq9=0QqoA;eQBz z8G#f^WR6z~PfT&}wcthNQZ@E90?l#Feox+<>|u`pK__5%3;TGU1yl^lR8Vmx^KuKQ z7?P==3QOi%V`t}6JiTsdg?!6&hHkQ0KsGtmV5HP8r5nuaB?ECumA6 >d>iow>FxO%Y#RD4{evujM5-9r{&v6z)#W;YD0CK&^UJ7cMy-fn>~1|1btUq*3a zu*cDoE44~e8?Y-)o%2Bps2;~0g;*z6In-am19BU0iK|aqK*h(^6CqqlE;np)4C8;n z0=A Jg?9Ju9y;H4yl=TJMY&xNkxASeCs_Oq#ThajnHqi6+!S?b zmeJe#w%TflOU72?8y47O$mZi1-ol}I!U8IW=2uX0t>n^U`OY6h3KUdfhvv9=`fJJ# zN~5k1y>6 3fDn734 ze4k&kfGxZ4BN3Uzy>WuY_kFe`B~^X97dDjik!AErbQ{Ha{g8Bff;SB3=lvGwV+iMa zFuaBH^KlEP7^+`E#Z?)fw}6Tv1`4V$O_xzV-J|9J!yukD2>dk*pyT*=c=tvEZ0*B5 zCRkf8PROd@6Gd!}8k(!1~gZbya2WI&r^GqY{k>vm;>REqC->-Km-6M`#K9gude?G8K{fWM%Vl@88 zNCRaRGS+Yb4d9jaz@iL&fO5~X5wI}pFvO?!{I7r>5}yezwp|<**pADE(srlUDv7@e zjgnJxYi`$da@X8`*R|VFALX_S-Ac33aSCmBvR-Hu=5ShSX5PUK`X&%HDR%Gay6r}x z7JRzda5~L8&Ty9JJC!2t(dUG^^HYvPCkkZWVy6e=-R^WTZO17$4^83|l%>k-EIycu zFAd4@@fk#X%@prT7{#YjakQbnT|9(e_~t2r8k`%DI+c2>=GHMOphbyVVX`!jOe{fy zFB;XFg%W+tsMbUKWbbro$(_Z=FR`9hp?Cnx^v*&Er{cdcD|uivm^C!l^%j~d&S)#a z@;*#>q*sKgQyAA8%ZIclo#14gbP9eG(TJx8Zx}>)p#g icCVWLPSAAN-oyc+Dv%2OvPx>S+eUiCb##e3Ix{;H%sgYBj)oZ9SH(0(F zE}J?uT5S2pIXf5_$PrdPa-5TH`gXyjQSzyQ=b2bDzq%kM5+z0kH~f#3nJl=$KhF7} zSRZGIpexQj&iQIuM&LN7u*c#Hi)54|)ki_(hmUin;$Avs&g1vLA#_-7@LOBS9wzXo zL6WqgBCZVQFlUQR5{0-+NlHZ7R$UA+ynN=UD#{d5ab F8 zL2tvqY;e|@DRWw^)ED;C#7a3sWD)kWX&J){yCOr#i>ba~5~Bo>7CvHm#kjDg07{Ha zh9K=PBcaj0rpn8UO9pXo9v8SbEGlt#kA%1{j}SL>5VSNdYz2irY+6!fKGC!ce(U;C z=~9EC(&o)%hgPx~DzhCbQ5{Rb424Pvq(#z3%IUbm8mYR2(6f%RNeEtv?cn4Prf9gz zn%9n&Cw*VDFA$!vC#0K;ZHV5HGAGB1D8BFw(c8pIIYVSIMDL R zxUi)F8rl#=DuWFB8M$j{lP`>G5r4X(e~kbIzd`loSWE2s*><|$PZB$}teZ*2%G zR t9L_NQ;evgHO$w|@Jl8i KgnAT8Cc6um$*?SUx^C9`D6KauYd7!99qFCIYR$xApz0@D3p zMT?=egEtJ+U&3eow2E@y8@T`jYetAfsOe^szzrYyGK)Zj>XMg?72cRK7srK&cp=w| z6>^5i;)UEy%NX7Z38Fu20aCG_XaNSlb<1eE+@NCG?3q-=6q||(D#8Ma3%tm9)i!A7 ze?Es2XuQT5Y9YsaP(0Tb3cs hnhi`?mF=iAQAB%RQxy0{AqcO>E zNV8JEYWiHik)oE_wfY}O87xUbGfJ)qR-R}@3S0f2G`}8&^@wGyo6xW;(!gaYF r?->4-9qt#Cn2wo4GaGRyAx|LJ2*G0dlspp9Q?Co^hfi{GZqZtFb zk^B{Z)m27)?*GQ{pa!=-_n$1FVu*% UyCIR)Rw#(D%U)AT!ik586Ow)4B%Q@)mvq8JD>{y~fGQhR z1Pm#K(bY^u@Z?#>MVEvU1luf@%O(QHGvpZ#Q_V%@c{4;TOQotTQKe$lew^DNYFDoT z2K(W*U41eM>JuT=Yw?5<8o!t|pr573^=pPYfTBw(W{p&FJq-U3TWaj4_2(JdJJ9C3 zGS|R%y4R?ncfWJPwJN8K2X%F-7twc|8@e ?GYB@d*7h}=L~_ndM*Ab(l60- zRQ%#J;1oLwQQzpH1CDz{WCvGd`71Z;zvasP;>omLtD^2^P~TB{NG`kOEnEEJEPK)V zj-GK%v))3d`bJl0@|>8~quwqs{BZ0pa75ilUmXE$ks6S;-8$M79OmYu4;jK9iU@GM z+1I5EmgF=syjg;kCzL7n`jt^w`)@kjF$B-(MR;;V{YT#!UG?C-pMC$)7$jHUK_Ga0 zzcWM4R5!+~Jh+>Uxo?=s-?3Ss{pNP?0xu0M@ZQDgLK>%B^p0l?9Z3I_k9JNY$j@MS zIGvGA+<-m*S1h1n>>m_VTrK$x3#b@cQb83ylPflIIxxiDcRpzWa-8!yd^BLtzB9c` z)f0kWl1vWcFt|h}#}AB{9KQqUrvy}E>_B?bR;X59rko>%TQIzZ6rO7V6+;RYR9q>% z%mONg6e_4jDup*%fP6Tm@H)XSBalLg%<)R$csr0bEJ(*tQ&oX!wtc+M0xE`NDyX=U z`3n|MF(gw#6_(5qb|8JkVgcFYG;;^iH%bQLlIjB%D`k*MK^1ZP26Q0(gauR#wzkC8 zpIJb~$5py#7t@IGuPwl0G3%(ia7pwh83Vr3 X*;}nhL?&@>oM7=c6pPV;^l28@W60)37~W#5@hl6d7@A)} z#nl*hSU|;)0tHprp&4rjQrBWham+n@Kwx|wNDGqJxKy3DKmmiQ3M#Je^C}Cd7!qKK ztA{P1;^T_#`@G!(EEX4!+V_#@PqH3-{mSL}k6R#&K}V&@xW3QlEudofK9*YlF$<{p zxU%zozG(qlcHc)LGKqWR1dH$cY)(&ngpDK)?obj|XGUZ>h`wkfmX11!?_e_o^2eZv zg~PMX0xE{OS5R@)#7P!VF<4(g6{e+m;ADU?h;|*FvH&`cXNPxbGIkw37XT+$=kR%t zOXX) ;HYB_b+(chy)tEk+31JQ*3)LlpEccf4=P)s2UHD5*pcqu?wl%zt @)bTiJhp&}N3aOt-wsTXIC{)kNyrE4$s4*PyW3~>ZD hW?l$k8n=gaBYVtt$;f^u5@9vFhrjPpEN#_)0)M1ELKQ*oat zr-R=bx*2EMP?_X(Et@2n<@Bl0jC22JMZg#F7YckQm}0t_UBvyao4VFjaHxOTFv`7@ zIXRN5*uod~wpb}=h%CZ>h?X(Duq!gKd!W5~T-Z_oC5G%mkPg|5^U-mE`=&)D?psDe z+=1QBes^5h3JQJLw4};>qG=iY)_9t6rp=ql4n3dEP?_z}Q=%E?-;b6jeM9s$f$#)F zL^l`P5dCM$oE$3>F+~3^R>~P7iy?ZFmNC2`Qe+6J_rc9L*PW6~A rJ@tbj)AueV!&UaG0Oq_OI zCKEI!adp6B=w_Ve>t?_*lMnLOY(tUR2f0!fU!*qTRFC*6BApiUT6jeJZ0h tGE_C>AmKQ}T3L?|z)UtLuH#E@eud_{;;^iWp4L3wUHxzvIwjpCr@)cpO zYTp>*iRg6w_Z+$HMIv+w^c%S})WKqXh-8{#k%R3?59X@j(!B{aq&Jk%!`@Yckn2xP zww_7mh*1o;8pFdYi`3l@Xf<)N1yqbeOa&FUMDIKcs2F8u3aT(Q^=VWso}n#Exc#IQ ze6#)Jl@@>x+S#VJpVUC7^*W@TK(OItY|8s`!9XM9M2_W6DVLr|g(?npk-_}>xESSD zT|pGnZG9p@e;4X7OMRTEgcBd;?w>x`s4U15x(Yx-Ys9b#T xHtaWEaJQ0=!h7o&YSG?W_IXJlx&|!Euaf1>7yr6##d=m?Om@X{?_fG zor8s1FVZ;i2#3|M8*O4xuQJkf-jbv>PA(Mjy#|U;MYFEz +!PVQ9(6qyO* z*U7zt1{QU4zI>8xPpp&s$k9g~we6(~FImV{zrPf^;|3{rPL96xCqI~pZ`+H~)k1ro zK9=bTCdynpoo2Cu!dT}}rCS!CCG%=n(}ERp2-EXfp)MK>{K#nW wBSLG*`%6{*-y z3|0(&>#|+8jBK!E+C&i_fKx&DFq>dXE&Cw@lKzY#gO}Pu;fD-N6>BOt3k><~Wlaww ztme|%%YFu{>aUQYg5 &F0|-xn{ovI&ICO zdTvllU3y3^d6}b^EPip8yl5?TPrsFpIh5SC7yXIpsC&GM1BIWBjrxqJq3-L$ljT|m z=5{(b^|9TdZ*Qxg pP+24pbD`l`Glg8M@6RbQv8QB^7pHDd<3TyvYj+n4lm@xxEu1%pJ*Mt%r z(=YR`8dh*;bkUx^OCV6LYTr~h2FKOQ2?V|Sjz&(S3lAoKH$-k5%X_xX^6Vq0gO?W$ zNZxRL~zrR9_`H5UiU%4FA1uR&v+c4Fk*ZB z_PWm%P(`v3t301W( U zP%)%XK{Zk-{JI6mhf@mwTJXyVq);Mryiz#c_PR??OZK-%fS{iWOtbCd1`DVdlBuBL zO6DmRP%$J^K^2zF5w_Po-(msT |)yMHY~tmG3%&X%t`bo83TqpW2v4Vv_KexjtVMnSD|0BfQr#o z$P!n-ZUGe^SK+Qg!?oA_Z4214_Y{(dOyb@+!QyWy7NfoH=Pj_ukj>9xc#94HV-`>` zG{1t1YbC#F0Tn|E6jWh{W~}XXe_*ksIOZNcATYl6y8j`0jZ4+Fr}JHU22~YQT;JzJ z3#b?pV2P`37EtkV#rA!kW&sw9i%0GINc1OJ559io^89TU2xHJuX)> z{kjEId|cW2J} gq9v8TYJo65mAQuD+ZIqU41*=Ep0t39kE^g@7`D~!iZl3bZFbWjQ8`l6 zkZCagD8ayNe`KD`2*zhQN}yZq-bm>l(Q5Y`q6z(}TkX>CNR5A>#6s5iA4datMLw`7 z!`JwKCR}l0w!D>f{*`*G=GO7a^p5Cqi<&66jUxSKqvKGQTUFC9+u-U7sm_#hXW8wz zUga?={M+tiz0fGkxh1DlsaI-+c5U84UtT$Y_vUsSBq-K;C3Olwo+Ln(= zuT`S*=8lWux|L$bt7?|^{J+Yg3}0lsg}la@s>rE a+^Q z0}xQBJKsVp?OAzvprz_NJz4hTE!y&6m?EMVjuwah`GGwc7$}QBKR`EqEooA2`11q9 zblAN+WhM(A@lOvl#QHcx1RYcE>46R{BXD{^SSN9MAYhjK4!c3*hffcr;y&^8z~Hye z W+SsIKp!@ zOcCO6rCPBsxbKiFju%|InKbKY1@{vvGg++97u=7D^>Ky>3U2iQyv}I3`-ilQ;RQE{ z{IKAr;yzJu2fsCR%iXl0GRf)N*d)m;r%#2JyZ=GFGY%2|p1^m4ZKj(^vkoufes5iU z;9qd4f7!4AlV>K+$&pmW7QV1gU|?pauvKk$w$!W_DvbrMu&<$I3@_}849_#2$HAQr zPahYy6hMigyAY&9w%omNT;NVGDse9!32_JZG`w+K*a`}L*tDd|e4=R?{ML9{?xxL~ z$qs#I@$Jx4qUG+v(ekA4Yqo_1Cm15Sx!8v2f27Qr$q+p#R>~P7i`V&TTE_5(NRc6= z-Ul0^w~q^33ZS74(fZICP&20(xoh|y9~##pKCq}H|J{+0e4u&y{J5|cR0U!4l&T35 z&C}qw2DIEw9U#P;_APh6K^P65yd0|K?zi}K$kcN8A2A=(kxp*8`)?SG-*VTCc`;k= z?xbCfI178UOw^df)sf1fTke{#o8gyCK1h>|=*)ZJ8NV1Kwe4 ed1ZkegVh8Mj~IwV_?k)k(M`f zGrKop)<_7|746Ua@X<#tIg0*QJwIhqi>3Pe;vHhCoFTHfBNxhIdDTbO@V*R5B!* zg28Xy5^dC*h20H?O`AQFuGq|`VuG%)fZ_r#ME)GxU6bFIhZ1hQb`xqL$9qsb-4+VJ zEsvSiG 00*2eGc8d!$hPP~fNb^g)#=PmdL zvX@l%75T#Yer*EqfpfUmq8pYh_Xw1LlyMXP_o_eOXX88R=u2B~HXQe!0#${HsxIgB z!lBOTqB86B!o9t=d%EX)OI|IHcDl#!e*_age*dFlO8Sc?#otqA@8*9p@MGFmjvJ~d z;Wb*VK0pHthElajj~g@b_N;1jzoDK 6E7 3%s>T3 >h1Y9bWI4dTnn|GjqXlIUytvH*U2{ iJ`Cie7{}ov^Qx^dzT!Wq| zmJ5wJHvo~C2;fAJaL{dcfI-p1FuXFf;4XB6qlC~baW59Riyqw<#c`ojLND(o0xbEC zTWq^s{nZa2S&5)kN}9-VfTNhW+3x0J0WXRg;(WJKchPqkXt+jPxKsTdUMC_wjSg^I zm&M2-&@`>CL6E30Q*-z3P3+=$r!mm3_FM-HIONmdS#&5@phXecYsb?_aRVfRLG)Iw zH&*C7`h-3&!)DyjRLom*^zX4SWS9?ATwp_lh&R?mdvh zbBZ 4o>dEWl#1 z>!|y|Nc1O#))*}(ES1!^EfB__qk@Wi?Egs%s2IooEpfHtoa7zs2sWJxs_?P@;d Ek8%$Lh zMC0p+qyrSZVK_lMEO5<` p`ha0)Eg|IV(1qIRhXt1%BVAkPc-cZ z`AN&g(592L*J6=z!ZCb)RzYFyAw4gF$M$M8ND)}F*Ia1RVxbHkQ&6Q_{gs-kCTK6Q z04*C0d_WeP46n0T>!`^PCkJn_fGZmf4wD>w$YP _RwYjl6`oozy z?Z}!ef1(9wPgU`rwpi= H0bBMckwjz?_r?hp zKT1R&e@dzy(|g)z >hqTtP%-qrf{Lpz{>}m_ zh72gE!cm{qf%-d5(Lv#y=y|#7zgYku$Hc=&b27FL{*GiFE|FGj8>^SApo;9C2J8qn zTR_ENXiHq3ZUGg8p%qkYN9KGBuvn}*YDY#cG|3e3)g_nbZ?r%dgN{luaUGdG7Em!9 z8A~NTYXKD>S9Xp}*8;Zej*LWP68FXl7T=M{!6g~0&fT|gVLP}|51}8CZjFE0@M~Ue zfl7v;K7`>d{F-02fQn%T6jWUG@tYP >xPkht_9K=B7HlCxA2lm7Emz^hJuQ# zXxbJ~F@#4!750*@%EmF84F&~_Ce$=$TJ9AVOOBJ7L?0?*jMkYaTNkW7sQVLGZ$K%~ z8!cAMU_Av@x>peGl<`grs91D(0B0@)k-CNUoZDTHT~J1j{Oy_@RpG;SlifaQu}nVl zxpMzG3#b@!KNL$uw-$yP|FQ*$+4v(0(8!r(Kt0O0E!I4KW_i*ADn7GtcVH{d Ug_4X}8ZS}d2(8|hStY7;}fU26d% ziy{&87X@hKWEr5|_E@Z$PZq8%oV9?8FS1 EMG73=A7M;Hv{TyEfB__quTdz156*bfQk`dvfLwo#sVrnuIvI#U$lTNdw@wI zGKqWR1dAVF+BS6m2fhD_Mvjh+9Ya4a_iG8y7`FOfEwIdx;eW>P77?W%SwO|G5DF@; zW?8kJ@0K&9ML`vgD2=F|=tK+PLv@Q__$)bJkPfPi^Zy=c6lWFlZ*ymU2=K8V}URR9hG9@x;!tnfQsSrSSs zSU| ;~ALFws)ZyGMn?^$4# zA+x`Y;VoR8Pg_96um}n&t|s|Q3#b^ ={o2nRlCv0MflDX7v-cr*dFVh7(-W)UIcYzi2xV-`us9}x80YOzc{^0_jc zvw(^r!%4UrP*H!W1ytk5)wLE-@o|+dJ~2VR+bzIi$xlRyWeoaBrbzN3_|}xm^EC^E zG3co57S{v5*8(br2W)BMAGCmqk1IP5_?IkT%kBY7L?&@>oM7=i;H}9W)qQU#>=;d` zm-G|T+x4y*ZtnXnP{$C=_h5JnH}~TfP%+fLf{LpyK5qdPLj)95VQNmIUp=#EKI&S1 z%>wi|4o>uMN9
BNlR+T`6*r9cGYhB~+-!-fwNrd=n~y8D6LX>kSS(H* zwG$)JpJWF3x{}NDmslW-K}V&PxK7M97Em#q7)uR)n*~&ST-iA>c?;OGJ24WGN!%MJ zSbQhuBJa~Ly8WH{vW~QD>T55<_Pm@>qlLU1ebw-8?y AK5PLMA6ItU`_EXwmVJ9K z5t+ojae~F)-d~vVS=MlghI6GuAEWhmbm9Hr35kR0cVspr ExEkOh=PjTbKd$N) zQ1Nk ;&;lwx zuIyaoPg=m1-9?s&Oyb@+!Q#8fCsj&29r;}^ H#QrQ7DHYn!uxDo%qW?k^(f&*s`DA%B2tdxga^`N-$W z?~N8vG2}N1R|8zzJr+=nA6K&$Q1Nk fjUed0Rs!-Qg4Hx$>EKtV~%r9X0IR9jTi~F}0P%+fLf{Lpy{?!61h6pIA!Y=Me zD%5{w0eTz h3LSGH-+^aPNI}I-VV`CJ6@!~CaW!oL6(3h@C+12EuvnZr zY9~gbKgkU6btRYQpJ#zE1|5}F;yN*|1yl?t#!`cKETH1!%Fc;-sReA=ofwJ8B<_t9 zEWQ)7quA?ooArFRQg@rZE?T%>BQD&j{vNhAeSK&g)4z$_HT;}6SzwnTyT63tE&QC{ zuz-qT85C4pjq-aIP%)%LK^69Mj*VpsP2)k~ymjW=W*ql(77L1F{o%czFgVtAkDr!| z#U IJ3=ci;`_2JrX95-B+;K_O8Cl@%kz!} z!WeW^YK!X#O<6$2aD*&X{1p~Z@o{D62;FD_TXsiCA~K14;{=QE2(`NHLZdU=Y}X6j zO0xk+NL27$Q>fJnGc|YbUi}%jJB{adwdXqfwmb1RakW?LDi> E|t=VhEaoD(p+`85dt^HW}oO#WVqXodqW1 z#4gbZi`cW#R1dy7fgJ~=Sl?l>Tn0NTsM5WPm0Giy?(l~!K+8r6ePq*v$J!sZq{e40 zmdvL{#2+5OBVSq+sM2|4YrI(@n`3g#KUe_E;+jZy{@hlt)~i>h+HR-WYZu+A6i`Rb zPy>?q-?zZV2pDR>*PoVO%-=Kcq2k)WV=SOz*ubGw;YsnlgRAhKOh!M=0^DqjzI`}G zSHNavbuRfXvA_qPd=cF_pfcnd3#i7=>bF@y#m7~;Mvtis$yqjl1;!}`|tM^zy#m5y}tUqD_))64q zNkJBVjDSnW|80RV1|8LIoEswidkd%-AwtW@#dj^B;^WFLMEDa6*s_NRB_fl!H%_ql zA;RN&?FOsZ>u9{7qcSphC$1O)yW=k5Zwna0xCz5s1nkbVfQq5&6;xamaiIlN47OKL zg#&gYDe}730`xepO^mQbcIesa=dYH0!==z3i)At>q@dzDF0&R;F}T?hS6vIJ__$&_ zE-$kHi^Zv<-j7K1C#inEuH^FkBNhl_&{1h6uH*7<3#b^5i=_ttumx0nT-iA;pRs@~ zyW=7enZ&(ug2i`S&TG4^TA}FXn~i+2TxiU>I=#s`lesB6is{_MJz)4ce`|qZhW!2w zhPUu_{?!61hILR-aka{iETCdYih?Ta>x{G|$)$YHHjdvDU7m;`8BJ1g72u9zqX7w{ z(=3+DU?T-px;c-Y+nlz5ibaGG`<+S19}vd7#$uU# F8Kd)(DU$pNzBT3Y{KFOqW6)9AEv`5Gb_=K&-ms;O z|DXj_d|cUi!=JQ(ExR`?5t+ojae~G7hR<%*dUKUVzSKO_s5J|ve6L+&h4qe!8Nl>} zW1lcw;jdVrmm$1g#PD%G%z(3<->`s+VHy-vT$S>K1yl?%QBZ|l;gN*>Ry=LYKJbX$ zucd$&e8Z*CR*PjaD5Rj`hW&CDP%*gK5?7a6K*h%u+tIn!0<1WFJp67gqoX6ypJXcd zx{}NDFS0-wgN{loaUGqS1yl@2$5MmeYXKD>S9XrhgBGx5cXT8olejldu=tM7nQgaQ zfTM$`U&*bxU3aH5(`?p;J<_=${JQDmL~k1o&aYXZl_9i`Vt5M&=lvE?F-(GjimOUK zZUGfTJQP%62WNGF88m4Jo*kff%#zGMw*WqlzY`5d#Kl=AfUqvL{JdlxE|LDhVx0^k zDX6$U&i5>!VlcENu6||#6(3h@A7|}lWA?^J9n6vFPqGqxb;;%Vb1V?XprcYuTp#BW z3#b@Aj-?X6#sVrnuIzlA+bm$q?&C;ACUI|^4Y2TWq-RsgAF6cAJH2z5!}>UDg0E{M zC`+}>TZV5_wLm9BSZ6W3g>Q3@1yl@EprGQakOwTFVu*!;D(u^=*GEbeBWThN@^4n^ z_e>w>jTVcD ~!_To)=xZ+LJJEbx+4(tJEnv&; z=SV~*ac`Vp4fJy|4R* fUa@Bud ziD#d{KW;U48BgL?e}z0DxlpBzdfBP|kY2i#X895QdOFdB{(NAe`V)PtS3Qg1`{pwI zb2j}7KqWyxi3T{IZoLKnz#aM--re@ng_i)V?=KY-J&FGilpnzZfjj-%v=M(!OSJNE zDjlcb%oOIF=B(2c*9tYK<9551#$3ngmJ3~{*lcv$h>aDTwmQ*#PRE&X%Y}oLW_wDz z57INdV k9mBhc&SU-q=%qoM#;4(@4 z>Xw8Xx$4R0o&Mylg?6EiC}_K5k~4V2pu$}S6as;}1(>^gGllAMAeESL0{=yIk`$R( zF;P@F2>{9E-A)6C*q&H?hY7O3$_o>2 0gxDyeISF}LjM%T$ngcoXFLz{iuoE %1bF%ZDQNnlL6z2Msqzc}BB@ftz#zhVLC^kDCui;e=%%lZOkSua zI%v-et#YMCzPV2Sva!-vrp#% H6f50@hx!w3 zcNX7%$M+4x;o9n}Xc>27@&~JJ0znvr4*eplpoF96*(^nd5bCNgn8XW8=mm+E>@_L$ z=5b+50W>_3wRs2;*}H5I`F-O8`#qV6TzwN>7hBKai2MOsMrI J2soB^{YzdCeR15MoaidI|lf|kC0`?mW(V@zMkE!JR)lv@aEHaW-;DkvO4 zLB?;ca?ovfX0qe?j!~O8>BDcTir@`{djB?B_V;bycO>fLZ6DoSY}+@nGkH#q;ZjWI z+rDKOnCHF)Z68-HuA*fOuND;<*tYM~abZgVG_>tg-^?-$b==pyrpE>F_C+P{1&c!7 zho5oOlB4K<)$7NFHa4Awel@k$a(T^ASkD_5z;`Yxou9ubbgnkXg)J_5Ws68dietJ) z{`|PWy>C&8`_jcB?k|rETU_D}tE1mFE`Wc1QOWz8i$mT|jtg5{^7@%WLw^0shJya{ zae@73i%R6b7zvRFZa=>{E^H|xhaJCx06np|0QHv)XmYva>0@%+$14S!#s&6z47_-| zjm@--%)5<&On2_Muw^R+Pdm~8x^~O}$pC05OhwpB+@>dnsRqCGA|p&S`uK=pkJ7-& z6rcJR5#g{19oWaG_8||_b&J8A3so*hf=*7MQF88V_gqT6AXka#ljx~TdCNw#>);av z%|mX<={70bqAJ!>;z|>0UUPfqT{ZCC8ZD>#5v3XiPR^#J%sRGgO3IuTY~e?gUM5z` z86rzW=~c9h;dQ(sL)ftxm`! >2+KO-^DR)6RKmbx&5wd@rK)$AIzDW1R)wto&0Z; z_3HFm$Pnv_f|5I1pzq;$gUeA}&){KDRZrp^s?=&^?J#+1%DEGH74`O{_cq2yQArJk zakky8i` OiUeOmcx^>dK&ZFAohj!gcOIsFX5MoN8mQiMa_-dJlyiFFQ0Me* z+Z}i%ReY{k&rxy;ROwr*bh=Z{4bt$}3SE?ZI>kaqY_CzAC@WSSF`RZYaMZnBaSz7% z5>BPtaci?vle@8*-|0N3QJYtD1WF*Ko1#$X9B}6WN81& 1U+L4_r66u{~N9 H0P=FH@8yh5y$Gej1D;~`qc@cxD(1KZzt z%eb(m02 <7po6NRxSn zfMbXvHH}=_Mz?zgp`*8rW#q=SjI%KC;)MXt9R<~^19yX0j|*Fh=pi3r2sXTB%n%Lj zBn($&_M<yB7m59=q+QWsKhgJUA|FEv}AvU|h?1`Jxj2!I2PsppJR-xUdzkV+Jd| z_Z(>eeR#|O#TH}`_LA&i@mTYFAJ{AQ5?Esx*-2tqB7-~Z@SFW6%EENMv16uvva z_EfVb_4-{|0g|6_kw0_u>Z>e)I3BOaq>cbupsoZzX;?(PD1oO2Pm5h08w-x<3MV{c zkmw&rE24f(>+djdVkHXQOq9`~JsJN1ui;4hmyMPFAZ5->`+)xxE9DH4C8qTwTE_4m zjUq$HUmbj|cjHyb6yhv3vTITR4Nc_XDp5`w7r3Wj;Kg%S&!A;wChkDb?Z1D=75g zTv@8jC+5lqzjfm CTJ%jmRm<0Y!;QtJiKdJ2|)kXR{ah%C12K3c}`>P?Y>ZM$ASE^H}) zhPPcLTqZ-u9O!%7xWIkOq7wJl7l*hX9T&E^#2qG7|EJ>u_Opvh+CLi!X$QI`kB G8%-`W%KlSXUW4Wpa}NG7l8MZgQs6VK{3?OBG9&p~u9 zLsOH0$3)Ijq;yw3h60#yM=!U5&tAC>ee;USWOU65YHhn^$GxXeM6)j{qn&KKclX>5 zN>&^_CrWo@rLQa7oQTkXJf%X_x%g8**~E`Fx` ~P7i@SCqEn|3hO_71^u04BP*irxuP2^!L z`krwCd)K0p_5~v$?LY(C8W*;LA|DPkq)L3E0Ui9-KL?}#O7Hy_)%S+pPQy$li@ur7 z@>wl bPmvZnld!y~ zuWh6qc$rY6gzTrjYS7`4(F&7qKi??mkPz;mn~QBfKbSHn$M`9B@$KjP#7a3sWU-$g zqGb$kKNT6+_VfQ67q%2YL)*{cDoY+47r0+uRO0^4;t= %mBrP>xrC+`=i8Y!{E1`5sWt2>^TkDPn$2(9v)qCnPxld9)3?A zQTaltRH3iT6l(d7Tf{libDO 1Py3%B72 zZH*EJZoO45bP(h3bPMh74lIN|1VUK@EY(2=c6DjW$T-MzxD=m|2#Hi~&}VmKlz*~N z>xkY~B7A|g1CH@ZWTu>%Js}bErU6QM&S1=c8m-LwL5;u1z==r#x|t}nL+^KaNr4}x z%$aFp^nI~X&JbBV=O5EDhTj+|GK8(&z)o13b|q7Yv((5oQUNqHk%tRvoIWmaPsPBC zw=Fu8mN9 uiIY z)#vTMs8R}4pvY{M@7kKI&_GoQa#Y4=<8HW?`oJJfh3;(V99Kqf7JPuQ;lOo9xo(QT zx3p3+9Xq;U5b+(OC8F=a{Tc>N^x)`bqJ#}?+<6|{M^om^ }I~Vtr1@QL gLu56w|Q~%Qf zxc74@9JX6)ioE7l%=pgUG8?*JTi;78UOqJP@>aMPddmD_Q*-{jc^lvi-pZ8cUxAAU z3~upiQ`4<>_v9 8M)iof0_9`)1$P$9v2n?j<0K2;4l~i5 zVC5*h+K>X4iN4AZADQz}YO2Wvs}X<|W3zQ`X(I^hAz jO;`_n-tx7T)fV~y7MPSJ}lNAuKZ*!ARhK!t4cSti*1r4blR zI#^E)Vtlt)V(9eOH(_AFy@)gxc*CYS!iO#vDC-h}-z3bLD~SG;SSe+QJn66daT(cz zXhjBc`fKQ1H-#umwNefWpv>v7gG@0pc{}>hVC|#JTEY=9FwJ1(A^5SljNAlIO;W5Y z3tM4D5bbqJ)C0~WMfz8dH@6fp=*q5V4JJyOi;)-*ZisN4zfRT~R(j&AVu gH~{ z((D8lC2Xri7ttl^3c1US*OE_Gi4F+?FI)xCm>Ck0Z>Zzfo9KxOpui1<@~0%578%%- z`=!yR2F;#TEGui9_Dmu84x5G#2W`_j33KMs($iw4lp*q{xE?MeyNXj}AltN;l!Yw? zP-dH!ttjV?vcSD JmOLLCEXE2jAa@W`)}}j5)`?7tt$X2G>1L6 zuQl0g#~!+J8SDmJe#u7Bferf>)m^n#uhW=W)2{A-Et4voa1v}5;5(uzyE`*o_3K~s zK7>4&CBcPS2q2hRNBm--{Lu5<>_V~r3SZh)Iv56ahX44`$)uUBD6RTsb;6vCmFlMK zlf+6XL*#Ll9)Ziq?kXuVkX@y-%fgldC^M0>lt)}#7O)!!O4>^cA#JKzs+EPUu*gRP z{X~g(nx*uwE-qf58u~E_f?Ou)Kr(CPHA$OBVLM$NYPz-6Og~HYT&S?zf&1lP(wj5V z8dc$1-(Y8X8Y(e6umKL2?m|*QZB9=&D&ti=G*w*fE9{r>6>81#Mh{Q;I^pCKMm+x@ zS2ea8vIdWx!+FqI1jPlgUH)u&Bp93r)@pa;fndHRg$sYD8?6~}Xsa9wk0q Gh%K_C&F>(kWnkqU%YJ_cnjOMnRb66{ALdNxMJyW2Y?~#RuZ8V zxW03qH+Nkv6HAGU;iCS@dk*#chuuiS@k?51u8`toWVM<%r0D-@y3vE m;EYzW?5ab8oiMO78HW#@Dm$~cNK3}OAYsm2#`3vhrIaD^gakL> zGO~vRiVWnC;LftJr2xuI Z389kI}0Igs+0EVval5v`DijOQR1CWTKZR? z3!nM3SF3qLEhjBJm%*MSb98Qly$jA7s(`_U{GYsmFJ!Ha8vr|1=#go8m$iG<5z)e; z>}|W_omXu@xvvK`zmqL&xq ;Kl21@6fMCGH~&A#SS8Jijb#g@rz9GZSUrX*1Kmx)|yz3f8rThD?GWm+|_^;EmU7 zrOBGuDw-vSgPu^o;3{ab0EFf@T0^iM)S0f1V{>4rC 0C%Rn(hpip1KMJO+ zuZ4e9>-$Rz9Vq{`RQ~HAe7+R^p+sXP{ P{{s>D=X(*TJQJ!745;==gX#|egk%B*mD4v7*2&>{Jc$8X9FK;5!^u1Pi`&)h zSeZRrzX8@E9>Pi2JF4B;z6PYfKfI-)i1FE*`uk1KY?x|I^cwKl oIx^M zzv!fZ`+IrGaV2BTbaGg%drgE%t}&UU&VZ_X*1ehm6&+W}th @T~%haRV{}+Ma$7uihD#VPhX{~vd!qbYf|HJj)E`fLNhkrQi&I9lWY@aau zQj&!n*8haRJB{d{an!fKMEyXoD?2+I7}6VO>wm%5?uOTtmi-YfOB_lRT7pz?%W+M? zp%|cm{};XunFa0WL=VoXf_Lq2hD#S)?Po(*iEg%qghgAm_xiWw!u7a#;1t~P*AS(! z_#gg2Pyve$5nSr4?&~!Ldq8s<^6*XrL*@ZwF1r^e4~iCl2Y!d7#WEaNu+subi+hZj zXvuLk`h!S$;l7xJwW#lOw}<-+re|jR`vtD&Y&-`~UQ@pp;obj0_{V4PuLFX=4urpM zsvji&xfK7Ypt}$GFkm(br|?k)ZwB~4kFy+q`()s=Zgo7H!+pHVIhJE&_P8IB$>Uao z`W_X* Mf85l}?Q;LtMn;h?_pe}hhRZ$wNrn`o?509R@LLpADSiv$*L3ohGQf({)7jl^ zxyhE>Z()*QC1bsGGEiOZwG5~Tt~L`_XELCo<0^$^ZCCqg46sNnTb8RW$zZv_3CXVn zS35@K*MEtc&)2TjJYR>W1-aU8<0*XYDWFh{uN|05-`Q@$dzP~uT7>j )linAR) z{TRC9CV~Q)@JToDHx|S|F-&VWY#l-w4Y=BB4=~s!l*yd}#xuNxUO}8}ImzD$7(qG7 zZDXdKPO?c5=_H4!R)mw>M|g#k{8Ic&ILYEKo|7ElqdX`15h@sKXG%-2aC^zSY7=n0 zZPvu}NJckVj>_ )$p9UF8tLo)VX$ zKH{QwOT6RLC%51HVH-249xA~J`2Y;h@S8u!fQsORD5#R1kb|SRHht)?Ge9IcBv#7W z1}L{b%_PrH8EdDLhw4v1z<{cJR^Io5QbWK@tQ?cNK9m6#iG9oRr{#hzKbPlE$JmAX z`;m>D{`70%X+i#Uf{_&t^<#iUF%Gr1sJ=&i3cP4})S+cakNWk7cu+j*2g6MRzL`g# zxd%s0Se4{(fx@|$Tz;O{ny$huVSvTrE-O4p%~mn-pZSJba79SY?Md+^NES z4R}edZ%{*tL1Ab+tIcp=(>`!S2MHhI0QKTAB8DvjCvqU=S9sa6V)%2X6{JqApysYX z8dXqpsxec}pvII58PtRXr--2DQiN9oHJ9OEBB&96@q(HFALRu#Bff~k>9g?>i&1Rj zER0bs)yW*ztf7Q8aFjhNX EVHg>!?daO2MAxR>%(@I2SX zYLQ{lwJ udkmYkH4>GxBHg_zfR&PZen@zEwzu8>* zyBRAdL>-xEBAR{;CG>FyR3v&>(W!u;G$M>dh%jOj;j4`0(uqJVxcfc>s-nf!P8t|| z@+$_2`S`>Js5GX58e^HQR8^W=Or}}*WO`&?KGQ5?Kt*R7OUtE{1+HK~RX(oPFrcF2 zD%l<`@x2g}xgO5|jU-rBer2gLhygsM$yJI)ypXYUI yCSIGhvlTv;g11yqISt_rfYG~ O#!`3;d%{zsruOinqJ%kY!R{{(MZN#)Q&WKwyD;Xe|R z%A1ah >7!x<*7{IaO&kQLEwRr(AW=BHF=ppIi~2CAZEnz#u!9u5sxM|X^R zCscNKPFOwS!I>v@xbV- I}dE=O1H53M>g4 z+Pk5XjfL~N>0yII*L~OD2?)FI`q%D#C^L-wmkZKIR!(|*AkHc${V&E$IdjscNXeXZ zNbZWrN>(6*=jj;9nvqE&k%=qyv1Emy>>+tj*dwR)w9R>Q;5Mcc%RGNPG@^G q5tN&mfLoq z);ISh)w>@~rv# d0QF^v8DG0v^ZXG^MnS<; zR--Edt5*P2F@crCsQN+H&G3~KWQ7(egRK8C%pf7i>OVQuc _@{m+O*!8Xciztxy2r_*kdNILByIu_xy|1H8Roc4F& zU&3h@fAO6503YQ!?Q3g0n&_?jHwk5_CV9BSTQ`Tw?53~F;-*K&X87mFNB#5YkS@pk zp!gT1M;?7>2+BVh>|1)7$!F~8`mdX7u6PugzLl_i@FV>a5^ sF8!T9ORXK4q9RN|1JDC`cReqz@CleG_)ZaF ^T@i8FTM%9m zm)(tjiMUMs#f!@Ve3TcLoxH2s?m%NsrtK5g(LQR7%#m28qka5A86lW;Izcd&EB0C( zc|!(W!LJ7Uf5KqO(xa`vx2KzXNBacm^EJB_W(`4Pl{>KdnvIJh1FJ8=@QlFfJ_b|- zA4EZw?1R{@{I3~MkzA0HTzMuD_IVm8Tw**$Cj!-JUe17u;50LF zeL0#{^CU(0Y1u$IM&Bpy_zZdIN7ls z6f<7tNaV3u_JralU_>P=qZ>o9 e3TcPoLp(tpxrCmVMngr5H&{T z7$nnfh(9PJ?yzz?!C0 22++EQ#{3 FP=M3qHC6wD&Q*E8TEk;DoE6%@J41DS+) zA7jBq6T*(hKgob99~p`%4^%{;7UF%Kv0S>2vSc)+5br-3P|;a~imTr+prYd{S)VTw zHq+D`^DZpLJ$EW|TXRS#O4A%EHLZs-7EEUki)mA!I$ *h(TjF<=6fMEWaZrkqJ6lNd6I6rxxWNu=8m zUXet44gMvPNa8PE5-Gq(c}b+xDiaemJnX*G*xIR%!vR5CTfHts_u0})k8*5tJ4el& zXgWR1X19A9M(SyGbjv$obXPL!sMK#{dMe>PL)6}92terxt9RMc_1`wvHo+56>>Cg( zg;he| !k!%mDWx@gc*W-*Bo7ZFmTxuY1%r4xY~p{!y+MHf_yVN;^HQy5T{kE?STP| ;esyc^H|>|nI#`{D9RsZdQfgnbbEbtYTA2AmvP zm9Zd{gG2l$U3fTFR1{5AdON17O>pJ0Y#f6~xKT<(jrx8n|4h-gIAuqA^Io;Nqt?Xx zr69 d|dA}YTb{}NHT_=^{n2lyy2DqlAaM_aX~wsvb%RZs)j zV)2t4v3O*x%n|sbvqa$0!5MM)ifG(zjp>TEmpa~*F}C&85SM!lCN4d)zT2Lzf7e`# ztSxl O~ z7yyzyP;0+13Qq2gLndi{$yhm^G}Q3ve;7~^!Y3xKhAyVZ`*d6-vvJI3*pUpdNX%Q- zW|$;{71r=J!(t3W{X@t`zV5Z=c>_ExD11scy&`CO98fAIXtE5fA1a*+?^~f#Xi+j$ zdXph6gixtJ9Nrw0Mk}yH G%b=i2b{XPIYu~_ti{vv{4sTJVwQ9+hN13vN^nS*I2_9u8LfAV< zpJG6jj||1^Ai0Q;vV-(*jOEgaK;1$5F9uX}8MPQTWe4fE45-S-)%;6J4S_O=QA`N5 zlmQk=j>-yw O=5c)v_seU1SY9aqT=8{_?codFh!W6Sb>B^e6xeq;1~eK%spSFP4O zTj6Oz-mlwo3K#hIFjI^R9N0 wZXZgXQMMyt*3|AGLdQ0$wH*JL4s4FI`O}|=c z0&XFZrN*i-r-Zc%em@SNAXg{q&v^cQXzl7$3+{N<3kd<$ zn#N|2Xl>Qgi^A`H*WW%U42!9<;#j^s7%Ypq0z4b8Tp3A)q`Qbn>aa^;0V0w*9RCuLl=zDmNd@>QFOpi `j9#LucrP;;`|S3P&Xy4` oAs02)Z&+V~HcM?7a-E6u?*`eu<6rT;`9MwEF5mprY;(f1d$W(T3{S zcy^bbf{DamF~H5o@FUrrAO&nuEKeol!pq2xaGg#@OP8i>^)F*UMHfUWu2wLhqT?!A z!^b2$*D$~$v9{%#Ng#@1S&KPRwDj4G_0pMx3e|-Jfr`qqTNqH$S=Pc;ig@p2Kt-n@ z6<0G1sOY#Ni}#HTu;!3>TYC(=N}iYuO8pG9>CU~3li+DVdl~6DDzT?=H&7~OPs7Sn z`Fk60h4-z!jnJax-o|Rfb0O?)^uKqZNXb_kqC*=SzauFgEcU5PPvh-haPC+5axZV9 z*T#aNAPWwueX%Jq6dj_{h7AQ6qXydo*oNJnsJ2H$%Xj$6bi3AqS|U7MES%a5zU;P! zrr~|;DBoRa?8K>qGyDCB!Rt*+IN{RYZpG@sc*w8TNMQbLL0ZAe_YVg`rSko6H)hJ2 z?>CuQ=KDh&UqrtDGYGH9_kR}u68V1d7cbu*;G?{J|4F@ewu^_4cJz+G_nGthtFknY z;DC%={vm!mCKXR-RE*=w-!BY3m65Ob#bERA8_ZXFp8mV`bp2cAS_4TyoY)SMLaL+g zxA9P9Zv59UJR>*0;PO&qRRvYDgJxGp9n64= aco%$14)L0B8nJYU;h>AJ!eGmZ}7CBh$7xniYTH9 z)QO2Agl+UAhZekJMGhh0W#sTJLyJ=)hl{cN=<-W8ilc#{uBp1K*6MW{Gi%z_9kAtF zZG*EPxaAmEVC>MHnT8XiTJQkw%nH1BdE!%~b)bat4Yy%eK^$&*$KMPXM0v*@W2T(m zu}LuL9fzn|gm?T>gjaaSFT=ltcP#$mdB*`h%JYs-X;-HkmGSD 5OGi8I1w(+|YOr H2>?*Zl4{ zr24kPDv>GSSm2M?NGj4P{~!#{aLWIY0Tsc=QBbA$ICjCxzcIkd=i?Mxu%gy&`N1g# zD?ei_o8Sj$qJ|wJ{gD9`i5Mk?NG>9zY)~Eebb6dhCjxbQ;}`~1bV0QkHf1YlH3O>h zarIaRRCHXWC^h?7;PV+^k>seXz)cELL4jM0vrzv4Y8c-bTl2gQo)#3iW%A2J99IQm z#l&%Ou9qLyZHG^+ur9PT8P>hQ(58g2ZqtF#jB&1Vp>gY{IU_cOCaaw)Hm|@zx!oCW z8v4Fr7pB%|cu<0_+C_v1jwk+(dfo*p-os;mVasQ{(VGC5eA~7YPCjAVwky36PkHG> zY6>-S4PHtbwF#GnKp)GqE7(TjRom@WyCcI$KmLT{f~Om;8F}z94mH%SUe&9?29$Em z@CiT!0V+hG5SI3)C$R0N)r1|c+IAmA4`S8nN(T-R4x-Xw=@xG)3pr*j(o}*N*Y6yf zH*fWGXRn g}V)!>$uY^5V#ea7I7?Rx( zT41ub! m3(c9< zFcp@ZF{IUsNNc 5HHc+208a59dl-4B0P9wG)0|2*jrhHZ46(@o{^){%hu1nj(xu-y^cp z6OWVU%*lJUBbRUcnWrt#o1_0$jW@m-8m?QO{s#Y kB zXnVVue}=K<@|omo45;W#LKUd{7*Lgut6wvqqT?!ApkivT9%O(;5~i|J_|lK0WSQy* zEdrN*Df~m_6o0V~{P!|UI>iLi^)F+@;|HwPJRgFm1*Py4a}y$UfBdG{)O|P&;iv3Z zz^hiuKC~3M-j5p593f@je->ohA%VWDHi2g|O;pDl&?XU_KUMX{<;g=(nx$Jcpm_q` z5!dEn${e#ycoQBT>?9AE@}EWyYbt#*!>pVHn4<=Kagw00ualV{2^dKwGglfj n~%wo*tAAxq&I`Sn4jLX2X!Sm4|csOvu5^VLufV`tXz7+^D=w7{_E#j!qY~m zZ$+%M=l)}@RwH*NbEl1!A~TsgV0cC*bA|yG!QoL*r8qo@Uo%N?BLl2BHSat*$Vz1H zBY?=AAYhW=4#s-vWT5)!Z(~43@X?vL`XB=;I<8V!)-JQTmjM=uWy|u>B^fN=IbkO_ z!AFnL{q^mL8DG0v^K68t1^MV146N|f{|ly!DYCJxsPC`;5I(T{_0Y1UzkV^UGuVuv z`0E#gzuu{Ku@B<1cCRXrQ&kQ;)U%u?y`!mWcd~^?%|ek)v(?2*t;gZ?Jm{*huH+7C zRHT1U!uW=R@e5<+nH-F4=ZIc}0}IwsUinXrnR0sNCc&gv9-?XyUim)HfCUJzd=dU7 zymIju&npk`QJz=+Na>4DY!&AV5664kUZvY@*T#C?>gw74%J_Fi!vkgZ#vhf%8#hK~ zc;dkkP`)Q_4(Rg24~TnBN|^b`5RMf{_&_aW5{^8lh8|;2*S~YFdEX`?ecNDp-b?*0 zq}<;3IvXoRdf%fkJj44wivbnEl~GV7yE2aa{YD08BzMO0z%?Mby>KQu#u#g+lY{Do zPcxt*c;QT3UB`fmj;mzWjmebv8DNpvwk$7PlELzhd0u#o4XCd{%=nttn&&WhT96l> zVqAp>{&tuy#sfF4sPBEh175bg@6d9j_kAR;FEFzd@B3=$edqVOhoD@%GhH38ZO3zs z{CqhU=8jeIa3W>(Jh(n#ceT-oIO%&148vV{pMl3r?n*Xa{s gB8)#267#5&$EQXBVVWC^bPu?|;W zjFZ`if8CyTH+|6yj*$2Le7O!r#BjUsi5epfx2C(DwHw@r(W|$W`#R#``|C2lzuH@K zM(Wsp{p_&iJwJN$X)C+ctGgS#Rg%uD&KU7dgSMOTt)1GAt(|G;kKf=0?|7@uI3uVS zQoSwv$`8%t>< s{$^nQC_3ir8)2?WEMqGd>TGyHdQ6AG@Zcv|@kmNZ{wfAk zgm^?jMb#sxFrXsn5d~G0l82{}J~@C1@*5Y*Yp_f``$Wc)NU@9+g0E2K-(^4ZpRs?g z 90Of+R3;wVMGI9aqVW9TS q_;7sNI=n><*F<}Ofg9x zWI#m_L 5mMk2$I0W)#A lU>G=!5euNAXk z(f&kl97^>oUbDK}^5R-!_3C)nxUw0x8@h1+vo6Shs(n0arwRwxh?K&%Z9{mtO$G08 zhN~88q0fUN4)KkAf8DlikPe2dF`R|7s|vR-Ojf6YjS7_&yrg(wO)qmYLCCDLZuScn z8somMH3yzf7}$}^O3J0^^KKAgAh rRno1k&l48)3AbHrtT-XPYzJcenETvpQZ zERB$`>#3wrH*Wkp3SD?xscNhjh!T~xyU%HLCruF%=RXM%sWc}-k5C!{=@Er@P;}R8 z%Co8_;8-g$6bM|vgLsL_kQSx!N)zk!wr#_LQF+i62;uI@+V~_C@4*RLc+Y!C4l8gj z72L|+g0qsNQnz0Kw#hiJG1hD5XLAY5UndNlOIQ$MUs#rF{Q9WRzr0Lx@xDPU? ik;=}@Jr@(t& nGN}wlV05~ zZhh>2rU&{_sDeSaF=ULOaHRs5c|nOe_?WGxERfk=Yr@@NyDE)dRhFWIc?-XVw|`+< zA7UTI8xn7-Ga0KDFni#Y!eHQX3TJjynb39(=mi7o={m@tF<*#ThYUMB6bMz+)_-I# zURAIt;Z^R{D=|dmsPaYR04XAe!A!KkR*Btu5Dq!SavRus;BsQ+PE?L|URs-)ZoqAG z(3??dOF>cWuie7o+GuqYE~LZj@;W0Pi0oLk4S!%0T4%MCD|I}n5K1XTL*jmnz||ae zvweMVK=@p$V#A}|Gn>|Pt&P~ABHQJ*W^xHmO&B IDabomCPj0Npa+AbIi!2{6Yxe#Fq6~0_H?TQnHmWGd}m|ZHhqjD2997p8@nqr z;C;aDHeis4pzt$f-$uOZt}0|?w#&1ID_#e*0cZ|oTj6E@42J|s-?e7|ib(yjNl=*l zF_plSmfRm?qST*N=2^lgYZwNmmoNo`U38WQVfQt_Q;Vc;b`%vPLWfBas_g+0T7S0R zJBCMlLncP@`zp+ktdgeB?`~{OV<9!>ArmCv6xMhqE1eoY#(me{hEUyi{q0V;Ov=5w zSk8;favdcpcT4${qp(_k3C10Gnb&N8-%7hORvU*u;0*TdwX0_*z5c$P-gf-659UJo zSO+7nmO&o8ZiacXc02H~p0YnkT*R&4v;@wizYMPrQ$4XNK3DCqRp2T}U4sIZ<*RGd zTaDUIOvT0S5y( t41=jfYI`{|@f|r49fOcFk38)`> zo$B_UI1*oE`+(sAu&T-rf(`ekDl_5ypx41Gl~rGF+nZ>Cfk9ztRzVJ+J9vDuI=)l4 z`(g$$nkIZK6E7wse;|R8EiJt&BTh}3TbY3lCQu(s04kSW$JP3JeMJi8O^`@@gS=oe*gbvEa&3%Jd^b%hjb1W)*p6~uaEa@>UjbeCHNi?OH zh=h#RF>!W)R<^H3e{hL!RLsp-X;eZxw$9Oq`wOOLz;;QSF @6An_Nk8z``MkW*k_Rj>QllK`5a4^FQ8O#IESpLdKtTz}1}kUv}mXT^0o?q%ak za@i|`WsAQk%YG!D>30&CejV|D1%8T4R1z*B=`V(xT-tDB% ECY5 zG&~JEeobi6@r|Ks9`H{0(DNMeL%{Y1?;?4iU)%L2c*z||tZu-xk{)H%Dj1{DgXHSg ziPr9Bqg9#M+G{r=Z{b|4eLG}#60OsnL;{2KMk2*lhGIDl8OViDYB}C{34^(O1420- z!b%fNt3*a0WcfH7*8VHY?wP9zNf@1;*${WahI(r7=4_xc>dT=nD ?mXQH@ z@T)=QXV|L^rR6n)=KTgW&ft z7GZ3{-nwueWEkLo^`+pYY?;koudX3VIK^aRe+lSe>1l0Lo@*}<^t&ZLQ7QLv#-a(7 zQ&3r4o>Gwh1qM_EE@$HE+YG4axJu^Tn9`4*Fu*eSHjQ2B1?gE>)e%uJbSRbQ7d{I_ z)Zs!pd<#lrfznoA-`Dhh=AUjF9r$lU{VZcZbsx-;*th$y@PZ6Pn3{bB11bW~E2!>| z;7W42sydN2I)?GrFkqXv*oCqFA)VgzbgSLn+L@}fyI1vET?h(qQi^r~X!bB7UECWd zSeD rvyl#2> VQQNp!ed52N z5{v$?hNrW1E8Y1gh~@q;Jj2sDjsX=x=_{zH%Hk0Ws0ad}po&s+NN+{>1Wj{p7Q!c{ zKXW<*^f>;_?#~Dq*e=Yel5eOKx|p#{0)-S*R2OC|11bVHGjTP=fQpVQvJ3MZ23RCc zE!u^V=yw?bx~`=1{H+Xx5$LG264ixyBLgae3&Ygl?`A+n$5qsYS+HuAueqfu#vcqT z{BZ_c`P~ K4A2^HOaIVsz|xsM+^adSw_0RGz&o3U>g==}x*y#&Gi8Vt{Ha(>8w zieMHLR8)0xKLaX)h$yH^adP(EM)zgoxO`Af&H{iJ_=ZZMqZ!L2P)I>Vb#jIoP!YJ9 ziL3PtsOY#NJ2~euz#?&K(N2y;zspq6btRSOpT$5JfsRTmQJtIy11f@(!_?r 1{|8{LdR^>wobdseQg5LE)t=e+`v?$&J5LaDZUj80^^p!ndLNwosdVr1PY|$tV^R zJz#LGzz%E!gu;E%*xsG2bVV0@8?Ft-ZjQ0)WMx+k8cN_LXqAVv3b2=>-D`GhQ`J#b zdS^O@ 3A?)KhAv8AG!!S zpP+6W3UN(ph94OC|C9lRSrYB4Ur50Ju|eDVKj6SvVI8V{M2BsS39?@0I>&?IXoI`{ zBq|!$%Yr;_Se9E?8k_x6 P`y1mkCbOR}ZCMpmf z=%JGG;SE BHeL6LtimLg{c6!{hm z3 xsed+B`rCv#8NB!OV5PqnE2Rt(j#^~< z#s1JaSiO3>Q5&yyXK(5+hW`}Jh4tw1i1pv$GOmKjUsP`+2*M 4!%k?dt+V177{JLF8l00{bW!n0B;A zn8@`d@VUsaXCw0QxQyIHe!fNIEhdp4Qx>+u!asktIccKo3w5!`yYKp2JnC1K^7XC3 zYDw#`T)~Vd{E7D9e #j8Rh^I?5pFK3z0n<8aeb zt2yeyfke$#(AEPE zb|tCE5V0@mmhh!zVM_s&*%I1iX9io_j}3M8+On4Mnt>Aiu0n{OY8l^O7Pi95AZi&C zb%E0|rhheSSjK@WZ8%EArM3<3Oj<-PWBLp-cjh*xuT<4Lp}-J|JZ$r+UK1u#nIvTs zeFLRBS>>@Y)vGJxT{!ho1c~a~q2Q2Ju!LxaJJt5C8k~HMX_$}|_5-BhdelZz3Xr~E ztWanR`CUOIN34hs2W=sLpD-uIyjjuDZ^cR}L*%iL58yJgTS!F)vV}Zo%uON6QY~yL zfHGT1QOIN%MZ3J}__BaK1_mBngy`Wia+5aI4z4c?TVaup+QCGLciO@9uXcy+;2^cH zVd|3L%w_7nMb<63P2JC9Dn8Q8-sP7(HLJ-Jrp`acVF*5y$CBY$xXJboj-`T3sxXdt znp(RyAx$C<(P{PC;}}=ATT{YLPPRH-KeQYXhk17 W zHLiD+1?-&zCG8suA#JL0{a{(x3X6QyxF$-x)3~O8b#K_X?!7wR(8)=w&Sk1MliAr} zsu@tM4K}X6%uO_p1ViAyEA5;hwU8r%A^x5V#qwYXb939=tg4rD($*?}^Ed81Eq$o~ zoVayN+#926gEsEqt(evHhvN=0x*&Ymmp`I7_XiJZ&wfPLq45LB?ZIK|{2+fH*>G_D z9}W2#8h3ja4l|wSD)oKs>GpJCMm%PNqnUmgIV{b6E{s* b&cO>lO_cb61y;ov?KXiOf{4PI} z98Y7cnNALibyJSe+01~deAcZoprYd{nRR1M64}iFi^R6{@?;9jQv4UI&{Ll<7^C^? zM 50F51!_!&6Gu%Sf1H;m`_o#`D&P^A30PnsLoPXaMo{wmy}zii#S8z%OcK& zxSpUQ2b8a?h% ^!>AgJoBFTjBX z3#lr~JB^uW* 9rp~c*UW;AH=`Jp}pcS%IUSj z9~HHg0Y1>bEXS{29qfG#$N9~MXMJ4U8>9XJvsr!XlQa0%YSUC65lZu}50ChO!B8&$ znpU>*WrHO%F@GK(`wRAT{n GraBJ zFrXs1EDEY*mnEetW!^;CsAb~bSk;}~>$U;P?R_)Jb0}l&bn;lNoZ@|-z<`S2eKT?O zC S}UU5R1YJ&G2V-xD%L*3(RU~8Vw!qbAhZ>M<`{`a$h zK$icl4Xp2hZ-v(^4?MI4>4E=~p-(9u_$$N7ao<6qmCbtD%4Xp%c3Ro2blD3i5#s`w zwM1-tL9%9f`TrQOs`B#3jhS+K`6kmyFF(Xt&g414%fA-k6<+>z_?PhV#a}!xKfp(M zUjDGEzVOnW{9|LCeD!^1AAfbakM9r3NT45Px}d>GE)Snlba$J fp-~JN@R0O}BiK{;_prYd{nPFr6_C?i_!_Km@=8_DS zKh5*oV|0D}El4n5wOaGM44xL`x4UenaN8da^s(Ibz-szl`$_PY<+X i1$p#YY^?C^e-3k6-hHeM^*#Mxz!#RMA6l67^f%#3 zSrsy02 E z2#tzL{@a)-XH;S`s*FlP++0Ldvj28ifQU*Cz`sOPBL3n_Ili%LeOs_h-s;nj{k zfle0=lo|KrHRVuNe{@{DGAhQ%9Dm%lXI)~sRX1veCUOOg5a%T^;|#+Yjh(d{yz3OQ z;$~D=kdEL 10ee^>X)#o4LZ+;w`-m%K)$>KzO;5U8r4vLqm7zwd1fs0b3k#MK8G zP| h_hLXN zDD7B71Rf;A5Uq FrXrcp@NF4vKH-dd&31dunMYy z8KNT?%ZX#@>{a4^({?$A=nz;BW3S*53^WjwtAfgsfD}V?Dg!El1Tb;+L 5vfo9BlY*Jn&uxQCllH`E@RoUD! zU fCSQ`NhO!X7RQ3EE@-dg5W~k&X-9cS%U!TYYj;CsGSq%XKT`ap zGM}^77Dp)4AQ!#Da5un)xSD{6tuEj@#4LCc_e5{J+VLu0v${LttF^}J)$y)8ZxoA? z+SSf9{7~Cf)s-L}yw(LDZrdi(1>3ek&jF<5nsDrBt?AW5p9dYP;v4z?x^3Gai3{Q0 zgoj77;Yd@Vn=Hf;4Hp#+s_99-H9@TEcfz6hp{sHF`vuDk1X`Yw6q74?SHi$9w<}KL zDL%LZ&+ivU!Xv~$Y%%ewjOfn4W*}9}nj>!cCkL_S