PK ,Aoa,mimetypeapplication/epub+zipPK,AiTunesMetadata.plist= artistName Oracle Corporation book-info cover-image-hash 424683964 cover-image-path OEBPS/dcommon/oracle-logo.jpg package-file-hash 75203052 publisher-unique-id E17123-03 unique-id 859207009 genre Oracle Documentation itemName Oracle® OLAP User's Guide, 11g Release 2 (11.2) releaseDate 2010-08-04T11:18:40Z year 2010 PKx?zB=PK,AMETA-INF/container.xml PKYuPK,AOEBPS/aggregate.htmH Advanced Aggregations

9 Advanced Aggregations

A cube always returns summary data to a query as needed. While the cube may store data at the day level, for example, it can return a result at the quarter or year level without requiring a calculation in the query. This chapter explains how to optimize the unique aggregation subsystem of Oracle OLAP to provide the best performance for both data maintenance and querying.

This chapter contains the following topics:

What Is Aggregation?

Aggregation is the process of consolidating multiple values into a single value. For example, data can be collected on a daily basis and aggregated into a value for the week, the weekly data can be aggregated into a value for the month, and so on. Aggregation allows patterns in the data to emerge, and these patterns are the basis for analysis and decision making. When you define a data model with hierarchical dimensions, you are providing the framework in which aggregate data can be calculated.

Aggregation is frequently called summarization, and aggregate data is called summary data. While the most frequently used aggregation operator is Sum, there are many other operators, such as Average, First, Last, Minimum, and Maximum. Oracle OLAP also supports weighted and hierarchical methods. Following are some simple diagrams showing how the basic types of operators work. For descriptions of all the operators, refer to "Aggregation Operators" .

Figure 9-1 shows a simple hierarchy with four children and one parent value. Three of the children have values, while the fourth is empty. This empty cell has a null or NA value. The Sum operator calculates a value of (2 + 4 + 6)=12 for the parent value.

Figure 9-1 Summary Aggregation in a Simple Hierarchy

Diagram of four values summed into one value.
Description of "Figure 9-1 Summary Aggregation in a Simple Hierarchy"

The Average operator calculates the average of all real data, producing an aggregate value of ((2 + 4 + 6)/3)=4, as shown in Figure 9-2.

Figure 9-2 Average Aggregation in a Simple Hierarchy

Diagram of four values averaged into one value
Description of "Figure 9-2 Average Aggregation in a Simple Hierarchy"

The hierarchical operators include null values in the count of cells. In Figure 9-3, the Hierarchical Average operator produces an aggregate value of ((2 + 4 + 6 +NA)/4)=3.

Figure 9-3 Hierarchical Average Aggregation in a Simple Hierarchy

Diagram of 4 values hierarchically averaged into 1 value
Description of "Figure 9-3 Hierarchical Average Aggregation in a Simple Hierarchy"

The weighted operators use the values in another measure to generate weighted values before performing the aggregation. Figure 9-4 shows how the simple sum of 12 in Figure 9-1 changes to 20 by using weights ((3*2) + (2*4) + (NA*6) +(4*NA)).

Figure 9-4 Weighted Sum Aggregation in a Simple Hierarchy

Diagram of four weighted values summed into one value
Description of "Figure 9-4 Weighted Sum Aggregation in a Simple Hierarchy"

Aggregation Operators

Analytic workspaces provide an extensive list of aggregation methods, including weighted, hierarchical, and weighted hierarchical methods.

Basic Operators

The following are descriptions of the basic aggregation operators:

  • Average: Adds non-null data values, then divides the sum by the number of data values.

  • First Non-NA Data Value: Returns the first real data value.

  • Last Non-NA Data Value: Returns the last real data value.

  • Maximum: Returns the largest data value among the children of each parent.

  • Minimum: Returns the smallest non-null data value among the children of each parent.

  • Nonadditive: Does not aggregate the data.

  • Sum: Adds data values.

Scaled and Weighted Operators

These operators require a measure providing the weight or scale values in the same cube. In a weight measure, an NA (null) is calculated like a 1. In a scale measure, an NA is calculated like a 0.

The weighted operators use outer joins, as described in "When Does Aggregation Order Matter?".

These are the scaled and weighted aggregation operators:

  • Scaled Sum: Adds the value of a weight object to each data value, then adds the data values.

  • Weighted Average: Multiplies each data value by a weight factor, adds the data values, and then divides that result by the sum of the weight factors.

  • Weighted First: Multiplies the first non-null data value by its corresponding weight value.

  • Weighted Last: Multiplies the last non-null data value by its corresponding weight value.

  • Weighted Sum: Multiplies each data value by a weight factor, then adds the data values.

Hierarchical Operators

The following are descriptions of the hierarchical operators. They include all cells identified by the hierarchy in the calculations, whether or not the cells contain data.

Hierarchical Average and the Hierarchical Weighted operators use outer joins.

  • Hierarchical Average: Adds data values, then divides the sum by the number of the children in the dimension hierarchy. Unlike Average, which counts only non-null children, hierarchical average counts all of the children of a parent, regardless of whether each child does or does not have a value.

  • Hierarchical First Member: Returns the first data value in the hierarchy, even when that value is null.

  • Hierarchical Last Member: Returns the last data value in the hierarchy, even when that value is null.

  • Hierarchical Weighted Average: Multiplies non-null child data values by their corresponding weight values, then divides the result by the sum of the weight values. Unlike Weighted Average, Hierarchical Weighted Average includes weight values in the denominator sum even when the corresponding child values are null.

  • Hierarchical Weighted First: Multiplies the first data value in the hierarchy by its corresponding weight value, even when that value is null.

  • Hierarchical Weighted Last: Multiplies the last data value in the hierarchy by its corresponding weight value, even when that value is null.

When Does Aggregation Order Matter?

The OLAP engine aggregates a cube across one dimension at a time. When the aggregation operators are the same for all dimensions, the order in which they are aggregated may or may not make a difference in the calculated aggregate values, depending on the operator.

You should specify the order of aggregation when a cube uses multiple aggregation methods. The only exceptions are that you can combine Sum and Weighted Sum, or Average and Weighted Average, when the weight measure is only aggregated over the same dimension. For example, a weight measure used to calculate weighted averages across Customer is itself only aggregated across Customer.

The weight operators are incompressible for the specified dimension and all preceding dimensions. For a compressed cube, you should list the weighted operators as early as possible to minimize the number of outer joins. For example, suppose that a cube uses Weighted Sum across Customer, and Sum across all other dimensions. Performance is best if Customer is aggregated first.

Using the Same Operator for All Dimensions of a Cube

The following information provides guidelines for when you must specify the order of the dimensions as part of defining the aggregation rules for a cube.

Order Has No Effect

When these operators are used for all dimension of a cube, the order does not affect the results:

  • Maximum

  • Minimum

  • Sum

  • Hierarchical First Member

  • Hierarchical Last Member

  • Hierarchical Average

Order Changes the Aggregation Results

Even when these operators are used for all dimensions of a cube, the order can affect the results:

  • Average

  • First Non-NA Data Value

  • Last Non-NA Data Value

  • Weighted First

  • Weighted Last

  • Hierarchical Weighted First

  • Hierarchical Weighted Last

  • Scaled Sum

Order May Be Important

When the following weighted operators are used for all dimensions of a cube, the order affects the results only if the weight measure is aggregated over multiple dimensions:

  • Weighted Average

  • Weighted Sum

  • Hierarchical Weighted Average

Example: Mixing Aggregation Operators

Even though you can use the Sum and Maximum operators alone without ordering the dimensions, you cannot use them together without specifying the order. The following figures show how they calculate different results depending on the order of aggregation. Figure 9-5 shows a cube with two dimensions. Sum is calculated first across one dimension of the cube, then Maximum is calculated down the other dimension.

Figure 9-5 Sum Method Followed by Maximum Method

Results of Mixed Aggregate Operators (1)
Description of "Figure 9-5 Sum Method Followed by Maximum Method"

Figure 9-6 shows the same cube, except Maximum is calculated first down one dimension of the cube, then Sum is calculated across the other dimension. The maximum value of the sums in Figure 9-5 is 15, while the sum of the maximum values in Figure 9-6 is 19.

Figure 9-6 Max Method Followed by Sum Method

Results of Mixed Aggregate Operators (2)
Description of "Figure 9-6 Max Method Followed by Sum Method"

Example: Aggregating the Units Cube

This example describes changes to the default aggregation of the Units cube in the GLOBAL analytic workspace. These changes take effect in the next data refresh.

Selecting the Aggregation Operators and Hierarchies

Analytic Workspace Manager initially sets all dimensions to use the Sum operator and aggregates all levels of all dimensions. To change these default settings, use the Rules subtab of the Aggregation tab.

Figure 9-7 shows the operators for the Units Cube. Time is now set to Last Non-NA Data Value, and it is aggregated after the other dimensions. For operators like First and Last, the order in which the dimensions are aggregated can change the results.

Another change is that only the Shipments hierarchy of the Customer dimension is aggregated during data maintenance. Because the Segment hierarchy is seldom queried, the Global DBA chose not to calculate these aggregate values in order to save maintenance time and storage space. However, response time is slower for queries that request Segment aggregations.

Figure 9-7 Selecting the Aggregation Operators

Create Cube dialog box, Rules subtab
Description of "Figure 9-7 Selecting the Aggregation Operators"

Choosing the Percentage of Precomputed Values

Analytic Workspace Manager initially chooses cost-based aggregation with 35% precomputed values for the bottom partitions and 0% for the top partition. An unpartitioned cube is also set to 35%. This setting means that 35% of the aggregate values is calculated and stored during data maintenance, and 65% is calculated in response to a query. These settings optimize data maintenance.

Increasing the materialization of the bottom partitions improves querying of both the bottom and the top partitions. Increasing the materialization of the top partition improves querying of the most aggregate data and any other hierarchies of the partitioned dimension.

Figure 9-8 shows the settings for the Units Cube. In this case, the Global DBA chose to keep the top partition at 0%, and to increase the bottom partitions from 35 to 50%. This change increases maintenance costs in time and storage space, but improves run-time performance of all partitions.

Figure 9-8 Setting Cost-Based Presummarization

Create Cube dialog box, Precompute subtab
Description of "Figure 9-8 Setting Cost-Based Presummarization"

PK-IHPK,AOEBPS/cover.htmO Cover

Oracle Corporation

PK[pTOPK,AOEBPS/whatsnew.htm< What's New in Oracle OLAP?

What's New in Oracle OLAP?

This preface identifies the major enhancements to the OLAP option of Oracle Database.

Oracle Database 11g Release 2 (11.2.0.2) Oracle OLAP

Several changes in this release make the powerful analytics of Oracle OLAP more accessible.

OLAP DML Support

Analytic Workspace Manager has improved support of the OLAP DML, which makes the powerful analytics of Oracle OLAP, such as forecasts, allocations, and models, more accessible. You can define custom calculated measures using the OLAP DML. You can also create programs directly in Analytic Workspace Manager instead of OLAP Worksheet. You can invoke these programs in a calculated measure, a cube script, or a maintenance script. The OLAP DML object definitions and programs are saved in the XML when creating a template of the analytic workspace.

Several new OLAP DML statements are dimensionally aware, generating all of the physical objects used to support cubes, cube dimensions, and other dimensional database objects.

Features in Analytic Workspace Manager

Several changes in Analytic Workspace Manager support ease-of-use and improved user control.

Oracle Database 11g Release 2 (11.2) Oracle OLAP

In Release 2, the OLAP Option to Oracle Database 11g provides numerous ease-of-use features.

Upgrade Support

You can easily upgrade an analytic workspace from CWM or standard form (AWXML) metadata in Oracle OLAP 10g. You can then incorporate all the features of Oracle OLAP 11g as described in this Guide.

Improved Manageability in Analytic Workspace Manager

Several new features in Analytic Workspace Manager simplify the creation and modification of dimensional objects. You can now rename all objects, save partial mappings, drop or modify dimensions, levels, hierarchies and attributes, and use WHERE conditions in mappings. You can preview the contents of XML templates, fix duplicate names, and modify existing objects by merging them with the template definitions.

SQL Aggregation Management

SQL Aggregation Management is a group of PL/SQL subprograms in DBMS_CUBE that supports the rapid deployment of cube materialized views from existing relational materialized views. A single cube materialized view can replace many of the relational materialized views of summaries on a fact table, providing uniform response time to all summary data through query rewrite.

In the process of creating the cube materialized views, DBMS_CUBE also creates a fully functional analytic workspace including a cube and the cube dimensions. Thus, SQL Aggregation Management can also be used to create the initial metadata for a multidimensional data store enhanced with calculated measures and queried directly by analytic applications.


See Also:

Oracle Database PL/SQL Packages and Types Reference

Build Logs

OLAP now provides several logs: a build log, an operations log, a rejected records log, and a dimension compilation log. You can view the logs either in Analytic Workspace Manager or using the PL/SQL DBMS_CUBE_LOG package.

These logs enable you to track the progress of long running processes, then use the results to profile performance characteristics. They provide information to help you diagnose and remedy problems that may occur during development and maintenance of a cube: Hierarchies that are improperly structured in the relational source tables, records that fail to load, or data refreshes that take too long to complete. They also help diagnose performance problems in querying cubes.


See Also:

Oracle Database PL/SQL Packages and Types Reference

Oracle Database 11g Release 1 (11.1) Oracle OLAP

The OLAP Option to Oracle Database 11g continues the development trends of Oracle9i and Oracle Database 10g, especially in deepening integration with the database and enhancing SQL access to cubes, security, and metadata. The power of OLAP is easily accessible to SQL applications. Oracle Database 11g also introduces the cube as a summary management solution for relational OLAP (ROLAP) implementations.

OLAP Metadata Integration

All metadata for cubes and dimensions is stored in the Oracle database and revealed in the data dictionary views, so that you can query the entire business model in SQL. Use of the data dictionary to store the metadata officially codifies the dimensional model in the database, provides significant improvements for metadata queries, and supports other new features such as SQL object security for cubes and dimensions.

Automatic Maintenance of Cube and Dimension Views

Oracle Database 11g automatically creates and maintains relational views for every cube, dimension, and hierarchy in the database. If you modify a dimensional object, such as adding a calculated measure to a cube, the view is immediately re-created to reflect the change. Oracle Database defines these views using the CUBE_TABLE function, which enables the SQL Optimizer enhancements.

Cube Scripts

A cube script is an ordered list of commands that prepare a cube for querying, such as Clear Data, Load Data, Aggregate, Execute PL/SQL, and Execute OLAP DML. For many applications, cube scripts eliminate the use of procedural programs for processing cubes.

Cost-Based Aggregation

Fast updates and uniform querying performance are two hallmarks of the OLAP option. Cost-based aggregation enhances performance in both areas by executing a fine-grained pre-aggregation strategy and storing sparse data sets very efficiently.

Calculation Expression Syntax

OLAP calculation expressions extend the syntax of the SQL analytic functions. This syntax is familiar to SQL developers and DBAs, so that it is easier for them to adopt than proprietary OLAP languages and APIs.

This syntax is used to define calculations that are embedded in the cube, such as dynamically calculated facts or measures.

Cube Materialized Views

Cube materialized views are cubes that have been enhanced to use the automatic refresh and query rewrite features of Oracle Database.

Cube materialized views bring the fast update and fast query capabilities of the OLAP option to applications that query detail relational tables. Summary data is generated and stored in a cube, and query rewrite automatically redirects queries to the cube materialized views. Applications experience excellent query performance.

Object and Data Security

Oracle Database 11g introduces both object security and data security to OLAP cubes and dimensions. Both types of security are granted to database users and roles.

Object security controls access to analytic workspaces, cubes, and dimensions using standard SQL GRANT and REVOKE syntax.

Data security controls access to the data in a cube or a dimension. You can grant SELECT, INSERT, UPDATE, and DELETE privileges to dimension members (keys) either globally or for a particular cube to control access to the data in a cube.

PK Glossary

Glossary

additive

Describes a measure or fact that can be summarized through addition, such as a SUM function. An additive measure is the most common type. Examples include sales, cost, and profit.

Contrast with nonadditive.

aggregation

The process of consolidating data values into a single value. For example, sales data could be collected on a daily basis and then be aggregated to the week level, the week data could be aggregated to the month level, and so on. The data can then be referred to as aggregate data.

The term aggregation is often used interchangeably with summarization, and aggregate data is used interchangeably with summary data. However, there are a wide range of aggregation methods available in addition to SUM.

analytic workspace

A container for storing related dimensional objects, such as dimensions and cubes. An analytic workspace is stored in a relational table.

See also cube, cube dimension.

ancestor

A dimension member at a higher level of aggregation than a particular member. For example, in a Time dimension, the year 2007 is the ancestor of the day 06-July-07. The member immediately above is the parent. In a dimension hierarchy, the data value of the ancestor is the aggregated value of the data values of its descendants.

Contrast with descendant. See also hierarchy, level, parent.

attribute

A database object related to an OLAP cube dimension. An attribute stores descriptive characteristics for all dimension members, or members of a particular hierarchy, or only members at a particular level of a hierarchy.

When the values of an attribute are unique, they provide supplementary information that can be used for display (such as a descriptive name) or in analysis (such as the number of days in a time period). When the values of an attribute apply to a group of dimension members, they enable users to select data based on like characteristics. For example, in a database representing footwear, you might use a color attribute to select all boots, sneakers, and slippers of the same color.

See also cube dimension.

base level data

See detail data.

base measure

See measure.

calculated measure

A stored expression that executes in response to a query. For example, a calculated measure might generate the difference in costs from the prior period by using the LAG_VARIANCE function on the COSTS measure. Another calculated measure might calculate profits by subtracting the COSTS measure from the SALES measure. The expression resolves only the values requested by the query.

See also expression, measure.

cell

A single data value of an expression. In a dimensioned expression, a cell is identified by one value from each of the dimensions of the expression. For example, if you have a measure with the dimensions MONTH and CUSTOMER, then each combination of a month and a customer identifies a separate cell of that measure.

See also cube dimension.

child

A dimension member that is part of a more aggregate member in a hierarchy. For example, in a Time dimension, the month Jan-06 might be the child of the quarter Q1-2006. A dimension member can be the child of a different parent in each hierarchy.

Contrast with parent. See also descendant, hierarchy.

composite

A compact format for storing sparse multidimensional data. Oracle OLAP provides two types of composites: a compressed composite for extremely sparse data, and a regular composite for moderately sparse data.

See also dimension, sparsity.

compressed cube

A cube with very sparse data that is stored in a compressed composite.

See also composite.

compression

See compressed cube.

consistent solve specification

See solve specification.

cube

An organization of measures with identical dimensions and other shared characteristics. The edges of the cube contain the dimension members, and the body of the cube contains the data values. For example, sales data can be organized into a cube whose edges contain values from the Time, Product, and Customer dimensions and whose body contains Volume Sales and Dollar Sales data.

cube dimension

A cube dimension is a dimensional object that stores a list of values. It is an index for identifying the values of a measure. For example, if Sales data has a separate sales figure for each month, then the data has a Time dimension that contains month values, which organize the data by month.

In the context of multidimensional analysis, a cube dimension is called a dimension.

See also dimension.

cube materialized view

A cube that has been enhanced with materialized view capabilities. A cube materialized view can be incrementally refreshed through the Oracle Database materialized view subsystem, and it can serve as a target for transparent rewrite of queries against the source tables.

Also called a cube-organized materialized view.

cube script

A sequence of steps that prepare the data for querying, such as loading and aggregating data.

cube view

A relational view of the data stored in a cube, which can be queried by SQL. It contains columns for the dimensions, measures, and calculated measures of the cube.

custom measure

See calculated measure.

custom member

A dimension member whose data is calculated from the values of other members of the same dimension using the rules defined in a model.

See model.

data security role

A group of users and database roles that is defined just for use in managing OLAP security policies.

data source

A relational table, view, synonym, or other database object that provides detail data for cubes and cube dimensions.

data warehouse

A database designed for query and analysis rather than transaction processing. A data warehouse usually contains historical data that is derived from transaction data, but it can include data from other sources. It separates analysis workload from transaction workload and enables a business to consolidate data from several sources.

denormalized

Permit redundancy in a table. Contrast with normalize.

derived measure

See calculated measure.

descendant

A dimension member at a lower level of aggregation than a particular member. For example, in a Time dimension, the day 06-July-07 is the descendant of year 2007. The member immediately below is the child. In a dimension hierarchy, the data values of the descendants roll up into the data values of the ancestors.

Contrast with ancestor. See also aggregation, child, hierarchy, level.

detail data

Data at the lowest level, which is acquired from another source.

Contrast with aggregation.

dimension

A structure that categorizes data. Among the most common dimensions for sales-oriented data are Time, Geography, and Product. Most dimensions have hierarchies and levels.

In a cube, a dimension is a list of values at all levels of aggregation.

In a relational table, a dimension is a type of object that defines hierarchical (parent/child) relationships between pairs of column sets.

See also cube dimension, hierarchy.

dimension key

See dimension member.

dimension member

One element in the list that composes a cube dimension. For example, a Time dimension might have dimension members for days, months, quarters, and years.

dimension table

A relational table that stores all or part of the values for a dimension in a star or snowflake schema. Dimension tables typically contain columns for the dimension keys, levels, and attributes.

dimension value

See dimension member.

dimension view

A relational view of a cube dimension that provides information about all members of all hierarchies. It includes columns for the dimension keys, level, and attributes.

See also cube dimension, hierarchy view.

drill

To navigate from one item to a set of related items. Drilling typically involves navigating up and down through the levels in a hierarchy.

Drilling down expands the view to include child values that are associated with parent values in the hierarchy.

Drilling up collapses the list of descendant values that are associated with a parent value in the hierarchy.

EIF file

A specially formatted file for transferring data between analytic workspaces, or for storing versions of an analytic workspace (all of it or selected objects) outside the database.

embedded total

A list of dimension members at all levels of a hierarchy, such that the aggregate members (totals and subtotals) are interspersed with the detail members. For example, a Time dimension might contain dimension members for days, months, quarters, and years.

expression

A combination of one or more values (typically provided by a measure or a calculated measure), operators, and functions that evaluates to a value. An expression generally assumes the data type of its components.

The following are examples of expressions, where SALES is a measure: SALES, SALES*1.05, TRUNC(SALES).

fact

See measure.

fact table

A table in a star schema that contains factual data. A fact table typically has two types of columns: those that contain facts and those that are foreign keys to dimension tables. The primary key of a fact table is usually a composite key that is made up of all of its foreign keys.

A fact table might contain either detail facts or aggregated facts. Fact tables that contain aggregated facts are typically called summary tables or materialized views. A fact table usually contains facts with the same level of aggregation.

See also materialized view.

hierarchy

A way to organize data at different levels of aggregation. Hierarchies are used to define data aggregation; for example, in a Time dimension, a hierarchy might be used to aggregate data from days to months to quarters to years. Hierarchies are also used to define a navigational drill path.

In a relational table, hierarchies can be defined as part of a dimension object.

See also level-based hierarchy, ragged hierarchy, skip-level hierarchy, value-based hierarchy.

hierarchy view

A relational view of a cube dimension that provides information about the members that belong to a particular hierarchy. It includes columns for the dimension keys, parents, levels of the hierarchy, and attributes.

See also cube dimension, dimension view.

key

A column or set of columns included in the definition of certain types of integrity constraints. Keys describe the relationships between the different tables and columns of a relational database.

See also dimension member.

leaf data

See detail data.

level

A named position in a hierarchy. For example, a Time dimension might have a hierarchy that represents data at the month, quarter, and year levels. The levels might be named Month, Quarter, and Year. The names provide an easy way to reference a group of dimension members at the same distance from the base.

level-based hierarchy

A hierarchy composed of levels. For example, Time is always level based with levels such as Month, Quarter, and Year. Most hierarchies are level based.

See also value-based hierarchy.

mapping

The definition of the relationship and data flow between source and target objects. For example, the metadata for a cube includes the mappings between each measure and the columns of a fact table or view.

materialized view

A database object that provides access to aggregate data and can be recognized by the automatic refresh and the query rewrite subsystems.

See also cube materialized view.

measure

Data that represents a business measure, such as sales or cost data. You can select, display, and analyze the data in a measure. The terms measure and fact are synonymous; measure is more commonly used in a multidimensional environment and fact is more commonly used in a relational environment.

Measures are dimensional objects that store data, such as Volume Sales and Dollar Sales. Measures belong to a cube.

See also calculated measure, fact, cube.

measure folder

A database object that organizes and label groups of measures. Users may have access to several schemas with measures named Sales or Costs, and measure folders provide a way to differentiate among them.

model

A set of interrelated equations specified using the members of a particular dimension. Line item dimensions often use models to calculate the values of dimension members.

See also custom member. Contrast with calculated measure.

NA value

A special data value that indicates that data is "not available" (NA) or null. It is the value of any cell to which a specific data value has not been assigned or for which data cannot be calculated.

See also cell, sparsity.

nonadditive

Describes a measure or fact that cannot be summarized through addition, such as Unit Price. Maximum is an example of a nonadditive aggregation method.

Contrast with additive.

normalize

In a relational database, the process of removing redundancy in data by separating the data into multiple tables. Contrast with denormalized.

OLAP

Online Analytical Processing. OLAP functionality is characterized by dynamic, dimensional analysis of historical data, which supports activities such as the following:

  • Calculating across dimensions and through hierarchies

  • Analyzing trends

  • Drilling up and down through hierarchies

  • Rotating to change the dimensional orientation

Contrast with OLTP.

OLAP DML

A set of commands, functions, and options used to manage dimensional data stored in analytic workspaces within Oracle Database.

Analytic Workspace Manager, the OLAP expression syntax, the OLAP Java API, and various applications and PL/SQL packages enable users to access dimensional data without using the OLAP DML directly, but those tools use the OLAP DML to accomplish the desired tasks.

The OLAP Data Manipulation Language (DML) operates exclusively within analytic workspaces, whose primary data structures are dimensions, variables, formulas, relations, and valuesets. These dimensional objects in analytic workspaces support the high-level dimensional objects in the database, such as cubes, cube dimensions, measures, attributes, and hierarchies.

Contrast with OLAP expression syntax.

OLAP expression syntax

An extension of the SQL syntax that is used to manipulate the data stored in dimensional database objects such as cubes, cube dimensions, attributes, and measures.

Contrast with OLAP DML.

OLTP

Online Transaction Processing. OLTP systems are optimized for fast and reliable transaction handling. Compared to data analysis systems, most OLTP interactions involve a relatively small number of rows, but a larger group of tables.

Contrast with OLAP.

on the fly

Calculated at run time as needed in response to a specific query. In a cube, calculated measures and custom members are typically calculated as needed. Aggregate data can be precomputed, calculated as needed, or a combination of the two methods.

Contrast with precompute.

override solve specification

See solve specification.

page

A unit for swapping data in and out of memory.

Also called a block.

page space

A grouping of related data pages.

parent

A dimension member immediately above a particular member in a hierarchy. In a dimension hierarchy, the data value of the parent is the aggregated total of the data values of its children.

Contrast with child. See also hierarchy, level.

parent-child relation

A one-to-many relationship between one parent and one or more children in a hierarchical dimension. For example, New York (at the state level) might be the parent of Albany, Buffalo, Poughkeepsie, and Rochester (at the city level).

See also child, parent.

precalculate

See precompute.

precompute

Calculate and store as a data maintenance procedure. In a cube, aggregate data can be precomputed, calculated as needed, or a combination of the two methods.

Contrast with on the fly.

ragged hierarchy

A hierarchy that contains at least one member with a different base level, creating a "ragged" base level for the hierarchy. Organization dimensions are frequently ragged.

refresh

Load new and changed values from the source tables and recompute the aggregate values.

security role

See data security role.

skip-level hierarchy

A hierarchy that contains at least one member whose parents are multiple levels above it, creating a hole in the hierarchy. For example, in a Geography dimension with levels for City, State, and Country, Washington D.C. is a city that does not have a State value; its parent is United States at the Country level.

snowflake schema

A type of star schema in which the dimension tables are partly or fully normalized.

See also normalize, star schema.

solve specification

The aggregation method for each dimension of the cube.

solved data

A result set in which all derived data has been calculated. Data fetched from an cube is always fully solved, because all of the data in the result set is calculated before it is returned to the SQL-based application. The result set from the cube is the same whether the data was precomputed or calculated as needed.

See also on the fly, precompute.

source

See data source.

sparsity

A concept that refers to multidimensional data in which a relatively high percentage of the combinations of dimension values do not contain actual data.

There are two types of sparsity:

  • Controlled sparsity occurs when a range of values of one or more dimensions has no data; for example, a new measure dimensioned by Month for which you do not have data for past months. The cells exist because you have past months in the Month dimension, but the cells are empty.

  • Random sparsity occurs when nulls are scattered throughout a measure, usually because some combinations of dimension members never have any data. For example, a district might only sell certain products and never have sales data for the other products.

Some dimensions may be sparse while others are dense. For example, every time period may have at least one data value across the other dimensions, making Time a dense dimension. However, some products may not be sold in some cities, and may not be available anywhere for some time periods; both Product and Geography may be sparse dimensions.

See also composite.

star query

A join between a fact table and several dimension tables. Each dimension table is joined to the fact table using a primary key to foreign key join, but the dimension tables are not joined to each other.

star schema

A relational schema whose design represents a dimensional data model. The star schema consists of one or more fact tables and one or more dimension tables that are related through foreign keys.

See also snowflake schema.

status

The list of currently accessible values for a given dimension. The status of a dimension persists within a particular session, and does not change until it is changed deliberately. When an analytic workspace is first attached to a session, all members are in status.

See also cube dimension, dimension member.

summary

See aggregation.

update window

The length of time available for loading data into a database.

value-based hierarchy

A hierarchy defined only by the parent-child relationships among dimension members. The dimension members at a particular distance from the base level do not form a meaningful group for analysis, so the levels are not named. For example, an employee dimension might have a parent-child relation that identifies each employee's supervisor. However, levels that group first-, second-, and third-level supervisors and so forth may not be meaningful for analysis.

See also hierarchy, level-based hierarchy.

PK;]SPK,AOEBPS/overview.htmX Overview

1 Overview

This chapter introduces the powerful analytic resources available in the Oracle Database with the OLAP option. It consists of the following topics:

OLAP Technology in the Oracle Database

Oracle Database offers the industry's first and only embedded OLAP server. Oracle OLAP provides native multidimensional storage and speed-of-thought response times when analyzing data across multiple dimensions. The database provides rich support for analytics such as time series calculations, forecasting, advanced aggregation with additive and nonadditive operators, and allocation operators. These capabilities make the Oracle database a complete analytical platform, capable of supporting the entire spectrum of business intelligence and advanced analytical applications.

Full Integration of Multidimensional Technology

By integrating multidimensional objects and analytics into the database, Oracle provides the best of both worlds: the power of multidimensional analysis along with the reliability, availability, security, and scalability of the Oracle database.

Oracle OLAP is fully integrated into Oracle Database. At a technical level, this means:

  • The OLAP engine runs within the kernel of Oracle Database.

  • Dimensional objects are stored in Oracle Database in their native multidimensional format.

  • Cubes and other dimensional objects are first class data objects represented in the Oracle data dictionary.

  • Data security is administered in the standard way, by granting and revoking privileges to Oracle Database users and roles.

  • Applications can query dimensional objects using SQL.

The benefits to your organization are significant. Oracle OLAP offers the power of simplicity: One database, standard administration and security, standard interfaces and development tools.

Ease of Application Development

Oracle OLAP makes it easy to enrich your database and your applications with interesting analytic content. Native SQL access to Oracle multidimensional objects and calculations greatly eases the task of developing dashboards, reports, business intelligence (BI) and analytical applications of any type compared to systems that offer proprietary interfaces. Moreover, SQL access means that the power of Oracle OLAP analytics can be used by any database application, not just by the traditional, limited collection of OLAP applications.

Ease of Administration

Because Oracle OLAP is completely embedded in the Oracle database, there is no administration learning curve as is typically associated with standalone OLAP servers. You can leverage your existing DBA staff, rather than invest in specialized administration skills.

One major administrative advantage of Oracle's embedded OLAP technology is automated cube maintenance. With standalone OLAP servers, the burden of refreshing the cube is left entirely to the administrator. This can be a complex and potentially error-prone job. The administrator must create procedures to extract the changed data from the relational source, move the data from the source system to the system running the standalone OLAP server, load and rebuild the cube. The DBA must take responsibility for the security of the deltas (changed values) during this process as well.

With Oracle OLAP, in contrast, cube refresh is handled entirely by the Oracle database. The database tracks the staleness of the dimensional objects, automatically keeps track of the deltas in the source tables, and automatically applies only the changed values during the refresh process. The DBA simply schedules the refresh at appropriate intervals, and Oracle Database takes care of everything else.

Security

With Oracle OLAP, standard Oracle Database security features are used to secure your multidimensional data.

In contrast, with a standalone OLAP server, administrators must manage security twice: once on the relational source system and again on the OLAP server system. Additionally, they must manage the security of data in transit from the relational system to the standalone OLAP system.

Unmatched Performance and Scalability

Business intelligence and analytical applications are dominated by actions such as drilling up and down hierarchies and comparing aggregate values such as period-over-period, share of parent, projections onto future time periods, and a myriad of similar calculations. Often these actions are essentially random across the entire space of potential hierarchical aggregations. Because Oracle OLAP precomputes or efficiently computes as needed all aggregates in the defined multidimensional space, it delivers unmatched performance for typical business intelligence applications.

Oracle OLAP queries take advantage of Oracle shared cursors, dramatically reducing memory requirements and increasing performance.

When Oracle Database is installed with Real Application Clusters (Oracle RAC), OLAP applications receive the same benefits in performance, scalability, fail over, and load balancing as any other application.

Reduced Costs

All these features add up to reduced costs. Administrative costs are reduced because existing personnel skills can be leveraged. Moreover, the Oracle database can manage the refresh of dimensional objects, a complex task left to administrators in other systems. Standard security reduces administration costs as well. Application development costs are reduced because the availability of a large pool of application developers who are SQL knowledgeable, and a large collection of SQL-based development tools means applications can be developed and deployed more quickly. Any SQL-based development tool can take advantage of Oracle OLAP. Hardware costs are reduced by Oracle OLAP's efficient management of aggregations, use of shared cursors, and Oracle RAC, which enables highly scalable systems to be built from low-cost commodity components.

Developing Reports and Dashboards Using SQL Tools and Application Builders

Analysts can choose any SQL query and analysis tool for selecting, viewing, and analyzing the data. You can use your favorite tool or application, or use a tool supplied with Oracle Database.

Figure 1-1 displays a portion of a dashboard created in Oracle Application Express, which is distributed with Oracle Database. Application Express generates HTML reports that display the results of SQL queries. It only understands SQL; it has no special knowledge of dimensional objects.

This dashboard demonstrates information-rich calculations such as ratio, share, prior period, and cumulative total. Separate tabs on the dashboard present Profitability Analysis, Sales Analysis, and Product Analysis. Each tab presents the data in dials, bar charts, horizontal bar charts, pie charts, and cross-tabular reports. A drop-down list in the upper left corner provides a choice of Customers.

The dial displays the quarterly profit margin. To the right is a bar chart that compares current profits with year-ago profits.

Figure 1-1 Dashboard Created in Oracle Application Express

Application Express dashboard
Description of "Figure 1-1 Dashboard Created in Oracle Application Express"

The pie chart in Figure 1-2 displays the percent share that each product family contributed to the total profits in the last quarter.

Figure 1-2 Contributions of Product Families to Total Profits

Application Express pie chart
Description of "Figure 1-2 Contributions of Product Families to Total Profits"

The horizontal bar chart in Figure 1-3 displays ranked results for locations with the largest gains in profitability from a year ago. Decision makers can see at a glance how each location improved by the last quarter.

Figure 1-3 Ranking of Percent Change in Year-to-Date Profits From Year Ago

Application Express horizontal bar chart
Description of "Figure 1-3 Ranking of Percent Change in Year-to-Date Profits From Year Ago"

Figure 1-4 compares current profits with year-to-date, year-to-date year ago, the change between year-to-date and year-to-date year ago, and percent change between year-to-date and year-to-date year-ago profits. The cross-tabular report features interactive drilling, so that decision makers can easily see the detailed data that contributed to a parent value of interest.

Figure 1-4 Year-to-Date Profits Compared to Year Ago

Application Express crosstab
Description of "Figure 1-4 Year-to-Date Profits Compared to Year Ago "

Overview of the Dimensional Data Model

Dimensional objects are an integral part of OLAP. Because OLAP is on-line, it must provide answers quickly; analysts pose iterative queries during interactive sessions, not in batch jobs that run overnight. And because OLAP is also analytic, the queries are complex. The dimensional objects and the OLAP engine are designed to solve complex queries in real time.

The dimensional objects include cubes, measures, dimensions, attributes, levels, and hierarchies. The simplicity of the model is inherent because it defines objects that represent real-world business entities. Analysts know which business measures they are interested in examining, which dimensions and attributes make the data meaningful, and how the dimensions of their business are organized into levels and hierarchies.

Figure 1-5 shows the general relationships among dimensional objects.

Figure 1-5 Diagram of the OLAP Dimensional Model

Diagram of the multidimensional model
Description of "Figure 1-5 Diagram of the OLAP Dimensional Model"

The dimensional data model is highly structured. Structure implies rules that govern the relationships among the data and control how the data can be queried. Cubes are the physical implementation of the dimensional model, and thus are highly optimized for dimensional queries. The OLAP engine leverages this innate dimensionality in performing highly efficient cross-cube joins for inter-row calculations, outer joins for time series analysis, and indexing. Dimensions are pre-joined to the measures. The technology that underlies cubes is based on an indexed multidimensional array model, which provides direct cell access.

The OLAP engine manipulates dimensional objects in the same way that the SQL engine manipulates relational objects. However, because the OLAP engine is optimized to calculate analytic functions, and dimensional objects are optimized for analysis, analytic and row functions can be calculated much faster in OLAP than in SQL.

The dimensional model enables Oracle OLAP to support high-end business intelligence tools and applications such as OracleBI Discoverer Plus OLAP, OracleBI Spreadsheet Add-In, OracleBI Suite Enterprise Edition, BusinessObjects Enterprise, and Cognos ReportNet.

Cubes

Cubes provide a means of organizing measures that have the same shape, that is, they have the exact same dimensions. Measures in the same cube can easily be analyzed and displayed together.

A cube usually corresponds to a single fact table or view.

Measures

Measures populate the cells of a cube with the facts collected about business operations. Measures are organized by dimensions, which typically include a Time dimension.

An analytic database contains snapshots of historical data, derived from data in a transactional database, legacy system, syndicated sources, or other data sources. Three years of historical data is generally considered to be appropriate for analytic applications.

Measures are static and consistent while analysts are using them to inform their decisions. They are updated in a batch window at regular intervals: weekly, daily, or periodically throughout the day. Some administrators refresh their data by adding periods to the time dimension of a measure, and may also roll off an equal number of the oldest time periods. Each update provides a fixed historical record of a particular business activity for that interval. Other administrators do a full rebuild of their data rather than performing incremental updates.

A critical decision in defining a measure is the lowest level of detail. Users may never view this detail data, but it determines the types of analysis that can be performed. For example, market analysts (unlike order entry personnel) do not need to know that Beth Miller in Ann Arbor, Michigan, placed an order for a size 10 blue polka-dot dress on July 6, 2006, at 2:34 p.m. But they might want to find out which color of dress was most popular in the summer of 2006 in the Midwestern United States.

The base level determines whether analysts can get an answer to this question. For this particular question, Time could be rolled up into months, Customer could be rolled up into regions, and Product could be rolled up into items (such as dresses) with an attribute of color. However, this level of aggregate data could not answer the question: At what time of day are women most likely to place an order? An important decision is the extent to which the data has been aggregated before being loaded into a data warehouse.

Dimensions

Dimensions contain a set of unique values that identify and categorize data. They form the edges of a cube, and thus of the measures within the cube. Because measures are typically multidimensional, a single value in a measure must be qualified by a member of each dimension to be meaningful. For example, the Sales measure has four dimensions: Time, Customer, Product, and Channel. A particular Sales value (43,613.50) only has meaning when it is qualified by a specific time period (Feb-06), a customer (Warren Systems), a product (Portable PCs), and a channel (Catalog).

Base-level dimension values correspond to the unique keys of a fact table.

Hierarchies and Levels

A hierarchy is a way to organize data at different levels of aggregation. In viewing data, analysts use dimension hierarchies to recognize trends at one level, drill down to lower levels to identify reasons for these trends, and roll up to higher levels to see what affect these trends have on a larger sector of the business.

Level-Based Hierarchies

Each level represents a position in the hierarchy. Each level above the base (or most detailed) level contains aggregate values for the levels below it. The members at different levels have a one-to-many parent-child relation. For example, Q1-05 and Q2-05 are the children of 2005, thus 2005 is the parent of Q1-05 and Q2-05.

Suppose a data warehouse contains snapshots of data taken three times a day, that is, every 8 hours. Analysts might normally prefer to view the data that has been aggregated into days, weeks, quarters, or years. Thus, the Time dimension needs a hierarchy with at least five levels.

Similarly, a sales manager with a particular target for the upcoming year might want to allocate that target amount among the sales representatives in his territory; the allocation requires a dimension hierarchy in which individual sales representatives are the child values of a particular territory.

Hierarchies and levels have a many-to-many relationship. A hierarchy typically contains several levels, and a single level can be included in multiple hierarchies.

Each level typically corresponds to a column in a dimension table or view. The base level is the primary key.

Value-Based Hierarchies

Although hierarchies are typically composed of named levels, they do not have to be. The parent-child relations among dimension members may not define meaningful levels. For example, in an employee dimension, each manager has one or more reports, which forms a parent-child relation. Creating levels based on these relations (such as individual contributors, first-level managers, second-level managers, and so forth) may not be meaningful for analysis. Likewise, the line item dimension of financial data does not have levels. This type of hierarchy is called a value-based hierarchy.

Attributes

An attribute provides additional information about the data. Some attributes are used for display. For example, you might have a product dimension that uses Stock Keeping Units (SKUs) for dimension members. The SKUs are an excellent way of uniquely identifying thousands of products, but are meaningless to most people if they are used to label the data in a report or a graph. You would define attributes for the descriptive labels.

You might also have attributes like colors, flavors, or sizes. This type of attribute can be used for data selection and answering questions such as: Which colors were the most popular in women's dresses in the summer of 2005? How does this compare with the previous summer?

Time attributes can provide information about the Time dimension that may be useful in some types of analysis, such as identifying the last day or the number of days in each time period.

Each attribute typically corresponds to a column in dimension table or view.

PKFXXPK,AOEBPS/title.htm" Oracle OLAP User's Guide, 11g Release 2 (11.2)

Oracle® OLAP

User's Guide

11g Release 2 (11.2)

E17123-03

August 2010


Oracle OLAP User's Guide, 11g Release 2 (11.2)

E17123-03

Copyright © 2003, 2010, Oracle and/or its affiliates. All rights reserved.

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this software or related documentation is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

This software is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications which may create a risk of personal injury. If you use this software in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of this software. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software in dangerous applications.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

This software and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

PK6!oPK,AOEBPS/cubes.htm Creating Dimensions and Cubes

3 Creating Dimensions and Cubes

This chapter explains how to design a data model and create dimensions and cubes using Analytic Workspace Manager. It contains the following topics:

Designing a Dimensional Model for Your Data

Chapter 1 introduced the dimensional objects: Cubes, measures, dimensions, levels, hierarchies, and attributes. In this chapter, you learn how to define them in Oracle Database, but first you should decide upon the dimensional model you want to create. What are your measures? What are your dimensions? How can you distinguish between a dimension and an attribute in your data? You can design a dimensional model using pencil and paper, a database design software package, or any other method that suits you.

If your source data is in a star or snowflake schema, then you have the elements of a dimensional model:

  • Fact tables correspond to cubes.

  • Data columns in the fact tables correspond to measures.

  • Foreign key constraints in the fact tables identify the dimension tables.

  • Dimension tables identify the dimensions.

  • Primary keys in the dimension tables identify the base-level dimension members.

  • Parent columns in the dimension tables identify the higher level dimension members.

  • Columns in the dimension tables containing descriptions and characteristics of the dimension members identify the attributes.

You can also get insights into the dimensional model by looking at the reports currently being generated from the source data. The reports identify the levels of aggregation that interest the report consumers and the attributes used to qualify the data.

While investigating your source data, you may decide to create relational views that more closely match the dimensional model that you plan to create.


See Also:

"Overview of the Dimensional Data Model" for an introduction to dimensional objects

Appendix A, "Designing a Dimensional Model" for a case study of developing a dimensional model for the Global analytic workspace


Introduction to Analytic Workspace Manager

Analytic Workspace Manager is the primary tool for creating, developing, and managing dimensional objects in Oracle Database. Your goal in using Analytic Workspace Manager is to create a dimensional data store that supports business analysis. This data store can stand alone or store summary data as part of a relational data warehouse.

Populating dimensional objects involves a physical transformation of the data. The first step in that transformation is defining the cubes, measures, dimensions, levels, hierarchies, and attributes. Afterward, you can map these dimensional objects to their relational data sources. The data loading process transforms the data from a relational format into a dimensional format.

Using Analytic Workspace Manager, you can:

  • Develop a dimensional model of your data.

  • Instantiate that model as dimensional objects.

  • Load data from relational tables into those objects.

  • Define information-rich calculations.

  • Create materialized views that can be used by the database refresh system.

  • Automatically generate relational views of the dimensional objects.

You can load data from these sources in the database:

  • Tables

  • Views

  • Synonyms

You must have SELECT privileges on the relational data sources so you can load the data into the dimensions and cubes. This chapter assumes that you have a star, snowflake, or other relational schema that supports dimensional objects.

Figure 3-1 shows the main window of Analytic Workspace Manager. It contains menus, a toolbar, a navigation tree, and property sheets. When you select an object in the navigation tree, the property sheet to the right provides detailed information about that object. When you right-click an object, you get a choice of menu items with appropriate actions for that object.

Analytic Workspace Manager has a full online Help system, which includes context-sensitive Help.

Figure 3-1 Analytic Workspace Manager Main Window

Main window in Analytic Workspace Manager
Description of "Figure 3-1 Analytic Workspace Manager Main Window"

Creating a Dimensional Data Store Using Analytic Workspace Manager

An analytic workspace is a container for storing related cubes. You create dimensions, cubes, and other dimensional objects within an analytic workspace.

To create an analytic workspace: 

  1. Open Analytic Workspace Manager and connect to your database instance as the user defined for this purpose.

  2. Create an analytic workspace in the database:

    1. In the navigation tree, expand the folders until you see the schema where you want to create the analytic workspace.

    2. Right-click Analytic Workspaces, then choose Create Analytic Workspace.

    3. Complete the Create Analytic Workspace dialog box, then choose Create.

      The analytic workspace appears in the Analytic Workspaces folder for the schema.

  3. Define the dimensions for the data.

    See "Creating Dimensions".

  4. Define the cubes for the data.

    See "Creating Cubes".

  5. Load data into the cubes and dimensions.

    See "Loading Data Into Cubes"

When you have finished, you have an analytic workspace populated with the detail data fetched from relational tables or views. You may also have summarized data and calculated measures.

Adding Functionality to Dimensional Objects

In addition to the basic steps, you can add functionality to the cubes in these ways:

When Does Analytic Workspace Manager Save Changes?

Analytic Workspace Manager saves changes automatically that you make to the analytic workspace. You do not explicitly save your changes.

Saves occur when you take an action such as these:

  • Click OK or the equivalent button in a dialog box.

    For example, when you click Create in the Create Dimension dialog box, the dimension is committed to the database.

  • Click Apply in a property sheet.

    For example, when you change the labels on the General property page for an object, the change takes effect when you click Apply.

Creating Dimensions

Dimensions are lists of unique values that identify and categorize data. They form the edges of a cube, and thus of the measures within the cube. In a report, the dimension values (or their descriptive attributes) provide labels for the rows and columns.

You can define dimensions that have any of these common forms:

  • Level-based dimensions that use parent-child relationships to group members into levels. Most dimensions are level-based.

  • Value-based dimensions that have parent-child relationships among their members, but these relationships do not form meaningful levels.

  • List or flat dimensions that have no levels or hierarchies.

Dimension Members Must Be Unique

Every dimension member must be a unique value. Depending on your data, you can create a dimension that uses either natural keys or surrogate keys from the relational sources for its members. If you have any doubt that the values are unique across all levels, then keep the default choice of surrogate keys.

  • Source keys are read from the relational sources without modification. To use the same exact keys as the source data, the values must be unique across levels. Because each level may be mapped to a different relational column, this uniqueness may not be enforced in the source data. For example, a dimension table might have a Day column with values of 1 to 366 and a Week column with values of 1 to 52. Unless you take steps to assure uniqueness, the values from the Week column overwrite the first 52 Day values.

  • Surrogate keys ensure uniqueness by adding a level prefix to the members while loading them into the analytic workspace. For the previous example, surrogate keys create two dimension members named DAY_1 and WEEK_1, instead of a single member named 1. A dimension that has surrogate keys must be defined with at least one level-based hierarchy.

Analytic Workspace Manager creates surrogate keys unless you specify otherwise.

Time Dimensions Have Special Requirements

You can define dimensions as either User or Time dimensions. Business analysis is performed on historical data, so fully defined time periods are vital. A time dimension table must have columns for period end dates and time span. These required attributes support comparisons with earlier or later time periods. If this information is not available, then you can define Time as a User dimension, but it cannot support time-based analysis.

You must define a Time dimension with at least one level to support time-based analysis, such as a custom measure that calculates the difference from the prior period.

To create a dimension: 

  1. Expand the folder for the analytic workspace.

  2. Right-click Dimensions, then choose Create Dimension.

    The Create Dimension dialog box is displayed.

  3. Complete the General tab.

  4. If the keys in the source table are unique across levels, you can change the default setting on the Implementation Details tab.

  5. Click Create.

    The dimension appears as a subfolder under Dimensions.

Figure 3-2 shows the creation of the Product dimension.

Figure 3-2 Creation of the Product Dimension

Create Dimension dialog box
Description of "Figure 3-2 Creation of the Product Dimension"

Creating Levels

For business analysis, data is typically summarized by level. For example, your database may contain daily snapshots of a transactional database. Days are the base level. You might summarize this data at the weekly, quarterly, and yearly levels.

Levels have parent-child or one-to-many relationships, which form a level-based hierarchy. For example, each week summarizes seven days, each quarter summarizes 13 weeks, and each year summarizes four quarters. This hierarchical structure enables analysts to detect trends at the higher levels, then drill down to the lower levels to identify factors that contributed to a trend.

For each level that you define, you must identify a data source for dimension members at that level. Members at all levels are stored in the same dimension. In the previous example, the Time dimension contains members for weeks, quarters, and years.

To create a level: 

  1. Expand the folder for the dimension.

  2. Right-click Levels, then choose Create Level.

    The Create Level dialog box is displayed.

  3. Complete the General tab of the Create Level dialog box.

  4. Click Create.

    The level appears as an item in the Levels folder.


Tip:

Alternatively, you can create levels in the Create Dimension dialog box Levels tab.

Figure 3-3 shows the creation of the Class level for the Product dimension.

Figure 3-3 Creation of the Class Level

Create Level dialog box
Description of "Figure 3-3 Creation of the Class Level"

Creating Hierarchies

Dimensions can have one or more hierarchies. They can be level based or value based.

Level-Based Hierarchies

Most hierarchies are level based. Analytic Workspace Manager supports these common types of level-based hierarchies:

  • Normal hierarchies consist of one or more levels of aggregation. Members roll up into the next higher level in a many-to-one relationship, and these members roll up into the next higher level, and so forth to the top level.

  • Ragged hierarchies contain at least one member with a different base, creating a "ragged" base level for the hierarchy. Ragged hierarchies are not supported for cube materialized views.

  • Skip-level hierarchies contain at least one member whose parents are multiple levels above it, creating a hole in the hierarchy. An example of a skip-level hierarchy is City-State-Country, where at least one city has a country as its parent (for example, Washington D.C. in the United States).

    In relational source tables, a skip-level hierarchy may contain nulls in the level columns. Skip-level hierarchies are not supported for cube materialized views.

Multiple hierarchies for a dimension typically share the base-level dimension members and then branch into separate hierarchies. They can share the top level if they use all the same base members and use the same aggregation operators. Otherwise, they need different top levels to store different aggregate values. For example, a Customer dimension may have multiple hierarchies that include all base-level customers and are summed to a shared top level. However, a Time dimension with calendar and fiscal hierarchies must aggregate to separate Calendar Year (January to December) and Fiscal Year (July to June) levels, because they use different selections of base-level members.

Value-Based Hierarchies

You may also have dimensions with parent-child relations that do not support levels. For example, an employee dimension might have a parent-child relation that identifies each employee's supervisor. However, levels that group first-, second-, and third-level supervisors and so forth may not be meaningful for analysis. Similarly, you might have a line-item dimension with members that cannot be grouped into meaningful levels. In this situation, you can create a value-based hierarchy defined by the parent-child relations, which does not have named levels. You can create value-based hierarchies only for dimensions that use the source keys, because surrogate keys are formed with the names of the levels.

To create a hierarchy: 

  1. Expand the folder for the dimension.

  2. Right-click Hierarchies, then choose Create Hierarchy.

    The Create Hierarchy dialog box is displayed.

  3. Complete the General tab of the Create Hierarchy dialog box.

    Click Help for information about these choices.

  4. Click Create.

    The hierarchy appears as an item in the Hierarchies folder.

Figure 3-4 shows the creation of the Primary hierarchy for the Product dimension.

Figure 3-4 Creation of the Product Primary Hierarchy

Create Hierarchy dialog box
Description of "Figure 3-4 Creation of the Product Primary Hierarchy"

Creating Attributes

Attributes provide information about the individual members of a dimension. They are used for labeling crosstabular and graphical data displays, selecting data, organizing dimension members, and so forth.

Automatically Defined Attributes

Analytic Workspace Manager creates some attributes automatically when creating a dimension. These attributes have a unique type, such as "Long Description."

All dimensions can be created with long and short description attributes. If your source tables include long and short descriptions, then you can map the attributes to the appropriate columns. However, if your source tables include only one set of descriptions, then you can create and map just one description attribute. If you map both the long and short description attributes to the same column, the data is loaded twice.

Time dimensions are created with time-span and end-date attributes. This information must be provided for all Time dimension members.

User-Defined Attributes

You can create additional "User" attributes that provide supplementary information about the dimension members, such as the addresses and telephone numbers of customers, or the color and sizes of products.

To create an attribute: 

  1. Expand the folder for the dimension.

  2. Right-click Attributes, then choose Create Attribute.

    The Create Attribute dialog box is displayed.

  3. Complete the General tab of the Create Attribute dialog box.

    Some attributes apply to all dimension members, and others apply to only one level. Your selection in the Apply Attributes To box controls the mapping of the attribute to one column or to multiple columns.

    Click Help for information about these choices.

  4. To change the data type from the default choice of VARCHAR2, complete the Implementation Details tab.

  5. Click Create.

    The attribute appears as an item in the Attributes folder.

Figure 3-5 shows the creation of the Marketing Manager attribute for the Product dimension. Notice that this attribute applies only to the Item level.

Figure 3-5 Creation of the Product Marketing Manager Attribute

Create Attribute dialog box
Description of "Figure 3-5 Creation of the Product Marketing Manager Attribute"

Unique Key Attributes

Materialized views require that each dimension of the cube have unique key attributes. These attributes store the original key values of the source dimensions, which may have been changed when creating the embedded total dimensions of the cubes.

Analytic Workspace Manager automatically creates unique key attributes for the dimensions of a cube materialized view. You do not create or manage them manually.

Mapping Dimensions

Mapping identifies the relational data source for each dimensional object. After mapping a dimension to a column of a relational table or view, you can load the data. You can create, map, and load each dimension individually, or perform each step for all dimensions before proceeding to the next step.

SQL Data Types for Dimensions

You can map dimensions and levels to columns having these SQL data types, which are converted to text during a data load:

  • VARCHAR2

  • NVARCHAR2

  • NUMBER

  • INTEGER

  • DECIMAL

  • CHAR

  • NCHAR

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIMEZONE

  • TIMESTAMP WITH LOCAL TIMEZONE

You can map attributes to the same data types as cubes and measures, as described in "Data Types".

Dimension Mapping Window

The mapping window has a tabular view and a graphical view. You can switch between the two views, using the icons at the top of the canvas.

  • Tabular view: Drag-and-drop the names of individual columns from the schema navigation tree to the rows for the dimensional objects.

  • Graphical view: Drag-and-drop icons, which represent tables and views, from the schema navigation tree onto the mapping canvas. Then draw lines from the columns to the dimensional objects.

You can use the OLAP expression syntax when mapping dimensions in the tabular view. This capability enables you to create the top level of a dimension without having a source column in the dimension table.

You can also map attributes from different tables. OLAP automatically joins the tables on columns with the same name.

Click Help on the Mapping window for more information.

To map a dimension:  

  1. In the navigation tree, expand the dimension folder and click Mappings.

    The Mapping window contains a schema navigation tree on the left and a mapping table for the dimension with rows for the levels and their attributes. This is the tabular view.

  2. For normalized dimension tables, select Snowflake Schema for the Type of Dimension Table.

  3. To enlarge the Mapping Window, drag the divider to the left.

  4. In the schema tree, expand the tables, views, or synonyms that contain the dimension members and attributes.

  5. Drag-and-drop the source columns onto the appropriate cells in the mapping table for the dimension.

  6. After you have mapped all levels and attributes, click Apply.

  7. Drag the divider back to the right to reveal the navigation tree.

Figure 3-6 shows the Product dimension mapped in the tabular view. The arrow highlights how the PRODUCT_DIM.ITEM_BUYER column maps to the PRODUCT.ITEM.BUYER attribute.

Figure 3-6 Product Dimension Mapped in Tabular View

Dimension mapping in tabular view
Description of "Figure 3-6 Product Dimension Mapped in Tabular View"

To map a top level without a relational source:  

  1. Create the dimension and its levels (including the top level), hierarchies, and attributes.

  2. Map the dimension as described previously for all but the top level.

  3. Enter an expression in the OLAP expression syntax for the top level.

Example 3-1 Creating a Top Level for the Global Time Dimension

This example shows a top level for all years in the Time dimension. The mapping expressions used for a Total level (that is, all years) in the Time dimension might look like this:

Member: 'TOTAL' 
LONG_DESCRIPTION: 'Total'
SHORT_DESCRIPTION: 'Total' 
END_DATE: TO_DATE('31-Dec-2007', 'dd-mon-yyyy')
TIME_SPAN: 3646 

Member, LONG_DESCRIPTION, and SHORT_DESCRIPTION are set to literal strings, END_DATE uses the TO_DATE function, and TIME_SPAN is set to a number.

Source Data Query

You can view the contents of a particular source column without leaving the mapping window. The information is readily available, eliminating the guesswork when the names are not adequately descriptive.

To see the values in a particular source table or view: 

  1. Right-click the source object in either the schema tree or the graphical view of the mapping canvas.

  2. Choose View Data from the shortcut menu.

Figure 3-7 shows the data stored in the PRODUCT_DIM table.

Figure 3-7 Data in the PRODUCT_DIM Table

GLOBAL.PRODUCT_DIM Data
Description of "Figure 3-7 Data in the PRODUCT_DIM Table"

Loading Data Into Dimensions

Analytic Workspace Manager provides several ways to load data into dimensional objects. The quickest way when developing a data model is using the default choices of the Maintenance Wizard. Other methods may be more appropriate in a production environment than the one shown here. They are discussed in "Choosing a Data Maintenance Method".

To load data into the dimensions: 

  1. In the navigation tree, right-click the Dimensions folder or the folder for a particular dimension.

  2. Choose Maintain Dimension.

    The Maintenance Wizard opens on the Select Objects page.

  3. Select one or more dimensions from Available Target Objects and use the shuttle buttons to move them to Selected Target Objects.

  4. Click Finish to load the dimension values immediately.

    The additional pages of the wizard enable you to create a SQL script or submit the load to the Oracle job queue. To use these options, click Next instead.

  5. Review the build log, which appears when the build is complete. If the log shows that errors occurred, then fix them and run the Maintenance Wizard again.

    Errors are typically caused by problems in the mapping. Check for incomplete mappings or changes to the source objects.

Figure 3-8 shows the first page of the Maintenance Wizard. Only the Product dimension has been selected for maintenance. All the Product dimension members and attributes are fetched from the mapped relational sources.

Figure 3-8 Loading Dimension Values into the Product Dimension

Maintenance Wizard: Select Objects page
Description of "Figure 3-8 Loading Dimension Values into the Product Dimension"

Figure 3-9 shows the Maintenance log for a dimension displayed by Analytic Workspace Manager. It refreshes throughout the build to provide you with the most up-to-date information.

Figure 3-9 Maintenance Log for the Product Dimension

Screen capture of Maintenance Log
Description of "Figure 3-9 Maintenance Log for the Product Dimension"

Displaying the Dimension View

The Maintenance Wizard automatically generates relational views of dimensions and hierarchies. Chapter 4 describes these views and explains how to query them.

Figure 3-10 shows the description of the relational view of the Product Primary hierarchy. You can view the data on the Data tab.

Figure 3-10 Product Primary Hierarchy View

Product Primary Hierarchy View
Description of "Figure 3-10 Product Primary Hierarchy View"

Displaying the Default Hierarchy

After loading a dimension, you can display the default hierarchy.

To display the default hierarchy: 

  1. In the navigation tree, right-click the name of a dimension.

  2. Choose View Data.

Figure 3-11 shows the Primary hierarchy of the Product dimension.

Figure 3-11 Displaying the Product Primary Hierarchy

Dimension viewer
Description of "Figure 3-11 Displaying the Product Primary Hierarchy"

Creating Cubes

Cubes are informational objects that identify measures with the exact same dimensions and thus are candidates for being processed together at all stages: data loading, aggregation, storage, and querying.

Cubes define the shape of your business measures. They are defined by a set of ordered dimensions. The dimensions form the edges of a cube, and the measures are the cells in the body of the cube.

To create a cube: 

  1. Expand the folder for the analytic workspace.

  2. Right-click Cubes, then choose Create Cube.

    The Create Cube dialog box is displayed.

  3. On the General tab, enter a name for the cube and select its dimensions.

  4. On the Aggregation tab, click the Rules subtab and select an aggregation method for each dimension. If the cube uses multiple methods, then you may need to specify the order in which the dimensions are aggregated to get the desired results.

    You can ignore the bottom of the tab, unless you want to exclude a hierarchy from the aggregation.

  5. If you run the advisors after mapping the cube, Oracle OLAP can determine the best partitioning and storage options. Alternatively, to define these options yourself, complete the Partitioning and Storage tabs before creating the cube.

  6. Click Create. The cube appears as a subfolder under Cubes.

Figure 3-12 shows the Rules subtab for the Units cube with the list of operators displayed.


See Also:

"Aggregation Operators" for descriptions of the aggregation operators.

Figure 3-12 Selecting an Aggregation Operator

Create Cube dialog box Aggregation tab
Description of "Figure 3-12 Selecting an Aggregation Operator"

Creating Measures

Measures store the facts collected about your business. Each measure belongs to a particular cube, and thus shares particular characteristics with other measures in the cube, such as the same dimensions. The default characteristics of a measure are inherited from the cube.

To create a measure: 

  1. Expand the folder for the cube that has the dimensions of the measure.

  2. Right-click Measures, then choose Create Measure.

    The Create Measure dialog box is displayed.

  3. On the General tab, enter a name for the measure.

  4. Click Create.

    The measure appears in the navigation tree as an item in the Measures folder.

Figure 3-13 shows the General tab of the Create Measure dialog box.

Figure 3-13 Creating the Sales Measure

Create Measure dialog box
Description of "Figure 3-13 Creating the Sales Measure"

Mapping Cubes

You use the same interface to map cubes as you did to map dimensions, as described in "Mapping Dimensions". You can map a cube directly to a single fact table, or you can create more complex mappings using the OLAP expression syntax, which supports expressions, join conditions, and filters.

Although the dimension columns in a fact table typically contain only key values at the detail level, you can also map cubes to summary tables that contain the values from multiple levels. For example, a Time column might contain days, months, quarters, and years; a Geography column might contain cities, states, and countries. When a build rolls up the data in the cube from the detail level, the calculated values overwrite the loaded summary values, thereby correcting any inconsistencies.

Data Types

You can map cubes and measures to columns having these SQL data types:

  • NUMBER

  • INTEGER

  • DECIMAL

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • VARCHAR2

  • NVARCHAR2

  • CHAR

  • NCHAR

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIMEZONE

  • TIMESTAMP WITH LOCAL TIMEZONE

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

Expressions

You can use the OLAP expression syntax when mapping cubes in the tabular view. This capability enables you to perform tasks like these as part of data maintenance, without any intermediate staging of the data:

  • Perform calculations on the relational data using any combination of functions and operators available in the OLAP expression syntax.

  • Create measures that are more aggregate than their relational sources. For example, suppose the Time dimension has columns for Day, Month, Quarter, and Year, and the fact table for Sales is related to Time by the Day foreign key column. In a basic mapping, you would store data in the cube at the Day level. However, you could aggregate it to the Month level during the data refresh. Using a technique called one-up mapping, you would map the cube to the Month column for Time, and specify a join between the dimension table and the fact table on the Day columns.

Join Conditions

In the tabular view, the mapping for each dimension includes a join condition. In the basic case where you are mapping the foreign keys in a fact table to the primary keys in the related dimension tables, you can leave the join condition blank. Analytic Workspace Manager derives this information from the relational source tables when you save the mapping.

For example, Analytic Workspace Manager provides this join condition for the TIME dimension in the UNITS_CUBE mapping:

GLOBAL.TIME_DIM.MONTH_ID = GLOBAL.UNITS_FACT.MONTH_ID

Filters

A filter applies a WHERE clause to the query that loads data from the relational source into the cube. You can use a filter to limit the rows to those matching a certain condition. This filter restricts the data to the year 2007:

GLOBAL.UNITS_FACT.MONTH_ID LIKE '2007%'

You can also use a filter to join two or more tables containing the measures. This filter joins the UNITS_FACT and PRICE_FACT tables in the Global schema on the Time (MONTH_ID) and Product (ITEM_ID) dimensions:

GLOBAL.PRICE_FACT.MONTH_ID=GLOBAL.UNITS_FACT.MONTH_ID AND GLOBAL.PRICE_FACT.ITEM_ID=GLOBAL.UNITS_FACT.ITEM_ID 

To map a cube: 

  1. In the navigation tree, expand the cube folder and click Mappings.

    The Mapping window contains a schema navigation tree on the left and a mapping table for the cube and its dimensions. This is the tabular view.

  2. To enlarge the Mapping window, drag the divider to the left.

  3. In the schema tree, expand the tables, views, or synonyms that contain the data for the measures.

  4. Drag-and-drop the source columns onto the appropriate cells in the mapping table for the cube.

  5. After you have mapped all dimensions and measures, click Apply.

  6. Drag the divider back to the right to reduce the size of the Mapping window.

Figure 3-14 shows the mapping canvas with the Units cube mapped to columns in the UNITS_FACT table. After you save the mappings, Analytic Workspace Manager provides the join conditions for base-level mappings such as the ones shown here.

Figure 3-14 Units Cube Mapped in the Tabular View

Cube mapping in graphical view
Description of "Figure 3-14 Units Cube Mapped in the Tabular View"

To calculate the facts of a measure as they are loaded into a cube: 

  1. Create the cube.

  2. Map all dimensions and measures to the source tables.

  3. Edit the mapping of the measure to include a calculation in the OLAP expression syntax.

    For example, you might change UNITS_FACT.SALES to UNITS_FACT.SALES*1.06.

    You can use row expressions, column expressions, and conditions, but not nested SQL queries.

To map a cube above the detail level: 

  1. Create the cube dimensions with the desired levels and map them to the source dimension table.

  2. Create the cube and its measures.

  3. Map each measure to its source column in the fact table.

  4. For dimensions that are not being consolidated, map the detail level to its source column in the fact table, the same as you would in a basic cube mapping.

  5. For dimensions being consolidated:

    1. Map the dimension to the appropriate column in the dimension table, not to the fact table. In the previous scenario, you would map the Month level of the Time dimension to the Month column of the Time dimension table. For example, you would map Month to time_dim.month_column.

    2. Enter a join condition between the fact table and the dimension table at the detail level. For example, time_dim.day_key = fact_tbl.day_foreign_key.

To map measures to different tables: 

  1. Create the cube dimensions with the desired levels and map them to the source dimension table.

  2. Create the cube and its measures.

  3. Map each measure to its source column in the appropriate table.

  4. Map the detail level of the dimensions to its source column in each of the tables. When you drop the additional source column names, you are asked whether to add or replace the existing mapping. Choose Add.

Example 3-2 Mapping Measures to Different Tables

This example maps the two measures of a cube to columns in two different fact tables. The data for UNIT_PRICE is in the UNITS_FACT table, and the data for UNITS_SOLD is in the PRICE_FACT table. The following mapping identifies the dimension keys in both tables for MONTH and PRODUCT.

UNIT_PRICE: GLOBAL.PRICE_FACT.UNIT_PRICE
UNITS_SOLD: GLOBAL.UNITS_FACT.UNITS
MONTH:      GLOBAL.PRICE_FACT.MONTH_ID
            GLOBAL.UNITS_FACT.MONTH_ID
PRODUCT:    GLOBAL.PRICE_FACT.ITEM_ID
            GLOBAL.UNITS_FACT.ITEM_ID

The next example maps one measure of a cube to columns in two different fact tables. The data for North America is in the AMERICA table, and the data for Europe is in the EMEA table. The following mapping for the UNITS_SOLD measure of UNION_CUBE creates a union of the two fact columns.

UNITS_SOLD: GLOBAL.AMERICA.UNITS
            GLOBAL.EMEA.UNITS
TIME:       GLOBAL.AMERICA.MONTH_ID
            GLOBAL.EMEA.MONTH_ID
CHANNEL:    GLOBAL.AMERICA.CHANNEL_ID
            GLOBAL.EMEA.CHANNEL_ID
CUSTOMER:   GLOBAL.AMERICA.SHIP_TO_ID
            GLOBAL.EMEA.SHIP_TO_ID
PRODUCT:    GLOBAL.AMERICA.ITEM_ID
            GLOBAL.EMEA.ITEM_ID

Choosing a Partitioning Strategy

Partitioning is a method of physically storing the measures in a cube. It improves the performance of large measures in the following ways:

  • Improves scalability by keeping data structures small. Each partition functions like a smaller measure.

  • Keeps the working set of data smaller both for queries and maintenance, since the relevant data is stored together.

  • Enables parallel aggregation during data maintenance. Each partition can be aggregated by a separate process.

  • Simplifies removal of old data from storage. Old partitions can be dropped, and new partitions can be added.

The number of partitions affects the database resources that can be allocated to loading and aggregating the data in a cube. Partitions can be aggregated simultaneously when sufficient resources have been allocated.

The Cube Partitioning Advisor analyzes the source tables and develops a partitioning strategy. You can accept the recommendations of the Cube Partitioning Advisor, or you can make your own decisions about partitioning.


Note:

Run the Cube Partitioning Advisor after mapping the cube to a data source and before loading the data. You can change the partitioning strategy at any time, but you must reload the data afterward.

Choosing a Dimension for Partitioning

If your partitioning strategy is driven primarily by life-cycle management considerations, then you should partition the cube on the Time dimension. Old time periods can then be dropped as a unit, and new time periods added as a new partition. In Figure 3-16, for instance, the Quarter level of the Time dimension is used as the partitioning key. The Cube Partitioning Advisor has a Time option, which recommends a hierarchy and a level in the Time dimension for partitioning.

If life-cycle management is not a primary consideration, then run the Cube Partitioning Advisor and choose the Statistics option. The Cube Partitioning Advisor develops a strategy designed to achieve optimal build and query performance.

To run the Cube Partitioning Advisor: 

  1. Map the cube to its data source, if you have not done so already.

  2. On the navigation tree, select the cube to display its property pages.

  3. On the Partitioning tab, click Cube Partitioning Advisor.

  4. Choose Partition Using a Time Dimension or Partition Using Statistics.

    Wait while the Cube Partitioning Advisor analyzes the cube. When it is done, the Cube Partitioning Advisor displays its recommendations.

  5. Evaluate the recommendations of the Cube Partitioning Advisor.

    • Select Accept Partition Advice to accept the recommendations. The cube is re-created with the partitions.

    • Clear the Accept Partition Advice box to reject the recommendations.

  6. Click OK.

Figure 3-15 shows the Cube Partitioning Advisor dialog box.

Figure 3-15 Partitioning a Cube

Partitioning Advisor dialog box
Description of "Figure 3-15 Partitioning a Cube"

Example of a Partitioned Dimension

The Cube Partitioning Advisor might recommend partitioning at the Quarter level of the Calendar hierarchy of the Time dimension. Each Quarter and its descendants are stored in a separate partition. If there are three years of data in the analytic workspace, then partitioning on Quarter produces 12 bottom partitions, in addition to the default top partition. The top partition contains all remaining levels, that is, those above Quarter (such as Year) and those in other hierarchies (such as Fiscal Year or Year-to-Date).

Figure 3-16 illustrates a Time dimension partitioned by Quarter.

Figure 3-16 Partitioning Time by Quarter

Partitioning Diagram
Description of "Figure 3-16 Partitioning Time by Quarter"

Loading Data Into Cubes

You load data into cubes using the same methods as dimensions. However, loading and aggregating the data for your business measures typically takes more time to complete. Unless you are developing a dimensional model using a small sample of data, you may prefer to run the build in one or more background processes.

To load data into a cube: 

  1. In the navigation tree, right-click the Cubes folder or the name of a particular cube.

  2. Choose Maintain Cube.

    The Maintenance Wizard opens on the Select Objects page.

  3. Select one or more cubes from Available Target Objects and use the shuttle buttons to move them to Selected Target Objects. If the dimensions are loaded, you can omit them from Selected Target Objects.

  4. On the Dimension Data Processing Options page, you can keep the default values.

  5. On the Task Processing Options page, you can submit the build to the Oracle job queue or create a SQL script that you can run outside of Analytic Workspace Manager.

    You can also select the number of processes to dedicate to this build. The number of parallel processes is limited by the smallest of these numbers: the number of partitions in the cube, the number of processes dedicated to the build, and the setting of the JOB_QUEUE_PROCESSES initialization parameter.

    Click Help for information about these choices.

  6. Click Finish.

Figure 3-17 shows the build submitted immediately to the Oracle job queue.

Figure 3-17 Selecting the Scheduling Options

Maintenance wizard task processing options page
Description of "Figure 3-17 Selecting the Scheduling Options"

Example 3-2, "Maintenance Log for the Units Cube" shows the maintenance log displayed by Analytic Workspace Manager for a cube. The log refreshes throughout the build to provide you with the most up-to-date information. The maintenance log is displayed automatically for maintenance tasks that run immediately in the session. When you submit a job to the Oracle job queue, you can track its progress through the various reports in the Maintenance Reports folder: Jobs Scheduled, Jobs Running, and Jobs History. The reports in Jobs Running and Jobs History are the same as the one shown in Example 3-2.

Figure 3-18 Maintenance Log for the Units Cube

Description of Figure 3-18 follows
Description of "Figure 3-18 Maintenance Log for the Units Cube"

Displaying the Data in a Cube

After loading a cube, you can display the data for your business measures in Analytic Workspace Manager.

To display the data in a cube: 

  1. In the navigation tree, right-click the cube.

  2. Choose View Data from the shortcut menu.

The Measure Data Viewer displays the selected measure in a crosstab at the top of the page and a graph at the bottom of the page. On the crosstab, you can expand and collapse the dimension hierarchies that label the rows and columns. You can also change the location of a dimension by pivoting or swapping it. If you want, you can use multiple dimensions to label the columns and rows, by nesting one dimension under another.

To change the default display: 

  • To pivot, drag a dimension from one location and drop it at another location, usually above or below another dimension.

  • To swap dimensions, drag and drop one dimension directly over another dimension, so they exchange locations.

To make extensive changes to the selection of data, choose Query Builder from the File menu.

Figure 3-19 shows the Units cube in the Measure Viewer.

Figure 3-19 Displaying the Units Cube

Measure Data Viewer
Description of "Figure 3-19 Displaying the Units Cube"

Displaying the Cube View Descriptions

The Maintenance Wizard automatically generates relational views of a cube. Chapter 4 describes these views and explains how to query them.

Figure 3-20 shows the description of the relational view of the Units cube.

Figure 3-20 Description of the Units Cube View

Units Cube View property sheet
Description of "Figure 3-20 Description of the Units Cube View"

Choosing a Data Maintenance Method

While developing a dimensional model of your data, mapping and loading each object immediately after you create it is a good idea. That way, you can detect and correct any errors that you made to the object definition or the mapping.

However, in a production environment, you want to perform routine maintenance as quickly and easily as possible. For this stage, you can choose among data maintenance methods.

You can refresh all cubes using the Maintenance Wizard. This wizard enables you to refresh a cube immediately, or submit the refresh as a job to the Oracle job queue, or generate a PL/SQL script. You can run the script manually or using a scheduling utility, such as Oracle Enterprise Manager Scheduler or the DBMS_SCHEDULER PL/SQL package.

The generated script calls the BUILD procedure of the DBMS_CUBE PL/SQL package. You can modify this script or develop one from the start using this package.

The data for a partitioned cube is loaded and aggregated in parallel when multiple processes have been allocated to the build. You are able to see this in the build log.

In addition, each cube can support these data maintenance methods:

  • Custom cube scripts

  • Maintenance scripts

  • Cube materialized views

If you are defining cubes to replace existing materialized views, then you use the materialized views as an integral part of data maintenance. Materialized view capabilities restrict the types of analytics that can be performed by a custom cube script.

Creating and Executing Custom Cube Scripts

A cube script is an ordered list of steps that prepare a cube for querying. Each step represents a particular data transformation. By specifying the order in which these steps are performed, you can allow for interdependencies.

You can choose from these step types:

  • Clear Data: Clears the data from the entire cube, from selected measures, or from selected portions of the cube. You can clear just the detail data (called leaves) for a fast refresh, just the aggregate data, or both for a complete refresh. Clearing old data values is typically done before loading new values.

  • Load: Loads the data from the source tables into the cube. You can load all measures in the cube or just selected measures.

  • Aggregation: Generates aggregate values using the rules defined for the cube. You can aggregate the entire cube, selected measures, or selected portions of the cube.

  • Analyze: Generates optimizer statistics, which can improve the performance of some types of queries. For more information, see "Analyzing Cubes and Dimensions". Generating statistics is typically done immediately after data maintenance.

  • OLAP DML: Executes a command or program ivAn the OLAP DML.

  • PL/SQL: Executes a PL/SQL command or script. You can run a PL/SQL script, for example, at the beginning of data maintenance to initiate a refresh of the relational source tables.

If a cube is used to support advanced analytics in a cube script, then it cannot be enhanced as a cube materialized view, as described in "Adding Materialized View Capability to a Cube". In this case, you are responsible for detecting when the data in the cube is stale and must be refreshed.

Creating Cube Scripts

To create a cube script:

  1. Expand the folder for a cube that is not defined as a cube materialized view.

  2. Right-click Cube Scripts, then choose Create Cube Script.

    The Create Cube Script dialog box is displayed.

  3. On the General tab, enter a name for the cube script.

  4. To create a step, click New Step.

  5. Choose the type of step.

    The New Step dialog box is displayed for that type of step.

  6. Complete the tabs, then click OK.

    The step is listed on the Cube Script General tab.

  7. Click Create.

    The cube script appears as an item in the Cube Script folder.

  8. To run the cube script:

    1. Right-click the cube script on the navigation tree, and choose Run Cube Script.

      The Maintenance Wizard opens.

    2. Follow the steps of the wizard.

    3. To view the results, right-click the cube and choose View Data.

Figure 3-21 shows the Create Cube Script dialog box, in which several steps have been defined.

Figure 3-21 Creating a Cube Script

Create Cube Script dialog box
Description of "Figure 3-21 Creating a Cube Script"

Running a Cube Script

Each cube automatically has a default cube script named LOAD_AND_AGGREGATE that loads the data and aggregates it using the rules defined on the cube. You can define any number of additional scripts and designate one as the default cube script. All methods of refreshing a cube execute the default cube script. You can execute other cube scripts manually using the Maintenance Wizard.

To manually run a custom cube script: 

  1. Expand the Cube Scripts folder for the cube.

  2. Right-click the cube script and choose Run Cube Script to open the Maintenance Wizard.

  3. Follow the steps of the Maintenance Wizard.

To run a custom cube script as the default script: 

  1. Expand the Cube Scripts folder for the cube.

  2. Select the cube script so the General tab is displayed.

  3. Select Default Script For This Cube and click Apply.

  4. Open the Maintenance Wizard anywhere on the navigation tree and select the cube.

  5. Follow the steps of the Maintenance Wizard.

To run a cube script as a step in a maintenance script: 

  1. Create a maintenance script.

  2. Add the cube script as a step.

  3. Run the maintenance script.

Creating and Executing Maintenance Scripts

A maintenance script is an ordered list of steps for maintaining multiple cubes in a schema. By using a maintenance script, you can manage interdependencies among the cubes.

To load and aggregate a cube or a dimension, add it as a step. For more control over the maintenance of a particular cube or dimension, either create a cube script or enter the individual steps directly into the maintenance script:

  • Clear Data

  • Load

  • Aggregation

  • Analyze

  • OLAP DML

  • PL/SQL

These are the same steps described in "Creating and Executing Custom Cube Scripts".

Creating Maintenance Scripts

To create a maintenance script:

  1. In the navigation tree, right-click Maintenance Scripts, then choose Create Maintenance Script to display the Create Maintenance Script dialog box.

  2. Enter the name, labels, and description on the General tab.

  3. To create a new step, click Add, then select the type of step from the list.

  4. Create additional steps as desired. You can edit, delete, or re-order the steps at any time.

  5. Click Create. The new maintenance script appears as an object in the Maintenance Scripts folder.

Figure 3-22 shows the General tab of the Create Maintenance Script dialog box.

Figure 3-22 Creating a Maintenance Script

Description of Figure 3-22 follows
Description of "Figure 3-22 Creating a Maintenance Script"

Running Maintenance Scripts

To run a maintenance script:

  1. Expand the Maintenance Scripts folder.

  2. Right-click the script, then choose Run Maintenance Script.

  3. The Maintenance Wizard opens.

  4. Follow the steps of the Maintenance Wizard.

Adding Materialized View Capability to a Cube

Oracle OLAP cubes can be enhanced with materialized view capabilities. Cubes can be incrementally refreshed through the Oracle Database materialized view subsystem, and they can serve as targets for transparent rewrite of queries against the source tables. A cube that has been enhanced in this way is called a cube materialized view.

The OLAP dimensions associated with a cube materialized view are also defined with materialized view capabilities.

A cube must conform to these requirements, before it can be designated as a cube materialized view:

  • All dimensions of the cube have at least one level and one level-based hierarchy. Ragged and skip-level hierarchies are not supported. The dimensions must be mapped.

  • All dimensions of the cube use the same aggregation operator, which is either SUM, MIN, or MAX.

  • The cube has one or more dimensions and one or more measures.

  • The cube is fully defined and mapped. For example, if the cube has five measures, then all five are mapped to the source tables.

  • The data type of the cube is NUMBER, VARCHAR2, NVARCHAR2, or DATE.

  • The source detail tables support dimension and rely constraints. If they have not been defined, then use the Relational Schema Advisor to generate a script that defines them on the detail tables.

  • The cube is compressed.

  • The cube can be enriched with calculated measures, but it cannot support more advanced analytics in a cube script.

To add materialized view capabilities: 

  1. In the navigation tree, select a cube.

    The property sheets for the cube are displayed.

  2. Choose the Materialized Views tab.

  3. Review the checklist and, if some tests failed, fix the cause of the problem.

    You cannot define a cube materialized view until the cube is valid.

  4. For automatic refresh, complete just the top half page. For query rewrite, complete the entire page.

    Click Help for information about the choices on this page.

  5. Click Apply.

The cube materialized views appear in the same schema as the analytic workspace. A materialized view is created for the cube and each of its dimensions. Unlike traditional materialized views, cube materialized views do not use relational tables to store data; the data is stored in the backing cube. A CB$ prefix identifies the tables as cube materialized views.

The initial state of a new materialized view is invalid, so it does not support query rewrite until after it is refreshed. You can specify the first refresh time on the Materialized View tab of the cube, or you can run the Maintenance Wizard.

Figure 3-23 shows the Materialized View tab of the Units Cube.

Figure 3-23 Defining a Materialized View

Cube Materialized View tab
Description of "Figure 3-23 Defining a Materialized View"

Supporting Multiple Languages

A single analytic workspace can support multiple languages. This support enables users of OLAP applications and tools to view the metadata in their native languages. For example, you can provide translations for the display names of measures, cubes, and dimensions. You can also map attributes to multiple columns, one for each language.

The number and choice of languages is restricted only by the database character set and your ability to provide translated text. Languages can be added or removed at any time.

To add support for multiple languages: 

  1. In the navigation tree, expand the folder for the analytic workspace.

  2. Select Languages to display its property page.

  3. On the General tab, click Modify Languages.

  4. On the Modify Languages dialog box, select the languages that the analytic workspace must support. Use the shuttle keys to move them to the Selected Languages box.

  5. Click OK to return to the Languages property page.

  6. Enter the translations of the various labels and descriptions. Each language has a column where you can enter this information.

  7. For each dimension, open the Mappings window. Map the attributes to the source columns for each language.

Figure 3-24 shows the addition of French to the analytic workspace.

Figure 3-24 Adding a Language

Description of Figure 3-24 follows
Description of "Figure 3-24 Adding a Language"

Defining Measure Folders

Measure folders organize and label groups of measures. Users may have access to several analytic workspaces or relational schemas with measures named Sales or Costs, and measure folders provide a way for applications to differentiate among them.

To create a measure folder: 

  1. Expand the folder for the analytic workspace.

  2. Right-click Measure Folders, then choose Create Measure Folder from the shortcut menu.

  3. Complete the General tab of the Create Measure Folder dialog box.

    Click Help for specific information about these choices.

The measure folder appears in the navigation tree under Measure Folders. You can also create subfolders.

Figure 3-25 shows creation of a measure folder.

Figure 3-25 Creating a Measure Folder

Create Measure Folder dialog box
Description of "Figure 3-25 Creating a Measure Folder"

Using Templates to Re-Create Dimensional Objects

Analytic Workspace Manager enables you to save all or part of the data model as a text file. This text file contains the XML definitions of the dimensional objects, such as dimensions, levels, hierarchies, attributes, and measures. Only the metadata is saved, not the data. Templates are small files, so you can easily distribute them by email or on a Web site, just as the templates for Global and Sales History are distributed on the Oracle Web site. To re-create the dimensional objects, you simply identify the templates in Analytic Workspace Manager.

You can save the following types of objects as XML templates:

  • Analytic workspace: Saves all dimensional objects. You can save measure folders only by saving the complete analytic workspace.

  • Dimension: Saves the dimension and its levels, hierarchies, attributes, and mappings.

  • Cube: Saves the cube and its measures, calculated measures, cube scripts, and mappings.

You can save the template anywhere on your local system.

To create a template: 

  • In the navigation tree, right-click an analytic workspace, a dimension, or a cube, and choose Save object to Template.

To re-create an analytic workspace from a template: 

  • In the navigation tree, right-click Analytic Workspaces and choose Create Analytic Workspace From Template.

To add or modify a dimension or a cube using a template: 

  1. Create or open an analytic workspace.

  2. In the navigation tree, right-click Dimensions or Cubes and choose Create object From Template. To overwrite the metadata for an existing dimension or cube, select Modify Existing Objects on the Options tab.

PK JAvAPK,AOEBPS/query.htm Querying Dimensional Objects

4 Querying Dimensional Objects

Oracle OLAP adds power to your SQL applications by providing extensive analytic content and fast query response times. A SQL query interface enables any application to query cubes and dimensions without any knowledge of OLAP.

The OLAP option automatically generates a set of relational views on cubes, dimensions, and hierarchies. SQL applications query these views to display the information-rich contents of these objects to analysts and decision makers. You can also create custom views that follow the structure expected by your applications, using the system-generated views like base tables.

In this chapter, you learn the basic methods for querying dimensional objects in SQL. It contains the following topics:


See Also:


Exploring the OLAP Views

The system-generated views are created in the same schema as the analytic workspace. Oracle OLAP provides three types of views:

  • Cube views

  • Dimension views

  • Hierarchy views

These views are related in the same way as fact and dimension tables in a star schema. Cube views serve the same function as fact tables, and hierarchy views and dimension views serve the same function as dimension tables. Typical queries join a cube view with either a hierarchy view or a dimension view.

Cube Views

Each cube has a cube view that presents the data for all the measures and calculated measures in the cube. You can use a cube view like a fact table in a star or snowflake schema. However, the cube view contains all the summary data in addition to the detail level data.

Discovering the Names of the Cube Views

The default name for a cube view is cube_VIEW. To find the view for UNITS_CUBE in your schema, you might issue a query like this one:

SELECT view_name FROM user_views WHERE view_name LIKE 'UNITS_CUBE%';

VIEW_NAME
------------------------------
UNITS_CUBE_VIEW

The next query returns the names of all the cube views in your schema from USER_CUBE_VIEWS:

SELECT view_name FROM user_cube_views;
 
VIEW_NAME
------------------------------
UNITS_CUBE_VIEW
PRICE_CUBE_VIEW

Discovering the Columns of a Cube View

Like a fact table, a cube view contains a column for each measure, calculated measure, and dimension in the cube. In the following example, UNITS_CUBE_VIEW has columns for the SALES, UNITS, and COST measures, for several calculated measures on SALES, and for the TIME, CUSTOMER, PRODUCT, and CHANNEL dimensions.

DESCRIBE units_cube_view
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
SALES                                              NUMBER
UNITS                                              NUMBER
COST                                               NUMBER
SALES_PP                                           NUMBER
SALES_CHG_PP                                       NUMBER
SALES_PCTCHG_PP                                    NUMBER
SALES_PROD_SHARE_PARENT                            NUMBER
SALES_PROD_SHARE_TOTAL                             NUMBER
SALES_PROD_RANK_PARENT_PP                          NUMBER
TIME                                               VARCHAR2(100)
CUSTOMER                                           VARCHAR2(100)
PRODUCT                                            VARCHAR2(100)
CHANNEL                                            VARCHAR2(100)

The USER_CUBE_VIEW_COLUMNS data dictionary view describes the columns of a cube view, as shown by the following query.

SELECT column_name, column_type FROM user_cube_view_columns
     WHERE view_name = 'UNITS_CUBE_VIEW';
 
COLUMN_NAME                    COLUMN_TYPE
------------------------------ --------------
SALES                          MEASURE
UNITS                          MEASURE
COST                           MEASURE
SALES_PP                       MEASURE
SALES_CHG_PP                   MEASURE
SALES_PCTCHG_PP                MEASURE
SALES_PROD_SHARE_PARENT        MEASURE
SALES_PROD_SHARE_TOTAL         MEASURE
SALES_PROD_RANK_PARENT_PP      MEASURE
TIME                           KEY
CUSTOMER                       KEY
PRODUCT                        KEY
CHANNEL                        KEY
 
13 rows selected.

Displaying the Contents of a Cube View

You can display the contents of a cube view quickly with a query like this one. All levels of the data are contained in the cube, from the detail level to the top.

SELECT sales, units, time, customer, product, channel
     FROM units_cube_view WHERE ROWNUM < 15;

     SALES      UNITS TIME       CUSTOMER   PRODUCT    CHANNEL
---------- ---------- ---------- ---------- ---------- --------
1120292752    4000968 TOTAL      TOTAL      TOTAL      TOTAL
 134109248     330425 CY1999     TOTAL      TOTAL      TOTAL
 130276514     534069 CY2003     TOTAL      TOTAL      TOTAL
 100870877     253816 CY1998     TOTAL      TOTAL      TOTAL
 136986572     565718 CY2005     TOTAL      TOTAL      TOTAL
 140138317     584929 CY2006     TOTAL      TOTAL      TOTAL
 144290686     587419 CY2004     TOTAL      TOTAL      TOTAL
 124173522     364233 CY2000     TOTAL      TOTAL      TOTAL
  92515295     364965 CY2002     TOTAL      TOTAL      TOTAL
 116931722     415394 CY2001     TOTAL      TOTAL      TOTAL
31522409.5      88484 CY2000.Q1  TOTAL      TOTAL      TOTAL
27798426.6      97346 CY2001.Q2  TOTAL      TOTAL      TOTAL
29691668.2     105704 CY2001.Q3  TOTAL      TOTAL      TOTAL
32617248.6     138953 CY2005.Q3  TOTAL      TOTAL      TOTAL
 
14 rows selected.

Dimension and Hierarchy Views

Each dimension has one dimension view plus a hierarchy view for each hierarchy associated with the dimension. For example, a Time dimension might have these three views:

  • Time dimension view

  • Calendar hierarchy view

  • Fiscal hierarchy view

You can use dimension views and hierarchy views like dimension tables in a star schema.

Discovering the Names of Dimension and Hierarchy Views

USER_CUBE_DIM_VIEWS identifies the dimension views for all dimensions. The default name for a dimension view is dimension_VIEW.

SELECT * FROM user_cube_dim_views;
 
DIMENSION_NAME                 VIEW_NAME
------------------------------ ------------------------------
PRODUCT                        PRODUCT_VIEW
CUSTOMER                       CUSTOMER_VIEW
CHANNEL                        CHANNEL_VIEW
TIME                           TIME_VIEW

USER_CUBE_HIER_VIEWS identifies the hierarchy views for all the dimensions. For a hierarchy view, the default name is dimension_hierarchy_VIEW. The following query returns the dimension, hierarchy, and view names.

SELECT * FROM user_cube_hier_views ORDER BY dimension_name;
 
DIMENSION_NAME  HIERARCHY_NAME  VIEW_NAME
--------------- --------------- ------------------------------
CHANNEL         PRIMARY         CHANNEL_PRIMARY_VIEW
CUSTOMER        SEGMENT         CUSTOMER_SEGMENT_VIEW
CUSTOMER        SHIPMENTS       CUSTOMER_SHIPMENTS_VIEW
PRODUCT         PRIMARY         PRODUCT_PRIMARY_VIEW
TIME            FISCAL          TIME_FISCAL_VIEW
TIME            CALENDAR        TIME_CALENDAR_VIEW

Discovering the Columns of a Dimension View

Like a dimension table, a dimension view contains a key column, level name, level keys for every level of every hierarchy associated with the dimension, and attribute columns. In the following example, TIME_VIEW has a column for the dimension keys, the level name, and the dimension attributes.

DESCRIBE time_view
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
DIM_KEY                                            VARCHAR2(100)
LEVEL_NAME                                         VARCHAR2(30)
DIM_ORDER                                          NUMBER
END_DATE                                           DATE
LONG_DESCRIPTION                                   VARCHAR2(100)
SHORT_DESCRIPTION                                  VARCHAR2(100)
TIME_SPAN                                          NUMBER

USER_CUBE_DIM_VIEW_COLUMNS describes the information in each column, as shown in this query.

SELECT column_name, column_type FROM user_cube_dim_view_columns
     WHERE view_name ='TIME_VIEW';
 
COLUMN_NAME                    COLUMN_TYPE
------------------------------ --------------------
DIM_KEY                        KEY
LEVEL_NAME                     LEVEL_NAME
DIM_ORDER                      DIM_ORDER
END_DATE                       ATTRIBUTE
TIME_SPAN                      ATTRIBUTE
LONG_DESCRIPTION               ATTRIBUTE
SHORT_DESCRIPTION              ATTRIBUTE

Displaying the Contents of a Dimension View

The following query displays the level and attributes of each dimension key.

SELECT dim_key, level_name, long_description description, time_span, end_date
     FROM time_view WHERE dim_key LIKE '%2005%';
 
DIM_KEY      LEVEL_NAME           DESCRIPTION   TIME_SPAN END_DATE
------------ -------------------- ------------ ---------- ---------
CY2005       CALENDAR_YEAR        2005                365 31-DEC-05
CY2005.Q2    CALENDAR_QUARTER     Q2.05                91 30-JUN-05
CY2005.Q4    CALENDAR_QUARTER     Q4.05                92 31-DEC-05
CY2005.Q3    CALENDAR_QUARTER     Q3.05                92 30-SEP-05
CY2005.Q1    CALENDAR_QUARTER     Q1.05                90 31-MAR-05
2005.01      MONTH                JAN-05               31 31-JAN-05
2005.05      MONTH                MAY-05               31 31-MAY-05
2005.07      MONTH                JUL-05               31 31-JUL-05
2005.03      MONTH                MAR-05               31 31-MAR-05
2005.04      MONTH                APR-05               30 30-APR-05
2005.08      MONTH                AUG-05               31 31-AUG-05
2005.09      MONTH                SEP-05               30 30-SEP-05
2005.02      MONTH                FEB-05               28 28-FEB-05
2005.11      MONTH                NOV-05               30 30-NOV-05
2005.06      MONTH                JUN-05               30 30-JUN-05
2005.10      MONTH                OCT-05               31 31-OCT-05
2005.12      MONTH                DEC-05               31 31-DEC-05
FY2005       FISCAL_YEAR          FY2005              365 30-JUN-05
FY2005.Q4    FISCAL_QUARTER       Q4 FY-05             91 30-JUN-05
FY2005.Q1    FISCAL_QUARTER       Q1 FY-05             92 30-SEP-04
FY2005.Q2    FISCAL_QUARTER       Q2 FY-05             92 31-DEC-04
FY2005.Q3    FISCAL_QUARTER       Q3 FY-05             90 31-MAR-05
 
22 rows selected.

Discovering the Columns of a Hierarchy View

Like the dimension views, the hierarchy views also contain columns for the dimension key, level name, and level keys. However, all of the rows and columns are associated with the dimension keys that belong to the hierarchy.

DESCRIBE time_calendar_view
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
DIM_KEY                                            VARCHAR2(100)
LEVEL_NAME                                         VARCHAR2(30)
DIM_ORDER                                          NUMBER
HIER_ORDER                                         NUMBER
LONG_DESCRIPTION                                   VARCHAR2(100)
SHORT_DESCRIPTION                                  VARCHAR2(100)
END_DATE                                           DATE
TIME_SPAN                                          NUMBER
PARENT                                             VARCHAR2(100)
TOTAL                                              VARCHAR2(100)
CALENDAR_YEAR                                      VARCHAR2(100)
CALENDAR_QUARTER                                   VARCHAR2(100)
MONTH                                              VARCHAR2(100)

Displaying the Contents of a Hierarchy View

The following query displays the dimension keys, parent key, and the full ancestry for calendar year 2005.

SELECT dim_key, long_description description, parent, calendar_year year,
       calendar_quarter quarter, month FROM time_calendar_view
       WHERE calendar_year='CY2005'
       ORDER BY level_name, end_date;

DIM_KEY      DESCRIPTION  PARENT       YEAR         QUARTER      MONTH
------------ ------------ ------------ ------------ ------------ ------------
CY2005.Q1    Q1.05        CY2005       CY2005       CY2005.Q1
CY2005.Q2    Q2.05        CY2005       CY2005       CY2005.Q2
CY2005.Q3    Q3.05        CY2005       CY2005       CY2005.Q3
CY2005.Q4    Q4.05        CY2005       CY2005       CY2005.Q4
CY2005       2005         TOTAL        CY2005
2005.01      JAN-05       CY2005.Q1    CY2005       CY2005.Q1    2005.01
2005.02      FEB-05       CY2005.Q1    CY2005       CY2005.Q1    2005.02
2005.03      MAR-05       CY2005.Q1    CY2005       CY2005.Q1    2005.03
2005.04      APR-05       CY2005.Q2    CY2005       CY2005.Q2    2005.04
2005.05      MAY-05       CY2005.Q2    CY2005       CY2005.Q2    2005.05
2005.06      JUN-05       CY2005.Q2    CY2005       CY2005.Q2    2005.06
2005.07      JUL-05       CY2005.Q3    CY2005       CY2005.Q3    2005.07
2005.08      AUG-05       CY2005.Q3    CY2005       CY2005.Q3    2005.08
2005.09      SEP-05       CY2005.Q3    CY2005       CY2005.Q3    2005.09
2005.10      OCT-05       CY2005.Q4    CY2005       CY2005.Q4    2005.10
2005.11      NOV-05       CY2005.Q4    CY2005       CY2005.Q4    2005.11
2005.12      DEC-05       CY2005.Q4    CY2005       CY2005.Q4    2005.12
 
17 rows selected.

Creating Basic Queries

Querying a cube is similar to querying a star schema. In a star schema, you join a fact table to a dimension table. The fact table provides the numeric business measures, and the dimension table provides descriptive attributes that give meaning to the data. Similarly, you join a cube view with either a dimension view or a hierarchy view to provide fully identified and meaningful data to your users.

For dimensions with no hierarchies, use the dimension views in your queries. For dimensions with hierarchies, use the hierarchy views, because they contain more information than the dimension views.

When querying a cube, remember these guidelines:

  • Apply a filter to every dimension.

    The cube contains both detail level and aggregated data. A query with an unfiltered dimension typically returns more data than users need, which negatively impacts performance.

  • Let the cube aggregate the data.

    Because the aggregations are calculated in the cube, a typical query does not need a GROUP BY clause. Simply select the aggregations you want by using the appropriate filters on the dimension keys or attributes.

Applying a Filter to Every Dimension

To create a level filter, you must know the names of the dimension levels. You can easily acquire them by querying the dimension or hierarchy views:

SELECT DISTINCT level_name FROM time_calendar_view;
 
LEVEL_NAME
------------------------------
CALENDAR_YEAR
CALENDAR_QUARTER
MONTH
TOTAL

Several data dictionary views list the names of the levels. The following example queries USER_CUBE_HIER_LEVELS.

SELECT level_name FROM user_cube_hier_levels
     WHERE dimension_name = 'TIME' AND hierarchy_name ='CALENDAR';
 
LEVEL_NAME
--------------------
TOTAL
CALENDAR_YEAR
CALENDAR_QUARTER
MONTH

To see the importance of applying a filter to every dimension, consider the query in Example 4-1, which has no filter on the time dimension.

Example 4-1 Displaying Aggregates at All Levels of Time

/* Select key descriptions and facts */
SELECT t.long_description time,
     ROUND(f.sales) sales
/* From dimension views and cube view */
  FROM time_calendar_view t,
     product_primary_view p,
     customer_shipments_view cu,
     channel_primary_view ch,
     units_cube_view f
/* No filter on Time */
  WHERE p.level_name = 'TOTAL' 
     AND cu.level_name = 'TOTAL'
     AND ch.level_name = 'TOTAL'
/* Join dimension views to cube view */
     AND t.dim_key = f.time
     AND p.dim_key = f.product
     AND cu.dim_key = f.customer
     AND ch.dim_key = f.channel
  ORDER BY t.end_date;

Without a filter on the Time dimension, the query returns values for every level of time. This is more data than users typically want to see, and the volume of data returned can negatively impact performance.

TIME            SALES
---------- ----------
JAN-98        8338545
FEB-98        7972132
Q1.98        24538588
MAR-98        8227911
APR-98        8470315
MAY-98        8160573
JUN-98        8362386
Q2.98        24993273
JUL-98        8296226
AUG-98        8377587
SEP-98        8406728
Q3.98        25080541
OCT-98        8316169
NOV-98        8984156
Q4.98        26258474
1998        100870877
                .
                .
                .

Now consider the results when a filter restricts Time to yearly data.

Example 4-2 shows a basic query. It selects the Sales measure from UNITS_CUBE_VIEW, and joins the keys from the cube view to the hierarchy views to get descriptions of the keys.

Example 4-2 Basic Cube View Query

/* Select key descriptions and facts */
SELECT t.long_description time,
     ROUND(f.sales) sales
/* From dimension views and cube view */
  FROM time_calendar_view t,
     product_primary_view p,
     customer_shipments_view cu,
     channel_primary_view ch,
     units_cube_view f
/* Create level filters */
  WHERE t.level_name = 'CALENDAR_YEAR'
     AND p.level_name = 'TOTAL'
     AND cu.level_name = 'TOTAL'
     AND ch.level_name = 'TOTAL'
/* Join dimension views to cube view */
     AND t.dim_key = f.time
     AND p.dim_key = f.product
     AND cu.dim_key = f.customer
     AND ch.dim_key = f.channel
  ORDER BY t.end_date;

Example 4-2 selects the following rows. For CUSTOMER, PRODUCT, and CHANNEL, only one value is at the top level. TIME has a value for each calendar year.

TIME          SALES
-------- ----------
1998      100870877
1999      134109248
2000      124173522
2001      116931722
2002       92515295
2003      130276514
2004      144290686
2005      136986572
2006      140138317

Dimension attributes also provide a useful way to select the data for a query. The WHERE clause in Example 4-3 uses attributes values to filter all of the dimensions.

Example 4-3 Selecting Data with Attribute Filters

/* Select key descriptions and facts */
SELECT t.long_description time,
     p.long_description product,
     cu.long_description customer,
     ch.long_description channel,
     ROUND(f.sales) sales
/* From dimension views and cube view */
FROM time_calendar_view t,
     product_primary_view p,
     customer_shipments_view cu,
     channel_primary_view ch,
     units_cube_view f
/* Create attribute filters */
WHERE t.long_description in ('2005', '2006')
    AND p.package = 'Laptop Value Pack'
    AND cu.long_description LIKE '%Boston%'
    AND ch.long_description = 'Internet'
/* Join dimension views to cube view */
    AND t.dim_key = f.time
    AND p.dim_key = f.product
    AND cu.dim_key = f.customer
    AND ch.dim_key = f.channel
ORDER BY time, customer;

The query selects two calendar years, the products in the Laptop Value Pack, the customers in Boston, and the Internet channel.

TIME   PRODUCT                        CUSTOMER              CHANNEL       SALES
------ ------------------------------ --------------------- -------- ----------
2005   Laptop carrying case           KOSH Entrpr Boston    Internet       5936
2005   56Kbps V.92 Type II Fax/Modem  KOSH Entrpr Boston    Internet      45285
2005   Internal 48X CD-ROM            KOSH Entrpr Boston    Internet       2828
2005   Standard Mouse                 KOSH Entrpr Boston    Internet        638
2005   Envoy Standard                 Warren Systems Boston Internet      19359
2005   Laptop carrying case           Warren Systems Boston Internet      13434
2005   Standard Mouse                 Warren Systems Boston Internet        130
2006   Standard Mouse                 KOSH Entrpr Boston    Internet        555
2006   Laptop carrying case           KOSH Entrpr Boston    Internet       6357
2006   56Kbps V.92 Type II Fax/Modem  KOSH Entrpr Boston    Internet      38042
2006   Internal 48X CD-ROM            KOSH Entrpr Boston    Internet       3343
2006   Envoy Standard                 Warren Systems Boston Internet      24198
2006   Laptop carrying case           Warren Systems Boston Internet      13153
2006   Standard Mouse                 Warren Systems Boston Internet         83
 
14 rows selected.

Allowing the Cube to Aggregate the Data

A cube contains all of the aggregate data. As shown in this chapter, a query against a cube just selects the aggregate data. It does not calculate the values.

The following is a basic query against a fact table:

/* Querying a fact table */
SELECT t.calendar_year_dsc time,
     SUM(f.sales) sales
  FROM time_dim t, units_fact f
  WHERE t.calendar_year_dsc IN ('2005', '2006')
     AND t.month_id = f.month_id
  GROUP BY t.calendar_year_dsc;

The next query fetches the exact same results from a cube using filters:

/* Querying a cube */
SELECT t.long_description time, f.sales sales
  FROM time_calendar_view t, 
     product_primary_view p,
     customer_shipments_view cu,
     channel_primary_view ch,
     units_cube_view f
/* Apply filters to every dimension */
  WHERE t.long_description IN ('2005', '2006')
     AND p.level_name = 'TOTAL'
     AND cu.level_name = 'TOTAL'
     AND ch.level_name = 'TOTAL'
/* Join dimension views to cube view */
     AND t.dim_key = f.TIME
     AND p.dim_key = f.product
     AND cu.dim_key = f.customer
     AND ch.dim_key = f.channel
  ORDER BY time;

Both queries return these results:

TIME       SALES
----- ----------
2005   136986572
2006   140138317

The query against the cube does not compute the aggregate values with a SUM operator and GROUP BY clause. Because the aggregates exist in the cube, this would re-aggregate previously aggregated data. Instead, the query selects the aggregates directly from the cube and specifies the desired aggregates by applying the appropriate filter to each dimension.

Query Processing

The most efficient queries allow the OLAP engine to filter the data, so that the minimum number of rows required by the query are returned to SQL.

The following are among the WHERE clause operations that are pushed into the OLAP engine for processing:

  • =

  • !=

  • >

  • !>

  • <

  • !<

  • IN

  • NOT IN

  • IS NULL

  • LIKE

  • NOT LIKE

The OLAP engine also processes nested character functions, including INSTR, LENGTH, NVL, LOWER, UPPER, LTRIM, RTRIM, TRIM, LPAD, RPAD, and SUBSTR.

SQL processes other operations and functions in the WHERE clause, and all operations in other parts of the SELECT syntax.

Creating Hierarchical Queries

Drilling is an important capability in business analysis. In a dashboard or an application, users click a dimension key to change the selection of data. Decision makers frequently want to drill down to see the contributors to a data value, or drill up to see how a particular data value contributes to the whole. For example, the Boston regional sales manager might start at total Boston sales, drill down to see the contributions of each sales representative, then drill up to see how the Boston region contributes to the New England sales total.

The hierarchy views include a PARENT column that identifies the parent of every dimension key. This column encapsulates all of the hierarchical information of the dimension: If you know the parent of every key, then you can derive the ancestors, the children, and the descendants.

For level-based hierarchies, the LEVEL_NAME column supplements this information by providing a convenient way to identify all the keys at the same depth in the hierarchy, from the top to the base. For value-based hierarchies, the PARENT column provides all the information about the hierarchy.


See Also:

Chapter 6, "Developing Reports and Dashboards" about using bind variables to support drilling

Drilling Down to Children

You can use the PARENT column of a hierarchy view to select only the children of a particular value. The following WHERE clause selects the children of calendar year 2005.

/* Select children of calendar year 2005 */
WHERE  t.parent = 'CY2005'
   AND p.dim_key = 'TOTAL'
   AND cu.dim_key = 'TOTAL'
   AND ch.dim_key = 'TOTAL'

The query drills down from Year to Quarter. The four quarters Q1-05 to Q4-05 are the children of year CY2005 in the Calendar hierarchy.

TIME SALES -------- ---------- Q1.05 31381338 Q2.05 37642741 Q3.05 32617249 Q4.05 35345244

Drilling Up to Parents

The PARENT column of a hierarchy view identifies the parent of each dimension key. Columns of level keys identify the full heritage. The following WHERE clause selects the parent of a Time key based on its LONG_DESCRIPTION attribute.

/* Select the parent of a Time key*/
WHERE t.dim_key = 
   (SELECT DISTINCT parent
      FROM time_calendar_view
      WHERE long_description='JAN-05')
   AND p.dim_key= 'TOTAL'
   AND cu.dim_key = 'TOTAL'
   AND ch.dim_key = 'TOTAL'

The query drills up from Month to Quarter. The parent of month JAN-05 is the quarter Q1-05 in the Calendar hierarchy.

TIME          SALES
-------- ----------
Q1.05      31381338

Drilling Down to Descendants

The following WHERE clause selects the descendants of calendar year 2005 by selecting the rows with a LEVEL_NAME of MONTH and a CALENDAR_YEAR of CY2005.

/* Select Time level and ancestor */
WHERE t.level_name = 'MONTH'
    AND t.calendar_year = 'CY2005'
    AND p.dim_key = 'TOTAL'
    AND cu.dim_key = 'TOTAL'
    AND ch.dim_key = 'TOTAL'

The query drills down two levels, from year to quarter to month. The 12 months Jan-05 to Dec-05 are the descendants of year 2005 in the Calendar hierarchy.

TIME          SALES
-------- ----------
JAN-05     12093518
FEB-05     10103162
MAR-05      9184658
APR-05      9185964
MAY-05     11640216
JUN-05     16816561
JUL-05     11110903
AUG-05      9475807
SEP-05     12030538
OCT-05     11135032
NOV-05     11067754
DEC-05     13142459

Drilling Up to Ancestors

The hierarchy views provide the full ancestry of each dimension key, as shown in "Displaying the Contents of a Hierarchy View". The following WHERE clause uses the CALENDAR_YEAR level key column to identify the ancestor of a MONTH dimension key.

/* Select the ancestor of a Time key based on its Long Description attribute */
WHERE t.dim_key =
   (SELECT calendar_year
      FROM time_calendar_view
      WHERE long_description = 'JAN-05')
   AND p.dim_key = 'TOTAL'
   AND cu.dim_key = 'TOTAL'
   AND ch.dim_key = 'TOTAL'

The query drills up two levels from month to quarter to year. The ancestor of month Jan-05 is the year 2005 in the Calendar hierarchy.

TIME          SALES
-------- ----------
2005      136986572

Using Calculations in Queries

A DBA can create calculated measures in Analytic Workspace Manager, so they are available to all applications. This not only simplifies application development, but ensures that all applications use the same name for the same calculation.

Nonetheless, you may want to develop queries that include your own calculations. In this case, you can use an inner query to select aggregate data from the cube, then perform calculations in an outer query. You can select data from cubes that use any type of aggregation operators, and you can use any functions or operators in the query. You must ensure only that you select the data from the cube at the appropriate levels for the calculation, and that the combination of operators in the cube and in the query create the calculation you want.

Example 4-4 shows a query that answers the question, What was the average sales of Sentinel Standard computers to Government customers for the third quarter of fiscal year 2005. UNITS_CUBE is summed over all dimensions, so that FY2005.Q3 is a total for July, August, and September. The inner query extracts the data for these months, and the outer query uses the MIN, MAX, and AVG operator s and a GROUP BY clause to calculate the averages.

Example 4-4 Calculating Average Sales Across Customers

SELECT customer, ROUND(MIN(sales)) minimum, ROUND(MAX(sales)) maximum, 
   ROUND(AVG(sales)) average
FROM
   (SELECT cu.long_description customer,
       f.sales sales
   FROM time_fiscal_view t,
     product_primary_view p,
     customer_segment_view cu,
     channel_primary_view ch,
     units_cube_view f
   WHERE t.parent = 'FY2005.Q3'
     AND p.dim_key = 'SENT STD'
     AND cu.parent = 'GOV'
     AND ch.level_name = 'TOTAL'
     AND t.dim_key = f.time
     AND p.dim_key = f.product
     AND cu.dim_key = f.customer
     AND ch.dim_key = f.channel
   )
GROUP BY customer
ORDER BY customer;

This is the data extracted from the cube by the inner query:

CUSTOMER                                 TIME          SALES
---------------------------------------- -------- ----------
Dept. of Labor                           JAN-05      1553.26
Dept. of Labor                           MAR-05       1555.6
Ministry of Intl Trade                   JAN-05      1553.26
Ministry of Intl Trade                   FEB-05      1554.56
Ministry of Intl Trade                   MAR-05       1555.6
Royal Air Force                          JAN-05      1553.26
Royal Air Force                          FEB-05      6218.23
UK Environmental Department              JAN-05      4659.78
UK Environmental Department              FEB-05      3109.12

The outer query calculates the minimum, maximum, and average sales for each customer:

CUSTOMER                          MINIMUM    MAXIMUM    AVERAGE
------------------------------ ---------- ---------- ----------
Dept. of Labor                       1553       1556       1554
Ministry of Intl Trade               1553       1556       1554
Royal Air Force                      1553       6218       3886
UK Environmental Department          3109       4660       3884

Using Attributes for Aggregation

An OLAP cube aggregates the data within its hierarchies, using the parent-child relationships revealed in the hierarchy views. The OLAP engine does not calculate aggregates over dimension attribute values.

Nonetheless, you may want to aggregate products over color or size, or customers by age, zip code, or population density. This is the situation when you can use a GROUP BY clause when querying a cube. Your query can extract data from the cube, then use SQL to aggregate by attribute value.

The cube must use the same aggregation operator for all dimensions, and the aggregation operator in the SELECT list of the query must match the aggregation operator of the cube. You can use a GROUP BY clause to query cubes that use these operators:

  • First Non-NA Value

  • Last Non-NA Value

  • Maximum

  • Minimum

  • Sum

Aggregating Measures Over Attributes

Example 4-5 shows a query that aggregates over an attribute named Package. It returns these results:

TIME   PACKAGE                 SALES
------ ------------------ ----------
2005   All                1809157.64
2005   Multimedia         18083256.3
2005   Executive            19836977
2005   Laptop Value Pack  9547494.81

Units Cube uses the SUM operator for all dimensions, and the query uses the SUM operator to aggregate over Sales. The Package attribute applies only to the Item level of the Product dimension, so the query selects the Item level of Product. It also eliminates nulls for Package, so that only products that belong to a package are included in the calculation. The GROUP BY clause breaks out Total Sales by Time and Package.

Example 4-5 Aggregating Over an Attribute

SELECT t.long_description time,
     p.package package,
     SUM(f.sales) sales
  FROM time_calendar_view t,
     product_primary_view p,
     customer_shipments_view cu,
     channel_primary_view ch,
     units_cube_view f
/* Select Product by level and attribute */
  WHERE p.level_name = 'ITEM'
     AND p.package IS NOT NULL
     AND t.long_description = '2005'
     AND cu.level_name = 'TOTAL'
     AND ch.level_name = 'TOTAL'
/* Join dimensions and cube */
     AND t.dim_key = f.time
     AND p.dim_key = f.product
     AND cu.dim_key = f.customer
     AND ch.dim_key = f.channel
  GROUP BY t.long_description, p.package;

Aggregating Calculated Measures Over Attributes

Before using the technique described in "Aggregating Measures Over Attributes", ensure that the calculation is meaningful. For example, the common calculation Percent Change might be defined as a calculated measure in a cube. Summing over Percent Change would produce unexpected results, because the calculation for Percent Change ((a-b)/b,) is not additive.

Consider the following rows of data. The correct Total Percent Change is .33, whereas the sum of the percent change for the first two rows is .75.

RowSalesSales Prior PeriodPercent Change
11510.50
22520.25
Total4030.33

Example 4-6 shows a query that aggregates over the Package attribute and calculates Percent Change From Prior Period. The inner query aggregates Sales and Sales Prior Period over the attributes, and the outer query uses the results to compute the percent change. These are the results of the query, which show the expected results for PCT_CHG_PP:

TIME   PACKAGE                 SALES PRIOR_PERIOD PCT_CHG_PP
------ ------------------ ---------- ------------ ----------
2005   All                1809157.64   1853928.06 -.02414895
2006   All                1720399.03   1809157.64 -.04906074
2005   Executive            19836977   20603879.8 -.03722128
2006   Executive          19580638.4     19836977 -.01292226
2005   Laptop Value Pack  9547494.81   10047298.6 -.04974509
2006   Laptop Value Pack  9091450.58   9547494.81 -.04776585
2005   Multimedia         18083256.3   19607675.5 -.07774604
2006   Multimedia         18328678.7   18083256.3 .013571806
 
8 rows selected.

Example 4-6 Querying Over Attributes Using Calculated Measures

/* Calculate Percent Change */
SELECT TIME, package, sales, prior_period,
     ((sales - prior_period) / prior_period) pct_chg_pp
FROM
/* Fetch data from the cube and aggregate over Package */
     (SELECT t.long_description time,
          p.package package,
          SUM(f.sales) sales,
          SUM(f.sales_pp) prior_period
       FROM time_calendar_view t,
          product_primary_view p,
          customer_shipments_view cu,
          channel_primary_view ch,
          units_cube_view f
/* Create filters */
       WHERE p.level_name = 'ITEM'
          AND p.package IS NOT NULL
          AND t.long_description IN ('2005', '2006')
          AND cu.level_name = 'TOTAL'
          AND ch.level_name = 'TOTAL'
/* Join dimension views to cube view */
          AND t.dim_key = f.time
          AND p.dim_key = f.product
          AND cu.dim_key = f.customer
          AND ch.dim_key = f.channel
       GROUP BY t.long_description, p.package
       ORDER BY p.package);

Viewing Execution Plans

You can generate and view execution plans for queries against cubes and dimensions the same as for those against relational tables.

The SQL EXPLAIN PLAN command creates a table with the content of the explain plan. The default table name is PLAN_TABLE.

Generating Execution Plans

The following command creates an execution plan for a basic query on a cube:

EXPLAIN PLAN FOR
  SELECT t.long_description time,
     p.long_description product,
     cu.long_description customer,
     ch.long_description channel,
     f.sales sales
  FROM time_calendar_view t,
     product_primary_view p,
     customer_shipments_view cu,
     channel_primary_view ch,
     units_cube_view f
  WHERE t.level_name = 'CALENDAR_YEAR'
     AND p.level_name = 'TOTAL'
     AND cu.level_name = 'TOTAL'
     AND ch.level_name = 'TOTAL'
     AND t.dim_key = f.TIME
     AND p.dim_key = f.product
     AND cu.dim_key = f.customer
     AND ch.dim_key = f.channel
  ORDER BY t.end_date;

Example 4-7 shows selected columns of the execution plan. A CUBE SCAN operation is performed. The plan option is PARTIAL OUTER, which is described in "Types of Execution Plans".

Example 4-7 Selected Columns From PLAN_TABLE

SQL> SELECT operation, options, object_name FROM plan_table;
 
OPERATION            OPTIONS              OBJECT_NAME
-------------------- -------------------- ---------------
SELECT STATEMENT
SORT                 ORDER BY
JOINED CUBE SCAN     PARTIAL OUTER
CUBE ACCESS                               UNITS_CUBE
CUBE ACCESS                               CHANNEL
CUBE ACCESS                               CUSTOMER
CUBE ACCESS                               PRODUCT
CUBE ACCESS                               TIME
 
8 rows selected.

The DISPLAY table function of the DBMS_XPLAN PL/SQL package formats and displays information from an execution plan, as shown in Example 4-8.

Example 4-8 Formatted Execution Plan From DBMS_XPLAN

SQL> SELECT plan_table_output FROM TABLE(dbms_xplan.display());
 
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------
Plan hash value: 1667678335
 
----------------------------------------------------------------------------------------------
| Id  | Operation                       | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |            |     1 |   100 |   104   (3)| 00:00:02 |
|   1 |  SORT ORDER BY                  |            |     1 |   100 |   104   (3)| 00:00:02 |
|   2 |   JOINED CUBE SCAN PARTIAL OUTER|            |       |       |            |          |
|   3 |    CUBE ACCESS                  | UNITS_CUBE |       |       |            |          |
|   4 |    CUBE ACCESS                  | CHANNEL    |       |       |            |          |
|   5 |    CUBE ACCESS                  | CUSTOMER   |       |       |            |          |
|   6 |    CUBE ACCESS                  | PRODUCT    |       |       |            |          |
|*  7 |    CUBE ACCESS                  | TIME       |     1 |   100 |   103   (2)| 00:00:02 |
----------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   7 - filter(SYS_OP_ATG(VALUE(KOKBF$),12,13,2)='CALENDAR_YEAR' AND
              SYS_OP_ATG(VALUE(KOKBF$),43,44,2)='TOTAL' AND
              SYS_OP_ATG(VALUE(KOKBF$),33,34,2)='TOTAL' AND
              SYS_OP_ATG(VALUE(KOKBF$),23,24,2)='TOTAL')
 
22 rows selected.

Types of Execution Plans

Table 4-1 describes the types of execution plans for cubes.

Table 4-1 Descriptions of Execution Plans for Cubes and Dimensions

OperationOptionDescription

CUBE SCAN

--

Uses inner joins for all cube access.

CUBE SCAN

PARTIAL OUTER

Uses an outer join for least one dimension, and inner joins for the other dimensions.

CUBE SCAN

OUTER

Uses outer joins for all cube access.


Querying the Data Dictionary

If you are developing a generic application -- that is, one where the names of the dimensional objects are not known -- then your application can retrieve this information from the data dictionary.

Among the static views of the database data dictionary are those that provide information about dimensional objects. All OLAP metadata is stored in the data dictionary. A few of the data dictionary views were introduced previously in this chapter.

Table 4-2 provides brief descriptions of the ALL views. There are corresponding DBA and USER views.

Table 4-2 Static Data Dictionary Views for OLAP

ViewDescription

ALL_CUBE_ATTR_VISIBILITY

Describes the visibility of the attributes for cube dimensions.

ALL_CUBE_ATTRIBUTES

Describes the attributes for cube dimensions.

ALL_CUBE_BUILD_PROCESSES

Describes the cube build processes and maintenance scripts.

ALL_CUBE_CALCULATED_MEMBERS

Describes the calculated members (keys) for cube dimensions.

ALL_CUBE_DIM_LEVELS

Describes the cube dimension levels.

ALL_CUBE_DIM_MODELS

Describes the models for cube dimensions.

ALL_CUBE_DIM_VIEW_COLUMNS

Describes the columns of the system-generated relational views of cube dimensions.

ALL_CUBE_DIM_VIEWS

Describes the system-generated relational views of OLAP dimensions.

ALL_CUBE_DIMENSIONALITY

Describes the dimension order of the OLAP cubes.

ALL_CUBE_DIMENSIONS

Describes the cube dimensions.

ALL_CUBE_HIER_LEVELS

Describes the hierarchy levels for cube dimensions.

ALL_CUBE_HIER_VIEW_COLUMNS

Describes the columns of relational hierarchy views of cube dimensions.

ALL_CUBE_HIER_VIEWS

Describes the hierarchies for cube dimensions.

ALL_CUBE_HIERARCHIES

Describes the OLAP dimension hierarchies.

ALL_CUBE_MEASURES

Describes the measures in the OLAP cubes.

ALL_CUBE_VIEW_COLUMNS

Describes the columns of the relational views of OLAP cubes.

ALL_CUBE_VIEWS

Describes the system-generated relational views of OLAP cubes.

ALL_CUBES

Describes the OLAP cubes.

ALL_MEASURE_FOLDER_CONTENTS

Describes the contents of OLAP measure folders.

ALL_MEASURE_FOLDERS

Describes the OLAP measure folders.



See Also:

Oracle Database Reference for full descriptions of data dictionary views.

PK"PK,AOEBPS/start.htmIz Getting Started with Oracle OLAP

2 Getting Started with Oracle OLAP

This chapter describes the preliminary steps you should take to use Oracle OLAP. It assumes that you have installed Oracle Database 11g Enterprise Edition. The OLAP option is installed automatically as part of a Basic installation of Oracle Database.


Note:

To start querying dimensional objects immediately, install the Global analytic workspace, as described in "Installing the Sample Schema". Then follow the instructions in Chapter 4.

This chapter includes the following topics:

Installing the Sample Schema

You can download and install the sample Global schema from the Oracle Web site and use it to try the examples shown throughout this guide:

http://www.oracle.com/technology/products/bi/olap/doc_sample_schemas/sampleschemasfordoc11g.html

Instructions for installing the schema are provided in the README file.

Database Management Tasks

You should create undo, permanent, and temporary tablespaces that are appropriate for use by dimensional objects. Follow the recommendations in "Storage Management".

Granting Privileges to DBAs and Application Developers

Anyone who must create or manage dimensional objects in Oracle Database needs the necessary privileges. These privileges are different from those needed just to query the data stored in dimensional objects. The security system is discussed in Chapter 8.

DBAs and application developers need the following roles and privileges.

To create dimensional objects in the user's own schema: 

  • OLAP_USER role

  • CREATE SESSION privilege

To create dimensional objects in different schemas: 

  • OLAP_DBA role

  • CREATE SESSION privilege

To administer data security: 

  • OLAP_XS_ADMIN role

To create cube materialized views in the user's own schema: 

  • CREATE MATERIALIZED VIEW privilege

  • CREATE DIMENSION privilege

  • ADVISOR privilege

To create cube materialized views in different schemas: 

  • CREATE ANY MATERIALIZED VIEW privilege

  • CREATE ANY DIMENSION privilege

  • ADVISOR privilege

Users also need an unlimited quota on the tablespace in which the dimensional objects are stored. The tablespaces should be defined specifically for OLAP use, as described in Chapter 7.

If the source tables are in a different schema, then the owner of the dimensional objects needs SELECT object privileges on those tables.

Example 2-1 shows the SQL statements for creating the GLOBAL user.

Example 2-1 SQL Statements for Creating the GLOBAL User

CREATE USER "GLOBAL" IDENTIFIED BY password
   DEFAULT TABLESPACE glo 
   TEMPORARY TABLESPACE glotmp
   QUOTA UNLIMITED ON glo
   PASSWORD EXPIRE;

GRANT OLAP_USER TO GLOBAL;
GRANT CREATE SESSION TO GLOBAL;
GRANT OLAP_XS_ADMIN TO GLOBAL;

Getting Started with Analytic Workspace Manager

In this section, you learn how to install Analytic Workspace Manager software and make a connection to Oracle Database.

Installing Analytic Workspace Manager

Analytic Workspace Manager is distributed on the Oracle Database Client installation disk.

If you are installing on the same system as the database, then choose a Custom installation and install into the same Oracle home directory as the database. Select OLAP Analytic Workspace Manager and Worksheet from the list of components.

If you are installing on a remote system, then choose either an Administrator or a Custom installation. The Administrator choice automatically installs Analytic Workspace Manager on the client.


See Also:

The installation guide for your client platform.

Opening Analytic Workspace Manager

Use the appropriate procedure for your platform.

On Windows, to open Analytic Workspace Manager: 

  • From the Start menu, choose Oracle - Oracle_home, then Integrated Management Tools, and then OLAP Analytic Workspace Manager and Worksheet.

On Linux, to open Analytic Workspace Manager: 

  • From the shell command line, enter this command:

    $ORACLE_HOME/olap/awm/awm.sh
    

Figure 2-1 shows the initial display.

Figure 2-1 Opening Analytic Workspace Manager

Analytic Workspace Manager splash screen
Description of "Figure 2-1 Opening Analytic Workspace Manager"

If Analytic Workspace Manager does not have access to the Internet, the property viewer shows links to several useful sites. It also shows an exception, because Analytic Workspace Manager cannot display the OLAP home page. To connect to the Internet, you typically need to identify the proxy server.

To identify the proxy server: 

  1. From the Tools menu, choose Configuration to display the Configuration dialog box.

  2. Under OLAP Home Page Settings, enter the address of the proxy server.

  3. Enter the port number for the proxy server, if it is not default port 80.

  4. Click OK to save these settings. The OLAP Home page will be displayed the next time you start Analytic Workspace Manager.

Defining a Database Connection

You can define a connection to each database that you use for OLAP. After you define a connection, the database instance is listed in the navigation tree for you to access at any time.

To define a database connection: 

  1. Right-click the top Databases folder in the navigation tree, then choose New Database Connection from the shortcut menu.

  2. Complete the New Database Connection dialog box.

Figure 2-2 shows the connection information on the General tab of the New Database Connection dialog box.

Figure 2-2 Defining a Database Connection

Add Database to Tree dialog box
Description of "Figure 2-2 Defining a Database Connection"

Opening a Database Connection

To connect to a database: 

  1. Click the plus icon (+) next to a database connection in the navigation tree.

  2. Supply your database user name and password in the Connect to Database dialog box.

Installing Plugins

Plugins extend the functionality of Analytic Workspace Manager. Plugins are distributed as JAR files. Any Java developer can create a plugin. The developer should provide information about what the plugin does and how to use it.

If you have one or more plugins, then you must identify their location to Analytic Workspace Manager.

To use plugins: 

  1. Create a local directory for storing the plugins.

  2. Copy the JAR files to that directory.

  3. Open Analytic Workspace Manager.

  4. Choose Configuration from the Tools menu.

    The Configuration dialog box opens.

  5. Select Enable Plugins and identify the plugin directory. Click OK.

  6. Close and reopen Analytic Workspace Manager.

    The functionality provided by the plugins is available in the navigator.

To see a list of currently installed plug-ins: 

  • On the Help menu, click About.


See Also:

Developing Analytic Workspace Manager Plug-ins, which you can download from the Oracle Technology Network at

http://www.oracle.com/technology/products/bi/olap


Upgrading Metadata From Oracle OLAP 10g

You can upgrade an Oracle OLAP 10g analytic workspace to OLAP 11g by saving the objects as an XML template and importing the XML into a different schema. The original analytic workspace remains accessible and unchanged by the upgrade process.

Prerequisites: 

  • The OLAP 10g analytic workspace can use CWM metadata or OLAP standard form metadata.

  • The original relational source data must be available to load into the new analytic workspace. If the data is in a different schema or the table names are different, then you must remap the dimensional objects to the new relational sources after the upgrade.

  • You can create the OLAP 11g analytic workspace in the same schema as the OLAP 10g analytic workspace. However, if you choose to create the OLAP 11g analytic workspace in a different schema, you must grant the new user the appropriate privileges as described in "Granting Privileges to DBAs and Application Developers".

To upgrade an OLAP 10g analytic workspace: 

  1. Open Analytic Workspace Manager for Oracle Database 11g Release 2.

  2. If necessary, create a new database connection to the database instance with the analytic workspace. See "Defining a Database Connection".

  3. Open the database connection. On the Connect to Database dialog box, select OLAP 10g for the Cube Type. See "Opening a Database Connection".

  4. Expand the navigation tree until the name of the analytic workspace is displayed.

  5. Right-click the analytic workspace and select Create 11g Upgrade Template for 10g Analytic Workspace. Save the XML template to a file.

    The Create 11g Upgrade Template for 10g Analytic Workspace dialog box is displayed if any subobjects, such as a level and a hierarchy, have the same name. This practice was permitted in OLAP 10g, but invalidates the namespace requirements in OLAP 11g.

    Duplicate object names are changed automatically for the upgrade. You cannot edit the names now, but you can change them later.

  6. Click Close to close the dialog box.

  7. Right-click the connection in the tree and choose Disconnect Database.

  8. Right-click the connection again and choose Connect Database.

  9. On the Connect to Database dialog box, log in with the new user name and select OLAP 11g for the Cube Type.

  10. Expand the tree, right-click Analytic Workspaces under the new schema, and choose Create Analytic Workspace From Template.

  11. Open the upgrade template that you created previously.

    The Correct Duplicate Names From Analytic Workspace Template Import dialog box is displayed if any objects, such as a cube, dimensions, or the analytic workspace, duplicate object names that already exist in the schema.

  12. Enter new names to resolve any conflicts, then click OK.

  13. Before loading the data, you may want to browse the dimensional objects and make any changes to the object names, cube partitioning, or aggregation strategy. See "What's New in Oracle OLAP?" for a summary of new features in Oracle OLAP 11g.

  14. Load data into the new analytic workspace as described in "Loading Data Into Cubes". Select all objects for maintenance.


See Also:

DBMS_CUBE in the Oracle Database PL/SQL Packages and Types Reference for upgrading in PL/SQL.

PK\TvIIPK,AOEBPS/admin.htm Administering Oracle OLAP

7 Administering Oracle OLAP

Because Oracle OLAP is contained in the database and its resources are managed using the same tools, the management tasks of Oracle OLAP and the database converge. Nonetheless, you should address tasks such as database tuning in the specific context of data warehousing.

This chapter contains the following topics:

Setting Database Initialization Parameters

Table 7-1 identifies the parameters that affect the performance of Oracle OLAP. Alter your server parameter file or init.ora file to these values, then restart your database instance. You can monitor the effectiveness of these settings and adjust them as necessary.


See Also:


Table 7-1 Initial Settings for Database Parameters

ParameterDefault ValueRecommended SettingDescription

JOB_QUEUE_PROCESSES

1000

If you reduce this value to limit the maximum number of job slaves running on an instance, then calculate the following number of processes for use by OLAP:

Number of CPUs, plus one additional process for every three CPUs; in a multi-core CPU, each core counts as a CPU

For example, JOB_QUEUE_PROCESSES=5 for a four-processor computer

Controls the degree of parallelism in OLAP builds, as described in "Parallelism"

PARALLEL_DEGREE_POLICY

MANUAL

AUTO or LIMITED

Controls how the degree of parallelism is determined

When set to AUTO or LIMITED, Oracle determines whether a SQL statement executes in parallel and, if so, the degree of parallelism used

SESSIONS

Derived

2.5 * maximum number of simultaneous OLAP users

Provides sufficient background processes for each user

UNDO_MANAGEMENT

AUTO

(MANUAL in 10g)

AUTO

Specifies use of an undo tablespace

UNDO_TABLESPACE

Derived

Name of the undo tablespace, which must be defined previously

Identifies the undo tablespace defined for OLAP use, as shown in "Creating an Undo Tablespace"


To set the system parameters: 

  1. Open the init.ora initialization file in a text editor.

  2. Add or change the settings in the file, as described in Table 7-1.

  3. Stop and restart the database.

    On Windows, use the Services utility to stop and restart OracleService.

    On Linux, use commands like the following. Be sure to identify the initialization file in the STARTUP command.

    SQLPLUS '/ AS SYSDBA'
    SHUTDOWN IMMEDIATE
    STARTUP pfile=$ORACLE_BASE/admin/orcl/pfile/init.ora.724200516420
    

Storage Management

Analytic workspaces are stored in the owner's default tablespace, unless the owner specifies otherwise. All tablespaces for OLAP use should specify EXTENT MANAGEMENT LOCAL. Tablespaces created using default parameters may use resources inefficiently. You should create undo, permanent, and temporary tablespaces that are appropriate for storing analytic workspaces.

Creating an Undo Tablespace

Create an undo tablespace with the EXTENT MANAGEMENT LOCAL clause, as shown in this example:

CREATE UNDO TABLESPACE olapundo DATAFILE '$ORACLE_BASE/oradata/undo.dbf'
     SIZE 64M REUSE AUTOEXTEND ON NEXT 8M
     MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;

After creating the undo tablespace, change your system parameter file to include the following settings, then restart the database as described in "Setting Database Initialization Parameters".

UNDO_TABLESPACE=tablespace
UNDO_MANAGEMENT=AUTO

Creating Permanent Tablespaces for OLAP Use

Each dimensional object occupies at least one extent. A fixed extent size may waste most of the allocated space. For example, if an object is 64K and the extents are set to a uniform size of 1M (the default), then only a small portion of the extent is used.

Create permanent tablespaces with the EXTENT MANAGEMENT LOCAL and SEGMENT SPACE MANAGEMENT AUTO clauses, as shown in this example:

CREATE TABLESPACE glo DATAFILE '$ORACLE_BASE/oradata/glo.dbf'
     SIZE 64M REUSE AUTOEXTEND ON NEXT 8M MAXSIZE UNLIMITED
     EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

Creating Temporary Tablespaces for OLAP Use

Oracle OLAP uses the temporary tablespace to store all changes to the data in a cube, whether the changes are the result of a data load or data analysis. Saving the cube moves the changes into the permanent tablespace and clears the temporary tablespace.

This usage creates numerous extents within the tablespace. A temporary tablespace suitable for use by Oracle OLAP should specify the EXTENT MANAGEMENT LOCAL clause and a UNIFORM SIZE clause with a small size, as shown in this example:

CREATE TEMPORARY TABLESPACE glotmp TEMPFILE '$ORACLE_BASE/oradata/glotmp.tmp'
     SIZE 50M REUSE AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
     EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;

Spreading Data Across Storage Resources

Oracle Database provides excellent storage management tools to simplify routine tasks. Automatic Storage Management (ASM) provides a simple storage management interface that virtualizes database storage into disk groups. You can manage a small set of disk groups, and ASM automates the placement of the database files within those disk groups.

ASM spreads data evenly across all available storage resources to optimize performance and utilization. After you add or drop disks, ASM automatically rebalances files across the disk group.

Because OLAP is part of Oracle Database, you can use ASM to manage both relational and dimensional data.

ASM is highly recommended for analytic workspaces. A system managed with ASM is faster than a file system and easier to manage than raw devices. ASM optimizes the performance of analytic workspaces both on systems with Oracle RAC and those without Oracle RAC.

However, you do not need ASM to use Oracle OLAP. You can still spread your data across multiple disks, just by defining the tablespaces like in this example:

CREATE TABLESPACE glo DATAFILE 
     'disk1/oradata/glo1.dbf' SIZE 64M REUSE AUTOEXTEND ON NEXT 8M MAXSIZE 1024M
     EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

ALTER TABLESPACE glo ADD DATAFILE 
     'disk2/oradata/glo2.dbf' SIZE 64M REUSE AUTOEXTEND ON NEXT 8M MAXSIZE 1024M,
     'disk3/oradata/glo3.dbf' SIZE 64M REUSE AUTOEXTEND ON NEXT 8M 
          MAXSIZE UNLIMITED;

Dictionary Views and System Tables

Oracle Database data dictionary views and system tables contain extensive information about analytic workspaces.

Static Data Dictionary Views

Among the static views of the database data dictionary are several that provide information about analytic workspaces. Table 7-2 provides brief descriptions of them. All data dictionary views have corresponding DBA and USER views.

Table 7-2 Static Data Dictionary Views for OLAP

ViewDescription

ALL_AWS

Describes all analytic workspaces accessible to the current user.

ALL_AW_OBJ

Describes the current objects in all analytic workspaces accessible to the current user.

ALL_AW_PROP

Describes the properties defined in all analytic workspaces accessible to the current user.

ALL_AW_PS

Describes the page spaces currently in use by all analytic workspaces accessible to the current user.



See Also:

  • "Querying the Data Dictionary" for a list of data dictionary views that describe OLAP dimensional objects

  • Oracle Database Reference for full descriptions of all data dictionary views


System Tables

The SYS user owns several tables associated with analytic workspaces. Table 7-3 provides brief descriptions.


Important:

These tables are vital for the operation of Oracle OLAP. Do not delete them or attempt to modify them directly without being fully aware of the consequences.

Table 7-3 OLAP Tables Owned By SYS

TableDescription

AW$

Maintains a record of all analytic workspaces in the database, recording its name, owner, and other information.

AW$AWCREATE

Stores the AWCREATE analytic workspace, which contains programs for using OLAP Catalog metadata in Oracle Database 10g Release 10.1.0.2 and earlier releases. It exists only for backward compatibility.

AW$AWCREATE10G

Stores the AWCREATE10G analytic workspace, which contains programs for using OLAP Catalog metadata in Oracle Database 10g Release 10.1.0.3. The OLAP Catalog is not used by later releases. It exists only for backward compatibility.

AW$AWMD

Stores the AWMD analytic workspace, which contains programs for creating metadata catalogs.

AW$AWREPORT

Stores the AWREPORT analytic workspace, which contains a program named AWREPORT for generating a summary space report.

AW$AWXML

Stores the AWXML analytic workspace, which contains programs for creating and managing analytic workspaces for Oracle Database 10g Release 10.1.0.4 and later.

AW$EXPRESS

Stores the EXPRESS analytic workspace. It contains objects and programs that support basic operations. EXPRESS is used any time a session is open.

AW_OBJ$

Describes the objects stored in analytic workspaces.

AW_PRG$

Stores program data. Not currently used.

AW_PROP$

Stores analytic workspace object properties.

AW_TRACK$

Stores tracking data about access to aggregate cells. Not currently used.

PS$

Maintains a history of all page spaces. A page space is an ordered series of bytes equivalent to a file. Oracle OLAP manages a cache of workspace pages. Pages are read from storage in a table and written into the cache in response to a query. The same page can be accessed by several sessions.

The information stored in PS$ enables Oracle OLAP to discard pages that are no longer in use, and to maintain a consistent view of the data for all users, even when the workspace is being modified during their sessions. When changes to a workspace are saved, unused pages are purged and the corresponding rows are deleted from PS$.


Analytic Workspace Tables

Analytic workspaces are stored in tables in the Oracle database. The names of these tables always begin with AW$.

For example, if the GLOBAL user creates two analytic workspaces, one named FINANCIALS and the other named MARKETING, then these tables are created in the GLOBAL schema:

AW$FINANCIALS
AW$MARKETING

The tables store all of the object definitions and data.

Maintenance Logs

The first time you load data into a cube or dimension using Analytic Workspace Manager, it creates several logs. These logs are stored in tables in the same schema as the analytic workspace:

  • Cube Build Log: Contains information about what happened during a build. Use this log to determine whether the build produced the results you were expecting, and if not, why not. The log is continually updated whenever a cube or dimension is refreshed, whether by Analytic Workspace Manager, the database materialized view refresh subsystem, or a PL/SQL procedure. You can query the log at any time to evaluate the progress of the build and to estimate the time to completion. The default table name is CUBE_BUILD_LOG.

  • Cube Dimension Compile Log: Contains errors that occur during the validation of the dimension hierarchies when OLAP is aggregating a cube. The default table name is CUBE_DIMENSION_COMPILE.

  • Cube Operations Log: Contains messages and debugging information for all OLAP engine events. The default table name is CUBE_OPERATIONS_LOG.

  • Cube Rejected Records Log: Identifies any records that were rejected because they did not meet the expected format. The default table name is CUBE_DIMENSION_COMPILE.

These logs enable you to track the progress of long running processes, then use the results to profile performance characteristics. They provide information to help you diagnose and remedy problems that may occur during development and maintenance of a cube. They also help diagnose performance problems in querying cubes.

You can also run the $ORACLE_HOME/olap/admin/utlolaplog.sql script to create the build log with some useful views.

The Maintenance Wizard in Analytic Workspace Manager displays the relevant rows from these tables during every build on the Maintenance Log page. You can query the tables directly in any SQL interface.


See Also:

DBMS_CUBE_LOG entry in Oracle Database PL/SQL Packages and Types Reference.

Partitioned Cubes and Parallelism

Cubes are often partitioned to improve build and maintenance times. For information about creating a partitioned cube, refer to "Choosing a Partitioning Strategy".

Querying Metadata for Cube Partitioning

To discover the current partitioning, query the ALL_CUBES data dictionary view. The PARTITION_DIMENSION_NAME, PARTITION_HIERARCHY_NAME, and PARTITION_LEVEL_NAME columns display partitioning information. For example, the following query shows that the Units Cube is partitioned on the Time dimension, the Calendar hierarchy, and the Calendar Year level.

SELECT partition_dimension_name, partition_hierarchy_name, 
     partition_level_name FROM all_cubes
     WHERE owner='GLOBAL' AND cube_name='UNITS_CUBE';

PARTITION_DIMENSION_NAME  PARTITION_HIERARCHY_NAME  PARTITION_LEVEL_NAME
------------------------- ------------------------- --------------------
TIME                      CALENDAR                  CALENDAR_YEAR

Creating and Dropping Partitions

The OLAP engine automatically creates and drops partitions as part of data maintenance, as members are added and deleted from the partitioning dimension.

For example, assume that in the sample Global analytic workspace, the Units cube is partitioned on the Time dimension, using the Calendar hierarchy, and at the Calendar Quarter level. The OLAP engine creates a partition for each Calendar Quarter and its children. The default top partition contains Calendar Years and all members of the Fiscal hierarchy. If Global has three years of data, then the Units cube has 13 partitions: Four bottom partitions for each Calendar Year, plus the top partition.

A data refresh typically creates new time periods and deletes old ones. Whenever a Calendar Quarter value is loaded into the Time dimension, a corresponding partition is added to the cube. Whenever a Calendar Quarter value is deleted from the Time dimension, the corresponding empty partition is deleted from the cube.

Parallelism

You can improve the performance of data maintenance by enabling parallel processing. There are two levels of parallelism:

  • Parallel job execution: Loading and aggregating the data using multiple processes.

  • Parallel update: Moving the data from temporary to permanent tablespaces using multiple processes.

This number of parallel processes is controlled by these factors:

  • The number of objects that can be aggregated in parallel. Each cube and each partition (including the top partition) can use a separate process.

    You can control the number of partitions in a cube on the Partitioning tab of the cube property sheet in Analytic Workspace Manager.

  • The number of simultaneous database processes the user is authorized to run.

    This number is controlled by the JOB_QUEUE_PROCESSES parameter. If you have SYS privileges, you can obtain the current parameter setting with the following SQL command:

    SHOW PARAMETER JOB_QUEUE_PROCESSES
    
  • For parallel update, the number of processes you allocate to the job. You can specify the number of processes in the Maintenance Wizard of Analytic Workspace Manager when specifying the task processing options, or on the Materialized View tab of the cube.

  • The number of processes allocated to SQL to fetch rows from the relational source tables. When PARALLEL_DEGREE_POLICY is set to AUTO or LIMITED, the database can allocate additional processes for executing SQL statements.

Suppose that a cube is partitioned on the Quarter level of Time, and the cube contains three years of data. The cube has 3*4=12 bottom partitions, JOB_QUEUE_PROCESSES is set to 8, and you set the parallelism option to 4 for the build. Oracle Database processes the cube in this way when PARALLEL_DEGREE_POLICY is set to its default value of MANUAL:

  1. Load and build the dimensions of the cube serially using a single process.

  2. Load and build the 12 bottom partitions in parallel using 4 processes. As soon as one process finishes, another begins until all 12 are complete.

    This cube could use the 8 processes allowed by JOB_QUEUE_PROCESSES, but it is limited to 4 by the build setting.

  3. Load and build the top partition.

When PARALLEL_DEGREE_POLICY is set to AUTO or LIMITED, Oracle Database may allocate more than the designated processes.

Example 7-1 shows excerpts from CUBE_BUILD_LOG for a build of the Units cube and its dimensions. Partitioning on the Calendar Year level of the Time dimension created 10 bottom partitions for 1998 to 2007. JOB_QUEUE_PROCESSES is set to 2 and the parallelism option is set to 2 for the build also. The log shows that Oracle Database processed the Global in this way:

  1. Processed the four dimensions serially.

  2. Processed each partition of the Units cube

Example 7-1 Build Log for Global Units Cube

SLAVE_NUMBER STATUS     COMMAND              BUILD_OBJECT    PARTITION
------------ ---------- -------------------- --------------- ---------------
           0 STARTED    BUILD
           0 STARTED    ATTACH AW RW WAIT
           0 COMPLETED  ATTACH AW RW WAIT
           0 STARTED    FREEZE
           0 COMPLETED  FREEZE
           0 STARTED    LOAD NO SYNCH        TIME
           0 SQL        LOAD NO SYNCH        TIME
               .
               .
               .
           0 SQL        LOAD NO SYNCH        PRODUCT
           0 SQL        LOAD NO SYNCH        PRODUCT
           0 COMPLETED  LOAD NO SYNCH        PRODUCT
           0 STARTED    COMPILE              PRODUCT
           0 COMPLETED  COMPILE              PRODUCT
           0 STARTED    COMPILE AGGMAP       UNITS_CUBE
           0 COMPLETED  COMPILE AGGMAP       UNITS_CUBE
           0 STARTED    COMPILE AGGMAP       PRICE_CUBE
           0 COMPLETED  COMPILE AGGMAP       PRICE_CUBE
           0 STARTED    UPDATE/COMMIT        PRODUCT
           0 COMPLETED  UPDATE/COMMIT        PRODUCT
           0 STARTED    UPDATE/COMMIT
           0 COMPLETED  UPDATE/COMMIT
           0 STARTED    REATTACH AW MULTI TH
                        AW
 
           0 COMPLETED  REATTACH AW MULTI TH
                        AW
 
           0 STARTED    SLAVE                UNITS_CUBE      P10:CY2007
           0 STARTED    SLAVE                UNITS_CUBE      P9:CY2006
           1 STARTED    BUILD                                P10:CY2007
           1 STARTED    ATTACH AW MULTI THAW UNITS_CUBE      P10:CY2007
           1 COMPLETED  ATTACH AW MULTI THAW UNITS_CUBE      P10:CY2007
           1 STARTED    ACQUIRE              UNITS_CUBE      P10:CY2007
           1 COMPLETED  ACQUIRE              UNITS_CUBE      P10:CY2007
           1 STARTED    LOAD                 UNITS_CUBE      P10:CY2007
           1 SQL        LOAD                 UNITS_CUBE      P10:CY2007
           1 COMPLETED  LOAD                 UNITS_CUBE      P10:CY2007
           1 STARTED    UPDATE/COMMIT        UNITS_CUBE      P10:CY2007
           1 COMPLETED  UPDATE/COMMIT        UNITS_CUBE      P10:CY2007
               .
               .
               .
          10 STARTED    BUILD                                P1:CY1998
          10 STARTED    ATTACH AW MULTI THAW UNITS_CUBE      P1:CY1998
          10 COMPLETED  ATTACH AW MULTI THAW UNITS_CUBE      P1:CY1998
          10 STARTED    ACQUIRE              UNITS_CUBE      P1:CY1998
          10 COMPLETED  ACQUIRE              UNITS_CUBE      P1:CY1998
          10 STARTED    LOAD                 UNITS_CUBE      P1:CY1998
          10 SQL        LOAD                 UNITS_CUBE      P1:CY1998
          10 COMPLETED  LOAD                 UNITS_CUBE      P1:CY1998
          10 STARTED    SOLVE                UNITS_CUBE      P1:CY1998
          10 COMPLETED  SOLVE                UNITS_CUBE      P1:CY1998
          10 STARTED    UPDATE/COMMIT        UNITS_CUBE      P1:CY1998
          10 COMPLETED  UPDATE/COMMIT        UNITS_CUBE      P1:CY1998
          10 STARTED    DETACH AW            UNITS_CUBE      P1:CY1998
          10 COMPLETED  DETACH AW            UNITS_CUBE      P1:CY1998
          10 COMPLETED  BUILD                                P1:CY1998
           0 COMPLETED  SLAVE                UNITS_CUBE      P1:CY1998
           0 STARTED    REATTACH AW MULTI TH
                        AW
 
           0 COMPLETED  REATTACH AW MULTI TH
                        AW
 
           0 STARTED    SLAVE                UNITS_CUBE      P0
          11 STARTED    BUILD                                P0
          11 STARTED    ATTACH AW MULTI THAW UNITS_CUBE      P0
          11 COMPLETED  ATTACH AW MULTI THAW UNITS_CUBE      P0
          11 STARTED    ACQUIRE              UNITS_CUBE      P0
          11 COMPLETED  ACQUIRE              UNITS_CUBE      P0
          11 STARTED    LOAD                 UNITS_CUBE      P0
          11 COMPLETED  LOAD                 UNITS_CUBE      P0
          11 STARTED    SOLVE                UNITS_CUBE      P0
          11 COMPLETED  SOLVE                UNITS_CUBE      P0
          11 STARTED    UPDATE/COMMIT        UNITS_CUBE      P0
          11 COMPLETED  UPDATE/COMMIT        UNITS_CUBE      P0
          11 STARTED    DETACH AW            UNITS_CUBE      P0
          11 COMPLETED  DETACH AW            UNITS_CUBE      P0
          11 COMPLETED  BUILD                                P0
           0 COMPLETED  SLAVE                UNITS_CUBE      P0
           0 STARTED    REATTACH AW RW WAIT
           0 COMPLETED  REATTACH AW RW WAIT
           0 STARTED    ANALYZE              UNITS_CUBE
           0 COMPLETED  ANALYZE              UNITS_CUBE
           0 STARTED    THAW
           0 COMPLETED  THAW
           0 STARTED    DETACH AW
           0 COMPLETED  DETACH AW
           0 COMPLETED  BUILD
 
268 rows selected.

Oracle Database allocates the specified number of processes regardless of whether all of them can be used simultaneously at any point in the job. For example, if your job can use up to three processes, but you specify five, then two of the processes allocated to your job cannot be used by it or by any other job.

If Oracle Database is installed with Real Application Clusters (Oracle RAC), then a script submitted to the job queue is distributed across all nodes in the cluster. The performance gains can be significant. For example, a job running on four nodes in a cluster may run up to four times faster than the same job running on a single computer.

Analyzing Cubes and Dimensions

If your application executes queries directly against a single cube, you do not need to generate optimizer statistics for the cube. These queries are automatically optimized within the analytic workspace.

Optimizer statistics are used to create execution plans for queries that join two cube views or join a cube view to a table or a view of a table. They are also used for cost-based rewrite to cube materialized views. You must generate the statistics only for these types of queries.

To generate optimizer statistics, use the DBMS_AW_STATS PL/SQL package. You can run this package in Analytic Workspace Manager as part of a cube script, in SQL*Plus, or in any other SQL interface. Generating the statistics does not have a significant performance cost.

DBMS_AW_STATS has the following syntax:

DBMS_AW_STATS.ANALYZE
     (object       IN VARCHAR2);

The argument can be either a cube or a dimension. Example 7-2 shows a sample script for generating statistics on the Units cube and its dimensions.

Example 7-2 Generating Statistics for the Units Cube

BEGIN
     DBMS_AW_STATS.ANALYZE('units_cube');
     DBMS_AW_STATS.ANALYZE('time');
     DBMS_AW_STATS.ANALYZE('customer');
     DBMS_AW_STATS.ANALYZE('product');
     DBMS_AW_STATS.ANALYZE('channel');
END;
/

Although you cannot view the statistics directly, you can examine the execution plans, as described in "Viewing Execution Plans".

Monitoring Analytic Workspaces

Oracle Database provides various tools to help you diagnose performance problems. As an Oracle DBA, you may find these tools useful in tuning the database:

  • Oracle Enterprise Manager Database Control (Database Control) is a general database management and administration tool. In addition to facilitating basic tasks like adding users and modifying datafiles, Database Control presents a graphic overview of a database's current status. It also provides an interface to troubleshooting and performance tuning utilities.

  • Automatic Workload Repository collects database performance statistics and metrics for analysis and tuning, shows the exact time spent in the database, and saves session information.

  • Automatic Database Diagnostic Monitor watches database performance statistics to identify bottlenecks, analyze SQL statements, and offer suggestions to improve performance.

Oracle Database also provides system views to help you diagnose performance problems. The following topics identify views that are either specific to OLAP or provide database information that is pertinent to OLAP.

Dynamic Performance Views

Each Oracle Database instance maintains fixed tables that record current database activity. These tables collect data on internal disk structures and memory structures. Among them are tables that collect data on Oracle OLAP.

These tables are available to users through a set of dynamic performance views. By monitoring these views, you can detect usage trends and diagnose system bottlenecks. Table 7-4 provides a brief description of each view. Global dynamic performance views (GV$) are also provided.


See Also:

Oracle Database Reference for full descriptions of the OLAP dynamic performance views.

Table 7-4 OLAP Dynamic Performance Views

ViewDescription

V$AW_AGGREGATE_OP

Lists the aggregation operators available in analytic workspaces.

V$AW_ALLOCATE_OP

Lists the allocation operators available in analytic workspaces.

V$AW_CALC

Collects information about the use of cache space and the status of dynamic aggregation.

V$AW_LONGOPS

Collects status information about SQL fetches.

V$AW_SESSION_INFO

Collects information about each active session.

V$AW_OLAP

Collects information about the status of active analytic workspaces.


Table 7-5 describes some other dynamic performance views that are not specific to OLAP, but which you may want to use when tuning your database for OLAP.

Table 7-5 Selected Database Performance Views

ViewDescription

V$LOG

Displays log file information from the control file.

V$LOGFILE

Contains information about redo log files.

V$PGASTAT

Provides PGA memory usage statistics and statistics about the automatic PGA memory manager when PGA_AGGREGATE_TARGET is set.

V$ROWCACHE

Displays statistics for data dictionary activity. Each row contains statistics for one data dictionary cache.

V$SYSSTAT

Lists system statistics.


Basic Queries for Monitoring the OLAP Option

The following queries extract OLAP information from the data dictionary. You must have a privileged account to query the DBA views.

More complex queries are provided in a script that you can download from the Oracle OLAP Web site on the Oracle Technology Network. For descriptions of these scripts and download instructions, refer to "OLAP DBA Scripts".

Is the OLAP Option Installed in the Database?

The OLAP option is provided with Oracle Database Enterprise Edition. To verify that the OLAP components have been installed, issue this SQL command:

SELECT comp_name, version, status FROM DBA_REGISTRY 
     WHERE comp_name LIKE '%OLAP%';

COMP_NAME                VERSION                        STATUS     
------------------------ ------------------------------ -----------
OLAP Analytic Workspace  11.2.0.1.0                     VALID      
Oracle OLAP API          11.2.0.1.0                     VALID      
OLAP Catalog             11.2.0.1.0                     VALID      

What Analytic Workspaces Are in the Database?

The DBA_AWS view provides information about all analytic workspaces. Use the following SQL command to get a list of names, their owners, and the version:

SELECT owner, aw_name, aw_version FROM DBA_AWS;
 
OWNER      AW_NAME                        AW_VERSION
---------- ------------------------------ ----------
SYS        EXPRESS                        11.2
GLOBAL     GLOBAL                         11.2
SYS        AWCREATE                       11.2
SH         SH                             11.2
SYS        AWMD                           11.2
SYS        AWXML                          11.2
SYS        AWREPORT                       11.2
SYS        AWCREATE10G                    11.2

See Also:

"System Tables" for descriptions of the analytic workspaces owned by SYS.

How Big Is the Analytic Workspace?

To find out the size in bytes of the tablespace extents for a particular analytic workspace, use the following SQL statements, replacing GLOBAL with the name of your analytic workspace.

SELECT extnum, SUM(dbms_lob.getlength(awlob)) bytes FROM global.aw$global 
     GROUP BY extnum;
 
    EXTNUM      BYTES
---------- ----------
         0  191776956

To see the size of the LOB table containing an analytic workspace, use a SQL command like the following, replacing GLOBAL.AW$GLOBAL with the qualified name of your analytic workspace.

SELECT ROUND(SUM(dbms_lob.getlength(awlob))/1024,0) kb 
     FROM global.aw$global;
 
        KB
----------
    187282

When Were the Analytic Workspaces Created?

The DBA_OBJECTS view provides the creation date of the objects in your database. The following SQL command generates an easily readable report for analytic workspaces.

SELECT owner, object_name, created, status FROM dba_objects 
      WHERE object_name LIKE 'AW$%' AND object_name!='AW$' 
      GROUP BY owner, object_name, created, status 
      ORDER BY owner, object_name;
 
OWNER      OBJECT_NAME     CREATED   STATUS
---------- --------------- --------- -------
GLOBAL     AW$GLOBAL       01-APR-09 VALID
SYS        AW$AWCREATE     26-MAR-09 VALID
SYS        AW$AWCREATE10G  26-MAR-09 VALID
SYS        AW$AWMD         26-MAR-09 VALID
SYS        AW$AWREPORT     26-MAR-09 VALID
SYS        AW$AWXML        26-MAR-09 VALID
SYS        AW$EXPRESS      26-MAR-09 VALID
 
7 rows selected.

OLAP DBA Scripts

You can download a file that contains several SQL scripts from the Oracle OLAP Web site on the Oracle Technology Network. These scripts typically extract information from two or more system views and generate a report that may be useful in monitoring and tuning a database. To download the file, use this URL:

http://www.oracle.com/technology/products/bi/olap/olap_dba_scripts.zip

Table 7-6 describes these scripts. For more information, refer to the README file provided with the scripts.

Table 7-6 OLAP DBA Scripts

SQL ScriptDescription

aw_objects_in_cache

Identifies the objects in the buffer cache that are related to analytic workspaces.

aw_reads_writes

Tallies the reads from temporary and permanent tablespaces, the writes to cache, and the rows processed in analytic workspaces.

aw_size

Displays the amount of disk space used by each analytic workspace.

aw_tablespaces

Provides extensive information about the tablespaces used by analytic workspaces.

aw_users

Identifies the users of analytic workspaces.

aw_wait_events

Describes the wait events experienced by users of analytic workspaces over the previous hour.

buffer_cache_hits

Calculates the buffer cache hit ratio.

cursor_parameters

Indicates whether the database parameters that limit the number of open cursors are set too low.

olap_pga_performance

Determines how much PGA is in use, the size of the OLAP page pool, and the hit/miss ratio for OLAP pages for each user.

olap_pga_use

Determines how much PGA is consumed by the OLAP page pool to perform operations on analytic workspaces.

session_resources

Identifies the use of cursors, PGA, and UGA for each open session.

shared_pool_hits

Calculates the shared pool hit ratio.


Scripts for Monitoring Performance

Several of the scripts listed in "OLAP DBA Scripts" provide detailed information about the use of memory and other database resources by OLAP sessions. You can use these scripts as is, or you can use them as the starting point for developing your own scripts.

Example 7-3 shows the information returned by the session_resources script. It lists the use of resources such as cursors, PGA, and UGA.

Example 7-3 Querying Session Resources

@session_resources
 
USERNAME             NAME                                VALUE
-------------------- ------------------------------ ----------
GLOBAL:86            opened cursors cumulative             621
                     opened cursors current                 18
                     session cursor cache count             50
                     session cursor cache hits             432
                     session pga memory                5356368
                     session pga memory max           10468176
                     session stored procedure space          0
                     session uga memory                4230692
                     session uga memory max            7049780
 
9 rows selected.

Monitoring Disk Space

Several of the scripts listed in "OLAP DBA Scripts" provide detailed information about the use of disk space by analytic workspaces. Example 7-4 shows the information returned by the aw_size script. It lists all of the analytic workspaces in the database, the disk space they consume, and the tablespaces in which they are stored.

Example 7-4 Querying the Use of Disk Space By Analytic Workspaces

@aw_size
 
Analytic Workspace                            On Disk MB Tablespace
---------------------------------------- --------------- --------------------
GLOBAL.GLOBAL                                     249.31 GLOBAL
SYS.AWCREATE                                        7.81 SYSAUX
SYS.AWCREATE10G                                     1.63 SYSAUX
SYS.AWMD                                            8.00 SYSAUX
SYS.AWREPORT                                        1.63 SYSAUX
SYS.AWXML                                          18.00 SYSAUX
SYS.EXPRESS                                         2.25 SYSAUX
                                         ---------------
Total Disk:                                       288.63
 
7 rows selected.

Backup and Recovery

You can backup and recover analytic workspaces using the same tools and procedures as the rest of your database.

Oracle Recovery Manager (RMAN) is a powerful tool that simplifies, automates, and improves the performance of backup and recovery operations. RMAN enables one time backup configuration, automatic management of backups, and archived logs based on a user-specified recovery window, restartable backups and restores, and test restore/recovery.

RMAN implements a recovery window to control when backups expire. This lets you establish a period of time during which it is possible to discover logical errors and fix the affected objects by doing a database or tablespace point-in-time recovery. RMAN also automatically expires backups that are no longer required to restore the database to a point-in-time within the recovery window. Control file auto backup also allows for restoring or recovering a database, even when an RMAN repository is not available.

Export and Import

You can copy analytic workspaces in several different ways, either to replicate them on another computer or to back them up.

  • Data Pump. Analytic workspaces are copied with the other objects in a schema or database export. Use the expdp/impdp database utilities.


    Tip:

    Verify that the target schema of an import has the OLAP_XS_ADMIN privilege. Otherwise, the analytic workspace will not be created with the necessary permissions.

  • Transportable Tablespaces. Analytic workspaces are copied with the other objects to a transportable tablespace. However, you can only transport the tablespace to the same platform (for example, from Linux to Linux, Solaris to Solaris, or Windows to Windows) because the OLAP DECIMAL data type is hardware dependent. Use the expdp/impdp database utilities. Transportable tablespaces are much faster than dump files.

  • XML Templates. A template saves the XML definition of objects in an analytic workspace. You can save the entire analytic workspace, or individual cubes, dimensions, and calculated measures. Using a saved template, you can create an analytic workspace exactly like an existing one. The template does not save any data, nor does it save any customizations to the analytic workspace. You can copy a template to a different platform.

The owner of an analytic workspace can create an XML template, or export the schema to a dump file. Only users with the EXP_FULL_DATABASE privilege or a privileged user (such as SYS or a user with the DBA role) can export the full database or create a transportable tablespace.


See Also:


Cube Materialized Views

A cube materialized view is an Oracle OLAP cube that has been enhanced with the capabilities of a materialized view at build time.

Acquiring Information From the Data Dictionary

The data dictionary contains numerous static views that provide information about materialized views. They list cube materialized views along with all other materialized views.


See Also:

Oracle Database Reference for complete descriptions of the data dictionary views

Identifying Cube Materialized Views

USER_MVIEWS contains a row for each materialized view owned by the current user. The following query lists the materialized views owned by the GLOBAL user. The CB$ prefix identifies a cube materialized view.

SELECT mview_name, refresh_mode "MODE", refresh_method "METHOD", 
     last_refresh_date "DATE", staleness FROM user_mviews;
 
MVIEW_NAME               MODE     METHOD   DATE            STALENESS
------------------------ -------- -------- --------------- ----------
CB$CUSTOMER_MARKET       DEMAND   COMPLETE 20-MAR-09       UNKNOWN
CB$CHANNEL_PRIMARY       DEMAND   COMPLETE 20-MAR-09       UNKNOWN
CB$CUSTOMER_SHIPMENTS    DEMAND   COMPLETE 20-MAR-09       UNKNOWN
CB$PRODUCT_PRIMARY       DEMAND   COMPLETE 20-MAR-09       UNKNOWN
CB$TIME_CALENDAR         DEMAND   COMPLETE 20-MAR-09       UNKNOWN
CB$TIME_FISCAL           DEMAND   COMPLETE 20-MAR-09       UNKNOWN
CB$UNITS_CUBE            DEMAND   FORCE    20-MAR-09       UNKNOWN
 
7 rows selected.

The example shows the cube materialized views defined by Analytic Workspace Manager: One for each dimension hierarchy and one for each cube.

Identifying the Refresh Logs

Oracle Database can maintain a set of logs on the master tables for the cube materialized views. These logs support incremental (fast) refresh of the cube. The script generated by the Relational Schema Advisor creates a log for each fact and dimension table to record any changes to the data. The following query lists the materialized view logs owned by the GLOBAL user:

SELECT master, log_table FROM user_mview_logs;
 
MASTER                         LOG_TABLE
------------------------------ ------------------------------
CHANNEL_DIM                    MLOG$_CHANNEL_DIM
CUSTOMER_DIM                   MLOG$_CUSTOMER_DIM
PRODUCT_DIM                    MLOG$_PRODUCT_DIM
TIME_DIM                       MLOG$_TIME_DIM
UNITS_FACT                     MLOG$_UNITS_FACT

Initiating a Data Refresh

You can initiate a data refresh of a cube materialized view in several different ways using Analytic Workspace Manager or a PL/SQL package:

  • Automatic Refresh: On the Materialized View tab for a cube, you can create a regular schedule for the materialized view refresh subsystem, as described in "Adding Materialized View Capability to a Cube".

  • Maintenance Wizard: The Maintenance Wizard is available for refreshing all cubes and dimensions, including cube materialized views.

  • DBMS_CUBE: The DBMS_CUBE PL/SQL package is available for refreshing all cubes, cube dimensions, and cube materialized views.

  • DBMS_MVIEW: The DBMS_MVIEW PL/SQL package contains several procedures for use with cube materialized views.

Using DBMS_CUBE

DBMS_CUBE can be used to create and populate an analytic workspace. You can use it to maintain any cube, including cube materialized views.

The following command initiates a complete refresh of UNITS_CUBE, which is enabled as a cube materialized view. It automatically refreshes any stale dimensions before refreshing the cube.

EXECUTE dbms_cube.build('GLOBAL.UNITS_CUBE');

You can determine the refresh method from USER_MVIEWS, as shown in "Identifying Cube Materialized Views".

Using DBMS_MVIEW

DBMS_MVIEW can be used to refresh all types of materialized views. These refresh procedures can be used with cube materialized views:

  • REFRESH refreshes a list of one or more materialized views.

  • REFRESH_ALL_MVIEWS refreshes all materialized views that meet certain criteria.

  • REFRESH_DEPENDENT refreshes all materialized views that depend on a particular master table and meet certain criteria.

Dimensions must be refreshed before the cube. An error is raised during refresh of a cube materialized view if any of its associated dimension materialized views are stale. The procedures in DBMS_MVIEW can refresh multiple materialized views in one call, but they do not guarantee the refresh order. To control the refresh order, call DBMS_MVIEW.REFRESH for the cube materialized view separately from its dimension materialized views.

The following command initiates a refresh of the materialized view for the CHANNEL_PRIMARY hierarchy.

EXECUTE dbms_mview.refresh('CB$CHANNEL_PRIMARY', 'C');

Refresh Methods

In Analytic Workspace Manager, you can specify the COMPLETE, FAST, or FORCE methods for refreshing a cube. Two additional methods, FAST_PCT and FAST_SOLVE, are invoked by the materialized view subsystem. They are not separate choices.

Refresh Method Descriptions

Table 7-7 describes the refresh methods that are supported on cube materialized views.

Table 7-7 Refresh Methods For Cube Materialized Views

Refresh MethodDescription

COMPLETE

Deletes and recreates the cube.

This option supports arbitrarily complex mappings from the source tables to the cube.

FAST

Loads and re-aggregates only changed values, based on the materialized view logs or, after direct path loading, on the ALL_SUMDELTA data dictionary view.

The source for the refresh is the incremental differences that have been captured in the materialized view logs, rather than the original mapped sources. These differences are used to incrementally rebuild the cube. Only cells that are affected by the changed values are re-aggregated.

This option supports only simple mappings for cube materialized views, that is, where no expressions (other than table.column), views, or aggregations occur in the query defining the mapping.

The materialized view subsystem determines whether to perform a FAST or a FAST_PCT refresh. See the Oracle Database Data Warehousing Guide for information about the methodology.

FAST_PCT

Loads and re-aggregates data only from changed partitions. This method works best when the source table and the cube are partitioned on the same dimension.

FAST_PCT does not use change logs. The materialized view subsystem determines whether to perform a FAST or a FAST_PCT refresh. See the Oracle Database Data Warehousing Guide for information about the methodology.

FAST_SOLVE

Loads and re-aggregates only changed values, based on the original mapped data source.

FAST_SOLVE is a type of refresh only for cube materialized views. It incrementally re-aggregates the cube even when the refresh source is the original mapped source instead of the materialized view logs. The aggregation subsystem identifies the differences and then incrementally re-aggregates the cube.

This option is supported for arbitrarily complex mappings from the source tables to the cube. To discover whether a FAST_SOLVE refresh has occurred, review the CUBE_BUILD_LOG table as shown in "Fast Solve Refreshes". Or review the LAST_REFRESH_TYPE column of ALL_MVIEW; a FAST_SOLVE refresh appears as FAST_CS.

FORCE

Loads and re-aggregates values using the best method possible.

When a COMPLETE refresh is not necessary, the materialized view system first attempts a FAST refresh. If it cannot FAST refresh a cube materialized view, it performs a FAST_SOLVE refresh.


Fast Solve Refreshes

The build log lists the CLEAR LEAVES command when the FAST SOLVE method was used. Example 7-5 shows the rows of CUBE_BUILD_LOG concerned with building UNITS_CUBE.


See Also:

"Maintenance Logs"

Example 7-5 Identifying a FAST SOLVE Refresh

SELECT build_object, status, command FROM cube_build_log
     WHERE build_object='UNITS_CUBE'
     AND build_id=8;
 
BUILD_OBJECT STATUS     COMMAND
------------ ---------- -------------------------
UNITS_CUBE   STARTED    COMPILE AGGMAP
UNITS_CUBE   COMPLETED  COMPILE AGGMAP
UNITS_CUBE   STARTED    UPDATE
UNITS_CUBE   COMPLETED  UPDATE
UNITS_CUBE   STARTED    CLEAR LEAVES
UNITS_CUBE   COMPLETED  CLEAR LEAVES
UNITS_CUBE   STARTED    LOAD
UNITS_CUBE   COMPLETED  LOAD
UNITS_CUBE   STARTED    SOLVE
UNITS_CUBE   COMPLETED  SOLVE
UNITS_CUBE   STARTED    UPDATE
UNITS_CUBE   COMPLETED  UPDATE
UNITS_CUBE   STARTED    ANALYZE
UNITS_CUBE   COMPLETED  ANALYZE
 
14 rows selected.

Using Query Rewrite

Query rewrite changes a query to select data from the materialized views instead of calculating the result set from the master tables. The transformation is fully transparent to the client, and requires no mention of the materialized views in the SQL statement. In the case of cube materialized views, the query is written against the tables or views of a star or snowflake schema, and it is transformed into a query against a cube materialized view. This transformation can result in significant improvements in run-time performance.

Query rewrite requires optimizer statistics on the cubes and dimensions. You can discover whether a query is rewritten by generating and examining its execution plan.

Oracle Database uses two initialization parameters to control query rewrite:

  • QUERY_REWRITE_ENABLED: Enables or disables query rewrite globally for the database.

  • QUERY_REWRITE_INTEGRITY: Determines the degree to which query rewrite monitors the consistency of materialized views with the source data. The trusted or stale tolerated settings are recommended when using rewrite to cube materialized views.

Administration of cube materialized views is the same as any other materialized view except that the cube materialized views must be in the same schema as the analytic workspace. Users require the GLOBAL QUERY REWRITE privilege to have rewrite to materialized views that are in schemas other than their own. However, the owner can access the materialized views from any schema without additional privileges.


See Also:


Acquiring Additional Information About Cube Materialized Views

Oracle Database has numerous PL/SQL packages for managing materialized views. Cube materialized views are optimized to provide the best performance, so you have no need to use most of these packages. Few design decisions remain for you to make. For this reason, the TUNE_MVIEW procedure of DBMS_ADVISOR is disabled for cube materialized views.

However, there are a few packages that you may find useful, as shown in Table 7-8.

Table 7-8 PL/SQL Packages for Cube Materialized Views

PackageDescription

DBMS_METADATA

Returns the metadata for an object.

DBMS_MVIEW

Executes data refreshes. See "Initiating a Data Refresh".

You can use the EXPLAIN_REWRITE and EXPLAIN_MVIEW procedures to obtain information about cube materialized views. EXPLAIN_MVIEW is particular useful for evaluating and explaining the FAST refresh capabilities of a cube.

DBMS_XPLAN

Displays an execution plan. See "Viewing Execution Plans".


PKIuQfQPK,AOEBPS/preface.htm6 Preface

Preface

The Oracle OLAP User's Guide explains how SQL applications can extend their analytic processing capabilities and manage summary data by using the OLAP option of Oracle Database. It also provides information about managing resources for OLAP.

The preface contains these topics:

Audience

This manual is intended for DBAs who perform these tasks:

Documentation Accessibility

Our goal is to make Oracle products, services, and supporting documentation accessible to all users, including users that are disabled. To that end, our documentation includes features that make information available to users of assistive technology. This documentation is available in HTML format, and contains markup to facilitate access by the disabled community. Accessibility standards will continue to evolve over time, and Oracle is actively engaged with other market-leading technology vendors to address technical obstacles so that our documentation can be accessible to all of our customers. For more information, visit the Oracle Accessibility Program Web site at http://www.oracle.com/accessibility/.

Accessibility of Code Examples in Documentation

Screen readers may not always correctly read the code examples in this document. The conventions for writing code require that closing braces should appear on an otherwise empty line; however, some screen readers may not always read a line of text that consists solely of a bracket or brace.

Accessibility of Links to External Web Sites in Documentation

This documentation may contain links to Web sites of other companies or organizations that Oracle does not own or control. Oracle neither evaluates nor makes any representations regarding the accessibility of these Web sites.

Access to Oracle Support

Oracle customers have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/support/contact.html or visit http://www.oracle.com/accessibility/support.html if you are hearing impaired.

Related Documents

For more information about the OLAP option, see the following manuals in the Oracle Database 11g documentation set:

Conventions

The following text conventions are used in this document:

ConventionMeaning
boldfaceBoldface type indicates graphical user interface elements associated with an action, or terms defined in text or the glossary.
italicItalic type indicates book titles, emphasis, or placeholder variables for which you supply particular values.
monospaceMonospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter.

PKDPK,AOEBPS/index.htm Index

Index

A  B  C  D  E  F  G  H  I  J  L  M  N  O  P  Q  R  S  T  U  V  W  X 

A

ADVISOR privilege, 2.3, 2.3
aggregation
average operator, 9.1
calculated measures, 4.5.2
definition, 9.1
hierarchical average operator, 9.1
over attributes, 4.5
sum operator, 9.1
weighted operators, 9.1
aggregation operators, 3.5, 4.5, 9.2
aggregation order, 9.3
aggregation percentages, 9.4.2
aggregation step (cube scripts), 3.6.1
ALL_AW_OBJ view, 7.3.1
ALL_AW_PROP view, 7.3.1
ALL_AW_PS view, 7.3.1
ALL_AWS view, 7.3.1
ALL_CUBES view, 7.4.1
analysis tools, 1.2
analytic functions, 5.2.2, 5.5.4
Analytic Workspace Manager
installing, 2.4.1
opening, 2.4.2
using, 3.2
analytic workspace security, 8.2.1.1, 8.2.2.1
analytic workspaces
creating, 3.3
database storage, 7.3.3
disk space consumption, 7.6.5
enhancing functionality, 3.3.1
identifying owners, 7.6.2.2
listing, 7.6.2.2
size, 7.6.2.3
analyze step (cube scripts), 3.6.1
Application Express, 1.2, 6.3
arithmetic operations, 5.2.1
attribute aggregation, 4.5
attributes
creating, 3.4.3.2
defined, 1.3.5, 3.4.3
authentication, 2.3
Automatic Database Diagnostic Monitor, 7.6
Automatic Storage Management, 7.2.4
Automatic Workload Repository, 7.6
average
cumulative, 5.4.9
moving, 5.4.8
average operator (aggregation), 9.1
average rank, 5.4.6
AVERAGE_RANK function, 5.5.4
AVG function, 5.5.4
AW$ tables, 7.3.2
AW$AWCREATE10G table, 7.3.2
AW$AWMD table, 7.3.2

B

backup and recovery, 7.7
backup options, 7.8
batch processing, 7.4.3
BI Publisher, 6.2
BI Suite, 1.3
bind variables, 6.1, 6.2.4.3, 6.3.2.4, 6.3.3.2
branches (Application Express), 6.3.2.3
build logs, 3.4.5
BusinessObjects Enterprise, 1.3

C

calculated measures
creating, 5.3
defined, 5.1
generator, 5.3
calculation templates, 5.3.1, 5.4
calculations
free-form, 5.5
in queries, 4.4
nested, 5.4.10
time ranges, 5.3.2
changes, saving, 3.3.2
character functions, 4.2.3
clear data step (cube scripts), 3.6.1
CLEAR LEAVES command, 7.9.3.2
Cognos ReportNet, 1.3
column links, 6.3.3.3
connect string, for Analytic Workspace Manager, 2.4.4
connections, defining, 2.4.3
CREATE ANY DIMENSION privilege, 2.3
CREATE ANY MATERIALIZED VIEW privilege, 2.3
CREATE DIMENSION privilege, 2.3
CREATE MATERIALIZED VIEW privilege, 2.3
CREATE SESSION privilege, 2.3, 2.3
creating analytic workspaces, 7.6.2.4
cube materialized views, 3.6.3, 7.9
Cube Partitioning Advisor, 3.5.3
CUBE SCAN operation, 4.6.2
cube scripts, 3.6.1
cube security, 8.2.1.3
cube views, 3.5.6, 4.1.1
cubes
creating, 3.5
defined, 1.3.1, 3.5
mapping, 3.5.2
requirements for materialized views, 3.6.3
cumulative calculations, 5.4.9
cursors, 1.1.5

D

dashboard, 1.2
data dictionary views, 4.7, 7.3.1
data display, 3.4.7, 3.5.5
data loads, 3.4.5, 3.5.4
data maintenance, 3.6
data model
description of dimensional, 1.3
designing, 3.1
saving, 3.9
Data Pump, 7.8
data security, 8.1.2
data security policies, 8.3
data sources
database objects, 3.2
mapping, 3.4.4
database connections, defining, 2.4.3
Database Control, 7.6
database integration, 1.1.1
database security, 2.3
DBA scripts download, 7.6.3
DBA_AW_OBJ view, 7.3.1
DBA_AW_PROP view, 7.3.1
DBA_AW_PS view, 7.3.1
DBA_AWS view, 7.3.1, 7.6.2.2
DBA_OBJECTS view, 7.6.2.4
DBA_REGISTRY view, 7.6.2.1
DBMS_AW_STATS PL/SQL package, 7.5
DBMS_CUBE PL/SQL package, 3.6, 7.9.2.1
DBMS_LOB PL/SQL package, 7.6.2.3
DBMS_METADATA PL/SQL package, 7.9.5
DBMS_MVIEW PL/SQL package, 7.9.2.2, 7.9.5
DBMS_SCHEDULER PL/SQL package., 3.6
DBMS_XPLAN PL/SQL package, 7.9.5
dense rank, 5.4.6
DENSE_RANK function, 5.5.4
dimension hierarchies
See hierarchies
dimension object security, 8.2.2.2
dimension order, affecting aggregation, 9.3.1
dimension security, 8.2.1.2
dimension views, 4.1.2
dimensions
creating, 3.4
defined, 1.3.3, 3.4
viewing members, 3.4.7
Discoverer Plus OLAP, 1.3
disk space consumption, 7.6.5
disks, spreading data across, 7.2.4
displaying data, 3.5.5
drillable reports, 6.2
drilling, 4.2.3, 6.3.3.3
drilling (Application Express), 6.3.3
dump files, 7.8
dynamic performance tables, 7.6.1

E

edits, saving, 3.3.2
end date attributes, 3.4.3.1
Enterprise Manager Database Control, 7.6
execution plans, 4.6
EXP_FULL_DATABASE privilege, 7.8
EXPLAIN PLAN command, 4.6
extensibility using plugins, 2.4.5
EXTENT MANAGEMENT LOCAL, 7.2

F

FAST SOLVE method, 7.9.3.2
filtering queries, 4.2.1
free-form calculations, 5.5
future periods, 5.4.3

G

generator, calculated measures, 5.3
Global Computing Company
data requirements, A.1.1
GLOBAL QUERY REWRITE privilege, 7.9.4
Global schema download, 2.1
Gregorian calendar, 5.3.2

H

hidden items (Application Express), 6.3.3.1
HIER_ANCESTOR function, 5.5.4
HIER_CHILD_COUNT function, 5.5.4
HIER_DEPTH function, 5.5.4
HIER_LEVEL function, 5.5.4
HIER_PARENT function, 5.5.4
HIER_TOP function, 5.5.4
hierarchical average operator (aggregation), 9.1
hierarchical operators, 9.2.3
hierarchical queries, 4.2.3
hierarchies
creating, 3.4.2
defined, 1.3.4, 3.4.2
level-based, 3.4.1
supported types, 3.4.2
hierarchy views, 4.1.2

I

index, 5.4.2
initialization parameters, 7.1
init.ora file, 7.1
installing Analytic Workspace Manager, 2.4.1
installing OLAP option, validation, 7.6.2.1
integration in database, 1.1.1

J

JOB_QUEUE_PROCESSES parameter, 7.1, 7.4.3

L

LAG function, 5.4.3, 5.5.4
LAG_VARIANCE function, 5.5.4
LAG_VARIANCE_PERCENT function, 5.5.4
language support, 3.7
layout template (BI Publisher), 6.2.1
LEAD function, 5.4.3, 5.5.4
LEAD_VARIANCE function, 5.5.4
LEAD_VARIANCE_PERCENT function, 5.5.4
level-based dimensions, 3.4
level-based hierarchy, 3.4.1
levels
creating, 3.4.1
defined, 1.3.4.1
load step (cube scripts), 3.6.1
loading data, 3.4.5, 3.5.4
localization, 3.7
login names, 2.3
LOVs (list of values), 6.2.4, 6.3.2.2

M

maintenance alternatives, 3.6
maintenance scripts, 3.6.2
Maintenance Wizard, 3.4.5, 3.5.4
mappings, creating, 3.4.4
materialized views
access privileges, 7.9.4
creating cube, 3.6.3
refresh logs, 7.9.1.2
MAX function, 5.5.4
maximum
cumulative, 5.4.9
moving, 5.4.8
measure folders, creating, 3.8
measures
creating, 3.5.1
defined, 1.3.2
MIN function, 5.5.4
minimum
cumulative, 5.4.9
moving, 5.4.8
moving calculations, 5.4.8

N

natural keys, 3.4
nested calculations, 5.4.10
normal hierarchies, 3.4.2

O

object security, 8.1.2, 8.2.1, 8.2.2.1
objects, mapping, 3.4.4
OLAP DML
calculated measures, 5.6
OLAP DML step (cube scripts), 3.6.1
OLAP option, verifying installation, 7.6.2.1
OLAP_DBA role, 2.3
OLAP_USER role, 2.3, 2.3
OLAP_XS_ADMIN role, 2.3, 8.3
optimizer statistics, 7.5
Oracle Application Express, 1.2
Oracle Business Intelligence, 1.3
Oracle Real Application Clusters, 1.1.5, 7.4.3
Oracle Recovery Manager, 7.7
OracleBI Discoverer Plus OLAP, 1.3
OracleBI Spreadsheet Add-In, 1.3
OracleBI Suite Enterprise Edition, 1.3
OUTER plan option, 4.6.2
owners of analytic workspaces, identifying, 7.6.2.2

P

page definition (Application Express), 6.3.2
parallel periods, 5.4.7
parallel processing, 7.4.3
parameter file, 7.1
parent-child relations, 1.3.4.1
PARTIAL OUTER plan option, 4.6.2
partitioning
benefits, 3.5.3
description, 3.5.3.2
discussed, 7.4.1
Partitioning Advisor for cubes, 3.5.3
partitioning strategies, 3.5.3.1
performance counters, 7.6.1
period to date, 5.4.4
pfile settings, 7.1
PLAN_TABLE table, 4.6
PL/SQL step (cube scripts), 3.6.1
plugins, 2.4.5
prior periods, 5.4.3
privileges, 8.1.3
PS$ tables, 7.3.2

Q

queries, filtering, 4.2.1
query rewrite, 7.9.4
query tools, 1.2
QUERY_REWRITE_ENABLED parameter, 7.9.4
QUERY_REWRITE_INTEGRITY parameter, 7.9.4
querying dimensions and cubes, 4

R

RAC
See Oracle Real Application Clusters
ragged hierarchies, 3.4.2
rank, 5.4.6
RANK function, 5.5.4
Real Application Clusters
See Oracle Real Application Clusters
refresh logs, 7.9.1.2
refresh methods, 7.9.2, 7.9.3.1
report entry (BI Publisher), 6.2.1
report layout (BI Publisher), 6.2.3
reports, 6.2
RMAN, 7.7
ROW_NUMBER function, 5.5.4

S

sample schema download, 2.1
scaled operators, 9.2.2
scheduling maintenance, 7.4.3
security, 8.2.2.1
materialized views, 7.9.4
security policies, 8.3
server parameter file, 7.1
SESSIONS parameter, 7.1
share, 5.4.5
SHARE function, 5.5.4
single-row functions, 5.2.3
size of analytic workspace, 7.6.2.3
skip-level hierarchies, 3.4.2
source data, 3.2
Spreadsheet Add-In, 1.3
static data dictionary views, 4.7, 7.3.1
step types, 3.6.1
SUM function, 5.5.4
sum operator (aggregation), 9.1
surrogate keys, 3.4
system tables, 7.3.2

T

tablespaces, 7.2
templates
BI Publisher, 6.2.2
calculation, 5.3.1
creating, 3.9
time dimensions, 3.4
time ranges in calculations, 5.3.2
time span attributes, 3.4.3.1
total
cumulative, 5.4.9
moving, 5.4.8
transportable tablespaces, 7.8, 7.8

U

UNDO_MANAGEMENT parameter, 7.1
UNDO_TABLESPACE parameter, 7.1
unique key attributes, 3.4.3.3
user names, 2.3
USER_AW_OBJ view, 7.3.1
USER_AW_PROP view, 7.3.1
USER_AW_PS view, 7.3.1
USER_AWS view, 7.3.1
USER_CUBE_DIM_VIEW_COLUMNS view, 4.1.2.2
USER_CUBE_DIM_VIEWS view, 4.1.2.1
USER_CUBE_HIER_LEVELS view, 4.2.1
USER_CUBE_HIER_VIEWS view, 4.1.2.1
USER_CUBE_VIEW_COLUMNS view, 4.1.1.2
USER_MVIEWS view, 7.9.1.1

V

V$AW_AGGREGATE_OP view, 7.6.1
V$AW_ALLOCATE_OP view, 7.6.1
V$AW_CALC view, 7.6.1
V$AW_LONGOPS view, 7.6.1
V$AW_OLAP view, 7.6.1
V$AW_SESSION_INFO view, 7.6.1
value-based dimensions, 3.4
value-based hierarchies, 3.4.2

W

weighted operators, 9.2.2
weighted sum (aggregation), 9.1
WHERE clause operations, 4.2.3

X

XML Templates, 7.8
PKrPK,AOEBPS/img/cube_script.gifMGIF87aNļ̚td4" |~|lnl4fd~dď̚j2Į̚td4",N@@pH,Ȥrl:ШtJZجvzŀx<zn|N~{Bogkdcbmpbs˜qǥsChDiGྂ*p>5V Ǒڸ1:Iɓ|>Bɲ˗0͛8s">.:xѣH*]ʴӧP]cÓVDPe=5Z,+hϪ՚,Wn]lBUkԿ 6:uMU+^|0ǐ#KVx˘3۩ϓ9EP 1V("xkHRmyklnDУKNسk2W~O4gz9)~&qOo>&T`@ǀ_F(a"vL̆h2 ȁUμx ̼H33"uȘ ;Pd?@ _P,@XC(B ,X0P \ש ?G8E3x#[ #QE1H"F~]-?Sz.AGAO1"G:=2 =ƣFx7$RL$#"Fzđ̤&MztP#(RDSf,Xd,eXr0[`rKd%/X6YJ[e'KhZ4&Pz󛆙&8 JQ[i /uc(N5 i$tH@Py n"! Շ" tгg4'F7J6r7bCC!!);(" r8}D$HMajНt*M(OӛE< ҦN*DRǥ#TrqJֲhMZZƮ B'TPNj[=ţ;L2S}mQxW$j ԡXI(Tc!ZͬeͮDb 2xBdݤ?bPzzmj[˧Қ-g;ϢR@pZB\2z<ަLO!eJQױ 9 Au|\ّP|:Ǜ@ZPxO NVQS(|R*V @z)KZ[>歒{QћC>/tDgϵmJ=G_,ә԰ak2ebtIeLZ}e}~DryLc[b_ñ~?}?'3,L 7Xx zzX}Pz؁"X@jpQL&N(POeE7Suw~,؂6@%$ O68xgw1y/ExGUw<QBOT\؅/jzl؆p8zr8GU9Sswu{:R8y^SwFJ-%P{wxW'xTSGV"u?"rPaLrtjwvNRPhvSXt{'Wx(|kwQvy،xt8C1UVwQh;Bv 8Ts78s6&rtXMc tQQHtx{g8 aEQ&(7uzBQZEQ) YO!Q#[Z.294($,;9Gd`(5)'0XUYU[E(xBZZXC93y8 ӵX~BvҔ_y(J [LIZ'hZ`ٖ.iWYI2U4{t|ɗpO1f 5[}╏E2p¥>ɘ!fal~i YIQv`cI}LpiJ`.KHN89 00m81ԜrpY~,w,F09 ffff9<H)}b]1||gpb`ײ1s84AטY pv҆l"sl3.zm@2sn#cAA$4 $y@飽FjC?zL*{IMKڤRcO{E:XcUVإ-`rbO.rl n:1orڦpZshhi.y3qJjZn.yR8hJ:JliO+R~ p7N.ʪ 8I8oPӪꪽJnr1S6ʚ̪4$y`"?@;Z/.# 9sJ@ /;SkoV;u֮fD`BzjfIz6CӮz <zj{ٰT(.s9;3 vƱ3><>?>V2ohGkmV@aB[{df`&A,6h6l~m۷l~m(J2CcD׃9v;;= 3JB2K+[KCtef?C[&24Dh ePBKhB+42:fBcpڻwp; B8k똑rQeH%GtTqer R0R5vqzȊr\$WE w|1geě"z[u(Q*.|N044M6|:lq9Û|0 <ȿ1G;X~P G,yTghITq$̉x%r 9QK6SZh|'SWW~>RĚTwOhu%`QF>ȼLNlK H+ ,XWzt=l7(sTQߑt]v I`ɪxx>硼Qh(ho2Ȧ,ܚhgv|\覼a[ʒʬX~P=HT$^(w>EU >"q^wYQtdQgH> ~.EH^q~AyMɴ|~fxn)>BTޑܔNf6Jlo, "?7Q&_(0%02?4?+s-:E6بtn5') CN>N@%IH@WZ NGNI %.߫ FS_jR<T(_FatiNq>Af'@$Msp1m"A\ަ4[uz}Y Pp1Qq2j 3h3T u6UrHwȩ)4`ȊR+U9Zz!;[{{3h89`s;>^^}vW9*JwA &d} I )fKȈ#:$y嬉XdOt9z$2H:s =At@G.SB8}$3甝7v6kXNɖHpOVU'Us{7_Y/L.^6 801ƒ%pl9Mfa 6_cՑYO<sct9iݍrʀծ!7P40 v!}}u .W{BѧK5$7Ps7u/W 0Z>{ :-޺-pǻD$HE&Ц.GQ-tF ܏,D :́ - Ǟ,Pm-8   "вl '0A 3D0@)(!(NLbFNM  ;e袍>餕^ވ~ꨥAꬵޚ뮽&F9^6Rl5n?ΛDO3$sn_\vo [ 5|9o I'g!]?osc?вRvq~s+Kn16]yT;3z䬟z鵯CWIϞO}?P=T/__cy)Y=/2!짿?Kr;Mt!Hw XB2J (Ϊ,9b 6 a3 ;bHD0Hԡrx D-K:Y 1$VT0xE"zJxG<؀. bhE$lj cu" LDZTc*NLH*HHǧ:ˈH:!JDqyNMi&:|>=):Ik?j')@d` +6]WzJ+*PK,AOEBPS/img/lang_gen.gifGCGIF87anIܻŲ欙̙33ff3ff `vfZf0 J3f33booo33___3333???333sJff3ffffR333f3մ{{R̙fŃA̙3̙33ff333fŬf3ffff33cczcccccccccccc,nI@ʶէڮH*\ȰÇ#JHŋbȱG?Ir#~ Dz{*QfMk̝/{I6<]4@6J1VªkdZ|vm*ĩf]~Ŧӝm| w`†.WK|1媖/O]6]!: Vr2Ks'PHLX.ofٔحMW-u#׻U1KF "fȱb ^ABśX~={˟O۟/' F^|!x_|`=hz xa5gZ4#`^,|( H8)Huiǝwn+iG*PBdFj Vf%SMV)!xf`r߂N#[tbu Uh3x]vu`d]&RJ,vNb&iIeHF!ɘ+=y瀤*lkA@6V84ժeQy!m]˕Krʃn4kp kT#/9NXm S+%.lƊlp\q8 p9r\OlrJ+qt ܲyPݢ30䣳Z*>J3)lƺjV]3;m"** %j=A6ΎB)t^;H/{8D{[WxTF k|_ͣ܋Ivv[:u7X_59 :}[}8{Bf{^v#g~.^ Y¯4j5U/owv!\"'`0W@iv<[4/Yh#H79Io8p! |g$PY{a}b(C]ssv oL0XÒP4^rD+P[@RձP!E-熮t3qOԏ !eЋRz^X48IzgGPWEp3'KYfbR25Xvv! P^؄5:S;-'+QzhQݴRi|x7?MnԞq oP̚|hBğ-_L(HP;8.!]n!v;Y9=z4퓜U .s&awݠU9eSlX:߄Q^;EF~ɻ.xi;F=l|09|AkTn/'`Nao;[ur EaM6ֱd`YUv̘lc5ȶof2Vi]K8CTJ:Y4=֞|G;/)U'. Y]m| 1aD3){}tѣ6;)243N7SMcj^|6CS3ս.Uo(m!&FDCq5Uع1m|` Usw^#4n1Y$ζUَs6YZR0̓uk)/j&fq}ږ'eăRgy{eR.KDzb+w~ l$8 #}wÖ6qFqM7DAb;7u)1vVo!FZMS`hGҞ] mvxϻ}'I9;|M[J3GOқOWozp7}5 `@@D@}~_ ;_OW~ P(0UeߕؓHD 0@~ Ͽ gW Xg~ 0~g؁ "8$X&x" ,Hz0(MP ϰ0$wLf>4#Fx+c~HLx~#ք(QxE0+sYr#ׅ\q<(farZI7g6JKZYKBUVsqYWrv/xVш咇drebHXxfkf˔fgEr@X@' 1`F@4x5mŋ*,&.huAPDU!m(jrЦAhؘ]G֌٨4Ahh9W7#8xH'䋿eT!hʘȌ㘎V`U:X=&IDb9S+W6Oh8 I>U+SHX(꘎97c=i-it981469=d;MOF)นLI榙QɑJ86iy'śR3 Pٙ\t隥=ݸH_&OB6)I,p "ĉ !9n@yιxGIy q9 m?ryy1 1xz K|YfРY'IPj,yř qɝ c3Z5JH'*, "i;*,)Jɝٚ6vɚ1Q߉6=?%B*W6EJ؞)o٢ڤ7k*RYЇZ0*Yq,H`gcا"& @He.1*LfVڨɩ?8[p$ꥀC5yb4ڢN)EɃzX"ʥJ_z6FL ŠC) Pi4ӥzat<պd +fvSJiʦdzy]A°kHU"5>hfLUYk.![KQUU '0K*z:V90}YZf &>Ȭ*^z4:0ZuӉ;9V\V{T殹;J®N˶ޔ(빢ʓ9^Z;czSYZOzd["H;(o $Y6ɸf iљb 5iHYqU ,.F2k4k̐kƪ6ر7資˱: '3⹼jɷW;u"K˺Ip[+ˤ4jMK3{媤KJ۷ Ej+э;t Ssd' J L9* ,۾5쵒[[S2+q5<ѫrI gI<,"<¦Ry{Ih+ۨi֭cQj(tڛu;UL-qq#r(Yܓ*SUhU-=]}zkzdvߑMp dֿ֝_ DRQ ;d=[Q䷇ ve ۇIde"^ nfU=4^6~8:<>-ĸ@ߦU?88rIT A廱ħ U0q wfqxYLVN D022c0-0n}毕}(@>^~舞و$A@'`a&B"P*AATCE3JO5m a%!304#`#(` n<Ǩܜ蘿>P)] J|띍' 9>ma"eoVN爔@cRaT978jdWx2?_$>~^.umžhkug:?.n븮Dƿ^K+yn,㍕"ö޷ouӞ'~I"kl24%O>J?~~ FEhjl"Nn.D^OW׉'0T.CO##_^뷞ڞä6s-AQ.શ(p?E?خafo{~T/VBX`Zax=nЏB mM@_]poIR>Kӭ!-kNex|g3o s @`hXxHXpXiy *:y@zi +[: y@p ,y՝c=;_ n鋿_=tK[5G f 7(g _|9(|Lw~n!^}!yy!alYGx! !:vcs^(3m0VFdJ.dN #`Wpء_ Fax!uIƘT݇'j8dȢj:f&qG皵E۔v W\r.נu(➎֦{1zhu>x\֗_j| %a)\4 *?fh!< kv6'bR"5kVz\F쯆+JKn枋n骞fe`vXb6zKڜ6۾ilob(o <[g ,Z"ChoFiܝȒ&kZrzj̛ .8r W!N)?ih>vҗ/>UNt\HT:Vь`F0Q7A]uXW@ULPBɴ.Vd7FKҘd*`.(IRbJ ۓ%Ki%HH5fzi%*7 pl<ȱ,p@ ]`-s \V{o? b4?$d _`CUtL) %:w;xh.$$!> RTtiTist՛GEt$^&5]I{u%8Ԥ*uy(J1& Luӥ(%2Py'ԯ$buHQWzfȠ*p\ mWQfӺƣ#+_ ׿ 䬑;g#Vr{F9ʷT ,er٩ug?ۤ`z!4&}i3ej{s5׀oz<+*J=T%by&ɀ+MM%2GJ A1oVHNSzpa+6mkϜʘ;^le#h W"iuh-ڞ..(KZf"]/}U$\epkKo{)@ EЂ`s^vp=Fe|| =h"J^O⋝ >l.+`(.c5aY~xH~2 u^eNldy;c>H^oCn٦ -A [@<@xlfO] TIJF QD m(~5 b(d5,!TpB,KH@Єlڹi=qLj棞Xe MRtDcu/ x3O4!(T'jq]Q ^Qv,e~FܬN+'~ иVQ6׍C򗷢0w@j'  8#t0uS\杘:OW{\:ZpҞH#lebh52Ayh>-2nn3mY2pex3쌑{z>gּ!J(4][^XcY~h҆)Sgc)gXxNX`]hD+>5+{ ]uqH먆I^pxLgGidKfJ@PL^zD x%yrGʄ]ZM~JcMHKդ K`{4V:[I%Pvʩ੡*Jjz$ [ e_ĔeTڦ:zYz *:êɪʬʪA{Y}Y$5'LAwjs*ͪʮ@*T3Dzl KSkKа+@k۱{;[!Kв- h!7`>k [D;GI˴F۴HQ SR[TPP3` `6e<˵/ m`_+ ` Pq;]{0 0|t; ] 뷇 0P PdsK  |ۺy+yk pr뷳+ۻ[~{[˻+K ۍ?Wk Pо;[K;ۿ{\; L0 [:k G !O"'%l'슘Fd-bSQ/l79<$ 5A,Wqt;V%8UgrC QE*<Us塋R_T 9r8i%!No vulǬ04|{ǡ} ȁ,ȅlAȇȋ, ȏ ɤF*Eɕlɗəɛɝɟ ʡ,ʣLʥlʧʩʫʭR*|6+,D˵Ln˼l܌t e̔HW،Y =qA J71e6Mlg %جBڼͭfnwաxơ OUt,p=܋׼Tl|Z= p} Ъ7ҜFllM̒H21P^ʥS溴!gI [\5p# -piAG~>\tA@~t^nzin9)yEƕmnK(/+1#p`0geWl~f-ZIU"4*;].5YJn΂'> /c6`OvcmI(FwjIr)2pMVoLv2 ~|wB䷜"MQ>_[$ު`.dn$E'2)q>u~y}ns[9|qޑ{"~-0yZ87@\qڄ"곎{7Sr/F'^tH]a^{^텪2>^bT4Q>힛鮮G2K_59cjeHo Dn6jhnP.T~oa>3Pg>ZOtnx|^0@߃?W,R@5'#37334)-±ƗǏȾ̔ѿ/N+01)##ԙƞjEP,(hB񃨰H =kڦUQd3~M,8dtWܹ@z6YC"* ӧPae8īFjdlCfez FkӲL9,̚6m6A˷ԾcLpp,j]Ɛ#Kwe/kVw8΁MӨS^ͺװc&}`۸s߬;N,-Zp УKN.سν{i PKJ8.lqe m+_FnIG^$]0` }C}2aXvan}(m!hkV$]t O0c[lhDr8!>xDZW䑪}H=CVbc:a`R)Ifd%OLr1xIglZf~Ϗk2ڨGZӊVjge:Yxx@Vijw၎ j#6b% &j'R%WX r벑۟ ,H+t~. ^kozYGnŪؠ+OF+ I8pƺm1nC)`rly sl!8)sέj5ft ӯdԬHMէֲ A 4 A!8Qhmu\Z);"B <2Xx* T%]TĤJ?8[MQ^9*7bC!$H WVjT/K֕-ꗷa5{ڤdq;=CHo.(|`EӻtoIIV ؠcE0K >P>D()`Qyozc]X>Q+ԃ'<V*GAU1a ƅN#! KP-!_rCȰFCҘ"V͈!Cz lb#ٖHEG("+Dwpګ^Y1[44qF=N{c-ytP#,;t )%ӣ 嘻-cxK] , lT$7)y=B //%_eH5 -HI#sY#⋠K"J8kRܞzR,TWaϹq59}2 504(D9QyO fPUEńBӅ_ 71/%_©8,tFA4b& h@x OLJ*%ӌTTBQ׺㤄QO邶)~pJ̳n.89ڨޢw1C;;ޣ- _wo{|,Z /hЂ{>:n[}\?BЃ a>WL0Kw~&EMum%5Z!1: rar(ق_$c6!6{~Zͷ[X|eGa7a!g~$H|=(2?h& :1f'<j~ń~JhN\S\PX? }X#XSJ`6X=O$B"`0X$txHtzdfjC#]S !vyzr+#{*dzP[jZ+@pzҨh1j}WN@*gڢiZ$MZ.*.@j"u"ҬaR0*ڃ" 8SJ789(Ӊ_)*Ԋ,Z, VJ23Ȯ:NZza*  b q&{2jh*+;P4+uH*a_*%++$GB"hQ*Bo1C3{$RYea4&f"jnxGUcF#)v88e{ig^w(izggKwfw:!Z{> '扡h hf$in%ZTW ں*˟yNYCi!ZwIN(Z{jq#xiZ ʡZj4k{4ZLt#Ec{`;mkB#u9eS5Wrvnd xc1CgKI{xYw&+{‘KK!RW# G&>٘*ٺg[%\<@ſ[B;@k3e#<$ɝ.P<ٷYÎƨɽ{V[@)G6<%}58l8Ƕd;TsLjL 5g{k롼LKA,\\S {\Oj|y+\4eT+ CUsrx;i|˫±S|%UgmܛI䐑`jne9mrqs O#+k\s%ʀ=Tȕ~;-ڒ#J無 nS,:ٵpu= y^i9۩C.NV)YU{.M=ԭUfB^iSﭠ-{m kčΜElL[.jr 鱫ކnõMܾP ;ѤK6cO9gⱮQ'Gg*&͵E+ 誮@ұXӟ؉bw،8&.1pQpiy ʳ/]_IMYMg_ղz iQݨIR'TVoBזe}++Z:;1f-؁KU 'wQ*uPtmh^'Fɕs]"jm_Fm.'9Ew Ƕ\o 0wQҀߓ'Ȥq挒M Ŷ H8H)9 y)ٙy@@):JZ*90bx +;{0k{XKiY ; =M]*](̹Yy""!~MB_o0@܈}N^!DVBc B(Qm Q"ȑ$K<2ʕ,[|DH1֎7D@b$j$"1e3꣍OUm*UGVvEرd˖yOqO4Rk꡽I z߾^uˑj^Ä F go`mݹ/o |w49\ub&` YdwzNF_naI ï&Fv"s b.cTA9栣>"cᏉ dJ.i1XZRNIeV^eZne^~ fbIfff< n grIgvމgzzf{ hJhJh.h> i褖^in)v ji0Xjj*kjkZ+jZ@.%>k Z[-nmzK.[.rX`lz&kovBJK p -ֶKVζALAL'@%')21 s6\s%[dP@Lqc^tә%frɾ,\P} -ϼ5]kuɌofmu"WmM4zk~;ꬰ> @8&k83.qZk^lj/޸݊,:_9oFCwQ{B=s;.O~覻|;O}S>=vKܘ'@ so@r +P <ȸ  0w۠? `0+T! ]p2a o;ԡ s @@0@u0L4ngv (@ PEVYĢ/vq`" 3dhF6Q0h lӖ@i(!D*rl# H2r +Lj҃;PKRGGPK,AOEBPS/img/cube_log.gifGIF87a'焂!aƜƮ޽10 1ce01ye),)֜ecs!Q{Z)AceckmkZ]ZZYZ1e1ccJMJc0c9<9cB{}{ZZΚ1c10yZc019Jc{{{ϜRc9101 101{RBQ1010c0c޶}΄{,'@˿ ҂փ  H%lpB[ ܈cG IҟgًNUK|.clf<6kY檝.q$$h̚:ʼ3'L+JM*e*W[zuٲԱ:K'շWݻx˷oޓ4ULÈ+6;,IL˘3ky3V>/N|rҦNO4kn YU״2s軧约)SǏ,.pwϜ׳wsjCGP&ޝ7Ta7xY뽳(wZGz3ܽx]@~_}'W~stehq,ٝ4$h(,"(4Xb6樣8<)'8,@ 8Iօ6PD,DYn& B4@jf# ki'hy'*i,"%Xm6wF"r9BjzbriꌩCj ꈤ"$NByh"Q6%l9j& J("X-^cڮmCzSn4 `c(+b1<8Ŋ,v{?.pÕ SK馘fG -##bk.?鮻p* P;\h;s{3& ^Wʼ~3 z{.C라7ݼ-|\{ dx3nݕRo'eB>_]uSߞœ|0`< u3Emnv]vzHV5s,oSƂ~g%Z^V4}uQ2U_>`Ռ.HpF?5P>c^f*6alTۿz]j!j3_}mF}{V{+EwK0w+EKAbs|`5LdN숏cX%vO)TxnM&f42xqZu#%QE`F7ڿFmʠ=޼,s6\ fϨvU "ZHuƊk>R  *UυqbNf;ЎMj[6)s[Mrnvgnt;ΨQjդq=0]!xo~[x=}w x%C87n{< 8E ?AO&Q 6IoBIBG>{>t]?@N?'~S'ճ>u]InN'n|Epߖ< xϻJK#]I!xo|1[W5;|+y7>WA1w/h\֟}:dR_cTHO:HʏGzO_Gy](=OSc1?l\~Ͽż bۡP|ؑ~!AR! Xxx X XЁFqoA!(hݠw@` |)ȀڠWـƒ'x,X 2H4Hg)Q']PncBJV2ah'F@vXB+3KaX9f؅Jdm9S8t8_b(_U}ȆąІn(~[ri`UL26$BbsI䈟Rkdh*p `,Q8wPuUBʼn'w{#2FMxd8x 1f#tPc臡B2ZȆHO;JJ[Y%ɌX* XZJz*SʠniB5.@@: P `\*$yڦ`mɬ!p>I"<٢ij1JQZ5ʨBjJ"zZ&Kʍ*#1ʩ B[jү>KKY"ZO["[zaº ^ *=ʪq袣ɰvҕ9xVfVgG@T*J>K_ɪ:2 #koCk?$k{;iʶǹojs EȷUx <+G $MD{_FKk>lc$:yz ۋ4̪9J"6j[`uY*(k>?EHRGk; 5[J:8Xϻ=<L^1t&D+,-<2\1|04;6<=˼˾9hG~qȜʼ|!,<`\ b AM܂ͼ011q !!C3qݜq! LSAb Ya [`һ*~x 02=4]6}8+́D!?wAMq!?]9q@>*QKNrȡP \z} Cv!!݄A I 8`ٖٚm" ( `v&kiEUGhŗQ4l5jEX)$a3(%st}!000P 08&n#`ƟIVeQ[⚞sz_k:E߄>* eĢYeZ]:>Hdun;:`ۋ^-E.P-`<]<ڡڸnxENT=ކj5'Kt0 ]JYU>B -.?V>O>x޵{f;I\c\8RV*\c^g>ft9r͇y~vZR<5΃@o^^*V%dUd f[Ʀ6v}R.[\{&.l.).dCf3u"tޢxN{3K4nR^P7RCR/@."r~q.~%oQ>nݶ v-w#@T5#4LʉoBNk_48ϼ/DN]K>o!#oi),O=NSeP6\pNd=7.Nn`Jk.mN_c7^c1)짞|#x;|NNiONhNe1_ 6e3dX~L2?:35d^?u /_㞯]^_3r4HhߛiUNVj2n~00 Xx0@ѐЈ @YiyI)P *:*ARbt"4s i;[+[{K:L\l|L+K m[l=*y)l~LN /_No?zQI8iW} :|1b"rtm'Vmb&-*椨ffj # Эk 쮾K#lNklZl^˭n)p6F+Iv nz{?'2p/ '̰ NLq_ؼ*g'T٦~|HSr,r0,s4ls8\BS&4s$?G4CI/tL#-q~RI#[P2\O}b?=vd-+ rMv5z[{ݵWK5 Tx?yONy_yoy^qXٍEK৯>qꬿ{N{.SX %_<@;+\[S?{=Ob>c}Շ?>__>??{ǿy*L'ؼ&`%X]-BhaI(@n,l d|Cop<4 { qD$$*qLT! (FQt3,jq\Y.*thàхkL۸E8QPUbل<x\/v)OvFyD /L*o;d"9INVR>IILl%MQVr,CHC$.o yKXZ򘅬;8pэԬ5ljs1 >E9!u\SJIAJ<㣾4;rf >{.眵? )r>f9T< R:I鐠bP҄@ ``iG-ܬMoӜt~!L)Sqf71̈́< ijD҇QEx6àU"}ZԞLAIs WAQZ=##iT5 -Zю>!34,O*vc`UdXUC}W:Hy՞eCjNF HTRϔ."v!ccFY/WTBb]yϥg-) Ao5H"EEubcjwmcӲE -nyNE:E j5FIڸJmÜFḩ.~y\vup]Fh6? ؋ *BV}'{;]Zct4,: 1QgXȒ-V W pqLz&;4yln3<K6e; ;j,tH]ng+45ns!:y ƴ3s;\n>4qq{ᆔ8f, Xzְ^ZMxع=/: }訶Ws\hOXm5d>zbiգba>Xԭ49T Wpux9jZ{am9S]'Z|X},=+Zq^k_WstmTSVh\Q.'~fbt]7CD`3Hm\hGЀ\ߪʵ;vR dz-nd;= WgL'+ypQul?xWzqdM6Q{Yk~7&+~!kKDաWz[Qn*H]ⳍVL_z6Cn̓zF9jj!+o3k~,|߫kcx=ywk;|ַrN{;zIqϽ~ŝjjn}o· H HLwfF}f}ppa%]7_ZaW`]6rg~mw&'8{Dc7 %uR+ &lb|Mo@Q(SHUhWY[ȅ]_a(cHehgikȆRoq(sHuhwytL(yc$% |'@+K؈+xȉȊ花8xq XXHŘ8hH(Xˈyz  jK(FۨȎY((81DsfXpb ɐ  )Ii i P4ӑ]y#&(ɐ*+&ɒ'I)1I3)qCL:2K#y1SC1y >ÔNL8U~;YɄ,PT_;QoQ96(i2ylypjْwIq{iin =9G^K4*7YYC'c38:q FvjEmBAMozEzjf%!Nhʨv J؇"꩟ Ohʇ:ZEcO-Yzp}dʫ@E&/'mb*@*B**h׊gb*T(PRmɅW$Y:&`Yrq`  8Ɗ!. @;)$'wUHVjyzQG@$F [$j, Ix%lj0ֲ܊&J%ڧS8`TvRwV(`+k{бQSr7!j&.ߚaEZدR! p8p k۶lN+s d^;ysaBKN!/K:i+t:::Y SP[A%Ha+8swہ>kB_qa'p2ƮbB{*[!Y% pִỐX p 0˽uJ1I2  XOV 9ՋbY ˩.LK0Xz%qQ(zw蠽FdH+ K0200.P!7 [hiogVl}bG?RyxG';&*-*P.GB16li7~d%( vi~W$s\$@Q< V%fq00Aa<@P:Ŵl״Ev_WZVRvPl\RNSծ M } PЬȾ nSŲе ī˺?ݰj2iA_7 :=>z#]%NOiKk$ &#(*ƞ5ǞGbo̞<ݏ]K\a}3^Gn^;qۯnm~7\\"Ѓ#Wж(xe/     ә0A.-BC@ :7탒AH(] #JHŋ3jȱǏ CIrZcɖ-sMZEkԲI͛8sR(qSOśgOQjgO߰CSU-ޝWԩLJ*׬MF6_V'5`Y40ɔG)H ҶÈs!PLy'Ӽz{[-͵娙QG~ŶfL+ :؜@MɌݗe; ɉ2muċ!6DXk->Σט\캤aCyYfQ5Ez&Kv mgC%E(Vhf Wp1)($a?͖ZjM:yvTZ<c3RUUb6`tJ(֐WY$-%('p9I 1Ȑ% 3 .ԠNdYX g+l*So)k(ЛEIku, f[h:4e8B KP×GB v&p:7?h,.T􏬎#J4>߭ު ,^UvM8sN:%A=I_ ۍu e.F-BP&˘ηk/F>},b/6jhQ՝9f{dn&Ib,6}`-B2OJRPWfe_9<<{mjxܧgu7=g(k]}-,"nNsD2^BBl)sB7m3xƺ޵֪ ,Px/ ¼XeRMb^"P806De?ج7C9-ϹqW]ڭc`486G/=t>AEά'F|A'L½J E/ȅEe[}"!| e X"Q=ϑ/t+:JXҒ %0)| $&`ĝtSf4o}`V85Nka#`bn (Fs<D8J$\P("-f_bE2~ыZ#QF1fLH9u>l# qwL4&"p"QT@Vҍ~d&198jp ?IJNғL%*W)Krl 9ZSd"%N2dL\Le|49MgRf4 nś '8MrV<:tUh |L#e:IPtt}'BPh=C%Ђ2ԢM(F7PZRz)|:b"Dgщ*OLg*Ӛ6)NwӞx@P էHRԥ:eH2ΤtUPթ2O kS*ֲէPIZVg5\J׹4}&Rb_(eHP-@12pld! J,f7{ZlhAYҊM-jW{֚k{X`)Blaw;XC.lY;W=r:7ͅscϼk-m(Ql uKMz^ U|Kͯ~LN;'LNͰ7{ 1G0<3w_ HW0gbH8αw𱐇L"ŷ5^?ⵄxAkX)-K;`gN1!ԼfBiN<6ùosa|c3ߙ3׼g;יn m3,Ftmhq7OtbOZԑG}jSSbš5_ZgӣW}jMz_d&uAe)7_M(SPr-%ۑsLn4N+2wӍ8[.]{24;RZ/i<?xapS 51ט'nidU~䖷.gkw8yQKЇNБ;PmK]XϺַSNUVf"ٯvago/QG Wԯt|I"x >ć?o1dw(=2lL[Sj(li{&)mv\}=c?w>m_xm{Ǘv/}'{(ʘ5ƜW;#)oW/;wEBfѷ|G%fz'|cgeW/w7ׁGy8wz~ϗ xm1}$Vb~0$Xwx`~&GzFh^M^O8=QHx?(yDÅv "5!PQ:KBUx{Ӏ@ "CDCB*1CBT7f+O370J2.|10D7D47Ct +0UㅆX(8m'c+d#gȃ<#:wTUx(Ç~b Br?"B!{x@N(QD(xCX" F1Is-hH5BHCh3i9nh'@1H&)5; Xxp as6 !'fH/Kw`X$tRC39.B!SC( 3Ò ۸>Zc*Ա HTَ\*s(~*7i+{CSI hx,:y4pߨoFy0͈*C`ꘖcȓY{)Cr'Iwg"# yv9ux5+)x7)%9ɚsQ5]B~ؖp(ȓ4d>ɕ  BXtIyǙ#V()'͹S9${Êb] I@(k阕513vCϨDܨyXٝ閄Yj+ɛ,Z9v,iKӢ9/1jY N}zB;j\i)Nڍz/:Y yDʞ@Y[ WVrdj6Blٟ T:?^9YZᒠ*թَ?:2Сa:hʉi~yyZJdv*3JF9SY2:Py@ڣ꣸Jڅ5ڪzz | Iک79yIƘu cxfZlʈhzؠ?Z;i$Jn꟔8j JSYzj9ɥY1Bʭ YҗHM-J 9 ɯczKm:rIybú9Y+e'Q5{Rjuj<9!4*jE eəH*zxRQ*,{8*OY Nڝ=T_y[[]qjzٷpJ'j9ˋZ ʮL #TET K%+)ijy,*+4{)[o[PR+.W ˴<˻2 RۧZڵ.:xg[;=ۯID?*N2fZۺ;ۮ⛶rJZuy;ʟj:c[ ̨{#Kz| y 1{)ٙkk 7 9< I+)j㱴6ܴ >7lyCLB^+4顽(e5_ԉcu Y<ɿlsŰ SK <\ȲiH+ڹ j-%ʹm©LŀE"@@ T 03{.MܼAl˴ [L"N\sJ5̳\˷,fIjBDd~dfh| `szM:ʾLy}P̬R D L،WݑBO!Qm?{ZK}1I,,e}ioM}ilă)xl MoǪ[~Ћֽ$M.i5?,,ڧ\ǨqqzM*1]©kب\^4k,A<0U-C5ν@ hl8nΡcޑVn(vL|-]oKc] t}oq0[Mt=,j{}=;onН[} ت-⑎⵽'>ߪ؆M~=`:6~@& KNќINEJ$KKƾI˞Ǯ~JK^~>.֞ގ>.N$[K=J𾆷KdDLuQ>%Oo힄$Ć`<#HaR,VSuv%4?6_8seT|T>9:/D?F_H!<>DC:0]UXXҵ5]\bdeh?fijlrt\JW86_ x_sds_uƶ?_o]?tp?_ȟʿs/u!XP˴?_ PlǶ"At?@@H(X X8(Yhi)0(9JZjz +;K[k{K*\l<+p̜Ix8mymX=xM}MYM]ތ z K `{O_?KX2؊ B` S35}Ah+Yi#mR6#C>:.E*ǡ 1&NxNɓgx:hϥAObOu3(T\(,'`ǚ%6!Z ]}kmέ>wuTPIu i޼4<\)-+N\ɔ/\83#IozkоZ}t`+5l?۾*{UC HUѳiM=ң29θ{y~j%Ȯ&E雦ɕ_G]ECUV}Gb&x:`.܋2Oؘhʈ(dB4{cJ.d 9IeVX#H^e^~ypIffI@,Sfnڒe>t2@vމgzg~ tJhZ砈.ʨ6 iJJiy>ʖf~ZJ+j+vzj\_0! oe @ `@PBT @N"u,jqb!f'IY #EFYl F<1Ec60!8<яyxqB%:ĠL P2@X#>`#: +ey:rq-}]rQ%)@ڱNDf2E2@5D%pE_CĐf8ǹL@3L&8G^:s`Q%0 :L_FJhvjO5! 5H2G@ `. d9l(OwzǞfj:'Z걠=zSq*jTwJ/`IU VDjSǧ޲TjZՙUh%;z9vԣ Pl&q$0L, @:T)U=F4]/JW,D#\'CM+Ȃ$SN𪷌Um>TSV H\+ J޹-2kLVU675!`,7ݯ/} +~1l(RZ$(MJ Oc-@[lT< }QXK歒bt hL4 ߥ 0SpŀjF1;Vf1\+I vW]{w28p*_h/ (LA̔th,29ˡ,^rAIL<9M-U)9YnDi')$´Y- 49ӂ4!_P (AATwvdwmʚw=&o eLZӝ.[Au>mugz\ejsn֟C,h{ZgN"!Uq-ezWZ2»n4(O>xtN׃m ^r.&=O1]mB6<{0Q紧~x V{Qkj/7(Ys6AFjj]_g!xD%}E}uwoWug(H~x88Cf(x'KYTpV%TXuUVnip5WVqVVl+AHqW8hԈtrzƀ.'GWshs4NJ? HYqЗ&6^EKgyGvAh+HA؃u2ht{}2P*@D'feTȗT#^W>f^/^^,Wvxz挥wȀtX!(2P E<`~+8Xi)C_ )yDG2 YfRIp 93y byhtrBxreh;\g"h0h#0uنHkXZ^PS<蕀B P'Ki))M89 Lɐ~}4~)d ?YmfdP?͸&L;|g%_pz ZJhvْ2@Tx聂W8qbm"xi&TFf(tڵu4%HDxwfQtřևR}+r+[]_qgX҆qsvT6VggUS$dxyZꨖńZWgyX*oXXq'i( ZI鑔6(;ǝ s'טȁȞG5g喃-*UU9^X؟ yhA7FtDٙ Ho' I`'}'Q9UyztkJ) DyaOgsS2Iz9駛6eڣbIWizFJ:) <)o8<ħ=GAvBji}nJ(׉֩}ʉZ.~z|I~~*ɏZ7ؘچ{(J|rGĊ,|`ȬM) ت*{HȚT 5z(^J*FɕUژʮCLgIXv (ZZ}'p 'Y\`×갅¥yTo(ajfgɇȹqH Z;*qW{U5/dairz "h%ʊJY:-/^ X03;gZP,Gni74 6˒ب譼Z}{\:HM;v[+FIs綛+)vݘ{xG2{`Ҽz(WvZK 5y6ۧ=p Ljי{e _K"{{v(Jz{fiIOJ&Ypݙ|hiVl鴟]S [% veرȗ]\d&׆jևpS M{kswWl|rl&pRBšw2hx*|!+AZzʃhYg\iK {'[pܿ)Y*QLW;ºG^*8DJt^Kaȏl 8}k@ zH5sr[wsvxYL5\e ȃ7Pa~˻P;Ls'g'[u(ľjVZR,ɸۦY\ƎV$wt١v'wF$ښ9^U n Ÿho&g2&$e]= *CGfiEәwmhܷ=&=D|K'~䱣iDo=[I ,ú{XޖQM }bwՍ<*~ڔµ.X$ToqKuL' *k?шˈ^'ٳ(@ר[ +ڬmL~fs*LH~ԯ]-'l|CZ߾&'X$y ) Lśݬ;^ ~h `l帧s޳wҹM  (1(`Z8NVk>uސi|:Awּ=J o)+Mދ-^ws[P}%DKMo@BDvdtѫ~ԥˢ.\E-~b~,k«ȣF-zP> Lvߧi'߯['W^ fQ` qg{1[TZ ?4I-J*+,-.?BH ǃҔׯݥ   ɛΥ2jhDH0+T(OK5$GEYzi҈kToe y>f򚸖0K9n&M6o|yCv5(@[9)7 $0@tjʵ8H-C̫K9φSmŴnD]w {L=Ny9 #1aaǐ#Sv- k3gۆ.wϻ m`/~QMmZl0_"8&?.q".N} &<)oo>7]Pw{>`qԓ(S/>֝s}t6[HFӝ(x \x-1'bxXwvjFgLldQ̌4BHJċ= yD܈ZHO&U؄ǡbw*&^4Q MR^]ᥞk|%RD/UJRJ^o݅ f䣓首baW\reJgRfKʝ:)ƙj{6%e " \:*hX"n-WQKk)xyrꥫb9*O~)h>$dPrN֢Ҿτk[]B 7pt>2X#*=!EG1 K1+2ʣK$+s.׮J's+1kΦl1R f@Gmp`S~JbZYrjʶ,jv(&Ob?IW6s6$ pAK` 68&Q `Yן-$jKj֝ZZVcb݁e{wh(7h7ws#'5ӭPAL)(RR>*(z`9KKQE8m]۽]ki{jb:Dvݽ04^B/{);+)yUҜQE9B zn85NyU(mc( dėx60\x8X' i?6"H"H OMbżuYH ^ /C3Ľ::cdԸB)-XI#+ ы"I$;E<ȍ DƂ+;~8(o$TB`q  :%[dE+7&1d[ILQe.WBR7.yVj"07B&A[C[9kt |:uHKʼI6yKRzB p VYR;E5%mt[̉>J!!U Zl 'tMt;5x 9LU)CP(8B8ZV*/o6;(9A $+ -sdSH3XSacV?. Q@J8"XӺS]X3FjTZKa GjzLì 6ͨYnzX !>U;}|U]#3:Y(Q15rբ-0T6P`@,n!*L} t;h: ?ȣBǭ!}@t0]pPR\p &`Cop_;*D*Jjap ,׸osSX6W-D @ nRhǽαQ 0Әo`׿\~Z|*f&;ǟ.Lf`Uk](_XAjpo9C4E?^rQs6 [qtofN*Ginet(`2xMAY@9k^w(Fbo`[]qh{\0+\vfiPiv׻%iMKj::pgn(jRU+ԥ~sƳbL?4][s~;·s<͕SP7:Б.SGԵnusj9]~;WcOpon;>w{y9|w{.uOu;GYf}WIZ}-B3zO}Qz՗Y/ oz_ wɖO}'}{>@?~|yOe#fӅ;׀{{' 8 W|$6b}`v}*؂~'X,8hǁ׃>i#Vb_$f5zTV8W(ZXX؅[\^dgxqe8`nb8mHphrٓ@9?)AɓDyFCENٔPO)QɔTyVSU^ٕ`dIrhYXmɖ\rtu vxs})(u2٘9Yy)I9Yyy];#39Yyٛ) șʹٜٜù+cәڹٝYYy虞깞 ٞ9Yٞy$*:z3r ˙{Q"7Z`ڡ":$0Ǡ(H %*6zJG#0$ʣ90@qEʡ'J7-"9W cǥ HJ`:e:C%g:bڣ1D:͠u 1>J wJw{GJ qjj*j G@*L:*4/@3ʩIP:vӥ0`ڪ_ꪲzijUZ:ljJ:oڨDB,|ZԪsڨӪΠ JЭ:*32 ڮZ:.y<@z̚Zڬj + k {ڮZ ݺJ'k;&&ʲI> čw)yºxFĦ?i`xY<\U#{+)ƍs ~M\j4#گLuKFJ\2^Lșrtl=x.ɤ,Iɨ)Õ\S}K\L[} ʗ쯘ʎrˉIHl]L|ʘ,ʘ[ȐxܯO\̯ܴ, OL|blDνLнÊʃ\ή MlO,T uLaF<-Ɉ 0=Ê,4]Q8 ͛3N,>ѻ)@m&ؤK]lI<ͩ)7m7y\{|ΦiZc yj]s}luy{n,*}+m} ‰ԋ=ЍmؑB  ٦٠]ڛ)ڦڕڬMڡǙ\qo˄J ]Mj;ۢagև F p_Pf![!b֫)Cݷ-tfeX\=f]Nq9&neNCgnwTMeg~)C&j ޯpk"a(~tk"9.h^}> >QhN6YLQ_@bʽe=gk }=D$VgIPd %CᎃYUQ7>o}Q%ăERD ҡ@SH1wvz&କk` F-RMo-qv< 5tNCbcOT =bQ956Ӷt . X(QNXMU^g^xu=Тhې*5^m1NB<-X:d|YXY߸Tv {^@3B-ACĮ&``>Ͻe>e%xÝ3 @E$b. n'k/R2 Ok`S+]fo^$ \N+>cnTx7o^5pg)vN۔iVnVC/nQe6^GOT//nO.lgeEp6P3W2 FnM5hqP,A䃴CN.N^X0 K_ "G& vojOJ-z軮doݴND0t/-jI/YW{ +2sS~&Aoi/CRY.Xw3P1e]}Ӯlu:BN탅.5.O%0 ( 08()9))iI @)9 *:xHzh *[Jk;+ <+L|ή<=) ~][ hZl"jjK3mWCr7ѣHd Gz2dB$Ngq] 9MCԴ3ϡt (1WF"="p8k%iRW*ӹUhաZJ Wrl(ƂjWԪ4eV.ܼ|mN\҃"*Ujʲܰz;#KT_Ž2/ҬXtԳTw43\ :gZ6UbA}.ނ/#]ٍݨ `TIG] mw!vWb]՜sB谓\tFj-j˿'!f2n,o&r!0G 8XF{G0ot[dPAb̤ ˶wwk=ju$Ҹ-oe)Md9GiI'197W] 5ȳJg%]MTIXi:O/CK [95XÊ(Ў=>G>+T_٢u~#'l*;?N]-_n,MET ̂\㿌 sGA)0~1"Wbd{gƲBbvo-`ְpo1)l8p ̭0Nz %*m|Pf49bU`e< -z3d,ٜtTW~泻FI;EVF+Lnj#.ߍ-qCoPaĭWb2^+bV1 jl:ƅ+nD3N8SnC]Y76N . p^$ls+[\%Sj7b[lLH-Q/_,8; ;~ ^,T*k86{Io|+oJ{G)6b[ܬ`6d,m.p'd_3o՝+x`n*$9X\gxi?M՘_#2/$){aKB[Ju2Em;uev6^U Ly*f6 r\Y^YE{4VҫẙyLIe='ټJn"[NuЋ~"0BV!_./k#<]/>慭,k@eBdվwَ i@h? p@ 7ߘ~Нs}gs;oGmY#%_mj}hEe|F%ΧgWrrsp} ~ @~E5g#gxeZF t`'+&Y adZp<%uf:wufׅ sZ0Wx}U؁asG\Z'e`Xd0y}gowz]c[JXvvO w}}jcf-{{UXkjWg|%XF07g2%4(wV_ZȧJTi#Hz(z}_4jj$>ܘjXw57k$M^&g6K)gu2]1n|woAv"jz~&HgujftM~{EFsD#?TLV&x2="6Hx7['Հ#cFs5u'm y'(b%P'>N:w%v<1xP1DpTX#ũyǨϧ6=ȅH5ӐyyEuhs%t^h~ jOzYϣ Ơ :yV5fhY*|iOĆU:X iwy{ؠ&YӪr*hi*6:HŴ:X.H8 P!Dz_9'٤U 6h3HyN{<-k1c`}&pVZ0gLx|U:PZ)ڥzyz(1uu) ڨZ0*D|jgk5ֵ+šV뷡Jf7@byjQw ٚƯskj.Ǐx]/j'y)F[yK K Pmz[DIh?{:hW"JٮtUwP)!KlxZf ک+:{q+{ʰ#{*V!jǹOdܾK+˦ OD(۝Xsڲ;1Ptd\`٤#KC6H"4J*v !K}[ >{v{^''0,|m|ƕ:<(",ȃL/<0Ȍp}{,ɓLɰp əɛɝɟ ʡ,ʣLʥlʧʟ ʯʮ,vPP˼p}@L\ÜǬ ,L<\ќ׬ ,L<\|\ <M\1  -M]U4eˉk ҹ<P134 6-579?ACD F-EGIOQԝQUSZ \-[ ]_-eMgi=j mo q-s נ` ,a[ #=`-غ|}kfh؎؏ؓ-ٕePٝ݉ ١Mٗ-ږ]ڤ=ڧکnMׯ ۱-m׍¶~  =ȭ.0 mՍϭԽ m߭}Sx-}^ڳ  nm`|M7'.%(n*,}.0+^3~59.:'6>N=n4~I' 0=UN&B;NAa^LgNPf`>o.q^n.j y, cn, .镮闾顎.ꥮꧾ걎.뵮뷾~{P;0.S=.Nn.Nn>l/Oo G /Ooc!/#O%o'+-/1_B5o79;=?A/COEoGIKMOQ/SOUO;PK BPK,AOEBPS/img/dml_function.gif,GIF87a#̯̙޴fff___{3ffXXXoooff3sZR ,@@pH,Ȥrl:ШtJZجvzxL.znP#=Gz~!} jBmDbaCžfh'0 ##y6A*4ȰÄ !>\81"E/jȱnjA~<@+370cʜI 8B 8thQBMz)ӧK*TjUPZz+ׯ[jUlY`њM{-۷kR Pwo֒V߿ LÈ+^|%ǐ#KL˘;ΌN8w@25ӤQNzҰUn=۬yk[1q'_ī;k vōz!L:߉0>2$Iϫ7Ͼ_??>}'R%ـa@=?[rA \FH^Va,]w-H(4h8<@)Di JWr8MT2̳O=sO33D)&:ytixycøz*蠄j衈g~6裐F*餈dY2wepj0SjI騤j꩚ꪬꫫ2J¬j뭸뮼+k&6l59F PՎצmۆ=H=`Ad2)gkHu X/Q 7H'p _1 ״r n"ܭ[2.@d8dF@JmEq PG-C#m5JDŽ\w`YGg al?=6I ,2w㈲||.vDpnmG.cg=w>y[-{n{6ܣ8O;o;sL6œď:٭z7|_4M?o7^*Mvs[.sYٷフ#^L 4篿пvOz!G~C Xs6oo&/v;eyK&[Y@&#__Ax̃ә|?8R10^7Y# sHA0bXgA \ܛC`x-6KpzS|X3C]jf35鑎Hԣzh&w< Y3'FQHJ %7Ia{(G OO=*T-5r`l88ڲsU>9򗦔`(Ib&j_ØX00 t, 1I<٪0 J`*nC;P pvO{YEV M4T=TTZͨaю3sԤ(IITyxiKeҔΔ5KqS(E'u=R0HPV tB`UPwU^Z*X֩rիkjt0 3Wp@Mb:@`'ۗ/Xͬf7z -(KҚ%D JRTVOy*dpN -,פ0q\׹Es]ץnvn׻ݝ.wꂗny+7}I t @@Qڏ&A dP?bl&CXD ~vL{lXN "C|+qMsoP-n{ۏ!smw bT qZKd"9RDMS[P4p.vE X#C~DvgBx)>_F;JnT'J'$>G;FGpFo{ HcttyD G&O7'o; FHhGzgxCvt`.&Uoeh>n9G G\ȅ7cH(`+X4CgH78jHlh9"PIHA!8vK~rwv7aȊW5_X8*(tNu#uτҨ%suMljD0PN NOx蘎긎؎8OP8,%P(et#?s Y6 9i8+xdr"96r$)7"%R{`-.)24 68979Y- o +r2qDf0\%a nAg`V QN %q W)STI ]i^ eG))&1 `b%yIٗ阉 Pm}9'rpI2y*9yiU6X՚9Yy)Y8I (p 0%R>͙R}0iSYIy֩܉I๝)鉞9i 9) ? ZZr[nfE[f ʙ p\ F?dDCG{7@Pp$&Z_%ʢ+z)/(5 6-DڣABzE:FjHPj?1ř9E  [@`5` AV$aq${@?+A;6KHk;;J۳EKL Hn'@RUQ`;QUb aj[tڶxwy:pKo{r[mDōSf Kzʸ긯:Kڸ+۹k{˹kJWۻk(Zf)ox2r![{Bn`'.肑t18FݻCًiufĽ³qHvpԾ"J ceK[Z<\  )qun} ۦ *|QV ln_̠¨,"0< '4|<3MMO35>Cx*!zzrY(/SL=|&sOwݗ0@w7$@8Bס0(=2W@.tL8ʆbB`}ƺGcCP#nL71O\}zr|v`C(xDæWHgixy'yC%˭Z-CGn{63R\y|JŜΌ(,L|8<ۘ\lM,=gJí܁G4ӥ2]שUՄφJCЉ̋6am]:h,ȗș̓M͟(מ\vDxڡ״FA֘ht-!z(0m'm{M 2ˏ(~}ܰK=~b7v "u8ȝ~᫽a>mʿ ̌/ML;Oԫ ܡ̿޼IJGba/3#ߥ(Ⱦ# NDkT]˷`ߍ#\t+:mp,}CݽompLXlw⋬D=߾P -J IK.MOzQ.}]<;NLBl$fl~샶A>_Z^$\#]`^Lge-GHs.~Eag-BAlam,DB/3.E䜎ߎŐl~F~꒝PLD=+RXs_L+ %#n둃5b 8,ؚL!0tb]Og4^4즇 .H^tp4,׎0>1/>^$G#!/!Cr$0*>@-AyXN/6RfQ?VeUljQ^Lq;[ @S%2,P65D`Srwn}oI_ i+mԹ ^! X)Y jDЕhoT{{ČN T/h2bUaOOo/Uu ƙf/T9ڟߑ?wAPpяߖ?G%e@ET.NU@=4Z.D ؜Fs۞{OP/p0qn "@k)ʉ詓)tJj#$lVc$Ww8Xxx6 Yٖ:y9zZ:Yٻ;{{\<\=] "a`4 !D*Tƒ " Ɉ&!>dV'8`^%0"<0veJ+weL3a|ySfM8mgОCyThQH& OIE$N|XD"B^HEZ1ntb  H<߾8p/S,+$c$G;Y/dʗ-93ʛ==:gќM.jٱiö7KU-Ap ɂmBkŽG9 pB}  WOl>?ݿ?@  A)03t 'EB =$BS8* PFQ̪1U9`>: VkK,&냯=sT,G(?"L.rL/ 4,5lN6|sN7팓<O"3p· `D]Ԉ< (@&LB2JSRɻJ-9MYc\kݕ^qW_ua=d]feYgE@`l0D\T2` 0jbz5*_~w߀߂=X`F`nx!Xb3xb  .ܔUb3 0ufi}瞁Zy>:hV褝^馡Zꪙ:jꬽ[`` ە[ޛ ?_<,P-5ߜοeEM?u+@O]e?nmub}?䕷h؋ꭿߞzVbGW_׿F L@`)f"ynKюxXAn| \+p(,! /hp*l! 5px=c k9Aq#T"qWI4Kq)VWԢ.b[E11UU|B"b !*1ej]Ȣ.O]P 21$dy7$#J&1IOv l&IQD%$9R6o F:&G9͑#]bn\>Š?Bv@"!~OP3! D2QMojgP4$':9Nsӝ';vX7tDiƑ@&6饆. ' zF3'~ԣ!ݨH;:R =G Pe22G ^TUX4ST^LMu2jD-e5ђSTFYjUUv\TdFl,3^ER7+81ծy^׻U},`Xְ-,DF \63l\l6KfhA;ZӖU-iW{,mk& rny[n%@\>wsup[]^vf[ ^x[^Uz{V^6FIx[_~ Hr3\B 6 @_ I! z<8PT֒/lJi=pI\b%/X Gdr.2 VՎWe`i]kX (lk_a^ђ! .H G(Sy,`ism/nhלc]kx>ݽoGw+o2xR@9q!I^r)WYr1enqqy[ A>0 @Ҵs?Q@`VX7#x/.vgG;՞]pAwPJx>ޡSkVTHu)n{׾ ]񍗻Y:_X{|w~% Z[Eþȟl_g?CCν~GϠHGAJz~w1#sҸ wp3ĀPI=V#cĢB I>* le( AEت1'"*3 Yϊ+K k2)o0)9p#,͂Ob1+ے>.&mr.+./y(R/03.2 3"0R/).!20/q/2;S 3Ks244[s$S3)0]6=R0p2i4k7!UskOl8&{s3W(I1-L0SPE49>TQ:3?r=*3o+38͐ 3==u?A>/?u'" c:M89/BMq:+TtsA<<И-vwx(xswшkim7!QO\-y1[]vc]]ٔm9qYaY5ԗXYX瘘՘uRPQؙSG7x,6 Ixxy)؁;o,UTZxyw9y4ՙVvES; s#Vu%yY%9Ug ڛ2q{A%[!:xY)٤%_9KozJOzښ4N/hYHczϫlz脎_~C^UMܺZڮZگ[{ڭ1-N\ S, Բ/3[7;۳?C[GK۲OS#R&\{5ߚf0մw9)!0p<;;u[Uۺ5ƭ%zZ<"_.[7e廾[ٛ׻N`qz|]һ'+/W5{YgZ/.#[;[|ae\imܸq;y|cu\ȃ]OÓXSDh0Qg&˳\˷={ÕI )k \~a~]*i)d㗳R}0  .髉뚞>~륉"`gƧhddS=}_~9nO;PK,,PK,AOEBPS/img/agg_sum.gifoGIF89a ::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!, @ H*\ȰÇ#JHŋ3jȱǏ C0(S\ɲ˗0cL͛8sɳ@3 JtfMH*]ʴiFEJ ӫXj*կ`ZJٳd[o]r,ڻxJ\È\mK#;fL8˘.f9l̠CֹiG^cӰnMműsͻ׺M!7<;"sȓ77Nz"w^rzuGӳF|R9٫S>Z[3OtuV! qhS)|:X!}qjp fч! W %vb,E-6 1vb)ވ#cѸc_3BxE~cdnD>iZRR#ِG6`cNff&c9Zlxflnid25Y|"ڕo2gIYM qڨ(- MJiZgtIi~٣REe*Xn:թ&kFJkgFj1y lP دƺ4k*? 4xaB 6tbD xcF9vdH&4yeJ+Ytf̂EִyH2yhPC[yiҏ;6ujTO*z(ө[vukUXmٱdun܈f׎Tm݋ZpSz0G7vxnbzC|s9t趛;YYtjիe6Z1kٳit ڻyC*3^wr˺ ^4-˩Ww;=(B[bwr=crm|zAW9|o9? ?cm=W"@ :pn 7gN0,0>;E;dQ]\k1QFuGD!_#Q2I6l"+<.C$U%F-4 &)4+s3̰,,K*) 24 J-296D\N/$M(N40Oȃns/{*.}?}'_zoowro>?@$XA .dC%NXE5nG!ETI)UdK1e @M9uSəA%:OI.e4#ТQNyUYn WQr%[Y^îer,Zq]oAxa\f,6cȑ.n\9haə5o~j3Q̜E&g+CfZԱv]_زQӾ7ܺ=]+?93^z]©_b_x۽g--}__5zK do˼P"@CP,Ш3B*p8CPD3AqkE Sđ?{ncq9<Ș7ѣlqRX^ivoQwx o$'tIJIyzV?b||pK0Kk|IA_v' Â?>P O)8]> '*Y\jI+) Y$-!JXC7iBCʧAPO,S̈[d*_9C:H3-MK,e}vY^:I &Uf)#XR:\&% nvӛ)iUH&Zv҈I& 8 #Ba=VeAxP "310(4h8<@)DiL6NF)|@IXf[#jRZ d(fhߙjfol)眃IxdQiw/yJ5HB*qʖ%X/]ZT%*i:ew%wnmZq$~zbb:,Ђ>Y,mц[! )zr[%*4.Q]K pG|Wlq_vg L⚌ʽˆ tLmڌ·1@ϩsDS9tHsLi3[%N24[(WC 'Jw׮]b6]jvvE7޷~jl{|ܭ3pl 3{;xkKg' Ⱦx߀)Ϯvk<>;RNdOov|{݄c jUb <(; zpZE/?d SBHB|(4 SB0 cHṵ8 sC@HO HI,PtHD<͉<U4>QV^"'^$MݾmSC c7sNuL#=5fr^fFUlȋxHqҒ@&O`@aO[)K:Phl{#Tn[{$-%4QҐ|&2>s΋K)Dإ͎s69EȺ䜞YS g!8G|*SeH:x/qM(AІ>I( *QR(Fэ'HCO2)JWD0LgJӚ8ͩNwpPJԢHMRԦ:PTJUHVծz3*XJֲIfM댮`p\ֹd+^֟1+,5@ 2ǰ$1n̲;9a~8[Pyx0!O}mZ[K=vJMf3r[+V+6] dqKNAV>ս \R:.HR,-0Q] эWJ^D 8_-inw}4.p9K>NJcG9W>.?k3(e7k k8ֺ_lbqY)#_jp)LaB:$|yO*ݗ2W4PK]"'|.| /zґBVv27|)P}GJ~li9VrZM6SWף1'6k ìNjGLqBGlڴl֞dNWVV6U}ժָεw^v, W 6fh.+ m% fvn_Zm`X@vv$!`q$4 \wyEp=!mb y02$7#'8+Wh0cz7HP~7W81rAY]N(Wԍ1Hj #@Wyџr]HϺջ qgo_ܿ=aq bю'2/xO}/5#/;󚏼%/^,/n cXAЯ~۞Gx֣Nˇwƛ>'~gsem!nxVGx ǀrHsxHyz؁swUV&x(*,Gm (z"6kG#GǃgV_En憀n=؁ӆ' opW{DŽtu5/v' qt}"7trz&vG|uxx7}%g}WyHwgv{l{(u}ȁu}熝gtWzvq{8Wt7Ǡw~yd_dmQc燫VHs&h yhȈ~wGtHzw80xt00{׌\iG|J|yxWsOH||娏H8}~ ~; 𷏺׆>woޗYffVuF(Yl!I~z+m*Y%yg8n7ٓ$؂DYFyHJ9B@ n?ȍ;:(vXu-/1nPnn붕-ܦcvwopمӷwy( q ,I")`@Bq٘ڈll9oh=7 vُGpO'ɕrðw}鑫h#o(؅iȈv(L98RN7II9x؈ו_Ȍ 9 $n9h€נxiZ$n>Rm ~XP8)ٜؑZ1r6VY'ɢ1J螯I5J6=* ؔprDڢ8@LڤNPrU*PVzXZ\Х`b:dZfzhj:_npr:oڦtzx:Tfja|:ʥ~ZZZ{WzdX*کoYJPꪦj0~oꦼ*W* pJڧ : ȺzNJ٪ګzڥj*ڮڬ|z"<:z Kjگ zZ;ڬZuXZ,K!4 84 '= +KڲZ˨\wW ;K ۰F[e'+(AjIb 7e C˱V[H; ڱ*`yU:O Q+kgSchn++K93Kpo*+JV:{*2Kvڹx˳e]K ;Kf뵃z̗;^꺠k۸[b [ujKsD~ڡC+nۺ{ k۰K k[z[z[Zz k\k JU ,C)&|(*Bz.u0<4 s2\8Z:>ÅD\vFJ_bP^?Sd}%Ӓgͅ`H&=:=^tZR)KK@#93dM^gƽ":Kؽ@>6e1ڎRݩ=FO ٢NgnfNEqˊFd%d2Z|^Yd2`]D>: a4I3^4~A38 N3">0S&2((,N2Wd!5mFhi)H8fuPA<p g8D,M6mCK;TLJq#eM\9}HB<ڎ6eR^M>I]E$tf} ><`a^g[w&K;\3f@.K@D]=z>e4@d6p-߄~^d3?.L"6>ݱN]N\)\]8NCJKg-퀶sMpv?ؑjDDD..~11_ s_2OB 2.Т2 "?$_K^("6" 2Op6,ԐDE @ %p&0 : pp`X ` uoN=? :*V@_l?EЙttWeoP?i?U/P^/ '9^ X/O 3y +*KLipbE \p8xXroi] Bl/#u_žB@/)_g? @nO I Hx ?[Yo@0E) JUn]eV4u{\}&#'P id!0q12Rr3S N.c6Vvv3`Sjlv999wW9Zz: <\|_k޺6:D` i`_D)fN{WL8- PeJ+\ܖqMдI@- hP]:/ Ҏ,L`tB Dbq0PJ ذIz VزUЦ:n\ipL 60HAB+ <2vضUxbs)WZэV:jJ! BbyP ' ,yl䴳']۵eݻaSL"%N*D8ͳGHIP\_N~%:{$ lhCuR*!vr}&0m+om9#L@Nu7dj1| ϡ)tm"d:5M d(Cݗvn;Yd5!gAf,O bAChd]Ie>W9it/L˥ȬJdKѤ^hV[*r-#~3Z׽.m_9؜1MD8|LB V_{Nkcs)b4mľnKWF4?a arp2-RPq_9GYw%R)WYr< _ĿX(ys<2ݭDX J?/{Es/PmTΥ!8=a N[F4?m NH{ tnXY~!gXa>y3owϣ}&JJLw˿򛿼1']pISz%˝z|wR>՛1pHB-uM;O+Ο~%/yWB<Fگlw//>OR)dF َŸ$FE10/ow|/ˆﺰ+r h3po^h/EPO itNVqLo bMTv [. Kt0 lS  HP 0 0H0<P u g= BjHUZZ΄[XSh&ɐ툐̠m -P." OQ+h  0ޜ'M }nآުd⊃fjQ.GO`&j1֭qE' 8Md4+>4IqژqMˬ R݊?`dά fڦ 1w~N0jJW̒<"Q"gW N SBz " H `՞* D'G&(-j(2R)J֚*}}䇗*") zv~l*|^M$eɪ`FʲI22`h,,Qs/1R ؄剄 ls!K<)"@D4s0kiO}O BM.34m4m607iI0R%6Q$|s,P3* M:1! ;s$2 !Ɠ*t NB')/T(TC%*C;9i@4D4E4IThqZP]e>Ԗ ɱlb`*E>Ȣ:Fm_rG?!``/*a `Q΢_pIH9ófogsVgwg{ghVhfhiViiihVjjjk6jkkliVllmVmlmnVn6:noVooopWp 6pqWqepqr#rMr+r/s3Ws7s;s?tCWtGtKtOuSWuWuG7;PKu=&8&PK,AOEBPS/img/meas_folder.gifIGIF87aN~μμʼƼƴ´ľDBD$"Ddb윞dbD4jČ̌ˌĄĄ|\|Ԕ̔䜲,N~@@pH,Ȥrl:ШtJZجvz7@.zn|N~{BfhmjfenrilͬsdК񒙓l׏# W֯ʊ5jY*]˶۷p2j倻x˷߿ LÈ+^̸ǐ#K y]]Pj̹Ϡut9|3zJg||(9iNj饘4Kvj\Q~d `X=ߩc*~y tlj뮟&0F$,.${kJnA22bcc 9rU˵ZUAU2kpo9FFq/[6Ea,Q'LTt͸5A>yܲzn^1v_/(jko2`<@-DmH'L7 pʺlu/0 u:`M6easctxP<5U_-8.8~;2 T|A`d\`Pw2~rq5,˸>\PAABHp$ 4Գ5s'^Vw#Top>?aeO|w?)N2"?_Qpq.ς&<*X gHN6̡w 4 }"K>`*>x&:1$,|H(RX.)M%!"jBbH(G5J2 F;9>ykȐ)^ $6(B2C<"9D=$'IJZ˱ڕD8EfF:Rn VVZWpR8K,Յ+G#,wm ޔFQk"ЌK-e\9O삳:#ʛINfML:UBL@@.Iz]Sr)g՛I2І:DP >@=~kF=~27pXVͨLUђs8=FӞĖ> PoH͡9)*RQT* >95#Q5GTWi-VbUfEQW#ѵbRMsZ &I"\$Np6,WP:}'IqbPw+ 8N,Mog"`o ƮҤ}ebMzzEg4ۢfo-mY|jo,6FEȎ4m\ftK]E7muq{z cnSֶ Mn/|Kn|˯~ߞ}7erFp;{c$A,we*@ .5\*WHUN)S(C6. +d0 `Qϋ(Zo\ɑ 0dg9cl}(`$ ~C\ga…." IU>&lNqAM+4\8=[Q'Gt6uqHMհ΋bMZ7p͵q^zC\}(&7~h T'SJb:[. ~v)DǤ1Gt[}E;mJB6}m[|~ug}55ITLgmnQV7-i񐏼'2x1ne#S,iRzR~c. U ^W";2N_ƿ>ozQ(21h9`_OY}K퐧!#o UyԶ4,?[ 7V7|wΕRb2wt"NhxXM8w?Gt|؁}sGm$XaR6rY5&Ozڤ:(9"x'`J){B(;GJ;Xg,緄P= XVxXhIS\h%ׅ`Sdh!_XhglXk؆pctXoXxH Oq%Xq\'aL.gAWt`4()W~dU~grf&nh'Uia9:S:'VzavwJPyR8(}0999@@fB\ʰʤR| BLLJ0۳ $ HO xblт[ˑ[͌1520  -gllm77ToV}Zmo\`nb=VfMnhٶllnr=lt]׿vxkzנ~mt<{<„؊9J[-;~);Fsnd=M-+S`#HCGL[3;VؚgF-L[eyhG]UIreq=ܝ(nׁVڽkTK)Yxޓ7k޶LjrxN uGH>-w Z»:̿PY[> z>|="ˌk)BI)ZH{WGIìmOD,huþ] -,c-TT6 &尸I%%.S.~.Cоl,.0 &ZZQާޏ|jWvI.9 "7^55#,ASy䥗6!3{IugSF697IN4:oly^K_Y_y_f4Q_9]ޙs#՗J?4ery~ Vo0 ɘ`6OyИ|??e@w7pi2NS+Vee0a2:!F6 vf>kc CIyb.O9Q/>J9 jY1>_̑syt{5B̋ߛS@0 E @NUn]e y<&,%")h"`*00JIP 1 qP0j2liH4 tU4u##c#.`abV59Yl4xەCC# C$b!a8^Zz:^… Kt 0`bD+E瞓|9vHX F 6pcL+Zb;yb#GOJ|`t4YM8AzU3v+#:5FEζu%Moֵڹv 0`F5 /*H v #FQn+4}gbRǂ60 ʖ3W<=Q(҄oHlep6!C% ^gsBqvyK./de_\DLn<{N?Uuc! e^ H'?%zp =!R٥\vI5<ы H]$d#%$q%@_ /- ܂LQ(xtR$.,r,A2PCܱ%(!7-ՌʛkM-۬.N9CMNS9YO@'CC4O?4R+sR2TN5BE-h<5M1eUT3 V ]e]5nuW_IuT`e4EvMeYU/vmlݖnpr=g]v}x块zR|ݗ~ >w~%XF)5ޘ>Edz?.U^exemuޙ}蠅袍>餕^馕;PKMNIPK,AOEBPS/img/appexp_pie.gifBbGIF87a(? ˰ųܹIJzxrxvƪ۴ytY]KIPP).U:=+2 GG$H%"j;AsIOrXRlG@nq|ntҥӜӕ훥ҒӊdlQ603r-2Z`ʄ閜LW̒ѩ}8&, 﫵zzδXg`zoz4((thaec`praTR|Zl &0||,J_+ &IVo׻2GR6U__ 1G'D׫OsHpBlS;KwBT!a'gCcMZ`JJ^ٰbZTlvs71|&<@VGA;\e^wrzƮ!wlqsPbpwpzywRXO D:dqh~`tx4(XUBtjp.:Cy%5<0crW\$8;X[3'Rl(7y{(EWL=QEG'(((ZL5+;N&7)7f`HD%'0e^mv-/  $5,);GYHGUlv` ,(?H*\ȰÇ#JHŋ3jȱǏ 3I%S\ɲ˗$QT)3@͗7YLsϟ1>#`wQ?FB@6x!8L6w;aT @4` `yȨG:! .@9q!(h!yHL 'z*t\CCP@:!/O3ꑎf4A`;QiIDh<d0 pXF_`z0#J f| s |xxcȜ#a0Pq h"`EK\} r,(Q7!xcIPq ϔ0 l4B1apG8,^xcG1ڡ +(Ȇ|0tbWR+iҖeV x(Dl =(`ˀ j| %x=q XPkC `dz\rXcTچ<\r@[@BfzpӨQ{hl==B=:ٯܠh= 'XBz=@lu-`Ȱ522e|o_(-6h!P#P cQ:fU*mz;|% $#5S(Ćya(Fюz{1H*!-z2‚11b=I*w6 1#!0<ڑ$laJ1Fk).2 cc3p? r ܰG/$MULcZF=$d#PlIֱV, 7KsI 7V"6E{@`XLDX6g-:u<(66G>q/8X{GMj8=&I5Bd$ ̰ W #5Tz I;d uƆ?qeqHH@X[c=T[hF;_GRl04P3svxwѩhسpLjX4iP01%cl&0`chS%aPB@(`PK*pJX<44&÷ٮ=W'OV0\ĩRf`6F=k IŸeqxHO} x`ck>R.Q<]l<3v_X?A6{  Feq425F 4ҡPcl\>BF f KݙvP K#nFą6 yld c2 {S̥Еkz~͵q0^ԁ,Tp^#2 T1D! Hj <ְT80#S j&22!p4 6 p`0  #G PO R`"\SK,yI@@ p12Ze P@!Qi22DP`wP àA*p5PV N`"(a >p9` @ 2 P :# D H ^7/QK `h!> .2ڰ% 0N| ߠDJphc D) :@)GB7V 0!D0P G` Q0 lDPS%20 *(Rw!r8g 0W$pW,#C 0 (B >L#Pp#` %P*0U0 p(!@Pz"@ i Q`ڐ2PU ҠW` U/HT^O!63!Qb&_/"b$WE(<` 00\0SG"r0$##}0S"2c0 !"i0Y2C6fzLҘ"gPX!124YCf$ڔ,0Y\#sH6,20f.U9YWɕ-R"3rA-"#5,Sn*Y!-BCu1E1PB f!@ 8:)""YOR*a"bQӉ-s&QtO.XQ 1&"X Ia3Y.4q%~1nC`ZcBvdXQ#8' Aҟ6JjOG"5>':&RᡄAKI#( hB5qYJB&`7Z>a9롥)%a O: ;#oJ3Ǒj d[bjmzVjRv1 P eP    [ mm` Pʪj*ZjʪZ :JJj֚ ڮ :[ꮦߪ  ;[۱ $;&+([){*׺ JJ2뮑*6;:ܪ=˴9ʴ?Q[ߺe`WZa `R;`a{zl3 Zhr۶ڭP+{;O Q;;Zk{۹;[{kQE Ha` #*Z}q:Tym*ۧ_j^JJu:iJ;!y Zd*)S gq5 ۿ8b[+Ѩ+8ҡƑ Ҿ{<lcՁ&&|*,L/)02/<6|8<5<>;B}('=*C=hJ|n#<ݼK=B Vˣ[+̾Rb=s=jֽ1]b3h )VZe-*1˘،L:]aς}wo-د-aڭqׇmHԶ|pʪ }؞]Z ն -R-T6,T]QJ˦-ܪ)-=}\M\N>^Ȟ쨾N^~^ھ>^~y^>q^i^/_}໾? "?\&(,24_87)>@>DFӞJoLNތP=Fh=8285M~ j{a8%ˉT nsh8ۭt '~SO|+"r(n}Ry-Ȭ/L,)T &-Ϟ](͛ڔ= ]7MӇյ}ܩmJ<]/_/L?m o ̅iR-Q=1] @PB >QD-^ĘQFRH%- 0%BY&L0L- PR@5|Е. pg¥(TrΠ&^ŚUV vV©S_t3i~-ΙM [RMɲ`ϕIxN->Yd-_v(,Sh 8 V-P%zѹ/ ZܖSScF\r?;|@tlW Ԝ7tUvTqWl*to~_3ϖ"/d,OⳎv" C0D-32:z+bB J \(GUMD!dD"$밃 ~K&BmŇ]G( I394[ 0r`C̯LrKnԱB5$dQt4D,]ϻl:Kj*KA숢/y:OY #eU uU?ܫY+4?CiװTJ5`U+R0K;d3WͲ2sI4Ysc\;Si (y ?|WVu0&Xu*]K&#AE5r_D-%S K]8)93ˀq[ y9%wIa%KG:]\JYn:zDlQ{QGؤ td'I$D$.y $K*9$H x?gze #J\S#hc,Pb•.Fw3@tct1^c @`v18= ?.$ޣ'"RqVD0e zRzap)JJ:?:ԯcc5X5Ġ1ȣ + Ѐ[\S(p1 ,0q d.Bс| HB<D e8A~SP. ^(j奨H4"V%E\V0!L@'D^(0^(A>A>t!q]G>1!'9tv8%.p!lI!9@hE+:QYx2@F1T)F1 N ҖohG9r+?Q+l85||Ġ?|t$ɳ Yx2y ZXœ(uq0.8 Uֳd$*5ıp|#.B8!̣ BN]{K Z` b{! p,T:fUjBPaҳj *C6\]nنtxzd ?H_-dѬ^YxNbpr!t&W]gp ‹U,{Ath??TB,f:0 Quȡ!P ^l&!kQGZg(5 2ff> LEKZ"~0q),H8+<`JFà2b:{+f cB0;hbxǟ2Y1pQ %+lZG;ZCMy\Ј_D9 Z9褰+,Y4N{^.hg}1Uj'46GaUCBCl( KU:UeԎtj ZI j'$.ݹ똎Ƶ-uY(aS|-g:HB A &zmtgAm WBcʺ1 ݩ(51,;@(d', Sӯ1x-܉/0-:ʠ泌^9 Z&A8蓧|ڇV9klGw3-D C5p *BVN \Au2,:A*'ZL2Ý;eQf¶G> ׂxSP#RQQ,.wjE SDZ5 ` Hny`dH4 X%؀tˤ Lh'` `3[YZs'ۻ:@ 5W: |§3 @C*Z"9^B9Sþ;4`;:A!уOX?;[?wa )xQ81«6#ڛ\J=Zs'+8: D\s3Z@s;;+a (;>B*@:9cBC/ң6l[󂃭 +/B"l*\و?5Q` 2QJ 8VXx Cڣ53Cýa<5@0e=w'Rz"bXC\#9;n$ĂGĿ/&Kę{Ċ[CHċp?@nI_ꥑǔӻ웪:Gk1>(rGHΨ Ki @, Tk;ĊИ$8*`#`D0# :)# I>TC̽5 ;# 2zIb.\hCR, D=M,7]A7h{U( 6Gd& Ѷ )Ɏ*ٔY{QH x >A X 80UH4RR #N:KYR=Ժ^mϐ$IR $.eP[00'CVPBAEK7Ēs\! dDRGãBM Q I4P쌝0 I.׆2,(-0NXU5Xu%XOU^ŐR$+mRr%TCQ@O8SSlSkEPєS9>D,ur4Wl#Cu%H9/0TWqI:Q+Pw[x"3PdUWش5R3O0.$Ր2)d̓\FY.eF'^YlYMYAlЪJMլ# 6SZ*&Q.DRUXV=VV]\[*`ҘH/I,=8chsc\xVk5Ƚl^k]\C̾6>ók3:}10?DI{ߴZ58*@#e`VXH%$- Xc]MB5ܺ>F|)2c]%pYY:@ɍ\nS;( c_ñ#P R K sR9X (f`nUu`DXmY5*սU.,*Щ­'dc(]ޙ1VYFb_2D>5⣤P ]rؑ< b(ȴT&!B)`0_x3@TUX3]5~ݥH030- fDϬ+ =mD'8#؅$d\WF^g:HxYJ98Z k_$V4d81Ds:ZBbzQ`De0R(c_^cb>c^ecW]D`%0SŒTպ eϭO,1-S>mVp<|F_cFT+g2H孭)񑫭eUњ[1Ap/EUeaλ}`URݟ%`:<YI 6\ T)i$PF΅Fg90jFyIFpZdM\>bz :אb菩ʈCQ޶n\kXXNUP53^`~`XNM2H2[tOFL,ȂㅞrCJ14@P ʤz|VDk{O$e5GPzlNVWQV %.iDNkVnNVX!W$uEl>el4C#`3\⠻}gmTlj\mH,>%6ǃZYpŐhTSL* cћR6X3^ջQ`^Ugqv5U]gEL,Ctf,0,be@c$lTor֞)Wd*M6WF[@({̖#ӓQ3shB(vZ:׌,6hfVfatmOmB_CN>]~[ҘZ1Yɭ r^YS&_uo'CSpdM 5ə\~ƒ5Y4=f(L@R4nE(#`0=gmoO3o/waNsW[tNnh)c3YC`t#F~;OuOu'ak%ej=m;\ӣ%nJ2-f)\0hp i1Q Tt ӻpxaH8 v} p3^6zmeGmv/CGcbs [EZx/8 o-&4 c(;3lM&{Gmd{xgr>*ÇDz9 lFȗK)@` `h!A,\!AD$Qǐ"G,i$ʔ*WleJ|YJ+D BL*VAS JTPV-eʌͧRd Y2XT0RK֬Z*jVZrʕ+\ v +V `$Щ7iiܘ1>PL2f9p4cCfʛGs ԩl658pd˞;nܳ杻8kYs ;68@`H6x9 4nϧ/\< !` |Dӯo>~ 9)NA4V҃H /N0wBͫ]Z"xZp'G@'F9#4I4Mը+^%G+o hC(:*ȑlvU hGե LAx #ڃn3XpW( VX.2)^c lUO𕒫lb*>9:+kE8 jj׍Jb\ZA6| mUh!(U:0AS";-VQV+PX%P+dnXBZ# 3[;{}waRnH]]$oU:.A bHu3J?0 ]'.ӂ*uf 6TL)S{ݱcN.;p-r1!'HX{psP)\:%@$Ф&J9 P| iPK83n4(A@^ DnـjA%h{Փc37+B',exhi ZJRPza7|-nOP{F4XyWyTQ[H~wJb L(=NU,&-4 uO{$fd_&꠭ St ecE80zZ$lˇigXezgz[ϣͷMІ5D !LxLG0P`{@(PFE AJ{E@ la =eA3h%B61/A *PD +za#bb޽rM>VX@^h%R.aPc]o{4 X  h7{'6X,o$0ՠ{͡񄳭0E&"6.)z S}6%ϞKƓNA"8FZCd@ 4X]dY _ !@DߤM  T8 _Z RLPکėS RB+@'H@\ A/ YXbA*9`X9 ]ZA|x !6PP 0"u]׽`$  A @LBAL=WLL56Jؚ!,̀)p x.ԀxA!I#YU Qeې.X!I 9G@!^!u <&A lh@>A >j L  @A )<`͸-ڢMȗdAŧTVBٍ Y))v!Dc4JcO^caVIyg|F*ݐЙ;:Vt@,b%Wb>AWX% A"7 LCL BO|dIHL%f~O(Tn@. 4!dU]cQ 4 Y FjTIo#VU\A4"^p $ZZqXq%B \:'$%?f"> ^@ `>JDdIVMY}UDB;x$Ag%<[NRc?MhVdKQܑj g4 ́nZJnVhFMXbp p~& h B " N'?#$?$$=T$B ^RZ'`tQNH~Ѕ*E,XBiM@x@'Na4.d^P 臙h6 A`Dž)0 dWv]ya@AerJ\8jufD" `>* )N_'@ `AENWW *N+<@рBA(fn V^j. 8>%)U$9b%Vqb`[(hu+^g$dZ DB*$Cb^Ҁ'\AubJHAP'3z閦yieUAe(aVq-k7^p i8\ԵlGM@ %*%!@kjth( ,mZ' 2b$*$>`@)NZ@)\yBg`t^,kkڜ扩ǚ&)(ɺRq5`\@ʬ,bThN%ެpjYn $*6*uFu.WBb>mզn L ^Bh@5M'I  TEhP"<",¯z⭰nXM n5jkX6Jll)*-sF'.V :ZP-$bB:@:)"|'BA#?.O'BFZ1n60>pk*. `( 쫾!@-N0 mzoz0 qJ)#O``=ol *긾esmBTꢮ+˫&,C--'&<-C,B:@( 3>#vn1^Oh ϶lR2 jAp:#{H2R֭3&'-zANў2+3mAD?ӲAr&.(:@L @ f *3ot3 3Cz 50oecfpF8n9GLgH$_$N")WƳOs.(d\)m2>+/2? ,۲-Bc5Bp @0B0#<$'nF3S[-AP&>Ɓ @,L9Tl":'viA;kO{(/5sRrUAtT?mӾ.3 AVR/Ŷ5H[u m][iyX)Ɓ_I 6s_JX_Ms"csVek2*nA:rh6z2 D*".A68&0 /BD3[unn6)msgtL;sW %{8c#6;knOq)OZ+26,C,2V .`c$d, 33S2$Gsng,p 7@)`. UxwtxNo4u'1f]Opk80n1Ʋ{{C6!D Z[/N*fs.72[8syסy:c%%z&ۯ:Wq$r_Y29kӺjS-Z5{!H>y2F5O:\m Igskerz9) zz&wk+1rWn>\.7yw_/O{<u?G.s2pjNspWPjJי~ǨӇp̻{8 ' YzerYr5?2yӸ+6h'4V0;c0ok4q;5QAp7r@h:{o;= *g\nի+#*O*׸Shp/;!A A$,BZw{N뛕`zH4x)ayfH@ $M/~c:bKb~f~գ+Sg>Kj$ϫ9?{G"< d{2*@,H`|!H!|At8bE>}FAqd%Me7b97qԹgO?*G&Uiӥ88AWhBakW_0kYg6h@Am[ X;\7v޵p^7Yw'vcb n0`!,^L= !K#¶XqŌ/vcH%OL)7+3Sϡ;/zuם6D nkdU?vٵomPzWH,.k `lV1X zDEJ#5(MLt4mAͷKi%Wc1@ ҩ,#RrXr6҂̛*+8 3,b,@3Mj/C `@1{X4A@ 9`EyĴGW[(IQ!S-2HEWqF߂+XcP 5V"eXFaO+*+J+}>3ӴOM6MۋNO&lZ p1x#QF6҉*5R|]|7QG 5 i}X≝@+R jX,R,j-1ZeTkif3/#[psp$AcAph}d!F Ӹw_MUOiE 18#AXc`"[y D!; ` +,SN/sbVLhi0:%}̲lН`vhF5Mt^1h^J-'­ 6X4Vz#AW>`8a$8Xsc _+Ӽ5D3; @J ,v=&9Ay#0/HQ*!頾dC<rj63٘6j`{5 lZ388 CmyaRJ^p;:6}C \!𶭺r` V@`*E&W,$kiʚ{9 igJ;yˀbng\ PWAA:!. < 4dE@ 5 Du1_u.?S}1W&V 4e-ȵ,e3M $hkH㾻}eJ_&Hpy{r :1>Ki>@0vP oxy:yMJ%KU "d4YTe3X ` j! ,4($(!oNC FOJJ^e:/)~G$OЯ*l&ޒYK0>I)[܀g#Hg,@\`h1v j56R#@Uڪͯ&dp̀X\ȇ 0m茮+<ث}حq&dGJD LDKjOzF#1h`LCa hº&mw8Vb J ʀ&`Dq@XFOܭ 맮qB+̢ɚ~sM_ n d2V c 4a ](Qh)pRb5BFNn  ":1$m&  cNOqE7͝qψ:K(3ҳC=ZGo )l0#Png.cb he!!ԃ! TE 62Tt &h.CӴMM}uo8 q/wp`:4;+/Eގ|` c SzP;=%Kp\Ze fM S"Ō a ଂmCTMlj,%  ޠjL֠+aXb,F4uV@@ `1SE˱Z,5-H`FZB#gCq Hʌ!viǰQi5z "RcҠz6laQwlj>lo|V@<0@2V~ ;U1GoWG3.bqRq>p՗$j Ji4,nC4nK8bz3dAVV tuula2@` @b'<`, bYc&Ν .e䱩%.".7) fqƠ ޠ&Nhar$TI1L vUl &oTwi>zNeWbq:` L|y*H[bFQKVbs:xQAʿj NG`N`&`B`4 ,N)gX+BD_ o$3 n@`x'7$l" Fb2<V@ Wp8;/Qd)oZe^fxfZ{Wb&&Vu,#bʒV @'Iuhr `t>r>` sUX/ze/*/Ng䋸,lXujIK&9V᠝@OPBy{yFhtR`DcDZ16}3'ctv݃ӄ-7O)l^1z& B6}3n ~Sh5z` PОzVD`^<lpXxs$Oz . MX(nK"ERzc.`m/Jc>@c*`iq5}}jimNB {{BHk<`@\@ U ZDHdE'xd+X(Q12/eOsWMp dRmd`h@)FB#sA#a]{q JJ2\(v-|Z D-0X1ZR @pq=ⰍQĠ r"#' %>'\!]dw{/_27H@ `[ok+D1KLD=zfiƩXg$\/V`' BP` % ` >'>lB4B@NuN7  T>@P1ބ+Dm,_eDŽ=zr\(YT R@ R چ$m6 Q(`gd\rb\Р % YBX%- :rܲFV@,ɱƏ#?|iL @"M:\3D zZhiSBV(" 9rHA9ۧ4o֙#f  7޽| 8  Ō;~ 9d x!pY!%B XA2G#E.12 W˜8S(<.׹9=ԍ܍ 0Sr㆔@8! >q5b;] H` ؁ .`eCh qAG,A8 ,vEla E_Vl$pfRtdO6)GPP-rf0GuvZhB}2 )%֘R4ф@Ā@v!gjgu%g]BIBCB? 5) SpP4lXc ni1oLns@*]sLOI&+wn4Z P *ܐB)4q- 0R&/ p!Gp1t'Kދo @28B*q)?x  PA H[hkM¤;>LltLEJPB #@ 6 Ղ ?` 7 D Fj+e'hV@ DJLÝ-H  :q0 2H|GZ({ ʝlESU$³_1E ֊+f-ZPȫawUuk۫ɿĦe 8X_KJ8L<1L`j`++#+B^m1#]hmrׅ0p4v;,@7ٱK݆T@&xFܠb"^\~jmDw^b!s`L rp DдKk~1~C>ymZ@ AH *"Vi*TGmSwD,8^13 p4 4`_nm1zf}${ˬk}P@́,; I$sW& LM<c54ͷd7R !ڲ"' p @]Pzթo TCa =1;7v=^o{!GWzJL'o.yA5OJKߗ#U ", sp|>vA=>r{џ *kc~]zk򹗽@#Oz&h:3ǽoo惽y&9O{>v fKbN" _Şc7o}yGzoyG|WpDIv~2t||I'w ﷁv| zjwgw'0CoIyz}zE`-3z4l] XVyxoy}FJY8}vlwUXCx'}=\ȆIk =RhspT ؆(Jo肅poIf(GtGuI($fwOs/2r(pv8(DqgȊ芯(Hhȋ苿;PK!3GbBbPK,AOEBPS/img/awm_mod.gifL%GIF87aB焂kmk{}{{}essq9εecc{}}0{cee10cee19޶Ye101ϜZ祽QZececƾZc01ϜcƮΚcƔQJB) 1ecZYZce1cZ]ZcަJsI1e1cee1e!a{}c0c!10ZZIsR{Z909ǵRc{}{cccec{ϜyR0JMJyZ1 11019<90110),)ΚΚΜ11c{1c9}10ce!Q10cc0ceq{ecUca1acaJIJacccUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,B@H*\ȰÇ#JHŋ3jȱǏ CIɓ(0@0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJjM+[ʤ5H"C(z#yUۗoŒ+n]su7fۻ| 70x>h]&v ($hbx,0(H8<#6>gnDiRhEYHqPF)TViXf\vy֐p?ih YݐDY Wr@~2uV(Zu(h:^Vj饘f% &Ĝ⑪橨jl&*무jtTsjYD:a8@eBF.ʨ*:iRjr f .ܶ[$AZrF,l' 7G,Wa{$lPΫ\%gKgMX^#h(.G1sZ4QHfgNI(Wmu*:t<\bץ֧s`O^|&Jsu_{gs鈂ڟ CjOyTsb -R!45XP#8d xFpm:=Kl 8%.cxAz(G-υ UȻFz:D5{G0Q YN$0!0!,"Z-cY2ԥ-{I]ɘD&1\s&0Lg.L;7y,'294zuR`R& d @JЂEEN`TgH%PមtbV쬣Qǒ{Djӎ=]a ! :tO8QGQ6xl=|5flh3f8k?d3ց&4FiV%.€0?|ogWx2XNWpPMsvnvvFxH@GvvGbVgܥ0XW=aEYx8|_|VtWՅ~;fi5W~GMwgv ggvZc6ehٷԅah|8|(:M&e\[/$h7yx8n(r8Ug;7zhGG4}(||u~PeFȉNqvux\w(8VN{͸{Ș\Hnhz<؋sSpzxXV؎288Xx؏9Yy ِ9Yy82P0kQa'9r)+9Q6y8:<\!oC@,针єђROɔ1NY[锊a]/ٓhjlٖ;nr9tYvyx)t|ٗ~"15hFi٘h"Fk(b☘ #YxI4MCD%ygVl-vyqF'C'PDI2ꇂk>6l1lΙjYDEKa0);VdW8oRxEe2[ 2Gg%wmIp墝"i/HHc$幎cVFj֜Y}*8lId"h(z7!lݧ2&DEDWPeJDVZzfFzHJLڤNPR:TZVzXZ\ڥ^`b:c*4;#'歷HQ\qv}\]!Evag6-C؆~ƍ\f1ڨ:Zz CGwV~hg* hxn[UEhQ)x}S{uʠƩx%4+'y.Yb:qlGZzؚںܪ0*"uE]S' ‰)z)Z*ovbUEFCiH֫z8JDK ۱;#v֭$[&{(*;a㚰s"g1J JDKMTMddKB[CLE[MD$AL3˦ȇA%Uwww'wG0*+#]Ӻxz|۷ڲx2+[DZ@DT.TPXgvsjz +`;Yz[)Ƭ9H'W4˺{g\7;;y%AU` Np%ryDD$ :x'sɻY\ҼZ[\˽{]޻%p3%ssp]盾Z%틯%b0@D]P]` `yHt 5܀ ʟ|¶ʹW;mۖm3yw䖍Շ5qJ{HU ?\HhWf۵̵لCjŻqr+G7ˊfWl{:gqr, ,.p;#`<`uЙx_\sWx̋ϵj"ο4rMz$ ‘ܿYȌ]֠4,FL4B*W`}בx%v~MUzYׂ];؆]%،mȍu,]gؖ-bه؞1ڤM@]Q<ŪݘMکڰ헭Gj03ik~۪2۞]'ܝ=ڳ֥͑ȜGdG6L~ Gh|-cݯ-<8Z uVk-΅Z߸{AxF>ϔϻ{!n{խ^sݹؘbo@hձv~)6fT|mцh֐#BΎE}nyrv8΍X~mK^)-{#>{eNDFh*zS̄ZQ%NB%iln~N^5 nN|OnU7_=z@^j%Ј=>֧*Nz^~븞뺮p! C@^~Ȟ^ \1PaP0I7qgi(PQ^~=N ` HYeiWn!^ Rq _ a Q Q!',.o2?4_6:<>@B?D_FH?iLNhR?TK_XR\ف3ݸHZh#\ɆlV&b ixϙQ|~/{? OE?_S o?_?_RVbEVX"-;-CW]:wr31>4}W CR:P Ӑ8=K;]G,kqbQ@@ DPB >QD `|RHC !"SL5męSN=oz8  <*0RH &-iԩT^ZQV]~VXe͞EkF = f b\}XG-Vbƍ?Ydi/f[8qVZEon6LkKraۮA<ǂ+G\r͝?oxfA] Z4!EƘYaL︸W[=Q_ZkͯM((N@d0B gzpB /lЀ-ˀ2d2ӯ1 Ɵ$ȸ:ÑG  edI' -bjK"4HȬZKB1-R6 1\,鬳N#-%1|1 dB",JI'NJDN3N8U MTKS̪L7_5uLP(Wc 5? :,EbU8HG>S5RkT 32Wo[q' w\suU$=h ) ) 7dsO?۷ݮ[FxfʅƇu[ _ U4.#78d-`[= hWO&'9Z>p9`omihh3v rWAiSt eҳWZun?-_f;Ϟ?YhSb +9T?ٽUT'I6k'n/r7IsB Vl^9r :vAsq{  44HQ%Fz\ĸ%ڠ^]c֞ʳN]v]WX8fVb:| 6וmoC@FPFߠD?PR) "U*x 4(Rt u%d4eRܿ>0*'{/< 0-n`1VC W! 8n_@k<юK dœQuc"YA/D⶷'V]/`LREdlLI В9zF/ &>.k@38\ZqF_6&*QI%0aII>:Mx` V§ UF.ֱhbz)3e_dg{Y3MmY@ֵml7:vN,[햷:mLiR cYZP6ve;]V70CpF5ɂUID Wp1LZ_#Jѽu_6Mk*0vQQ@*U.1a޷o5bv[NUbzi qW)hQYXoO,*ܲ?)SA7 ̲$ZŷW\#v|njE4o|IYrTrƾϵt7Og+sf؂. BK_!CgG{.0˾vwWAv c 0G|uz̓΃b3aA/eSGwdkGwl33,-gUk#Gr4G1Y27^?켈TBLb,lGb'y]RIcT!ڠMMĝBd6\&Y3E:62̏H,K,rmn=Ȧ$(83(~T5FǗt~ȁh˶"X"(4P 7ԉJL94¼*kcX`Lph p p<=CIi><ɪ!"ay2ʵ1IC7›%4"_c- r`6 Iϣ]l,Sc*fc~a ]`B.]fDOaC`Dbݝ@nNOPQfK^M K_.=fuc.c`rGS^`T"R7cecQ9g]BNVFJN`Z.diYN]GmfK)je5bRyz{d^6awkfeG0c/>JY>}][cFnid~.`:`;fmeeb^@aDshńfbhfhcgMgGZ+f+Uϑ>׭IW&}g!iԤfjfˆꨖꩦꪶ&6FVfv뷆븖빦뺶&6FVfvdžȖɦʶV 6FVfv׆ؖ٦ڶ&6FVnvn..mZFVfvnoY\x!8'7GWV[X"o/ppq(om_'gwnZx XGm_qo q"r 8 W(G"/$o*r)wr+/q#G,s&r#273G4(x7'#r1Wq=p r@s>.?Bs@GtF/tE'&WtIGq5LMqP[ +Ug1GKOt6A]1}3/Ͽ}y`Rq*$3NK]i>cX*cwyX_g)gLvչV}[ZD'jKTb?`J īʂUR8E*/`B+q2AMejD 2D=!,b'E(Fx^CRIt 6hIJ$$1 J|F"9(Kx/Berק'NъWtbqS0 xYiiYK[l`.k@qD#!?Ȧ4 哰?& *e1 d,g8J].l&@LJlg8L2%m,wh6Ŕy5ExKiNX#2td9LV2`δ{6)č$'@*Ё=(BЅ2C#*щRu(D/эrši@q#9f1,oiH=()N;#;)Nb=L;;(JQꦚJ^RUP̬ju\UGt#d]EVP4[Ѯ#4mw^>${kjuRȥqb įC%<Q/2Y" HehS rRq܄pǝ M,[uԜζ8tK[ߖB:m0{XS0 n .v?yZնxUn%]uq..ycc1&hSr]g}eFjzW s%A)Lq`&UFc_L&/ܦ kprgg]VЋ 1<ױ59ENahcIc$'I/Nwnxs=E.zF~CW_Cp21'g6 \θa9G<2b6 uģ]Lo:H%N3$&NO]/zK6.z\'̀ڰGGfWr9=tvj |Jܡuvm9yٍuh\JO B8-}BQmĝ#Y͜'qr]»ӡhc/ =qR˼*oO`e ["–|_dhV>yO! ^Cy{je݃YTZO=o??}4Q\^-GΩILP'X@@,  `j9M4 qT!\\X n'P"p !`_ FƠ :!M BڨUmTBlRT&aa&aaa!֟_ڡ!!*`BLHbe8]@|h`@P""\Lv}"! )*b*a(T)N}b!N)1bIqPL@@@!!*+Z#H\c+j+^c+"7Ρ)"7.! "\ _h^U/b΂f(vXb&愎d( ~tE$ tf%(lrnFٜՆ(ns"D"}~L i^)ijM'[yS QD!'/b)򙖎{~`@]S'3iꍽ K `yeR>j*=gz*fj~I6ҌVjqj}=vF&BQ~*Wh!yzyj^j6m]%撲 ۵]-*,:*t1!f;[gd_z뒝 ?bkK6U̓vYT ~'yV,3IZ^*ǞlO,DǮRʪ AX˾2K̎`@Al,,ԂlFAAA؁m*7ٞ-bmgQh@licT^߾L..Tmg|-AA@n߶~..d?8@Xv&,>X.Yي.".ymAn]djx./B6m6/Vo=/*n/R v/|=!`@&.֯6z@?^5q^5ѯ(F$yIopc]!0AM)>Bl . +0 SE0ٽ#=yAQ܍>6Q Gn,h14J,pcߎ`z.!R yO17.VEڱ1W1 !K ,!2#72R$j!";%_2 µh:\ nG2))2**2++AA2AȎ܌h=JϾ&;0rArjEXh4) 7]qӶ“_vke%!'-r6ѱ7.2S2Ӳ:@)T@Lk76e6SeN829w!s&w Ktl)05剟ҮXN[/D86oB?ML:thV5AaeJ'4nL{dS gKsU; }ؑXUGXw̑,-t ݑ5nTVVOuAqMR ْUˑV5^6CGFɰ1V3q^`KHN+iKZWqKd/1~Y6 s Gc+t!ǶO//3u!37dvpG/.cNuQٌ7yy7zz7{{o1;wk}ļ#m6s5'?ksx8'5rl%`op;W7pv$Sf.-.p'J3pk(fS:vw_!/<PO/]&Z1t1Wx1Hg޲}4"yR] \Z?͖B>H灷W-xf3ngv/ƕi¦[Gk֚룗9۩8 s;xt9mw)eO #tz9:c8ˁs.WݹnZJ0xW8L:M6.+z7cO!4@I0f0+xh2[wDK 5 E b,;绾;;)K:GS7GŸQh@7_'qQ:h{qI ͕;M-r; l@4@ @h@:7{k^xsgøֺwQ<чz7}8}x0"G?2[=@@`$p"|x†f,@# PdI4Te˔AC@xаeO?:F& 8)(z(bR1Jjuîf-:lQQ=ZUKbڎ_Z{kYw힍wŰlv +U&N[{^5zuױg׾{w?|yѧW}{k7/0@ /m9P ) 1lɣ42PQ|`. ajR{qQy1 p6D,QE+ʱ[0`mR-K.lMR\/)lU0;S=E sT0[ChEl 1lpN M9.?R,UUYmPtUV Or[qUW`o_}5S`-V{e),eVi2٦4Vۖ,m W\߮}vsU궩omw*3xUשlW_xens5 .8~4܀WW!a"aXYagA.d/=>X3V}L\Y&yqNP]矁pK裑m75駡lt꫱iꬽXѾz{<^ݞ;ú[ #M>DvP)1\9A]I/QǏ5q,mGPLH#鑐4ǡt#AHE*'֠0IMn'AJQ4)QJUt+aKYR22PM-mAv"yL=|JFP`PIIdvIυetlbDg*kxzP[f5r$ڰa%M/XikX~v_lhOx{<:N׼s`fHlb\yå gI=&a2vm HP΋6cz3ʦE%q%b р<(EӅnuevZz^N]NE5e]GxԾvU-l̒uFiMI.Oj%ic96v!mV!;#NQmI:2S EOFņ7nrg|cFo)gs]"1gϙ <ݮvjQ!v1l`ϲ7Lw܊9E~R'9;Enkd.4YZhlϭz:18pMSX_WͥcSf'5u2uC3exYgrW"=63"i~_q[G|q>2Pǯvءz+DP.!kK9~)qNlr]Mŭ*eSS77 ~o.RO'[7lG履_5z>}`Vzߌ?_.bf lަܼrn|NR-//^won:*P.$J/x6Z-o8NKMvp.2B0ZZ Ŭ 0 g "g0Pâ1q  1q!1%q)-115q9 =!1 ;PKLLPK,AOEBPS/img/calc_gen.gif"FݹGIF87ai眞 1!aƮ10ce箭Κec{}{kmk}!cνeyc{ZRc,i@ɂ㿸GpP<,FZXL)U[jG\AP*g=jv*mýKoC5D? ˜˄n8a^a/Ux3gdAgBlˬꬷ瞃褛:쟇>z駧{20l =|H}̢<Ű4PZl8GIMK6zeᔽgW% .YK$z> f3.?TO+܊N #4_},s`+Nn/;"q1Av  ЂT&(X|09 b$h!KJ8z) ݝLFұQJͰ:/L_Bt5MeS1M:SB5PԦ?-S:U&XVUr^ kT ղRcMYqZ0&&(03k7RK#JR0>hlX8V>h7{YbhZҎ`M-jW[Z֞}lU[ֵ-nw[[޶pu\׷M.n 4`&hvЇ=}(x]~׼ y՛^7/z^o{_淿KX6|. ~~#La[x֯4 @A DMJW0gL[K!ͱ+p\/^+-%k{8}]l@ `we`3Oz|F3"3\16S E濸jUќ!C kX"o;Esձzw%4SصsJZ2=ht>ӖtGRbg,YŲ5w ,]lD5a U;>ͳiQi;ؠm ۳i6mig[o{5w mz7}l{{86}m|{7nI&0A,'&7qdd(&MENT{Qm'wۭr&V9eN{=G=rw8]&ym_&XwE#ܩw~zɫH>֙}g[/ZC6?I?~oyw}$|qX|n|7z}zsw('tx8~{G~wp\wz緂Gx'~)Hyه|G (}6h ( _u2( jreUPfquq{aWy ҷ|hޱ~'hh}&y؅*hpwn(CȅbHs(p-4w:ȆvWqTWq ؉k `f> zk!qx`"ъp;؋%!苵xdVqǘe،RKFee6xJ_SN3J;#iz7踎o(8(Z1@B9D!J€zJLٔrNR9T)&PYXZq\`bI ^9fyhZȎlLϨg63 M6m4WDs5Q>I88)Dxy8 uZ^QQ/tCQs/hs/5eWؘ)M(Oƚ)2K.7 w@tQN֙EshRM3dlaeNQ9{eNәh/ydjg~37n 6k6tsr#77y3Q M/[fE8:0O};:`;y DLj C;Z< ILZ: ,7OThC@d q,>KF!D::=Q^D ^DNFzHIkdmD3@hֈ8juiWafjNO=QkѦ|f- ɣa@ҠǠ$tw!x(t}]sLxo@}3b%~߇PX\! ZW0~KĆP,usy{\jLuz(I,mKlz_xy{xWgdw_Lxɶqr|Ɛr=Ţ Ƥ9tve&qTSRPwfˣ#˄<ʘlƫlT+x߶%XaG܆ɪ|lΣ\'8$͵qΝΖ ŒPvcw,ʕU|-ݔ͔KZ|lC~4auLܬ9H#hxű҆(v ml˹==. |' =&EGm'I'B}Q"`}_v!~W< )ۼy<֠&MMjml}eM.Xg}O=l Qm] K'M؇M'#"\vіvը!#׺!Ӎg|لmru̓Ψ=Ӫ}Ȥgٳ1ش=P`]̢6]}ȝ cc| Kڽ! L}vt<21!ߝKMX aM= ^Ꝋ#MI89A >$~v)(, N~ ! @ *s}瘿`bꯎڍE޾gI>^+&^X 2\N[`nd[$ZjlN&PB\^~AZOE>^~~$G)@18X. N ^ 3:>^~쪮!; 44I;YȾƾgA~"И~Q? bO? Y( r]&(*)e^WU>IZ+h2_?D)?Nv CjhJo*`VX(\On KXz:.?Lbf00 po<-UQ[/MyQ9CEk NPOd/z/}??_Zrj |gZ;A>{ICv ɞus#Ə_ =39d;Rި<iLe dU/g4CCh 6oyWf ů6PP$HH8(XXx0)HYyy9i)J*hz@Zp 0@ J+ ,[0 LT!… ρkuj1ƍ;f C 2Ƞ! 88줯ܪ8m$jT%L;niӣСD= $$MTe2UєU]V\z ґ%O\-º} 7ܹJ}V 865 5Ծ8ȓ%9J34MCT$D3T߰c5 IAIT;TPLyZ{ċaRxF!EoKy׾EޘviCuۿo.뫦_H71r jp9g!E8)IwtUH;赧(2h`C=ȖPowO#w`#xE WbNsU'cR!@^~ f@Q7fjјg/vމ'2nJBU kFvc' 8mۢ}!FZcdmNmgaIl-ܠMeՓݚ믺Fv:쒣0j )mI RI枋+š+ W`+ـ o΄; 10#C*{N8 o'fڼi"|YKr* h2~ Q +b:krbj=G‚ d)(O'JR6՗R꧸bԳr?"ѳ~<ҽ6loM,.,&[7f[aMomMO^O08o^602 ^ $kXi[6:S;+ʞ'9Ì@0rWdEB0qû=+9=ァ;_f +Z&Lʼnsp$*\ h j0 4Dp ʐġ̎XR_n -x2pQx ÇУ$kI3/hU:[$*bZbE0nq^ (2jlcF8qn(:zcG@q~4 AτETm=!)z+">IS? ҁ"p< )WJXe+SKr%/`R$&0b&l&3ih.SΤ&4jf&7ipE0Ѐ 22]P (҈SI{(O|g>Yσ ]C фJDzъbԢݨG5 Ҍ!%H?zҒԤ,]KU Ӕʔ&D> >`E"QΜjJUIEQT&uR}*UTFUSUհnckWˊֳժfekZݺVƵr]Wꕫw+YW6 '` p8c Jve/jvg? Њv-iOk_KvŝlkTMzlcv2 E5vmo+{ߢ77n_,9<2owܔv(M{Kʗ}k[3v x.O6!}H H,syľˁLܬ8yH;];tf).TL3w™t8R1:i*RʅRkcIP{צFIZ3n*5^Ȟ] bsӌQŃ^$趰%޸e|ts։^ΛdtD; jO|9-|.Ŷơp,LG|a/pԤ.OTzլ`Z Xzִvuo\պmk` {ػ>NWӆG4F;Dml{۱ui{6 xnh[ڧN-r{ީ6Mm|[7oz8k{vwMp;//l8ok{|?8/ !rlsi휯Z?>j<8o7>H~r ]=3~u;P8҉L׺ՁUu=cuFuvuw:|'x~ 'ow#D,yY=G+Q_>E?jX$=s8>aůzgV;n{[]>Sȉ{Q8\9G}Ǹĩtv}]ѓSճ]ˏٯ۞t({~'utt7oHEv8&gGrȁ؀q~~'sfy+xx-肄1x3H}~0z%~.G8ro·]7xjlX{Fh؋8붇8}h^r6׏)jp(hrXr|؆!& |\qxKAli׀膹W| Yo_Xp Έvyʸ}OJ k UWI8|ZINH5Iw~p9XȖUXwYx|)x~ٗي wya|Z|)7p0ɒs(YYAǘv)|LْqȔo$N8 ~Yi(ɇ*i|/#Ip~H:\vdə)¸*9N9hVIթ؋)̉qy ꉜc{y)IIvqiɊ`@k8Z&wVC0GAx:'Yr0r w~i8'gȢHGt8ْwף- G*Y{)FI(jyĠ 0}HɄُ9vFyri驕Ru^L 0t≦e[ɀYCw%@_j1`ZZ* ꩟>ʪ< 5'*`0LF@  JjNJɪʬi S2id0j׊ڬe;$0J*z[ݕf{sfʮzۮ *`V^IRz  [!K"kk+JEbb3[ʰ'{J8 >> -f z䪮O!O+,MkR[U>jqcKekW^kҶo+skvRwa{Nҷ+kQ摸őL;N\Nu 7B}k ,)c^\]ebgfv ^hƹS,6^77hŻ뺷&6P6I7fbUeb[3ep&C5㼁ӼcςɫF]䫾k뾙Ѹ+`kHQվ_Q*Ll ny ,'P:7&J P6:˨/ 1 x:;N<6,(̚YI2LEl&0:;9E@E2颽ɌyY[j4: <@EZéX.mG3?SDolwǜy}Ǒz4Lȅlȇȉȋȍȏ ɑ,ɓLɕlɗəɛɝɟ4"(qʫʭʯ ˱,˳L˵ ˢ ʦ\E0B   al,̌ lLl׌٬Ͳ㨗"ʫ!jcÌL΅άьl|LIB!600= ͇ τ,Lm߬˟$!%,Ҝl1-3M5a}1 lA-CMEmԄ 4MO Q-SMUmWY[]_ a-cMemgik}{o q=ln-umwjt{{} ؁-؅m\L؇؋ É؏ ؑMٕmٙ~ٟٛ ڣMF(ڥکyڭچگ-۳sM۷ۺf۹۽j-ܣm]ǭܸx+-BmQ׭K/+ \BbE45۽w)ԃ(ٳgovޝۿdIe6$;hIf6>}]]f(,+h)뺭y&5.Mi#n'+/.3n)70^+^ƥz?.P/gC@TC|= ֛`DXQ\ NiIs#U CB{(IT.;W9F\jg~cr. BPA M2,$޻fNsbW^Гe)rw$t:*F$Nℾކ.P銾%:(, b~)ߒ_K9].H>Ad{>AJnǾݰL.Aخe.ęaJ⮿^^쾿inp `p"D +m!\14-^^L` _-?5x+{N",gGFl" BK^I}"i 7n߻ke$ㅼuqf "o=Ar]" O(i,݋Gt!4ޕhP=^e.VdB1ކ+vv꛻\>/1;e3g Iw3cO~?2 ')f/>~^[̩/ ;%@C@> ?ַ߭΃ܮ(Y$Oá:ӫO Gxŋ3jȱcG{=6CQncʜI͛al_?Ej#ѣH*]dҨr(Ljʵי:2(&^ʶ۷pr*r &VU ܿ Q'O}dMǐ#KEWjU% <H tɨS^T{2ҠP$ڄ:XW_0Y+_μ УK>v\h[ aɟ g^Vq-J`Æ<(p4dDߨ+!8߃FN}fؕV@ 6p7 +bB琄,b.~'` ~#/IXH&)F^CcJF)H1WfV]I\vɑa&ŒhVx^I2ڲ'q .OrNjihr^bfPޒv}{AdΦID+J'e࡬.#f._꧝2(ꂜbРgG]70ZBfF$dWTbh0Q|/tlg\a7ڇ PdQjgRVDF5%KSZbAl7Gy^w]c{] wO#Oy[_oAOћ~7$[G}`I,4iY/^Uva;ýã3~QW?~k???o~_?~%(n)1o#Up_օ[ H[E[ ؀8% _ 8"XH'h!,./082X-H7h1<>?@8BX=HGXE W2` (taW_EtZXȅ_[(^H^e8\]fȆjixrsHtxvq{kp}8XxmHh؈uȈHO3b$s Uإ[h[䵊X^ՊHh(芸x؋8x(h(8XרX8H؄*@+PHQH2` bX^9Xhy 9 Yiy 9Yi" b#NHPht:6\c4y^b8S_CoTa7RoIi !9Y ~9yʹɹΩYNypؙڹٝ9iy虞깞iYyI5ODCb񃠬ac'2ɠ"BT 4qS*JEU jQ3 { 7 I;՛db&SO墴9YAV5TYSZ,*UH PZUjW5)7nG4JLZ(UoTZ8U_DFaUv`I7Fd3G9hʦ};tڥӚH?g(6ITzکҔJI7XI*j SYxEĤ* 3ݲV.)6XcZ,U.֘N9pYi*Q+*kjitz75z_[  Eq*ڟگY;{ ˟ [q2︯[ٰ艱۱ɱ "['7\0+1k[3{3 ؙy;8˝@+F+0H˳i=EY@HQkIG[C?KO(;`f`:+aJ˵4X;u|KYb+~p+/y[L˴g۷Y 79۸+|[۳K˰}z빡+{td W Zز {zvb{P{{)R˹_뼬+kۺKZ˽ 뻏 Kћ䋟i[0n뻼1[t ̫۵\?O[[ޙ++\˿|̋k |DkLLv˞\ "| K*+[,{K$@|C\B\ rwHܱGR,T\zX̯([+Nb\ed|ƙI llq|i4 }#,ۼ ͸0Ж@[kL|-ܟA|Ԉ#\Lmoq}x<׊0`˸"&jt-؃Mk؇[i NJ̑}}Ǖ—'׵+gșu}٥]٧=٩PgϠ݉R]h;Jϫ\ƜS%mcѦyɫײǴaˏ=ϓ +Cm\2 1ݹԖ\-=Լ}M>ȭ]~<m \V-]\))m+ 㗼7.#`=QG5- ">E4,~ܤ 1^K,|O>"]3Mng>[U[NN,'::݅~؉؋n؀6-MNNؗ.ؙn׏k-޴.J .5R L.߻ݵNՍR2mͭҽ\;8^îܴn͇{ Qnʞ6'ˮg"Ծ>-:Ncm3l==]P^Ao`:]#;=ܚn,и*o. C6Bþ߶0za[;n8LIUQ+K_]<O@aowN6~vx~! SL.>:?Nl8⊿Y׋ǫ>וח֙ւDO,3oǝM1S^>O?/순^.ک?G,|4ϽZ~o t (08XH(xhبhX 9ٸ9z( jiYp@Q+;+{@ 0@ pK{II\izJ:L<,iZ-]m}ݚ̌ =-l=|_o;n j^1Ç.*E-[r%VM8&zGv#$v,YKJ*W&gZn r92$X&Č zxɔ\9`Ȏ]H.FK?Y~ɱgFv3`xgΛqk39[|=z+`PA ug쥵?H:|߮ov$D0p.x7>mPa &T P=EYEHafC:YL!Q :Ng&8"`(Έw l2均K!'Q-Ʉ2!SBRU=sc:}>,VS`CU*Lh՜㥍\%#ey Aɦ H}v@iN59=&$B(ZzN Ήf}Ubh3^ihꘔZTm WG)2/)_9]x=H%ZkDjQe(ee킣ZٵșMUS@ي;W%n>*5c8cV;ŧ${@ /𢍪qOLq_qoq r"Lr&\(r. s2Ls6 8s> tBM4AtJ/tN? uROMuV_uZou^ vbMׁ;PKG3'F"FPK,AOEBPS/img/maxfirst.gif GIF89a3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!",@ H*\ȰÇ#JHŋ3jȱǏ CIɓ((2K/RJgty3ϟ@ JŞ9 "婴A4s4ѫXjʕ"ԯ`ÊKٳhӪ=۵۷pʝKFO˷߿ #^8Pō#,r_ʖ3ϠCݚMzpk֘_7V2lĶoέf }X yV|ey]Wn[d{>~pп;?xqm?y~t|!CM|](}`}I_x {`haB2faom\s6a#n/]؝h(V|HW K)PW\G,:yaތX2iE)&rEPAwle&\aߵY1z >H%۠ەwn'=j^}D)}]9g%Z)SZ9櫇vy*rezJ+J䯍:iZ׊ꫯ I,"mjR[(Ԩz)N'iSm-YK{?UoJRA!jJl /pHf u |'̮n,(l#c{<✳'תGB?&tiKʹHHg|R'IlFs]^OXSa-msM7pmݷ}c5Q+O@ DPB >QD-^ĘQF=~RH%MD0@[%*7%͔=}TPEETRM>'΃2^ŚUV]~Pe͞EVZ1:0.KuśW^uX0 &Lb?d,_ƜYfΝ-}kPM)?6}zqjՇAdZplفin޽M޶m.Ɔ%;p#lι)̺1'>8õ߻|Ͼ?=}n;07k?&,`BC?,G$D0Vd!q{e0UGBK+mǽr< IʆH~ 9"p_4mF.CmAԴ3ʴ+{[69c),8)ͼĔRO4שּׁd4DKP,HWt+,]NhR>RA]j4ORQ!5BTSeMWII#W ^%?] {ɿ[Pт63}%lM%|v7=6)r.WmV#eZNLER4]5U{6ߒE܆ca͊-T/%>\܎GJYAOʘݼTAk>֜Z!~Y 򚶕睥*jݴ! ~l76{ծmS&xn+[о;p''p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )r$ɒ&OdJ-L)s&͚6o93濘-y$f>s)ӦNBړPT*z5iRR +v,ٲfϢMv-[Em+w.ݺv;-zw/߾~,x0†G `1ƎC,yqɖ/cP93Κon,ZrѦ>:֮_Î-{6։}rajզ{ st߻&OVAo2}~W{ej[Q Hh2X]^W`{u)tahj(7e 7h'!b/g`|E{)"ߊ;2ٜIz3djx lY7T^bI&eO)epj:yYfuZ&lBVWnF'Mgz&z(r (|q j(y):錒I+PwpFjꦨNŅݩ{v)Z8kSAeUuZ6%_]?Zh>5ц8Wh-~ ݱIiT({6!iuY} %Jf:w! ikG|%c,*rzǂ%­2,KGP-MDO',S&-֨Ku |P5~cӅW^۶t6xi'6dϭ|CwzYμު!c؋Y9z=ݐbN͋蒇꼖>8am1Kɹrλ1f aEx5M8??o4.-w~=i,~|>̫qosV:;Ա{૏t/?d4e'/mh śx EgB n0PtxAd2`R@ĆaxÇlqA}p~S~&R Q,b*PDsj]\7FpY,c4ō69V3;*T#帼q~SޖgE=" (8*-diIxqǑ'WnD>zuױG{w?(-$l/L1ǜ˝ʔJ\K-|Q3+*M5.\js@?8(:PЍe/RI%4GasIM4K.5-QTTWTWGOYrP LUAԳVE5PXgSiQW+sT s LsR!P6ә,MES.C.dN|Lʑ2+ɦwTki'e}9Ԧ}њ:KKeE1QnIGAR%5iE2Ѡl()SZΖ >1'DLwJtZGStXI.9g9Tu\RX||ƞwa1nDnѥ4R釶Y6i=+|Mmd+8OVuY}°mS#-ջk*&/Ei\Z3=leمr`^+󵱿MKI\Ym:ʚ)7y8YJT(ox66jnD{ޓvw';[7Ïn}G^j?nq$ibw{r{C%'Ҽc. gkns"9&OȂ}KQUJ_;^gLuEWXǻ>i{}=ɯѷ3Z.{hxG~鸓Bz3}f#~{{pu!/mƓZW{1w?Qog:wI;PK_PK,AOEBPS/img/cube_precompute.gifV GIF87at,Κc{}{cε}֮ecƂBRcyRϜֶ{ccB1cJ1}RccϜ!ν))))))))),t@pH,Ȥrl:ШtJZجzxL.zn|Nb~`vuxd _ ,f^<][Wp<ÎԿ,ՒqسD۸aDgxBoXA4)\(-_[E!bC`dIOrL˗BGŚ7s*ɒ]+e"B5@az:@EUz7.̠f] l;I@oXޱfBRfza hRP@o@6V/x"V(?Nݰ:EEq"C-WVa+dmkphVTӼu 4ʃ X?v pS>[Y/s}8&Z 0rtPZqإFp*w8|GdD,4gl@-0X沞9"{4RiZ3ț9MgF&8)qN|&:ٳuB';d?P;@cF"T ]#>4-R06I ~pьP`/OIM* ~Z)5¥0Li6Jyٞ Ɵr"*Q' ꗏZa"TM@u?C*1 -X,"Ud*:_OXѪjңϲV5:=RI2"tmF8,5NdVW eI Zh3Mlixmic{+Җ_rf񶷢-p$"r2F%k]y0ukusd?nt]n&񮥼z=/$}ҩ0%B~BMʙٲ5^o `9P@7 gjt,Á,.r9&*FK\:=m@=#L1-BŤjg\K(+ZWc+XKÍ*ҮKve}`CYpV&f" b">B.{ꌟ;kvO\#Ѫw.4 DRӅ8i4-MPCݠQzA>51A z5#Yֶs ]8n-؝QP l~Q1`PA fF;Eŀ@( T VJW2JMA@J``@v mМXMA5^@ pk[82Ld,i?YtB꤃M'6ҍ.&cÅr4/'Ns8.F0 `hޛps=BEx6|!2 Tkp A&i~j'B,r w.d`>Gc|D+%).MX5bR3=FꘋFӕ],5yM{Kz)^$;(5~QXG~]?]x$Կ(&p `K[r#ߣ R[7H[xw7GH)!':9%?}!nvsWKv~U2wkQ6Ӗ 0 -]q4 5lv+m%҂>@QDCx/J8!F؄PH5R8XV/౅\؅^`b8P;PKn&[ V PK,AOEBPS/img/product_dim.gif:GIF87aJ 䜛ܼ̜̬44d,.,dfΜ<=<42442dfT424fd4f4dfddf  24t"4f\Z\~4"~d|~||̚4f LdԶ| |~||̚4f LdԶ| 6:"JBF.2>KNRF:VZ[^b^fjdZVRnbVrԴF,* ,J@ɾǞ˴ܬҦй߿   $ H*\ȰC@^DP^  oP<@ eʒNdf̗sɳO}س^>|~*]ʴӧPj'F;rɖ&]ٲlʰ0B]˶[5_ҹxīMGDS9ٳ7V˷~ꭋˠC9џ ފbC~Ҧmͻw} N8PÛ ힽ6NqJνJowWN"rӫ_O|p̛?>2nkӾ)?f`vg 8{ 6`B R^|A'}YgmQwyL=8Zř>U Sų"k]}v1&D"']E6y$zxX<(K>9_K.dO5VYV\%敎wvۈ%Idg~4RjWI燎_2Qf Sç*ꨤjꩨ**MjzPjըkO~ k NjFгVkqQ"-nmߎn梋 .잛қ//p+#lp /p+q,o Hp,`䓂V%H-P)rG &\,08̲aĻ/H1.QuOg5SbMa=vlmrMq=wS#r U4 u`);8@N,~xʘG9XIO0PP.:@?.{#oYZ͢VBCDCACFtCܰ6B""6'Z #^ C5?r(lHOb4ŏ1xdp8WvHyOcq:dA9"FZ f.c ERh>4$58$jcILj )KQ,eMK]> $2Ie&;P sKlbzyHq&8Ǚ Y'fLQ DRn$6SΑ7\#!yU擕@#;XC`RO0>e C NWQAE2=f=#6$]II v$(`/ F0', ?3a ?pt#>(N +n1g|bk8αw@Ldx+L&#P<ʤ(a?iy\ŗ ,NDA[ـ`8!qG4s3 @2or.t:@y޳ MJ[-<H tl N1;siO"r\BNu\5G%8f3u3JD\#ৰylӞoS4KR[3ǭX2uj:!1z}8&9/Rdz}=R<|<bq_I|cqa~\[햧iĥo}b)Fwz~_qrl$89w*q__!SsPGLGs&!{~EwO!z~`2*7PGRۗsxnFOkwtz.- Xjx!7$|0} S0׃mp$qtkhwyHR 2(oU~W)oRm@hk)]E*N%VnVbHK8愹RUxTFT{zUQEUHzwYqQĆX*i؈0(2x)x&jRd8XxH( #.(5.N3"0*<0R03CXxX1h͘ϸ6NV UXQ]W3S3Ѝ3?4GXeu5%5[X[Տy[Yy  \/_H/r'3CYו5s333120P5CY S5i5` VTӓzc7|7D)EH9FIyJٔ9\  ]] GH[ٕ-c[%0^ U\ƕ\e8ŗ]}iII阋٘9yI9YWj"5;=09:i8鑲C⢛I;2 )<;9Yy֙عٝ; =isiy?fٞyAc9)Ky9뙟ٟd:zde ?F" Jv PFg`jA qvg$ ZAsAgh$B@$0hpgfȑ;Gm!iTqnuLe[2¬,F,{+ ѯ [K KQa{cf{ ̫JxFpKr O"{{@j\ռ%\ Т˸`t&mԾaBq*B=t{;zԾA L'߫$k\̳m mg~(Yms[[ tKnMԽjCk+>NݳSDaԇPK ŏ]RM kutz= \ 1xż˷ɷ:Wָp_,<ǽG}˰7 +Hd˂¬ !|}{W}ݮK۴=חk=I=m *]Aw]ЮJbکyޟ{JہPA,}ës=k=y4G;A[%79@MݤKM(^e ApU,*c؆-,wTKUk+C,cuTXmN|xUŲRe\,;nstMyL_i`>t=S=-5ވ8,=@]w犮N 蒞e.&ΘݽI. z駾ƶ7d6b?6Af둚뺾^0C.Y5xŘ)2/䒚>X2О1nYYݎY.>^N~.>^N~W]ޚ1fi) ?5fX9Yfy3;56Q,/3ic-94:/>8;_?EF/G?HOPHn;jb1 o22X1 !0&X#*g?;c#O0of+?$W˹2 eoj?W2#9%=#t.p4ӺW]@ƘPsO N]_ُ׿/o/Oo_&߮sY(prQqPp00@" ! )!phq`qb2cB# S1ө j A@@ 0 \L ,Ll]}=ͭ -Mm^ n@Щ00ON/_ΰB d@~$1Dk 0N\x]88KT` f̜- '̠3yԨНEMROB*)VZz $*wo D ")@CJ6+L`  @`Q|tL3ݬTjN:kٰgۮnڻo,K6m#N'/ y $d`u /o\ :p C]NH~x ` :FHBxePuwOrLDR >\'+d0 c5Z$9c3xD($L>dKJVV%Wj%\~e[f&g%I(fX0l p9]* 'x;|ig|zu ( i䦚v *~:Jjꪪ +:J' @rnl Kll.l> mNKm̊hmnm~ nb+n枋n;l? oKoދoo p;PKw~d?:PK,AOEBPS/img/dml_express.gifjGIF87agfffϬŻ̙___ff3sZR oooXXX3ff,g@@pH,Ȥrl:ШtJZج6xL.z}>l4"h({o{~B]kD`_Cdf~  CB 䅍*4c@ 0 ,bԘbǍ9 Iɏ(GTd˕.YʌI͗8gԙ&@ JѣH*]'ӧPJJ4N=:8i ,ٳcӊ]kVm[hẍ+)kVwM %fW-l`CRȗxc#xH@~/kY̝A<:4iѨO6Z1Z6D0kܩy MpŃ'?|УKN:l.w]vYOϫ_Ͼ=OϿ(h&L7BLbxN͇ ($h(,0hbh8<*DiH&J6PF)egXfTz}^w ^"f}ntK0`@q.AL'vYr)'s砇"ڨ:)R'ZRuq#@P 9N9ͫj8Xc+5:3 j(,E.2 N+bljkmVikn㞫Vn+/S%5&+9X)P) YkBTJĉNKJ[c\,r(r,0{{i,׆-? LtF3tP?-T']uS[5W#^';dmA+b f/f+t׭v7xZ2n% ᆌ{>aWn w9.sz騧:};`/o'|?FUxp_N/>w~ϾݿßS4~xm`؃0A`Vx UnV  Ѕ(< /Bp-flg(^7BGױ*aF;6HEXM;֤Ƌ)SCܫ5`t P,p*ԩ#IɚG:}# (@ѐ|$!H=.ґc$YY>&7Iwi e&?!Rr)<*WyRvʋ,gIZe^:/*\=ɯ~2wL1ӘLf3L=SѼ6ev '8IrN/ 5 t' PbLH }nNSE&S7L 64šCiQJ9B5Pnԣ(H9JґT(}a*CT'eFf )MSӞcPHԠHQV @#* *"*I^}dWJVUfM+Z:V_Xֺs$j+`IL%}9-ޖYєmf#z6ohњ6^=ju:Qk[S܇ 91r\pKJiMrU:$ZwsͽvrwKhMzSպ]}|w=5[C67| .0|+ 0La Cx07|k1?Lbc̽عaK9@ᐂ0}*01 |h9^cYF𐕜"Ovr,#S54Cc460K4!/ lÀL&X3:Ϲ >.\;׹|L@ЈhR;v9_by:0#"_P@gUE_CVYdb`-3Q}Tz׿\ר6v aye`$-mZ̙2Bjv\sK"6EvCWK+VV  s[g7~n;@Gx 7|g8>q+Xcr@jO-(Bh;,?G- @cεs<<υgl28aŀ8:hގǛ6gu8,Z=#g:oW;.w{~y` 60u@-;Bb|G"[^|)k߼C˫ p`/{>=m^Ͻ{|/>;_O}O,u{eK~錿~GO+οIYqWh 1e`5b&VbX'vȁ؁ "bbqL_rpe0dHe38e2467؃<;VBeEXeF8@GXLI&YV=rfKak_:)h6fxhgXhj؆dil(nv8wXxTX in&m0r%`SS4eA kllvllfƉ؉艚x؊8Nvi5O#wFSwp62BoDppèpqG7gX؍8渍p踎؎莿xN#l*!Swn$ H EW?wDCɐ ِYys &uT'h׌1upU7gWxVgy{x'z76Y8 79I<>;)=9x%K70zP)zR zQISIzXYYyZٕ\V[)^I`9hiH.I zw}|rYwtsv~ɗzٗy}y~٘} YYx\OXY bi_@& Ņ^)OEiٚeXcZ\9B9A:Fj9EzJJ=N[MR]Q:V8IzZZ$Y^#]b#[PfzhjlڦnA;PK ojPK,AOEBPS/img/prodattr_gen.gifk0GIF87a焄޽εΜΜ1111c1!!)){{{1kkkޜΜcc!cc1!s1cc9991111cccΜ{{1c{Z{{{1kkkc1!s1cc9991111cccΜ{{1c{Z!9JBB)19JRB9ZZcZckcZRBcsc,@ʺԃ֣շGPֲ*\Ȱaf9ŋ3jȱǏ NIɓ!JDɲ˗0cʜRJ8sɳOd6Ս[يrK*JRF}tVݲfuWNmJ6*fTMZ۷p 54ݻx;7@ݽ L8a߿+^̸af[*媲˘3k̹ϠCMti=$9eS`{6SkޝJn݂p _{6ᴋoУKNzfԵTνW%*3_ϾN+w\cyǛ|hBG,ݗF(Vhfv ($h(fK֗0(.XY5Q}L5UwL~2܀K6mE~-yR&g%\v饂+b.}ihi97j)tdnUWg[AH䕈sIq Q_rgqiw.~jꩨY9)*무j뭸k"Zj Vvp,: 80FWMVR 撋岻+K񪛯op  Clq <ꯤ2 HF`@+20r,.Ӝs53248sC-4L/4O+ RW}sWS;sm`wb $-ܭLxzM ; #~87rB*DGp@ @KZîcag{"Tۧb޺6~UY/w/<29>=@!Dw^9;OoK;E:y/A67/L Bȧ:. |'(2_6 tܝ(HB(LaXET0NZ*L(#P`a @Wq*K9Zb x*40.6#anH2f&43!*zD ڑ(b+>@RMĔJQcXH l 27:B5DÙ3@i?"<"GB򑒤#:n2 "+P%@*Ul@$'8ZȖuS!UTzҥB1&2LX2q|up)&8 Ccҙ hyLE :@P( h)ExsD7cOW2ʹD7QT.`+ZD499]dCبMSͩ)p)Z,R2j5-N[Xj2@8>QzO#T kc@ֵjjZ*׺q&W (3}OAQlEW!x0c kHY(ѝT AT t7S7U"ĤRڻV۔}DɈ:](jOf|O| +#O[|+ko2g߸gջoyn<^*O֘2m3Z,oE y+яen2^7~_L/֓`9ߓNvx8{>@,$@j6(]engemD"fG}3fj~"8&=Gj}+}}WNqo'xd%<8>!؃@t!sDXR5D0p07 ^[Ac1RtK. N GD7QWkM%"pF[*Y ONIxS jtHJvxgqCFO I')5%)2I׈h"XNpi2X_(MRvp 'ioȊ⊰HH褊¸4BhX2BG%D 0Ջ7%xp@Dh "#ReZLZZ]xOHYx +Ka K$L]e^?=(\rv<SvU-v5b8')ShSChdՐYvg-wwG-qg.t'^qww%s2'V,&zԇZUE[0*2 #EYiu] `FhfihYpml ri p ppR bpGx UPPY5YY)YXUS ɑ9vŔ !Z]4Y"(\feVE ;链w߲œ>&C]1cɚx9!WVI&|Wzb1B4y6icn]7? }1wF';:ZE1c# χ},"G<Q PPj쀡 :Jb":)jb:2a]jB?J=j0@A13Jc:ZVzXP ў\`:ӚdzhelQ` 7 F;"rrUp(sf8,8a ej,S,8h kav'bkکzc:zQo52j馧:`fB džEL↺l諜fz#e'Hb)kk h/ҫIRJEiqb jCڮ)ʪh*קfgo,@qڬ(?GLԭRy3Fp)Pd !$;"+Jzg,۲.0 "a|Z:{3ר:C(PXR);Hkl$Hiq&;H'v nQ(ƒ(b,WJY"9pi=tdnZd) uoCs7jB(iFkָ2ek)mۥ6;Sߊg{ikE{푹0! 1;a)D'G)ۼ K[ӛػ۽ Kf] y,h|Z;'jdВ\\JI5L\| <L\| V-'c)*klg6_W  \zgUwy@ zAB\D|ġCFHPQ-y[>gkE_j%32]%a ^lidc\l ogD -М*,}2~\9@ +] ]ӫ>p9Gף9=M5A@f'-@GT={V}կ'=#Ix Tc '2:4X^+}@ŷ8} ;/l.d='=I~=r 8E";%}^m8cբq]vڨ}l } φ~n‰ /BӴ.Cܥ gȝNYPNQRX yEi.53[C8^x90GI m]Kڍ2E_Ҩ©qn}[ZX=םP4- hK k%|ߠhJ؏ݖA}& 4@%Mh*>FC2.P%%pfKPnHq<Ώ>.;EهJKKN~+nձ,^M 9tL[. '4|燤u{w^>D (䦫j4{>N?`PP SN.N\^~KuZH&`&zn辰[pX^bRY$'X>Zm6vȋh!)nAؾ1M q>>.yON^OHED[[Z\M^ޕQD/Ι ۑ\\E\9R%#N(( +ωR09Sۑf@yR%ȹ89/r2ٓ:W̞#/ 띄 Z]bٱ"ʃ^`aiYe@]dL%Op]i u]VD$F z?|UŝCIh__mfց ~@V92?X6- (YYX)q ǫ9yϑ_2\ ߺ.N`$!8 1p)9IYiy))) :J**A@ +;k+K[K*`Z\ :=*! .>nm~~(*oa`|p*ZP7-޼i PP4y:HFx~$ZlZ| 3̙4)S &$Pw @TAOiլzE Ac, M$Y| 7ܹtX^mXX&/dȞ#l⽋+qb0pYY}Vk *ѤK>:լ[~ ;ٴ]%P;wj;T;ċ?<̛;=j?O=ܻ{>Ilś?>3^޽ۿ?ɵ`Ҁ` W>a^aUnua"(&?c2Hc6ވc:c=bAr|cJ.dNRf`' Y#Kzd7$dxinJX%hyR䭅~Rc8 f*hh٨J(hRm q^I gvj>:b:馲Z晝)8~jJ!C견2D Ѹ*f2iڊ-B[kb*.Ɗmzjlbi~f# p7/"p? q'_qUq Lrɽlr*.q0Ls2׌s'ެs>CB-`str.MAMtTѧYunlBS`XqyN`Mg5i퐩jZ*_kڄ3x2u[Kݸm#.o.u5瑛>lgyky7>_oW {/mo jpx yh9kUS}7 D@ UC0x ]hFb8 {xCP5,b9$Nƒ)HB$biB!aVQ^hqJlĵMTlQ(xD41j# iE31oldhvQQF,%G?⑍"-iMnғt)3씬l+ё9N -oXD/ ` s)L32#DhJsԬ5iL7OK`N8uos 9Yv`<3rRd?wS8+w:|v1a#E2tE/ m%'u7vNE>2rl)F_R Z%E$jH=,%LN*# ԤzSo"R Us0QU6s={&WKmu,kzմ5Ym;s8h]]:U-o#G U8uaw<JTHe%Zj&}AQfn$)uzƜk,"K? Ȝ*-$:ԓl\ v0l 9U4O;7P&0+_ LK֐7 v:C'6j^W˚Њ  tk`6c+.lh?{ӎ6kkܮmp{7ōs~t}  sgaτEŮ]ъy:,mp? '^p7|?x)~q/\87qk"xI*o9_>r&k:yA"{"ܫ670mir< DG,Px;\ֽwd;n}goݞt;n}w7{]ư g! NP_t~C_zs^]zҿ^?=M۳=y_~׽|+_=_~T-̌R>%X-&=3?* PS}F*zI6Qbhq l8&::cw꙳IA~A u{zi nʜJZA}ɛ%y V;JS?2:ĝO8C" Weɨɫz9Cڪte0j&йj٪ƭ*` %JVj`Uʮ<ĉo4rZ%ZO$4O f!Vsj3XIS;ucny){]Z$CP&K>ʲ/>1+C5{>7C)? A`1f #q}TEk '{;3pgCMs0YKе: Fyd^LQdB^cHI;ztHNxj+p4@w X9iZ.RdifTPOK%lvt; Y;}OVIh[K[MˎPKkKk;[hX5]@iU{ginp8a_`[ekǼ1kG; 3 ѐ0`l.-//i+UF,)L F@v7P%|W(,$ m+p+60&PaqTPgFCDh< @'D| H;K|6%`;þhSFg\?>\+ HLpl5 % $0r %fZz?^~<-± f|Tkiث7@K&YLœ> `,ā\d+KNP% ɑ STa,ʃLҬT|ʂ^ ^ ,. r Ͽ,F+4V пlK coAJu{{ "[ɘY4 π;#4ѩ\bX|fq!.-=3RĊ%PBQ-sӉ]AMll/ps5AիʪӃ]&Mhnջ<(ӕ2A[щ צuam0cM簿!;"ا4PvJن՞ -{]^syi eM ښ]ռV,M؊ `gKgQ2AL|6ƌ1VJ]M˩Mۤf/.T=T=lIޑAڏ.QʌgjԭhЕ\N0}-~M=mT-9|{ϝH-I/1~ ۟l_A> ,skPknT~m_g~ݭMS5ۃJN ;Wr=sqsfuCW ѕ-#M%neYS'uPxgwY.\Pg}=m}M&h]~ 蝱Tk^z^7yq}zኴ巍ԹT=N>ߠ+A'mAxY<8a3LOQG}k.2l~5dcYhNiY>~ y 7 ihz_܇@&~@@8n˫<1o3o':W?Vgh=Lt]Ep@ $P|}q(4 s-}"(O5]d'!9:]}[$LF!H]u%?I1hhɏ=fmxG[ytz'hgn _*a5&~̨)餔V]Hs$yJ꩒*jxS*vԋg鮼+찝@l $l @+R;fզ ,z-h覫+kh_,lp 7G\nWlgo ,#uL(0,J&8@-4cmH'=PL7PG-TWmXg\w`-d;PKP8p0k0PK,AOEBPS/img/cube_rules.gif6GIF87a] 1{}{eckmk!aƮce11 ε9<9Ϝ01{101c91Z޶ަJϜΚc{ϜΚsc祜ϜΚscUQ9891ec1eBABsusRUR10ccecce1e1e1ee)()ceecΚ1c01c10MlWQQQlQQQQQQlQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ,]@‚Ω-_| Ç#J { 3j*@2èFBHʕ0cʜǐ͛8si1ո@ JѣH*3ϊPJXn^Jk: J؏=v5WկY~K6۸;u߿ Sˆ+^̸~ CL˘37ϠC]+ZaMҰc˞M鋇vvoY!6Zq+ׇ<9rЏs{]1_Wr:K}H˟|n߶'؝}& v /^M[QۄuaooqVt\xXb hcvި<Di.9L.{$([uWƈev""h`)ah#p)ߓ3x|矀*蠄j衈&袌6裐F*餔Vj饘fn:Cg,pJe/ZWZ/S*ZXV\%#ryꨮʺ]+ݚy`ᅩf&,VVdoe3V`-#D*N, <[Qw^|J+r*,kC 4<۰ BiWlg3  Ppr+,20L3;l FLq]h0g5;"*Wɺ9֑xԣ*Y)5"-#̗H;8p"`$Z4HMZhҊ.>]")ŨFzs_(aYvҕ9#Yrc~>>`ܧ@gρcs!wCYZ?Ok/E7.揝|#>z/ϔ;R4KhCf8WD ;1 ? *P+(R ,M Ԫ5(2y'1-dVjjgaZˊֶխl}\J׵wk^׾կ|`t'ӘXŮSTJFZkj{ֳhCKZ‚ִEmiOJd<"֬K(TwK5򖛚oKiuvrFIJl"]e12s7b׹gpѓ\5- QWiT f]xS^▢!{}] H]) %~P*YvWҭϰ脯曮.RS%MK),zۣ-$Q^Z'=vw@)LRq~2/y+8HcnVC6 !I1Lf*78q*PӘ9pֆ̹xt ^0r,Kfz4&-x\ЗƴNx; D4q T:;ȃԫn!>0JL|Mb{lGLt0bA;L3jօiIW+^U4nb;Nwv0N6MzCԞ.~ !Jڰ@sBUպ~'m:ϸ26eZxGNr`((O9Vi;CzIH%ޒw󝲼@N.}N??җ;brjt̩Ez9XDsmCF͙v%pu.}2tʻΗlZ'm [^NtiHWG'S_3Cܥ$6B=D/E8_,^kgh snaN qVw`C\Qϋ@V?S+^5\K]V]P_#24p=_%VX=#[h؁=Lp@@:kcKR f]łs[Ք[>+HC?:UQWswK^TY約C䃌ReaUc3=' pd/%UpL rg8xu쇆|S96=Pt`A.7_9Y=h'N R` E_R`]Nȅٵcݥ]=2tC4ljFlanX^x*zh8X؅L)~4!E\j5|v{SJ&eעwW }V9}YBZphʣuXЅQx#ũZ8Yu?ʏEtCgxw Zzګº Z*Ovʺ萬kv~oЪ):R'ؚOq gjg皮j&j! Wifgq^M%*mUj +qp&givh:gkk@kp kp)! { qQf *wqxV,2s "۱ ;jq 1I;` F k!p^Z;G+4k)+Ѷn n;Kknvz+\~"$Mf WFP O^VmsQ|UBubǨXg{6;ע'kn7À!p|3#;k{y{y[w;v[pgtf"wK׸_`Tˮkq۽!oK|cRch;+6kKqkf q+/<={}bxd-S+gxjquK!G{p*y.l 2&1<6d-|:a5>#x )L+]GR k}QzX jgi#\T{HLy=,e_2Iʬ0E#k; %xG G,2RS2wNj.ȼqƜ}| |NZ9H2Ɋ1|VzµGŴKͮ4B--)/ :Cp0$<2 U-HX}]}E >N/P-լ,:@-[r@h$06Ph=@:P(ܕ au2yV|hI;-YieTzP\N?^n R=3 .<pA|xxI};4N0zz -S^\44% ["/$ErS>GqC@WX赌AMtKQ7؏0;)խx\ݬ)5f-2d9 C3TRئ5 s(sI2ݽ>x;2B8`nX:w>?n#lun3pt~\=>^G9׾^1H$ 3ֈLݍGLԠ)#: O;/0%hF_LdLT40_yhRJ[XDVTk~7 =u=CL5e-/UWѽa.B<ξOi>n܆_xܖ/8AEܞ#CO^HXYصl6hB"Il>_ ?Dя>ҮP/lӏ/3CkxdCz\ :O@= 0(Xh(@xhȈx(8 y):JZ9h +;K[k{ ,^˜<@PP`Ͽ_!Ç4Xp`ƒ :ląNX1bƋ1zȍ$?J.ʕP2d̑&gڬSfN:{ygP"/_~J @7/Kͫw@}4з@ ;@ٴf˲][Zq5n[uE߼~ 6L\ā;n\R'G&UNteO2?8Ε*4ͫ3cne3Cż.[ /ǹ3g\}Z @J=SgS0p dӏ?ۿ?`I (X %Z' -(&"~b"Hb FW 4 z깸]w2 xL=p<!DfPdG*$F6OJɤUFOj Yb%[Ia~ifWf(gf ]m|gb fZ(ɨ&JhDH 4>x)㌞Pc8ij ̛r k5tjފkjk l۝Fs+J(j)Jw^mnVq nrg"{^kj N R'f X;npޘpc+mD,Loq 30#ɠ~GU&r.C0*Ls/:1W tУ` =tҷ~\UNQ 4 3ϜWo}uSMWI ׭ʕok1sէ•v]yӧoWIؽtj` SJvcV\WҜ(jO,+Suzme7ظti^ {Xl]-lTKlT|2d+sVB]ՖUmdWdn-osXmu;7k}[_wĒ.~^0i+寃y5Kxd+ kް? 1v8$.G7x,.aX*q1K!e|x3I ~cZcH"oGv jJxZkY#n2v<$oW6e0}ᛡgD+/[3_C8c6Yg"~DQr科E]|?ūɯiNtYw3N~Ff~]Cd-td#qOw}7gkGgyH5v?fKvrZ$k7RWU/(b38j-H7a6;Ha:ȃ?Xw2C(r cDIȄ'MQH4U|g=66}K3ndR6fk?w3XlGdmwXeufx|"}x(hxe)hd{}zǀByvBo~rFnDžxw_~!3(6sHy4etȋHC|LɨȌ(hv rmčHP r2,XȎ&x0IJvЏ'H3?] ^(H !|H1+N) 5xVch $irOd#ؒ;*kcnV(:(h78a~PwF91%)wfbR Til(#ȕvSF9go7j(g8:f V؈8e>QV v<2Ytv3T6fS9fQ?i#i,y0&|gHYu +^YDtIF,蛱YUt暾P)Ii׉٩ɝ )Ii牞驞ɞ 9˹+' (+2zJj ʠ *Jj! xX0p '(' /@5* Fp R @A:EzBJFIHڤK T:OzRXZLڥ`UʥcbJ@ F縢,Fu* $4%#㸧6qc@U8|j ;z  R  ZʩjzʪꪲZ jz*3rJ w.:S8A& *EP.jE8 R;:  *2𩣺ꚪC Zjگ ˯{z. pZ<Ɗ QDE d))*z # +NıԱ   `0a> 7;?+GKHkI˴KE JM0a`@0/=EZ:K(j/A+j'`(q;+@dk:l[ ? 801_D鑸E븍 +K;빝W>0r;1;k (j{<=+<+͋++л{ܛ޻ԫk+>4+ntht0˿ ,Ll  Dx!'{ v[*P\`ʧs jP-1:DLr/&LJ´ =%Èкz;7zz}j Ň<< zw{ŝ >M ad S8CƷ!#Kp`b89l9e+]@$Bu\JPMƳ8c8 pєW-L {)Ӫ;ȫ.ʅlVœ f,D"u|BV.)i*|p+\q79l.;9 ԭ3Dz | ALZ̨ ׼<|# \ ,Я`C|kn|P0@ !uZ%m':+6 @:f|9ґj?v*ԯP*l12JA@"Jh1Iy* u-O])5bm WŬ.oǛ 7e] 7Z BCqIZrLǩDh#:휥\ڢ@} Tԭy;'\::̊kkν/}d-A=Ap-twEwW=0Ј*²=Z|Ei=K-3,ߊ-E]ݭDϒ + $kuKlͭSc7j8͟7]ߝ2J Όݲd 'mq`ͬ >kZA jFAT< 'ڼ Stޮ}ޚy'!@oFGn5p7` - ,m~ 0gi*5 0!L7p5 ~ޜ Lۂnŋ cLF~设nAڡ o `2 w { @MNTm' +1= {8s{ÑC2PPl0_UoVޑлޫ<*_ 2 ܰ\Hnn; +P+P'0/Ptk-(^//_/,k?]~4~Ϯ:c9,  8L9k_œb]86/@VǏΘPuOտMn?ŏu߿oyLu:O Oۢ.! vųܮߣ쾶{/@z$B{ ) "8XkDZǏ̉9N*rЁ\ɲe| i-~4o)/Bxz}Ak/;Ԫ @ HN3uA4.8!B(Rb #XVx)~"-"4.gގ 3XBIA"bL.餌ORVyC6I%T(8cѶJ'b) xEx|矀*蠄<&i裐F*餔Vj)^&ƉfUsP6y髰*Q |\ 3*k,)@**͞Y0 @Bdž+ښMl.0funZPBm֐t8J,p3~Jl-G8&8%,0J@NIrE'?c#\r0,3.3|Θ LfJk}VY?ϵ8r5Zw_6c{}Qe}6k6o}{rp 1 |HF@d @4AUD9FOo䗃޹s^癇諟鞿::z> /ԠÃ&ZG~.}nˮsGO/~ާ_w' nr߸ßߝ&G@u4]h"Ё HVp +Ey0T.(4a QA.! gq}_W?MZmr&  G4b \M|bD*JS"x.ZZbE2cL#x6jb?HGB6n#ٸ2D! $yFE G7INzw?IT~OVe)wJQ̥.wK70I4GsG6M&F-3bZ0nzLDI/iIc&EΌ!LŐ $o V~=Д7,-ƛP. xzI C4DHGJWr(MpB!j&ӊyELZ/* P 8HMi8\ƢMk<9MRRI!tPJֲUeH"Jj>,k5+fԵGk\׀6e0D1~D11aKKB1ne`XRc+XƕќqҚ֚d9ZjVmmd9j6almW;NpI פF]%o{V󶳍m%K[N΍ne5qKR+!I[ZsakKLx5yM {_Ġl ./hhS{!/_v&,+ΰI {x'eF|!īhaN`Ծ1=p615ӛR' nLʮWZM1^;u TY6MɊ-gMLFYe012ٻf6K1G*gTJChE2_߬юX4U0f޳>׷5,t{R6EZq]UWެk7Xڪzu[kcK]=ir&]':/jaGU=DR!c_7mavжuCmk^U,dѭ]VwukV.QP C%NpC̴o4} Jܮ,Mn~~eqjn+W,u oxS7)myS#\xAމrpwJS2$4xŗ3ZFyWd-Nm*T yX5sa{uKkpߦ~ܴK殜2PZۙ0 x;PKi66PK,AOEBPS/img/meas_gen.gifGIF87aIƽεΜέֵ{祄έֵ{,I@ dihlp,tmx^|_pH,KOIh:ШtJZN%zx"CQ2XxO;+-9MOS|QPhovlFǻj=D0~IɓС\ɲKqEk(ПMV4AƳϟ@ -󥵝F$ ) %JիWʵ4*%QL$f`]˶۷NCP{ /ܿZ I16ΐ L[Ow_uӨbF|װc˞M۸sͻ^ȓ+E|@8`<4_ӯz=|ަɫn5/Nx)ϧϿrA@8@P@,0aKzWN `eɣLJs;hhL Y+D _ioz 2mLu\lzi`(>AK`B 3`",%LBbEQP)@A,Z)_jbi9jL5 . IQNȐVH mxvPV(E CQ B%n `%:)Z^ 5G.*h^ c](2vfL#EШ6 ܊EXvlס:RxYщ=nGHbXŢ81M ِJVґ6(bQRD+cIKs,s,S혩q?iJfecشj"PB̚6]rf, :vs8 <Ӝʲ3K%*յLjWsǃ@f6)[󳖍=DFF6@s f=ҒR'JgҖf`I$PQuNEQ0S&GJG/6+Ԍ_+= Aٞx;JLR T4a] k0^$LZV8mGַv*)3Y"@R1yɯZc-K՝l 5hjwYt&dU XYW+̞d<ؾvHp@0H`bģeM+J%9WÐq=Z΍ JewEtz(LݽuY}>ቹ;꒖'iqj]뛧 M3}'u&! 6g0+36"0 8'YüRDA޶4/_"0yՔ#/`RӔXNrRp~c+GΛeh ޡWկ]Ⱥ#\\5w*r*9vs(!KעЀC3{4#-iS\ݢ*-ӘNͷaQZWjOKZ"e(ꊷkLA/:~Ԭ>+O!?mdRUp!{8aH& `xFж@x;-+8&/ًI (Jf8 yT ,Gms }z׽jrxLD R\ ;4bc򀿼<`me| +UGH=z:ԧ;~P:գ{]Wm!]ڱגfӮʲk;.wѽ;ɥˮzn:i0>?N6TAeRVdS P(z$rcա?9c4=CZlY!/JGdnI; !(([}hDxd!ilqw;gӯP/@ѿJ7 Z&PH!%3GS5BL{W%dGcWgy'z`V2T H2u.EXՂ!(~_6O :ԃ@NBqH.b@EhMbڂ' R8x|rPqlzDTj;E( |StBZhP+bCzw5s{xTE^!YG%]ZI#(H\M NxX[!؊H ,x8 H*ㅙWWg3R!Zȋዸx{ XVUX 3Է|(H|{SƨQQ؍ob,ը/Ȏ84؏^/ y[ YN߈}GFS&4S AGwW N"HqzȒZ8XNђ %z7lHkp=޴MUU^R}ǑaYUTPYuTc3xXȍ؈ax>6hz&ӗ/Y9(G6$$ 0 p 73d7Y 0_õ:Dbe7+KYZP S; `RS Qgπ"vE7iy7&&\ h%&Rp d%^֡uZ^e\l]xڠҥ|vyJo։`9 pՅgbdwڞ;,Z' +œy)g1IhՉXBh``aҙc Ɯd*u'3`bZ s2U7O%\HY$7otژyzگ!;PKAhPK,AOEBPS/img/maintwiz_opt.gif":GIF87a6N罽{{{cccsssޜ1c{Μ1)RBBJRJBZZcZckkcZJ19k9{BƄ9991cc1cBBB111RRޭ֥RRR{ks1ޔc!BΌB֭R11ccccRcc1c1c1cc))){kcccޔֵΜ1c11Μc1ޜ޽1ΜckΜZޭ֥Z9Z)RJBRRR{ks1ޔc!BΌcBc9c1Z)Z!)RޭkBkJkRB)11ccccJ)!cc1c1c1cc))){kcccޔֵsZ)c11sZ{έޜ޽{ZJ)1kk19sZB樓ZcJ{!)1!9,6N@H*\ȰÇ#JHŋ3jȱǏ C$ :s")r [JѣH& (#N $4U @Q"Y5lUC}k@)}-θ\irܺ]/>L˘3klY 0 ( B I X= 2h!V'} 8o{mdV };%t䬳/&/ߚF͹>z3fGeYnH~|K9t|q <j0Fo±Gp(7l PWɷڅn\}7މ)bY8oGxL6PF)TViXf \@'˜dQlp)tix|矀¹ j衈&袌6裐F*餉zF@d馜v駠*ꨤjꩨꪬ*무j뭸ji+k6F+*[+b~izvk뭺[/[o껯)lo&f|T684X$.ndfѱv  Nz (G +tIV)T1C%.wˌrS[C:@򄎌Q/B6)$Onl #{V g9+lSafcvlc +zPE['<~ST@[eOrV:І2xD!`$\ЂЄ& HGJҒ(MJWҖD Rn9@-Tʐ2, L @.*DJ@t+TS[Ԧ>UIq`$ZWѥknpVAD2YTB6hVo-pA tmZoaָvhڛ5QXژ` RzԛmnMK 6Xtȭmrsrŷ0pC\"n$ ise],ҕ>-bQKCX*^z=s _Oɰj7OVNwy&{&I#klYA;>EX^^ϼ hW| s@RPEh r`s@z@W, &uZF\=%(PP9Q[Ec<hHhh}a9aw=Q=UL\цxW9C{؇WH؈"?XH!/m (n`B/PLpiXACa(u^{H $bȌ<h!Ҙ숋k0`#X訌x舏G!IŽøX@7B8[W>xx08) I y89$Y&y(*,ْ.0p 3q8 2722P7DAy%BB6p8IJ9EyULRIPE@5_< jyDi汕R)<riK^])[Q9q9WQ)WIV,W =Tu PUQi>k)0T6p2e)IU7Yjy쥚=ɚ!a%șʹٜM1`Yy ٜٝy,yyJطK9-9YNy)=sh.i2b*1fw0&dk:#4Hl$/ 䟇sHWl@YH'IZ|DƠB7cç}Sy j/4j1Z8+3<<7ڣ@}?D*fCZH ;GL*bMQP:@FVyWZ*\ڥ`b:jPzpzzfh:L{lєM@g>w 1kzdԴLPB6q/ʆ cH& I@F7_;pkzJdyz6cG ħn#| elvp*eGrãe~ zhl9nZa|j%5J(ڨByδ}ʖ@ nڧz|ԩL*pV"ъiZ|{pf{{jM,z ~J|*d8k{[{zGZwf"q$[qffP( )9n4Bנ77Уq6wp2[Hڢ냴$ڪ,cs\Km^ƴ{mQbh5bK==ܦV>k:MkVnno;ñGaָ;izkKlv׹KCrFvrBJ [5+uWWEeduTu`tItKEOkC[G+GKG;,fvtLGu뻾 u4[˽ËFrwۺwyC|iPK٤0Dyۿy%u\| <\| ̿fMe L@-Zc~{8&DwI;4,E\NU+c;kǨ\?'dwd3FWT\~PMIUwŸ"$־\<Ƅ dlh.lLw` r:p"JԷ&ђjscyhJkj+ szn;6+Cif; Aj\1qb57ʤ\ʦ|ʨʪr2Kƴv7~)E}Wc;6L3˵\^w˳"Bƭ=,iyD<̲P*Լ4*l*Tb\&vLbx11pY|=]} ]3AQ x FXP< 1!02=4 B00r@.]B=D]MQHMo @pC<-=EňEXZXF[!LfY`@XgHa``U[pn`}VOAxe@x"7buUE؃]؇}ؐZH=\ԪҩPQ n@r0tYBՋkP "[\qEĽ;[mUmZ [V ͍\B`#CMܼ [`׵Y\MYER1}[}Z[==`Vp][' \[RU{BuT]\%$[ vߡRu[BE02>4^Jq MXvQ ` PTm5Z|XU>"Xoe-'\t" "$XUwT7\=VU-߈!-c~YfNX~!U.Z^[TNW.U_Wn7p TG@z~zn- ".Ѵ^~np3 / 8y@0 ݌0>ҞYӮUZX rap_? վ^،q(kP"el! َ`/𲱐C(*,.715530`UPX!WPB>2aJ G!YꋱMAA^70JToCq ]!AG`:0;CqOC]/_h?XB@!AA0`Q2` b協9_DWH__Nrߓ _00aa,Q.))_1C@ DPB >QD-"18Rȑ&@$RJ-]SL5m0SN=}TPEETRM>:cU^ŚUV]~VXe͞EVZmݾWܪSśW^}X_ FXbƍ.Xdʕ-_Ɯkd͝=ZhIFZjfM[lڏ_Ɲ[nޮ\ܷG\c˝?nsխ_^v ~ٗS?{vTO|uo??o@뷩#@*|A SA,>CCt:\D=p30 Q\kHG!D2C"S42H!!Q)i{1>/#R ̑I0cP,Ѽ5$3$O7ǤMRP83mrt4Ҽړҷ 4SM7 SN?5T<TSO]TTWeUTu5VYMuV[oV\w:]{6G)XcXe-YfV4gZ˦6[mv[oXp%nE7ݴU]wb]y獐^{U+^|W_~_V`V`Vaa'Ub/Fb7Uc?cG4 (S^Ye_Uܲ Xf ؏ιdUܬ+<F)3xL мDPkJzQ{ZM%g뫵S²1Ho0/CW Υ!K:,mƹp:O- qo#DsO>*SJ1VQűP,;396ЀԞW3 oIh%p>+ -MF @ {5DLd4Poka~hB()Js{!8yO!T&u F .F#^D7:ԛ>0oaj׵ʑq"rF6ήlI@mvckT4h C4w:XO|#=Pj%|d(UiRҕi+eIVҖ-uI\җ/^ӘY 0M`8f4_L @`&P&T4 gBI`[Rm6z $Jq+ & nj"69q7Y*rjP8p3w#"P5o blvg H6s҂IT-TISiJճb YnxQoѵ[:Տis,젪%KofPF,&N \VA0AZ_mi=kZb6L;t[ַnp;\׸Enr\6׹%#՞7Tl͘B)Vnx;^׼Eozջ^׽o|;\ot{Ufs(`W=pok'e0x 7x.-Lְ݆;L_U \E an ,Cx,dэ01L!y>Fr|b*W)ʋXLrWϚf6Omnw5lō֎[6ѝn<ޖC/8ȜRLo~{txFmwPsz hDӬb8y p.OGIg̢Do$l%Q/Ӣo~O|g"zЅ_*_Śi1(Ώ~%-\ḏ w"'w+]f\zgKF>wg/ wV;_oiKv񏇼yƿ﹗|5yw-Eʏޘ7P,w) 0ea|qKis 9rw ϧ89~ ^҃s| gsɭSx!:d'I;/?së4j@?)>N,lLCs T r=ѲcӊK[ D At3A0||4t1AԠ##;5왠I?ѹ$F1#D+:% -$tH"${gB,4àHCBz$b{ӱ3îKC.IJ=6d@ ,2Aܷ~?dBqimfept{wv|~eØdsS! %`NMiHj‡+GCI#&S\ɲy(_ʜI͛lbɳϟtp(sF9nHËOn>_nw~ÿ(h& 6F(d(0P#\ˆؕ Dbc"!±baK!H%<7a5A"pIupwȕ' LBIru\sIRXj'hNC~u^2XieH LNg&QjK\x6:ޚEqdGfrfYgo^ڝ衚jݨƊ fdXƤyJiܠ* vr'J%Pɝf9K씴fdN굅 Z풆kZj;%komݦm,e+plƲ,Iyp>vI-v,p[Y*L~<g۰$M۽,28JƤ>æ:ϡ̧,[LA.*@sSMjJg-v5{5X 0/mv޴.6r*tm 2s+2l \z x4xK Gn0ϗ>Ljw(1LY5mMۜSm*y^^".h㵮dFpO>x¿Ky.WWι%K{nGw4wX+<<_Bx5/b\f5.cw߶H:9R>=Pwt'9I}ң uGڿd(&VgyeFjǰЈ!Ei*XtB( >f?ϋ!ad<鰉D Zp!_[eag_L]s 7)tW6J{LSo:*xp$b[81Mc .5[{e➈>ySiIml2,L`K)-^w^!L:&_EI)i|-͕cԖIfl] @psX@;6K%1UԞ!0rh87 >khd fkV,O?7Yq\c))2ca)M:tL-EK!ni1ͨ//o@ 7*Ԣ#*RԦnKNT-f,oTͪVr` 5*ֲC ֶ~n\ ׹ڬ+^W n&P ,a@౐d'KZͬf7z h9Ȗ@jS;ֺlgK["`j@h_'@ P=nr T}nt\J.v{Znx]򊷼M/z{uo|^v7ůs[׾;`Np`vms+"Mpj;y BLx) `r Đ. [Sؾn#Wd;f4؉-m8Ӧn$$>qfD)!L}:+m׀[2}(wSs.תhG {6wL5%јs'Y˧q:<^la3]X'zc$NhOpNxϻMYTo> ґCXe5laxhlѠGOқOW?$2g`ML< yt& 0⌺p|~ЏO[W dݹ#yn~BV1G e9Ͽo?`L!wA'q7wq @{*)?|=|E؁ }I${||tBQk+4uySF8~3~@"B8DXF $XO2q'4,4$|w:~R|Cy88C@xfxhj}IK({hxM1؀~Z(R\XO67(Tk؈ц/WxA3bDyJw~gPLJ7J]V般؊"&GP`TxRVPYDwx=>HW1،h}cWSN~0y4]:T.#=)ʼn|#yXQhǃCcVXx2QEcPE{Hcċꈎ2Y8/KxWHs7CmcJ?'EFY; 9h8|}Xx,Ohu<ٓؑoB9D$&FDJ zN4XTYZ#hZjȕ`ДbYUIfKjٖBɖn,W&uuX%9Y٘ )9Yٙ )9Yٚ )99ag vIifx`X0ȩYXI Չיܹi੝ٝy䉞晞칞Yٞ  )I:Z z ڠ 詛s I9ڜéV(^is"zrfpLqAnwAHq;/(*nM7gWgATcd.ZIh)"l,1t:J.6p/ nJQ2JcCzQzSZacEbA#fop:utzfgxv[|:vx#ay&rhhh6&d2mx hpuʨJjY oNl[~DpCЩ{Z0`j*nګ grĚZ*ǚ̺ڬ%1eF*ڭE djZfe/¢e,pCl*z*K;{  ;)#c{0dcIl-zp"fe&Kjk ˰f[fX,4{ k8<,)kjj@{%Xbʥzd*6jO!nZ0;Hi-h0O۵5{f%j۶;ng!z++%+ u1c;XECݨ2KXGx{S}S6Y1Ǎ{wHpG?ˏiҺ5zۻ[w[r[ ƛۼ놶[oK֛kT߫J:o@TwnʦL #tQoيfZNK`!lz&KV +ttdq o3x#Q]g |)9LGØ-u=IS缒V|vM k,ߊW-?'>%)=-7LՑ 2>\ ݳ;j 6ޝ{ߍztVi||LЌ;߀XRIU vW] #~W+>/^=iNgkΒ#Q:=}Z]U] $JNt~>W}޸ :w. 8"m}S8׭J2c9h3mo,K+ӯA -C﬚:lˬ[D]N@~Fx{m19uHx|G d&L'o,T-\ 24t5|6ᜓ?2>G"B%2P+ğ꣨\@rCM?Rs ә(UT8]+.-KJSe,SuEPzJ%BRBY.dIZ@ClyAUn͖own=Mv1xWzѥ|W~߀MX%DX4Xtu V1Q-UUOBT=ZqUш+vb:6בcIWUÕ+uaY`: Qՙ@}Na,-kjשW밫[\$[]d+[ɣkc4jjÚtT=jWKv+czpvxY=iX;]1U\}~J+WrugIզdyuu }GZ|nΞz˦ǮϞ{Ķ,?_域ߟ)khS@ T@>)XA ^| ZfN/IXB)T Y rMp+ `XC@l ~)pG}C(E(^1I]E/~aL!4n-3TcC)V1W*.6pcG=QOH7:qbT"HG1\ѐG,9ni!XBZl8(Tq|#iYK[r@Ab HLB&2)DbQ|&.YMk^5,DH-z8Yhs4:NwSt O{<=џV$ŽϠ AP ԡD%ZQlPԢ}F5Q.ԣ!GEZқ)=IUR1 LiZS9NySo AiObGUaR NHڢ+vb5r[tU$FCXR-e!Q%jWg g`!V2UD%U:4.R yອ*60ͪnK%Ϟu5Խ $VŴuv>.KVuee>*0+ y*r {NiZc+4vcDVfeגRmHkQ!ռyj;߸I= ~iQɾթ\` V\%40rp}#W:Ĵ@O8bXP%.b/`e\cרx,f3YQӴq;c`:d(FؘCv*ө#3SNd]#s̀^OND7kc{yy<$g^f8=r'a_y{oq?. ]Z)G5w |S:}&5UO@/x҅(yk9a{봔7}h7"ӵY~8.zqź=0?y3E;e9C&x)ECsF}pÒ2|_cyz7Y}_˦19k@|W_| ܏g{5C' x|G}7uN/h~uz:qw? D/HnMaM"P,a >oH2̮᤮Ǧ8q/MQ̌ލyOHpь(p▌(I-\MO-0 -^p YPDN,Мo̐6Ɛ Ϯ W  ʲ.p0 l K(P,GL 1Qn]&Sl`P 3Q_aoE [I(P0UMP7ZHZp`. n]1(1^Wm-HqQ/ِ۶ eP?1"ZӬR<0w1 .011RԲ1U4R6nqgp,$//yp'Y1PJQer qҞKn Mq"rR'kh*}--rR.2 Q /(!n!R$$R*11#g?Q2,wKW+&+1D/gOOo2b0Q0wcI(c l45Oբ=Nۤ(MO3(Y  ]7A..)2o :;c:;%+Θr2A=?212r(M4n7Q0ψq8e&- i'S?S/B*8U1C_P3E3730oi;xT<-  Q>-SEs rv,)3@/oAgA 4C!QLpCUS7pϴD4ɔ̴up58oK R*+qTBIS=!4Wu;[UmdeSV6:[e f}E5=-6Pku\,KG#/5g1iϯBZ3`?8UM_{\q[5db)b OaqUXt_ gFI`nPKV?81kE1 FW4auP_cOc=d6/eDlof'sit9sSt)ut]uus5 VSgks)UphQiW!´6n4mXӔlaZ5[yvi]@N!wpmXw,1cyRn۔s0?UoVbd)|=tiXwz7}%U|Ur|)ks/o_4Z7U9xbWHٳLCׄAVv[W<_X +`k΅kksOl{ꇃi鈓i鉣KM届XXŦ؋X˘،8X؝؍XX؎؊S(؏X ِ3Y8ّט'ل ْ/ُ3Y;?XGKٔSWؕ_cYkoXw{ٗO 6@Y7ٌM8bamkL @@&99>YۙٝY뙞ٞYٟ:7 :Zڡ#'Z+/M ùYHxQ`?zNz[ڢ_ڥcgZk:pZimڧ{Z#ZoC<I?Z9& ™8z?˺:͚z:庮皯:zZ۰[ $ڲ)۳ ;ZKOQ۱?۴S۵W{_{Y;z5@yrp8t8t[[{U{ce{;{1[);ۻ˻[;{;?۶@ :H:&`` #\'+/3\7;?/|<|! C_c\gk;C7 ܿL`) \ɥA9ү< n]J b%]"ߥ]Oե^GZv'@(e#!e$/.(18=GF뵰r ǵ(-b vF&c_ftǰr(+MkR@q|M)峀f2³g=}q.it8@fuy.@ ~rJrNjH+gHGPbbe>t~X*j^nm^D%'hbb^'kh@6xGR0D MK.HV,J_Q|-*e&_hTR?X˯`kx!>`X; ?+?z_ǟ_ן_?;PKyۊ,,PK,AOEBPS/img/maptbl_dim.gif"RݭGIF87a焂ƽ!aƮ10 1ce{}{ec01εkmk֜cecZ]Zc10c0cc0Ϝ1 ceZYZަJse101RIsΚqΚ191ece1}eZZBQy11ec1e11Ϝs333333333333333333333333333333,@ǂZ < &ݹ"/0H?@?I?)&\\]^b/֐/ (@j "JK 8Q‚ <cɑ&IL˓0We @O J(,gtHS@.H" Vz%bUZܽw|Pa!TP !*.R5U#1ah#eJqVXeϕCs L=h}^=H6ײTzj׵c M|> 8ρNu`kνËOXӫ_Ͼe0/ˆ' @~ԗ 0ؠ}B *hav (U0AHLkFgp~h݌٨*maADv!L6)!NF)Tg"'z"l/&fg9&eޗ&dgvJfhnX`Af>X塈&2Bd2褔Vj饖禜~w@~H舣>):**d *ާh`zŪ*jlẐxkFkԧl66*r+r *j@{mzŒ*(p zK{(ȶ[Hkq窫°H$ܡ \Η&e4|"ܡo+,B<(r o˰H ]0gs\wM jmMtgv-t b,baD._V(/o\H6=pneU Zh* Wvu#Xz=I#JMLET}!4G=MB ΅: 5<Y"$7ȍЊt0aS,\1dn1X۟./HEj(?cEyZ'ZQ:^tթRԦSOMG@,09j݈jQaJӏ:C&IwP ¡thB3jMԩO ,Ţ$4$"'.P#hHЅX&% U,р2돠[@ ـR}JBmbZL=r=h_lMՆ5;k/!V, hW(7]*0QCrF SF6t{"ZyLK[_'y#Ϛ6F-OWֻ7?5?C;H=mK\i3O|JWC_?og~9_-;=+UpW$UrwwYԆs9'Ap%"%%>etc^ci5t6@cem+ttkx7x8y'nWhr7bfn/xI8hvxwTҀYZ"|H3фpPMxdGZ\ `aȅdXbBNHk5@J8tx<8C@zh=zVX p @Xx( @؈舙@~}z({iu8<6j(t +K+ ,0*P Ȍ8X؍͸A 8 2;T OU/P. V[ "`5S+gU 3/ Vy1x e"w"'u w"i'c’&yi#zBs;9 0<ل1TєJ)VILThHG0Rh X (@)0xyi yH`釉Y٘阑 9Yq.0*p{9Tqٚ9Yyٛ9Yyș‰3)F2W@x"$y$J2ru/fU?f 6juw7qYBUr6Ed{RtA؝? ($S, P=` A{'ss.C;j1_pj c]dlZVꂽYunqR:WKtBwg2vJwڦk sڧ.chIJE=|sDJF'u:VffBTwʨZ*j{G7Vz1*Ršv:7'f֨הm|Z%^:cǪoF:-xtDx/^*b'yrXB:s(djlG_1b*Vx\*=up;ư85M$"SrGNک婤FzzhJfq<'Nbwڢ_\oZ@ .w@JvIT8˲A CkDw0fFggcIJKaũCH!ʥ6Jq:Xm_gm`WR=t{|zGI{O^˴jHxG(|K~g~߇~N$O{UKJtueGzlۊ,0kR Kwn);[&z =$}P𻲧rdGEGEüڬ7HUf*]`/W> ZƢ嫛,w{̪Ѯ&ˇlBuQlŽ,=X.("T V~@ZNqLIȄA9FIH p b@`s^qru/b`2^>k)А钎[>~阮.>kٖj at()  Zx>p@) \7 +PO00Ӟ>x.'.x鮌N.N(ҙ58 )#QqV \ t _ c^p쭠o YvC IQa229q >%B!@O>oEKOQI:"Gh8.k  O?ЖPB@ }   򷀒!y6:i6_5yq"j 󪡔PIIO)ߕ_WI5s@ox` xoAo10DC@o0F'"z؇@0(H8HPxȸh8(yPB@9"*:JZjz +;K[kp ,N^n~.?O_o.Z 0 dBI$l=ԊIY_1 u EXV*R1?̔ ``X:h]thFfv $':dJu%sf*IᗪҘpi[nW' u:BzjIeש%g2E抧PZq,X%)J(ZN ؠn-SW,Kn枋nn?&췧kdÎYꜲ0SRpóX!lj;ԡ\N|ae,hb{&q쨗 ay jȁ]̢&Q';s@7#JaL}Cc(o+te&!tb#f 4N+cmե`nvߍwzw$G] wPmni3Ն]ٖ7fUx>(0ZhB.]8 kQtP?=_1R%7'qyg;3Һ7忛cpO?xGɟpސ-h! @TA `^<`1{:NW3DV/ Fwp15ͬzГ&Vh[Vh:cbV "HB!VH}dC9:{ ;4d|Hj)Z[GN|ƪ^R4Anty[+;Gc"Farj[? Pr$Ȥёq(DdS"(ys|(sGR%  H^C!A%vdRJpхE˦7]JŒB3qB,'0K9-kÔ,DTSfdccmTf8M Eט ӂ\J0s) FJLV2߄LgVs̃QXOu,I1&Ϙh|cHOR(J ըJuT*ET^TXNQsG_'S #fYiOc&Le:B3rYMkFuӟƊxdbV1P3jB ^34%l>=T}FH݊ڇ1$?y@74c'Hj:2"qej9M*n,mrҳjPtSKHKj!eYLhVdr3,@5z}Ufx'#Ū `vaU$3 $vϻC 2cqԼ[D7`svBP hOqZeJX.< zOH3 1.NT.q,38~Y({5uu36lCegN;u}hwB6  |/pV3g=K|)ls*<c\$;.|'۠mo>Ӻ[EI:Rhv4qnկ9,m5!žv>üZ#UwdM3:$||^䶳pX1*|[a;ke|xnVG;7E{qFu]O+TKBU( |K%Y/s^ߩrA#u5ˋt&f}iZ@&|TgxǷXZ'^w׳\T<||nwrwzHĦS5x"YNxGfWK{w7f%yU(hgXyG_j.ibuς~G~ \7\"{ÀLus%aFAnb%'^W[Xo4Ŷ;ԵҕA GB7ywXPx/ wdG}8}(HA_T1v[z*'jjd hw=|W[xythGXƉ bAlhh᥁6{0m 6cu2UHZ؉cPuQ ` `KEŵ2ъ}8w5mQV(m$XhfȎBBa@Xnxtd]wcks8WEye8}T=+*߻Qzˋ5)M;iiGۡZSYyo" G{0{kxS#;aw[,9/KjXxĺuVӳ+I9JӪڻQ\6zիs7z{LP˚ +Y sqk}Be;%0:˿5SxcS3*ǛiI y,>sA"fz=pX\ZXMĦl<*K INkFU6/Z⃵ڻ4۲B| M๫F3;ŵ䱠-(*Qv{QR5ƛf5? y3,9:6l,t?r7v # c:^'+!gq ')gvq}bWm`Gњarr@r$# M*'g]bZP<9|͏ 0)jC5f7$g'v0m7-&O]v-cG_rI==]&" -MyܰFj6$ԵGܒQ}6h PK-j Smp6}/vY]/#U-IHh ڡ͎m.Rˇ¬lJWۙ~Y%ɕ]#|%ZVcp ՝NxkA$Cك M-޻یl^5 +d|)}~Nn肎聮腞茾} vNn"|Qn-P^apb.}p'Nnw>.&jN- `j bbӎ՞׮-.n֎۞>鰰̞ "ŎNM@_ ' Oo o+-򃙗*3O5O"1o9;=A/CO ?OGI KO9oQOUo8Wp E=r [ߍF`"" kk `uHp{3 \ Pp/ v O_/O?_*]:p"lËO~Z1FͪmZ5\cjؖS9 ȃ_{AF+D(`bN PS좚c9tYehf'EHf*h#-2))A<"#0dBdL2d$G^%[fɡP w奩l-2P3@5"|ugX$e.s:NЃ DL8bDC0D ZX"3(3z묮[&2T.eH?eIFYvV%)g[dsLu|`e͟і~hqʁ$, J !`J N A&ij ,<9L-"~{.?$٪G/=NOogwfއ/o~o 'L%8'H Z̠7z `7VH W0 gH8̡w@ H"q C&:Pb92&Ud] %sJ` HFhL6JaCz  GpXIH0rĊ@P-T8IZ{p\!8αk @ LeUVRpdQJXTUp.PiSd?IΒzL:Rxӕ =[iO{SD${ҼAoPvXDT=/eR ѣI ys3},iYKR"HbԼԪHЅhD-UT Xa"diY{) oͬfEȁ*n T !H5Z8t\^)jS4T%,k[Kr3 px fd[ Mos ]G xKMz ||Kͯ~K߲dnv⨻&`1 f k x|g7L\B;< dAk**Y #6,z`;0q=Nm-[;;)fݺ 0V-YYƮe85|TY\üd66xNJ*[wLe|Ҙus,ʬCƱ[zhH#uiyn/-SRDfemYw!ӽ~ t-ozo҄&o;<x/.A[8Ϝ ӜgzHD:,Ϯ5~īNq8he 5{>rA)mipܓ!:S}cZ?ub >'W?ƷGӓzxy֣1nw7=2=9{t .O *'n~]]n4dwwP'e~~Fw>+xCx.WsC'jVgS}~Xwy6~GAwWwFw]\]skezTlguHjyiGjw]xXwW}؁oFyyysm%|&gh~i&Ƨ緃?/XzWzeUjwwgM97uGGN8}PR8VUuDX$FQz}pHw{qi(Jex'ׇ*3l'thdGeudfsZۗWK'tƄ.çHȈlddEw#(#Rz{urv(tx}Vk8:'h (,Ixe"grWug/vPg*ŀ)8dj7wLjH˨8}vb8i6苚Hyl'FHȐh'87cYV/Ez/֏fk &9|wB8z#Wl$ْ:ٓK︍j20l9ɔN9b@ȍOIpQP$-٣ 9C xٙy:ɉ]Z R&1*1Xy9.iqʋ696j iRl-lznZpĨt:X~x sa֛y饅jXm:q؝ǙvGZy(x )z֡F:H o@z~݊]zDZqkd6XbJz ڑ3WyzqVjVVhwJ oYiz06 Vm uG4b y.J04[6 ~mTJڮΩ"Kl$Dˊ0/ 8ۊnV-?LATHK KMFɨHUkIWPG L;E:;YyyXm; еqj\f ķ٢lor[u{@?9`Z _+e]iJfS;`붤k[08=F~ {B+oVzz ɤY4ռ;(:ٻիz#j;a"r{K6Ywګ{[2W|(xԪb^i[+{zv1xrڬ艱zyx˨K담{d{?J1 *{[{dHJLN\u»i5(j!bMiZ }nY+/FeΦHo_^HKP~WN lb,.CJK`x~FanopN < E &Vx۲_ c:'MMI۵}>Fa+Q–aܯh;麄'Dn .F>.H?Y=FTIu ^]"V&\CN1[ N~{\vҫwdn#]`?NnA>+ɧ- n th+ۤ|lA<lm]knp` O[1vޡϔ.ӜI&ۘI݉I|i(_7i Nb&/눰yv/5^Y L\Zy9Zg/k%}%/ٕtBeǟo/LjxB/oc>Dﯭ6ž[ۀ0 8(@hXH88x8X9xPxh9JI j)ʨZJ*jk)3KaD~!\x.FlVN7<o,A 偐)k38z:e=s Cu<(ġ/ 3hRL%p<0J яhN%FR'Ir3+[n\AU|R]أхR4m”Z>UiRu2cd,rƂlzlmpD=hEqIk,^3Y:6:?V8ri]/N̴n#-\C7;e>\ۻ?t9sݕǷ^n/fy`q .`7uih׀}~{ Hbv L!X}3Yevfi[)b\$ZSQ(VIP-*gfHP-tRϘGM'c؏yEћAFc sT}Hv'~9YClgfcuTmbꃢoy8hZpP{VO:sy6j $(eڭuZ5Ev#}XM}zd[9$b髫9)%}&wjJ,%&)~.lU6"eQ~^$v}[azڲkV~0!p!FJߔR*>IvV+J䯿pMZl4ߌsM>qu,Rrsy/z+&I5s "lZou^ vbMvf̮ۛ[jGOW7x1?˰avx/θj66 'h4KF7Nz馟z?^.ϡ׷hy.z|+;g2{[pJ4wg4_}nrqع=گ~}w^OT@Ow[tHzqgmhA۟9 jpఒK?!$u1 e`Ǡ ZX3\S~Gh%8A>>=in r2~nbΚ6l%WPQFl>;~ /+ǃ}gOyq˯koڻ7#$-Is5G{o{HPH8 g~$/vCR_{$x 0s5p~CԀ8(3Ȁ(;HǀA{=؀:8GXI|p{tp=7^VZFyPEE/18Xw>>8gcȄCl(wmux1/);dtAV1p$aaT~ ttd=cXs:@YČtZ%yeB%76]#*T.ohxVK[Vk=CE7e8proSI 4"0Uy"@tHb)8Ͱ@hI@0VƴI1y,&X7&k$ypua6ׅЄhhai&sq yiYEYW-|nDR0 p8wtdg5bYdi @o []Hb)rWG3fjYITg'uJkuTsxSU17}YT P) Rة;w f9#diFm6zDIYui ٹN^ea iy Z^ }9fjɖny !*3n8*J" 1*1h87J&;ʣs0@*D:tvIKʤMǃOJzaWC*\=_0cZg7]~@@p*t:qzuvʧ{@Jzy}v:^ jjhjdj[5] *,)JZm5oJpʪڪ*jZڪ꫸J:z 5/aZ/ʩک$Z 5jzZګ몮: 媬 vf :[ Z~  +K { [ [:+&*V /[ k4 {On:k;;IJK@B #P8`ʍ0˵'aˢcYӰ ?j n۶o+qKlkp{su}~R۲bK,ʲɢ]'8긏 +KkP빴'$Kk^ӂ뺯 +Kk˻뻿 +KkNjɫˋ;PK 'R"RPK,AOEBPS/img/bipub_report2.gifdjGIF87ap̼܌|z|DBD$"$TRT$\b:dbd rt*424RD trt RtL,"<| :\$cW ץKbu 0hPWqsNyΫ_^zϋ(|񵧠.oH%JThfvm"$h('cQ,(#r b62f<ݏߕFei$tHCiXkuu[npTeUo'cĠt]W]j de'xf|p,'(1H}x(6 2zN˗X2a+t駠*ꨤj+w#K<*무,Z,}㎆ k-sΉdvfNܒM_Omxז[{peL5Uvə,/wBz^zZhSyV:3ppÊgb@k,ȳή$l,@?" dH>NKmhzՔڊTQʓ]y'vozF *vg.pro`7 /|3 q|u^ƞላjx*;G.Wng~ɲh石Ƃc:8c8NؗǑ{khn&}`VVv^]C_袒m}`[ӌ1.xCL0׍w盯7k^sڸ9H@q ]N1u:nvpLycpa5X;|z~ƒ.I:ɋ!4b5q^Z7zFٚ^$@f>nrSm3F/@Gĵ)06p9ṿ8 0(o'>!dGuC)'ex)0'0(p p \ɕԕaM^)p]ic c eɖjנ Ðh5Ďz؎ꘗuɍ`H)YY Yuxt` P٧}i{HP4ZZGV0wB0d ~d#<;dluU[p05d)ELT @0DƔ'7IKIω9CPY6B$ٞe) s) pٟꟲPZjit)t J Y`PW$C~0ٚNL7:0 #JlGY7ub替y>y7Cي׉x7EFdNLy@z>@ILڝLZHj>cV䁞 ))^Ixfzh*lZ p P `yuE:1ZvafIBʚMFcs) DIٰa39w/01j 8O8~熔YةBJ ZznI@B;D[C  zL۴Nۭ T[骮Gp SWX Y/S7$yE) [C p d3J[5ˣko# Ȱи&{y[+ )k +[%۲, Aʔω)Rv ;k{ۻ;J [+ ɫzktf ^#-3,bCC|L z *sے aȰѧЛtW }۩z 4cp F){y 카ʹjk l(d)IZ" °P&|(*,"® k4\63|:Lȫ@ ubzzP;,c5w Llӽ3{0w,aQw; &2u{I~9y>,[ <@2D]F}HJ-sL]ѫ@ӫP&=G9\xd-b-/]]HHWn$#FHamgmsS׀}RmN="m؂m؅'gז|Mw@`0-aנcm\}}^٧])ڦښֶցۺM\ =؎-ѐmܓٷ]]1w-U-ע=t]ս=ԽݬX߭ׯ=ۗmխ} ߭R ؼP ^؈-N؉ً}NǍ >n%>pM=]m,ZM-]޳m0]٦㣝M$ҭެm6.O;pm֍寽P^S>`~Hc>^c"Np.eǭtnH~k8.=)ZM#݁Nڽ.\{}K6]n߄U^款g"ٰns~pq~nfn4~>?] 鐎ގҽ]'x[Nꨞ.픎~MݩmNѳ뽾ܺy>^.~݆~}0 o䧮= 줮ٞ~*mqNؿ <=nJ?PsxL.+/0OR_>M^ZoL.N go8?)F>s.{o|A|/܍^Mbr?!69.ߑ" }dsߔoNNF {݈>>T~ne]o - o??/?]~A@ DPB >QD-^ĘQF=~RȆ@RJ-]SL5męSN=}TPEETҥ&>UTU^ŚUV]e:zXe͞EVZmݾuV.Vuśw\}U (X0{⣊_uX2}+ %<eR9w=shIij5F=N Ab!ޅR[KYή};޿Qq}7q=zJRJBN"~>^xϧg>HQ=n D B:)s/HK* 20=B*B40AIDq1+1ȗzT IiTEɞ>cR B1r6rHK\QN;wL ϙʄRJ5$ ǝFBk$\ЛE R %N0$0IsM6}("m*5(J-TSF8O ԟ\4QGU/tM;t(AF8LukyW_&UQYue[Y{`Nf NlyŶn87Z\Q[O>nSve9j~o g1g:sݦ>L Zm~ofW5M@w;A6[uTᕶ_u-CF'=_n#?M2mr΍bJDzIkM}ua{gZhh_Mz٣wBDB}Dq ܟN7CoF: JHoe BӉ0yS" !YB_#f|uES氘-ry^;XCԉٖա/s/EIq J!':SF؈1N-6lD GKYش1Yi-k4e)MJUdz^@_LDrCb*#!clq4Fzئ19pfd9u2$g9{~ghQCԠN!zB%AB( CmQ27gNiD%J[rR>DaHRд6przSQ-&I O`:TⅧY)jRԝu(LX TVժW*WdUvի_+JVլgXѺVխQ[:WU*qk^W$X `U"ؔ% bX}a#.ֱ,f%YrֲfC~V%-jMZֵ֮gc[٪ke[ֶ-pu[=p\2Wͅ.`WV׺uu]z5oxŋ׼Eʛ^׽Y/eWo~_v{o|WԿeJS7p%< %p5a7!=C(;c\xt;pe܇d7Ʊk>?rc*WRe.["U" h?Q0 t3.9I g:uƳ[7#Pt}gAPrUL>F lT(%ň4[~Y(KZ̢h?_XFuUjVխe=kZ֧N4UD Rѝ.shCL~ʴ-ْB{=h*'?1mjOvmj_[|v=nro;ַFwEqnuݶTPnzo~5T6NT,U*bxه*Tƒ5s%v1qsݷV"fw<&o5ơ ^q|Ԏ?s\9wK8 IRʾ,5AhLgXl*W&]~96w.sy^v|fHn3 {w ~ˣp܆ծo_{/҃dpO)Y@6PHؓ"[zq>k0De?{O\}u/ "*!߻#P\ksӾ}?0~?a2pw-,[<ǗDٌx#8*<79 䄵@A @>@ <A>ӄԄAEA;;""A&$ B& 'tB)DB#>4ACALLA|$3TA/\C 6tA/ C3|C8, A<:T:fA$C S^U`cJJ$JJJTJʤ$JʧIp| qv\GI4Kxɲ$H}D˖\|<\˛~źK93HMzQ& H.b$G:@IY\<2> ͘KMEѐQ R"#Q!%% "E$5R!URR*R R'DΥILQMP9S2M3OL4O4S-%)ĘIPZPmPx'}Dt'cFM}GLL9NG9NTL M5ULSRUPTV UX}OmUU&R#=+-R]R\R]U)R-R$;eR^R[%UZVWRUkUVlLMUjeUlVmZ-WXWSElVow]o-WUMHi9ELh (#؉( 5D؈XXؘصXAXX؈峐%YD=Y5َؔ ٖ%YaͻcU+%e.Y'BEcR _՜]gVٍuZuٔXZZڦ ڎ}Zȋڱ۫ژږڋ[u[ۮ|_ KA۾ۿ\>#ۘC=^ =hM>`%\ŵ\5ܾݿ[EPuו٥uإ]>ݝݘ^ E>]Uuu]'*^ڍ5EU_ m^ 5^M^11? 6FVF c`&^0ޣ v&6aff.&0~  !&"6#F$V%f&v'()*+,-.b/a1N0&3Fc24f65v8c9;v:=c>@?B6"CVEDfGdpHJ>ILMONF (R.@TVUN0RXaQފRN He`f`^e@(gf/ZhX($gqqFtNgfH @0hf0T^e`8t ;6HNuNg(bf`(Hggzv}Vi(khg tfxf(wg0h@H+gȀ hg^ff/p 0pF0&p~k 8(ugmi8* 80 8 @l P;`t&mptV^qt>jut΃F2؀qf(ePV h ٦^htvPƦoNҖ5 08|^n枉h؀恼 &Ox;o oz0p9kV:nptn8oqh#Of(qHkNiqNkq~q(r ($7O)8]gkq~> .3'tHsp8q?7p8f9X5(afvNi sB'u搎oFO s6i otXp0 R'lT7Ɩ n>'>*pu^p2`qVjbGwhiHghvtvo^utnm v(h&@p9oj#O iրD/w'Nny`q~p-sXWmt8wPVr8ix,vWjw x y?m`xu>.zd[|Wgz.zXv(sWg{d0j['uF[W){G_kvytn1gG|pdzNyց wtp|z{XiH'@`yt|1q^|(_g7~$b(ix9t}۷.z}|hx87:~r}q7s~:Ba „Y8!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl5d@BaBp*'РB%pማS(z4!҇RFȅFLǓ/o|+i.kx7S @I&miג&!`S__(h "|5,A wFPe`*ٕK&Zz)IRף65CV2t9z'%âwN"Vd+Z"ipX{ pb *+Y!e;.sR՝f1T:! JB-|p' ŠY`5PlY%|W P.Kd }<2V_\ ~I&+_NKg OҰ6-һ-> ZK K A-J |ran-~/i;A'ˊg+OP 9[BhzO (A>΋Ar"nܭp"!K@i.Hn)$$*SI1CN$aKHD=v Of@ -L|B`(͠2CVΰKT)iqefY"Dy.[B)IDf ñQLP|pT&>i)kF@J- ZPT I P."@O0V4S(@G-3p - ϕIaISNt't фJ:jSz_(6UiK*U !O"oN]@&Dͤ}Q¨1; *TݥTJ46֮Hc+,AHjo*P F/q⊒rH@f<+ӢV,+68- "NUsmm Bď F3< k;K҂]`t9Kf牮kӣڏ$f+Od)ۨو> 3X;&h?Qcfڭkk?݉x/I[\5vEkzo:!y;QS  8=qd%MM"]F0Gncir+>חkb"B O~(%RQ KRP$t%Į<^.p,INaHt8+5r)˶j.*R. ef8VEi-.mAm,Eͬ)=ϾȈ@kM̓1k]2/V}.ؿVcN }}`M6ʇd\tȏx [MZõ"5nй~cH ڡ7Fr:#6Z^9ZhRQ O@!m |!cVSNf]tڶIh `q$HdaIf+K#JJa.;"K$NObɋ#\"__d}iRdaUd5 9Յ5&bdӕAUI$8 &$Y{PZBO=)VPHA6bLg Yk)Hnrn&*ơ`ac!n"UUc`fveTg"Kh"M$ǠTY\ONƎ!D p_ Ofs^q '+cogT*$r!gs:'`o-zMd'NuY*8"wnYa%w`D1 DYgWI%UV_ gV'f*gqXL,^ ] $ i%/^iXm{",ŻCXfti]8)DdDZ p FQR~߭t穜'4E 'ƥVED"ڠ@#{jI_Ȁ<*N[ |G)E>(@._t\n$afؖk. ͖@$Z`eΩ@@^]geځ·""B F^wH0 T++뇵ȕb+mgi f x@FJXRSJĺzx 䩙Dv` NnIuNE>Dpj" ci[eUM+N\+╞gT-"n|jvY F%h[klC$*Rt+xVy-Anu&]*@~"(.Z[V̤ nu.A@n|P%Rάn+O\i2薮.îDՏ?x@Bdx@ȏY3Z![ǵ õ\ҵ]^_`Na'vb7vg"cGv2dWvP[6f5dg6gfw6hvhS6i6j6 6k66l66mv!}6n66o6*6p6qw 7r/w(7s?87tOH7u_wX7vo7h7w䀷xwywywkzw{7|w7~ |7h7wD/g܃Gx4W8Y8)4w88888xӆ˸8縎88y 9'/97?9wOyH9_boWߗyxP7y~9۷|7ǹz9x繞79w9c:uC7':s/:#?:qG7W:o_:㶦o:mw6:k::i6zg:gϺe׺K6c,a^\)RJ@ ZR(RU_^xGͯ9fhd"cf;Uo1c{X:(f;;ucda;ӻV/>W?~TG?5WR_>owk}9=3Zw>+~Ծ>>>??'/?7??GO?Wl w???o????߿?@ 8`A&TaB !F81fԸcGALJQTrI/aDRf͙6qڤʝ=F@"&U#IEFu(̡U'^ZT֠]QgѦtXo%V\uK^}:T;RXqOt|y*eS-s'cZtFO$}z~5wM3ש%z*oʾ#W,m־H\Q}2vc5;R8s㥿Ez'xT@wߴd[$T>L)*Ыl=Tp T(IBp2ЪP FD^$(Fē1A8‚'m=!=$[L&JQʎV/HP \ Eԩ3K3,L-eT̬rr9|T!kI&E7+@M#W"6 \h,/<- 4R*z2R9]d 36GSm+;VZlG65;w\UcWbOٻD]YV26I F^PEՏTPU5e67!M[S]8uM2-o 9 W]jUg MYYlRx5u7ag-s;t^I X-GNT\.D-edߢD+BŕCa.dhYz8g[^4F=X꣋/9qx∅8UnےϾdg^w_xj}v Ouc!;`6(kg㚨^yX\֫_ <gxnun) A 0D̼&5~ϡ\iVz{>h;\:zRӻ{l )yoN={4_j7w)2eLF -n_AAEd,@f U#A plHn~f<0!\sCPqdd`AU2I@H\E XT!/;zQbt#$Z:Z͐fԤYK-Ԝ.' i)vgbIثvֲ~]0Z.Է4 e{U1lf!\4%-Z2xntI[ւu]m=ʚ-q ޒjl\*_tkg_J5nM ]5G a2g^֥.xQoy+]REͮPK[oAsM xz(޴|ZC70,o75,k[r_zcIO{MrF/ w!qOŋneߤMeē޸r9i[X[ЬyAr|3_ t:7g̩ ]L_:!NKJouW֛E4Nؓcd"~V?ڒkgȫ?YxG1SL[-+QFa/~Œ5+ k֚roWjs|wOEsgω%(m;[o_Һzm:ɪvyZ7ty49sOָP:\,/hOcϛ( gPɂloMyp^lKOMLL쩈mFזMMnr(/oОFCl  p *Cl620 p GL3 A-=1n JPGm0q@-dc nOPbqFJhkq cQI}oͮ `Rn6РT̎m1쎘 q1{1Q.r!!!!2"%r" N9"!p02妎 ,#yM: q$o^rQ#2$&r2&e({i%r y&ݮ&])(g* +hѓN'rXR oR.%?0ƭT$뷐cmŤ2&O֔ 0x2o3xoR2H-A-%Sb] 1Aqp8 7δʑqP$ToRBؚҐ6[4o3+հ-Y@q0cP1(X ]sZ -L2& 1g$+~ 2p̜4g 2/)0 17<+0Q) ULN۬ 3~8es +Em/5ptQ6E$ОSgy0EPE!5GCKUOT=UFrVYB0}rqźSnl?[uQS|}1b7E7 Y\PGKo3 (O {#-v YkupJKՊSK }FSw4~e@M)znub3MMIWTUos,=wphHS QERT{M9UR)w/;}+ToICW/.8.6\lMޖ/7tb/AemW7d}v8loAYqOq67KR[5Iƕc2 9j]SVe`iun/hC`9yzٗmk2_Vc֔}Y6ef֋GrRVwe#wYZyu6U֜f9hٝM⹟Y\ɹfSY izYya֞_nik39S.A U0kFB-mPjsLOq4-A19SH×#Tw׉S3DTqsTNt;T _a+͓jפ3y',%51z7ژWn}k{iXso }ثܓDu^ӭjyiwv 3pj /Yzz rMR+XPUٗMT!y@/WSܨm}*-c">Ӵi{NѲsÙs^yySˏ̗6;|{~ӪMφ[R5^h{~zr==CXXmA?_>K<ġCoۉWݳppMS{ieWo}S7߅5] ?PCoc~}3k;ӕ=[]ދ?9|_ׯӝo~O>[S~C7@$x  &\(0a+N`q"DaȌ1e5sNy2C6ZrLU:rciѳu/Ã,ndr˳"oԫ[=ܻ{>˛?>ۻ?CkWsu`T%ۀ a67rwkyx6"j%"xE)ֈ+Bb\.2r5Z4#m9bi(($E=jX$`7ُIdQj5gUrvdY`N>%%beJ(hחqUv" cbfgt"[K)d_@IYf)Zk? :Z1:SGsUEiL9N(R)U)WyTR.'RМ(qV[_kz+KJ5z+zSOVVNTDqzvԢB锛VT9K-"YBjFdVAІE*SB74 V`gMG WlR.z++*<;˫.я/M7J;Z;~ӹ/r;b/-I?8[dz UEL1i* ^ x8hx._;4(BT=̝sɭ tY.Cz¿1:,q>4-[bDY+2LX V驅F]%) +SR>tDfH,D/LkzӜ4|iք +zѬ$5GYzk^5GZHhiγUZ2װ2QU&{d6 gV6):;ANW\I6[׎vSm겪JC;\"5%>ς4auYܩ8odgn'%1F"UpL<JQڸÑN֔wGlmkM}+B;;ŕ!_[yb}z%Ġ[XUUVz]_v)^Xu7uEѕXRf+J.֣Rg'ni+Q9pjzq>N{:ד*|aN˛wwӛ ~kq ׾U/A^Nætⅱmq\b'/> 9u^}mOx+{*?l=0}'Gdz}Ü=W>]q>7>Muv12:s aX}:8}-aU|:;,p|!(X#|3Q/f{?[9BN7'+!pVwd/gOosBTO&7dd'4ehJv@ALq8qBQn[m'N8!v+c2dqąVKrVi cgx#X~oYn5n|mԇ~un_q(ni(Hhv8kuLhlx [(m։yX"kJ(Ɔk(hXƈfsfFojH؋XΨh͸Kh tH$ߘrhptoG;g.'CP8OGD(CHe¨uX9F{EcX3m񧎨lTbkl XbQ- YE{gb[ ~r);؍ÐU:炭sE"A7Xt|֧t}^@y`'6r_o2w:2<|~|djdԜljldfdܬtztܔl$6<,:<\Dbdvt.424RD trt RtL,&\$<~L$R@+.$=AIH("+uʊE= 2#Tq⣹DZdf0rI&i<7WW#)mSF=BgLJ5HD:H5/0Re"oSF:pE*,p?cU!˥ -ew2Ό"=m9⤞6PܠV7U*\ o3% I2 Z;d9k37G_*)"c&#2Ї/Fj()ߔ XOv&'3#)ꑹf0\qR @ UThVEI`W(OgG3!V5@8bd]x'tѩGr&@7Z15Mr(XC"}BH@.@@-62Gp dxB &@QA֣K ؜8 WD H Jz2\n; J '` yc$h pEʅ]1x$+rQv{>Cj;$0+">'õK:Le"(qs!>"a>݂MP A#1~@D !y$%F>P ܧFO\}8"uvl8"' zhC-I$C X::-4eD*HKB{dIHETAZ uv@82ӮZ1$IKдG.,aȈE]L P|#uyTK5FD%T5BDH(tkH4IPΌsm8= wH@S #`IP6B <8A@:p[mHT$ؕh5RܺXQeD,dW*پh(Bq{c"vwjHJ *(, `|ӫ'*rZ9 $ G1N %a>^K r.iΪX'Gd]c+@Ok/IV07d+Fx풤K2E> $:Ɖ`0@EI6LT`@YgL'ArCjE {;*%7Ƞ>ڭ3Q6D~I ,@y@a[(Mn@tV40iT6J=F_I|H 69SR{ kG$?`Vqw<$BG6K!+kԳV7Q2)逎7N %@HSb$ә^e7 A 2/'M|@~$qtQAM*px@wgezgEjCY1@ KjE86sңTKu5$Di=qwW9p' _&gMww[+_ w+ _g88eC&m3рu,e#_%gCE(uS'dpegv(1u[=iT_yGlHŖ![Gr6p\7  0 '`Od4P58$wPP@6WY;RS$vDw E{p n偷7 ^U8qUvs=^kJ x(AxFc/apv5)^h^XxP|0P˨l!`^vcQַݘŌ(Q'iOh`K FYKSF?fN{@fC 0-4u'I'ZyfdDfE  3wp'+Um zKYq [Xw)d)!y%'0_(m`u)Q+pkp)(ѕ`(qSzwqx 5!w);Xl}3((eEeRT&ird3 @IL:I$TRn)1)Ahۗi8x֏\[x}/h c w 8؃jqw}vlȉb,pg RxEZSL>3)a>sL#Z2#c6'A: U3-x 1IH$u{vnuNoC$Y? >b6VJi+ǣygWȥ1Qsi'^~9G`Zyppg@(Q !@Z  W h ~QZ%3I |t e4$+J'Hb"1D e9#ݠ 'tB 0Q)*px9i-QAbm-[>z' 8'p9TZ[U=Yٟbϙ*  W ^X*~Ax1QmpٕVTS? .)F*]CB .P$W{58${t #:!06Aqʬ 9wiu4QCi,+[@+. Pi~e~61u)Qz>c|PVafXGdGjG1p ') f3= F-y{:pW-sy[_9' \zv0B.QNw(!tp ۰,rɗ{5@JM iΩm7уcʿ @ѴjnE .W$[KC0??;c;u[ i˨ (B'1Y'ѐ:wץ@2+97x*F t Wyʷ7ĂSˏWF[2p  0b`54$h 0?=4$ P$*; 4a,V~ 5pHe*񻆒'xˌH@)bd,/+i,+)i,v}&y6zk[Xȧ@&ό@pw+[x Hc 8[{ÓpV.Śnx xbRj@}Pd7ww}g8__ 'g7 ^צc$}Gӆz p~^J}A(](q@aXmHЉ[A@g p}LmN[ wʁMG n:$j9X$ȋ9D-U$Mf7n ȷW"PU׀)\֊2F):AwW Zx-*1 , ˔Gl )Wz4)~, ϩm쭙Hq?M&=^:Y˛E/55\epF4UE  x M'C ` x\HD+`|P,4 q غ4')QU;H^g ʚ7_,Qw" WiqjW7F9!rOVLFM'C]kE*+@rD2 c EAP GZ,wgnя[<7 3萵:QsD ^RD8N=2GtW#'dpKW2zA<$^~~P~5ivNnְBp b I> `U*Jn~u"ՙ(1>. $Dv .W >. c0 N U wP %_.~VrsDNCoʰXː$ҋL3 b ~ { 1Ox>ߜ\#n?-nu;]?tF$/>bRB2iR;;k46"wπ$ A삒#(X9j?B΂>R9tC{cדìVi#D# :of&1 86#̟!\z=#asRz>$<>fFɐxTY:= ="AD_G@Oe Dx@iaxHऊn%MDRJ-]SL5męSN=}(19Ǥ 5HKfXzUkVWṳ*HN`[Ude%OI$[xZHRQ… FXbƍzXROiˉL =FPL29iR TER2Єǽ}\p#N,Vg:@ֻҕrBv@dꎭ|ǟ?q07儐z@RCh, MKʮ-4/EWdEi⯰?^{N R:[FznKr.Hͬ*;x1K-Kb, #"DH@Xгj*i <:,c >ƔHñF<:Ƥ0KEeQGS1$CjdHz= #r. c4=l.W_/R&3$J\̎,#-8KcO3DXaȘ6!\sE(aRܚ4UM**' WBXlʑ?J͚t'b!%J (K>EƊ\!n;ہNN*܁@2.g]8[am߫$!.`y (58\V ) 43l{oZыHg g}kj(.O\$ƣTZҴ"Wn gmI$UЂ4I8l jKe3V  *v F|BZ Y3 bЇ?L7"ЃJ+B""Ș@@|z@제hzvѕWhS `F6MCDb̌>/frDA {qFеfn2Hȇ zk l6VҒ{'y" a(]!4q 5M`.fp%&xI^\t^rOJ[ȁh!3=h*)Dn\Z|9Nr. EِHԡRdBfH.XgPHȢ@WТ-L-ӡ9Eέ[<%7 !XCZԟxhHZ!2!'1 xiN#Ѣh` O>bF.2G}n){N'%RJ$O\'^XS>:kXS|A GBGˀ*xf F(,Rc@ qQV $kbƧ<$P*ë CQ?eql!4?vXۊgŶֵila !XkEKMeYj_0J.J5k;ݟ08kU|Ruŕ+ RKJyV]ƒ-4wިVo~qb]h/X`[7CݛFFvX~@ұw~`/j ^c`K $$&Mznp;]@eBHu$"QE,Ft`;: A;_hy]oxC:-_;1yPzrG}i\#uO:0t+W{;p$; 7?p|Kh P/7xw~O|Q` O<І14`0eͳg&zу! a w GE.Z<կ_{h..paO@#@k?`)dt4*  @F tҿ$4DTdtAp> !$"4#D$T%d&A ')*+,-A( .01$243dB/5dÊ687:Ġ;=.(B6+Fd6;9^d&nH~I.cK4L`HdO_; 'X`1&d xЁ(4&ցJ Ƃ``aTU_WV`h i`jW_EV` +e_fC[\_pg gf["~<^!(@gn&`! ^.l7n('XS`xx$Xf(a5V聮hȂ%Pi`*p>hP(hg,ej`!j=꤆&eKߢ&T6j'Pd6_)>j7~k&kk~_VfVfhg߽fj Vlf>_boff#lllR>Ƨ.k""i`^xesnV"p``&i\gf`@$j"%$@Z>Łef(npNMc~`pNx#Prpcemhi`55g0&l_l^l'm _`΂峆p#(r8r8^%n7i*ǁ_#Gr)i(pe#m0`@.l(x^>wn(g)'0f_n#h, hFM폞m((#`FYЦ7gsd VlKp`k"T&i#)ha~*'l"8liv)uclT~C&%W~+x rmwz&t +fL?pfHJf&`([]gkr~7`^NwgA(0Pz_j#WIWy zWgG~ "o# g Wzf% ^e"xo~hFp =ugVMuFﻎ`#^ omeq:rG|o&Gu" i6G{؁ߙ=|ҿh~{_{uf_߮ԯpgsvf/>`g%=Ƨg~8'|h|~7|j[,h@x"'  Y@$!Ȑ"i`Tͪ.LDn \BJ)3 <Q-vbp1,xP$%.I, _QЂ@TdĞxtq4C>( Ղ Ct%AQ=$H@\!X Gh+09@AL4"EU'P 5K2l|9Ld5I8pBU88YC@(4E@Q`DlQѦ>@DjqT,T@HQwrikO`D V 1@:صn H0bU0ٵWjx@EZ,Tziy-RD =ʂ" yn)`%&pZ=pC[ƍlC@|eAC!Ņ(p2ԠB 4!a EuB9 C+&A Jm@^(=%S Pz0ħH(E 8 ?s88`VYSU=d5GV;NZZUw-,) Mz =:n ^U $t9Q!gNd0%c5^do]7wk, =6gvX%)oU5.{]oE}}P>E@"4a!]Bi "(Tk H*Eip$>(BlI@~_&PLு8=%5w]@~J`\6dwӀ ,]ן{7;@]# tBCtRCuP35xkkN}I4vߌ\CaZ #zu{ PA =Vù-jγ 5zdz,g:ÃcִzYE78^0C t`>g:@UNW=Z7m}@X|XX 0PmXz ր!F 0%WM0@nƅWu]Ben$o$o@0X:K`o @@}Tw!@x =Wnl ҿUX(ꆽ5_ڍTXi`UϽ!IDbfeނUgUiYNu@d p Z5 :@]e@8|E  ]"C -,>T@قU^U̡DYT|[|mF]!)&sb|!@YaoVT9VnqɣW% bYɠMEΘV=T<>T"׫i\/Z`b_o8ϱ_= rT3~ 2Wy@#-XUanT}G"n(y THR!-co,"Dhea X֜eyܘ=Յ[Θ-]NDꆤP}ߡc e *"Z d.$ 2ߚWc2ncHe XrWP7JpMnThXcUd@*_h6:qh$ 0 aNW-@ۅ{@rqXRUu dPM_V t0Cf|bNW_AT^% .ؤ9YiYI %).]IV׫/9R_荩^/hn8(pte@a A@ӌn@':qYޙYsnA0W'hRYa@@x(Ƃՠ2!e(&p2ͫ@Zu-[<VƂ1WYIo+F c%f9(+ q@~vn[s5n\=ͼ '@(YIA.2WY@ F(Bz٨+DzgWubfrvo)ϕeѭe۱ӹiM]]]i]~]'U\9]%ff2CueE# n:j#ElQARpEm^妻AQp#+-b~nd^fBt乤pVH+oF_pjqUoazo!'M}߆>@i _-eEAK jqU?7UK"aaW$(M@FaML!px2["imE͢ ޵y=#o&h1ԍ~zn 2P)0ӈ!pf\2&\! a]]B[w!@"~ %`}Z)3DVqY]y9bM~"#p,]~ژ5p7I)]qcB7Xbe fqRU&%W]eVW/^] Kabz\}YcTc ^X~=#?[ xU zFA>ceMsh mp$j ĊP/.e6Wqy0hY#rVTTL6MJJ Kf91%Aadi2֒_1fLyU4#F߱mcra#juZe% y[3\\Uy^etmwGOkuY}4q}) @ݤmE]7@dF@)p,k&wf!G$FglUǺ&N@piϧ?楓FtV'$*Zj'~u|'nayXy{BY| } }~" m%hI 6z()^n,|̟hhaq`.he b&)y@ކvfs6b H "2WSU^m?͕vzTifZr2BWU%iP*~*UXuڡj}rW {1FJ*y~jfYftF=5~#@r"ԗ'bߗo!T!)=B/r?Dq+TCUJUzCQciFy.KU[W7Tb@`A&TaCxH cG/dI&ETrJ.SY2L k0Ê 9h&zTJMFTTB|Č_E;VlYgͦEVm[oƅ;Wn]wŻWo_3$aT `f ACԠKU2@P6F_V R=( HTB`@ NQ *0=@S=P0i6T MoX LU!4-V"p "$hB,` _,H_r 4,H"<B $5@a &&1F@y-Ad0`",Q ֕6H 5{+z >)(`@fd h .gP.{es!e :/ RAM{=3OhaYV|acsts4 =jf r9 ]"D7 R h_gNpOHqt)K!Xw `mJ6듾N[yPLqe* Ȼ/t]Hx A⧐!M9+H@0AW9  r nid x?F!B` RI}@* )-dÄ-DrfTX2H$!! 2óaA"yQqxF)a/Ab 8HǀmrVy=Q{YE O>rX$9h" 0FAƒC"Sʂ$ HzD]4?^`@n/@uBQO#JlG_&Kc YJ Oxii"+)hOJ1+Hu"D'"&Rp@$t `my6hd>) TjZKL``gђ} 8@6ip.f QŴ$ @ܫ`'8@E@WL*A,:'yUlOB"M4{2]A>P%Rĭ$T=<R,QvLA& v<g/vv孈]) @odK^(04\ D}ĔlBj)pppҒD pAJV= wDs UA@Nr} 1vREJIdkA4'ǥyIϲ ]Y{*1 vv3 D1 k<>pTɒA-`f 1?1C 0 ֗ltvnAg& rymy"@H גuS:/T~'p-@'@c 1Bئ $`Dl\ d iŬ S$Mv /Ǚyh:P'* t%R.XP >`oiV@ @ ύy(P_n6O3٧2 \Ҝ+壟]~2kdM%ţx̥*"ؘ Z0{  7[ H/_>{\ DE rPC8AIX$kg3BVhl-L*  Nhsbj˹ IYvLZ&{Z+ {BBM^P* ^dvZy#RىEll^h٤p@_WUke9m+D( >7߂3PLǃgfuY7 g=~R%%UIe*{hR-R}Cdʫ/%Ί M%6`ƨuP<ƯDpCE&06-DfadOacY]0apeim0qpuy C:0 p  0 p  ;K"ɰZ,p0Ɛ0 'ϰ#PyBP=D[Y[$mb ?; 7?lՏ1F4;p;1BqF1O!|HJ@*II@*WJ{&ƸS V61^F'&MWx~],(;"nIIX!EdB2 U&eX.Sq*Hr僮%ZQ",CuP>[[E\Lf_̥ԅ]^^Nǒȥ__ŋ ͂qanFf[ !F ("nnRf \DʦM8n2~r_iDp: c_$k:ਲM`r%2 Ԇm )oTKoJ?jx' HKr( z4GsFIEtβtt^ȃ[G)#S\n.uDrH ,yKJ· TvePw*'yǃ ds{Ƨt'!PS5nyb \604!hDl?~s} E(@XhpNH(U Z(^fhÆ.`Zj'b"`].g(0K@kD`ӊ z hA;Sdm!>$b#<ω2ki5lac Eɬh#LcrA̐ɳ'4~f*HSb3KeQ|" tc T6/b̹FHA 0+<,d$MM"N$"Ĭ+zcZ_ntPD :`i<Ėu'l^"5ny`m£JQ@S >Xb0H^N^4Kx NS=&`pŀk6G.q! `ʖLL(()εg*"^Ul9U]Ș&Fx[>lU5v^㮒@Jl(`glkb7T8@YiI.3 T>@YTI| bi 63+HbM{Ju!، "ۘR%M(k$غRMǼTx]0O K(ƶL ,jommQ5uB{$@2 _JbJ&es!Ƒ#T3RNq uX*ep r.& `eNQjqCXѐY%ꬮI8|*Ib^rʮK xEZUx/20Ywjoi "i;dg +Jy7鈞Bq&\FP▭4)j1M^/){gFYt%vY|"ji1Id|_?kX -)W'G'TPW֣u;Ϗ?;i9Yw&4p=BDy%&Z%ZY%P&8ڣֆ0ٹ@(9F$ q'1cGՃQ/qu:yz}:zϢ5 P Z:zZڪ+Z/`d?)zZ=FBZZf$V]:>Z=`^zG暮ڣ &z%KzmuϲH#Dk:K{GjΊ^yiQsdKk!zQNq+D VvY̧iD_`$ !%NqXK(;IIߎosÛ*X/#Ļ8g!!h`"2]%Q*2^ު`s`8`EE1AJf\ HΎb&G|4C'Z툔z'ebb-FTsvrmȅZG={&\nJpr${rIע/+rtq-0?'1Ȕ1S'22s2+[t 01el*bGX 0l8t|j2B8ў`oHtD9Altg9; nէ5 @{(H>h7]ӊ-Q2H b<ΦӓV=,Bm7!擢sse@4g=+ldwF4!SGdy|6i@ܟߜJ[D7{ewItVT !vJ[$gkFdEY\KA[~xL4?CMOMQ4MNO_(*<3P85,V~KBrڍ[L>!Ыܠdu"YĝkV;)vU<T B %IHTRv\&Ugѵ1=k 7͟&מTHx=wbD$80!… `1ĉ+VA (p 1TH!E <,D0B  AE3@;dL2@@"M Ϗ (TP3د5`Ph ,Ң ӹsJ5C{> /XeŌ+ڥZd;q- VX
:bzU96C':2N`1 :s 17wyɓ-<`  *o`(iA ` XI]4 ,`A V[a[%0pQIM*b 5 @C)B hbD J^eim !T@0`B@XD$dАE%hut#ԁ HQW @k&fWEWZID#6"M1\ȈZrXPeR ̘hQ#bB\@a٪D6! P`Z*]FkI kL 9 aEΈr?nuBBR۔.Dٕ*BdI-PBzoIlkp Yu @~ltYvZ&<ѡ @a#$N]r0,`2{ĺ,Q s+BtPAPE/D[n&fu-t@g=4Ԉnl\1N.fp?%ܭlwSr6EX 7Հ -xޅ׈LḺH;gw碇N覗骧ꮷN׎O}Tɧ7|O|_/cO=w}}ޟ/O>귿~~/O?p+(@.xtdAk,HaO4(B@2; Ke)L[! …)H)z:l qq9da7X"*kMĹE.< uNцEzԑ`0Z}&IY@ & #XxfGEOMC'!42iP 4#(?bI= EHUY(ƐID!@Gh{I @*2"GXtʅ8 WI˺ 4:u1"WdHZXɈ&QL0 b@r>+h‰0GpB2 Qt9<T. 6H⑁RVk)@SP4٢ X4 `Pi-q2i D@e0O mJ @&SXrL/&SgXi)\l EDU%!&O 3o RЅ7g2Be ` V1QVRg/s0B0V!VxCt Vs-B X4mLDlI1JPk'd n xS4Z z)z2PKV47,!ڜx0D s@Pu%h'`] NVF!"n<ױG-rҙv?Ub3HU]SrR   |-A3Pn-K`\#iQrH`TWQLDr`yMh %o]!ldI^{ E+xF-1@`ya`H Nq;phOd: 9U@Fi i誐T*QrpW=S7GQ[NHph)5ov|+JJ)K0K@}@GwB%HZa'W[ʼY^[^LQL"KO@[ ~ $:U+2NJ_|T6'K X^̿ v(Tyb# S1E 붂&]0u"8h:7[ȜPD&۽IN$(C@x͉SyU|VX(t!iN n^F/P4܁zp2~DbQBV-!5 ,&5EQAD1*t fSss1#CD'QcAc1sG m "V~o!cڧv4"ZpKd2)Pzv22xwfWPb4l}U,^u 'Sc,zYM%&%m$vhfR2Q'4b q>6rf(86UpsR6g.z)6)"Y)re#6-SE*&R-RW+,w/ŲB`X+RKBcIc1VRC+:*’-.bi эta1&1REn%2^z,֦j #dt  (0rOGaSW;y'S2d7XbMXґA 9v2W3hAILѡY1GsQcQds#"Ws#x5/@9ua0CA1htz8!VN8&AX)DGwdLiP= qb$TsV68488mA:~>^9i 9FiF) G, Bʔ) Xm{{i!wm|r&e$)!`7"QV(Zj˽@CAB*`LzӀJӰӼkڤk!*0dഄtĥn_ B)2;^) 2 0,`` `D.nG $nT@8 El1#H9uxЏn4@ 0d(xYl: l8ߍi;Tu"GHxbHx!D*`tnC29@ mk[ԎYi@ .CH@#o%pycD/0 2hСSG8 I{͏fS&@> ! \"~ TЏ>' (mZHD`[C.,%i"("2 TZA+, F/ !. T(؊lҠhpHVbR ܮ;S, (rMP`+B,H8`dh'3q(K9`z T,͛H/^Mu)4;I5l.R(wU֣^9"L!$ P"%O 肯> +n?6(pR T;ӁT~7R3U򦌨Z#I 8hG4x@HȺ`cӜ HMfi#)Z0"g ,ٯN/uJ虖ֺ;ZbhPh*2-$TmKMx!)?^r;!GI3%%K9ʔ+\eY>'Ph J-3rK[e/yK_f1yLc&Tf3LgFӔf5yMkff7Mo"Oss&-D:NwƳdg=I{S>OgAJЃT EBPFehE!JыZTF3Q#hIAJwtb$Y!ԑ/ Li*K49eK;CTYjȣ UB-cQGԞRJC]&z^/Y5"WGUMbmOzjuYKU+zF47}SZԸr8r&G6X d ,H(ӽґZDVaKdً ދ E!/YS(6YGݻ$Ֆ%W#lk=" 5!hI&۠.$0W %\fYTdfME"r-'2M+0VFlRkad (%]V smU֨_mhJW1H(oPD}I[n >cA# $m-Ry&2P)o@(P0 " @5|=xpȥ*Mvuf ' &T5\߄9./8qn(2d Ј4SZ>EA(ϩvCңQcud;bB씂G$ĩv/7wYL~7`&W-b19&`{ $DBۅ0jTu ÒylPӀת5zp|qmZ!Bz/e1 [\@f5*`{R`vcۺkW1LUT"yG"dɩ }q8C;@|dnvIT(%\̄I`iܒP,g%9#̢%7KZ@=ogDKkAlGH}- L0Y]} k9P0:+Ug"}> WTTm +6JE.]_2侷]T}"qw|4@*^!#B2N pxcF 2Q3`C8` 3 uG Ntd0 9)!Y3n[i rǠR@ !s aAY3Ǩ,А`@ K6 ( aR'ak+ɒIA7YP`,'\T/+8ANЮQSAUa p[Q\y$s`0],AY6Zĝ[@&<ʗ2پ<z 0c {p1RL?82ET"B5ű *ŹIrCz;!4ܸa AGJxӗQ *+ , (! +Z$Ce ǘˉ̻Ky1BQًaqbc I 6:I԰'I4#6ȂǕ1xwixl Z$b Ia<"* h qS7Y8HfEEr K %!AP+hOz Z-1Ӛ~O+r0XA>|y,CZ ]ɭ(T%L0 M.R"1jԩK>u?k 8`I 8P^+4}0rBR㈥CL :r3@pL߶h))!쫗M8l~BXj ȹ"Fko(VE>Ɖ޳Dk V`ֱV)Mڍ;庻1. [a=b j+Rjc=xٸ3<\ѣ=A*AFPTƓ v @a1= ؂9ps[8þac L3+9a@y@ ; T}3@.BM[_9I] js4TAAhZ( 8* ҥҜ6[8. BXBДۍ!AÍap,dP4,iVBӐ9:0^ 8WĠ=pQiG5Z;;P=xX^^=u#VW`pdQN)˶J Jv0EeeSV\3e@;nۛz>l ~) H%qPȑ-H]RwƏEA[E, q, Jƿs:0v7U : ЅJ[>$Ru#!p]M֚Tx[ ݝi o! L^|琵żD}ҲP,3ap?6M0"|MF>פ^G ?0MO2N 3U쐠hz9GqK0up魖 go#oGSW;P+/P,r-r.r/r0r1s2!?C=Q55W4os@8s9g9ws:s;8=:?s.rq"tUF/ qTtLZr/zVj%_N0t"u0(%bt wtltNs?irS%t"u6+rU=S;B=,U_Tա(ԗ`Z_B4/ڒ8Q]x.rUPvfjzjTVe3"-0̑\a88y! cMWdkYf/x*[jxV$l& o d~h ;cwxy bh٘W8(1xD޴~ {}{28XAm(';v-ay٥hiىY:ͳxZJwXaژ∾ U,U߉HXV#f{1_;! o? e"ō1fg|@\}W6o7kd ܜ\ m] 6Q$؜ɀQnE !}x!u95%p]E Tp  B(q"ň (#&Pq%˖Ch``!8Qr A *,:ЀHEXMJpˮ^WpO: @ id_6"՚7@:PHUHrF3`=p":`U@k[X (偹 QO0@Q B0yCο?=Bm!ť%h͐Czp`k8=I 0pS@ (V`!1` 8Ј'aI A@e:׭hBs@A#*-N0AQW<@bA"AB(@˃X;pL$@RPeIИB ?:;W;;-s"5 @tCYn!2CqG %'-5#4 u%eLo`OmLn]Me ^ut݈IfAVT0PhQ@ f!5y6,ko˅I3]p178*[EZAB}? DQӦ%[Q1=)#SGe6dɘ.K')@v&->f8FVcL"y5ky@} LQ! FT@B` @К|S6 Ȩv8"#L> L}~V@ ݳ#)%4mfH@Fӂ.$5'zuU'|ڒjB<苎S׉rӄB8Ti"*i2:iBJiRiB"J[e)\ii\mzivri)隦雺i露i^锠6}bڠ~*'*jN򕏆6Xz jguj–Vn5jWHꖡ'EW&)s9ׄ@tt$$١W'E @h~Ey.*,K-N\@ @vE̘g|Lu|g cP@ܮºنJe-_xVm^FNݖ9.\F.Ĵa/~\ZZRYJaRD䒧L+^'(]qlD2FYV[(\ @ZQ吐0ƸXD M.De*߲DN B@\^Q+zT==ItYqǁG6/l<xhG s6@tQ@Bn\Y|\pg"Eܗ@$ҕ<BCLʎDE"H A]ԊDȸtU/,N810Dݩ%} ^bɒGSŘ$^U\EJ*D! G(o (>vu@LKm"-D$JqM@L[l\Dk:!PQ?<Rx&%Ѧto+jrL\Ո}S~ ;6Ryoښu?Kſ TC(<XJިZ˨Ͽf@4=l=A1}؏'7רג׻ҋ|BJ~S[~ck~s{E9=i)>~곾>~쯾>~s3=W5+[޿ԧ*' ⯒⣓˪!' . w(s K欒X:q9DF0!(@0cF9vq&`0YR BrcK;1܈ b\ 0HQ4Jv od{ԦW>y i ԝH An& b-5O @9 AC8;m"Z]s@HJ߸`oR+d r@J72mu  ^nf[̻ kM=7ryM5Zad5Y j,T/ZKuGb<Z:H) ,I (;. Hp.B @7*!N,<hJZn+ YV0LHK J(o#jQA&p B9hlx!䕐P 8.ˇ\FJ@D.wrwd`qR0⁁*,:h(>9w(&&T4 Q@B 09y, \՝<SDN1NT`CgD ;n&%'n;$Ķ|" T%L2NdN8_jD7N2Hea˓:8U4Uv]ne3[jjrOG/`0򄕽^(s ٕj( "Hi%(2u˃TdK2EPMt):\([bڌ Ț؊"m*/$Q*!H .Ql.D`\bǭ,Bm`*GB̄AEp + U4X4(NM9`Qb &5'(H %r^ !!s aշ M\ P=2 {ClB0@REc)1q—ьRФ0_ٛY!YzܘOcPDwU#A&WK b;Jn=;ʲ 'ڕ:9 1ڰ* >٬|' xATj lU&Yнypg8UȌAۤu#*Mܵ*yɬ?q]&W(p՛9 +Qߚ%x2iP1ReU4]kN-O8gyґU=z3#d)]p @ (R߫?mЭƱ#%(:ؑvK;Vنkn M n ==t0O 'A}v \#"BQΊcD?v鵘y*#n^,SjY%P,-N`|i"v!C3ae‚(h2'Ii| -"Ca&(Vq2("Y52_C 0 Bt7|CŠ8n9QCfp(#h&^FHfW2r[| #X2mڒJP0 ^Y:쉪RNXhĚhO d 0H-$p>qD0"Ƌq & 6c\k.gZ& f Nh07Q zb&HfhfiƯiImʮڑR|Ê`3t&?&I,+#"+p@~ ކ( Cmn@F୐nF'"pB kmr!X@: Kx6"xw #)0-yhp'9ǟzbL{'G{b*'Bͧ<4b}J"~b~t,>GP",&f+|"4(.DD)*%‚  P*"0Ibޫ LFl1eK`rtV=wN6ȒŒn*ȋ긱2b^Lv*g )PQWfR#i*f+ %p9a.`<DJg2<@(<(:MW/Wo3 q"fŗ-֔BGZa y4&EX>9#&b$6SBŸleF(Pu:hJ(":H:`7 L3ZRdsoB0sN]a#z <Lr,BG*R6l0EVJ,N,PtjSBJSJh acFs~ne%X`l"y`2gdTlA DRd`0j-{jqhN4*]y 48j\h= L ̒}WL8NVP})”tw%lW H !N V-(ոH3-@xۖeT$7ڐ;*cl1dج ۴"8V3"7x9!tt2=`fh]3'f9%y2$7mQt!-n"-{g#DZ6)3gZ5 .rE+%d!Ćǖ0i-O27+nǛcn3"nedD@]!SM۹=w}虱 `ٞS(Zo XZAGOO37ڣ;?ZCGڤKOZSi&=+0eg:oڦsw{y}Z:ڨ{锡E#o{Kp55Eeú,$ ]٭0让.nyeD̺ ۡ(Zƙ) <(d$1f*5yC)sɚ"R'1H`*?|NL/,5Be5f?B#d{d}.sgO/t[qebV#y1#H6`2:όzj=bũ*CzW]>712@ԥ7I7F=;7Ws$ FTG~$H(#ǫPFD*F Frd#wY3gQ@U4\#mi):hy[[&c)У:`S}M|ٝPxj>3?'ep԰#w2y$^/ SNENy*2YzIO\[%w#r/Ǫ_tbkb3 @ҋV 6<*Ũ *9;b$15/gc:5E>SҦѽWLSq@@(67(&R0R7d'OV5:pb<]9V x=?fqf>烱Wu35@Ut=Z'M6dmoTChԓ:9"Pc߇ 36@B4~zX/Mz`"G1Bh;e$4)% A !g_I}!Oj/>@˰2.ΣIЁf3 ?h7)3^H0q$9{qҨԈFO/Ŵ91豺[hqRKXgbJanIeXbp ֙;1 Ͱ#RȒdزmξ 4Q+sdp  B(dUw\J8ۖ'P 􉩗 B[uԲ)P%雮5&XeeU#R4q93ǁ%2J341$ jޙWD33SʋU1}N(CKQ| ‹2Ch 0@@ȰÇ vAJ Ha*ȲeC @ 8@R| pɴCPM,Ч$80R`ö`(!d )t)7@U((d`$ّD@.ba}T7bheHG5ÃhLA 5h`@]d ڔ$0pX 3+@htg8ud_C <|,ހR<`Qx[F: DչVgp=eoA BՁ ,p^7P (QJpQHPUu0 8_ܤ 4YtpBcV 4$R(t`LɞOT(pAY0A)䤙@؁ R0`ѐ̴@ B٧ZJh |' HuTQI=[(x!Qew"0B+i+L |П,mRB DM0e@ ccC!rQhQk0 `'xF,2AxZen!`01#$:(DTZ  Bd=ܝB+pXڷ^4`W[AL;trKζU6̾-wqVv[xw؂/qa Ն8gA?.9uMY ݘ?Zn&GyM}x @~붋zλSۧ׿vo|ȃuzL}XOo2O ϐR+}/~o~蟯~~/o߯H<q!-g3RP- z078P(< M0- W8P8m0=w8 QH<":1M`SYq"X:.jv "'ƤM cUxp{ǻ86t71vl`LJy9yEFNϊ|$HE#& ah( +-/Y0C0s0 3 S[U=V#Qe,N"03gl;X?e<5OykUW5E(H3KCR-7C2yqy?EuA`aV<2,3FQ~shQM'SVIo{У×5 !#!x6ӁEq6=ԗsSs9|f™RyVLoz3薖8YG<)FlfR'yzIczuT@й@9YyڙܹٝܣϲDOPQٞɞiyٟʟij  6 :;:EY zș;Ij;)J̙;ZYpSʢr㢶SDyna*6!)= A:G:jΙ J!4OKKSc~*Z;uZQZaO:Y$.}u,k451NP1&4FoQro275>MwyaRdOBr@p6RRLa^R1Rp&(Rl/7R;zXRN_bU( fWTQ..vaU1)a C*pƕԪUȪX##:8!bڬ@י25EwwbIwL$P'u_7}qdGUӲgv5p7%,DwQP pRQ}c(x! eL1(y3vfWWl0Ö8l ..lĊOz PKŧ%݂w']ہal6|g|fR779A|o%E})Y3K6daK1~x&xHYh)TlJx~gwl:Y{e"-&p̚E]g;צ: #=|1a󗂉xтF1H38Z{Ϧ⃬ 8=ZtA- _2F}9P@UfƵ̬y!)mM&\iL[қS.)JU!2"v#""a2jvPHCR$U$Jr|iL\%WRY]B`B:B3fT !Y\lZ'=*.0@pa33+T}}* {L,&a-Zb 7rs4Z,JV)v 7-2. @a- ޲!0CX%9S =ٍ,+sZp˝.*0d=/pY35?J @I3 9F͚5.k^7K;{ʛM,9zٚ;Z): 19Mk]<'n;ñhޘߢ#WsԄ `aֱh_$S&:[d䖃䖓➔|->SU~78tEWeDݝfDYd~fhjlnpN>b^5J9yw~瀮^~n艎^B~$雬d乣1`>^~ꨞꪾ>^~븞뺾;PKUco"PK,AOEBPS/img/apex_report.gifU:GIF87a;|ܼԬ4fLb̜̄Dnآs*X}~Hsٶბ#7"c4rhcg$ح&'B9}܎x$7QX#t.[$xژYh]b=weC*@u·gyvfKi/>_tv9bօڼe)7.Z&yitF("q} :bMG%q>˞Uܙ6KL- ]eފiժ R릵ʷΦE&g- }e۩zJ.K Rk.\p9*09 ?eU>l7;MEWLl68ٳ^6MkT9-vVOh5;6=kpO˔rlt!ho_wވvbBy07p] uw&o|U.+szǼȦ/7s} rU(W9);)= @ӥ ÃVֵp^3^G p= 5@ʾcn; w찰;A|b{H⡱x~49'Oʗ3ϼ5gz eћ>?{ջ~]A63}8p+~/?>k˾Ο[@[ϾGbB2yC$?[/ئЌ-pPbfh\pEY0WV`YYxfd 0 ?3Te6[PVP>fZׁEs\4's18)R"s;w Qp(xx0xZUIZ2؂ vcgg D8 :E:S͵4Hd(LV.X(?_t0EhJXQ8KƇMXk'oh0NjomPO)jhlhbgȇGwLЃƅ M34khȉU͂IЃXq8aJ 8sȂX;5xBPFp(A B0w~h2;x >?0K70Xx:`~Kp80Yy9}@G9YynT їyK 4$J&y*yJ,ْ0I&y6y8Q:Iy0}7595 G ~@~{SP 7P4T ] 5PuP{QN7`Zّ㖶S#PeR)R w6 (\jUOT cu45UUubЀ}a0}o 0vlp`qYEXo ` 7Z@ed5Wsf9l][+[s;ȋhYxH7\fv^el0fJ`M& bA&`E`e qqW 79s8j6wqNjd/^F# _6bBVm fFs#7,(֛ɕfiig6hiy &w?vo# iVdo69l ffy0ۉoɝǢɡ`pp &oyc%)0wj)q+z˵Oxlf_ptTtt[ Ը ֈɖФs vV7v} ޸ Ḗ`ꂨg wywQq7wNh eZ. xz + ʪ Z=Yz=ɓ:NfW3|z2Yt IںԭފH4 HH:ZڮaFZZt i+VT F ٯs԰KFG[˱Tk!KE4F [J*+)˱/˯-[ 3{h3,:? ;KG5K bd:d$:GE6P6I;:cHlEX GXԵ_^$Zd.[R+h WDsDam+GE; G+l`TYԶ5PTs[\˷KUdz c;{Fh۰XoktK#aԵKk;f;S3pF +r;k{\뺱K<˸ +[+ѫVt{kE][[싼۸{˽Ew+ λk[KUDe +W˶\ " ̿[E ;K>+h-L*msMf]Aky=1umZ;E{`ݐmדmڲ] ̝ ҡԗ}ևD; L m= } C @`׀ܰٽܽ Aܽaݺݸ].ݥ` Mml6(y.hhhXm9rqʘݑ%us8&sN }vZ srE*j )cfuj>_7v)ᨉ6ͦUWu@ܬPeiUݭmj*nhZN `N#zav^ _#%^Mx֝:\~Yjݶn\`fX:FY.slΞUyF!LN ̉e: qʢ-ǦnS^e~o~ 絖l^䤞W >?>tVs6^C bn>eSZb R:jn6碂uA:gYWמeU _]x.E fb OP*,ÆY>Xޮ v] ܾמ>>N^aQ*lWK =v&_(4mnk9n]BN?QP #mUn/:gd~`މA.el7^"EuC .>soڽM۰mϭ޶ݹ* Fڼ@Oڿد a@ʀ>_޺OpǮ 8HXhxx()99@iI鹸):*J izz+[JKi; l;HN.n)?^ϯ_ʣ_ M@iAv1Yo8 :[&LI Ydw0̛MF 4fPffd6i2+S Q-Y5Q*s(ZΫäJi+fs}4\q ,)]xAkQ\7EV泧s.֜5NdY8廋6<2g LԏI0bebgױZ y2E/…Bw<)K+6. 8v{ ~Md-ņ7uh{>Csy+b h'xqmYeIdg 5TrkF9舄ȕrXo]b])b xyZ)qDᆉU_~am/Uu|=Ij`GބeHރ5NBI?ehbp>fiPP) YN& *xVh%^-RIڡvݤ~j JWr'k66sjό(꟥n9 +&@Kll.l> mNKm^mnm~좙z$H|Hk.ջ* kjp~+ ;+ذw;ƀ^"}Bz`y՗yDeY鏛}$B\L-[ܱZnseM&Vo^_ցOs̻NMUjx$?o ?&vO\i]aD/}{ߴ# ^[RyFgnkXkl p#fAM`Cg;:㆔p/!~o!;Pv/ecΘ4HB`̦h 5ubE*{Ҋh@ bl;шa'7t(!.Qd>ic8v)="2~d$ )IFRb"YPr,)OTry[ Pd'hIGl9I\0tF/㖨c#D%F֑ێ2/"L>RƤf9f*e &*(GadxFP^4Ί֦fJ1h63Q(e1 Glٛj8$q5`"=uMGnڸ4yFR>>3R$4ld_ǵ⮇nr @Sڬ.5W#lO0ѱN4&٩m)ֆD&q#]Q@(Ax"SEF] kʂn-Q Z+wKN;o kajA+aP(Q'Ks]VCNV~!bQVH8SZT/(t-D}7gboIzoW=2gYEF6Ӎli֏\6|^pڳh[Cg!xWZóVg9չ g}V8ك]Cgk9pYzIynYuR՞FRu )^x#8vPgOĹ3RGOG.ʚ)0Y`/ڝɑאF[6b65N989>J엤8ʟTbyّCI< > _ a*c -RZ:7zbYLJFmzKf{q kJOyMJ1:=B}Z*q~juuWAéȒh\ixSIQꡤ 2.GjLi*Nu.]^j)vkWQq)^ʨ闟8l psQՅ[ə jrr6Vvs % tS_:sY"*Zeg3_C1&kb‹/8`JxRNܙ5cӈ.4QQ9xdƸ Z*:^ 4uqD7= $J6j ʃfou,pLTUYÙg 0j hk:'QY[9m֪uڨv *sZ)u˭&~zNZ7JWʸg[d˹;;z+ڸK+x;+f돓ˣ|S۳jZQ[nKۺfJ{iuyS7 ;Lv6sdֳOEE&h_]&p2Az5M4hҫNi)75ʵW0KFHyDL%+[߬<|ȼrɔ!͞;lך"J)y[aY8[72UQjž/غ{4ͨ%k HMm˹JmӁ ij}I=KZEޣA@ߨengc*o5 ӏ  ZUOwm Mԇx~\MU|܍nXz3bm%zy֠ϡ.S3R+0:! קג Y -viؽ])7ˆy-cXme(떄 $e.oγ.-Wۈlzm|,٬m,vZ:6>ެսi:ή҃xe{tL]LȾڳRK+]쬑۾~3|]͝ =6ti igW*ˬβ9O׶h%xd^N)j0)raމ\SNlHN.\J>p>y?K}nqz߼~t_ы?Z族9k~^9Run_OCY^|䴯ⰟO?8nDcݔXo֞nρ9KN|_xOA_ήO?|BXߢ T𨆬zȊˋ՝יԗ֖ݣ݅İޜ쏶 (`/vєzY1ga2N*߮7>ߧ`5篏{Y=G`(s X6I8M![Neh ؊:șhbd'x3:4?iH&L6PF)TViXf\v`)LRXb YZ>ƨs@АkwJxҘb9E"pYhezX螁ꠙ:*ph"Ii jꁺϏ!b aJH5r5jQ;>Ph5k+ZkC l4wy7x.JX҆޵6]2mxzc]C*,> nA K*Q)j^!f>,fS_JWc(.+pe3Ίrq\B yV/[n$7'뼠r LQ8We3+Ve8zh;īT\W3lWlb_Kn״nM{hX+J6lj:mO$>W5Ykt:2q(6Rl+lЭd\[Wnl{qK9ilnQZGJTHl$՝d@m6+/׫ZMCgܪźfj㧲4 o&2i%7l xI-9~v7x*G~kn?]Vkl9Y7 MbA+2cu_V az+BR­yoEˣ^z=Ѣzu)D}){A5i/aSuќiZg.lh"+侵ll~|dY=-Xb3aT6ڦWvk"\ۊ[Tbu,teA%Bǃkp! q@Ufjn{^+ 7ZE7WP7>ێwxU+p6pB823+(#P rwvz!S8tbW_5W , -zNRKhʭKp>"nnc{QW/^Gwuȡs됼+c0CNw0nZ5_l?\y+92K+.,2t9],K>l4GJcmISCʹԂjuX_Mu_{5eO5a=vg͖km6t˝2s b]my^{m'b6}+ގcN9[\3{^:9ꡃ:٪n:㯳N'~iڂ辿{j|/y4'}@=J'ej{(_k2njL>vol5գLn׭Uf P֬؍gˎ[qmmG]{-]&jY{=LcȑO[d̙5KlٳҿE&˥Uf 3j:[Ϧ];عwDUIap/g.Pm.6y&wgu#N5tXPӏgOc}>,?::}kжh d" 7:i2C鼇8Q7;qE2ER<FeFm\E-suLG S+"r$C<I(r*QD,szCGƴSN .ˌmMڴj/47K-̵̳< NTLA 37:L3Ec 69P͐"uTK%2QG=3DW+O]MRY(Z?T5W%MJZ-XajX`EvX_)pXge۳ڬk}+ q3,w5hKW] w opˍ:ۥ]}ɛE8#XSܙ;|Bz)3`f-.)9ߑI.9kZne`Ift=sYyyg{ZX"YhvihMiV檕Κ꫑t맻Zl쭕{mƺmц[lݶZn3G[iV?k'vGB w?~A7}LꃯYuWzB>yw[o}S'?qĐ}|ESY_2)pysgQ݊aHC'0b4xƖ%Z8F#ƌ$'p "Lp!ÆB(Qa/b̨q#ǎ?8q$ɒ&OLr%˖._ `&͚6o̩s'Ϟ>k)t(ѢF"MRϦNBT)ժVbziԮ^u,ٲfϒ v-ۮb+w.]jͻmݾ~zW/|#Nxq=x2ʁCUΞ?kż͏9NzKљ-҄Sv^Ԭo@}^[7K•.=w^޿#5$挚O>x/nϯlKWT"`k2BXR E@aء1m"߄!5b+G/G,F aE iT6HPE<ިR ddI4E-AӔJmeWyVF}YUDTifVu kO_YgcէYq:-J XMעWib2i)veҝjjB*zkNgkq֊B*l ^;ԉmwRaFh&y"Xb+f2..k-K/Ż/  |/ T9]i;"C03 {U! 2Qu|2<@opn/I!G^63p54CHv c(:?X95i U5j#;҇#4d (Cs # Gr d#SHD2$'IOҒ'#YIN$&AISDe,vXr%+;]2f. a42YLgj|&5ifrؼf* HQv382rR, mMu2дOvs=)j36 >YP h?zK9);цJԟ(CIQ¯G*z#=PR\.-)L!9pJҜ)Q߹ѝJdHԗSnNMTꔪ6iMW޴Z*,!*V5GM+Zϵ5XhZg]Wu~}fK5jRkOajũp1aúɪ{gzRR6*h7do=mkIʵekIX)E-e' rm87\Bqip}1m ;nWEfa[Mw0y1"޴>6|[i \ﲗ}>qԊּӍq,_y k+`ݢ$\_k]i{aJNDlػ(  ,i[U~~pCCr7d.H\.+L,su캙?ټ:㙓_si>FsAGY!E'p "Lp!ÆB(q"Ŋ/b̨q#ǎ? )rNLr%˖._Œ)3e6o̩s'ϞM *t(љ5}"Mt)Ӧ*u*̣NbͪukHTj+ٲfϒv-ۗc+wn׶v|Kw/߾~+޿#x0cCtqA KάyS˞b,z4i?^4֚O `ڶ–޾Ư^y&WΘJN: ~1͵US[uZ7\6d{lLkw7zg Mp}_s7.K'&Wndfo٠襣9z-þYoY26s+/f/vFؿF>ߛUm;ީ"M?⟿߿/ T"0GT d@ ;ċU*h& n@ ].HEk 4"RaHFpC`D"^fHJ #:*J⟠HEU.ʊ`TH%1фfTHFy/#MG5qTe# 9tlb 8FAюn$$ FD.Rkd EHNRiLa!HKjc%=YJS&Wd*ITFRTde,]IXfRQ%']2Y fR3Grr9! ' G\f2L$af Y"F%&7QM!fӘl&. r>s$niN[~A<#N+Ҟ6 M~ieUD*x @D"U:OJ(Jm䖕^ȣCtH%3dgF5.[ $T-D=DԉZNjOCΧ13}l$6uVMN.>:%sS,LyScun%EG2k.L$( VĞPdl`˪WȒP_xK.!,cA;YnP keMY׮ֲr<{J:QaqDVemoJbS%niYvPA&׺$mh[D~WqYWiNWms[^>Ie;\.llJ%o~!B 8^+l{=w6v".Sܧ7 bo~k^Le>C1b#Kw)>)'3yPO5%(Oy?? 4xaB6tbD2B7Bx1cE4yeJ*YTeL3a:)p:e,e͙CZ)ˣI69Ǩ!1VJjN fjRNɖ}jŴkuH5 ]pjm` c-|$`8e.r՛w0bj7U\ #Oʋ%P4±e]{흦Rxhowfkᓻ>mqYsso剮g_}hܯ/~3R P @DpTA#ln*l 0 EEU\ENjejmQŸ1}G{ !4G$$H&'1$2J,,L.K0L3l5ϔ3N8N;*94N? >=oO@ ]L4eT1,Q<+QJ|L;4PK5UR#PTPU}U:DSLcW*Y5To=PRu_}Qb-ZOYZm5ZhvlTi\op-[kō\mU]s]Mu7{LV^cewIE7߂X߄ UXUx]^^gy۽X'Va?S~3&dv_U8[T+Vmy8+oVd~7v#'emX뮗.䣿ΚQlk2u\l%nre&fYg^ w88Zjێj鎙7|'OoOYmUG}/zn]\mE7ou/3pe7pgwG}2ՁQ=ꭾy{F1~߷ JO"J[_{K)5~=r||Ի}[ ?x#YGߘ fyEDɡ a-gP2[4$/RǾoO4Rw?11't ʍâ)PH.l_6:o/\Pͳїb̈́c3 Wx9l|i!s$7h<mB xCtdER1I(R"ȨSqz,bOv%*.R Lbj:i{pef@nIt8/ul"$H~U(*5N'C M{>9*!5b\zFMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!!, @ H*\ȰÇ#JHŋ3jȱǏ C0(S\ɲ˗0cL͛8sɳ@3 JtfMH*]ʴiFEJ ӫXj*կ`ZJٳduZnEKݻ6V^c L0B]6qUÐ#Kرe'k̙gˠvM4ϡS?6ͺ뇨U^۬c 6Gط!c3Ny2cӣkH9[ϽY'U7^0z ޗLrA`nG؀ep- !~Vmo!!Hp4"y"&Hb26֊5b6bc#f*9ێFcJdh7vK}$qHcq֥j[>b0N $EBbfI_$k&oZ6PdycV:` i)E(%jNڨhr]ɩ~:U*S:.ꨡ:#F\VJXR*aDy 쮹Ke$@$XA .dC%* E5nG!1XI)UdK1 VYM"IOAmI3QI?$SQ>5գLn׭U PXZeۆb4+wFpۗݻ5aĉCLqRË%Oܷc7#Wٳ˙Ei0Cf7kرSn]biٹu>X7fU g,oɕ <^K,/^t{jw;x-}K}e?m_ӯ-yд9[o D/ Ah-p50?"< O1D?dEJqg%mEEGjGH#16\<)GG&}$[0|ƳI,A SL+/2F3A$HJ\KK<}S1SKORAkMGǂ4)F/ݱLM7ʹSOGiRS54մ,e5R_iUYV\ŕXw-V_5،v <0… :|1D*Z1ƍ;z2đ$K<2ʕ,[|Y04kڼ3Ν<{СD=4)K?:} gPTZ5UQzsֱd˚=K+صlE 7ܹtm7ηu ] 8~0ɔ+v 9Wɖ;{3䏚qr:ꗢKߴٴklYclmw<9hx/,n\騙87[>xӂ?f/-ۗM?~?_6ԟ8` Ty!`6`d^@V~HE ChbJ1$b2JXBuG#8cX@(dd_CgՑ-d9bhQ)eaZ\=B9VEbGYj"&kq[t͙CI'r|gb"hYT(eۣIhB~F)\ui0vڦwN&*`޹teJ&b!_q٫nP}YMRԬ=!+kVh{ Aђߎ.[k!I{-«fQlS&|l ?>E,qz VO qX,2$D4֒9ˣys*<&3zUġ͑ 4PM}D[kjMMu7 -6u]6qmgmѭzM3Gpso u ^w-G[H9.4*8);;Qb݋vǩcycS~ꬋ;:ϰ,ĭ{N;^3o|=O:=i? 4xaB 6tbD)VxcF9vdH#peJ+YtfL)ygN;yhrfPCάiRK6hTSauzkV[CBlT\ɖ5{װkپn\s{W[{{P-^`5|1MrdWZXrf͛ZL3gѣI#ХY|:ul]׶lԴo6nϼ7~5ď7w3r̟W^Wp׹wm} ~z) %~Oo_>Ͽp-D0,\ .C0P;$LsOЍ tB5]R H-]/ԦIP NPET7M=T\KsZm\q׏nuHb ! }$dUPjRf6jVn֢p9R"tuZq]zuZ5{ ףr`,W(^lS3]a)Ӹb.c`cHON.L Y}YYҸx~b;h'3ݾ&W?NX6Z.Zl|uK:mFm;1ތmVg5\Q p_Nq-fq+oE'p ЅHDH JqPb(A"Jʉbo1["5n|c D+tԢh4qZQQ|=Zmi"r$ R6 Bd#WIitRR(;$$CSUy(鴲!"=j9.G3CL"LeOd*RFsEm<-w]XV)f!P p41,;Itǝ&ig9ũә4dDO'4aNaz R3<&*{ t1ﴟA5z$G+i5|T$C?Z43ueP8s,g)f`Q*UBJS9՜bAOԲjTG/UqպB0|+\ϊ־nUz+^ ؽ/MljW ryiU#c`5b zUc:׬}*jSr\dVv@dkeвv|ui*޺]-lcW{,tRQ%,sZ7x˷iգ^z˼H@;PK1$E@PK,AOEBPS/img/agg_average.gif<GIF89a ::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!<, @ H*\ȰÇ#JHŋ3jȱǏ C0(S\ɲ˗0cL͛8sɳ@3 JtfMH*]ʴiFEJ ӫXj*կ`ZJٳdm۵BǢKݮpeU7޻ P_oW%̸㹆K*˘yF̹h̠CָiS^ .?M{kظi͛uہne v# ޻ʻd1ثS'}O;Sы_?hARc_@JXWc>I?bdQYeb\ 9i^Tbd)XafyqRRt'dvg{)_*dL"h> gF)enj \`ITW:j kJTviAkL %²t@$XA .dC%* E5nG!1XI)UdK1 VYM"IOAmI3QI?$SQ>5գLn׭Uf;v)XiծeYZFm۷ݻ&<8pǼ~/faw;\ٲ_5ߜ|gS3o& shԩU]5ձeNmup]kmtoi/:%a̕OV:??^펽+RI\RH+J7ESOq2T%55OEUSUEUKJUPa5-U[uz5WEUV5Xa,h „ 2l!Ĉh"ƌ7r#ȌG,i$ʔ*WlefҬi&Μ:wfB-j(Ҥ,el)ԟARj*֬WF+ϩZǒ-k,Y`ײ*-ܸru-޼;/`w.70ĊG\qÌ'S1^%[V̚m^3ԪW="ئImI׏e=7‡#ԝ7MQoܳqʥ?n'{ܹ3o|o~ӯ4|O~.` v% J7!VhadzaqمҀx" iԐ)Hы)ʸ`EũȑJ8NT=^ǣKb颐AF#~ )ԑ-59ҒIJ֓+U`WN%DQVP`%eDfVbf&fYl FnWg\rnuvNg]}~R Zg%EA礎H\sej*Yezwҗ*cꪲVfҺ&뉹a` lDlPlOoBܱӾFIۭՂ@َ{ZIK[ы +_-ZlllQ3,7b[Scl9-2{'k+O ]rrkLvA{˳q) QS;tQ-4ʼ3ΆcS]m_^;6]f5itݶ^e+͎/};>H-w˭ȯ6'6ގ_M4s[W~r㟃訓:ɥ9L,{~ޝꭳ輧}ϑz!Ӿ>7?qoΗ@$XA .dC%NXE5nG!ETI)UdK1e @M9uSəA%:OI.e4#ТQNyUYn WQr%[Y^îer,Zq]oAxa\f,6cȑ.n\9haə5o~j3Q̜E&g+CfZԱv]_زQӾ7ܺ=]+?93^z]©_bgSOsPt6BMP@UшQH+eH:)tSLSNCS@SL4TKSMsUV!uqVZkV\s1V^;!"n^6Kw5ٮZL־Hl(fնl6!Vo5נr'W\g2BH^xEMZV7;xJ}]=H]at)~XHm*/v0a8vQ=ƭ䒶BٴMN`9L]&Yew4.g*No.cNfZ\fߧjzޫ!뽴Z]q~knUmF~Ec񎺴 Bnmp"6ppǫcmr#1?3qss 0EJӯkVhOLcǽ'۵Dowzx#>uU~y_l磗~zzzu<{1c(Ƿ|Rk8}e.';'ů~'M~DEPBTEIY@ vi}9h ~-!!KX˜d2 YA1l i(C0P$ uHAI*CцJa$ qR|"("L",b HQшet"cxF3nPSԢhG,ʑ9 G<0HA^13Ѭ*TH2 H/$aRqCϋD9IL~PQ'GG葐d+eR .sFē$%| %]G<&f0Lȑ,&'t#m4,+Y+̌f}!#C8ωL`~; ~:'n)=1g>7+ na"p M#5(Qo*}iN^&04!irT)RRR3?)ґh6[Nr򥙼))Ƣ:uI զo̪V*ծo Xp4gzǷQV*]JժѧDT\EskRzV}k`[*BSիa{=d'bV~cZ}̎i*–[}k7{Fjg+"Tmm֭nw J w#oyg^bo{e^J ;PKSbA<PK,AOEBPS/img/maint_script.gif-GIF87a焂νަJ9}scϜZcϜƵέ{޶Ƃk{Κcc1  JMJyZ9ZYZccec}{{}{1ececkmk119<901101,@΂ڪܩᴷԩ H*\ȰÇ#JHŋ3jȱDžǯɓ(S\ɲ˗Br# ͛8sɳ'3tynlG)}ѥK %-:)N*k֤U6WDnj6{[Iݻxaŗ߿ |rHˆ+^̸1a4KL U֪kӨS^ͺװc_4WhWH ݂x{7@ -\yrw/w>ݹŃ+7.ËO Y1_Ͼi5^-e{.Ͽ('K|~! t=h]uV\Q>G ($bd`,,"K)Ƃ_03Nu 0 <>m|=Sc:Mg!LJqP6.u\vCBBa `hlp)tix|矀*蠄jnc^9~裐F*a(SO}8p)[Tz>w9)\j䫿5ݫYZݤ뮪Uʘ1kʥ/6F+ VkخHmvm7tHoa: gK.Qn/gmZh+lZ{/i&6Sr-lO G|n}< i1- nJެ-D##.)SP3+-.wJ YXg- Zw7s dN= rBrw[smj\]ځ<*f%Yj^6;BSnڍfyNy@zd@@ON8Rz 鮽^+r8@ J\+K#.ȧ!@XPF@@XpjY `cT@0T 2vU|lI",FY Jֲlg+ Jz=_@S[r-o l)P XHM0;]Jͮv;r $8zn)4j,,jW| E'UY>Ջy݇(Y Gˈ5R1Ի)5b8h>W|60~V7GƬќ%I%ȫ:`.*&pI!2Lewi. ʩ L2hN6kVE8PUNS/_}#v} +}Ez>#g#҇:7(U[`}ɖ>}~Wy4{XD$|4DPIGiW 7- xAwzyI&$2w8JN~x|A~a~>!~7e# p@ T6J:JnJ+ЁPՂTfZ|s=?(BXtDd}EBGÁjrX,g.wLJZmN4BuHz"|+H,&<؊8򊳆tIWt؋x 1aV+0W!pV# ˈV(V8X(XVԍpuZ5QX 2rEܘ[!@[dmV"0xЍHV(%ވ\PX%]ZYY8Y5XyE0ȑ I#@ p+ْ/,)091y654ٓ В' E GI9QLFP9fTyOYwtXٕ^3^9_CZpPslBn]f`M#oCo^~R;mR9y_y^)^]4&#jFjv;qQƻx{8 " q._n`&ТuRn7u6pv@wcܛ rK69w{(8{R#|/ Þ/1ig!vqGq1C3}LM0| \"\&|(L*.0|MwIEx C Gm۴ !>Wzl|Gs~FP?Hrņe 3}Y(d/AE04GXl}YA@Zǡ#&q G&%A78>l8f7b ۇĵ}K~I Oe`~`*FZ쩲ş˭Lz لhko,~*Ox]  n:̗%[hE¬kL ɛBp*ԑ?Q 5$5Ϋ,|X ɍ J,|L C7dL\KL~ <һͽ,(rdLETnNlɟˬDx АJӚzȇR渽\m缆Έܻ-l“;տH°д$7l{INx\ Q}׷ !&Z"Pտ{6=;jHט'(іOj̠I%Ma) %$ a=F[=R-R 2B= Yp 8 Cf!ۿ{ƇRf``;0y<ѥE]A]}%'譥 C&mߣHt]@ޯT<}CשdJѭ}Q }Vh}LI|ǘx3 YNҭQ)hČ-M+Q7.Q\4Pg.lyM%g~z ES{#: Y|?>A~N O W)Ƥ~yLPG៪\ 'Lh]k;N^k-/~m%蔾eQv韤j^;cdH1l '냙,S)`ƨhо~bV.0aT+Xh,PouViVpXW~gW[ȐTDMU X? ZS **8VVniWOWpUWiWWX.-YU2?YU_g!97o)ZP'ZXTV_XV\\$]:Fc HobU/X%t?v[uw/xJ`h?]>̌v?``9a?'!F_aai?cx|IqioǿC_g ˹fK_?p=ˏOOտ#os?oߔϬ??/oO 00p)9IYiy *:JZjzz(Hh8Y yk[x{ ,no~{]]NϞ8{ڹ{/|:|1ĉҬ՚M!Cyӷ1!G@+.y,[n8rz[Ҧƙ{ 4Pa|T5XJkԗWSATs2=UꮥQIj:&T,Myйtڽ{,L*/ >ؒ^l;~ 9ɍ9͜;{dѤK>14լ[~ {شk۾;o{ z9ԫ[+ܻ?X˛?>ۻ?ۿ?`$U6@ .`>aNHa^ana~b"Hb&b*B $J5P]Hc6ވc:c>->G!tUZ5 :d! & Z `%\n٤an9ef>9%`dn grIC:R<($+3^`UI&_F(V:y(>Z(^JZ椑Ygni~ʢ1 ZMK )j颮B訣 륇j+Z:(KlᝍfYt( YZ-WzFkmȎKni96nKo6l^ pLV/fp? 1w_qƟq Lr‰<r.ă-Hg50s>C,syCV\_a%;n)I?? uR4\$ZIeZaOxj6UWjH7N=eعb+ޔڪ-=xۊ/xod6m{ Zk߆Km∋x袏>MkvT~-&{~¾O|/o/|"dNO}_}o}Ͻjr~Oߏ?+ pł3J/ ɀ[NQb,n tE G+N\$ OH: l%X B.hAua\W8K8U}ȥpD4 iq*Ĩ 1I⩒hmVfnH&isouCqd&8k`#\.E8oX=ൄqb ,2%Ųc$E1@s KY5B(QnC؆@p2 fQ5d.Pl4h^̉6yti#[|O_,/t?п4v `Fea/=M9z}p' @ Ҵ?l~/"Tj-/{$L~@ %T~ܡ@ۗ(QFIe׍!}З"۷ @{ "~%TG|:`DPqO DOGazGX{ {{|XhbX|N#d"Sw" 5d;!4ytoq%}}}ZXw-L`9w~X@TCRnC֘EE8膎X !"w ҂icSx&~wt9WxA8NE<=9k38P8 ,.!UČXwO39GPYl(`$8& QLH7yk2|$ EgxbRЈa8;0H95h; Ւ0{Ƌ:2({]9a=4nI uiwy{ɗ}}Ȗg p);XceىBh jyJ)i;Ip89b {{(H|%ȉ…'X6]GTy";Cr.癑Th#} HEH6 'xQ@~Z Sy)Zם")3J$ ! YwI~9\GHŒxViiY iy"g ɟ1hQ9/j[i;/y3ڏR00<>@*^y6܈ PȓHFيAyKIQš)ٔkmÛ;.^p p1 2٘kzn ywFjʨ}ɧ?;Ĉ ~ntz#} )V)T?9-|Cs]!2I2:8 "ι8g#-HʠS;*O:`4#騟YK#Q =xz; ;EXfW! 6ʊUڟ>8 M c+*:̊ i)ً*<٤=ʚYb|%b$ʱ מsfQ4Yɯë){.{@ⰕZ#zH\kHQ7`B @I {}ڨmo q+s(۲ A"Z, b{}kK 2550[5P夤X묵Cʑ⹸ڝ'??:@Уۋj ۡ 4)0KP7I؉ԛٗ [:B-Ң h k!'(0P )`=xኅy[/ُm0Xc ̸0k3k4PQʥ[9 2\k2¾C@ Ҿ L|7[OϊrK+8+9Ki;Ðfi|KⵁƀŚt q,sLuLƿꕐPJƂ{jǏGk{kT'%Ol~[ĪZ )$*L/ZTL&*L;\ [˼zHK9ĥGɼ<Ď䤠h^eۖ@6fݽ^~)}N_}@N`}]PiNam9ꖰ^Ꝟo^>ܧgE|'#pL>纮aŎ憐. `0lnmT+l>.ku>V ԍ:MN^~ )0Ng7fom~^^&N>.V N yާ:;?AC?  <>rv rvܑ>PP^`/_ocikm_aCqsq^%.<<o_v/AxgS@ۉ* O3ԹMtOŏ3/Oo_Zk/Oo/Oo;PK*#--PK,AOEBPS/img/calc_qualify.gifGIF87ah䄂  4fĮ$bfdf4444T44Զ|dΜ̚dĂDdΜdď4d̚2  Įf,h@@pH,Ȥrl:ШtJZجVzxL.zn78N] B`~]~|Ųczga_i]s}saYP@2)4,!#VKbvȱ#{Czĸ t(\gH@f (O?}'QF&-:TiS@5 4*եWfZujW\V@g_FX7 elڴ xqF8Dn\8tēm{Nۣӫ_Ͼ˟O@PBL ^?$ `RX!fr(bhF0`4(J* \6i䑍4q5٤>V 0 \v PYTgX ^f/1sL'Drq]vd5yU^[裟)ǟ-& lB駂 gitb(iH.#-ZB)B$}xIa]y,ٍkZmk*+<ܖQ*g ўKѱ*{GKqw-7`J;j5 j1v̞ += n-(n0,-j8笳[@-Dm4;'vLȼŚD4&pR ,`+Rp5\\ɿ, mp$ڽH^L >ru/+ތ*^8WG嗛vtmC 9ΪK,K(:~{|.#o|/|;k魤_$0饀2ޱ ^8o#{S YYW?+@Pl h@VЁ"Ԩ >(L W0 gHCj\ 8 ˩.CY]w"QĀ$pM !$dM-`ENMi␇"$ *EG }Cbڈ>Q>@)!_;F:c  2oTdĂND,@&J)Xdɕuq( OJDrgdZt|҉C0M`K P<(`JEuں%^ t-M>ylH4_r$$ĉIr+g% 9N{nb|2LbJgAY1tojs?)&#uƘPNCRДВ;8x4# iʸqt9թF'Qt RuKcSOͽ첪;mTӋ/ \"?W!{EOG3W$l੿q?pIw SE'GJBPo*P߽Qz^M>[E/]T%_NE{}~/,/ti~k7}ߗwykP}+H~ ( 4x~0rjp/40>Sx uq|.&'e`GqD-L !@%'~À򀃨}D4{~2C E1πK8 ="QR2rEdK*ŷ~u[hnHqx#s2dwXM0q"SE rY0' ؇2R|WRGPB6hUFGh}epr WCxu4X:( }8pbXxȘʸ،.$WXwY֘4B؍_\X[Θ긎؎'aE_Ћ`x+VYU.g3 0)6c64Ӑ"6u 9 yn#OSYYYmc)*uYyZ5090()5iY,铮fsZHȔH(Z؏\`ib$oyVthdwpl ]xo DqTGu _T]&`bjȁoy78{l^9\'b85QF6v ٖy34l2ǚn yp9ty\yDPDa}\._('`\ɜSc W ~_噼]IjI7y 9&`z ڠ:Zz: &p @%p)j+*, .4:6ڢ8*9Z;z:< >DJFZ'`oI02Z))*(UWSVJ4`^*eڥ\akdcjpzn*m.Y;K:[xU9$j& ;q>7:Xz>Z&ZpʥJV꩘*1A:jH)U^h_x)PJBp>q> GDЫ8gf>k]NȞ9nA;PKúPK,AOEBPS/img/bipub_newrep.gifP}GIF87a1111ޔޜޜ11sR)J!BBZ1sRsBc1{Jc9猜{skcRk9kBﭭ罜sZRcƥks9kޜZRΌR{J{JsBcޭޥBcν{Rc֜ΔZR{ks){999{Δ9ZZ{))!{!!{{skks{ƭ){!!s!J){!sƜJcs{!k!ksc)!{k!skcccsc!kZZZsc!cRZcZRZRJR)sJBBJƥsckΔ9)k9!ccc1c1c1c)sc)9B){)kB1))Z11919)!sBB!)Rs!!{J!)sJB91)B1J)1{19RRJBJB,1H*\ȰÇ#JHŋ3jȱǏ CD$KBfmԨO0?DE8Qs͜@y)ҵH&ôӧP‘CիXj׮[ߴKٳhӪ]֏۷pCw.t˷6ƞ;0ÈCco#KL˘3kܭΛCOLt7ȥőFNtb˞M:u]mor낯cG_.6WWwEs )nA2%o @%} Jөj)%ʺRޚ GT&LM4ʢ4T"{PknWު{Z 60n]h6Sd3L37rOo7}gC6_u,2#SFN>)dNМN8 E*k4JlӴ/Ӹc<"/RnVhWy3[[ [G\xǤg l(PR7ALP u{ `nAs`!hx ".kj =Ѱc!HpWnL1J"_'>; 8uA#qcUHMyEdcr!1"H'ȟS xF Od$1ȣ򐺋J";  *t" "̤&7NvwTRp$ա蕰,16iҕ s[>$q-nD6=g0I +R_JU"naR8qX)6,ncb"ܸ98q3(:Z$# YCw` ʧ5wшJɊZtPTSz*r!B'-q9˖/g:6{2LfML&M^c1ѣ o[L1P?MYnx5H .%ֺ bc t$a^ZADί *X-@l%p8T5Jَ oD((W舏E/jİh-KwW8lge0>E6#!}hx7 Pˤ)N1㹅n!).p (VskZ:GJc\UkQ* =bJleqwJSf,HSZ~-e)j'LEl7a"ö%#abXԍ]2n8Mحl?8*&3 h_S*W/Aj,`*/E X"WenF3Uk(IY+س,j0RͥNFGڣg[fHҸܢ[VBv}1i?X.!ӢX#mR fx ^Ȃ8C f;nA\W@n, V,٫S\ocٯ@ =?k8SaXb3fR6򡤣PޗԴ'NKUGNLb4lv6Dk,*K?#/h|u-mCXÂouZ^TЅҗ]x,Mu֦:<{ %l*֭f EdoY s(:C*0?G <E npI /WJqEX!=@:gF34ӕZŴIqˋ1sXsmE[Eq3>O>}d=0PWv͆A hO_e@;}JX@?\T,l Oxlx""7x'e0o!8x!-0#|a<4Kx&-h $"(@#7"y-"z-Wz/j/z%N8GU{@cD{8 { Sm )QO3nFvGm| _oPJ 6u XXIvBelpwwWJ {o-<`B#%-@  pRRx!xp灎f# X"8K !w.X ]3؋Ű$zp0hu!!*łYpt{{EX^7s tl uc  u 3 jl \8Pu Pl m͖ f rQtX oGp (Ȉ5/" ozAX'yȉ*y6ix9i#Py5"ytщtF؋JY E pj Rz!DZpoyZ!׈ d ǠG 爎Dp  l@e|l>  ;*(㧐G w 9 ٙ@7xXqA@ h' X9I0Ϲh#wKwXعRhRW8Qb˜ ɠ(.`,w'&'ؕWDW^7d ItpG2oyq@ wl~zYJpwn +l_;wj*4G 괯TZުWZSj*ۚj^JhjQɠl|-K I`;zY*Ϋ\JRPpS [ X]\;Zcͤ~[Z䌰0մp·*dt  } ϑ+u&z\ѥ y_zngeЪ9 ]ؕ0^l m 2i#' _{lf& 5-.2̚t < ̮ |<۾LZQ]TmՊ{3 k0lx(}V+!z hloi}npp'{`Qɖ`ػV}؎oڬ}ڃx<6 l.N pTԜ^VIh ۣJ Rھ}:JC& @G+-P.Åt yf Eo \Жp62 m2|xZ~ ..n^J7}Qa r.@nE=cc!²~jS=d+[ غg' 8^yfu@Vn5ZJ]]P0u Yu5VJ誰^]a.ch.g롸l[q.lȞ]y.I ķB膞3> ;* pg +Z c0 o& J>M技I"oN.@-zGpVIx8rI >i ;d+Vt<1!* &«oF@eK LF*$B>f" g @d `-fe /xn.BhoQnr< DIh~#1t1ԌtA7soU %-ڱ^I#; ),"ehGJѻfhQj$ ."x|z`"HMhߩCۗtRPLԟ,l:Z ?ϛ9IO I~w -߱HQ# DPB >QD zxѐFC=~xbň )DR%%M-]|2AR SN>p| TQП$QtH#.)jT3ҟTQe~BkQkݾ\urW%^x`H >h&Ƙ>*V1E_ fΝ=ɳh|;|ZjՔ]+P@ٵm߮m"U޽ywiɆ2ܥ8Ѡ~:TBjHYUHxS$=U)EW`ݺ8X"c9ag=vdG ,M[]涯XԬ\esgCbQgxޕfH_~?TK"^1(Xt啮OB L?XL%{se%|9-0kdwg::g)e8R%]|ZpISQ·iS(%_b&ocNvlk>v߽/'YnCCV@ӻ |O-qs\Ӈ<]ŧW4Q!p?JSGX`Jr@Pn?^_ wI֘'Y 9^Tmy$MBxkz܇QZ7&ib>(~NǢD5@%.Q#HCBV7Mq-62WB:繁ɏT)7RhceL `hʐ 82ƅ|S7r&H= 9QHEDsD&!騛yCHNH>$HOvRaU8)J?Ћ'BvTwm;K\4.G1{Ð0@2*;2%BÕ}'fF31%6j.wgBs!"vrH'?hf<66W>b8O9KAmTeD7ø=(N\Ǝ c #:o}F:֯$2HIZRRتNRҕU,ĎhDơ7`ƴ%k#PI3iB*4M֊-YѨpY:j]$CV7 T#u(hV!%ׇU`RL%< ^wza,$V(Lsް"N1G]ԧW6A鈌{cBx9!vsU<_@\EײiMnrqFYSnhRbR]}NY9(e^)92$f^I9 G3EvŞz.v 31x']hB#zjv{JF;S<6Mw왍3izC:;5V/'^ICgTm"FNt^PJpI"i2г[CiNvȑͻS1UYvm\.7Owuvw71njpzkQE-`5-"  WtT*8ӬW"X T.r|ngM7Et-X}@\#[NNV@Cd C#9QxCh;p7,eש)>{dKo'- F8s|U1G~ xHX(tG?oWs h32! lP4:"IbS]  M=|>)9I b{ڛ6èPcӫ>(RC JKLb@C> {tvA сA#1?«"D™2Y!.X)*+,-؁/01$243DC24d6Lé)$\ j(9!t)0=@JGık8x` pxNOPQ$R `UdVtWXYEX܁ tU]EZ܁8F YHr9+N(ߘqS+2JSĆq*H亃)ي3DSDtTGtDEC^xG[w{`G!FШ+eL*ѱ4qƫFҿ(D|H{B> Ƌ; 98;8uɑLHTɕdɖtɗɘIC@əɜ_+?Ǡ`*FIȄH k/BI HpLP ;9xo9$ɵdSp\MRtOlMdIϗMϖϸϖM,PQJITJEh"="RauUx@ePefJچZ|腆0WQfeae^][iNe-Xfkgfjijvf`m^ٞܠ_^Y0]YK5&)N48v֊5zj8矀.AgF>@.aCF6aakV^~iȖhlnnil665|v5 c5&; Fo&mA5&n .mn pށ'7GWOq.Xoql>oNo/|Lv6nw X cXް~kNh g& k.Wa6a 3G4?^78Gj7;gqɾ=6qB'!%r $mPޭ4α:nu)j@Np_Z1ro&ƃUk3WXu4s<\7qns]us?>v7j>5rRrж(fo+7ZuprhGڰlvuFnpHwh{|Gs{wH[u:u`/vqMo` W|DR!.L/v݆mqt17y.~w'7GW~owz®'7GWgw{7GWgw| ɧʷ'7GWWwׇؗ٧ڷ}g'~M~_~m~~}֗~~~'7~_o_w~~G,h „ 2lXc N8al1Î+r$HҤȌU\ŐctYə[DF-j(ҤJ2m)Ԩ%jE>y$͛Y=:6,K9oXA˒ 7*޼z/S-LU:v v'eLjM} ,3ʁG.m40'|9洗tlb_aT n K.~hʗ3o|4kk㜜a㱶ڥ]鿫~៳o=|/O]Po|=vW}Ǚ}ŷ :Wtݖ]u؆nԆF`kVAY -AX#9ꨣ-޸^?9$E6ףI*$M:QQJ9%UZy%Yj%]z%a9&ey&i&mP9'uy'y'}'r:(z(*螂2(J:)Zjj)z駙:*z*e**+z+dΚ++;,(,:,J;-Z{-jz->0.{.骻..;/ ./ <0|0 +0 ;J<>|1k1'1!\'L&2- 1l5\39߼3=? =4E}4I+0t40-4Wk5]{mP}l }6(M9}mvi6y7}7 >8ᅣ؉[xͶm?nwvMyk9{ኋNl ~nꬣ:ʨ.{ :;; ?|~|*>#&> ?_?(< 2pcO,P QvA V?B^p$S.|! c(Ұ|`sd>|D e?<ۈ(DN|"()RV"CrqS<"(1f<5R*Yx#(9ұv#=~# F6RVȒ E2|$$#)IR$&3MVr$5Q<%*SU|%,c)Yҕ%.%Z򲗾%0)WTiH%ed.)iR֜e1 pfbc3Jά9L*3Sr3kҳg-I dlAeӜ9 tSth 閰թJ+SkҦN[*EQY=,b2},d#+"*kZ0!kU޺Ժ5tk9jړ2_ÅS+Ԕe`C /xf;Ͳ7Jڽ~iܪqmj[ZLXԃ,J\5รrkջRU~]j;y%wc6mp;!5ARv&~ ﵺUG)0 ,.I`2n m{k d`0%3H1hlc(o)Ƕ1Πe-gq3._3x g)`Jd1%{|^9מ_ {])KI5VJ s (F:/.se|/kϋ^r߮gy^w {SJ:⥤S2L=S:]yKnvM]K2O}k76sw^F:d),~Ѐ <^M^A Dim޻5}]}_^͟m_ ]_ݜ_Y=_ * ]u5`1Q ẁ_6\ u ޙ 6^W! R Ā!i\ !\ƅ_ 6 " "۩_ -$V RRI Ѐ ))8 uIe",Ƣ,"-ʢ)*&"nXX/ZT'f"!/1NS0 163v\03n#7fXX#8ɱM<9[ܡ qc#Ɨc2N3?c<#Pd$GCHJ="+^#BzKL#6zdMң;£=nH$ES %QQ%R&R.Rz/Y$=$FJ%Fd$^ $$\=$UB$U2dFYBMeePSPSB7^%'tFh-J_go4&mfAb*[jpfo%vu~_ssJ'~f~R'x{BU`V䲉gxj feC'N僪{'kg,g}S~h~Պ\&'k:!ꑤJ#"Wfc$OdkgOF&6^g'}vh=}(fi)Hc8pS)~i階)Ω零ث#j4eo.>*)Ri)i鞾i)b*ꕁQjRi~ꬾj֪ހ*꟡jBZTުj*j. ++éRZkjN*+zfvk,u++A⫾++ ,>\ٻ+ګRlblĂA62:]~ɞ,ʦʮ,˶˲.^YÒ,+u,,լͪ ТRxN-V^-ffS2-9ӆz퍁؞jӘنmڪ팍lm/-܊ -RL-mJ F.fk6bN.Vnvrxe.\n2n뺮n.$ ./n< &M!6/.1F/AVoQf/`vop̀ʧȐ/٠/¯Я0'0 7p0G0@WpPg0`wppr/ 0 p@ ǰ 0 װ K\0gLp1'1׉ _ L+T 7q|rLT| ь1ШOML l1 qLDZ g {M r q8 HT8$G@#;2trݨ %orr ''c%N$" #7&[(x(-C2-r2.S2)0ϲ)ϲ&(s'+ N6_N6N7Î67os85s5ېs;=4Gpl3T8X3@_Bs4@?4C7s4C Ac4lt3> HIJIJL4IH4K4OtJKt G }P,5Au PPU ASYuWTuy5XUSېZWPQu \ 1]]C_/\5]Q^5^vbbu5b5QQ[uŐdgf?dogUew i6jʤ6kkǑh0'նmv$ n6o6#Ŷlg wp_pwq +r77$7tˮtsWu_wdv-sswPwmxs7y؞uz?-{K{`}۷7sws7)wx4~x{ x8lps#c8CdA\x7fxpox8m8*E)8&x8*Ÿ󒍇Ցx7/ww?@ y)%,qWy/7y6>9)Q7CAPx(98/y9)qظ#z:"|xDPĹ)!z'9z:36>h7[zH3pw:9zG;y{q*:3 ;3'3{';#[;$+A;'kzwz7<Ç{3ֻ[//I߹?yƓ;<+c|ERX/zkxɇ{<7{|ͻO;?x<[,4?=GO=W_=g=O<ѷQ&G/=؏yGח=>S$Go7y==>}G?A 1+7fS ~=)aVyAAR=>+2WpV[q~;O0o>1>>~CX݀ ҞRWjUsS<+q,=rOEw@׹ˣ<<{?X?@8`A&TaC!F8bʼn40cG=(2@:lr@-]r)eLg ˜>{9'OE#}iSOX:jUWfպB9t#eӝ4 WҝH teݽs}:paQ&VqcǏeX&V%ӷz{&-SMkMo}p_÷qD wo߿*y!e4n0vZnu ڴ]m)}ߠwsϽ[xyѧJ\4jķ1ΞknzImN0ӏ/N"O!PK=bAC gRH;@:1@H<-F#PyQ !,rόL*l'  !R/,OJ3LS5l7S92.S=2 TA œCM"? G!FCRKQI9S. UJ3hOQMQJGmUK TUiJV_UWb#Uaouc€g5imm6m5oZœa Wuh2^HyYX$x}SMZh{ ! )E71j >8aZWS(3W7㗿ykLv<^Q@ & DQ54z#`D@h,# Ȥ% nPG4B %ԓC'-LwgBB 0fC'=$uЇE\шM, &:K3*nsX$ÔeDh&[Z.,r9=ۍ=#jM ;({ JJgRtC丆Nw1w%e&?9X _Iq]BmUAɨ^ա%ֱNʬmES\WεNEmYߺ]իyk= `7H𰈅bU"_c'Z֮f9;8zw mFKZЙKj 뵰-lgkږhvۗn+8$r-\<>֔tKV1uzw] /KpJzc?ג"{+WtmT~}_Ϳ`/ v!a O1<_1V0;a#61K|b 1+v`Sb'63fk|c6;qZc!g,C6w{|d%7Kvre"7YUnUPaY]NRYe͜&*mvg9Ϲj>\=}hAЅ6hE/3IOҕ1iMoӝAjQӎ~"MjUխvaiS:84bk]׽im-<7n' pdvmiOնmmⰟ m6ѝncwېxk`%o}p7 vG7#1+|@kXAr-wasϜ5q.sw\1Rρt` Ϗt/MwӡuOUգswW ׿ bvmwwϝu;ܵ }߁x }/x/w!yO|^<>O 7Qzկwa{ٿa³|/b}Oշ}o?/p\?̟~wϟ_F<ذ~Po/aj/ 0PT 0;kE-JB75R! i2"Ba/0c@]0B%U%R1Is>G->0sSt,WEMDAi[^2GFo4 }\v{>Utt4A#FG/0-t1SI4444;t@-47+S8K/L6T9?MMu8 <=鴽T(;7sN}K-+P3oP'r7@SQQnJ#t8k1 H'ķ(I!STy'qTMUAQBUUSGeպhVVR.Vyu8sl5XeXXJ=uYYZZ5[LZ[ͼu5\m\ɕ\-]U0]5^u^^^5_u___6`v` ` `6avaa1" ;PK_ôPPPK,AOEBPS/img/prod_data.gif4U˪GIF87aooo3f33ffŬff333fff `,@pH,Ȥrl:ШtJZجvzx zn|N~nB¯wӭۂ| 8 23ÇBH(3j#Ǐ C ɓ~<\ʖ0cBdH97D3Dϟhɩ(\?4& 6F(Vhfv ($h 0(4h8<@)DiH&L6$(DiXf\v`vYedihXp)eIx橦_-  j衈&袌6h|)餔hf)nfv ӬO2DPpj4BUҨ%P”,B˞iV]F VSjY+`J)Z];iXۼ:WgT5[-ھ[+$KN&;pRGۻv]UT=.x nn_Vھ6x~씡́#GoNrɹt_&O=ݛc~{{TM9[[$َibԖ۱m(f'K,2 D`1}@PpN͞'BZ)2r(D'm@.Q\p@P Q*BJJBKD3;UZ)eBwSJMB SRJ!`lZ*z'|n V+Pt$:Q,Ŵ@mLԜz馒 /uKwU\5Eר)k&ڕ8Qr(@RB=[Y0NC+S)li? SUnUkjϺR԰$mhm{Zek}آo)*XֳM+h[ךVo%.rkZޓ@@Jސ eo6M].k[ZJʅog .eKoj͊W~Y׽Uq;ӖUp_x0}+ #h4@b5h{g4n|G+vp3aX:P{xu hjdF\*Kʪ(կUuKfT\g+Kf8{ @Gwk-4Dw}>dBVWsbQh,,PtdVpF1o99iF8ShgyYs(2ur38=V1_t=o4fOehaɄln9[pS&yfuI)y]՗dy ȒGjW}hݗP!x'YxXi uWjp('Uew &(0ɕq暨ě\wY~Zٌ3zșʹٜԘ̗Ɍ-ɂ <ƝL'׏IVݷ๚ɑP`+i9Jy|qƟg&H跕Yk sq>֙]rafTF;=UNY~i,0ef %hآ2*(8ɉvOvm F{ierF^\) NHzl9HomS:U)W5V[Zc]Zѕh7)i/CZfF*A0ZN&bb:[6(FHorC-:godJtq h~zVhk5YpfJZZٖZhy*٨V︫Zgz`oh:(YY涧 *[ZQBY2rlڃȬZM7i:_隘_ړxɫGڔz8(tv@I#j׹wڎy l zu8+h+#"K[}Ʈ;zI ji'z8زXhc*Hګ ID (Zdz.+K z X+bM{7(x 4:V2Q;FkC`YɪrJs^+{ʺ~ js6맍{wG _|{[~[ڡͷ;ixIVʙh)ɺlwۺtҚ)aHIw}TGYɶ!j-[{؛k"{J]˼K4 | h{O89TY ʴ:k+K~ Է|Ӻ|QFp*L{Lon,OjL{<:/D-xו*QtX}mBi:hk+ګڲ{>Z/l͞͹mMNȭ?>]pǮX h̎)6M ?~]6=i\N:| :(ce+kz0~"o*2m72N ӱ,,GZ՞ԃ]5=o-rT# >fk:^^m)mn,2ƿޖ H5jEm _ߏoi-Hݪ .ߋ߿__ ;/o+?,ѓOg~'~lZ39̌㕞낭&89>ĕkڜ/}y]yͷW@  CeidBi=ZիP8lM[N A# AA(qqh,njsstԍsiT)uu5SjTV(vTɴ7354uKVwwXm6[s7=\ xOpPB"BBE(E"HҬtO2n=MgQEv`(ZFXʸZxR!} G/ .ȤSH&oLGa>ib IM |B?N2ص%d6IS׸i(i,T R:ZwEl,P{KZ!]%.] tNK EZq\gsU^]~Y1Nnt-߂7hehb.kニzxNvϴ뫳xsL-g{wO66^;7 amt  U^m'>:`.hl9ԴPh\;p8aΗU:6b'.O7tTkT{dRewm(gT^9k5}x2^X-tlׂyfOphל"Hwq)(/% <ӝW6Tzg e*s Z!(RA)ȵ?L(HKC('zT:T<%{c qFx:0JUE"S*}08xW(@#%Qy{ i5 !x2 >*BPC"l_e*q8={[X̸\|;DZّn%C//$>KH\*"%=Y;}QO #H<j4 -)EG1U)mba%%6M^(Y"{DƨMJC[9=YL@Nx"裺yŜwC<Ɇ|!Yf$iuY 5Wn=a)2l:7:5yvT]^},OXR1LiZS& g?LCCjHETZ3!SCEߦJ4V-.ZZXݗXFV}l@?!F+ G +UTJYq-2'|kJ*Vᆮ2`=&cs gN%[7uM5Z;` !܅$,Z pY?3aۚ%@JP3eLґJ38>ꢗFuw^Q_P[lnhUpzeLc)w o1h.͚@Tz{S2y;EFRˣ/O҇G?V%}0{Fpzv"{Poդο*vɒNW\{Eɸ_l~$bǼho:$[WqY[I84a*;]|XEӕ[ZyL D1RVu]U-2&| YT`ǵbG,[UD}Jq$KS|XϨYvP=i6@9܎ZUTK;cgf)X2TgFP0Yl";p0QC_ )5L<+;*uo%tndd{"unvvQc) UVwxWxxA,X=esntvh7w!W729MV92cͷЗrW@0#U>sH'j" Iw_U9>%tsv#<]ۧJ%x !ywKeG]O()'0<"/JJcX67>tXCMM_vJs,!@I AHӾDJId:Qlir]8e sSLqTcOSeOV3`h!lOg0cM PcUWdlHmJsvw{I.-xN!f~ڏ iXL-T阏oikkcc>ܱ w.%U oIx +@TZIhee1^MU9k;]S9Oܕ`wב}3DҐco6Qe 'ɓU_ Vp x 9T${IiI+mVby)t\v%YS7Nd`A1$9yu£Ģp#$ M.ujhqٗLBBW~FQڒWڦ9j巺вS-!Lw)Q_p*؈-ɺ;W21HK|ׅsY6庪V7׮}u/;W}AT4ײ/3[7l5ҡzI{, ^fC0ڴ[ׁ_wc7{c&u\%j7k1G鬧UR<S۞A(-yxt[yz{3aqEHU@sbi]%%-Z;8ٿ{ %?:9߻H %⎫{o>Y)wYK"FRgރ㸅zt~YŇ ӭAE|3/G,`Y_,/ǰIwS6]r=&#/_^=2;9y \܁8#_7ۻ}6 4hG/|\vOa?ug3{c~W9R~-܊Q؈rǛWViW,])YYKNUIT׹fΟP^۪Og?0>C?]+ph,!dҩqD.WR,x*NzسWK}L6s_h>Km%*. 楍QFA>MRv2* XJHDH$ z\f~ 6Nq.WB[~vyg+:j!2wC{?U?kq :?jfb?׷ A`TXhPJ8i!L#n5 "q߿U&6[t!7NWN˞ToH*hPU]X VZQF knv C㰉Izn01 ݊x.3s HP3 ,5U Yz:i lqkmjrmnplU=֏ctuW-nJ4ت+]/Bޤ?y`눙ÿ${`f(Tkd[TB }Zx]HDI|>La0 RN5ס <NeH8獌3h"e8b,"( TlU}WߍG}a&6gT&kY fvPAy7څZuj٧K:a*pWaWwBRNZiZ)rz̃IBYBڐ.ڪZ⚫ګ[ PeUuZhvb{_Zw-^YuVBn^ێ:lJ+.j q;p2ߡѿAr2q*@'bh^%6ܷ&"4C~c]}_.Jg¬ 5mHW#˨kg|S{T$y| wr6n8DO)mIz˷Uݘ *6nrd;x}D=MQ>/u}{$ܓC54C+)#&z9kFG|7:f@!p:A?)q; 5%\jXL[,7|&:s a$ .v/^Hع*(3MXGܐ.kS理DA| q"X~LCh M~%%7$ְ2(:{N)}t_V3䑝zlǐ N(8?E9ksNFHWv a,-B"mvrZJA0VLC)QQk(cV4Ej:e{X3o3'9is3\'N؏s&D{̋U<}iT)Mqⷆ)L,a!xA^,+X>EEKgΉ~!էٻ3b Njapu.%Hg-:`<5'c&tEe١e{K?_h(iCfIEz5ȜR7$W:ֲ]-G+.ېz/.b^zӏlPX(ukJiP6Hml[CB+Ht26, i׌2ɞM,x7vn&GsgRG0dg%ƧE5Ub=5})@KFRgSZq}(Xh)3U,6v=B:ыn#=0aU8'u_Go);ɞ&=j_;-E5;WTr{hԐW>e.q0+' / nӱ~yS{Z#|^Ts*%σZy:W/wFi\3%B:=L,ae|{dh&Ϣ7~>-z?+m3~?l"֑YYpmVirS n`\_K!ߪuQ\W~Y =ua򕚜!<`Li ʵOɎmaV.`>aavBk%) !֡[Tz@21%& "n%$KT"TX & 'ঝ`q\HEQazQJvb߁],隩9 Q#H3V3.1"2BڋP}[QR ^#B95J <ܸc>=>[l[{7 c1E&q"#D@c 梢]1]*JT9!d`I]رy Uq̨OH!"j# 4%=eQ M٤)]VjVreWzW%D e(%61eTZ&[X6DYYVSZ%%eG%.%zRe"֤RގhMZ9Ҕ5M^eʖ %,_/nfNX6<&-{0lDX\emdh^N*Ljjv\kN'HlBY=u!Mid<0zdur7J#vwja0_Ywu]|'Tc]`G  ' 6bc|tg#h6Z`WEh$(Pg>qr# [m*z !,n"8#h&ٍ~aaV,b m ט,(I*yf⏖"b˸h󔙒dF!#"")bXDi,LUV)V_fi). R "{).je5ΚF*a&)f_MbVe ])"(n)^=j Pi[g"™n(`\*s9v0j٦9*Hi&{m<֞G@4. ָJ;gcaJ$^A.2h-dmCz.һDA"/Cƫ#{훲Zb&ZaqVOj&^|VYƵf=l]b$VKOKfB)Òê`l,l0qKXllzBl͂"NVвc$ΠN-&f 0eav~]mfU[d)tFKlp#e&fmŒm\,~Eb4ҦIEmF-n&_~W)!玵F ʭ+wVVa,.Iu5X"N!B.N[ΙZnF+%^4 /f]to,&ֿ/k斫r$IݖrrrtH'^ :I/[Gܾ% S / $ +G .p,1bsi0UzGJ-ްLrr.r CQ*Sj7_vݮ+402醄2rB(*/ίJtﲚe+Y HSi=4 @ ?#qjZ52:5;1]]Kg50즉R *S#O;tO{pK55uiiSc/ò#P 瘾5fv"23;DbP3B4^7t ֞y3R'mjs[6zvJQlr'veVKvѵvsqB2)2OqWs=%k>6vi~`;[1>kM k$c+%?c[/Jf>u++ 6dsz/j,) .xQ4bL17 toKGcnw;%wъ4ZWwj-z&wvr4ծ3y;m-9EVy+mQO{K9]1[89ື3hwkqg5RX526Y'qGo9K(vs9CwdP ,WizaO2 SrSWVgniW3tmk@$;2Ӝ&+ &6Nj*z2"{'zIg;1R>rYoyoGѽ72/t#Z*JPu٭ w6뼿ӌ3u۶#!F{vgtGc*9&;EU=Uh_Fz7{2'AH>3/8˃ePnm[%*cWc7Ӵ|j㞦Əu6Bu Zez2A_kfpYN|XG7ݙ(»ΏBǴs0t}B76s ʏfz !7/=Dswٟ!&$9V״>ʡꃾI\2#b }+[=ۺ)h*W[}F>pO[e2􎹟۬7Jҥ f ~,l^&?@0$GdRd6OhT:NWlVpX,& g1fwox\>w|^@ABCDEFD/235˱-N*PQR,RTUWR00LۀMXޫ^`_bQceaY\\dkl$lnHg3i""#wxw5{zux}_!K' "Pay68ш{"O`?qڈD!I_V7뙭h!̘-཰S駓g Pҿ?^L8/_هmwL8˞p-N8.5†̺٬2<[@$T9;+B̛+ AP>8Lo" ъ,+,C.FєbӐ`lB"ZR\ .1 $olH-R2Dɭ؉/)%ђ%1M& {5+DB<0<1KRP'bN")1QPNt DI-#RF;o +SRc\pDdW!]s0V7UG磃T/N=-am6#dcOIlHi$d"*o4 >i$8^T,/ .1,+%3[%ELP^/nFxO&B^4e^41()V6+|5fF-b&+V=gVl:'j`%l)&l^Ik?n%mOSpSz^Gwq#|r+r3G3.A U U"'iJőr2H"=#)Yٴ.'rL Ce1i%M)=K Q`z4KYUj{b5qQ)߷K7QH"92RQ)7jU-"6$KIVǝgF0C-&F kƐQ֊DG 3TO_(/U(*}GR0,2@rꜻ&NKƕ$("j&-."ҲdAJࣤeSsխM1 ɠs YJ>J [-(;i)\_H (̱M׮tSWj7KٶZ+{7F/yEx5< o0N\\o@uݨqpϕn5^Cc,5w^Weo{^΁=nn-ۯ2k`7m.~ xn F|,`0(W fpP+ U\n=eJ6= O~(_ZӦq,FWW-(p-+Hոq8,; jcpYPVurnP~չ +I1ņҦBiDj֞6Vc,F2PBQ SUbgY903,vf䄬(74H`r-JDɮ]R% T [V˒^UczW+&)zmPrȲ+e/0U6;MGnp?=uv }c=T̘jaL1[.c7#'pEL'NζhtCYUo~(&ʽ%[jψÃczo;&1M[.`9pB\k-£`zFބy>~mѻ |CAХ&G3zboq@c'{{]F«'+(U꒳LvPsG4{Ƴ>gBnj⡀9C l8q>Ih'+|Eܨ:l bfLު oir,JycE*<`o^p(ރ48@ |@8@ I++ >tph?˯?rph@ @? @Sވ/A,A烾 >þ(0 ̿.(  !cZlA'$(>!D@|3<)d00? B@LB.ꞗ ysq-a;T6ɣۓC=Һ+>͛cTZ@rZ31D;3Q(&Jt#1bEr4|CŚ.Z-P_cJ$?CC {D}"crİِ456R@% çY cF3##I䛑/jG4B ^FCSfK4q! ,7gDn2 KGmË9B6Q El9Ԫ}TR4Hsakq$ISa3Rz;TV[? 6A4Gq;C3 J+=I@Ij4ǺʣHr;ʂ8R;z'D D*K1K%J9 ӤŮ*;9Ӹ''Rҧ<'X2 $ӻ|L촙3-b<S=>S@AT@5T?E@TB GHuTHBeTELmDTOA2UR-US=UTMUU]/-:Ӏ;mSzSY>м U<Va VbVc-Vd=VeMb5_u`Vj]VkekVlVQeUoVp WqWrmJ@3]%Z[ŞBy}]>] ]\\]\խܼ[ٝ]ڭ]SuUt!ܽ̈́]x }>{M[mIU^uص]^^Yq ؇uߵe"de]_m_Ѝѕ_M_e^_Ec^I_@P ` ` ```` ƀN FVa.~a_a&25` ff^%\ Xb`[>}FAb@b?>()F>c x11&0*5n+f7va:c;6Sp5$܁A`` H fEFdEfd pdIdHJK~FVd  dKdLLNeTIV^eW9c[e\VDBvA@?>$?4bfguftnu6eygzd>fFf 1H`|vhvGNdNh^hnh~hhhhhhZgi...ig1H0npiniLXi霾iijjiV.ꦭ^jfjj꣎jjjjkN闖ivi}P~kÃ۸k kkk3l.l_>l^lnlMlǎlɞlSȮllflllm.m>mNm^mnm~m؎mٞmڮm۾mmmmm;PKm59U4UPK,AOEBPS/img/apex_report3.gif)5GIF87a.4f̜Dn#cyWy戗vN3 >0 7D 4A(;:n;kCD6Do $l;|K?}|G:~O D<ԓ@L! @W@S4~׿p仗7 ƒa8T$ ey܀ /(Sp;Qȯ=V W'=PaKg}":RhRA,F؀hdA jPx&ӜM' Ԏ''Ib54AQ:Xkm=*WFi/ռ=*Y X&@c:Yue lY?{U1eiQG:]GuEO"1S q0^1 2ۅs 9ȡ#ّ\-qP)[Wf򺜬.{\1e>59m~!9nuϖ=l}Aj>E;mE~I[:^G7N{Ӡ4+*}Rk N> RB%հ5lAթ}- hK KvG͆MK.-Hx$(XCGpWܦBKYPCsiG7zt/:F{`v4osyអMEG73~qJ 80W[6˦" (K<ߗܷs[sN[7 w8'qv48ankzAiPN7(q[*9vPs d`O{+=x˞w=i ^J}5`nj}Nqg~z|l *h<4yI nry@N 0ߵ{8խ߽%0ЏO7`v}a/N>02?Odb?k⿿UU`e2R j indo < f 6 8 kPkj5d!h + :;46<6 vc*Xղ==c=-fllg6O ւaFO7nv `E? AC=@ل FHNffdG=HWA>م CB1FndXoKT\$G`3WdvZBW tFikd5HpgxtfmSNgItcKyNMU>W DOHQsTnz8 s'fL(WEdtO]T]0QTOE`|J.5 8fT<F^oaJUESTS&u[u}X h([%RX$$LVXQVWvyYq_vtOx菐dq(s)v V5\%Zu ''4x+gsHh]#VN_`%` z=8&TX `pzz:(FS:I 1&cb,揲G{`{7r[co חg|ܢVC`y W})}c9iXu( ٙr99yəٚi94'*!=B !I˹щᲃ ɜ b։y9) ׹扞ҁpPީQܩ: q*"Z q៰, ʢj@Pڡ5:&;ڢᣣqPJ@=ZSJ)L"zK2 4ʥKzRj % `zjmZaʦvJəai*`1'Z{][ʦtf U_ ~Jwکyzw c e IjgZ?j:k }z:9HfʬڪZz֚ Z"ڜZʬڬʚ~ڭʮj)*ڤꤪʮڬ|*皰szQ xjڭ ;Ar $* ˪ 4::pzZsjJ5[ qzʨ-zI(z{FڵU/˥l [ h;Jek{[0$; |,K> z `;;\;c;k2뮦۴z3k:K ++`;{LK[[=˰˹{K{\˷d A ʳ [ۻ+;ʻKCDۮi k˾;n KJI)ٝѶ |K 'u8;:q !*l=ܛ) B GlAL% i<ILO vk1[0]L._.a/c.e1[4g0k<0m|"BgqL/Y / v-HU)E]X߿c(T- C}0~1ʒ<S㺠,]1<-A8ǚ\2M3p|.L9~$DN|ӢB効WEN0^SW}lg"nCJp.sz^/1~~nQ.iN}cn.3l2`|Ɖw.#neYnWt .M\V˔&s<<غP1Ni~,>0]$=NTM, Q,޵"UڻnѨ-Ժ.MN].ylq]-з}sVq_?>ӚmY [uE]Fѣ1/̎-b x܎"_ScLN׽T^Vnڝ]J).!tΆ,҅Uwy&|z;ༀp^?D<ڴ%Lt~XN?fӖ}t^6~tބ@-]?I Z;u^x Mꂟ֡oSo=ǍpOk?gM3 WOymb/ܫުo9>ԙOVo M  H08H@(hxx(I i( y9ڸ)*88꺸*@ {[۫ Kk; lk{\\<,ʜݝ,, Ѝ퍞}/>oPϝ?/q < …sN!D}'fh1Ej $CI4)ʔ+SX0ˌ-g)xAA-h@/cZҩơX5֭\z 6رd˚=6ڵlۺ} 7ܹt$*bބ<"w8$q:/U_ȓu4H䠛5K̒0b&a)5eÑ_/L6:ݞqՋ>dʞ""u~0UOς:`Ҿ) -\ix֦A~cT}QT^TW\tSB'*[: +6o W0ߩ";\H"8&5|p9 tA'`%$ݍ2$wN6g,}6{p@8C*Kb(ޣ ݫ,~;Gc(>= 2fWJЦ vqmBzqlvSSMig4y,Kz&Z_Œg[咛Fђivzodk9n7\%Sjz$p;Q:<ɻVa<̞*;g)R/j?T]~O~柏~qqfΚ/$s_}|o?'= i ²ck*"nOuċ?y|i4Cp 1fTI͚$7C1H5c;\j &kT{95hq~j dsn(CZqыڜ&1A%SV5Р-XUZ!;ƻu;␅3)n1$&l.G֩0܏&HYЌ12 _\K,̂ԱXR18T8(/nl[QkU*6 *vbVc2Ø#Ca$Sڴh2&zR\Z- 6Ecofͥ4YxäecT٪,K`ԀٷEï_B5TNj2,VT܅)< K3|/G{j\OkRO3]*ZM6~Sl) ToV|8G5sFfHg3DZyִ"Js~zjNXMk*˧ZC9N.Guk\wVPTK4?&9UzQUi;(vOǶ\lWlz3Sq J0[*II7`CGuiOoΨBvaR &w":6QʭA;:*~tݼB&u` S[< tKxKpHʷIxż0]z?voUKx/axuCL{_78ge&/1{b nkWq{t!T \ G`ڇu8yh 1<1R!0Ҍd/YnJ+*@X)q\kͱK:Uhe*ޱ#L:=ڷz nmZH_~T@6Xl-Zƌԛ=t5j t`}iY\e\NyHiy!ImT][VnT=㩐"U؁8YMnYŖBVVZ%EzJK5) Ndף^?#Ro WMqڥF)N]jKyA?ScWZr;>WUKff`s܆y+}paG꼏k Q|6]A軎\Z+<хXz{Qg7cc^k|27i_Z߫(lt_bгrK;S($!VߵiRFqMī`\?֍|_lF;/U3`7Cg߄Ň+wzmp_؟Yen"G|{qdxo;7}!gԗL|#k׼'|:oǷ}/ӄ}I_ɩwo|Up~NSeS6CFVqx[\wfއ86gAZhPEх{huUUFyROx~-i&s v?hVv|tGhLvvrHmIfiۂHT7#8rI5Q\XaHJk%ovƃƒ%@Gv)Jv-:f 'L0ukHS BRUvf4YŅ01QSMoxFDTWyf5D9G8qYHy,[\syGsXgsrnEhxp]CmbGdPcsMvqhve~Dy&؉pO7h:KwB[؊֑v8&73nh(Wfa,"sa9r~-UOxR]eX1Biy8to؋phhZ23EtrE]h~_heVrTב\rtu|kUusƋGTc7W[soDȒ'AhhS4wgO7*}G'VzeeVyhV]eyex(%fV@ԎIWtQ/VzwAE@6k~y*ؖqds)piG~gczgi|:vh~Il闀Y|I3҇ə|iY)~Y3 y/)z 49h}9cnIpp3xSV'FIitI!tZy)灓\VIMȝh u&uH(eꇝ28]J'1jᔓ9GKĉ>$4w$;u7"e؀O0NTt!'zpXvs$Qa=L_5(k$b馟[Gl :yD6+3"Zo’l*+p RdfSBjCD .vqgVVP"'3ovyVN'Rnp72ȅHnzQ(r:-g )Ȇ.wLSXه?6Y)Iuc^h.af : b8f)s4:k52?'=Ԅ(6ui 3:Ml9Zh ,ٗ;j):IIChw94E"[HPww[G7N J!+!e:XȊ}gٚ楛Y^)~J~o{ɱ#˲%irɜ;˳=? eq2[' 8YI$)KKM{Q9kٛ;.c;T j G5d]5"e f [ŕ0\z,Ǩمrh:|+؅f{!YD!fI޸XYk݊@sjtHwkXy|)[< p\-¸hZ.[EHΈ7jbnJJ텆7>*T|} EG-wɛ٘\MNDlPKqL'lP kςޯZ!¨=]j.S̚?llNջf¨[xBJ ^ Tܲ$dD7FúUᬚֽ.¬f"-jj iv7YղY |+m c4&%B#okOڻ8=8yqY_MY+jjTl[ߪP#,*of0K29zrZjrɴ=MֻRj<yD.JNZ?h~aўo鱜?>ѤÐɊʰ̓ҘڦݎKu%vBi J"Y؋cXEFq%KT*P7d4S$s˞ۀIEImϤs62ͨh%h* !l[a"BO ث~[hj Xpl3^cAQl"ұf 麧c!dWmM Z6Mypੌx9rlU״}k4Zۻ|hE?=juo/z(ڲSoB:G؁U2tU\՝4[vulzǟވۉrߊ)]\4ڊvalM(,`Ye] s5Xʃ )oCbsaGau{a}(g6ve]vgnhk߽]1W;&aG epIq>dzd(rW]&Xn増YZg|'h3]e`&o p>iH`H!}ꙕAa~%˪8bQk# k~>**螿FW.~Vlfi,ʙ9bˢNrܺK'- :#* 6 a 0^KiV!m |iboJg)#tZ% ,qBChZ6tTyQ]SO9TZ4]kXdu\J`۸t6] ܟ6ޕ4DYm~#%5qĸi'~cgw砇{Kۏ^E.7S8߮?,Qk.֕.;s;ؔų|6їR{WuJ_iڡY;iL8jji瓟.aBG(Lj;c@͎oiZD\S*۠u0aWuB bʁTW*\ Yը~oZl}gKz؇#"(eL+鯂4HCΰh7l,B}1U(C5n_gJ&*t.gP&3+gcju*TLBhlZuLlaEL?MP^4|bŬ<ˉ͚xISi%E]jU[J:3q]b<#h_[mX; 9ЍtKZmrzW=wKW5y7u|K7ͯ~[◿^NZ{[;' [77a߷Š2n݈W$IgC !(LZkږ8guLcymH>.<?>2e2 .Eޏ 2ٱE'3yVFik7sVxW;hzMBkod6=967ѐB,JG@ DoӀtAM-ѥNO]cUˬugMZָε^ɾ[AbNf;ЎMj[ζn{w;PK7R.5)5PK,AOEBPS/img/add_db.gif1GIF87a,@ڋ޼ ʶLH`t $L%jB_jܮl8yNu` w[5=ȥ>'&8'd痘4(IW(IH·XDWx9tH:Uu*;K[kkvkljib"0M]m} .>N^n S"= `}P?_/0@j6k0…Zb=FLV&x70;zVJ ¸o>zRT%Tʓyf˜8q1Pl!<4R#BâDQ(NFj&[qaԩر K6ڵiB} 7IEVL,U*B ݦs>ČF8䥐4i|293V?SL:5̥[WE-u^զ/< ܼ{C ơċ?bͮj,&Q|ʞȻ{.N?>qo?ۿ?`1atMYl 2砃as24-ia6̓ψecLpa'z2c`{e1܌:7wcBܐ=gv #!k-ɓeFh$DuнrFnffGZ#xnι%ueRFgH “H1h{Rgŝ4hiiibiBriUV>fhZa2[>tYĒJY!6WmX֞E[Q}X=.?"Hh fKK&nna1 /LP@/?0Lq-oq r9^FG z_>ZEu"FP!.tH <0{m, jɛ! UUp.)\ Pp{Ԛ OD/z3 |V~54(v3,Xqݯ H/'NX2["H3,֐mU&A~%Ųx5ql޲ǺBu|K|ZD*YmJ#$h42XL*bh !';)O҅ KiJMk+_ X>$6~-ZI-s Lwrr3b,VJGނ ́d$ۈ lhCĢ N2ODtEͬUN!AVnsJumd=#{jx&@Z ͊mF 1J8MEErьҪ*Љ ŧp  !K1Mr.t5 f4Ns8En:SD:c%HWYiֿBi ИkEI㪊 ZԀ5}x5GlJmW@%d+!޵&ruְ6l]sRW$ځVW Lਨ{D2Qg ΟhbF3Foj(loRlg;fjo[v.md\7[xǷKg%: ਸ਼N.uIEKuUJUJQKg˺:BJmnW+Sd1'lïL: BpyDNMm2.&U'vH..:7[1I x< y(;PKVoPK,AOEBPS/img/part_advisor.gifUGIF87ap*@οʾ֬褢ľ⼾¼TN$$ԌΌllDDʄҔtt֤޴ddBFKNRNFJZ[^b^fjfbZnr vdb42dbd̞4b4VΜRdVz$$,4ʄҔtt֤޴dd 66:":JBF.2>KNRFVZ[^b^fjfbZVRNndr d,p*@2244DLOM.˂EGJ@HF55;;3@@>33|G*\ȰÇ#JHŋ hLDж9pAɓ(Iɲ˗0cʜIS5sɳϟ@ JL XʴӧPJJիXjʵׯ`ÊU)ٳhӪ]˶۷pKݻx];w߿ ܵ/AK%8ƍBB>fLyq^ÄV-x4Өvk:֬†:zv[tqںeSWm-rFYZnTyuǑOO<:v؏l2h uOvu:{x8}٧]_GV1'VWed䵗Miءy]'af)XQ})#ީh!Di$mBLaPF)^O;X a_9byfe"{XYZ݊k)#my[gy8塈&W]J!3 )7(g{X蠠#Ju(z™*U*뮼T7z/}jzユbj( vw^iiﹺV믒o۟W*{k' 7찅 ?,ĤELSIpwl,a /UDp !0@Shs8(7'Xjyv5" `~#OhWL7mWRtXgYHPApdS|uSPA ,p*v '\k>:[6gnxȅ8Ƃ -M.65|w砇.褗n騧ꬷ받J'4A4NB>23Je(&Zެa”7a[2756oƌILIkYrf5 !\F$ٲSEٛqZ8┵&E$:Y (ļ)Ђ: |g/0 ZF/Mm <L~ch}̖={`2iւ%l%+O4GzAYz8a:P:4h<7amEΝ@:N1k5n32 ̭"-*[-iKހx- E G<6萂&;y"TZfUd>G!V _%Z"jj^7{!r,hG͒-jWղ% L@ַ}X& fp[@0l@U% )jLkK0pmmޘK%Bo )lbG[0J~p=0QB [ΰ7{ GLb(NW0fqx=.r47;t@ܽfHN N (SXβ.{zx fp;ECwG8>ph$IxFLgpw›\qk\׷vmkػ&vg:;v7Mj[ζn{Mno{$$#I B0Bo%񨷾~Iщ@ RR;'N[xmL9C~\&?ySr}9_+󙯶6?-/YҜkAdά&5>uRʞUjI)uѨAka{:b"\.WHm+#(^_*N]uBSe9g-ڝOq"{wj<%B9Uݙ KZr䨪JfD Ѣ%ϠtC٬t4UK[T>n{~o9uv-T ["}vۙ:::vJyS7?gҏx:YKuGrYlwGݕ֔d'W*~]g1W~怟r7}Usx}X7Sex*'+zD$VwWQgw3eXHss HO:Q6؃xŃ@PB8D'v]yi]7z~GdH{R*JHvy+_qX$7s,RS.&UOf3t.5EF·zku2u%n4+{7-&UStS,F8U}+7E'uQ2}ezW-zi$|BXpY!zz(2)hUEX^GV|G/p~Rg^gP8P8}Es}~߷1(~u|+I`S|WJ(hJaHHhNȅ~]z'0q*+͸evD33HtBp'e W2mbYTXO˷tcGU"GWrNXfxMgxu:EKF8]Bi8DYesH5JXӔN)5P#3T8xSsY]I`XD\^6 5cХy[!('6! #703uuxG1(TKxzUHgMv^\4[ [+rYc1y91\0  КZE0\ P*UVkyQ^6qwxH}&rT˩{^9 SY`?PQ R0TPTPiٟ:Zz ڠ :ZS@pPbcڡ ":$Z&z(*,ڢ.0z6vc=:<ڣ>@B:DZFzHJL0D@9eVzXeK\ڥ^ O R6eChjlJdaV;DhS=hգ0mm:ʯگJ*  Z;[fC C8>A#[A#&D*{+,Ʋ$kв0{/˳ 17D[F{gJq;pn,Q=ns>*a>7!VZ]W V][ak䰫@a+c^f۶Yppxo|۷~AQ"&`;ac۸;+{cUo[{ B0˪Ъۻ;[{ȋ0ۼ;[{1м虞齂7[;Y滚蛾E ӽ;%[WۿK|$<+@ xRQUH؅+qxNHU",xSaHg{X7{Z&x•H yKH~w8-yGt*ig‹Y<X#HxV9d-?mHNDR|PGu'|]1doD|2kRr^ED HF%+C q֫0U \8s%C z')B}K )( *h(\r7`8>8Ō;~ 9ɔ+yo̜;{ :kѤKΨլ[?:ٞaӾ;Eۺ{m7ċOK A,\а!Cƫ[,̵r !`k'9N`_o+ [}_Zs_k='uEAV (|Fa$ٷ S_T!xW"(ZO#vgy{l~,㽤L8M;JB'ӈ4Ȥ82V, LړMnQ\~ f8^IfifjƸfnr't&zg~ hJhh.h>h ;PKTPK,AOEBPS/img/awm_open.gif$jەGIF87aVsmc筪焂kmk 1!aƮƜέR眚ΔccΚΜ1Μe{}{qc猜Ϝ9Bcc{ceΚϜ祔c{ZߵZZc1cZ]ZRcBQc0ce11e010ece1i{ce10cec01e1}cey{9<9yZ01!Q9ǵJMJ1ececJce1!ׄYR B cc0c0110}{ƂkecQZIecZYZyR}{10qsc9ަJ)sIsq9Uca0c10c1acaJIJaccEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE,V@H*\ȰÇ#JHŋ3jȱǏ CIɓ(S`bƄ@8qr)ϟ@ JѣH*]ʴӧPJJիXjʵׯ`ٳh @6kǖ}6ֶ|SD,ӀC 9`2!?v<1eɐ1SYhǝ5lѨ+g>uף-,[bsͻ N|j[gגU@9\r n^.aνOǑ?O.{vnϿ(h& 6F(VhfJ(v/u($h(,0{`h:d}?9Bޗ26PF)TVi%4w\v`)dNeelpy6w@ixiT0@1-&袌6裇.B褔Vj饘f馜vjٝJ@wzjꩨꪬ*무j뭸6V߮ZH#2-4P j0@Z{hjmn-ݎi覛.AJ+ko,@P@AN 4^W6òIyA,pqk" L2+l,20L3;̀#!XB6k=JIysTx+BІ:4oҜf9l }Aߕюz i"zƉnIHW0Lg?TX@SJӞ˥> PJԸTcN?*' ha{0?QPMZLϤKJNIuSg5X!1 @_!! h@YEUS9 Td3Lf)`լhCk˂6%hM |lh]ZK}-nG{[Vmi+ζuu+5ZQ4?/EttWMpX1#w ]ͬz^t)7SKfů~>9^6st;*0N,lB 7aUInӚaS%|`]! Cp|Tx%4p4-T _0C 5؀a..{9:>i/4ȕ "p ^0! Y5 lpXÊ $pW \Etnys\xQH͔ @j0( ](je"`Z0{3]\)f;XɕDy79*89[y+vwRzٗ3~*9l1I2 jٕdI)ys*|QvՐy)Ryҙٚ/)R9),9,9)zRI9)xB07yy ͹yܩىމɜɞ)⹞yi 陞幟yIY9?5"ՠJ]J)ڟ ӉY$J)), (y-Y8ZY**J#zJ: ٣8/ZPZ򌥙2#$!$E{$J"C$#,.0,&4\6|82:>@B\F|H]+ ,cp,ɂ,(b.R.Őbzh 7U[W-k/"-X,-"z{,)d#gƂ0k̷XL,ӭi1&#v0{1$yDfSQfI::I |1.dPym3;Pc`2acL[tN 4(P(04K35PK<3EaTO2^'ouۊi8S@A@#N@1HI'HC΄T%@ ʗIk3O"ED9b2 4HDKX3IWD52<ʹ44"#B2BWV$42 L6(9dd9l2 AC#{ PIOx,6G4 ̆J4JPC>m3-C5խ6VF)C5R2C=!E5!=m}J|qg[t'O-΂}σ]͆؄؇]؈}<`؍3xTG=Ț/,-Q٠*ڦ=Rؼ\;V}͙}ڰ+xy3 "@$p2NeUnٳ$1pXP8ea! ^SX_^tK* 彉*772|grRܮ6X-6ssu-L7q[(nw~{6χ}8hq~ [gX .ݗݚu#PDD%C^siYDyb䧉JpGr0KN1@z䦹@(`V`PjpKEbe[wCVdfqjd_~j@g0hw|ƧVᖞ[ gf矩Y 8vewe7PFl`X5 @%%\p<@kNvvnnՎמ])hv[ Vw1wlv}iyN ᝉtሶވ~h} _٩ _Z[\;RVUDgt'/Eww3K>'x9N+17\HnPLpN1H܀_{YuhnM wNo?)mO% ~ޑ/?'|O፿>cU.pa3_ =/ {k^؍?qlV.]@BVcsIɎ~Et>p=P45.  ,n_[yZg_hOo/W}n1@@ DPB >QD-0`9vС`\IL5męSC0 @@f p` `!)` ]~VXe͞E`ƍ;)$J,}V^}!4_… FXb^ٺ}rdɓ)WrpcΝ=YgҥMFZuǐCJ[.?W6KBs\pd[C;y\vk.]?GOǞ]vMлW]fݿw)w^|~_/@$05"hl?*B0C5Đ54HDIL1EQdD7\1!kFs CB}m,RyqNA\N6˓PG'“!.$GJQ5٤IEU2KK5U3eU5rP嘓QWo(R\w /QQ_wXeev8`v9e6م0Hm[lm7\s Ws6nb\MwzV^}W]{%]w|Wv V} w7~-~8d?\q݄>KweYym~9e]YDi]T?j-~w>:f[iׂյ`ί{M:!wbY&dm5]#8'.hl6[^žݼ9`{Wȹ|s+ ΃l搷UgC6>joV YM0 F7mg4`je4։MbvD$o „6|]ܠx/~+={ ,"T,;;h}d dȡwd|IJV= dQ\R,r<#cbIH%]DVҕe,e9KZҖe.uK^җf0PnD$LfFa&IF:Ҙi&w5<򵏋79Nr*䙚D J%/g<9OzӞg>O~ӟh@:PsxA@9PJhD%:QVԢhF5QvԣiHE:RԤ'EiJURԥ/iLe:SԦ2mtSԧ?jP:TըGEjRT6թOjT:UVժWjVUvի_kX:IլgEkZպVխok\:Wծwk^Wկl`;XְElbػ>-+d':B( Y: ,cE;ZҖִEmjUZֵֶhֶ-Jf[%mooޮhD\.-:IP׬uYZu V-/w˛^7z_wۭy׽p<`F]w+\6 .}  pqz.W! OhKi/wU^W//yk8,>/o]w;d5 Frd&7J^1<[ Včjۭfgl|Jg.,~|dos~7,luwo~q.Gxr/x%>q[iA5qwyE>r'GyUr/ye>s7yus?:^qGGz҅=t7Ozԥ~K'+zֵuw_֑)gG{վvo{>ww{w|?x~%6AcOC0$aIx$ t}E?zҗA魀0*);n$ш3" /$P`Go}WG=)ӭ? &io `[ř8{*-@8>@$˾X@ ?KR& [?siЖtJ3$$[%또x !"$#4$D%T&d't()B)LX? 0c@PAh+?A;6t )07P'A4JCBA67$C!i3I ?xEl=;( (,DpC8TDU< LEJUtJd]UlY0E^$FW`|J@d\c4DeFdC~ !Gsǃy*/hC;|D'C*pNjA @E@HE*<T8gB$Bt,BI*$f*Aklm/?oD pAz/QdC CxEY4āT :| JH(A\J idȧd˫G!PQM)A QJ!N!D唀'p'XF]T 8 S>9HL`\JLIV?ITDΜ|S$\P*A8LLNL[yU]$lHEXTU3¤M4c%O S:; !ν4t)(s5tE?p)2+PWs-xuR& (tSB|]WNRlsL؇EX)ҫĉ؇M{RX؍ҏ. YRX:VbMn=oe<՛OٜٝٞڟYڠIJ VC %ٓڔEYکڬYګZ]Y[Uٲڭ[ÖEk:ۺͤ eڢŠ۾\[llEE]uY}ۘePɵ\frܶ-Ѝ}]e,"ݏp3եFȕ]M MQ605  `_ +S ^8 x@H3h N셈Haaaa b#.b$&b$!a ."b->+b-fb/b+n$#&.v5acN7c7c ʽ _< nMOE!xh 8a@>68b9&(8ムbMPd(R.)dP&eLVNeMKL6eQeV[3RdXcPe?^ ^ Vb v@p na68`H؂p >߈opq&r6sFtVufvvwxVgef=c?&_p}M 3X 8>EBn|v0{V @ (hh.`Fiܰg>Ε}NGhN晎掕>i&FV _6']j8꨾jj?E/.pVkjnl -//;/肽 h1 v뛆mK8/5@x!510AFhkjvs0H/p.00@6l18^֋U[f+/'26 8HcW>W9b`f_eev߷^k8n5//(/Ѓ0hX# ݖfoo>` l+..9  f3 I'C=@ AoHO7Nz u@ xJqCLOM_htP?atEVc>c4v_ f%> 4g\6vUGKoXj X IN; TfY&eNVef'w.$\v`evog VWNi?(R H(8HHoxGZ`G,noeaWv:NVe6^|;.yGwYwrrk-@mx @Om~G WI`ިGzP>?ܗ;otttGk\X{xzDWzXGg`{W{父瀷rLrso/weG u{w'e0UNzٯٙ}Nmx`~cNwH l† NdhqŠ)b1Nj qdB#zd R%J-9|h2d͙4WZRE8e*,Ĕ6u 4PF`*@xP4 Rt۱T!6.'^z}sO=QIs4T I80:vIP2C W8p .B+rKލךp{V78f@raQQHT7I]t9Byz5P=3P *@ -8\)Ï?tyI  X- -ܯu4Q>{` r|_g=K$XwqW=,"XN]JS)RUBlbFXMIq^⣘H?Ө4]q.!8ұE#;j|# ;)&͍9c D2#H51$^0YMj*$PZ(sJRJ\%VX@p \%Bz_yJ~Ӝ'>W O|34A/btӝt(@yLA҉S&y]$)NS3OD)&'6 8,73QSCI^NdSN64ڌOzTZ=RPIK%=)Vtn[P~hh"4?+`ռ4AaFub+Y*ɜld*r6e;Ȋ3,hd Q}*m2@n ۋ{_ **[MI*Ņg^H E ^2D-xkڲ7o{ۋ^wo [׺o;_ʗ0^v5o\&Xo-<`cF b:&qkf8KծK!׸-_"w&\w/q]A0w_>1,w]^re/oT6򍓜f fVѬ/93 e Rv%) vІlN5=6Ƈ~f+?Oҽ]!KC@-+[*/}4)ESbep,=[m aʴFrlZ3,vm]dq=deε[m];7\6m`łF5 $QGVf5K'Bf? xGz?8=0 Om,g)y_پx r79~k 1k}Ƴr:Fy}sg<5Ws>'kqAgƫlt+x1ՇC.du1kfjcg_궻^vKۦ0tüVoÚ>Ou{R|Mj3i` C/KOzg}QmWr[6;|fp׭g(oWo}} ?oгloPw`/p>}z-W%͚ `q^i]y _U9E꽠 ^ bE G qYHE` aӨׁvf`ڙšߞ)!֑i\1Խ=[a^۲Y qY)F,"#6#%"؟$VU@&ZA@bZE("%-@&`ku'"a$A,"&n\8'^,z#1#2&2.#363>#4F4N#5V5^#6f6n#7v7~#8n#,b-BK`};;#<ƣ<#=֣=#>>#??#@@80@ńB.$C6C>$DFDN$EVEjcAAAvb*k/"G %_z aJJH@pb/bF:VG$=:NaL(l"II`9RbXEٛ\K%LbM&IA cB^Y%ZZ%[[%3@%]֥]%^^%__%``&a!b&b.&c6c>&dFdN&eVe^&fffn&gvg~&hh&ii&jj&kki"V&m &nn&oo&pp'qq'n$,'s6s>'tFtN'uVu^'vfvn'wvw~'xx'yy'zz'{{'|Ƨ|!ͧ}'~~''(&&(Z>hr:(*NB}6'l&!x(((((Jfhd^h2'|(|(Bt@wu*)u2$ Biu:|J(fn)v~(d֨:b^(br6''LZBBAp':gZʧ*&.*6>*cc*ibjjh2'!|Bp婟"Bi2)Jis>jjjjs*j*FN+Vު:&6v*J&Rs@ 'i +j&jʫ2s).k+֫l.l">,FNv+cv+:r)'k*>kҫkl**:ڬ,,-&wf~)&k]jn@zr$%%\&TB%B%dB{⫀:,Z*۾-Zbl6fh~rnmPBzmŢm"6>.:*j-cD.v~.膮 閮.ƞ.,ߊ.֮s&r../1./6>/FN/VX^n/v~/of///]//֯/֥/0Ko0'/07pp#H=R;Z>=vT@4B8B#́8#499óC?4DOV{W0H@7ICS@$BA@p@ PBPBU V )b%P$#B* d1!Ë,9qgIv2JR dN9ҨȢ<(bT5%Lus*O04U共8Ǒ'WysϡsM (!# ('$` , M ݃DA i0C#"ó:+BQF4,R-=[fӍ7߀l7銻M$<\ρCZ*HB'E)ZT2OD( B*#&3$Q@>Xm>Q\ IZVXt/& daoUu0j R ?a( ꊁ>oHqɍK\3rۭ߂Ss;˭{y "HbG )Г=D=u'«`U(2<7ҁ9dT c1>If5cCB\,r|a$L?Uve_""Q˺GDRff|ڴsa0,]4㕷:N[m:HSJ: ꂼI%IT&'W|U@5@DvjM .ʯ\t`Jjnt}fdv&*tRX^_pkxqx ~Z֎^k6τlk~C IO/ai!`3!3} ee h? #QM}*K M}dA Cus"%,X 0PZVx5N\Sl֮i{>͈YI2)HU@+ZqRxܥ7CTL"8Č;XEKMQub'RqY(J!dUE(eTkeҚC0k."/IF>KE0PDr"hG+%X^t=!fkb/z-|$=BoAdnQxh*.X9D`#عWILLB @Ā @\;p$ Ӱ'$B M׹dzw&vح$h@ + \'g@7=p^4U 'p5#5as615is9d37ys45O7u2L8F68c795I S :83; 3.%b:S;79ų<7'Ӹ3KJ 3?a;+0n93S3 n A @@ @%4mS9rBdz=@ A HD@ C]\lEFB DA  ND @ E9B3IV n`D[ t HH"ItKSF/E d Hd > Vt VH δP}b 8הF55 J` G @L4 .P-/FQ1MTN``Bz l@ TPUw0PZWU5nIմIM%u6Vn@"D@ .| PPS#YUUM4B@\A n L Py`^_c_B3u`M deT`F *`K  PH@^/UOZ ApI65`uM4   @ xT @  @XbÔ `h)nn6ovoh`QV`2Ke @ *lG4L`XXo974U$6VU4 hT @)`Kl@ @ @ ʴsy3LVp%LuRKT7 Ft  .V ~`ww6S= ӎt3n@ `T`lGtD O @vzwtj79 znFFV3*@~s2xtt!wSpAx9\uL4Q7E׃S8_.{e39{oex=QGJ֪6_xyEӆKXx-؈x4waxkXۂ7؇485ʸ:ϘQ#X츎#X?827-s Yx=%؏͘!6o12SًS  ##k/5YXXX"MO6&[<4ؑAy9"y19Ye:Jx 3qùG\ʙ\;1녓y?y w4G6 Ft16Ѡq[_\^?IؓqXu8<8 dJM:e@bh55YqqhUmCv=c3؇ӑ*߹ NJ``D$ Q:Р :c:3ҙ1s{]xBm.6/ @W  [ <:ݙ uΒ/ @N##8GṣRA禺6b; Np}QۨYIX84D;;uv;ٷWs4YtnFzK4'{ ;; DfC dx9Qz4Lbٿ1xվe˻wL Y$'<\6#;+\6\[xFۣO?B|3cS.o|sQa${9x5|9ܘ]ΛCW\U[AnS̭̩ \p|2gMX=C `\lϷ<1!M4ܴ 1㸿#J&'2{䕵ۃɽ+ݟ--^׉y]A䓩җunYץqC6{: ؏ڇZ9w߿^{)^Qީއ~iޡ90>ܽKO=djJrڷc=:M^"ukxǙ7C]3]#]l#ZB;CߦYe?1G}_{?*d}1S^???O{aU1]TW'€ 80… :|1ĉ+Z1ƍ , A$K<2ʕ,[| 3̙4Kj@ 8Ç`? 5ԩP=<)խ\z 6رdSϠEiӁZڽWUYUC,LHBƎJ 9ɔ+[VyVδj,z4ҹt/>u@"QZhP„ #I%P <3`@-[^MKlF' gOOMq'omA )26u(fGF+; lP幐 "R}DN~z&!}mmɅ?Q݀vv6p 潠|CNz馿uV en@r 0O )& &x|}g};|cT9X4 } @}旟zgΓlgOQr=!a'*`Ao< pf;\dHU` jd X@mc  OH@%nq ,QHp4<]g>w!ēp9S#"qLL2҃l\7"t6\x}2&UE/ZD$(E8Q\%)CB:R!!MIJQҎ"1Elzҙn;iDp4%CD>4=D]RљTBF=:թT!UTmU_=XJUie+ZIRF}+[}ּ5V+^Ӯu{թ[ͪWj+b X~E%]^e+W=uqE{˦PUufu%l^Xrv%lMeX5)m,oCָn ]ӥ.uz[Z75.O]6/_g[ޡn7}sWmsӄk_UNveېU +疹w`6f0x'po^ SÖU,hqFwm\W 3}QZ,)Un[;W=~7Y.nQ'#9}.c e71%cʵRrbv{ͩlؽ5zI_Zx% UD(*vi'"ƃ6I A7fOKkzG3Ƨ4d% KrPS_+#WDչsږxΆ6/Sfrٻ%QQU[9^ lc6l1`'cO^/{;$Amq[$+2 XbZĥr3[݉tj_-Q~Od!gJ[xK#(w4"sD쎑#{Ow3!g%9xRlFwb Z-\v,G,dUd6b|N.U4W +;Zu [6d 5J,EW8I,6<C\4; Ɏ.L\(-MhŎIkqHcs-SlDe|ʧٰ~KnKsFq4n@\iNyDzȉ|qg^b̴ETJXdnFW5B &tżЌPQ-=ܖ]W$+m~4?41>4.JL,-=I $6 $'%<^\Yd:XvWfy)'^t>DHC3- 63Avp|$*$…zlj4/ZT^g񥭲fàCf q] x&ɠs00 W&M;kL ǵG]nύ]s/i_;}qIUwoHcԍ&tL="~(6fAxܒ# {%-J'm&I wЃOI} 0m & (0"y ^mR* [c"p%Î&xLh )"&#^g}t'&HIB&ۈR(fYYu138 3#@FJ2Gjw!@34 1GP>@F@0t`Axxc6L40m(J@RjtAE7 ꮬaŸ^q)1wE%2L/rl#ogFD2 i#P^Yx`Dc@%t[' r0N4 * ":xiLuԡH#->')&/ +(RJ7٣ s #In |!/4~\nS"K*Û=L Z3~wÌ6 " B~ "=- K-G0 /}/r|r8?4,o~SbWXc<"It* #`6 0h* ` auCj)Q ju4F#yƔ`lG0Ah|9*x< ` ӨG;P> ^D %j1WD4!d1 ̂q1mC-CH3PН$JbcjпӘb#@^0%ajBF4`|Ix% 1<9(GKmf8m#Q gC\+3{䱎J 8pe*wpyJ4oCx9PgCʈNJFq8Y@,{( V9шW"{lGoj `af0 `!Wh%u- 1zEhc/ɤw,x {A`t0 0#j g;-v<#PD41jXCwFH>RZ81jPlsB739HzЃ0R tw Fՙ;$Bx,Q zE"pApMp|@^CF$ug> r mXF5g ,5ޡk5F!|0zm ") %TͰ3bc<ʘF =:HF$~2bcHso9(sF5;©o:% jCrRqJ.h@֋K53ګe-[`(Ow#8ƜqIpgX将"An-JĀbbx5! a 2 o|@3`UpBd2?pGR`v_Y&xэFXVm9ыU`4]yHn/BC8[3-1! c@W4ab  t6ix#&AH-4Aȑ\Aqҁ 1(LB(J"' 1`ᆧx$b6a Q|q 8 y 2 A"ā́{>Q$tbE %htJQ$ B-֑ۡ>)t$b2V!y#Y'z%qbW)1B1`\Frj!1jh#ę PՑ& ֹ̡Q(YITQNi">{yjO!ٛ@ cA(99#JA4$%Q N8Bj9؁٢}!0oo05z8zf<ʣf =;DZ9:nУCjF@ʤPHT4ZNZaX9\4`;/!d{*a0{Ol]靚t;4! "(X/|'v =1x)+{Q;;iLt2W%,,c7Bȷi{k[Ѷ;ᘺۙ:>u%NA;z{T'ٝ `Nᛋ鼠  wp`+A* '[0z<-a tF`s+` (JE,Oi!L9\᩽$ ~*i 7 ~]9\!,;@Y Y%Ɲq`aayl J',Q0?| x?5 ?șy .wƵaUwW&q,l `LŐL| &qlKʙ!{1y4:\|ڜlCʡ͹lt@rּ笞yN<L˜\\hƢ,c̡,\ϕ ]͓,Y :.< <"]Lwx/0 ә ?P.|mzř˰ց`xX ,\ l'?,H-\|ÿ rTlԴatTu Ƭ ].B-@L -<21x]M҈|s{m 7nky‘ .Kɺ1NоӾ5(I<&BMd^1!Pn(\ > jl*&ЮƼ)9ðݘ~I~0nQ1Bܾ3nKDyhQMƛ2Aη!n$o}L o$A ,w ~^_Q|MƷ ˼8N ܙr/qs(I[N鹀˶ʾC̖6/ӱ諜M;쉍tv6_?"/0j]O-L5ƙ_MH~ ?_!?ODʟݿoo?OOo_@ 0PB >Ѐ $@F8RH4DRJB &<ʔRx,3(M( (J`$jreN ˥$<0  l mqm\mֵ7]{/lqa`v`c?y7pp6,4&a 6bVʓ-|Fǎ oRDv؟yq!ʊ= Sp].&6*Ķjwiۧݗ-{/.'X*মZe"J& iBN0*rª$,*' uJD{(\D2@w@1/1:{ 7 4/"I GŖ\( ynm7,f I[sXa*`a]1“M (O*`xj&]cXa{ҵא hJ)Y i e sFzᄷk;lΦbA/^J VVژmgNB`g"7B):Yi6d),+(a5D7B_zB [tBȄdm1f_Le}o]łwMuOޕWyܣz秿?2۳{G|󳧬|מ_qgW#]uR $f#1Z1A"S,mWH@HDbUH DibJn(oNJF4m.XC+vÊNc bӘL G ׍'NъUĢHE-vQ^7zX/0nQbF3qa ̚8F9qwcˈG7э[9A2eDdȨH6ёdp54])A"Z܅*h ' t-K#;Y,4-j[ EtB OnyC)2% ^s-0+Ɂp J NrӜD9ՙNvSg9iygK'=Mg@ wSE@{*ԡ t`rxHLcP')9e,(wU@Qb)z .^*7(cJ[v2' ( JЁ` ^0UVժWjVUvի_+Vjձլg=kYѺV 7/V7@K.‘A"F'Wl@řQ+vźT&(DIPVFe E2Y@H$@@MjTفtke;[ֶmnWPζkU׸E.p[ֹυnt;F׺mr]۞@ޤh d2g)j"D "M L5)eˮҿ)կBiH@`oz׵Up[;aVp1a g8kC\a"FqS|bW0ecϘësl7~mkwc" ,@1ʂI`Uнre.v>az' I]6[74Xj,g2`su9`=9-NMZN%6=Ђ$5| l}V]t5齅(s,4s }jVv6Ae݁U/γRiPh?Qu6/`$Dg &jQ~ijWY>0`^:sg ®]]3xAgqz=ɦ6餵2Gx+\)&LU\5qo >$'xQr @A>ל799@_s9΅0tS˹2cVa pw;*ԕEf/KѾvnONl{ww'|^}/벎 ?瓐:Y( X {i243D4T5,Ӱ `9:܏3ƀư?:81lܺq=M{ c,b>K,=2(A¾귻 ?a>  Ĝ=@!Ƣk*Hya`EabLc AFhFeƵ i4lFcđ&r)ar$Gr`"1ȉ":` < NcB!o q -p(8Ɯa9l̒;lLʴ˴L"L$4DI9DMׄwGEJz<8kaҩ &Q©Q %cr @8&F?bO9ҦL$%Pl L2`΁%2͑ X˜h!HjQ@6h(9^$Q Ѯi ҮHɩA2og %h_^+![j0=r!!sQH礉@h8(1QjɫA-C%DIEݑ(xETCUTJTDJԅ*cPQRzrLGě(6WUR]^`%a5b-VJT[0d=guhi1UiimVA눁400%{ZuWMc>̉s8".x.]B.~x*sk73&uS²xM8x=>ze?6ّ%ْ5ٓEٔ5Y*3P٘ٙYe*ٝYת%BNR<@ XXSSop* ڮگ-[ڲ%[Yeۜ=۲۶}۶Zٛٸ5[۽[}ۨbP}f>yͲ)\.ZS  ..Z#BS5Q;83Z.XUe]Ӆ]M]ݳ`cA]ٍ53`5E^]`AT\Z\k{E_x_+c:&O__[Vґ(, Q;ٿ!!ƊW=_K_}Nb{"a.&6a.v ؀ Pffa"ab%fb n%v.-X0c6Sbf\\)jTx4n;5f6v6v<x9:<<+>6Fcʬ/޴01.žc %ѣX㿐S P$Q6RF4SfTvV.,WP$ yTE.cd(?B\ѯ -d)0K؃">D4l>d]BK&EVjG68%)+rf:,MkUmdveW| ld")H \en~R!ĉS:p.g* M> ߾:%qλjIգ{)mnfЅf)ҔĂ+LD^R"=1҈2 E4h'9\ I;TƀjjC<4 H j9D ̐괮 Hhkȏʫ3ff tdu^,g!QaeP"ҿgQIމoz60#jčҮm.a Ҧm0k)H>Gfї HPҺ?A4E,s \zi( (fdJّHoooȌ$CAǤLL*ڑh *8h42!7RK;PG ϠBk8 iz9qqzXL!T$z!r q{YLI n> o>gr 򡒉Qo^;˳pdz H x!Bxrvx yt!'CD7tE_LA/P\tB'r$w%o%'EX(0袝 Cf,? `ғ i hQdț *DbR,1謉+A `y"'ԇ1rv@vjqLKlnOr$$q@CHI:4yA-Wߌr6`_N&ĺ ZG1Ŋĩ[=gkHH P%A8'/7yIG+y1&Б+&pdi&3SfYo2gK:rN`Akq5mnUJY߶wkoַg0ob`u-א%nuGh\{op~@bDK`|Sf*dfcKkex8ޥ٪7e}7ϝMH/tyxOz[zDjFY@_~r.*d[l{5Zj{_ #~"pfTIJ$QO|n*UD̷4dv)P䯌i CW  ,(ЇFpC':pƊ+Vt $ʔ*Wl%̘(_ti%Ɠ/0vYRǎX *.:HK(;⻏NN\=kbTyU#z\ &*zYc} P`n5TӚrAq |\8f\* vZ_+rXy{M2DAUD\HEs9衋>:饛.p1魋.î9KQD4AwEPX=w9[%jZF%ʢRQO[AFrWw[` ) Ux??oo~< *d* ۟8lMyu˲7n=0j^QXpSSM[ kg3k_@B4  A X;X&)BSbxE*J1Y"E+jы8np`27jw:B}Tϐg(/~E< 7) F(CrPrD O~/R~VEBAM Vh GAFx_g,&|#*Әd&2yL] 3Lth^nA5b!BG,BVx;ճN#LT&f\MX,J6U1 r-螋U$EtkMP(XhBzJlԠL.b6 ̘Z3tM̙Zә,NozM4<5M&Lk\# R`$ [胛C ̣oV2,C!$xRL=M/KŠbe]DޔliWӗShU<{ e 6Q׸( G Қ4R Zy[Vc7UdadUpMtDv;p-k]җogE_=;`N "a$ DxQC "򰲄+ ٕړ!6) dj&'ׂH Hr׺eQ9BWE-p0 JnM!!q{ ^]ʦ@f0Z"'5dkaTdGB/FEh,g<|֏s\'EA *r*Ŋq1;-N8X)E1p LHIuFl>kIiuMJx 5Duӣ>&d@ Є\6,|ZES+ǻSC* pJ߉c/ӾNP@ |W7vwQpPϹwPE6`B?/aH?˟ Y0mAKD؆̄׈]]=Mڊ#f$E"]3jMKVA9#:c:ʏXX:DXa/j "RƌUU1+y >`?j?^P،HP1`j4ON•%5D`(Uj@U=yydS!WveSW%XWX4[XY%FOFM^LE_r VU@҈=BIWߜFZMRUE tSYf-X-Xif\vZVh FSjVJـ ,pOLU`r!HSΘ5M@]U DflFPgXq7)AX@ĀVmfkVmfhݧZ&{.||ҧXS @ o[\  Ɓxv፩e$QB[ t[]{af6(@ QG22(3Y}^~IKq{'֨P(KR DU < h2(W)\d0v Er1[(БqF ztјC:B%Qt@\NVuٛkŦɝ)l柖f El枺 6q\@ ( \)!??Ni^6"sTdbicqt:'`*@0E@M`GpĭuDdİ*NDk2JDFG@@S(]i+c "e`L䐰LX(@.Laj\!֝Diz]F^^&Iʙ &Ŧ\GtDUfvp@iz :j TA-d̫bBNrDNsDtؚNh(mO2:F-tԇY*h L &Ȉ%]C$ r!"VrKޠEPB6DHc . nH v@>.FJ.NBnDF$. jnrֵQEA _T`t Ƶ- .G E ϣm X9AxpWY}E}LFdnrH{B G@PC%,[Zﲠ:JJ!a _@hQ)@ `^8ɐT5.w>]G@ n/(5[A&j,ߚZ1 , %`=_0qkh\ 11.W,T6m/Lm [; 7Z~!j꺡VhoV̱11?_Fγ!2m _0-:lXu_!-dUG{9Hj0MK4bP Z,/d Y4ĈHn JKpPľ;2*j++U}K9J(4rR =L on jۤvZR,K 1քMJDso34&A:Q#a>yR sxJrrjk"ʸbKDTpA`KK4LǴLt I̴NtpAIW9#KA RQ `BouƲM@}p%GF:34 4i9O51/e\Z5[/{@65=O/U܀ ^c rQ,xU0̖2 !2z KT;%S&b0oHT'4|/\Y7nÏ4oow: 7Z{3GIbJKf>E-8U"K%/97?9GMy.xI{E $t6S70&mԭnz8rE>&}ܷQXs]􄩖+XbkQhq|VPq;ϧi1b D n8QK3BjdEXv0Ì@ew%U%AZE$- D'gUi셓d5؋2եȏ/`\ Q\>}:ҭ]g=c/r6Py*#݈ ZA~)Bڈh!/,hIх/<qQ$qE]dEeFOb Aiı!D-Ht#H)H@J6h ̲s,5ٴ0 &ڏSOTQ2h41΅VךlXj4#S!խ !H- 3%X>EeE ߔ N<<=i-[.\W4HوB46mwmsUߧ=m5ڿ@i)bW]3b3'ޯ.W6&/ڏ D #+PNe2TUYabfi9e#0ˆ!s6 N 3h,J#RL/Œzc<+u=]sS=X#dSʌ\:j%d!<<p7< op F9BBDAbkr `+0@H۽݈ Hal]R=AS#(|9Dykܔ7lr3la qʅ6p8Meϯd5]4ݹQ)k v@<"@@46#@!CD-8$5JR%}HKH^ b`a qCD)J,;>7&~&v4t0UbrPAϒ;Q.ȬB x188@H"AVuo)\׺uzkZ3Suʀ PE.i>S + lS{e {?xjydq<% NP<9k] [ٺmg[r@Z+S4<ńS8JiZFB,Ƕ-o35yћ^Z3+ y9p ! ʀZti`x/ӭd ($P`d&qIJ>sង(鰅_Bg: 3} c˃sE`A=6H0 $&. d$fKAl'#9@92L*_ZÜ`=)HAaՕhq,k]:΋}gEK05/|;^>xjshC'ыvsh9ґf.I4ٱbvng=:A i5cHspk]׽5Q@0] Y XyP_2]Tjmf" +67nu nowϻoAV7y *K]$Sغȥ7v,t9ko; ;x4 ɳ\%9^YYH/B;<ǚ,RZNS{`eMB"P[PP4 ߙ|#owv|G0˫ʼOI] M* =^ #TPY2k@7mICc ^ov@pg{< gp$p2-p)p3i6* ,?poXO+@opO`d0X&e>"d*RH*ʎj XN.P< p| 0<IH}cǰDJBX\ Θǖbɸ/*b J ƒ ti60m d6 y6hw$bF(@H*OmhL.0g@Q Kje)7Ȱ#iͼdjKbЈ(l0@+$5(SԌk6^`~j| @@DZq#'̉@R .^Lb1jq6 n rd J1F5Q!Lj1&PH}1QцHT}XR|h϶ќjV `,.%DR@10ztto) |W~q"HRX Djg,/q%q(O-G%M1.E*jn̠m';eED/Km@ f.ũfL"vzsJ )"1yi`)~HCR >K7K;#7w38c7ss893.`>>HRp Ơ!E H050- ; 22<,/k/g xг#r T0C?%C@%c1" P{ RJ8S1q;|0R>N0N4fP, Poy@dpth"GyTG9L9gzOିB3cBS-CóXD ߉tF'KNS+.=.0`>2#1'(,(|Nk0Ί 7 VlGtB80Ie"o# `H/'IB%C=BxzStT DMnj14NSF#GaNgGk09N `Dw|G-^sYpj4 lOX lE6V F?Cu3ޕ] ]u^^5%:RRP*uR,tQ/듲.K}j #ƴVtSf?(  7Ͷc<#eCeceW=#^@,qPuԆM^U/B5-84[T4vZ'EB6#!  @- 6 ƶlllvmնml z jTM'(k)0ڤY["cuB4"6)">NDE;+Ba3W_DIkY= z)&{6.*zyB4)/i݂<\2`TE0~e3OP.QK~}礼gh8Zdɘ  R +~:=S7!?mP`*@Vil+Ft"#2a̚Mr'D: P<@ѡҤO6$+h ۲E{-l\X- b`͒`56ص\%ȀL 6׷# !<ܰ7}fF&i 9hj sUSF)%Y\R TEte5kfT=7&(on Q@7Px;,${WB{Q0{PTb^Q)p  9XqAer\kTpbj"BjL2)JThPJ*T@HE@w6:KCf2*`)TAg.DK|]Il"A}A g¹&-h*-l~JUTOgEb+lJ! 9z~nZ6'X $$p00O:Ԁ ;{%4vް\L,&Lx!0`qͰQ<%7%"^$pD\nХS+@@_EMRµm/ 0Z!j"ZZkO)(<1\sWzp8+;8G>9;PB 8`ԡ?8C>,A$@1F.XVZ[vmq;׸'/p*/TYꐆ (Z])!\@B1o1b K~族Ͼg,^ 6)ÀW~߼׿Ȥa_Te*5 [#4[X8Rr/ +1`5)h[x#.p~CBb8D"&C,bv,sQh-,RKpJ-Do#DE0`0:@ɱt# 8@81|ܣ>򏂔c̢Ճ_IBH'idS%tIy`VђBkFt"4C|AC#-oi\rx% @@SuRTjPUELtL&H&6IN*#$7{F@`+XAʉsT9Nx3=ف'1N^{Ml4kF &M|MJ% xA9= wzt#uIyzԞT vȁU` ԬT|%%:L CZX4AMzD`;JGsb\ݪW Vv*ȏ @#\-1UA5sh"shDzs7fˈ^oQ@n,ec J6e+kX6@JucRTWQvj׌#5 dXA 7A8qy \ 7er\>-s(*/$ׅ'qOTk^JB4Hf+Πea}p߁e/~ ؿ}Jte 9M{ w7R-|85 v! Qr?seCHx֖;0^[*> Cn#n |$G(S\d?鑆F$I"ƛq])MyPDъ`P,eQԜb,)c)2nVԽMS4ľD+z%=t{[s64>EgdMsddh3J]Ӗd@D4,l!׼ ` {ع^;dKFcׇ0rpEUEٳU,_-TW<X-G<wm| p)= 7g"AZtgV,0IXSA5ӹ7\nnŕryl  C*)n9?[m4 iN"p)bg jτ I*t-mF9-ɢg/o'PkZ!/7yja%z$5ި]Vj$hņ(`Y"ٗ%?$|Ba6!j\V^E'QGxzg,o+2p{&I8 3%C[j^*:K.2_).yb7Fv0d]B:upùv6uFLg%z_P0`~1|%!0xHqW)H?\xI!zBA.y:r3#BH(:<}i} ;aiz}.QP%pSR8$'l.1jN`PŻ7֎j7Htdyxl#IB/aģ0`)5r *w/PS7,PToBL2$r Wlj-"mc/fdq9]m}ʄzOq'F!cY=r žSx3 @41bCxX>sy{1wђ +]rԦƧYD|]+"Bd ~QK4tIB~Vv#I.qW1rD567h}BDqG4$刽J,J% ')@$ƊH{^G z&Ŀ1"8Idd;d\jPV#Pz"qfgE\v"#ˆP&P+@OyNYKNRD^0 k5 TBěDK-蛈LjYZzfa :CJQ$оU=U?͌@MRDG~3L8f*u0YF7cE, eAW%>=UӚiNj6 ɯܵQE۴!Y? z HHIR%J5.Lp1mF\zןp;D̄ GݟptI E@$mQy vbV夢U?%+O`>#+s1)p=%Ѹ| }Lgg!D!:r5n]n5 0}" eTuVe("B%m@B_O1Pk)'nP!-WpLv?>TeƲ(w 5n#zc{Ƒ;gWPziQue0B4W!׬࿋N$:9h"6m6eϽdU\ȵVy evMYWQhDs_?__?j6r e+AZr&-,$ !^g7{)Mtؓϼ=/[lD@ 3a kP; )H ]pȅ& >+w%=Ѕlf=N v*4Mh F6QPbI;)tjYFX+~&]/D&1B:M:eqZfřph!Jզfe-@E/4GQZ)eic,~2S!/z*GCyo`TGҌ-z1_^&6̋҉\ =WL{#" 1uҝQnǽE[oHiӜx@H 6l@"@:RĘ%5)K7э3;ϛ4:gN-i"dz@9 sWuYePA!';0 in@c>i5Zֳ1X=,!czjO%WB?*0?UP"J^9a |#f#x nQMf$LH8 (A h 6 lwk0b@ P Z)NOJPgc D j24AM膚38DGZ:@ ۱֖m l_ovgA پ27pe ߩ7'roʑnR-fNvж|lX]bݬc$d-I4$K @ζ/&k_#Ylk` &Ea`92Z) 'j#<M5VOݡxJ3\€c$"e 0pH`Ho+!/: 1#R|Y|"\  >7#N/Բ'9$a@b8%lkדZs Be<=mx B.t\ջ MmND]t4,P)yB@EEk,  ȓ`HU$We][z1~KN~tĄ}{z|r&0|\(d:E +N; Q$VQ}{ջxȿ`T:[ R$o0fb+9gwE7iZБGH@ 46(5ȗRՕ|3JAbv55(z35W |{W,Лl, %K|%>^%[:YX(. <i9)H:j;}|{;CHM2"+9`8P鋒88A)1#H#aM!&,+@@{ғ+ ӈ.;yB릒  8 " PCiC5XC7̏2 H?! ɉTBzBcfɗAɠ(t灨 -"  8'ODP EQEQ|"  "d;B'C?Z,,F<=`G !A4JH'cDXFXT WXrD EgN%@*H|=HŠxIX:)ɺPsspUPB5C$$t`n(&li9Ak"l\&mZAGF$} 4^xİQN#7Rɞ J9:|; KGRG ѓ$c88$َa'R͡ҀKUĎХ  ؁ҨK˒˺ԨK *MhME!RHdzJz\Ŋ=@/zC1Q wJ QK* (.g1MMM|2Gx!ᓛE ?F$*J 9cј V<EB |(0 6 ) ͫ>_0Ei6 L $[PML-Đ6jE4@s$KbR ATQZ@0,v#0ґc (b с +Z2jH-Jh̦R! lʘSƇ±(K̊ ~;͊4=37 c FP;*7 ":4- 2TM$İRBIɤA%P $/(j73(Up5 AU; Rӵ`OB1Ӥѐ9.^$IC(ssF WGWq-#4RJԹ#dRLDt@hѳÎ|50!<- a ~ S `(#jHT,L)/FTJY¸ȁݡάpTN2eP <C?C-:6K;AlqHqjR9R8k]<ͺ\spQcJVmWebB[k]  ȿW]]܅YY8QO8=”<&&:A] u|RUA[:|<`]*ljL\)ā|U; `A:Β(9`0@ӀQĻ5Mίh;h}`! ' BӁ_@ xf I7UT91 )JQ½'bD&la- c1c2.c `9%U55Ėpb2⥸^[-c=}RdB.RCJƹ4Hnj,L&_gK5?dX|eQeR.eS>Qхxhpz`eXe\e]e_e` fb.[ecNfe>[7bNf/KJƾ{Ĝq扌dfWfrE"1K,%f)pvL%mINUJHh.r ¤sq:=Lz|=M\\E%GKugG#!@=iNY^u{fg& nWx'9t59$~v`tp%ʹ~M6*!9Sjhw&{G֌ljktvB3ՓnhwLXjn,ΡF(ƢPjyj${na5g^Zk9H*UbD9IʤZV9˶^O;ݘ(5I/7ƌۆ^HVUG! *{"?Zb"1U!l)kQ!,G &- iBi>o 7 ^<徵W';;!T:T8Bޗ߉3:7 4?h.[ }% fZ5nwb͚JN8,X(waD< Z:lUZUѩMU:"x3#UH QW%0s 5Xh8&si~޻=I::1= IIxXސp8͘s(5>rnӭb W3k&ӌg>"Y"o01^t߈5#Z~cEr~s\qіvtAUD|^1J$v>qiC6Sqp&fjGw>h~M=[^Mxx-wxxxy/eyOy_y}Byyyyyy=Zfyzz/z?zOz_zoz';PKX|#_UPK,AOEBPS/img/apex_report4.gif*/GIF87a"|ܼԬ4fLb̜̄DnTVi%8 *ؠK %72dWfidISF8|^ojiSz6huDɥ4Xʸhwr觠j(ꩨ㙪꫰jjkwު뮼*k+lnߐa&6F+Vkfv+FM7覫 k+oʾl'l 7G WlKqwl $l2-",r0,s/l8[s>բåaU=)Pჱb*`ZqtcjKd˲6igk^N =6DyFQM=j.xniw^<(tJ-^K!n]F`]mw٧xM]ӛn6tiP"5}t&8 OsBWExBcr: ƛpz[mTuߣhBG5'y s|:ސ$*~K6C[kOɵ7",F8lAPhkVn Gwq[ϼ7oy@M[!OWϡgo+U zs{^}7^?m; [Ͼ}vI}UXmEm>Ђ,*_6_šs 6h  ;S; vX dօ XˆGt8W\`WuZ0]T]u] v xw{( T~/ %^_' 'Q#4p`V<`xW y): yV_^PzWz]ݷlٖ}nbcg|tYwx |z5j"Aa桘W20^ɘA"Aa $I &IY"9 A!Aa') YY  q1a5`yɜΉiѝɡIi)yОA9ٹi!5pIYA J *ўۙ㙡*Iٟi6z 1Q3p":#:Y2F:I :zD,0IJWOj*Zb ڠh*Cz6:`e:^*ڦLʦr'Znj [ڥ8 d}4@ !JzZNHz:TzfڥAzzʘB jaJwdڦQjꢞʫکI5У@ʫz'zo:Z**kjJ9ڮڭ:Z: l:Jj V*6`yҊjJ:yZy۠V %۩p[+!#(ˬ ۲^* 0< Z5ᯠڪުEۤ؉UkaBʲ * ʵQ9){@J a+!3з~Kg˳hK[;OKK+Akr۶n۸zf[Q+[:IiMˮʶaL:J; : ʺaZ*+$˻zeʱkvzW {? ٘ǹIV[!++Q{"!髾Z <!Q| ,Q IYw9&; Cç46.9 1; =L ? /A C0A)1E KLs^)`O X [CŬc.f i k' 0LQԐCvE>hǂIB{|G "mj{,GR<Ȏ\M .|,Ƽi y q\12|+ņ5ʓPQTTżʪo RI,lW\ \EÜK-7Ne<} ǫjܽݛD \; ΀ v^. CQeZ^ Ld϶}o# lN_.}.H=ǔ}. ~\^[Fʿ,1J҉.'60 S`o.lsЍ9vd}- ֕%m>ͰHy.G]<ȠNJn yq}֗g띎WwE]ٞ a>MYxmǐ ԗ M דH-XBѠ ۴Ss ^ ۞"ѓ~W8w]גЮ]SMF[> Eo 0"O$oчZ^˗l.?u5H <@~>F %_5OT_VO]mgi.g|/5.AL2=n2 H/,^>䮿F /^/$5lƭo/1Ozo1I k_ɏPn݀ 8(H`HhHx8H 0iyy Y(عxY9Yz +;K[ PKiiK;k:)*|)47^}As)ET!dIs皕|g2_1r\&1b%EN7qˁF]HyB<?31Q,1LZ(ëCgZUw8$̦l\ '}RbݶdǨ]6ΥmO=W)_^j5'*ߏJvܒ/Ōb1gKz Nmq3 -AO>1qVg1Q0U mך=[G7qWϽ\*>j䳧6鳮u_._J)G=iA^u^wÀ'^EhoWބI{గ߄}TbsZbxb2W+r=hm#@čU'da|0*#J8%M[Q6 'ӕUUm(])dJXw6:(˘dڶ2fury'jhgio҉٠>hFz!.f,Ni^z樫VDFy*k6: lKll.l> mNKm^mn,ꊫ1jim+⊘ 2kYlqꪸ;3KJ { /pƇz#eE oa]&XsYBpEqBOtc8aˠ]V,mPC# (>QD ,{ z̦?ܬvx]?^町)}KĒ7嫌jU,v 6Q ZHGM[Cqac .BBUJr#(IF̤%CIśH)j+_ Xr-ofDeV!!И>xRƆ)J_-d[f>֌n624úL-rU81HnZs:Ne\EE&4=sH3tb,ˁ9t=V1(;mFJE3h;);zK}][{rBR/oK3|vNQ&AzNp3YȃK5 y"j*E`A=j{pGF$KkaSHVټР9!JҸ?:b]6umG41&r{X'ŵZu%yGW01![JYA`wnjZT t("" ?&p][&Qx[K_.>,w˙ u߻,V d;* õ!t{U)pM65?;_ P4>Vg@5#z+t"`4gHjX0(e긜qâͲ3屐}dGYLqn Dx`72:\yd.ό4YU&2;eNg^2p <8gs2*\T93? hRG0DVɃ޳L'"!>ͪ{P'OSTnHRC c6 UZGi^ _h_GyGwtI}b-@# k^[^^1n=i ϭu[%|5Jݨaԝv][ӹfjj{}glQ̩WS۱#(X[ɞSl~8%k2Q >%VC-o'LR" }bWI*pUj: c<[͞zمufEx Pmz^z\"`I!buk,U)e[v|u] y=9Ni-f$&e HeK d'.gRg8&xv6eihgJkf')+ȂDwixIO"i/kh3}f$i9 1iXi^մ|ԃ愄xVdȄ h8HZ6l% lTO~jo ay;P}B+6iV%gl`{eQٷrUYtVEo?wuH[UWS"W=pJ4xVP1{fb%mg?x4( pv U}9Pdzd#ywzKXoEndplG<4$ՆP8Fr8qHY͘#G3s77@^rAO(`ãqHs]kX|8Tl:u?4ю'&?gb]Ygxja(dZH8nvc(@xPÅ{H|_ {Wf28<~Fut~/ZU~E_HkDىwwXqUh 'l04C+39t{IU5`o#Ai8[n?)؃_GbpRg8=Wjj4~g~y~XwH%I6 OTvv=zy>78Ve4؀ 6rt|eHsI_v:˺H`$I*A'rp ØRXoGUsϘ[zjio"zaJ Ӭ۪[>ef2Z4'sZ\uvSj<rҪ5]wǏ]7z1 u#ʦAb;\*wE\>jeu9;9nݩ{k,_s(9zB*A?I''zlvkۿ'_Kխ@h }%G|cr;~lf}eR{){MOI'k:ZQKU`P{^K["k_]ܵ k\Q"ȋȍNִ>Ⴀ.#' N.>/N).1~~0N=\;F-@3>+?.0UnWY[]_a̍ ~I~N~P~M``0Q䂮Q衎p>K0&'pn111( bRn>K.Ɪ>/-)`n p~5. ~. p#6n,9;^~4ICbe`.Pp (p#P #}?+O&/5=2ͧʣ9,n+PG~|>$@E/n,/k[Ezm *`!a!P `HODnSm&quQF1qocW>y)?:'`s@mG~ztQ²xǍ+@D~{+C+7$/ {}5c* h*C#ұ>o6Xt~| ĕsG"_XRy.z\ Ld+٪1?!TVΠB1  B< "oD%: qEo8‰H^HF#_ v^Rg/ WԮL!WB1QX`7p`0(\DzrfgU!i8O~l g,`N9R2^*u`s(Xc:slY3I͏U1zW44MP*1sd7A.:Ms, qXN|RQςϰA? Ї4Q]DjȨ 5Ȥ)jQkHG R'EiJMzRԥ#J[ R&iMszS4?])P}JԡU#'f(a2k,D ҢIsV|ЪV5om+\J׹Ux^WUk`'0u+b2oUj4Uʊu= CkEjӈg3TybUJjWֺ`Kz9I#pK&EMr 2Ѝ6ۊ8vbE*.ZDz!tޗ8|?rڇpa-,LR~Jcem`^ u = .{[Uچ#a= 8 c(0RB@8u;#=X/iUOqcsr d(gXGn:Ը&W3!g&MnYNCƨeN}/ЇNtƧHOzt;>NN/ di]&sCh?мcHn1X1A3񋏼'xWǼ凃x g6C֓T\~-'n#wb.qsq/_)`Cj?֧J`҇~&ף'D0~q?g='R$#[*Hs X׀5wXx؁)728$w'%ZWU䙬 i9 5^t y A?.tadfXiB ̙ D)JPYOҙJy1x`yutd<ЙiYFxٗãu"xFF7*M9ڤ-ZRJON\)`b:dZf2EYJ[P%Q'tTz|ڧ~)E##% E eڨ*YP U6UUKJ!蝟h8P"=QlʪdZzګ5ȫ^07|J"vXl"vHȚ*38i1Wa4aCggce f?@dgOccK`q`Ejk5W&ah9ze,֑vhv$ٯ"r֭uٚ(ooITc k`p mife7yaO&&D`cfH eJbB)hv&+6}&XWEeZ@K۴Ohal+`|f[}IQRնfKs+nu+pQ{;w{l6˵L˴&!pldU`Yc˹չ[>#@ @-Y{dDB&RAފ ;׻(Tۼ[[#Z0ڻ۽;[k۫L싪QuPvb[`wB#쐇%Z+ue^ې^]u#4]z wv|~+|:Қ%luxr2{a0$ B]BFJ7|NC R]GMVKZOM^} ;(جE==V|Ѫ,3HzWu,Rs9^sn} Yw~lLMmO?b\85̛t74㞄d5: X3Ȏ^@$ΥL L`]8;`I$H6;0B0;` C;# ()*./gc7]1VrF^epnb9nf7I_e_ 0i6H692kccZ6K 8 L) ߜ-z=N3e(/ 3_>Aɛ*6H`HKJF`NoqFcnafI_* a3%I_N_3a ALD€5RCK{c;DOo~H9`{x_<>.0 IfιrqLG P@Y "f^b5Ln.C#hIue2LW~"ΕgxƤkAXhISv脇hpVʩJ].xi3M䦣6m ]ꋪg+oBCګIlzS&fTnOZYpV-+lj[:욫$YjPRvnmBG˭c[e&,Ӻe,WF ,2#OP2'. 1<2L36> AmArk!7K"Cb Lvfvj60oswzM 0_9JETKh5!@bPycS0Ap9w>z褋骛z鮧z4>;Op:{yтZR9'kcE.5G ,p}Ac= S@ SP_>o~Ͼ??ß?>/'@3ޜ,ѽeo!&rî jp?Ab , O«/bTp4$KbHXp<\ qD,n*#*qL(JqTE>/\0T[ψ4q4,#8qqt#o!fW£y%㸀 <{@21m X9ޱ{ d CqL$YL@ B']ZukWŵe"\#Aj mr˜U~˩`|n@Gx@<}t2w߻%!!>XoChڟ/ABOD3|c:_$+AF(W>!~b駥,՟ay`Yľ} |17KK'}WXńK.ǁWJ'~HT"(~  x4~L|2.Kg:X6ׁ?Gh|CH,8HIEBHM{ϢGHShEvY}G]腓4x_(cE\Hg0diȆmAkq($Dshw(Mu{ȇ}8+z(XphDᄓh{ͱCz4GXD?CBp#Op#IOaƊXYȊ92X؋Ȋ5}5RT86ЉPFP4D;T|bFfsvo֍Xu(Hlgc5ǘwΈpL'(uat5:jnvp4 14kMِ)g21Ll^X0`573i }p}75~1؀GY#d#j&ijVkSXjij敠6'kfkX VS"%iLPgVɗ҆ɓ:蓆Y;Y7(L0|h#Fjm6jZVj8_c I yJYi ZSJ# @r9JĈӸؒ.}G6ɜ iLK08%mYm)CpjF&nynÞ陚Zf㉞qcқuVpXjZC9C A9"# G9Yqʡ!!ڡJ"%:&zn'z_#$0pE[sp*qA CqDqEGq25Fu9D\DVCP[^% P%=$aJTcjkgmʦo:$q`3j(hD{꧋ק*j{WtMר*jyW꩗ԩ*jTdZ誯GJ:ʫz J:ŊBH:ѧ(}*)1|" G|1JsJ*9(Ԃ1xz:ݚh{ZjʰkϠCkt;C˱ ۱*T%[Buɛa1w'+)[(| F(E+H0$PH}7EDkh|*Z 'w@Na8?9~L[|NK> Mp8#~imj8&|Z:h7H4Id{HX7Ƿx11|il jK|s +$; HǶ$xuK;[4h*Wǃ𺷦ˑs蹛 Wj*ǹ`K~N+皝{*j㪺4دK xۻK[~t-F (@ KzkvdkWqa=\b>9) +n,6/Gλj=|b^{EcV.C!姐阾S6bc͉䄞ay`&m_5a9ɏ).1!1DX@ @Qݭ~0M&ݣmg3b p >)%' -2/+_:/~q1M".(v?LtO Ξ oP8ʠn..UTqAHLbqC`X3}䛼Ƞ| $^a^hPPqUsO . eanY{p3?^\8 Qo0_6Éέ1^pM+?o\M$/Thav&AhsL~]("KUr7⊵Gub,^!=biM_䃿t 鶗)0 1u >"x OߥHAC` M ~,\ g+.nH/|!גC qaD"^vl3H#JuO^ *\;FC}3rNA+걋c?r*4!qEFoGA$ K4҈yj'?I*O %420F8̥o"BG$+ayYA< (S@IiZؼ6mzദINiӜ:uؼ%f>L44/ӈ5L"'gճ 0(4M 4thD!MV((̩ьbfHAiԤ%u(7Yz>5p>y:_e@5bLW$zrR*թMMR'է2թSjV U^U]:V5eYVRիoWݪնnUq+\YhN6oL: |L<πC3pЈNgW٧'Miy7iHBGMj6 ,WFdgMkdZεεp˻%}zN>Be;ЎQζlksgoN_my7~O3Nr7{'mS-{8GNY&OW>`0.O9w󒣼@.(Y.0PEk"K&nu\0_^K;:/NwO{n|c:/}~_{ū=닷x{DWu?OҿZOJ^qD q]TD'^'xqO~^oP1vBT>}'G?~S_>ß_?#B~H}׀~7g~~ S|0||+ h~,}G2.H~8hH~8566DH/W!hP98F؃J}1x08?x\(4p~4!؂Y(T}ܷLGx8◅5XB؂EOm8 h脂RxȂ(X+t{8=(C|w`i|džT]Xm؈xS|P|GXX\~8n`F'7||&( h ߨ(0+'PKf{򘏓MOT`@` x~8aX}XshCX>}ᘑGI}(aX~ i #TYoXH.XHq=#I i@ȐxMxvX?(x'T0xRWxH4K<ٌAو[ؗo~XyQɐ]%3T/ phtKؙH{ptiؖ nGOdi 1IYi̹ΩЙٜIYUO78 1"TTcI))9ٟ yR yٞLbO))zڡJ!%*)' zyb-u IuꞚ)c)#-ꡉפ,ʤHjO&J"^z68d:`I YLİLD @Ld{} TyZLv*w3#Dէr* :eP@*i:M|vtZ##Jjs{YzDE%̆"dzc0ڥxH E* 0ЭZ*ອb*7ߊԊ[ʮ s媮ʮ܊,@*qSz*/jO ت ۰ _˱K, Aq*Я ge٬L+0r`c9[`;<|;A ֳD?k:zʩ59Aʦ5ڵ\z`bc[d{jklmpn;qr[ PAHTՏda{dR8;[o 9db,)۠ L;;f OǺK|NJ ~1 ΄0(k`K{|fɛq˼ƻ$8v7ԛX||(۽;xƽKLMvz[zhxֿ<f\b k <|l1;PK<<PK,AOEBPS/img/bipub_template.gif81GIF87a5Ĭ̼܌|z|DBD"$TRTľ\b:dbdrt*,24RD $"$\$ƼtrtJtL,D̜<| 2\${#5'R>u k/ }7%|]vKYr?@  !<[@ 0)?0@&mOv±cpBxB B 3%(nK*)'mD u9!dpŸv"o`-2nG@A~2Dpc$ 00*0a&z$]\LQTnz0c%y)\ qy0שƣ1<CDpW6! g d*WiE؆8q"MP4 @ 9)pTc&(M0#ǔ3q+$-S&)e &osE@lч-YKQ~Jg J &EEJ&^M[b[4@hyb Y@>iș%Pw`.r (jMU$) R@A/_Jp .^ ]lɦ;QX~j؟T  mmk۰K(> kߑ׾} Q ̳ݡ(T(mw;O޶7dd8U>NE"s!(B9G@sbuȵ*vf&tF7!g'/'JUzFQ_qEXA,$=xT_W՘j8If@{KNም-dϯln NQ*#RE8c0'kk̾a6M.8!gf]&i/J>)~zyl._f ?1xn.1: ZL'L8 ݝ6C)LlʄH.I~c2}T,M v-Sn@ ɨ$/u>@ JQT> D},exNV'Ez}&} X׷ZvasnwiHEwf&/`*P9t5&Rw"Rts%=UV'2`0qs )P.&m`H "P=cyuyACXyEJG(d3/1}h0 e5@`&{Pu?wqv6kVXDPU0r/s3SrWR|,G'K{X?HX}38vf&t'](Ub["7)V t%M]ec~WG'SW2 k@];@ 'u=ʗx4ryisg||bWvh˜׋|vҨ(,M7.wx`<&-zZ'+)Mw wUUĎ'X&wȍuyXH(F鐻(}ِ} 0׋"ke&e/Q'6HŊGxu) EV"/` KSWRfTYs ȑ')}Y9 9]TyV9uYigwayxi 0w"іHwijzSHK1(&RPO!GP50@00|("#d's4f5PS(cF&3Ex"j(|8 aBx WdYIYhy] U*qgb`N*{ p$i`wW<>=!"(by%Đ3Bũ<NXQ jGPFtPv%IɛXꬨـQ B:*يOڣ閅ߊ, _V|I\C8_F FPC iDQI"gMf2& Fd7b&Jڭʟ޺/;ክJ:V-rg&0XFH:` g%PER)ZVu[(;iW{Q= #9 Ь$  GzJ &9+#[l먅ȩ4{!g#|۷|~}r(}[5Sk[ ~o` 8 u #8`۵ZJ,)kkKJ{n ?:uK[k#{8ʛ(0 {ʋ[ 뼰0-6`[2[Zjk*ikb l_qzDJdzj.?9@𺵒 -S[ֹU ;4"! |;'+0ܣ ) ˇ ;õ(_935,CtXg&"z;N'ԏZ:CW*&2)R=53HK,xkKy6jzv ȁDŽ|(ǹsZvLUq[opgyܹ>D0rayӪ7帎t%l>ceôQ[Ž,\èxڻ|\9iq{\ԧH#5/B'g5e7# WB д]s~z)4)%൘̋ <l -ۭϊ|aI||q!g P6XM2B=SOfk~ORII;8ۦhG@g71q>? Th'b439}"^S 866]7z%ʞbrSpgMy>Qv 5=Nf{Z5fB gCaTJg(s=1"]6h퉄WWCK'@ Egçq5E W8E{$# Hby()KЎAm⦸BI,RԔ$ mXbƍ?Y2d% &WU8!) 6bp zqDlbQ\`َYŪx!ᑊ4SÇ'?]tխ߬L13 w9x$xJڧ`mZˠРԏ EA$8@.0C 7: خ_@ЦR!**B%N4o^!%vDū8(‚H$;2K-2CdJaũ`"F@`a>Vhpj '܄3,p)7 ‚"  8tKM7SO[ ̕2mɃ((?Ko*-//:t#H2J;!U*P!O%rUH@$H4[m/'ث@@6MB>xp3K,7eHB' 'l8b'N[x2`pCUxTW]\4 R cZǧ[B~zb&,קDM7:d(rW ʣ"= ^C R~6fpJ=*h;N11l8p`).. *" /@1fuׯ;L<0AHX:UʅJ* "Wax6Ё3J(9|GxBI'lAN` 4x ` m~0, 7 0BM(BrP1zX : |D&21)QL7#WK~I d ѳ8A]W<R)rԅ`QtE9!,Rb%Dd"%*pM2P^? BAw?8 KS"x`H;` !T&EEҗ{bPӂ N US.i'~)PS@)ZFJY x) bA ` ] @' DT6ɻIhH@_Ԡ ѤlER 7'&T!P8+Bi ~hHEj$PUJj+P`FH% uzPKt:\#p!B n )0JUv5 W%h 8v>EkZ!Г\.p Z`4VW6hdhjElb%֑'0ALŬ_)\p hXҖh@MB Hv@fe;[h$Jњַ cE9@ $ V/0 2 % \vwCi8eɕ&B$\4@耧]zWدdP 7&`^X0\0`vشtp( 00UbWU7V+_g?1_gc:6d&+M-l'OYVrq˿o-s=hBЇFthF7Zf%=iJWҗt5:C˟u'ԧFNHjV/Ye=kWǚַmk^ɻu_`VllfT͆vliWگmenrK6wՍ!t~N=oz+Fwqro}.>p׷y+W!>pK׶1hkGA>`'ǵQW/Ga>sP˜7ϲqs(?/ρ> Gёt*OOӡ>JWc 8c]'f ڿvX%fWJ~%vg{-H#{Mx^ɽb]J_'/G{?= >?7ه^|t{}{K~׻-k>'~?‡>nq>-SR{w<5zSIOo飧<3?苻<>??[:~;K?3ړ >=@: týS@S?k=?3 Mdk"A!4-)#TBI%t i')Q+Bn-B{/CM14Ü(3TCH5tö{8Ē6:Ԏ0< :C9>|?5A4/6 ?LCP4P@RGeSAEHEHJRBMKmR3TTDT UT==VW}TUY%NLRZLNUX%RM]^J`TaUUb]>HUV@5@VDV7iR^gmjRmkWWVR]J2tVOw}ԏAE{SV}uIWdVgeԴǀK%HGOx+W}4XttaX8eWe؋ȧX\F8mXzY~XuDY,\YיؖMX:}SU.ь5,-;RXSX|Gw]הS O먖k.jill/䔾.Vli( Ɛ~mϮmM!mm6mAmf6mvnݞmf0^1֮듾jnm Zl,o(ofnoV&N ~n .jGpavn? p NoopqF0foo~n^q gp pypr m*N xrWqLYrvrko-r.O"1q 7r#Wpqm/'.?]rq.@Ao,q rnlp7s>:q t9qD/rK&CgWr@gtUwrRr;uWn sntVq:q7pcrPZpRgS7,XX T7lW?YnZvFsu"O`tIwFvHu l ji\t~r+vuw[rgsM3? iPo8/L79 t?8v$Ѿjꑯoot]]?Wfx5'r.Bx/oooNuwrvR;wEgq7kwly>mSW fǾuFmokgma{G7,i9Ox\{joWv_>{&|7|xN{|/{_ZDqx}vo-}ɞ}yV}Oה·}ߟ/_vsG~1~M~~V~,g|e/~f}N' t,XA0l!Ĉ'R8Ŋ7rƌA,Pɔ*=\I0glINj#Ä%*(AFl*3NRBJuիZFz5W`ϧD:Ti[pbUKnʱx-T_ׅJنhJd+n%Sfzˇ3k9g*=4蝋 ^qؕE=momMܴj#† ׹贇~:wث_=vdoG&0uŗ>j7x|7tEcE~f\p &ag9܅aPz!2haxBXu+m_c!x#cY'n|)BC]#L 3Ӕ9^~e]y7a9&ey&i&lb&q9'fY'uޙ'} IeqQ:(J:)3BI)j)Jyz:*zj***:+z+ *+涚{,ɒD:,2-Z{b-z{ߊ;.骻.&뮼{/ t>髿>>?????(<`;PKVP=181PK,AOEBPS/img/calcs_measures.gifGIF87aM]3f,M]0I8ͻ`(dihZlp,tmx|pH,ȤrIT0ШtJZجvsrxL.7n|[~~HwJ 295`3I, jj^ƕ4/ë̚؃1޻nY03G2muK8 9ŋA4>IJȒ(Srr˗0mI˖6s̈sϟzJТH:GLJm&իXEʵ+^Ê=euٳdѪ]۷TKܺx˷/~KL@Ç_ .EaNJ?n0a-ra;&e RCy1Č7k2 ^(YXu vnƇWVFrnugzC78ċw<ҵYWV.V}7:NNLČL@[785 <iwxݹNJ4==8h#Og`@ .xvwYxwc-_oX:8! )aDI1?/^il,~͖{!x@ Fadh* `8 2H3 3bX8}%fwi%{ZЀ(D[v (7IJLu݈H3'- ?YiޒY盘ꫧ&٤{vl.Z+o7* l<v'ril&;ds~k^"Ku[OEn5)kknι.~:+ 4*ʡFkoOltxl;Ɲr:fyr+) ܴڛ%\'<;d]1oLưrb<4AiaUJrMrm QmYg T7cr,mܹ |‹v-(8) %Ǧr ǒ'!%d騧ꬷzEv}끉vtnZ|V/ G_9;`M"[}oƌO~P_SdD:is.C 'cBXX<3 kفf;@0ט`ǫ~Ye9!fhAz[)\E'+O*4q{B2x^pF>FMkh%Y#h .tC!;x?L"F:򑐌d$y ;r̤&7N&%}R%2T9JJ,IvҐDd0{L`|h $jMӢ|'FKviAHϕt; җ2L@S7&ANo>jD:T<ӧX}&UժY +*}z5bM+,U+jk):G+˫ bz׾Ϯ~ *ZM,ƶ +ʆͬz hGKҚ H;PK"PK,AOEBPS/img/partition.gif,fGIF89a333::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!!,@ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\10`I͛ɳϟ@  tΣH*]K/g6JEPjQ`ÊKӮ;]˖&Vpʅݻx<;Z?|۷u+^/D6|0ːS̹ǘJLZgg}53]Q6mon{7A'?q;tѻ?|}0fЏY]t+P=7^}[~0מ~߁ P} 1p*9P~V Eȓ;q0hbO'n*!/! ~x]栄9{WdzBLJ$r > zפFoSwFfYqQh>HP4sXg19rIvgTޱi(b&Xj_NDގaL<I jԨ@]iZiʩnkUjꮞ:}M %d*ܱJB>*m\>Ӯ)vfYma.ےў.dۻ+~Kᄀŋ/Rl,pa"G 6,gw,$l(,0l4lI Ǭ<=|D+H'L,PGMsMWmXeu\M_mUo]4h]bOt׽3rM7qc̶ހ.x|kY>r}{8)?~9w/.2ۙoΌC8ϝPyk2Vnz촷Î`/|'yUғ{n/dH2޿:9 $gBhe1k&++çսsFK-KO+m1+YI6Pd Y ́|ێԡ.u#LG5~2sGHB4HT޻BUy0!ж6P uh@=$\dMH#`iXg2ޢ^H.zn֚\DElH,!(C/0k_X8̌&CcG/!JfZ8aomvL"'E1rGܣר6:c2GP&$[,R"% 6PRaQ)g9K9^Y$% ˪-+im`mgX9e"31Nzi5~znu[fΉΑEh>GKs!9hB'JхF#/!R 5c6A9J) cCW!8mݿ\Ӟ@iMmӢi"KPԦ:CMQJմE$? 4xaB 6tbDbF9vdH4yeJ+Yt"iִygN;yh%FC5ړdLK69hTSVz PBvcRcɖu lZkٶlJn֕*6n^Lp`p+qbx 7v,Sqdɓ)#xʛ39o_Σi4酗Aլ6#zn0&qcNPtp H/ZǙ<͇;n}׹{vȱd1+T}9gѿoLi@ <@,iA|P @ PA ͬ.r$Gl;TD(EZdqE^LkF;#ι+oGFI"C'B*/2C,7ԲC.+̲D@ qx[1KI#aTqSHS98cOPlѠe2Gjҕ }LZ)X34L7KM6Eu|΃R, RVA tQ} TT=$ON KMjelQpFrv3Tx[;ݵ0vW5xW[~^8݂e%-5ޘj EM>U^]~y;uuޙ}m餕^i69ƹ骭뗟ꬽZ3>m&CV[v9kxoZdf;p\i/^i>+oPI4?%jPԋӮe^Veh.* # 2pYY( b|jWΨ]V6q.b駙G8sauHj*l|$)9i MYdIAѪ#@=gr*2YIWrkeu2pD,aK_̎%mI<\^P~/L l,&pd%6Wa2v7T89 4:ٶ` f#ggzΏӜDg:vNۖ?7MYQ!h@ŹCxϞG@&( hCk9su&pґ흁zRt|$Hw"җO9&D RJM~449"#JmVZv]t(=GwO]jW֠U1gZGVޕ;^Wկt^ [زTea؊*8? 4xaB 6tbD!xcF9v1#I4yeJ+Y4 fL3iִyg΍iQgPC iRK6ujԥVzkV[d kXcezmZRun\:F;o^fi[ 6,.ڻ7pd};|s殒kɣI; ujՈKw^:ҳi}wnil'~y:Mͩ5{̫|C}z{W^󓞇N~^> h?6 ļJ/ 2n$ =1J*DP[lP zEښYQ +#)Q& lA I 7%) .W rÅ@"W/5t4L0Cl"3E4DH\(ċ~hʴXQ UQ&[M#đN;$;ݳ>K<ƗTVg$QFTYO@t: m\E_Cd]f}hj]C(QQpLd(XR㛓t:e]UXcꕠBvV ` v n`Xa~cЭB+IҰO=_5Lw4yıp=(6%TbFx_MqbXF;4MFdqq,H80QJuE=Q}| #HC>,:B$)YIKR2QdZ IO~"(IYJSQ;*Y Je,[YK[.yK0YL!Lg>є4YMk^6Ie~!8YNsf8N<u@=O@mO @ PW*6@NάCSsь~<҈)IY~tu+u)@at9):k:*=)a~ TBQQӡMTEܴSU~[Vz͖p6dJIБbZ:M8Z Mԣ ,3ERU=W񊞽u}ldWLv2_ ؒv41kjv[EkطJ6e=ںVm:[ڶ.a[1pkApga;K3&K4 jUD n\.:T# SnsW'aׁԬ_Vݬ,GS`qPOmVxch:PvM*3'W!ŮkWXW rˁkd;+^2e/S]5UthGSvesViGh<_6-& 5\%skU.4SUkհ~IfYғrB8lMc4&UMmW[[ؖizGI]ZИVwK 0w[kABnsߛDToBΆ8V?5ɶ_ndK;p >vb61 K_{81^7 MlP\ϛЛӞkW޺zt>fŗn_K:>骣 a/U֩:tazov>omtǻzהi/߹woӹWu=Z񘧷9z:MzN%O9u.v O_{Uї^/uۊ] .{Vln%@ HXȰÇ#JHŋ3JTH#CCzB$C8Ɨ0cʜYq›8sɳO%itˢEF JԁӧPJիXjTׯ`ò ڲkғ ˦];v(ړjʝKֻxvޓQL9]̸ǐ#ELbɎϠCӨS)5aҪnԵ۸yŽͻ)M3gӖZsǑKN:ϳKaIN|ӫ_"v 7v[gŊ 'VX `1)V(فV&a mh$5,⋝(k"h8jጞ@ DVcH&dZE&PFTTuXfyUv^dZ%hfkbtix|@$XA .dC%NXE5nG!E$YI)U@1eΤq9uOA9QI.e:%NMN&QYn%jWaŎ4gTi6[A[ݤfuׯǶqv;aĉ'ۓbȑ&\2PÒ5oܴǝEץ|̣UfЭeK-}6Գu=uؽ}Õ/{hp.8t:' ]wūzy5c޽A4뵶ǟ>|q? H?3o#зp$ ;A,P 5SDDTqM<kTE\qe tr}DH&o4&JRˀĈ J,IRC+.-+S)L6S6|0ӳ94 ϝLPlpDM"E(:$Lt>jM SJˋ(R6URMUVc*J/O2eӽx=ח TBt2S- ]YV6bU1օPݍ,"e8: X څjEQì^iɌ_fiW_jw[8G+]PxI 8axA&6ߏ_?faF㙕ْ]s9OzKu-Ա_>'u}bwdCj=Yse09&槩Xl7JɞK,+GN$sjZ.)| t"զGl*u &lr |3p?1t6}+q+`Ihvpuyc~k/E⣏NosmzO]"wvt^|7|}|ˏ|-\~hs?ѡCMe/^Q~fUla?U^L^V=F]On&[f}_ g/(l [BP+CG4_Jг C3xuo1#6ľjB$[ҿ2lE j* '@d {[`P/!טF7saEȟ2/z#?:kb"M&H-UlbȖ.?D! DL*d$: \'BTUV[Bv5X@d͊D f`/(A$֔̾2τ62^FG{%+۸n3&,6Fc: ν4Z#9#ˊ2`"sIerd!)ąFl֪)ܨ7;Q9r4޴_60ӞAO>tGKE1Ƥ[rE q PF2DicQְĝXFNLPT*n^]WUU!7ϐdլ!AkZt:|Xagˉ:P^%[E,^}N\tS*f-=i]1%ldj=iZ%} i_"O3Xܘ)\zasi>t"DE` WuK֖~o(ZR{W`̡ZT>90RqΦY.p^m7uK3S\zPE=|=ꗸou8RN8XwxsX!!\elu7 xN5gc 'BNP'd Y2wd#+NSNd gyp[rteynb~$4N=cޜ9o;Y7zsL<ZЬ!t=!zN^hGWot9siLgZVS=Pڌ%L}jŤZի6kjXFֳVm$\/uk[fve7[ڧF=ml&vg &wF r[ 7nx[w}o|[wo\' ~p'\ gxpG\xng<-x=q\1ǸM^\+gy[^\))wym~s'2Lhs]yC,h „ 2l'Rh"ƌ7r#Ȑ"<,i$ʔ*Wl%̘2gҬi&Μ:E'РB%(ҤJ2m)ԨR[$j*֬Z1+ذbǒ-kvgխjײmٸrҭk.ނih.l3n.Ȓ'Slbǚ73|yТG.m4ԪW.5l9Ӯs³mŝ7p;G9K˧S ]V_=avs.6xͳ>=|K}|cۿs~1( X p  E5aDv8b\xV""_"ŸԌx#MX#AC?28$IddM$NL$U$YzDayt\v9A_jyud[VQUՉie 'Mcӝ6QD1:'@傉&jzZmJJg.~j)b髹ᡤ^Ī*Z{*+lr ԧ_(>,~*Jfbr,:[,֙!"cn,pNV&)z1W1W_ 2$FcQ4Z9J]l^+ -).o)*k3\yB] ueZBߎ.;Fe57{׮RK6<Zvírݴ~Xg5D}Ufn-Tg^y=ޗyܤ!$Z-'(8_8̥+vɰyt~w[7;Nzꩫb=k .9uݾmo;}{ϼg 㝯\6'#ؼwS!b6o9?}~{DzmTð? P [cktO2ATЂ|N5A" 'C= 8B!V1ڬ(qEjl[?\;pXD"␌:4#CR&qc=,ts輄nWHsk _OInb,%Ϙ4nrXkXaB=<摏{L97 ,qKYޏ f@Psd1yLN&fV<ъQi*&/ypi4)F|'3fSd(4VJ!T.ɻnL$B*'\'{E)jDla"9F|$HqZzHs=}(D!ѝ^(P?@oӤ ӥ2"?*TT)EQ[ܔ9mE[LWUjWgVjggZ󚢆BiV Ei>Wlky!{i⦶eVm. &Y~̱xa,V!=hۃmis8V4`تs\mc{~j--к6Vյ,9_=uVEĞ+^0zmVu+xWÄ}/|+ҷ {VVxL^"WUe{!3X(Ms`F%Xi0C1Zp]"=2"e_#X+b N8DfYfb64Ne?x<^ݏdٛydόf/o&lu 8yν\-Y?^=φH h څѡ#ݑD?822@vЏƑCmˁsDor%G᳨_n? 8 xu] :ؓ}I8!`sVԂPa!i!%X܅!6u""5U16Dڏ}$Xŧ#x#M:c-XUfƗq/FrS>%L`^e%i&[Z&hf9'$ 'Vrtf_5[F"'Y'wgSjgn6ziU*)1V FiZji꫱ꪵں٧D+~ +>:,>u,,1kZ{-:-F-A{.骛.z.nO{/zHo/ x 0 Knp.0>L{k\^1n2)7r-z1,5,97); =4U=|4A454s*4Lg{5Yk5]{5a=6V}65;PKY6,,PK,AOEBPS/img/calcs_lag.gifD&GIF87a 111cƭ1cc{R111cΜֵ{ΜcƄBZZZccΜcccsJckkkc1cc11ƭ, @@pH,Ȥrl:ШtJZجvzxL.€z|N~iwotkpwkŽju餡lj[w?P "g0a텛He.jȱǏ +"ɓ(Sq˗0cʜ٧ex5q8͍~*4G KJJիXjʵׯ`ÊKٳhӪ]˶۫xؤ鳭x˷߿ Ll\Q#i*^̸s9!YTyaCMӨS}X^ŠF=Z(mR^ͻ ׏+_μ9ruJkν k"|kns7m{Lo;(7g9 6Ʌ!UKvfva_FHI_}7ߊW߉^2~h8a5@)DiH&L6PF)TViXf\v`F]3 gjnyfos9pgr码)h֙蝈6>*i bZ)r顝.驞*^ꫫjjƪkA+ g;wNfYFKn +t  0H3KޫoL p CGL_Wq#L(2D x`lRxx>,t?{0tF'E3=4M+5O]R_=IS5Na[ fnǽjםZ獶m|7{7 38ݍ+9>sشltUFg7ӥͨ(E(5M&5ϋI<Śig~ wS@!` :f2fD' *юZ C)JҒ(=E3Q tthHm[8ͩNwb.(L+ lPDxυ]rWQ4ل3@2a& H*dѪ6'P RXF?R`d9`3Z#h(f>Y/LJB锰|Dp[n=h:Ј&A7zюf#MiH[ј5JwzӞ洨CMjPӨURzծfcMkXոuZUW03L3WР ӻ7&x/=q-`=je~mnvӆw]nzm|{N{[w37x=qKǸ3~s+>r"w8Unr.C@8rs=@㛣g}ę_Зß3ct:ԧESS,9O y=cc >ܧ\W%aWdO( <<+>ëqǠebiW Fqt/3O}Q} a//=p>/◎O琯3Ώ>s/;>M{+7Oѯ,fG.cXׇ~ff X5h" Ws5VGeWM/m>eܖWm%NcMޕ"O/F1Ȃ364.de LPUtעTXVUVD%VQXZsVb`^T0TEe^XVc؆n(deU[xs`vxzZ8Ɔx8^z@xWD8Z$}h8HUyщ YaUYZ0!!Ŋ hbY%Ĉ WhxIdՌ8RXظ 2YwbgwaGwzwbau8vGgHy9QwXh CFgui]=,,a=qf @_;Bs鱌 9$yjXW(,!,`0b4Y6y8:<ٓ`rYXF7ݘb `3Mh1PGYbvsHNN]?"V )AbyFI0 lH@"[`hwv [HO򤗊djyc9Y@ nI IheuWG9[!ZV YqY92βJB$d]#=x' ",NO9׉/ԙ!YH& A湞"10YD7 Y@Jg@Y5Y~'0e1c4]Jѝ\iJ āy`v`ڢA.:zyК٣>@B:#%*`l *-+ W:L\*\ Yad*_Zcfʦki`*gڦp:vJnyڧowZ|:Z**:Z Jکzꩤ*ZyJ lh_ u їZVgS-hM8L2'PʬV(:ъӪz֚ߺڭZ*窮J *Zzʭʯ: +Kۮ KKH3ŖGЖIP*T FB/v"٩mׄ&%3)#5K+67۳<;:;>+EK@F2 .2ۅ*I()Prb+b;mf[h{jln۶prt;v[x{z|~۷;[{[  2W.`8ǃ۹ᒞ[ˋGzۺu8tyȔr椴}:ڻ;Xțu) 7xy$?K]!9JH-˻ AWxvtx>v U pZ{Fk*vJcL@St{Ax< g#vy~74藽Z vx+Aw$gGJy@%B)8zkyn;7D\F|HJL% ;WV~X\,~^b}d\wh,}jn|p7t,|v|Ǿz{|Ƕǀ,{<ȮWȆzȦȌuTɒ u\Lwɘt=ɞsm6ʤd|ɕʪ\\ʰ[<˨U˶lZN&ż<˝\Y\̉e,,,fg<;F0~ǜʹ,KD<\|Dp 49 n%/bĢOԝ2(.G9ؖ* mP, Z %ϱ${|m"QIOe,m-O™0"ݖm'9NAN)^ Miu\FH{ My N̜[sb~ALDcwT(T@ٱiJڜ]? J Y=z:B];ȫ3g~ ,t>R=,B ޠ |y Y縵 L^,Ky>^L^K7.t<~쐜^ߜο>^|Ҟ`T`1AL..Bp>A -+M?fK0b_6?_^2=Y,=(EX*&~,W-ÑC68:Jܞ{UFHJ>2ܫLZ +Z_dɍH'zԁI!O3j?I믎E(c.jX ԏc`O`^.??I4oY_BoDlOE>N!SX_i/?/Vjre/!H\^ޱd?ц1e)Bz-jU   N#7=@CQ`D 䑹:Un]eVm}0Pp0o .Qq2RrR`n4Tt5UuvU3Γ7W7t8Xx9Yy:Zz;[{v=]}>^~P\/`@ 4xa\) bD)VxcF9v @ueJ+Yt,; c&ahPC_ɬC3NKoҢs);GV3O'T|a ]Z)KmZk٢4zM3:{WTz Ok'B$!\p"@Ir+c-VYÉ74?_0ҹR.8*SxxɯL.$@ٷw"ӫ~wp@@\|TN - 5ܐ(EMT?\@ZhхJGyq{ F ̑!QH#Dr$,'J%J,rJ--4\S6|K79/礇Vh^ꦣ~Zꪩ鬧jZ>8 8aFx'85Xo{MR](WH9bM8cE <żl ,q#r:@\rE?G}uKY?ui[}vos^?wOߡ^}x{{ ` @Ԥ**-kOogťla k\i1 d,FxȾvP !D@2ЄLa =0|UC7aWΰ:bh"шIDy&2Ob*ЊY+vZxD2rь_Lcp󓋄 ñ(X\H2Oh@ :PUhB:1(L^#`M5ɒm(=5UR40]iLi:S8LuS4@iP:TH=PT>5P]jT:U:XTU~5`"QĀqT, /+:޵%k^W`[%,bX:md%[^,f7YzhE[О%-jWZӺmle[[̚ p *yp[\F">ѕtVv]@\׻x[^ ׼Uzy׽|[_!Ⱦ~]+_ V0@ `?E%\a _9a7xSsG<\b·a5Q\cTk1\t/{M?Qb*_YVe/9\\fRiV󚟂_6qo\g;wMg>s ]hЉV}rґ@&MmkYC#u\M?^ ؝^敇ǬinӬdr𻣝c&u OC{V_~/'I;㼎c̯)xϗ{5e;v[YOfi_{ӷ}/+sy_|sW|?$r~_} Ma}C鯏~|~ӶP?!ݯP/P/'/P/7?P-GOPW/_P,goP,wPm,KP 1, # P ,  P + P + ӫ P + P+P9P0Q0ѰQ0'/Q07?QF+OQ!Wc/_Q ,goQw3$QA!5QͯӣQQQQQ}QǑmQQ]QMQQ=Q-QBdOQ֭)h cG! ' E VܠN"'.poN0R#1An$OSR%%[_&P&gk&֣@z'( x zp)R)'` a'((+R+R3RaZ*`=,1g0C-C *n;7.9(,)/.%--`.i0{.c0 ssjC1-Ð2/3&qr, I7|7i4WsssNH3 R1 2kS-od8v;5eS.U8757]3)$@ 8ӍC;w5 겛S<{<39M381w/;!si.Ͳ>8>C=S8-g059T@sa;@4@16@c'2H(,=sZ*@@ TT,zt84(TF= *(AO GیΎIJJ``AKJK4F(L/,,`K`GNTN DLʹLtM4tNPu<Ĕ̴P+@M3TP#UR'U-RtQR)S?TUP NuOu4TWU[,PUSO5GA]WsUW'aT4VMQk5JrWX `Pg5XYUZKRIQS[uZ5[u[\W{ZÕV4\^)\3UOuΞUJU_5NW7UE_`R4Mu\ a9ŔLQ6`Ca/c`T\+]3dC''dKdOvaEVeW?!eYVfgvїw)WPE}U~V%jUPAdS6]y f~EMdD eS7yHp|߹j⑃h9j'Qe7| G"e_J=ddVAyG@8tTWXW88ރYYhy(nQs(Y=*Q؋fWRi~*ꨞJꩨi:ƺǪJ)Z'z$[&6[FV;fv;ކ{궋{!k<' 7$D,Wlgw ,$l(,0,4,r8sb9Cσ\M@͗ms!4PtT5uXuu\su`+ud4vhtvlcvpvt3wxsw|sw߀7w#3xsxr͐G.Wngwy 褗n騧ꬷ.n;/oG :Πи!?_p.=!_/oX} nx/mی'>n TBarH&|@0MEdAP ˞4! )F"bR[*ȗ)& R!pQ QdhHNraa^\ªHɟXl4U~w C1.B Ѵ$.La[t3Q*?lUF'!A{Zؽ5 ~Sf'=ю`шGxPc>ͭn[[n-oK;w}o{^2Z 8L ktmWe+k!?*OjHg-k=QZeosw.Rf|ӃΉҞkt6H-+^?ӣuRy˳~uǵ6='av{ba=@Gzwi\^?n x&eo3Ys__=W~NB_:!gOگ,W&/B .A/ ?| ˇ~OW>/_?OO?/?_ooM ;xXx h 8Xxh 8!"X$x*h,- 8x&p9sz &+-`?FGKLPRT؄VUW8[\`bd؅feg8klprt -.pw_:YI#pPwh`؈؈舚(艡ȉhxHxXh؋8XhxʘXpp5臺oD ;\4=Dp p0-8`xhx @XCp騏ȏ(ȎHُ(i9ِyiɐY 9I ` `|htmS:HM`;i `A @(XK M NF JiQWɕ[Uɔab] fecyklmdYnityz|9~)iPNj3VrFkVȃ> z?xBpDy@)HGh蘏ٙ)`9yƙȹɜ IyϙөթGД-٘v7uY2Pp SIPy*Z j jJjz * Z"ڡ&ʡ(Z)#,z*/:2Z8E&.O0)wEfYOAX HDYNAɚՀWzG]S9_[hJjzklni s*mZxzzJ{j|~y *}Zz DP`*ЇNuvg%zZ y pY iP*: jʫ  JƚȺʬ :֚غzݪߊB P0@:EtchZ=hڈj+iSհ𐯯Z+IEE˰k{۱ ˱"$#k%){*.۲!{-pp#{ ixwuy\S쥩.:9<98LJ[ ;HsZkFvGjDlmZ\MV~gr$WN:u'ir嘮CvFm,d+qs-eb h67vUZ&؃Wm p֊]16yGBwK$W[DԂfMU70 `ը}b ?d?gv]ֳ-u!=(ý<Žڪ}wMf }:Ft/}\Mw]%ִzG=P2 xQo;}y =ԟU}W~ ݤ^n] KM T0{ 1`'%2>3.NP0N6z-Qr$Ae};Hw}ۅx{԰vJ^ҫXP~dh]ѡAk׎`ט-jm[}v[(L^-vYqucfyX{~>k>|-^ݲۏ.i}RD*ds^㖞@hmvm=ݐ^GZ׹e^wd>iޑsiuWQ.sPt}|ߣnqmNGϔDr"Md $@^nn=H8.D>S|gwv덧`6unX>jnײ6\5C+ eN֖JKwx&ĝ8sq2HzܐuY>}Ԙ>@/GWMS8~깮sEn_/)>yr˭ztG yZ$ցc|Χ7Ży]߾;I_I>}~':Gڷ 8֎{Ͼ\{q=;*ܐpPEqќ;$@ =|FA$m$e=pP "!2r.˶@q'$ŴG'6RodL ғϹ3 E#TT<QL1CRL,N9kOJ2ST!P `/B[2TUM ,jjt(LwsLf6Wq㠴X`5ygY}v,!KhegQFa(x4E>7礕wAtM5j^)!ࡑ]겏E4PCfd̞ݫվ{_Xpe ?_%-5ߜGu;;U_]e_ҾhĎ@}wم?|Էf >ꭿwvq6IQ/$p姼i" jx?=O9IM^+(ڔt" HaQ*L &?JR1Ii ?tQDKyjF$p"QSR:r<[S~Dubԙ^.iG~>]hH.)i˸T*i~5qmTRVkhFy]"4Yr~%JɪzUF$j&G kL/&:Dլ': tkf7[ZϤ'dE*ZִMSֵnXv8-Oa[bD;ѵ)@:7/vK pBz PH@u^u```@ }c_[5@p Hpӱ!~. auh*PX"wߵ.1 l7VH p|];"AԖ 9$*$r|.;x5^i&47 _hzgU%Jϼm<B:H`fM+ӝGA(VOTӬnBѷfhu]Vvk<і]mk_moZV uވj]o{ iޛݡ|x}m)xp?)^q_9q!I^r)WY619 5s<<5yAυ^tGW҃t?npQzԩ^u2LY0ug*.^viWvg^yw _xW߃;PK  PK,AOEBPS/img/classlevel_gen.gifOGIF87a焄,@ڋ{/ H扎Bʶ Lg ] C д)̦9uYjܮ  uwrTs0apHh8BXsٸd I)8 +6{Q;  CJY֩-=M=B,̺@mPuPm~Nv}Nh)YZr):$\PD?o"+Zc1/2{ -<@m gĈg|2,+Ix(OСD=4ҥL:} 5*R-}Ÿ3Vj=UT-ФQRF5M*xCrp­+w֮~^MQR]7U~;~1ɔI"9s ɚ;{9tZKnj"80> ;2תeܼ 1 >b-JMmoM>τ˛IU;CEڇN-͸7sߙTH`TzpJݣ{PH|=4]w_ZhyH"@ .^'X OUbi(Hi#Ebx'$X uS4qeBbC$f?j &~ hdgfKf4ft)gvigRg7gemn4[#5䄨@ȤWBv)LFҚƓi0 m*kZ&h.kҌ&:1jQ^*YZ*ÌcIuR>!"kL#ZPzbkƫg/v1&eAI&H%Eqs]|py L\Eg,AV0*Wa s2C5;)r% %{-L|вi uWZ+]ru*y}c; &7sGh6lU+рu-.粋c }|wfHga8YgN{Yʗ=+ zJٙy3Na(5eF8gCMnn.82V/]=viwoV/?n׏2{e?0 c@եtq*:Pq% Tr+^ cAR MJ U p¿]a^XB9DwABLJec@#/J 1A11phET1;|"/Nfb \)Жƿ 'oEx:F*[Zf4oMaGV)|GvzFIB]#)Nyaݢ(剆A+Ͳ$ X Pf,3*æ8p #/a_1¤")`"\L:@3r&5{ykšg7 ΥdlK8-w(irpcrOvÝ#&hIy ?1I2u=GЂsK5FT8#J9).IZ"j3\mZR`T(eE:g9[gMwrzԭXĹȒI?"!!%J=jЛv4&ZJlTqj5TJűdfZȍEr][֫E1&-7Su4GBg cl`bpa݌e Hv ?IW}#,- ) vk &gժVpZ|2KU^3f˴9τ34;Az>L0?Zbv4l: :Ѵ(4}%KzҔtR LkzӜ? L;PK1aTOPK,AOEBPS/img/bipub_html.gif]`GIF87a+̼܌|z|DBD$"$TRT$\b:dbd rt*424RD trt RtL,"<| :\$CM4>gP%U/TT]TVXq=%։kJ?V\FUQXy!i ㎆ȣa}~]feD6ܒi^sN\kouow9嗆pAepc:\]@g5vى1~*hpz.՗1J~F*{ʥf馜v駛؎,jꩨꪬj=ꬴ-숫+y+diב%IL9YRq"2FLO&}VTzꂝbV\AW_|]{濎7'l_G,Wlĭ,t ,$lȲC'ɲدFͷ+f< 9&3%jQYV~+5Ty6oA֜s[Bg^1z]zv}w'P.gˈ'8)␟,K8Ws94i?[/F[ٖ[<&TWaMWEa|b.hgȋ3tG7|}7{ӭ7Ǘ.? ?/o?r?9.7Lg4pP2⎥%iSޓ/utFHUK}̵B8`ȋ!#fﰞ.ms˛ބMA~89S9׿*Z?b +~P$9xKzR{!8Qٕ()Cpb#uXbCk.0d'k\Rve3Ynh';StDVD&j1ֺVlk1@Q}*rJ[yU*wdYPMyX9V k~ hZVC xsz ha7Vzl` {J"j<_cG+ ؿ^N;ST,J1kYj0!?6);`0X#6GjY;*Vmggm >v[w!T"C]'x:N V˔xU+la1H3ByͰk[Peo{-!y3}Mh$ZU, h'uiR ,NN"4;RQoӧFMjUzԯNuC} Y\eӴ>29k]sӻa>-l 8ǵ2oژ%):^s/ۙv)0dJtpl9N6 uwBͻ32;E3#N6kuR,% <І+_ m^!7pG=kx|#?S^򖓜,'8@iM8u?(sGOЉoLs8zEu_}\eAӂugCӦv wډwo* ϤH%YJMN/fz ߹wsp]nif|)b5gRw:%/No|ưoq|&]r1_H}>Ѝnt KL's;wzvc=/ؿoע>OrWݷx~)!|7(oB'WGfNzaUz pfpU @Xg77(&<pzz,Hh{G{h{W/x{{˗rW|CrCH||$WsN PKQ(OHNHXxVX^R]_H Mh.ZLOprXsHfdWvvWt5{w֦dI6~bn]rw  Ynzwi'{f7f^sqǃz0xC9X7(D;hL 8Qhx ǘǨȌȌ¨H 0 ܨ Khh䘎(X؍ 0hL 8I8 ~x'xwm!ƑUb u#=q/yaYrB`GfgH^H{XWHu@D ֠ 0SQTi VU"G]WcQi 0 88aRhppɖ݈kɗyI y|هg ~8@~ט6dMOUnMe!yk)%ivSx]uX@xwoEXP769h)dDr#Xu M7DY)D1 IKy)I! fɕɝҠp y虞깞ٞ) YɘfG)nP9v UMiwߵ6 39hu Àe#ĚeNw#H)DvGIhHܳgz69ө8h$jɜ1zq;ڣ>; Y9Fڝ㩍Lڤ9NY@>[UZv$PKmdaI_jF\}W e(4Iy7!j 8>J9 h5q93z֙2ʣ ک>0 @ ZzJI* 0Zz򩍽*Tڥgʥi9&egSg99T iHNyZ'iX6  gdV@ڣY+qՙ 鯒:>  *ʰ ;[K0 ڱ* [Zzv)[ʺj@%W|DIكoUV jBPJ zpKȰе*{c۩k [˰r;r ( z|۷~ 򹱃{0 ˸+kfmB94mbOgQB9!v :ob YyDyQ+nqp j滊Z^p 0D^{붞ʶ:ik n+ ཰;[{K۽ wK;{۸ ˿Ef_zTK3@B@ܹ=m߿- ~̘-`*../4#n<m^}$֌=0L⥽C(ems BNM_mQ>_~^\\./^N>t->h^œz~|!~~舞,q^~阞难>^~~ꪾ>^륞궞뺾Ž^~Ȟʾ.>^~ھ.㾷宷瞷.Nn>^~>No_  >Oo _!# "$&02?4_6:<>B?D_FJLHPR?XZ\^`zd_fTj/Voqsv2^n?}?_~?t@ 0 p_P r?_ϷO}pl?_oʿ?@N P   ?/oon}qJ@ DP)?>QD'QFJQFFD@[f|)S)B:T)NH9\ 4b̓D)ά3H=0dJ?FZUkǫVXe͞5WmݾWڭZŋnyI8cT 40F"tS>^V/|_>kwuۇ]{Ec D;֘BDbsDqͨ`~S5b"W:ݍ}s؍{`?\†7ġ CE!E 2qO|D!pRD Є0Da ]EP+\_x0[smH &Y$v9KHpD3E9u  WC&4}D&5LB BNғd*aJNr)EYPrX* Sl.oKaRe~YEcZQ"K[Ҳd5IiQ:*YƲ%)8֑tgq' E0B{!%Dbrq$5~%# :Ls<-1BWRSh7э~ӤM"TR&B,K_ әԦ*iKuR”7iMcӕuB}Q{DD)GeYtNU&hHqQ\Jժ*9=<+?J\\!D9B^\ޕl`X'Va ֱc"M,f/{JVqW. 4qwyE>r'GyUr/ye>s7yu;?zЅ>t>7zҕt7Gӥ>uWWIԱuw_>vgѾvdW>w]q{wc}|?G| ox7o;!?yW꒷|5c(@ /DzηcC_ $ 7(IKt{ؾh@z7?w$@#( @!x!?? <0& P!}d P=0?@ ;hP@#8> 0hܛ?ӿTAU?>+ @ c>(?0 @0H+?Ȁ h[/8iA{A+ =>;`'< H@Cc8H= ,X0KL18( 8 HD P;`3EpK@=T;B=D2c(=P.LdfM  EZ 1E\?ʰGXʴ伦 = AtIPaD>??Gr@FTÜ<p8LH8=9P5(== A (KGDSL(AzCpMȟǼhȬML՜4BG ǿ'(,*pH2`n SB8NtϼcN0tDӁ64x NL?(gy ^5 %T}}\d,f^Fdk"Y6^vc-gn>?Q]Y$D?@odFťxim@Fwfiofn_M@?Ǯ@5ʼFRESM48ge ƻHe0dfm_ȃeY _JmK`K? <%VO>? >nFnvIZ&f)Hbi_[x$Ea3p @e p pr  p pK2`?p)(3Ao?Xp_.qo?,K  rcY/r#//p00q!'q @m ɀ^Lsȩ>msW?=1:SNp7_^QovIfFwtg T:?O#BD3 UߺTU0ͦH`j,[\Ws{rK?OIxA^tQuWjqTi=AS2śuHsXIL u87?׎M}ƍw?.kzV|Fomq?xxk?o? ߿p<m4Wj%i3Imb ,WcWᮋ{TxEvf{yʫy`3gg~h_ LwwPuiusk pafCc^ܛly:;LhTJbL?q\zNlVNUkp:oz'k7K|i_\tk6?_nv&L|~V/u"g/|/Ggh}t}0xW؟ kt7~';UuQ_w͟~yKen Hv[N]`hjm}}i0 ‚ D F\Hŋ%rcF'Ri$ʔ*WvȲ$BЬi:mعs̚4$-jQ%|\ZsҨDЁBO7I8E*# ^C|˗ I^Ļ=9פ޽E&d` >\w1c%߶ 9d7s< ]f N "JO}OJ;i=u@;vkLr3ȄFkuzKr_-K]eճyc疇 >)VZ'vZj6nFVS^V\DPW,l!n)Z,$_vŕ}uw5#x6xcz藋ɘ_|8"I*~ Si5Ք5!6ڕ EQS AyEZia iDs(؏}~H'4u,9$uX<ڨsKJho@ ky@[ 5NCIk=)l(Є:0Z^=rh؞|٩Rv* {a7)r>pIS3TOO"!Ն^jYe܇d<(iﮉ9Kh.Kga~FLmg&p'yf|:WlSm7*e zeLIkQ j!2,$iDC˫K;\4 _,myΉ]k_'iL vNշkb5M`:˳>Wҽ:0z- ^98SWK1Nlr=^{b0B ~z &:`B묏QѺ ~VVnzﻗ>B_sQX 䗹O`,5CVoF]t7=oNϨdiu:mV7AO5okb6t+o7Z|`cKܯ84=i{Wapp֫;;!蔔i6[`nR/*\nb bH$yQ 6l%NA, KZ [vV^Aj r@u0]lRã'N~),^^ ~Х];4&+3^60e!='WPN1,%!xA͍l(G;^Џ9ɺR?$Z(`\j@+ĖĨ4+3)4MR0Xݼ!VdӃۤ;2k#.f˭P+dE' 4I3p+ VEm:AYs0 IjS} Aέe&+]J zSt 4Luh{(MZydA!59cCC'q xӭr[ ֱrRjMXT''xڈ2Mh2SibW d i7hYXltq,d%iA4mՉ "}B&rμBL5ͫ5GDJNt ),nsV}4Fhl@+[X[eGjikSH=%rO P&.@A dT@z=/z?^&Nן\&PnjL3bjKtJ+(N\H G0l$+a“oy;9IS_@Wr;l~, 1Mڰ bdX ;'#^|m UJ[ZbJ%_ .@^2|B"ç obӤĨ/M\#>>tS.vx5J!y,AД!}a6/w6?o5[ApJ \?ь.]^Ԧ>} tu4&X#Ca)WyL-& aT3ΞcN>@l&-!`6 ꑳg36Nuu{;b?N8Rtyh>`QDp@$f:[4@< \8@"@m `ci @  ^ Q@P`- !Yz4<@ `\` D, ^^ *V8@8<a!A(@T bXV &ZFax!0@N"%bX N &n"'j$V"(" Ҡ()"*"+"",Ƣ,j,֢-"{.)^"/"0/#1c 1&2263&*>4N!#5^#6F5f#7vcWm7889#:#;z:#>? >@;A^cAB:cB.CcC>DbDNEbE^FbFnGbG~HbHINbIJaJK`KLf`LΤM_MޤNn^NO]OP\PQN\QR>[R.SZS>TZTNUYU^VVvefW%zX%%Z Y%[Z%\n[%]\%^z]%_f^%`b`&^"&b&b.&c6c>&dFdN&eVe^&fffn&gbHu&hh&ii&jjifP&lƦl&m֦m&n&&oBe@&pfo'qZXq%r.'1sr>'sFt"'uVgq^'vvngovw&xg`'yyg^z%{g\'||gZ֧}%~X'zV^%T(>.R6%FPN(^Nf$vL~(JcSYiJ=N$g(# &Jah"_cA<$hߏL}<* N=ij$& 8dW.ǝPhFzx){z#o1_)"iЩg#tlafPF̞aj)>Nx .-F i)+*q*.)*)כ*|)*NriQ٪ܪ*6%EĩrcŰ*]ĪVkB&gn3Ɣn&Jlk~.'?+k>֫#<+£+;#9,^).,`*v#Fl6N,"d^{f'v,},ɖɞ,ʦʮ,˶˾,Ƭ,֬,,,-Ѳ .-6>-FN-V^&-n-vv~bm؎ٞmՖ-ڮ-fm۾-۪-- -^-߾m- .Fm..-"Nn6.^nZ.j.-v~.~nޭ.ז&n:-n..n-jAn"  F&FRb/jr>VzJ-ozn .v//گ._.oSS/G4p+Kom po p0^ +m pBD0p / +1 /p pmgWpO/'qb161 G; k1 r {qW q亱1 1q1Jq!/'1װ  C!3$[" 17r;rq%oq(+%o& /)(p"k&2Br,23,q/ۯ-.-.3+op1/0(3;3,2-4s3C3)cs4o"ws53s6o3ڎv.:Oٮs޺³-=m0#32-?s-@o?;-BLmA..4B@9t 35+t{mCGHcmHïٞ4ztIdzG4s;LFOn>1N [ 4O 'k!?QFqQwrR 58?r{2R3sT1Qwu@tP1CU7Q5Z5WK4&sS[uTt]uUu^s45$F5㶭;:bECvNSpJT#'.;vv6dY'vU+6eijEc6Va;mj/6b^l{6kWm+6vtMhmvB35rfvgs3UmVlK`ӭ\#vq3C7nGwsqGyStl/wd7{6"zvwK7=6Jd{7og1IwQm_7D_6lSwsd+uvO1\ouC`4Cuy6[EϷ~8]xWe3Բc;Qw׷pO4mvKrxC7[q"xp{ri7}c+~s8zx'y{6;[rvw7o6c98:+xOu/98y7vwS9ctf_x?3g[yK}/7Y5tugxrG4`1'Zx 3t{vZO+RzYy: [w+o829Hg::Cz%'s.sJ7[r7{z7/C#ϲ뵚3-Gt.m;׻;绾;-链z~-PgԩJWgV{>CjLN2wDi>jDC~ ߛ~ٟ?\l?lԾ?k?@@T8Pa t(D)NpaGA cABܸG)U(3"͔7*$YM> pόBq5gәwY̕IȢ 2}JU&ϭeFmȫwv=!WgZe2Ұm۩~-K0a:}d kX߼Beb0\#浞"+Qvbų֭tk]O,"{Y3.^j9$<ψC~ {cͰY;vvM_ܷ۩ݚskN@zs(;l?ͼ0A@ ?&¯?D `3=͒ BN 78NԈGF,*.nEPr0:ѻ*2CT{P$ r< 4ME70wM&K@b\ R]OhP,SB6tk9Jk;1TE R˶Խ+˽6Cƶ04>Y볶;*C2_ ` WCVmf Ph#bU'lV4omnXNtw]ٽ,Cun{4_p}K[&_`+lj-^8MIAYI.QNYYnaYiqYy矁>c{7.w;:W3fb%FcE}iGaߡ5k]emR;[{`Xa<@rbÓ5 zq,Vmmp'xbFO M4(+|s|%Any(j@&z$mC+ԗ'7/xI1T_x'Q0VTε!4Yz/UEg:sH$! DX-u 4`Ą$(JT4 +SȦhhNP e%8vFqo'be$=\$G3e+ϑàABX$-׉ F9E %ktC,*TG։栄"񱍂ce G e"w^ɬZ7IVrY&h6")ZI`M('ֺoH`;i+phEb## \33E(E1'G3*9J>nуd)GB2.L[0Ȩ~*c %FV ϔ)U4UU)B>QhM;Otf]ՒV֤1ql^#ٕ+.f15_ ـu, IVy[֚YוNt%\PZծuka[Ζg56[ q%o9sNpe^KèanԚݷy[咗ueЛ^wݭ{R7r=`kp%/ݯ|f%󙿻eu*&4{F[:@zPV[bGRau[{A#.+V4ѝ ćbT@1:I2]* je _UTWH( CBO a=y 5VSQ24\QY'BM3a">}Yi2 У}dw@*y}J8Vntw WZF_5M%ᩔ&0>ëQ1d%wHP5K=Pr>|7M1v&k̡ ˔Y-ՃRlv{AMh:l!svsnjCyfQȖ)U'i3wЁ,e-,2E{ҵpVCs7cL27=ƴ*|NӝrrE9N]qrvYfwCg˛Gu̢ )Czv-}V/q(\=T~%{xO@4ggYSմR[Us9Ц^ N?Tza}R#>5s^tcir 6nK{s]]2=y :#{}k4\5Kז7|/Zulī}ޠ{ֿ>p?3no`_'{ʕj oM eξoop8k*  0FP]GY)TƏR}Jֺ)LTkŞ%'.€į> Znh`. m I׬n䆌fvMjH 3(*b" U^0PHlVnDzΦކNR$ {"dlEo ?M('T;qQ.w.B@ qcD^n$p^ ײ  -J/4ꬊvT rjD9j+&ʝ)Z1C)q YeYqM"r))n; R qtn%.q&x~n䁘Mqe0J#I4)V4~%# ah:0ꍦM0@0Т?rǭR9n.-j{.dk;/ @/!pnX9.1m1]O+k\0K"S2f8p/1 V2ñP\05Aqbspts7y7}738/NSTsY9]3+/86/8O:IG~+s,963qo&sp66ï3=39۳;A:s?:>0C@ @?F@vc (,q.̀$, 2/cSЧ2&D>%F&OF+ ͓\MCgᰂ k, Cmr^bЎ #>|)Z/Ȑ12V {Pb.t릲I˔ML&+ "hw=٤.CGR4(kTZ%q&XqI8$oN=-&O!ONt3'k" 3_LG 5DF35٬2 '/)M֦1tY)D.ATǮ*uQQUK'둌RJU iD +ۊtZOqTjuKu%}:JL2yeRIPNI3?P6-b65"&5ϨRN<2uT 5<6PW6lNec V[2T%u/wRd8tl (f{pFYLE[J^5-rj1l046*l9uOa4?[*Ob2'T4GSnAaSmuuFe3A 4/>s>j=m8co<wqi4?O8-r17s5ws9qּ4r#r 9 7GE=I6t/3u?Ywp:3uC7j2o7@?v wA{^qvu'q@y%ywawo@SmiUwvxsYg??tX$i}`Q0I1W7 sn|)j+zoSV6Oq(\-e34(Vnez焔@r^b2< EqY_V|,M4',t tViRd?Uq[d7FT~8NAxbq2Y/ATPIT1^Xlr5I߶[]QURkh?h0%`UM7f]GVMxTg 'q(55dUMLc#9[fUQDmWw*g/2LeաzYIU+j֖Os:/7z]8qt{ڬ8|}w|Zg˧uSxoWus7;{w)[ױmZ]ёx_w9;5v@Yf tOy$15DZȹ*D {C[\[GxA:3ǺXFT]UrR,J+!gԓ̴ zj&94pasVSYؤ^X /zJ3U_TSnY>|Z]\ƴ.FFE&cەT\sE)]ܔX *kIG#W<<\[kxZc+X\[|ȉ)O7]u[?#]x̡92`>_[MIU~gK{E^)3[y;!}y~{=3GnKӥ w[襦q1^MWEc~9z{GsZǞt1>g1EL-wfm-zĞk<^ݒ7)G-Lfq3RHq,8}I_U4`h{ Wx/Z-K\ 6L[ S9_')3SuyH`|.\3ӹ8ұ;ox[($vk-zɸӊ[ܖ+É  `B 2DA>1ƍ3 0$F'J$ieE;#ʅ,Gye̗mY@5O<Ѡ%IdgJKQe˞:zԠիdĺı@z4\OOzj6Fm};B*rջϻjdLZKX0WY-frS/rJЮE;E8°{<{qirkR-;mset_a*{he_M7}w@_^gpaɻ].{᧭S]~\jd6Rʹt fǔyEႼ7EwmXZ퇢j$RPDTERq #Ma>_a4`M^T&&y]66eTMv%eAJ.4&QyLIgigzdx^ԡ((^g9h9i)"hy靖b**iZ֬^e.zk uKZ~ȺZLKm^mnm~ nKn枋nn oKﶏ*lb골ۜ L,F{"2,Jkßk\)ŗr'Ȏ,,qhr)kǴ2 9|=oAY3?w|4}pґ9E L7|5U㻵[gQH`{]ۼvy}(\PgehD~ lG}i#^58jf܌u! tiX`hk RUMʺ[dM:Ba?DrJ^j%$yzvazzj얭Ct?=eWޞ/iK e屮!@ rvraF8Yd7|3V$(FP QHEJelT&$ǠX5DVxt~b(ј>,v/HԏlKfɮٙDE!Qcu\Qt,+ϫ d޾=oǛ EC'4r2,\1uE8usN!xD{Uy.4P)=gͲɃf'6ᩳTkJ?Cр-k Eh>P3K]G6~ciJ7j42^nӜt̤LTF5p0u*bR(q\W ְud-Yϊִulm[ ׸ut]:;PKZ3]]PK,AOEBPS/img/logicalm.gif5GIF89aD;3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,D;@H*\ȰÇ#JHŋ3jȱǏ C\ɓ(S\ɲ˗0cʜISe8sϟ@ JѣH*]4͝P,YիXjTׯ{6Kٳh[TʝK˶o56߿tq*^̸&Ð6LEGLҲu5sm11Өc&*Ss2@b&mS՝l-[ΐ6 Usȣ#@3uk8w+_ugl1M$wߎ8bD^{z ΅`-ZX^fr&!`v("]~b^bx'&0db3҈ލ<ƧD%@GVLC*9ґI DR8iq)p`i&Iek&IoP(HWމsVe{Ʃgu zXvh1Zong饘f馜v駠jꩥꪬz*묔%حZ֨=GRkh&+Xa[lg>ђ(ѱf-Y̖Vw~+۰kTB;XJXqӡ 5GcNOo]Tf0o\6 [W{ mޭQޝJ-7xUt7>) ˩W~Ww" zVIZꬷ.n^$@$X`.dC%NXEG!E$YdTdK1eΤYM-7O 3%ZQveSSZUYF5ФaŎ%+qWiՂ[qsuyv]oFyaĉ}ɘe`‘V\2RȒ5|狎u̼ٴΠ`:uC֪>]kٹU~L/dž-b{ 6p@7ϣo8ڹl#G|aٯn_5^WP14D;@0+,lB b@ 0C5pC4q ICPXlEkoqG8,0GR!4- =J#֎tI%%Q) K-<K223t7㔪MTSN<;t=3+ %FD .!RIRLRN=P35TSUuUV[uUXcuXgڴT>ŵ:]w-G3vLSDzEQ.RՍ?c{Vڢvf ZoOzk'z&I55iv"Vnm{,looܛoppNq#|r+r3|s;/,h` 2l!Ĉ'Rh"Fr#Ȑ"G,id*Wl%̘2gҬi&ΖO'τ-j(R;2m)T)sRj*֬KrUhҰbǒ+ڴjN-ܸ6Ϯk زzH.l.ln[3/Ȓ7lcÚ7sVA%.Ԃ3wnZ.땨U4~k7‡/n8ʗ3o~|fl{Sp[7WDSu8CRVF"C)>ƈUb$FUL-q&0kta-R%ҧ#<#/;6'D1!G| IIER$,GL^Rd`'gSRl)Or|e)IM V-%DYr, /7 QUCgR1Oey%T8@W z&xMaDH|')P*ԡF=*Rԥ2N}jw@@  PB >QD-^|xPF=~RH#1DRJ KS&lęSN=}TP:DTRUTU^ŚUV]N=Tر5EVZ’Wҧ_śW޷sh`… Xbu>Y2Č-|XfE+_ZɥMYꘙ;[5kڵ F[m:p}GNr͝_zvE_Wػ]]wj>>dL?,@@ 4d0'1 ; C Oy O{n£Z9xu##GkOG=-3Tdgzcv܁bˈxWxxGyި襷3{쬷{ޞ{ѿGg[O~W|)Ÿvo+uko`.ت m > p$,!IBp%) e8C: $D? o'B!;#Qmr-D֌&RȢ{eC.&*b,$rqk$)7qfjW7QYxXH 2!CR_J#U#:RY¨HfR%sNqS$)JT^tO) Vҏc(my]^a&(.YeBy&B)iЄd3 h]30uR&7(E"Q$gi'Uy[?~=G<~;@mPɓYC{q5D2Gg>%PKOrtibR.5t*R8OOhԨ1P %ԡqCU:ջ$LS}ZTv52VV&ʫgKOGղtAk\ud{πyuJS׵Vh a;Y@Ucu`zAIgubX͊5&ljcY  cMφvz=Oi_з]!XAӱ`eVťqMA:vec];]fѵ䄛]bnuwc51O?2 r=py`uÛwPR.w8W6E {F`K \苲 z*aU܄ |%skE8sq.l_r/o&`ݸ-~8Lmp,ؚM_W|eXmf5nm2|6I±zCa;Vرyzv6lOֻw}mbo;F;nآx%/nqk:%7b2y+5h7X <0… :|1ĉ 1Ō 2ȑ R<2ʕI\ 3̙-]3Ί#M 4č/-ѦҐ>:}ڰ˦PZ-($ի\f5XG;54ֱlU~ܓoνK'޽WjDnڗ| G]װb&^*W V:9`EC&ڴX;+c6:jvNylèw+;^_5&7o99Vө 6i.44~A՟oU};cǝ{G[rӵ[{ "B>}Xa~b"Hb$6Q.z z.cNU:c>dBId(b ETYw}9eZne^~9}`fjfb靕fIgvމgp ^mgJh雟Hjh> o":Fin:䤔 h颜Jjrl詮 ૝֪hŊk9+KjU.lD,T:Kmւm7ym~kM n6@{n⚮qn:۽ipg*1zp,=LqżJoe0"-&r*r.22Ls6ߌs:s> tBMtFtJ/tN? uROMuV_uZou^S3;PKPK,AOEBPS/img/appexp_xtab.gifGIF87a`촶$#$|~|ɠ㌎퓐ՔĘĞތѨ߃~݄}}|rї>D.$,# ,6$47- <).$4%,$,# ox<: %6 #+7$ + ,,.,, +"57,74<:      zy  s5Ey'!`lpoiİhh{j 38zhֻ#~pT-G,#˳ Ԯ滮 4)$ $5&Dpx-,*F,"DPO6D+y57,7O3)EBd6,.;6xt*Gy# ,!2hw+cWYbR#,传ܺ<BD56.7;$t*<5)ب;GFQ$4<|7(DBb\3CD,`H*\ȰÇ#JHŋ3jȱǏ Ctɓ(S\ɲ˗0cʜI͛8sɳϟ@ JKF*]ʴӧPJJ*OVjʵׯ`Ê= lA@nK5ZqO˷߿Au6ڽk/tA8ua߮YLȉD'CI|C wlI ߅9#fEo~ ZagXn1@Kf5\܅f?auuaE@,J*_@&bRvLbEpPaƛ\lJ%a"\f]0h& p)""b!' Zg, ? p #^| -!b ,U)+x1 ^0O n08z B F\!RB( A ACh R[4D́BRbB!fl 8,'d%kQDX +;Й$i}p!E p(-pt౴c=_#"ĥ 6]3C)Đ`*AE Xp:8BҰ ҈fp:HSwx"6$Th GPN9`]yI"Ng ,hiHܒaB@B,N/̂}@5ȂP6X + PHA A@GH tHC) #A)I~NHBr0ey&C6U'>3{! 0AGC*b| 1[8haŢ{3 Y#3#  8c7iܲ dHE3.sDFPLbCr E ;OBQ8b["(XA’ _ЃBVqz|%1a 8  Ϛ骎j|6^}wwk}| &܋ʋ x< |Qw~u^R<-+| q%ŗ//PFxOȄ@X^؅`ȅ5[B3P6_(iaȆj(4dH[FHe(@xxxzȄyȇ{r 6 Vxx1q0ч8TdhuQ]mjqU$L8_8Hba*eHNd]ƈqV^p #,(0$@%0$-@-ۨ88 #@' $ -(xh#%`$ ,0v@4( ِY-H9ّ Iɏ"/ H .޸h9x #p)0("4P5@(0$20#P'PX5PHhXp 8 1D)4 4MI,R0"`2%Ԩ""pG29h ',@I(kIDYu #pY0Ў% 001&`90%aI''@'` &((P":9#p %EOH Feٝ= ) ޹ٞ@J0K)CPʞy@Q Yڠj>  K>ĀO G tMOpA ]OXO HB @@ADb XbEJ ??AN ?8EA a ,: ESG]p]T BP$]@/>@ 0=PN@ PY<<A=B*> X DZp꩷(-J6uliMm kګJEB@jusipڬ Jb >r k0pP7pkB0qj劫j~BkҺj i`*ppyDo_ + +Zb0i 3 {0n 5K{ tp)Jn;[iB`v1+;;RT .j R Kq;*۫Rg@`%n{0[{r@븉;[  ۹Kj. {2Sjpyk;r3 nyP.K;++{ pF[˼ T[˲?03a*̋ ;ϋp +K,<\o .@< L %"$,¿[ڽ/10 @ÆK <7˼|P? p@Ě˿M̻{a;;l0q <L,X|7q0yLLk8 ԫAPnF4MlȰKi P \ē캚r Dp>[+~@؋ _ʔ> ʙ-ۿ< kpp͐\% tҫ o 28Ӈk րPp6E3p`~ * LM @ 0 H-Ձc]P A0sQsJPU4  Kd].i`e PE ~06 A0 5R0ݿrιi`HKѶmn` C@ x B& t%{᜜pdTU0p >o@cW Is@ 8p_`@TN1 2 s`t U H"R&@@.@ HPٰR`):jp@ t`>@Dh0 qp,l -0X#l PʄI`Fi|^knmu3?k/<vG,l0n.?  -i  ;7ݣꯎi@ *2IFGEp[ S N 1P:>`@ nBP7K) @ ,x[^+R` 8 ;WPb 0ۅO 0 pK@@ `;׊_{B H׈&im5H V_N_>,Ȇ[9΂=  BHDA"CE\ԃ|ӣ"-r,UH:>I=raG'Ȃ xk\@ B$nZ$$ 7i<-Z$&WAROtG+7u $$s8\™0M2PI[q<FNЦ>іR] .6n#<o'8)r<#O##C n ! B7 5`d<`=ސcJC")x6p bMEC~0bPn1"Oj`Y < ( Ca!9` @R(RQH_BQ H>:8l5v @Pn#6Љ#J 9#_#j^ "4ȍ5ldFg#?o 4TdS 6n?8j@b\ ps?zw*Í]փ2`dDEȑ ,Q6࢖ChB6`m "a\A* Z$ .9(@pC1-`X?.1^Bm8( S%)b4EO:Z AQ J=XMTMUp `$4TF8PQxe}ق9zDNNd#7(qw#U:Bڋ~X[)(E֭R/a 2?9 iPI.a 2> &dHE!>\@IP(Dteg|@ Wq^ l-" +H1kA <`L8" "bX"K" QQt#{"BRB XAَx"9 ypz JL"E$X, Ո+IP&a>O @|0YzU:8u#WoXg!4A4a ; D$;B4Q,KSbcv8QKE>4t>H>P C M8Mlb CCKM|@MBD$8I_(B) wx!0? ̸ @QCOA GRCa sCr#8HȆ2fp+G¢I)l0|ڤiuE e؝"Pg;Vm @q5ddj8`[!^D'[W+=$+J8@ 9bcx؀BfB8PAZʌЙJP"Օ+!<$&Qhp) F+;pYq@{x܄'A @ mp#OH'|+:@0A ;;|0B!xp1As?$|9d9 4H ;sjlD'h0 :!{ULH0N9 W&@\ kg?O\OA;sp,R1cW5zf' AtP7pdA GЄП F g0o"aV X A V | kRxB/X(Wy]+:hb:?"Ty@2s+\17X"llp6&[;MWsuˏu%D 6 Uo+o50F!l@Wqs8ܘ"jA6C>۫E+pE "M`@VY#X+YVD#Bm" A Y  ϥ~E&!&NX q!jd#\D )R.@g@@8UVĢ[jQ P([]A2V!|-&TсN" R::%C9Q4E h'yqٸh>㘏3x5P:F8ayy9fz !YX!uiA:ءR12C0Y؄NX:4;VXEО F(->@@8a P/PX ܄'РR`C8?9&N18B@M(ePgY57)p96C)E<-*  '؄ HDh`dP x#oî/PC!(E9UXYD F{:!3؄@? y @0@ˢ (C'hO<8hُx9y0 'R/( 쀞H@BY Ʌ5TklI6?@h (C@G.(遤+0 O*C +\9D;:&`Y4M38RY[!"8* n`,3Xk`;#Rp6'n!@`[/E x;-!@0:&E GC@`.z)x~eYbL8"(pGg<.` `.ϛEWڎ9t@c5v@fMQӜ(d$wIYA9d4HA0 3LCSQy8E4 ' 9\9 }Y, *D$3?6M!C"hA{Z>h'y)"_(50O ωp, @p+W;PyXRpM% YMѺq.)@ OGs"ЋT!J%;]</遰93"0$H5,h6`7H @8d8<#ʐ.̐P&1ʂ 'pZa TRJG@!; ͖Z( +Lhx/ EH%.Z:H>2B+3XȎ؃$VwV3E!Clxl& "؁,'&ɐ# 5īU݄1".2Xe ,X;h?8Z`3<UP[97R΋? ; lȆEE {*d8^1.XՂ+ YC.ג487dC>p50Ж#$KKآ : o0^)!'kUtadj4R(e>Г.C˱sXTKR6h$Ab@pB+ׂLF@0aZFh0kбbɐ0; eM(< m`8d5'hCepBy σ,4 C`젪BB?A=0R@PfHVXR A 1cpW9Ex&.M$p;F)@0M4p:1iX%Cx>pRc40'tBCi5QEJ&jI Ip?܏4d/9@ ÖFNUO"6^9X7HNh.x:H sI))V(Đ4h5JӫV؄S:h8h5/ґ<~䘁Ed%A .S67q<+_I:E Xñ& '%ܥ h\!Љ]^Ċ,5piꡧ䠧]#_ tpp 2 y} Mh5ܥn#p!K΋#x删'H=$haP\+LPk:)'7Ʌ/V=مZ=p) In5 !h4  D3J:Xa$8$Izn0߉7e._('EHa,JН:'pU{I!Js^vފ;轂 H }]uWX+7o'۶:ɨefwvgmBj >m <q+؄P0 JM.RfA&Q(Bw)Mon)8v?#NRY0UcED?}Gp\PEq:hdvp8 vPFC88H~7$@R8Vu@&3tndG2EwgxR'Rc Ӱo:*EA93سw{z>Rsh-:y8SLXPA1dwůzWƇǗIc7F|ko'CVNQZxkѓ2Ab`DAР 8,_Oi&`5<4%0/I9p@P(XƁ)D؅S'@NHۃ;^P"ջ./VF „ bCDpGpIs!AF,i #GL׬ "CB~0'Р&A bje%%l RJ K؂xMa.K|Ђ l"luH"Ѻz]D׸Ёl:}yC!&NHWeI@"Pc1kz-`9ty$(;tDHmج)dS A , J5tUh˖e)HE=t  ?6:hI*@oA n6]҄*5I7s~fF1AzE,sm$02kJngv{)25f;A徙=!>C8otyRo03@mPtF"?> X0"ܠpFr$'l;Г ~$~'ړx!(CXBzPg;#0 ./ %#(=Gx47H$ !Fa (!@ @  ^aaN@  a ""&". ."&f&j" 8! n)b&Raaa@$@ @ "".a- @ @ @ -Na!^V . X@5#$:a !0 a/a @$a#0,6-  @bc.d-.!4ހ' b H#?>'Ra@a:a-@h<\D<؋d$OdNnMP @\RnM NSFeOJ%TU:e0=%MdS^%X PvQU%UT%ZL^utMX֥]%^P%Mr$@p%L%aaYn\r%YP.$%Y$W$dfe`$]"eed8^%W&p%fe"%XBhN%PfM2&NR\%gdDL> %WR68LNfV6gPjʦM&R&̤M^@Dnv>PvxfEJj{{'|goFg{ڋ|~{`((@}(&6BhVjȅ"J'Tj[{g~hvh~$聲腞h猲'$d6))&i.)樓>hKF2h(({6h|hnji)ZN)&)V靪i{6VTf)R(MvgN(F*B*6^*f>蚶$>*D)EҤ*j* iv檮~*§k~*rZ("9z{vЪ]DD⪱*{+k+|RiRv뙖*M*Lnj)gjh«Dh^lDFfhzNll,jln@zȆ2*f,Rlllκ(z+K*B+ъi~l"mVj,,,Zj-"Ďm(*.-{h6,ԎN&-&-flk6JҬzh~rmR-g޺iAN@-g˦-Kkmn ض縒mf~ hׁV+ֺ'+6{2⫋6lrΩlVQokzj'*>oZoʪ{jƪ-}moD$ʭ+op"mD*:]fn-ʊ{Zjjoܶd")hr0JD-^n̪m0ƭz* ^nn.V*p#q*|zm'EZ*Bg+k~^(]0@E@o̪11@ֱi ,߆i0/21"*{2z+-1p|׭ni쮱َ p12ڪRk-v0( p-O.r#3r+r>r,N+qKb25/*6ksgX63Bޭ~n.>%q붖¶.+qGs33r/22/1_0+ޱD2>.vrj(;lR0,Ot,KWGC~*ڰgȪBOE׮1'3:7t"'.Sn?JpBJ(pC{sKgggurO-m2i0?5Jqݶ'NZRc4#uu:rQ{枵`O.n*Lrt§ji(W2jJLQ2ܖ٪ ﴎjM 4 /rܖfBo2Pk2Z(15kL|fs@$ocS. nrnju4omsï~kfp1+sr{vA7pCn"rF"gt?unN.|638Ҳ޲j'7pT)'[8dX6w:*?unSndkC7tok$첷ؾ8SC5/Ӧ7Kk/guÂ2Jks7qn^65yy~/6J˫Z1Oߋc'Y?vOpw&d뉢1)e*[xnft)'nיִ uovew9&9qN>?-R9>wg tu:?.siVh7W߸~n;FUqe(jg+]zJ.80%Y3w/{4ZSV;k^ThWκWvs3_Vz )ץZkLT*Y \}{UP/֯}|@ۨ'[lᵊ!G6aAS%gޛձfϊP ͜Hc_#\` ]Ӗ]ꈴuߦZxqč'( r T|t 0M%|oH"1 YB>S.cIZ:"[>K".r@Tzwbٍdot,W 8nZ@4VcIM7`$0!LOb%^X~)tXuM59代qUq ]HA}e5r =m7|b鋂Wߠ~>^֣_:r! qƓb71կ}Md&JP]ӱ@ޅ90sػWL2TpmCKp tgNdckŔDomJcKگ}`m@E?&sږ+y! '^FAfBVD/ڌul5) Y82 E $jBv̓$%[F=uAs:J(WtW('y:-~%1NrA=%;S2#DȺhgZ% SuE6eEAɸV΍"mghxt ++֧f65*E'S^uLugV;t&)*3jfK*}q%N+'ƻ'cl+=4fcOYڝ"]=C(@լ~+3w!nelM[Kyga N2te^O$3CIS8@ՉXZ/SM3YCôwhj1Mk[&^WB9ijꔱˠI|[y[2+m^ Bj ;AѬpJYW[0Ԗ #DŽiքkY<ڦYHT05njHl?r+&qr7;*ORiӠ2"an0/$0}eRD 3EjʂԵd;-,EzGͬD'EO&}Ufx<xYOx~bLǹrvIA?kbWQE)ɖyc5B<'q3(=WvHUIayd=h%9\[: iSB?AZ\-e!YbuȄxMvbsdQ신N`2i {k`:]`>ꋕ=9*^KP~P5kt#>Zz>LYo2wwk!(Vs[<A1[3n +wOl*7cu?ΫRN˟Fre˺S%E׎]QZj׮wGOOa>ex62c}kе\#ELpE7I-.D|9=֦YLv pnɶvv uO>o[M,ތ[GY gI3is5Y1  4', S2[37us7" .Ȃ6ys81 @40s9Sx)Ȃ93E#s63;sS8DV/hJ`hNS6 S%>f@ -]%5@p& YG*Z$Tsޱ CaP,O=REFFeDGqW%04ӦO|p6$t:~4J:reɬn&0&z*S@*6"K8BqͶ̈́Ce~KtMMU&BF)iolŤ6 XOP_SUI?=lAUd a&ZSIFS M7&JOʌf.U&oCN#W HeSkTU"?jI6 z ZcSYQ5fp-OLk uEWuJUd֑vU,iC|\ ^Ig@^d]$('`LB)Ic奓{2,i- vXU1t0 wTIT.žnnu_tL#rjC k:[%SL֩ltNLoKbBJ@.\Jrf\6خuZmy({K.KԈo$7khqH[Ľf,s]dsyK0n1¦{huu(9$C'Wq9]t]K8Fq Y_%s*IcM*$Vωtrpl'}6mzO=q1Ďey",*ZHc d6cO vJ;.6jʧZs _X6h'fN]l5emI̅Z9"ٜc{KhyfQ94yEZtn$Ɖ5!8ʡtG-P8jW !_+$Y,{!W1cy(б9WƄ/67mC7:;V;z ծ2+'V{P.g[+{\Hq`݈ȸ:aNHz͐BdaZXx*if #BjEj|{rQOxY&]8K*HOIXF-w/w:'ER8,aGiE2򀄺?aL@D\û&c g;B ˉvHDx*@yE0+{1Ɨv$%Y|6مJALtW˾L6p*`?B1v,&iȜ@b~emwCsG{9hE~JsQsC=> ':t*&Hx{AP.P`BrJ)C/hA3_)32E"2)̢9S*"2@("3.4 )?S2(_NS0*7 P@APx@A8p/^V6d#;9́s :bơKK~zpΆـƄq#[3 nN:k}ݮv60N=sG[^eo5n wZX]֛z w|r ט_w`f~ʉhZ$~wfxIͧnxcz_8bg≇(dfD)YHj)Mp]@IaesY2h%yPdvIf^mƉ ZwPu&v\0kvdH%xN6'|N"zUo"^\*x%qp`afjemVBq楓$Bjr{t!gP,m~,ץjz)wnXeWX\6zz͊j]|ֺd"gY9f-`asۣ먞&',i[pŀ3h܃+^g6j@ ~X9m)i!,[V(b|a`Ib2w4:6Fnr cny*BS]^.9[^k o-m_u`\y+c}aqL#[{9qj5q,(Þ]Kk+dIٕ gjw.qwr WϷMz*f^| 6swlY_/~~o .?JV.4 ߙ@ygr#$Umy@h1xt+3YUo~KvؗBQ6 ̶7j [iJ^aJƬ",EOE-D̪ `-K{IcP* |W ]Q$)MJT2py TԽӼn:eq3O\W8=kD[I2ZR>N^:4mZ̋8$ʑYbu(뱱4]xG p֫VʆꥩP/ Td#)/[| > Oy QJخX(KB$823| /!xT[03%Rgg$ܠ,aEXYSdA s;op)fݏ<) > f:K`p&ǎc# IDqqA& f|`dzn(&h^EefdV@Bo%˺+J"Y zE nԘj;mC\4ZQiUuSA*􏺜,#A+"g5UvtJ~ZRߊZKD4)!hKp0$PΙ{"Җ5u0ZcF8eu i2(ySUVI<];*wd ώkB ((_QiPZ˵A"Ǖg]6A0kUO/[zoTݓNy$"4A.j鉤YCP:.+F('oZ,jx>paoV/"K3^%Qc |vmP1\M7@8/18鋋JOxb<-[6L Wo5AFVW1θ(>jz$Edc}[d տQw{4UwOя["H< DᎻ,S =tH!k tEUmvr^^JkZaNvqѴoqDj e_JlJETݩ.+{{4&}UR+-]hJ[5#dwg*/)SX*4-Ӟ;/l'1 J.WмgE*ɕ1^~aj>)MPdڭ?N _Z(zkCR q^*L/z8oI4i.yI'yuYްﺌjCpȞoZ*hP\U 1z9]*q|yrL?G1p~%0_G7Xޤ?/ʲ箷=nÔ65FG8 G~q`6͊^ZYyDiG93I}SG'[*xpx{5GRx1N$r$V$1BDWhnކtGvDWpGzt$vHxU/u8#!s(7duqwX$6\QXhfbS<5Uv45{ȋ˜?#g~芿B78b4ypxX]"xߨH An 7tᇉ5`Gю1( H2X$t!2!Wdq7$Q L&a GQAQ5 ' !iI#A2EFI#G@,6 Oe UWVi_)7@P|Ꭺ!XcVsoq~wIx1*o]T#HQɘ5"p"B1 8&@יtT(K#_ɌI s!ҒVtQxsB# I"ˉ!K8CqcbJ9I1mh1TY Jl (VݖB e3`(ڔ鞔(x ɀ:&|FWNh 24DٹFf%:؍(buu ]XaG/'̇_lSdp(\r#gqm!%0kH?dʚ.":YT}$N硕|uqB sEXa91hq夥fu9!0/:w(xdK7ʃ=U#:W]{%gZNg_us|zzx1&w0+&vѪf c02zboyx9B7LzoBvI{|&!C7vUs5ӡiQŨш!^:'SoSᄘ$6aGW8s'1X5l] ry)֖'EYWzCAtT+\HY7Hfi TNcp#p=*c04FU+}45,}Zӯb'o(ѯ` إv_`==UK&gdֺY ))N^I=XwJ,aƚ~no*X#xM%?r<Ĉk5a&L*jH{w A2hxjGd/&kfC qF>o9vnziC&v ɅjƦ vuT(v9RS4jAGvl x[zV *1r>$9rXQFƋ+SqK%r3i{#D'cTGZHyVVzd&koD=dɵ/z&O;JX[Kd<, mⵤkWX=$EȖ_GQH`2JEj(̋YKd==kz Vy?z%⬴Q~Q6mz< ~HWg`BjC܅Y_SEY]kB5=h<~-K@%a{ŅD׃e {vFp(2p^4ºVjdU&RY2alFlVgb'5۷ tӺI^q&H@L-0`*ڡu{ lc<߻?WPG^Z\/7J`Gx4#/[mI8Y6| }23&dz2VlwPm>jahAvKz%TP־F(tCsCBzc漾ji Q3MG籠LcƟb<)vqI܊8'otJX(:Q)$WvOr[RW^Ȍ/C*Pxu=r@ze˜Be͞-%gL+k/gx%'M%uFj #IN}"FUtdKvɌHT]P]Ďf>"ȸg2`7iZSΧjm( ڳRS=o|r)VDBrA(5JoD\ڴcgJ綗;o ѺߏΞXtg3 n)(iVA+ml#Rw2ʮ{*ClGkj ,sesD%Rs7 4@k>gYȐ|SLX+gB3svMt3d+ָ=JVB37΍XRxrq7:{ zT0šv4ga#`.9̃g`^Eh 1\g E {K;ۃH6bJ}|DiLl¬K6-3ǭ6,}I̞'l-1푫҇)ͬLV{{_7|5ZYrf Z咴̡vyW٧WR{52nV6PJJP~ۤs-`'iRG7I.p(~n5:;*bհ%+C=s͆\>Y~w(0m04O>S'3fRvV+ ^ʜ򦞝X"+u YA֚D6/1n(uov.~>Iw?P b^Ko(h~,~ j$_Ak$x2{Ői*/O"IZy/XQ /0 $HP .dC ,P 5nLH@ 7$YI)Uh*eΤY ! \4`O$PTx'PH;z y4S>[g֦fN߼a[?#@,0AkH8p&p+;PQlC:ű^1To;k+D\A;G$1+qFXҭ)*+Rl5[+=8DDSCp άDLƼ/S.=[ 0SJJ+uGS2 !19\?:4TH-kPQAG-G 3j* %s(mRDMر\ UUFCףB^ĕk$kX|H mY%Y0Պ ]Wڲdŕy7e+lMT,s,KvKXP:4.-]m^[yC4%y7[rȱ&|+3~|O,B-=X>}>V>Lw֑+9h5s}׻ Nwtxڮ6Ӌmс5WVv߲_uv43Z1:}[߸ѸFO;`N2Y1[kMd`/MKΫ}5 RK[Br%/JSE^|:ё{o9n^D^5|k[$nTT9[?^^[yY1\ZkZ9qu6[)?Vk2&'ZYiOY6cn|+ۭf9=Nf㋥`~@r͛wj/qy@zڋk" 4;\-K lTx|y KTGl"5)P :H\ C{iu W~%: G3$IllŞTke,g#aB\,i9 xɯ0B:8ĭik_Z'EfZsG/PzF(p-r$\PC $r^V~WuFlfYXm&3M[ncg1{4ENXqrH4V^ 1|ҠcY^vNp-5J]retg55RQǰ<ʊ6$Qc'ه;>o]͡^ڸRmYE@+VA 2@hEKDbaD[tFȐvr9zŠY'4sTtԛG`DtGdFpDEW Dh 3iLS<'kt?l+/}||Gˈ| &_  ϓs$C簀:=LDBϘ;2 ɊIWHIw ʼn |ʆ8((艌X ʦp 88 ˞P\h ʋPKT4˂8Pː0˦˶$ˋx˩ L 깙UDB_`, +4Q4i}V]*T۳T3]d "H wtCH|TKR2Kk<-c-E@D ͡a AdCqYmb"!oY4I/%$yB -Z aq22u%@;Ι'C/2~ib49>MwDZ 43ř:Ȋ4*4;\3)?Re+O`(_~{^˶q2)3zAƽ׬Z䍱(/=9xZ+hV&3]049A|$/٧R<yp;Sm"+ YR[&I II"9J\$4 ѷ .Ui&"`][$dX)orzZm5kihC2$M5ۋTlW ~le ,"K:iб2s]SWsz9gZQ]0 8ˮO2.TI21 jMvѣM7ҽ2b-]uT9-c'6+厳Dse.e&G+?J2mξ'HU\*&G %z c"+dŚ< ji߽G5:jxV5xЫQA5qJAc?-g \|zYd.87Qj%ʰkPSϗy$Q3QE>Q.o98֚(Es8!3B\a(dz%6z_5/YF؛# 9>wNj-\)$u^eI^CFS|6O f&z^=QDŸFyfK ѝoΞU YYaPĠݳV2{0YwWqZ{O}gO@iɻEg!\YҺ?|xAI>!mHl1Ώ &GFytbQvuRV}xwUo\Gz}UnXzǿ |}}Vye v?~_St-I~H78JGK _o H”0`(` 40"ʼn%bƃ(@#ɍ&5,ҤLq!͚6o̩ś&)t(Ѣ%DѦNo S§V6] W @زfϢM+dɮ+w.]bw/ߴm ,.y#NvaŎ'01o#7y`=yѦ>zmծ~:ӴkW{خ_]l{u5nzxr2r[ڼ̹F4̓+ xz ~+w _mn' F |݂k ]JZvW#oi @\M&gk!هe(Wc9hcygVdj֜xY1uFtTv(䓊%d8'ʙ l,|.mIGδߺ({CHa+M3 ^YEO ]:ekfR2L,Zh17mzH8i]کDL"5+A Ce`m,[uv聘] |%ޔ΢%ċ'Wo]3ZRxv| x$+g`U<ى Nټbذ5݌>Qn cYȿֲl4owIKeݑ/Tr^8 >.E)l ԥ*a/C+(=6r :mJ s> 1Ry._X1J\<^ї(FөdҽY5iNnUr`㾥,0 .WL&2ഴe>UG(Y?fEcjC3n3‘Ο@S$˾s7-tWoTd&Фu"&@/|%Mv`YA1g;<զ9RŚ, f-%>y_;N"ԜhͱZmo,XZ=ɡ_O`[EK^.8Fu YbdU`a Q`ĤNlH`>YY2]0-2qx%}6IE ``8fWjL"BY !8]1U h %KJY%" eQNGd(TjXU D@@DPYEPT@D(DB(e]]e^H ADHEZ_@_"^2fc:fc@_BDGxLf`j&ZnfZvIDUTgggV`Rifkj P@fikaLmoD %n,h%mcZś8c$rYT'@>g:bErzP%PrN' RjyNGI:#Azd:g{)zҏ1HG}I}(Vҽ|tg=ldOJȅZ(&(dY̊ M }KMg>Ӂz(SԴ ܖ,6 pe(hRXu7!Zd @V*]()6icjgXUٱRxBMLKZu6㒎z()Ω Jei,G#JTh&I(dj*Fu)]=]^j *~jdώ47=-i(R-_TVR Zɼlq2 t*D$ch轑'Аa$O\ !ӟ ~%>ONZaꜰKHPV*KxΛ(|JEOZ\(lFkFlơ5 vI㸨T=})bW$G)Q ˿(#F_Fl46UaE K9͝܏(#*U(ylPŐ+W sl`gepykhR`ꢴyM  ˾knU,i=muZ}a dnVy$ԙ2YH,9l<BMѝ:JambV ~ɲtHKbI26٫'4nYTj1P,LVc' خkˍQߎM촏xmHEQM%) I k B>cMrfIު +Ep .L e < 1hԬh iF= D\.^-W`lQ.ݎ9/:gK.U ?8)/y$!T^mmVҝYVnnV\II+ahpobɽAauqVU-Л0,酶q!(OwmSoY!m .I+>q+6*%zt2)1Ƅ]չ0Uɹ]cs"HN(_Yj-jMt ҅7MB7blB[pa,Bs<"s]\$-S%$֊CW\N4do1ٽRͤ>HM'%UY wTɄ/EYN]^ հrs`h[Uhqꨢ:FiHYZK%Y7C.u`8rr4lf \R:iYG5`~}1$ 1-i,jv&st ypsb0hRA\aޫ0,ac˭BQ$Zngf' 4hG`ieoD'K';k6F~ 操t ǭ8vj^az!pѹU2Aa.1Z)$R|v1 6p_|(̅Iڽ!MnvC9HPmoag̝0qjrȪ>qw7oDbM ʓ2'^Z3lE4/X]-Yy$㈺Ί棖d#{KГO!HP|{~ul:K;1' VK7 [t4$,QnUtĖިww8%UPEz zyrC ߔkl: 8UQ )2(γ<}͂7ϫx k={i{渌 e bh'^;MUD- J-b8p,*.&*SӸ !*  ۷a" F\bǓc k7{A@\|}Tݮʵnʢ$*|Ðْ߼_N8P(' GZ倊Z N$IW <}&=a7E҅||Ed9֬0@ZKR>ɋ}EϞKkCjo\t}>O=-V͍ǹ; RyǾADD$H,HfYRRf\"D_&`R7%kaFfmF\ 4xaB 6tbD)VxcF9vdH +l2K.a09SL1YάyI̧9 k/hp XJ\b K':OP:`t j@`G,^yS5?e@7`^pk?"(  @f>?-}z%%87t`@f<2PZx>)w&@/$"T% @A*.fXEz, 'G%3@KlKB@38X!Q\rJC"I$RL15S(P@h`N-! 7y2P<OHPT6o &2YP?L{MBІ:D'JъZ%F7юz H!O̙(!&8.͂)L׶R7t8ͩNpa@MfPR9`z+7 sѱH_lꦦFHj! ]*VIUUg媑B"O\VP9ԟU,@xй<KR@^;D[jUV-+UΆU*Y N5V-,a ,N[EK#Innߗ##V_|X+Y=bns$]׸etøU}/c{b`̀b SD#y͋^ ׶rjRsVVeV%F"ij=iWXZHyӻ^: b+We o@~[LE ^*@TwHNq%;PCL*[uǨ-%Jf+S>ל4pF*7=SHFJ9@GR%(9 $ W h & 5BцpYhD`9tF;)uUMQէ65_Xֳuk^׼}`{.6fv6=mi뺀h<v@7$:)Ѣr{>u~Myۻ}N+79Kthې&N[oж(gn?ǫ}d7O='F.r<0gng(TSA<r iQji);Z9iӟN\nGWj|#2Uw k m$; &x[]}'7v=UYE8;1/ֵLMj窳v{}0}症=>?9ϽYSyETֿbh ;???P%SH2sjWO~6T{ڻ V_D2OhϿ}Rw|~gv\{<<|}'fWCǀ~؁x!)rq;a4*X#-G0A$+3gP.>҂p<@XFX <8H\bZU&?۳ ڧYhD0OQ(A%W_-S4MPvJ!Icx-IcE]O%\J@\SWX"CCtrnb+L~fZ8@/c態,|\uRHN\hMOD4KqdCaXXBgP WyG,0G >.JHRDg .&&A(-`qF(KsB+ֈ4爎ϣdSA GӸYdxMhΤ*@qT菎j ̤)N'pM"HEG!YRyErX%~b3)+B؏7I6e;ɓ@eXF xJsdh|{5WLyRX\I[`]a]Vt{Heu`9`M][Ɩl>x'd^ĵ(2dDPdJa> KCFyUMy_}_ew}V{tuy'Yvq'Z`Yaz"XPba9cYau_=]%avwZՙUZ%ayiZiYb\uiae)_0a%Yv5Yut%U̙xi> ڠBt9> C);fdY@ٕ&zz*ɢ.꣕0:4zg87gm w{.xƣFzGK zX9@z4TzffX7\W83C#Ufzhjlڦn<' :g|6mϦx~ڧk|*J:Zzڨ*J:ZzکZTA pzB/R2 17|0<`.,1\aWH#o©U`gS~%@=Z.M#=љYYU=݃Dl(O2NMR4PLnqIύJbeK?tAGeJTèTTIܞfC?ۓ}Dj ) MM$M .2)ܭ*<(PIN;0IBNDޠə9X.nI.UQMNSDegnY/?PN*iFot۝V^$0C4>e`=4>4Fhx~T~"]哮>kDݚAM>$0  c g~JjTp$Oh@'ސ#HQ^1~.<4?nX".>.b>p ˎн<~FpUQn6%.ﳨ ΋8G^(~&Q %o =?_D?;/L/MT P?T%ew.'0_?c-XX/".}$  %]@mr_a9$%zG?ݚcơ*lj9ZjN &_a9ȉht9Z$o CT}uw)Y’vLȵʼn>/ ǯ4(GyXʼnxj>f\\P(ߖK~9Z-pK\v`ɋNbUpbӯn)@0 pp4"L-uɗ(}z++y%@p@=k%>\` ,poI=P: ,$9~b]|emuܑ} "L$\&|(*,@02<4˄6|8圓:<ܓ>@B =M5]F}H%RI-L5ݔSG+PER7TU]V] WeZm[uݕ^}2_b_ d]G\o*j6KmnUZlVqͭۨ.6vUZ/zwE\mEwEMv^}ބ`.x`=u_x X-^SEyI>gY]~Rau޹Iy蠭袍Rd 4!b`inzꨩ뫵몽κkz6Nm^{λo{pgap q#3\97sAS?]YWuas]yww_ ! cy=G^rȯ' {{߾{zG_{/}}_~ X@~L @6`(ȿ 1) s*jLJу㔷\o\C/ys(5p !p=z="wx.1yH4bH)Њ2.fы5(2VWbF7hXG9ڑwcFB8 `SNɍ]q_6l36A.p&83r޸i%j!nM1yss{X?*ZpQԩ."Ȫ[: ^v]57k1O|73Nv+ xLKH#}?3fLxǫ2|g6˼)"_/C G2yӟQzDbi_{aľ׶{n͞>(|߬^Va]e?=6y+0JS"}̲ۧ~6@.e}GH_>W[O0`]*e# p_ꟺ*Б.]PG pn!*5I.츎Ă͂/@w9(aTC30$LB ۀxP G  oDc 6X0O* 6ĐXP ߰CpXPAPX0cQw(ֺ@2H`tW~w{gir7(@z!66w~emFDW@< ~W `:C>xCd<.Ai `Il+x@.8~!@:@i(l hNB2A vmxz3+nu8Ջg8W$x3CiV'n8$W;w.bm%tGb] W(%N@r<Ȑɐx5q` hBLN*,92ٓQ!8?SyKLv @`Ka[-'*~ysYJ V92$ѓrNYTY ԷWzyF/#Ys~$4jz)ٌѸVɔ9D @ܷ ZqA |b@?םDL 9x=te6GmژixyD9֎Zz@֍cZڠ8Dǹ1ZڬgګՓrZp:on }_@N iyڰ@Uɤ=ȝۏ}~-[z.Dv-*?@L5@;ۃZv @I {W1u{A+Mʢwt؝wڷSkxJ9@ 3:~aA{ۮqX czILH̥@߻ZXɸ{X"6{|3Z\s*9nښs㻾!\r@GBZy*1\Zy@oUI\MZť0WF}%eܲiřE vYs<9r`zN){ܻ/Ǻ|ym;ʟ;c)@ܰ|DH@E,<ܷFt\u[ҿ+һ<{5=?=3Cԧ$K|==#}'qES(̍Ywe[؇]5s׏]?tٛ]L٣Vk;]1L"%^Ľ1ɽOڷKǴ@g$1TL5T]ݻg UM&P] %b#^'+/~GÜY{@(8O>?cIVLcD>@\1`#03%ЉIo轰 2z>T7 N PX Blb磠9- 1O-F:1*A>^B^LM9{Y^WBڛ^ xWsy{ %+@>-\+nP+ #%,Ayp_3;@@$`n,㧟?> '2>Q"'/$~# >)/E!@80IdRD2KiB-1l>82HI`bT( hEUQ 1-&R>]J:BnaIM>qerq2v!>f]ZN6^U*v~N6ƶ>Z%MM O6:*JZ^zvc~V{W֖:rn+zRo3lN;D#-iBk*]RK:ؑxIzHģ&1SE6CLo'Ϟ> @Иdɘ1  ißNB*u*ժV}|#x20ëfϢMv-۶I*aa.۾~,mց\'x=4X|evj"rav&ΑI78yt*t-iйu]Y޻|)~)sT!o=sb,ukRnwr޿*<6NMlڭ~SztrǍ\\t^1XMwZ$մ~t*JZv8H&Έ7RV%]&$!CYG1a1yIHRYW&ގ]}$CQ:3%cY@)ǂy"|nwwp|#}vy}~t$w~{zrp[Xg_[ʄځUd`TEImVam {*t #JHb6,jȱGu ?II!!O"˗0cʜI͛8sɳϟ@ 3%>GYOR,[:%WdjW[KٳhUY,jڷpʝKnеl˷߿i=4M@5HD\qun^ᵫ3k\wp^,n9M\ϟXͺװc˞M۸sͻFԱǍ#?x1^'gjeÚνY⩧Nyë_Ͼ=>JqZy;6kN5x[g>!8SF(!N .hrD|La9w!a%(  H5*p9HB $KLBdTNieXJe[^\ed)dA\$@0uޙ'vg{ 硂(2hF 餏V襒Z)ri *hiꩨCDwǫrQ묵뭶kEAdtlj+*DAN ;_oI0)'5b7X P\sL%Tb$d+9NlşU4`@< A&<")ư~&K0,'4Sh D#tH'J77<-D 1 R6h-` bmΤl0X_*_Wrݺp'[s2-R߄"8ഘ7ފL݋wvKn.Ǣ.y.BLSmK .{ n܌{˷/϶1/3;G4W4gL#EfuՅ5UeMu„O5=Rg,0:LWDa%P'HA'<м0`GH̠ILg:TVJH6 .!"#,!`hb%&WE%*:Xt G8` H2hSCˍ+ZQ91Fw#HG>EwD@9>Ґzy?&$"!GN򒍬$3INbҒ&AIQ$*ed1w%ςf+ݕ wj@$ڀ T(F7юr )HG*Ғ&M)JWҖ.)Lg*Ӛ6`iDuS$(HWʖT꨽**P:T`4+X-bYըQ%S{!e\WJV|̛뢗ux-I4Rоgu[c`OV$g8ץ:$Z 2{U1^@Zfʻuh cպ6M}lbvAnڼ _Mp-6>!jm{OnNKj wBús*>glLW.]O\Wt<D,ϼ@B|D[_oxaXܗE^n7%$pu+7 sP<;玷&>Obew06Ab8Ơ/wgNƉl([<'<8f/1R-SwvMHsVϟ@FFwzh,+=l FMo&?-ȫ; O8,5/ڃ.'י}f1gϦ 9vmE\#7RqyD oG7.ҳf;Hiku3|QJu纖a roZ+ήqEh3Xہ}Ew}~K"qN{W|M,O/茏^tR!7{6;D_^nRuLS/գg}Qzמo=o/G>;͇g?}KԿ>0-YN-w ~F:D#f`G̴?#>QꯤEg>re%(&X ؀fȀG"4*0bi$ Md.M3L"XTMdM(L-(L!$XdN8hꔃ7<>=8@H?xBXJFLIxy@T'|"Qu…]_d8fh(iXkxjlnt8v؆x(yX{xz|~8RXyX-SVHT (.QTIUMBTbQ`xT"+W%UE^w,O-HuX5MDՊЋ,8 dȘʸ̸b8d(V$$12CHz>\zArӘSL#Evfog}}n1㎥UXgG&e/+Bv\d8=( A=.:2`영 k[@Gfn98' %#w}>}bu̕yV ШqVhZyE%rJtjufVw00dYʏ7vfAoʠe}xf◪oZCʓsQfXc98\sɥ̪t:1Zr.ںҭ-z5Z,T&u 's_'*;3WG3vJpvkװöx{7@zᳰYvKwm'F7WoK4xh/KEo([r K[:k7+;bѳRЖD[F{!!JҴOR;T[P9 ZKk6yS`Y@+nrl6heB4a[=f_ &t;<0eؠxe >}WE&myri² BWeLй+*!;[NVѺ1k! zc{nk?@,u<2׻ cvWgW]ڶy[xg7x ԛm^LE;+;m"wxhw۾U:ĿX\j < tzs綈2z" s`qr{!;%}[/۲D-Ä7CÊ.|(@)hf4{Btw%ID\|1Twlk_aL ?s&y{ }1Ȅ!u|c@P&ɕ\pɔ|ɖɞɠɜɟɤ<ʧlʢʫʥ ˪ʬ˩ʴ,˸l˯|˵<˼˾˿|Ɯż̽&KZel%8,2 l < ԐM5D}S5Q0^Qb@MQ >*>Q/N'..~&:<^>nQ=?CD.H~JnL^NMOST.X.Q"CQPQ`SbNSd>f^h~jlnR[n0QwSy:z{>^~~n艎>^~n>G~LZ~븞룷i⊤(n+YU-JE[@쐈SuhU@?eT8Q5XNVUN*^^҉GXZH‹&p!Tu行N+n1ֵSo4=&%T,Oc60 4o5ThBs`)DxMahTEK(bs*!),%S!d؞n Z9Z *1P"KW2n76[[Jc٬gxPphk{n A z+0bY\_z1VU ?l(@q!|jĵh *<@*A%x0@Z:@=G=`cJm{j)t `­ h閾iU-oTK<"tBG'͂H+t xYuǼf%{fA( va `s␇̴,p}Α>/~nܳ߸~|;/9;4HK;uÍvB%# L(:5 Z2zKԑ~1 cva YCo%\qCΐ~9uhÍF4a#.%" (S,'Cb^ HF hL#6c9xB"c>Q#6CBfq2Ԣ#dv$IJZr"rLRV7Dy Nڥ4,0@K%kR*% Ɉ=)n#4;%[KN2EQ60mf5R2s(79A:fbVKxskr(O1ҍ@޳.d?StNTv (*pzH 4\]AGliTqKy&5|Z|oBڪ@7ӫԥbPiSPS:6Ꞓj;xY%EQ[KT*q\jUf4%R{!tD%ET ihʊVFMюJZǤS>CPSZx@b5ZꕭZLɃRvQ#spM2g]c`/: [ H%v{\TJwP8_5nwC\UXv`2)@ @ք,W{5ɞXN@\u8 z@T ea6뼬z3,V3b#±Aj4 _񍧅*5  v#0XX9u%u2^);(2Z[- 4,fF9ReOf|Aٽmv3ܯ|^xγ?2@#  =p8" Cą.4*fdRӠ'9RWj4~հ_-Zw\Sڌvd#Mō(؏4"RƆ"y0~K D,&8mmHĶ_[.t}-r!^xmp GS{Cߗ^(}oc0W'6 c7 hxmE|ۛk?okZ7gNɼ8En|!<ЇHѓH;6l^C^6[2;1f綴9C 7v'-wr Evkڃ4Be\'OyZH 9M&9Q#I]9rz%A Y84'5G98"{7 9/ +7`O/>?5DX'2T8UaT PPDWG`Q!}~|3S -.U$EQ')8RNYuQ%&f8h3gL8HXTG} xW=DhdO5QPw\}-HPՆ^ $3\U\JW6uoe T^yb`5(dȇAWo"zs.'``6kU&"B"J!V2_u};`,5[yLAUO%U*bbW/[5`VV0ȋoY57UrH刎ǘ)X ` 6/BV+v+(<舭 ^ʱaHXNr%Ő7rI7fIK.[H}Nb-VL,,cYa"|(KV'H(Z`* >9K_wh{M!8E`0TIbeVN(J9_هU>#h68<JWKzpa1\4P=}+f y%6%%P,@ %Gٗh$4S0b:$$.UNBBg"鐣eXX^d!XqI~ؐ P*,K"4m`ȣI)ZZ'Z.[Y[a]ͨ'B(!+&ٝÜ爛˙:r,iS)QS -ta9YS 7~S+94^iÞE!6y44c&?U.e'.90+F)69|/ e(aX=Z;KNp(s(OzUJLzȥ*ʗ`:a f"eS8ʦrp nsj-rzx*z^ڜ}hqjE7wlZe2MJszfj::>KZKڪ>kFqowqPn&WwZp*q-x0oEBnD*xsZTZivu–uovnنmԬ܊HDu5ڮkuWJsگ;[k7 ۰ư[vF۱pıits&  nPbj'8Hs{lBšW@xFE<rnxof$ƵuouZ wR˴gvxtwWĬSHgi uvϖxunv{DVu`uA[XtuvD݆[Hr{CGVxn뭊WI2?u{7unJzE[X׺g[ml[IDY׺.g{Oۺ"+Ba+;${dػ;#{c軾=ļ;6'{>Ap@ N״+ɚ?n+0qVmwm˴qg}'-{oLxwkLxZ%is;Ch'WDlxx'{vsh:ÊGÒ o7,u9ܻ'=µ˹E y[,kH&PpRluݚl:I0/<\hnEr\ !Rz|~ǀȂ<Ȅ,aQȈȊȌȎyz7@8P8 vX잌4P>8@8 z[K/PK)5PJTˀC@uGb},T#l|cl-MAV7 `͹| ~͵r}rl<UL*N#'@pM0Jp٬<}|8I}1p桘ZXڌL_\Laʵ<]<]4{=$]8NڕEΪgΪ|)-R x$ -{Ra,}P2ZԄԝʩp շiNJݗTmROM1GW`bLV{O~䱂=RY܌RQs]׻уy' lRTI LA׈Ȇ'Eӌ| K!M~"nÆ- 7mS[Rz-zmRy}8I̓ڍ=Cmm MR]P Nǝ˝$ <=% -9gQM֋>-M}YZߍM֟ف#˝RRYױo}V!;if ̇"&l<#M-1(ڍ] Uˎ9@s0j\$6]gEc%/Y!䚙$Pp8% 0OM1fSy{~%nYW)vS(PE(ޣcxڅ^g^(aE{R9z M!))~$N~%b{%n^T1SŸ"".M`g.`5+@&23!Ď澎NUQ)׾'* Q1-o(¨ $n% 4INc\~W]> Gd>BDo]Vmzސo\f^] dnNDc~Rb`캌+NV&-!M~ O$*^(F04("`+OE2N|4n9..S+# 0P(cT]fOK `ƿ pԳTPݏ^I]qH709`q@Ap08`0IYiy *:JZj ) pj{k*[p@P`Hk}I-^MyDSs_0@̸LAzf;0Qbd`\AM00CGF8pnȑ$A5RVɕ,[:aʉ ֬:uSV]=*oRH:}: &+WKR2XΟ\b-N 5y vrw@P*j'U̪|^50GW;p|(؏d+[%G.>ڂ$`CE-T8|H8TUzoH;U@UA#0L2 R`&y39xbj}6WPB%`' wM.W di5wsw )tЁ# 2%KB2HN^c1ID C )b_)Җ\g$LV#%?ӸigwJbJtK#H>P h\h":l+ j*,Jj (Jʊ' r`&*JlM,ZlyNIsťhvŘ$N+'~ksEuܧvwy,͆KH\BzkZ0e;~Au8_dW ;⋀ DU +\!A )pq<ˤ,о#^!e4 N7L]-++bg9L`Phl4׌jY4"uH"XݫCࣲܱ>U#$^*6R鮅c^9Ǘs9 pZzKDz&^o>pҎ^.N{c 7^[3od,r]=B}].n-߶ͣZ^?<sS@~ 8= .W`g<!g@AS_PAؓa0=pX>bS`C#>S"<D'"ɪ,jq\01@,ψ4qllSE2qt0 B Ѐ(zR?.O CTDlA?#)< ~Ѓ+M& )HCW\-=VD?# OD2:񍬀b ()4 s?1.1!xF5B$Y 'XOR |H"т~ Ɉ>\Z(I,Ҋ$Eh%ь<)^$*$2혊(!!xK az*͂ ӛ\ .! y])IUpx@JЂ(tPx p@ъZͨFs;W i\=g%=Joҕf-}LSәTd5N7ӝb=P[ HMRԦ:PTJժZpVZV.w`]jjάBԊ bx)$k-*9ˮ+)P++.-0 6bRz_=*/γ-.Z)0jMH]x>Mp)D+8~^YHj[l@'m*් ݖ-wk]Vպ NZ/t Fъ`v741qH%legőrea$Z>v"i5B]nK1LӂN1cgP2 TҲjbVW)_$lmv9ig;кXbжpB$vj5CcW*0vbpf5L]Q0d sҵg?}:/Тtq]Z.ը/ѤXϺַ#U^PMرjJ?IV^mu6 BwONdzw;,ꞡAv[v1T~7Nųyt^AOGC|~=M꛳z9Oga&|Wa_~Iњwf' j`s o|01/f~j_  G߇ߛˢWCҬ|~gwG (׀xև|(旁a0"X+8350!؂/'= 0g~I*8сH-.GOhYGxEȅ_H]!Z؄lX'Ye8gH& 8XkX?xg8A`{yrX臀H1v؈Xh|xj(Z,T8'~8UȃNJ>h؊_Ȋh:G{ ȉH~G5@77׋X}؇H[Hh(8vȍ(8H 89Ȏ8뗇oh؎(67Ah!Ȇyؑm}8 Y |('8x 9(9X5x=Ȓ /ّH<] myYҭ<]CKаJ3Ν+<,  F̴4}.u P ٳ[͡{^L6_] +K-;:؍]4m̷MZ}ka*ӷ+mـQGf=lKܩl-s]1:ҽۨݛM ͊[βýq=̨;٨Jˢ .ú2ߍܙeGȃ 1NbL%S+$Y2X*Z(F>@03ĕܣP^"`4NʝMnw}VBa^T .Knj1^.i8*Cz㒬0~e:1 : &1-K+؂{,^'Lɫ߶׼]&̜R޾k =+̤.]ν=6xc]J ,ӽ=ڎ-~ ͼ8M<~_>Зy>-PW ^]M0==+׾х~4]2 ~m\mk ~.MOMδ؋(i{=7.Ϋ x^NJ@@~ oMCN`Sg  l ޞ!]ʔ25Nh~A~C>gWN~[t^c 8HXhx((YiHyY YjIz*ʊ+[{Hk˹k:*0L\l| -=M]m} \{nھ> .Ko?J.j~ޯ_@waƒA2^D^KUwq"8jG#ky,X2ɉ+ϵL)2C0g\rA9sR(tTRҔF 8u(H:kvZtjUإ^n<5Pڬfn,ٲrn:"4Q}5ċ:ZrȆ%3flq'˜+{^ܹ]Y~<̩A{xU1]F\[r\cvz#>~JC 9U'V+WՉcF>]&{]9pзsVݔq[oT]r\`9H~^Ot7Հ\v=B&Wť~݆ n4}" "=A([mae`YmgJ7u!”`CI%dXeFl7gbuϊMji`CɵdMBf\%ݑ)%l_z傉 ,X'&}-JX^$rɨ_^Xʣ h¥huR8^yrTy)sii/]F>RښipB랢j ńܛ(aqiSU>,mYTrpܵn6Zf̌&Y_r19}ߋk7Wl]]U_w")#*,RQ#^k%\׺klD@0[d'b_#X#4J"Pd7}E~Rl7SҀSfB-24mЎѕŽ зjgAMq5 U֡Pex^uݫ@ϲ\SH~F-&I%WMK5) ״:j6\j+od2HƊ~!`EbX_OKL);HPq[b؈2ٽ+XCG8ɑ0QΟ:4d6Cǃ3e a7Nh;YLقM&~]_1اYW>`Џ^#E Fs]u'OׇA's6cT{YfC6H$uxh46r^ew!2zXtbgсoHew3cAf5@чwӘX b&i@)Igw)!x5z i_}ؒ2IvFm83_rd"Y$twW>@cCFk$itZffX['>Xe0ywde${(v'[o9ɔd=vwv[F}fd}G',?9wG|jZnymga]dW^[ח…EvF0)Bw&JGt,99K!(:XjFee&^$l֊uȸfG+TĄ_w}X;nðgCdmíZ V|mY'J3\5BBea\[9` {zkLkW6`[x:Ǿ: uZ#(%Xs_g*_;a ǹ,$1܅ʿ<>ˋ.ۧG|e~y+~\= m Zǚ-望|,AxgKy并 yڠܾ]1-KG_'hκͼ=IZUڕjͰu8= .L*~G}e.-]V;JiQy]kCK̶Y]<:G.X hhM|WtN$Tٖ"l{ѧ>%ݱmMԁzmx=mLzM]ڳ;_MӃmKm>yѮdpƾ|~Z .㮢~~{ҿk~<\+OYzN^︮.+˾8΁5̥!ȮY} -J_>{;L}y*J˸A 3O} Xc(>_ⲍzH?m ^useT r(a@5Ɯ:撚@α~.&; Jc-0Ν%n[PnݙyF,rm+ƢhVGUdxd?!oɫq Jx^h*N|f b1hvq=Mgh;@>HH5Q7D~sn]ůҜMr)_ ˷eٯN!) ӭνʏ̃۰ݣ ȋE鄹 ׎W?v TaXb C^<1Q6u!SYrK-_6I3T͛bLsϏ=(PH}4)NFe9*JiCA*s+ה^C:MDѪE-ҵQ};Unܹ0>kvgv|3U'4bX@˘3k̹ϠCMӨS^ͺװcVDžq3hᄎG6* V>x8s#>o1|Nr:No\xy,o?nD*BaR=a2= G AF =Dr#ea55E"%3)u2/-99)`4X5;z'Q<:c;6)(y̖ʋieufP=8?IO+A‘+OCЕmXg"˛leFkni$2>OJyiݑ9ߠHJb%14YLʥ#k|a(f$*jjjZitvT 97&zꬴZ"ۆc,6 nc$n..-R),F-h#_o#Ozl-ekSR(g 1aI٩e+lu t%C|լ; r7k^}oO>l HLi9o~wgUЂ^?H0? /  %PؾC|5 _H\6fDtBTf.^F;(D5{❼ULkV82IlG:WBD#cѐp5NH[袦يY\H|EM`kr)/JD“h'lͩM縈2+jRf佘 2)&YC!}t%,HEPXN$#(\ȿ c7+HR1KDs zuY˙Pl%)1bV.xu{h۱7͏{B*9 +deq+JW$3)չȰN!%υYaDȍxf4EElFq4GVJ#pdܕn%웮{E݉ bmgXL՛BT91id#GOSu!s -HśvwM*¨L+L:Y:EGLjnҪ9z1R"[Cc]4^[Vܝ(%3O$(4YTFNGVݡ?*4RvAZ8Z. a?xhLhQ-{r''"U8Dft;.NHtc"V>u =nлSxczC򪖄Ur!P ̯~l? Wmz C_5< =/LN,t up=GFqU|Nm Do-7dA`]y┘#5Y(x"5^.|𦖔mTx,Xv^3Ewu)-VJOL~Iɓld@ITMFLjZ =.vVM)V $)qu4[2MXk./S: +a1@U!T]ȯua̮u1uvQF_ǻ'z͘)MjmPcɜ2xM8EJZ"^e=R Jg*iP?=2GӝJ[[mC]ĶO•m~ZŝT+/sMnuy{2ūdV'6㶖u~Xƒn$y_Y-ڽU+}) _ QOj;ЏO}>Ͼ/~O ?{8!'8w}Xh_ gX8 h h8,؂c~* 5x0"(x.>1DXFxHJL؄NP؄Q6W؃W\[(beX ta^\pVt8|(g~p`#-b r`YxZ(Yx}7-`,p'pp. H# P DHxuȋ$>XЊ /-Ќ)`h p$x( pN蒇%Xzx(ȎȎꨁhȸl'Sc&8 'p꘍8%l(XE7ؑql7ZX&). i #@$p8D9 vfRcf*`!T! @2 `:IЍ6 EٖъF7]24@ve3jt'!З&`}YX؃?ȅIeil~ɖnY0#7hTxpؗ!9ZٓЍ9Y 7i9/J%[6f]w ٗ1ٕ>hYP j7|YsKcWW,"Dɜ} ҹȕ20%o#f zq4WfF+! С@I'H5X>yG/XZ$P3oHaTV0ɑ`*ea>ehYјZ țp g*rix瞁G*蠄j衈&袌"zJD*2iU(=v/b* PBjXl˧JK+>0 ,k @Ѐ /@+Ϫb+JK)Z;Erf DpTb' vt$eDLU.G=jmԞh750o ID2Uvtg@EKTj4jWZK*mYR~4^$THWoQkeV:M+UOsDjB n,4c'+)s䜀'KقA % ägSֲ¤z&Aͭnw֠TjM.h-{VٮEYtڣ27D-uzMifͩ\QBd:W7reW 6ׯ"UyKOnNkUpI;5iLŪZ`|UVx j'- ڙԏA5_PS+GO Ϻt4R9Ӹr0'MZB-,|bgB‹R%};Ј đPPuW7TrYbebXիkf #! L❪p;WD#)L'Yɢoa A_._M'D av,Ey^>uoudC_!xs=q9}ragr HPטyy6PK;vF;*K-qu} #Ԃ&[Ogv==vyw _Mym(LO ϻ_\W/Kl;:,ZK~}yTO0 ӗ9w/Rog#?}eX~oeƛ=^97xz5WXqudN@ak}B\qCꆁt|d| r8}w q"H, WN/W 74X6x8X}x$>zq|iUv- @(J&]w2R/Xl,Oj hkE;xBI8dX;X=899mN#2gUpHIcXvYF:RmnhduG~1'wxLфvU3sX TQ:d37[Hznc q9wcxF0F%MgAzH5fhvwƈȆ(BSUgzAȌhău|d|eW*؎({,ȎX鐇qG؏ ňP'X&9 ِi8ُȁy%'?$Yn}sՑ%ɍI\"I zur:y\) 5Ym7;yZ 97DG9 pKXsT91L9g\F>9x͇;  niZg)vh? )釫|Iayg)=aIy٘JuyIA2)HYfqEɂt9ذl訒CyXl qu8A){)GwpBɜgjxFFI+IJCzG Icfɜj i ـC+7 ǹCɟ'lGt (Ꙛ)qJ v9$Z& 69+ʢY|1*놠lY (xCW *]8*o׀w'^~f0EjbaءM%MZ3R:)rXcDbݩ_urbh:*):egrʫ솩g5Jy"zڬ 0鹚՚zrJEʭuP^-NEz"Ys&Jjl y榵 **~ vvG|('J |k*EFkV{Y uyCU걑F{6JvtJa [uz0*pWZɶk&V:|?{XzЩץ~OjJQ '%)z}f~z֗vN+S_+qҺCsKRoơD롂ۢh0ڸu[o!X3*}T[oz4媪{ʧ운5o2p4[NƳN0ճ[kn}KSPƥVv q n{;;gOƱۼF9nvs|ç5X r˽r:Kge{\in;ʗ} g[Yp[W8_˹ߧ;{{Ƴg&_Lzu lT[ec≶kSm @՘C;Y;/a+5l |ߵ;D\EտkJܫ;섟Ko.'ۀ嫺FHV{3V<5p'PY.U\>G۰e9|iK ǕHfnjs豾0DŽAXbzi:kɓܭ {i{Hbj6P9z+ɡ|cvky*m\|ջv̼ZSW;ըe̠։"ltS]leg˶lZ,rk\HlUГ5* }ϗ7Ÿksʠ|Oswk# xs٪9*ۻ|w`ʺbQz7,`|# +k694[Y'mѭ7"~Lɏ ӝd1VM\Iԥgۂ ^~FҼdͧ{7?mmMi^~z)_T Xբ|y Jy9}|Q pG{#\beԗĴδٝ=Sר=6wfۥQ]{}`4¸csOlxx.P+`L ct*͑xЎ)}jӽ^匆 ߵӬw B%CC%~mnNN,ID`yˍ v1IJ̢-)0`Y"@1E+ӠR7כ׬Z>NNb~y{~ֆ S^4GT0tҌL2-z_} =^w>{n㵋[,wyDAJD/joNtNpn U>W}M=sun $n(Ҳ~J| \{7zBC`]NwoXpꌾ毮V>~iٮYE.nFt d _&v;t=*`V ~㷱.oyeYO9]y歮mHwCۮ2 L{H?῰}-4;E?jWDWhր)+=u͜|dόCqA uϋyϊB 's֎ENЇ_RQo;`ˣ]ג ذu0XCwog֧?_ :b:TqB/~}oO)I=dc͏ _Ҷmŝ&tK zNؚ*h۞@ ET.Mj DUn]=:Ng'dAK >OOo/Oqh1qp(Pϰhsh2r2usUI3timbw"EVRP1Y2ZSyI4{:=>6 MMeN&QV|4vjj'\@A%.q!C aHqI2W_R g]Lfat&dg3:?qn )Ùk"SdќSa;f.7p!b)j7zsI%;)[Pgf. iD{KYSiU{_* K Zqs浜<~N{_if$|YofٷFKߒbiE67lP,j㕉\n۞n}i Xk.Sž|"Asg-j̓\+ei5s@<'6ވCP$,VXyP =QoS(ЯK>n;PBg(&-Q žiܑ ylBR"*|`|r *BZ.0H2lSc|8圓:<ܓ>@B =D]7m2G'ɜI-R$LI61OEJ, o<.I2U]}սo[+UIR`5Z`zH=uP^_}x4*&mEn"166TLE57 t`,dEV%̴όZnVS8b&]%Ex^;+>e!%XN?f8FuTWJ`D9$ _y8 XiP[m W_I鰛`_umWW%M[ힸg=b1N=_%'^2;؜=EM?U_]e9ء6D/~ݒx)Daa&c.qD_M&FW"m[XHCru7Z(Ey|)GI+4"$"9IO.\M~ɈR~ᔪ,gXGQdK|ehK_PjYLcT2iP2ߤYM efMoƖR^#rI̡&Qg$ :g֏hH*BzsF̦.O?fRBN\S-] äP^t;oDTa hb,:Rnq;>X/int;By{Za3%+>M'rkjm3M0w\o"P'+N/pVZMF 0 d78HL D>.̌(`0$hH2$^ܲ 2o0bOV.р/p0 ؈?pL yf8h?\+DK2c kpkEЦ<Ү0:k հ-%D3$J0] k@ WX,˸El+# ALqf:QBZ\<1*0dQMC |Z?0aCndqQ GF̋hUJ90(DqYFeG,ȇqDNQd#~_z P6.KPp <22.V1Zo/F3 $Wr8 g&k&!  v'{'(R((()R)))*R*'@+++,R,ǒ,,-R-ג--.R.2}j?ٲr.//0S00RYwL m60'2+2/333.3RB/` iqR3K4O5SS5 k8\r*r"'.nCjHs5{78-RKt 2-_ghb7S::4ӱ)%u.f^lF{$:<=-9Ԭj;-f\8fVGex7 ,`slytJqzzWX0stEt4C5SW}veB 6`vw fc #X07y=`x7z 5Lׁv-g t7aCUwy=67tGV:P$XWvq7| ~ ،7ky/z؉@{viW|wJA0E94}W۪pxsy׊ ~^uI ِ9FYGu2 ')9d qCY)y1wv77W5YM +b@7o#iymwٗ{YYyٙYyyٛ9Y͙Yәٝy <9x@?wWSWyy],@ ڡ#'Z+-Z1/37ڣCGZKMZ-z - QOS:oZ{ڦzڧzxXxQG3i׈eו?ZګZEzzԚڭZ皮zOsG  L۰ ;; ;!(۲%13={G[K[M;O[Sˠ A{WS[s;}{m[;w0s7Wkxyt7 [Ǜӻכ۽!UzK 765Q{{ܹ<|I_c~egkau>i>>ۉ~{~}>꛾>>v Gw;<@{s} `Ie^A>ݠ>^~_#'%ѫ/?3?! IOE?[]__cWu:EwsCG- uwS8#OH~??_?/?.˥2$D!Qlh ]VT:l> 4py2P@`0`48<@> HLPL89BJF>^NbZRf^VNhzvrn~Ҷֲ "*2.;7'G?K_u{  F} $($@ "$p à 6LD+bq"Nj=vH&K$r$˓+]LS?^6o̩sz.u Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfIv-۶n+w.ݺvͫw/߾~,x0†;PKK. .PK,AOEBPS/img/appexp_dash.gifGIF87a{IJ䜝ޔƈLWҩ⶷᫳秡̥%8N=`eo[Sk.LDhCT5D́SLx 5O0JalfZTeinsi16BYZZghgԃRMo5oOhytTLxUUInuƧgTg4j0{޺馓lJY %@;d{.,-W;=$1n$%$—̨ФrNJj:< xyzdayz4OggqcٸĪ亞K91HKIE:ƗMk{k·Q ˲N()pl &Ytz Ժ^}b64 0xl*,x|;MGI8?=C┊X\JVEIu(GHtcމ蜋(/z%"+ bPVL$ Y\+=ea53od&$"-$8?OD&bd,H*\ȰÇ#JHŋ3jȱǏ CIIR\ɲK RƔ˙+gIM8}  &ќG %ӦP>`*U=}Z%tg֫8nJv)Rcі]˶۷,µ5hڳnb\_mjTU;8)B}mݿ!g̹[C_SrJQ6.^c,[jY[725MD ȍ'_ϛGouաOlߑo?9y̛ǁ[wiujV\k18b%YX?6YiCvb:pX m=!/0rR@( 'mLcH(9/mpb04X98*bm餌p22bOP)?&dqpY&?)d 'd香0 rYg~y(f*蛌矉yUg-*`p6ؗl5&YkEZa!W֊1Ucl:sǤs ,Nt;Mcl۬n;9ŚS-% C | ~0Go;@ ?H'1P ̠z _\ȃմf]#l74Ե`< > ?m51A_ t1xÀClJ@ '@<ӈ@0$c d 1$`pp A0gSlLR@0"@ D b#A]<"P@3X: a BЁ0^0@KA|1@H̀ 2! !*hBpqR\P18Mu @<@1 #P  %1^p /ٯf3T}#(N'}J96z (B$h9k<@8PpT hFH `)j@TPh<rED Ps4 Qψf 즀$`OH؎<g;P]+BxA`@-HD@4 iFa.B(pP pǀ>0c TU@ Zu^ 8C M(! .xAL܂5X4q!b/ @xC!aHk'j֯{e'df 5 .l73w 9rL#(E0;#P P  @+ @X,"A ;gC \i" ҂ x$`y %61 ]8!0B0Q(:D@&h` 1XZ0?-X p, +x-,aDvN" %EŲ@+pBf"08F) t!Xmy@Ep5h/0@PljXe .+e_ٲeZп2Ԁ`vE9*J·Jc<Сx,؅>* }SV5 'Fe4 lO4ֶ P +no0Ֆs j[@0y8c(|e@xA ` PvRaMAr@A0HV ec1N yg\=JFx‹!A10d?{R>?DYߋ'X<YJKdt‘tSXttWrFK"!AYUc&*HJKC!,@u.u` P "p 0 p P p p   ' #e ` P7fv 0i0@Gz`k;:;1 >@vB-pFTA61 PPn \ BVwxP?\pE:F`:01pP.\`B@vS1@&tC.?PD{<<`T۳.0 kPsfkQ>}%XbtfhfvQPxh؂pȂ, (q i>@z:u&)hU.)-I'Fo?9-i@{C)ɒG> .yw$EEtg֎` u`9dYb+Xn-r9tY lYn P{ɗ @ )p阊E@py) #p) 9 PCyXpט99y1ɘB9'tșʹٜΩ0bc)ɜY  d IIꙞY^iDɞYiyI9OIڠ :ə` **ʡʠyOЂ/1ʂ39z48, @Bz,pxw7` PJUJSZOʥW.N.[ڥ`QhppU7dʦX*]txTJYe:vmzڨ:Zzjਝ ZzjZʪڪZʩ:z JʫjZZZnt) o鬂 )ʨ *ZnɬIکڮڮ:j:گ:J:˪ ۰;[{۱ ";$[&{ ,*-;2/˰ /{/0[.D@ G˲7% +V{XZ\۵^`b;d[X[fjl۶npr;th[xz|۷~;T [{[w۸;[۶{۹;[{ۺK[{K ۻ˰P{3۰kQB:,[ԛ;kh{ K =Z0 ްS8ݠ [,K ̾"',)--3K6,8k, *l5,E<9,>I|F|8LM ;PVgpp %!M}?9ǎ +e)ۧ b ۜ$ڣOtHܗܩ+P5ِ5ٽtJQ@ I->4*Mޜ585^fɝ>gB٨Rt߿Q*-ܝߝsb+JqmčK=-U u0QaQPJ@? <4:Aɇ6* 0ISK]>Ԁ!}>=-gFX@N Ȁ(ؔ}Tt) (ˑg  5#G P#lM  g+ aRlׂ@{-9.K>߱>-H^ݭWd3M[0 ~ pl Ǒ p g Ð`@ &  v1 @ gP @   5 )= 6ܤf!xJJ.-W~ XNݝfRn] `5` @pk0 p `w ɐ (5 P0  @ `p Op A`pB^Pp ـ@oO@O@ `Ġ ` Ih"銏#Xf>"I J^cMP݇o @ 8`p @Y0( P 7 pːǠ O԰ NP 7Q @ 0 I[Ӡ`p ހA٣6 61É!RQÍ%b"ȊE4rJ*3̎eYӣM=_jP>}E tш-*eTO{@-C k<#fn\sBppA:}ǂ=h0=1Qg,Xm7zu JO=؀ʕ㕠a0fپ{+I * @c #$.Ox# Bޜ(eƼxq̣JsItɷ_/שouhI'7>wG~&seIgm1F &V2&Vy`8|eI`r٥iyFiktmq]@hfZg` hE1ئx)VG(pɦCSL3D3M5;>X.Mԯ39?\,*/=ˣ!"}!!!4R4%ffRPҡH%@ n"M_JaTV)P]ʽ] t<`3N8 F 8uElo^w /(:PjVA=blᔈem8ڜP~-yeW)e+2J%8YbCn_{أCh5͗J9f@sh]Zє3# "dᄶeہdP`nN8AB`n>a[9VBc;9`x#>\<% GBrpT$OІ,T` ohCj: (p;,!DQ;!%:Q̠r XձEi 5bnL-I[5!d x@VB") "CR#!)$G+=U* "ɪNғD"U@LДB)]9KZҖe.uK^җf0g % jwlڞ8G,~qJf {w>Ixd"HCrde45A:Vde*)e.p$"cIXW!%I3,$P6TuիDuBU%Q2uDQ&bEAzW/wGh*\l4u}cvƘB8pR$ *VRhYPA ܤ)Q:OB:UV'*?Iլխb'UϺUZbթWM\erҮ|5_jփ p-,`Vb FR>\PQ5꩏]ZޓjlZضWXeGIޖpMhn@V T0\6׹lswy+O?fF6Z3BiQYTli*OnT(ߋRuj+/? WC`k ʠ)mQjQKw/,*E8ź(U*84DSx,1QRWD RkC=SXZdIZMO4jOUz#^V5=<׀5RDz\&- RϤ-"uet][*zͪ I0AڔQfӥv<3<,dM4{iXEU7L^+!pVd+hI@ ±aa7D",*m$X,qkd yڊ$nN'y\uٿ=78QY{I ӗ!&fk*b$*!*#2@* ^@}.@?,$BPBhxА! > \5ApGp[0 GgJNW6+NOuKMիtSly^݌X IL6cvG(I\Wr,S~zf !w E@!>"|2APU<>0=F@ |0!EXjwDK7$ |C )@ R"Jh rn ^(D PKQ/+.-F?ifn =;{297T2L>jjI*Kҁ?p X! x%"H@?!a5H5\p!p+V?"0X`p!@Σ("+ = :Pe#H0BX!>X%390/I6"m6cDCTDG-H,7pFDs7Jq32M䫳cekɴ:O * 2S!?h5`!pXVIBH x"%x !Lpi*! x Â(S)h"!XBV5Xx9Թ;԰?49- %RA:G5â5:I:#ɰ+jɰ;I[T\$Eˮ9{#2@L/b81Xh4~ D c+="X# !AP4<Ǽ8dž!.h`΃H!G5:& V 30@CR8RHI˿תGH#.MT0,yLJJ;\E벚zP#E++8-PꡫV L)H> xڣ!1,LHp@!Ё!X`"9Z,!ŋ"Z0"%90  Ȉ:͜;;(@@*`Hس@'4RO6:FN\ktRNR*}D%'%$Q;\EiaX/;0|C Ԉb%9S<;;SS00 0 Q0 0p%:ZB@۲j^MD+}+U-%6+,տUZܺRm*0jmVxōE"<&BNXdYCYE K6JsV;˕&cS۟wn*VHe%igWghn}g||V}~g|6hd0Uh+g艞氁FgU.iTVinn遆遶ih~hi~h&j%x~Nj}~hN*|vYS`)p@i 2N~ ZDÏ:&b5u.}\ kMƩ3%gnc@Qk#eu ka7@k3eNk 6VY~6`}ɟs&\ɶVe>>4~V9N5Ps) nYuBY·_)m nJVn.2~ldkڶ lmnI并ztŘήl>k`׾Wph28 EO/pbo7`^owf^n]mVDo^'%EojpFrjqm,n--q4l*wՖNrLnev&G^(^fPqW:ϙFgG9D7V@ 1zY'74p0o.rG'TsH^Ks?VuT_1J Ft+ x xトxcPv('ψH܉PPfģo1R= qv Y%(!9>x; A_9os&tnrgr5upwXx{Ha x` uXdZv.7voH(ߖx !i`m (n͓v]0Gxr'tktF{fhUvc0h'H](gT#yo$`lr <u8 0n ^iX{{(dXztPoP dax`*xs`xfujxnx{ `jЅ pn_P_hf'({J@jȆlz`x_W`}ivEfpx}gPxch`j(z{a%H '- `7hY"7r#Ȑ"G,i$ʔ*WlF4f P&F5yK9td{WZr*堟'6uvlZ:Y( 9}Kwރm3wl\ѲYC5z 2!x2lFp5K>"@/X` @{Y4jsuԱ_ˆm6nںgwoӭEXӬoր:J dkK_e"р_rd%Z8SW9xJ!3wZix31wp( *x1X`6 VL*%PM3801HM0S@C< Ay7쓝242Ӏ=vX4=0DFPC  414@;$/D 4ȸM< 4 >LK:@ BK8 O9@ 4(zK­VȡB S <Nf8O97"D y 5Դ4 `c+,źaJ;Ac4 6'ɨL $i7@/R=D-=30hc8x88pC3< 00#; K351$(C)I^ґ'GS2~<",3iO+MC\Җ%/ؼ^z*&GJA}!ġ SR4yKM2Tf0Ip'6Yӛe;Eݴd*[yMn^QHPP`0p *M(CO '$Њ X'PG+zP:F%P!(B"0M:Қ64#HSQjtMS%ҧNJBP2YEcURV5kYzVimjJsnkIPՓNThNQ'Ձ0ЛJ4DUiN+Z: t=kX=*fjGݺٯ^o[?֥V`aѪmhӊ݊ij[ZUmiQ)&WW1mѕ.S؝nuJ}nw{^GW{ ׽/y;_#?"_jWե.~ؼ-^ &+|'8ۅ0uWzİ9`y~cL7λ Db3LL4cƐtMuu FӀ6rdGz;2 Τlj+[Y>tgլNvY)CӾ^sq4f=ls{;^M,R9&vͼK~6iu;3 U;F8ío)pgrs\na-l7vSy󞶬#xoaevgZ-/gל+/K^ߵ;FsMuy{[w%ƹ}LgΕnc]~vb'\i+;)m>yM`F7;L+="_N KmZ]38]r˟D>&O}t7΍kH'~k^'TC_ /lWm{{{d#_mu`?n[Z饽'>߱ ]n=Z_-Eǽ[쑝uuZ9յD6 n!Qܩ׭^՟_֡! ]_Y Naf^`&eYE]ra  =!Z^D Q6`եaa!za-.aE"!*bHaq" .:!#"b!JQa!`ˌ b_)/b0~a `yj__#>\+^+ihq"V !4:-:1": >ֆ$bbYccיbE>_+#< Pc>@;R$YdZdO:2>Vzc@m<$ER`b_TMQsc:"d_BE& ZZJ%fe Cbh"M[bU]ͱ$WDc1*Dfdf\31a%URkm tm&P#fS(f-*d]dRir [&s@=Pb^FBN^uebb"f%gQdo^abfx"gf'dNY%qʥ-ۃf: RJʦ `nѺ )^HE'|(1$uŸv!YZ枢yWMWnc'zH^)Ju#xg1I,zg|6$jZa"bef"cY|V J`@ E\@0@ 0ix'UBx]ʨH(~eZiR(pFA@  @X@M$@MD*j^Tª֪**[jV*kL Vj_! k6+>F+Vjj,ioLs(FdT6h~#D@ A@@, F$B.6,>6B,Fl&&ʄRZ,VƎlƖbǦlȮʶ,v¢lj,& |@H Ā*,B--&@b>$2d 煲(GB'bf^Mk |@ -@ @8JR!&-JR!=+!"P:&SF.N.mV".n.6.#M.4AچS5*$ŀ~ķ`r&*( '&G@ !ĀA ̀ @ @ \|O~/"jbd HĮ]$vRԊZELAi\>co:'~-jhn5k))\fA`'ٰ +do4%z`N ,L_^'ڝ/تGh T1`M,A *I@DRV-&\" .j<b$^/Ap+04_ `A L j_/AO#?>" `wb' Gff>@GH#@F@kjvYj9m{Jiä׶qr&fR C(J1.18d :0" @ s#'3lPkt P | @@q/ɦZ{0;(hۆ祎³2KsG<4g 2o ◍򟖲J0)In21oPOFӳJ3*ާ7^d"R*KsDw놶NGO C-7ngf:o~/'袖u&(K)1F]2i=߰S^f$FtH+#1_ڥtG?[5H\GOw']tf9Cu /"+ZRP]_I28QCu/f+gUo y6xv#~r2p={_3= ,1䷷GnDqW>#{/|77eF8?0@0`A @6\QD1fԸ1bƇ9Gg|(hC+O|9&Ș gN3k)2k8tdR>OWfZRi5M-*YmI*[aVu4-YsD޺o`Ul_:UsgǃbftȢLzq|Ssw>6iY[J>Lmצk.r)V~PگQc :T٪N{?_?s}Hk鴥ϝ\;[ 0ꌋ ӯ`++ 8@D1Ðt[0=KM4<[ď FPI "Y4#r5>+|"4E RФrB ;d3A}QRJL [9T3:lrIڔ/-LNCs?JK 2B73$@NA}=4 MN!#Ll4Ep!OּLKV_mō^T9IDc=ܶEu41 >Ylk%5UmU > R{6Ym3C@gp\HͫrGw~DmRue~7bw[ 7>fzϾ|dn+.JrDS+Eh0G[m&.U`cW{MUf]םTDdoYSٯKkeISKiVm7K]e\s \wun,(fIL'0gXF mfVk&c/Cuտ#-Rnhy@@ `)m[:8MOT _tG{bA@~bG78p!`@*`bjx,A~xA*`lȌ)1`X*d5=q%,Z[Բ9QATW1!5؁3 p # HBiLC(i=!J+x]*w>Vg+Q;/D_nDd5@P>HDi)q]D?!@ b!3@V`* `zcHPk^@?hB"詑 !sVP^$8wp#5@A x&> P!  Ă`>5 jÆV5p@#ҁjc H[vmGk-h[6mo+ꖹ-nqg\Bw½rk6liGS3 RWtIV3 $֌vrb(; Bet \z*6-] !LXUh3|#%b!T8 U1b%&'l _X%ic۸3N10AƐKjP" ? "XwO1RoC t0\ a-`E@CZ5Ĭ9pϺ _Ұ.ľ~`B0@2hFK e kw:DMob: 0Ci~) .G C@mI(A qh󍐔Dbd'^ |%!bغ(0_TU5uG 2D]y0(>Ct|Z@ pdԢBP@ VdG)_ bJ-h<ʛ+~/0m "`y(r  F` G4@F@< / [BƏ/ܪ }2n+zƐ `5d@Z"  1`|& 2h6w Mڣnaʩ ,IÈZеtr$x`(sQ =@ p10!ܢF  P6 o1nEȫ  xZf@#܊eqQ)@d@ qB\&Ta b@%@>lͻdBm\ Gp@ tlaj؆zOuQ 1 I0k 9))zmvp.#-?R*,2;  [ ``r J.@R R >(m {Mhդ([Tmmfj\ DjAn5m%r)RJ`$&q 5o$!?bRM$I&R/%aaAԁXa?$@J.}@ ~ :oF1h{#RmiH LP@pe&H0 jWRh桡jS7Gz)-+ `z 4K4n4099g7ðO:sI,]X&A(Z ra=d P^QP U>A! s?` >--Tج){I Y1G q%lz"O!,!xa6E*z2+.a=WC Ԥi<Xq*R}c 4@ L`27@#Y {64k [ )Z!bLq9xa{1iSKՙ^ P A bz@ Y$Wp@P2 v3(Q.A^9dYvڇ:dc^d  t yET.@h$HИ^f``@L ( z qH}I,`\; iVjX`ضLӀ+  aZؠA`w 9>Fg^^ Ar s ʀ~J (yZ3zM+9 V#;U?P?^aP!eS3sHRթ+U)^RD0 ƖJ USm*N) 0̯~9< 7I˙iH5B[V5ik9v7r)l` b4L6 .I{AKz a준~} tz!P ~Ȯ@ uF/ѝa1aþ!j* R @H6G6zAcU@)a)&g?$% |ͷ* nF6ruv%(`JZk-|nKA.)H (7oЕ}!BuI Ԡ|b^vx zб ؿ@ ͧ:1%3th5@ Zm教ܡ"U $M0洈gJME#D hU6{ja ǗR/{ 8 ʽ @ؽ kb;|mݡy" |n<m7L? `36oRa!~ @qEy}u% @oIҏ m!(`ja s. =qߘeA O ܢJ j6O@2.PJJ\Kp < hR0ٛ[77 XYo*ٝ٠VU 5&704b  "L])&!l9@'!C K| ffW6cthc09&Z5͢ 0 l*V$6-Ilx EiRU5**M4ղ}6n۹oڽ7^ 8As-U+cȐ2X>$HBq9ѤK>:jѝ' 0 %\fuעB0~mar;߫6^0 DpPAHnPlvX}5R{BkR6Scp5Зv z4C 1 uo) %FEIDeQ3aˆG 5A[mIV7P@3ğ|x1aUC9RZ1PL MUТ"@Hzea" Z v]Y¥ekbe`q`1 5`BPGA $@I;ZgFhzڠ{ >v1/B "g>7&НfVꨭ*mOE/AAL%lGZn"6U"PN o5 $B(!EjPBA; aMᒠlONX5H.&1U\u$v%b3EQ ;WꬲZ< q'C E(aYO4;yBMtz&;4тQD@+*'Jsac9v#o1ڄE] y@FNDd^s,n~ @ q@tE4m5]enJS4:X7zsLHl Q"0mj_M1 P%^ZȄ}} VTc.8V > A+=@: ZtO,,\6C R5@Z l rUMG;3Y[%%x%Sm&u8p•@0h3ng0Tp @> yIE[nA *PetHQ7+X _ՎFDQ 0E[R JT`O(2tW 2dt^H`p*%^zoW&;k~Zons9$5W岧U4MgFLkjE&!O2i_ 3Nq;R]Gyq,~Ff;r0EZϓ%+S9Qus#eefQO@|! ˗?3ͧ|8pyr?QѡY8>GmbVK?7*۱ۅiB"P"Y7/7Fq Vy6;uvOH4DOEhU~r;byiti{2Ba`40eJ:rh<ƴY x/$v`4{]Q7Xgc2Pa?HG NmJװ'$\P>vh~{EE~UnT^u~EO'4  AwIwbUnF[a[N/ ,!o.Bq~Hg 6Vzy'!rasPÍl@a% %L^qfBE~GT!Hk3v0!?(J 7sЅc86~`e^&a(vuR'O !]_D=U F{wsOSxHWR!:Lj+8X9wXY*h+!{zR࣌fTђ- `BFd|Ƞ@J >'ycfx;xz3rܩR97Qae1XiWqJZ:*wS9)WނwW u#X\Ԝ%F2qg2EL$og`Љ أRVxpg M*E:oO=?"P,&#6%,Wn3O|vz!*V˻d i^WEG?I(\ zS p@\gSA*Yf"Z6s"Ģ~N!=h&9w1)<  0~97x9>izo$UzZoZW"t K}Iא | tU2"ʅwt ]ؕvk,{f~$Fe!juFleg !V_(p㩏oֹ'/hX 6G+0sJbӪ{VpZwY;s 5cƻp?KdD L3|Ȑ@X:⦧|% [{4QnanBWYQabqw_XF荚0!Szj Z)t}kq[yl F”`<-QEGٵEIK^̴oT<_"aU_x6W_P1V$_? oI0 cZjrz1L V:#$̌9 J-t(?GtȀ j| {'P)xFP{8 - `)t@`@`|b?`付LzZ:э_(@cgUiDu%1xA !,1:P/jkY#@ J1=YNA1G#GUu9Z|l>"ss5@1M^]ɞ VA;\3sH'z2:p><+3P50@AE  `n7{[OnxC^*wuC8 ) P޿ȯ*lOv@vq1B0r"*z:TJU%E` ~1XPBcƁ m+7<N1w < Op%1Ř1 y?ꪺW`^E2#R C1fԓ<0nPoNt@ 4n!,y<1r֤[?s@-r@SsPV#3pⱷv+ԓYGjxgT ,Qdf.fOCM9us'Qd$ZQIʚ  6J0-$0a=dm +/}5@ ;{dY`Cf"-ZiOGH5,0f?på5]gk] ^ ZdYvcX*ږ,&ƾ}ǬcN<+}"*ټ$'.Nl6H8,jP8asyԓ>܀drBX.A-FfV9NJ> uTw:5${5XV\?wk`!cطeZ%!v0" !p8 ]3rj$AJHhc,i * 8ЄXUIf)Ӫ {SkALb Au rs$ N03T/Kx%=A$f]6p"&#iMkJص}0H @VS, 8HD>K(.p>d#XĤ2]M @#zQ373Nx*f0Ũ0C6|m5$ݿdPfwˌ`N6/.O{̣7Yw֗фJh OiDOiH65Onmvg? W.@!W"IA+&ȅF(<BeK<=;.JG~+\%'hAEQqO3݋0g>'/PK_h:qv@0;vš3#~01 y1D˦T6C:uD=Giu<DF;up4UW@j5`5!%ppc-듊hF8ԤHKG r2 T?fRbaɘ0J|Tv [n@5.t0r0NaXt7y 1I9z?\Hy,cǨ\Vy[1 x4l>m5aU&MQLSsL23C'fw ǯF^֩IƲA ROfNa|Wj. ?$`'' S>Yĥ>Ҋνj-IpRG/Ș"f*J ,L bKw͐3h blÈh.Ьlwe3+l3Li+ SvJz!W9HD(0> `ȡ͊{ܑ k}C8I׷_L~8$VI^*'_+Ӎ]8aY}5؛S*uN9 }rfnX~Cͩ^zOO?wYs{qowng_7=`%8ހ՝qCz~4^_BpJ71o-sF S1j[ضXqP +&* ȢjP3vz3z572;j糕P  Fa;$x [3[I-P#Al$1Xʀ9151)*52Y.c«g ,*1k3ʘn˭~&q:7.0X7Q<2]{+<۳ 79aK0&< E{#|ER X: U ̘A)!%0D6Q+꓿jȱӰ 0hl[< Cyx@B ӪB[I-8.[/)+yk=1,Z36CڑqcH_h (DyFpK-*G,pX@OqwԌ񉞗!s<1EB!P+̉0~8!.8AMC;KTcw eF!_x5(1! .L9,z%3.pI,U(*[A@8=x̋/ 뗢ѐZ 7C5NAKˆh>(Ecٟ o ,4MZ?/3 1DHz&q1]ɣ*T+a `bJHdkЩ&79Än#2ι*p:s3ބ [M2B1+ A;ADҨKX_% ϶(sJsLHL$FϏR*51HClM1Nc\Q] rMa)$ RZh[+I6$v Ĕ7SȰ-D/0ke&LRB}hk+L$W P4eL)14HQ-ÐƩR9<8GF< G59(ۡ bQ (D %˳&aM:B"o«4Ѭ7Ta6f 4%UV;2ɱA`_ [4]g_hL;1BaX?PbQĨ 3W{0aCoXv!;̋QJa*eڰLG4 S(P߳zgDL?Bq.i}Tk ]"yT̋MN3(yq7%MX!e)(RՕ3W-ƅ hd-]PyB%NV$?&Tȹ;&PI#3oظ 3@%?)JN37vڹݦʝˑJ1rJĪD]Ms2% 6 paG~⿒ Ъ dP>kdA~t #J Ѝnb_$n։ni}-hSP1?)Ma bc5?E6]4#6=!jlhjXC}݌~%( 0(1Tu 2h#{bHI7~ZnN!X, i;^,eAxh1P"@!0" L*Lm0t'S+ \C` WcVXC A!b@|fjѪ)`~@<UN:MiA3P:5䅵bދA7N.AÇ~`aTnN wX~1P@!@S|mӕ%o$B-3\}!͛_rEib 96 P6l@}MGUCc~$p[#Qƴ6oNaT/!mȗ's#! #B#x'0&z R]o |(P 07,Gb?b3_f4%tަJYcu˒0!3 9XmJbi]86ɽ3]f:l¶=NmbfXVf+Obd&u>ZEA+BaYlh ~tЇ]xkkwyu@oYxxQ"rP HAVegsO;SY `Je|I-s|\5晹c"2CH=C?.L ,]13QtQAfy֕^i9>Frx Cr80/(H_htH0^׉jHeuyQ_2VTpbDSC*RC-V9’r'c| $ ThX&PIKzTVbFLeWq)`kPt©عȞΉ#s^z駫y5lݱFg(<6f3֗$chL#+m?rћ^'IE橹3:^<0q-PFbZ"EH0G)&IZ"+/‚8|8 ]9Y,COt )amt6L.H]F <)e` Tdf3YΨC \sUiezP? '!fT v[b<1cڦNpST]';Nj< ɹ(ei^74×D),5?PᜉòƐ/'p2G<mOL!E%I#]( 07 ܻCEZ5>ɿ,8;IzZz( 98NT+= i4=0YI9NU!0Y_iӌ)`N~fF.zCj{5+ UkZ$] '@=8^*I*GW _T4~X^ZbkJpdehT$#G,&iҏGK)ۑ2le jsr'>WT(!9sc]K=Fi XK.+cU ްU4B+^4:CP@l߭\ЇP I^Gա\^0bьd.|,8 Nf\@V b B@x 1uCcOc2YFQHH%C9.ӈ8bۘ Pk <gSL0f=}ϫ6Q`)Clc9˄1nC:!Ŕ$c,PN'&kb$#z2yOJ 2Pum1{}b`1(WPAX5Bgǽ.,|d/ @ ܹt fO ,4qn`A @lݣ #@ `x@8h UB^ AM VR= P/ZՐ@PB;X߷P(_`a QS!KK24V2%X"9f I_Ā _hLF]؀*lf*K hRYMf  [U` +2] &1^b@+jI=V+OT<8V) ԗñAȚ\>LC:C!RA΂ ˙` C>dAƄ;(BpY!J  p@ lbLr I [Ok1lA`jIbϼP!hL9GX sm~U|G`HI1nRS 8!l"G)/\)MefHX ފa!^bȀA@$ ;_IH: F0_` Q4;|de?S@(f֭ nC J @AA@H́g o]Z ЇD"U[݀܁l۬2r# u ! g<)rK3À(@T &&܇RH!I=N?@!|@eU|aV8Q:_E%;1@%|CU/B흟5m2"(AfB)N$[ ufJgؖcI$" 1“tQBy蠙U\LC|Znbj!³DjIk(B|R-&YEa*M{  [ր/R- nxB#|W-l\VUFE0+L)sl0/lW \?,Ӌ0nYV)SpP__4 ji]ZF&ƙvԹJ_ydVH݊ ROjݱ0#&[ zJ梭՛ 520/@Zk xRpaF#gb\^0N_#C6԰2H<D֋.ND%'m>+api |&F@E>EOE H82\dL&8Kv8qv4c6!-PQYܱ"p@ :9osWmqWW7TxRk} m&:ea超 P4.Ucwcռ!62xJ0\+8.1gd 1pߑ ,~r`Ftn`ep95W].TSsƦq8z+8B8l\FC +=93BlՒw- O90$v&@< *װ{ _R<[2:- :c5xx65]p-ZEt exZv'gotl` E1SLplQ%X$yiр1_$N8OjqhʠqݴoItM#.0  @@#(R@a6;HXi0:P#b+)j(A"FhB5iRK6E SSM:D Wcɖ5{-ٰ$rQ̥E[{E@*$+(knNaV|2nMG6tjREp"l/(T`H`+-lps$(b SPmI65 MF5ɕ"6; x~ ɓxTx)"a!"hF= *h; A^ۀkfVK*d jGėꒀ2̌a ̀S(YepzBb\euap%պU8@B4= ED{-|C.[fe7⧜4j M0bO%.s2=B&ZyF?TsD]cIG#N$4LOԍܖjLJ @:I 6V%hI:* t%HRxC Nз)A& 9'J0id㮚shQ7:CP |(g=\ Y ˠ"U1-]9oe|LM My1}!h"&0cs\/{(Ƶ Rsnوԡ2ѧ~N7_ªUf%$0(c=Q$!pe LM (0Yr|&рD!+'w)K[-i0r+0%ל~$l@o:Z d)5RVB++@ *dp V1Gc)k~6&4AZܦ zP+T2r},Ǹ\mBs0O=+jjS3@Ђ@$%Vn e`Rc7M.kP Onvk J ǹ>x<1ŘX9"L{x bj(A+jz9ɘ8|K~=\@bc !HB01J1+i4~č7;5MGh4Cj1e{Z feah;tb3q7> \[7,&|)}=FZhȍ;3lK赬sxd}<";RP  BV @C 8`0( (_W^򘇁4Ow?y;:(BJzc~򱗼 4&Xx5z߃E@3/{gGCϷZ{[3Nd~wָFkk(Syfl6X_q!c 9W& DD͓:Z0‚jB&:B[ B "6'* L?Z!tEFoK{>f@\3t ~@t P P 0 p p   lOr p P 0  p ٰ PP]'`~AD`fɀKʄH,镼Q l'Z.4W"2p8hZIB%U;N)&" s( .>aR+6VZZ}Jk[:"nNC@"&NIYg_Od>.>N p#r5bb $.2yf'N,ʦ sz"j(Չ:R8QR s YSUIllbfW.nY~=n7>h!66n20BȮpf$PB"P`e:0#VN=s1I=r?sLytF|/i/wKoV41u, s%zyciGAO%HQ46kh^%r RAZ0nj@(E6lÙ$Egx6*c' :NpӔ;XTd3._-2HVX5I?ouXڥhIAj@ f)$4BR%EP#^GZS UrQDHbS.=))*mdElHe2ap'lsB;MEIiV> dXK6"ʠZ1qCNL3?-WX4d5Zd):rb3?x@5#8@6lPs'a+ nqBdEQ 6 }sotZ ~5Ms;=ԏjb}~\Q2Jj,eiMkor2?Vn&Ϛ#~ZUֽ{Y> douu'^RŜ&I87%5} t;s?%>>qc1'|݋g%(h2 9!" x|痾=-'W;}>܍蛘p=[q9s ZWt/)?%E?S: E%5B:mk4|?djG866!@9/(B\ )3`4L^8JWkU5 tIAA""JH"ņ0j1#ǏCb1;2dJ0]Z9q$͛8sl3fϚ  ͡/e^i4NPFm*RRI h 1,#tI,^ƒػWrܸFEI q@q^90` 1q4j`$##C3m2=26m"TvK55&R8& @96؋,/Fp=F \Fr|6m-z80PI"Rx2Q=IDY_~`V1-(V%ޔQVUa=C RGx'."{ "㌈IJG <)xbM4!E 11Dd8 !$?X AȘ 1ʸ+8d _(J]`1PwI,498'HE DJDhhRHb(J bZVjHCЅBP0MZa~*Pjh԰!BkKYt!&K-~mNCC!/[^n`k/Ľ*tq{noˮLKqn;"N(B 1DNCBC(1R G8m/b.Q@ zD@> 1<yCB(lI6eZQV,]r]4PiP@(Y @ Z0)|P"."1 ^B\j 9@aV`(OjӣI ~/AHr(!1 P' ߊHjPk'p 5hP)|w; d"a5|/^a$7 qH6PҔ `*;fo3>+%2"5XADZp:r$ Bܣ@C4 j #P*f[[r>S(x`| FH@)<`w D>$PU( 槂 by4=&ҋHCIHX`QTĝPA x  hoMi{ӹ*]yS>At\O4i˖=]]Pt!շD`wݪ@ ?7J63X‡S3%Q%ᒁkPS*zmؽ`89h!Ztpd[KR"/@~@*A17 sP&"!LdP@6( a aT/\@^s$;[3ubɊ TP ` + W@*)0%2t4"E!8O?Y5a½.s8UJWF! wM ] -h5qeGƖ mT!& 4`(P@rn 7Cc*\)+:̢qL#rEaq.ƉzuYRj]vp<[V.sJ5aj3ɬ89פJ3`A{En=F+/OԆ7L,˻pF9=Yf]t_;nw{# r!ެYrmm(8[܀ٷjw5w--|GMk''u']Yۨ$߹^f_ǷQ7Szjzv<1}&v٭^q|q&AzѣNLEÝmvs5hse'>xjiǦ< r;WLq~{P hW픏HxٜXUms򂗜{sǼn]o7߷'?|㟿?}xןsoyҷG}_y~o|sc{p($}^W{xTJ SwupGtzoQE\rŷ|g}eårzd|Wi}KuϷ| ~tǁmj7G}'~w~~FqVȀ\gvxz'Xwxs~wk؂sWȆ^5nZ7{ׄiIsgJj?Xlq{8!|0o9X vo8$Hrwz؃}m؊8ք}Hx(H؆׈wLhw 7u9yyDhff4H7gw8};(7x_HWwKx{[腣|xx؊u'{/y+HoXiHȆ`mi{VȍqY 2xx)ey)ٕhY_9]I8aT/G`t(כ陾 nHpSeV{x'G5)sٙ@ع=9YjfstYӨ)vʧ(hٞȗɃ)jؙA聜9JxWHɡxA!釋ynWi87J{~W- fJI*zؘyvjBʗ+5jzqrlӈ i>ɓyIhLk(8}i_:R93H u{jɇIzuT:fmDqX*?ʢ}/:6({s5xhNڐڦa-W`Jׇitp؂rʖ9 h:x9\jkV ưvPI `6  i| 0 0  נ p @ `OP  P p ^n@`԰P `ʰ^ @ pN{ \P `@ p `؀v O;N  P5P޴P vP ` 5 q P`l P  p  һ@`5 àP @0 @ f =WyЀ ` } P !P v]| Z @  @ @ ޮ}S>P ːO; p 7 5p` P p `IHuK7Ki9zSI  `T` p @X p(A ]@nӾS`=m[' (Al[5 :ۄ$s`$@hPW `jH ^xiFƚ`hAHGj| e* :r) =O2AFKFE`E5/S+XV?4d RٰVxf櫆'$`T9gZhkhVjꮠ ī~Z!' LhFafIlT,t[nVn.mik髍[3PㅜfpUz  ZZ(Pon!l;ºv=eSeE~By6wog]8anjt7VRSm:ɨ7,wvV~{Gp}YewyrO]D(z;s>SD .<*h?~'A$tus6-`c>2)afB0y$_g2۝COLbEЋcR28 N`h Frl# d51qT#O; m4 6Q pT0910')H?2# Iѐsأ`qd;Y6w T)^җ'9Lbӗc2?^"STf0HiV3ׄf0MeNsքf8Lo&5OP6 9Cq CGLҲ4dB0ql$)Fqv%׈/c'{/{` /1a{ٻ^.Fbw\b}s˸_DxdF xYloFx展5L co9fc krulcH2LevyOr`qrLe;ZLyˆFs9cݪx iJ3'ޛ'_PƝ2iw/9mVplf:R.f^xŰVLW5+YҎlh#~eg>zօfMmn'o>6 {3f6Ns ˛;leS7oŭDv8lp Wzpk_njvy}hk<ѵr[#˕lrX;`Ӿgvۚ+ɑ εekQT]o<7ϳ%N2?}I6qUQ|%:~ ٙ^S9Q|{!o=p{9b:ҝA;4?L->$;_Ee%1誧 ?\o|9ozE2~{K_|cuѿ~BE'pQ3P=O}?,@S?4+9J1 R5 @bC2c4;S7'dޣ<^#8?Lc88=~;  < !û?"?C?+AA : &MS3=5 L<<85:\2<ћ7L=C>.5`HDˮH7C8<@+$n D C#6<@\=3KE4 H,Fp`) " "i P ( `=` A%T@&U$CX9W{* 8ątH,,0C4ƒ+!b%D sG Ћ˼DktIKLϫd3H?LP[4TS>3|ʀ0,\F"KO!8ThY8ǑΫhThDKwDC]Mt#Omt9[1=?,LQM]ʵJ.}lȜ9 8q )aRR%E=/GD̷S@;՜=\SEt3 lA7:=ܳMܔQC(Ҕ"]9y JD=7%\ۼ9ŭIԐ|\Tq0)#4 6lH!ԏHWaׇ-6ϛWϴՍ4ʡNVO҈eSJ _t.Ŕր=֝W8քHl?`$+`4Q1<բչR~mQVX][};dM/mO!،TюW|@[|WBٙD0kC!٘2HsKLܼUZ SӽZc SfeC1u]9WB©ת1|d5K<\ [bUMMEey܉d;rڅ{Xܶ[@[M7_ٴ `VUFѡ^FT7JE'YdQن]EA8XH$HP,Ci$J ` XH\ |9r E ۽޽?G^v֤QET Ƙ ̂` ! `G!!"#`D, ī+U=Jq؅:a!SuSZXF^O\=\4W;ip|Ifλ,ЋP0b5\d(IlaPG!P!D)XL{ Eh(Ub\eX5e-M!½aM3 ݠ}7JU8} pr>Pv*!bI"t8g @) phTcwc |UK!@N@xse -L`\T\]_`9dE JK\VX]? qhA^X `LqT(a^i高4NnkP,d}! TG &'h-ZaKLdMNSNjҫX"M^YmRy[-4j rΗ\kh!L xi!' fȋ켊 fW ކ0&FTY! U束SY%]\LzH=h[\aBoҼp ope(nIv̫pһh_jhлpqh p(Ih _}6j`S'GT Flrc=BkhYG[Uᙢ-vP%mXQr5k(ign׾ 9mq' Wx>tAxJ1ttGLtK  LR>uJuVgtK7uHG>JuXgLuPOJSuNIHAhuMOuYMuitjZbvGgbem_^8JF9]QS$ icF J<fNjp5$؀oGWg?xq94QGR@eJTիH }&ԬbǺJCc Z,ETH@|"H<bȐ\"c@R )"D9t0ҥ np5GN4iWhoڴm۴o!*8q{p؉naJ{|R-zfӏ]>hӇ:U~߳w? T6%-0\H>a3$ c4"CcԀ1 < C_$Є0Bh#:=2?Yё$(9iF 5$; $X6i%Bx\t^Sh' YfXZӚ7T]{nnfr&r9'uKHi`!d0#x):*ztj#:ꦲ +뭸kQ hPA B$& (KhYѩem~TY(zegSw'-vAj,|0 ;0!QFH@f& BRy${nRe'&5۬oOwQꞯz;~08^g._<3_<[BK'P.V @Jڲ7p2r܈M;ߟv/F.{S8k1k\()n 3RE1D@L!AJA&Q_?@-_*# 3 J a!b s[Y\mN`)0\$ eD̂.ЋUƲs\U'L%V$" d-!#"H 1%(BL'C9L2,e)A$(MXbA%.UM!2C'P]cAq(ƕP\&{odlז7 љbyGjzӎfY` D\ŀDÌ*j` ` tp B  $Jx(E^:NjBQV%`3B ѤI d(kd ,`OHsY)NSmDNMA f 3A S0`@ ZB|BBI!@ `ӊ0sՊY5 !%BH"!4Qd9ϡv <$elGac4弓0S@U$2U' F=V}S)!khiNz WvYˉb ` ' @\I!,!RnXg V@@ ( D6c)"@t!#(f-wNvLX甠)dKc(͏,"tiWrt#*}P90q۸q/#PB^#(V09u&s "@*i!PYAe 4V y Z|t$LuFf3dy0 Aѣ"5QPLoMqjtEGό "1! L8ȝGrx$nZfW,c0 0[!4D@ew<n'@rQ1> *n4##-o=Z.hsWn*B‚$ @eX%;KTs˭V͋|_&5 .F4KʻqOz+i/=Mzӫ=A/{6=Nb'a@Ђ`3Ђ T 拟慕?[.s;t# '>7N-;p/e&!/Aa  ş__)5`B_ƝK`Id`J@XDeK3]8\iiԡeQL2ϤA  ^Q f@[$ちݜfB╇h1 ᠻHTH [3 ќY]GnRQB"VJ 4M(!fDxL+0U,Ԣ$.."/.@ܢ/"$$#.* X$G 5 x'R XN9y^N0\e|@ Ȁ A MD @\X\Ԁ g F |FpD}BhmpDPPa7V` $`9&]lVʠj='繡RnI@ @A_# @@[`8)\h`U@iOJ  DBE$^Hi%uOd0D8,!Qe"9~K$PPQ&bK\ f'%b(P@y]c8ZS WB@*\XAȅ@mǬl A$tti4h0'i8't2'h@sF_nDGgRn9f &T8Mr":7MR.E SF . P L @|1HZa8#g ꕡݣ~UKMzB+e;X~D~Olr[) Vlqy ]r@ |A xf ̀Hl{y 1})7 !d:NA @b% 0 @ `} @.,%B,AaYܣQI HP"+O:b{.(߶dYi Յʪݩ*фX,@McDAd y,"MiOgzf!ASZm]Au-A W   F Հ ̠ʌ9 06i1 |d\@\@o~oo܎/$pLUX 聡Rҧ5 PccБ7mhW uї \`d / xd@FJ@"S:!X C^$niқV) d ExaZ$0,2 jz' M ܖWLW 0eXuq̨>r4Z2޺gNd%4a%V àO(+Y.ThVWr bhAQ@8+`  Z" -_7 dq2"o &|?, w RE[ ň̺ԐD==>۳>߳?? H t>='̳'Jf51y&'{ڍ-'f) s1T̀Jx^&ͪ0PK2(:V.+SMfX(O  BD'4 <%LR@A\hHXu[[TeTFUT _!:a̱2l!"uB~K(F\ p`@-vi##a״ #,P2V1j 8Jsl@`U ƀ~^Lf0 L`@IÚrD\AmQ#@% \GrGu$xw#qD |ӑDΒQQF mRӲr(Ə,A75΅gaxථgXF_3j` V:Ze[_ qH [ PCUL_#׀ l$_.y+3buSy[$YhG* KXWPsBXfY".a7}Z$(ZA  ^Lu ƈ)e0T_LAyb\60ODeEy 2FcPαje9(zN@IIP'$ 8@*B h˪XĤ{`:_7ݮrjgj ` cW[|׵w #;Da Oh^X,sfl"<^,ÇA4 _ KGu7і~3Qm$_HDr;"!B.)xB-*|*  xwD,}@x  #8V7;ϠYdOF8i^@ʲo ([˭pJInkrOKr}-ke9ޠ{9ʍR @\(*Bw+x(*(>)̂ is>`F<H)@hA9XBC 7ذ@#GA9c'GT dȖ,=dL2qԩM4w eOFy0! :uWN͊u/WneI.h< \6{+E{wߚ HEG+;Nta%J2绝;д 4JZ%T^Ŏ ;6*">f", (p&h&T h8QЕbߌd|91NABΠAuÇ^~}Ϗ?Yso?Zhj&dD#(hp@œAȲPhnVɂ5dA@dT#fYE 38[( )*B,0<2,EAC+-4ST$1<fM[P0411H9*sT$'TOBB!ARbNlSYQnQ6VF$7At#7$ IrW$ MͲ %Mg,(> AkkhI",w==\r5i\d\q=7Ѡ4vRk4.OBǪһ:ˎ m6;ʳOL JGDa+^@ MjWdTmܑWcrф\c2Wʹ^T@[#,`-}#|VAncL|h2(B L6\5A א-W8d aa˺IaQ#p"p_ Z`ǹ` SEF@MuA$Э!8'2 VVH-B5\b xex&c'*X V0[F`E⯒C<')d"KҦmgs1ofjk VXmj0Km@>Ђ`2>ALC2x\P,^ˁW}*% ݶrd ,ƹH1䞈[ 'I:\`6HpX01A_@.0PI^S6.¥D2B+D !DRp+|l<O#lh#0 RZYW"l])[L ']Cs9+gV' Fb1gv!F[Eҕ4 \Kj Tc̕X8G 3vD@tDg0VCP+49Am&(or$(6n ou \'X!5B D)A8aX(yY*lY *T존}YW}ԣΖx@ïQ:RbA27ż6 6Qi^ B!BPygr9HaZ\; ̺[s!bЂa\rhx@<@ p G  %@H r["vHw۰Ld9{D'4UEfA9VI NP,b£-ԭ+޷CkLw~m)OBZUIG%,]tӉDH(}ÕuG'=լq$f&(I) HC',wK؁馄2!:AdiފF`d-lp ʂzF! aĊ2.%(jf @ onp rPqyipe h0o 8'Ng >P@DAbr. Zm㸰#&l c.FLp 3  ʆ0d2MhER,P0ϵ:/6`LꈘR C ]Jp%NDDfնg(*Qp)D5:  !O ! d:!z`!7^@ .pf&qj" ՔYU `FOO(r(N KO 7 E Ub-M&:L#3*#->ȝ%ӀHVQ#*Q.0n I@Ob` ,!r%b#i96Y4بihn ,2-Ӳ,,? @ `D` .ը_Y@0ĆbN\\$**a2M2+sӭ>ވ PVL{d"O)L.' 6&1ӱ!J@%:N%HSs1U3|:€bFͰ@`.@k$0sxh>c%#`7 :xs=ճs=ӳx, J<`8-E2d1/&jBb"SO`@$%A$Q$oB)DdVQl2")FDU.IxRj3c* fp#(@EB` )仼Kb  "2"R&Zm`>Ӽ$P.Ib` "Z k8"ȼmM@`L @b 5bbBmxexv&R)UgR%t#` 7D/ӈ&D?aK(`E8"מtV5Ji͎D `&S2.2-32/$T33$0֠ Pd%%c!dG^@5-*, -'i KW(񂒣`: A#{@T.V nj#tL@l#v:g   4v.H~Ŧ0b f |&BZ ¦j`D (H]l&Gb1bh b" 3zTrs?˄^u#K@Bvl@W2)> 6%( ^V}<-r j.htDDcH$6 f~slFh GL19"F&ǒtT n7~# n#N` Z@ME @LJb@ hG[P u@ic\5 :5D2</īRUC"U@1% ejiW*lt2{m#sۖXV$32Yn`@6".NjRLA\Jt` P ԠXz kS&d|dZA>`kj-j kd@"K7"),kުiL@A#8papѓ5<L"ॢT୴r#8㌢?Q'#. 1AhVxqyj`+WA-ܠm Yq4VYQ8Snu\m6`]u(@ 5N kK9KA^xSfv8"*AN(FABZ[L:$> \gje"ePӌ{iA eGѨ@/a\AKy)Xl>XdDaZV ^b [͙֜Wպ}*z2$Q/ $8$^|z}`q;бx%+-8`XBG9֍U6Ȭ<&LkS2'^qUrX&֯{ iz9AYm3+B)a2,!ނ%M!pڬ{Q.Z4(rf yUmD2P`)-*uOZ`AX^acM007R0W$l"KO$!Dz)9{\/Ja \(|2a;1<2U633E2 䖫7a7tN<~@ TzWDi+]x/Ox0T[In-ۗR%f@ =!ʩ|ʭʣ=ʥ<˭jDΰ:BqO!A5ikq;! && +*01F*h1!?jTL ! "!C AQ1$Z!:{ 4(TTD(GĘK:} 5jłRZIYv%`˖BX} 7ܹWA@0H I H3I (Uz\ɒ-Yzl˚-S :LW@ڄ:R=jI 3Ծm;xͻ7ċ q8r̛7:9UՕܛn* 5ȰRH 1 *;D A5X2$ 5OҢpQ, b˘Q{KP̽xǼ1eԠE qaTK=o[&PK!`f&Tl8#aӠZ( &-m[3ʹx$;$Hg,Aj`fU_˺ŽuZ[g` 0J 0_QS .ng\_iQ K>EpZ iL0 *PqBqo608RװCGH`p!QLVUVW$NX9r1CbIKw=zR &0.wq}\9j^a 2YsF {,UlceV3+كGH>*z3j68*+C/ѱt.bӚմo |W u?- L`;`0Ux.k)ކ־MnĊ 2Tژ#/9dRܑ3HWG<9 b<'}sCaJ%hWPl~L61S8IemEM}?t{Lj/ݾB D-p\Qb4 ΅`ûxpvw_9񂚹C΍yf=ps#Xq @PRS&Rk 3Pl}1%%sx.V}Gmw!VmGuo1-rLJ5qniG=3BtL5eo=iywvfApvx׉(f LkxP~flk (`0> !"kBBQh0#"pDP5d m)a-1> C-/KM,g莜%PFbxbIbrevT$$nr?  %KnBw @eo6\ofp< j^6RVWExk֙@_Q:  11!(1% 9#p?sP? dbyh#qҒ^*0y0AP }:o8:$ƙfᅣȘho8) gwB(CxwjxW e\x VckpeUb*usu35@3Vq,5Tj0s6D1cIHA~6O*:4'jow<0.Z9hK(( L8:*ipX\;kZ.]Bq,U`kk$HॅumaOtVr& $#{ey@SpBpk@Y""fs-b0ࢎJi4K0iDŽ5r(a p8`c#%@雇`ưqfN$HK%k%&u揗3:qѬU/SfA E&~I˱p8KrJKPW[XkYqjʨn֮@[#wB IL:*Tgwb@%e]zP$^XqW,.3M ꇆ9maR/4$+Q_0''0s@ulE"`3P>`B ;K%5U+hA[ Y PN;B>;` Ш Zֻ5z51[ƤDdIm0%0Y] KHp˸Ccnfils&ɻ'Flh9AhYKAE86 Z&+VyA[|Sm둼uoo\p{H8Zȹ?Ig3\zOAۗ3A+ke2X܆),4:5q8B`,5+ِV ;Pa K„R1J[S[ j8pd,-YFj@^,?ƛƝ|&+Epy:3kxeYq;F`0-Zf`fP˶|=== g@3*FO[AOM;:Rd6`\@t<)eki1'~B[;*C  h>GEa2FM<҂XPy/$@ X1|X(/yE -C 2]@:])]#8='SB}ux%,r i0TAQc%B507@@srJZZ Ie((7zח [6PP`-) \fP1F;&–!-0Qd:@CxI0;V!Iy0- 2)@(-yF-?0@ c:R+О2 >-*PE-CaY(/cM2ٽDs\vhRIм٠S;@I0f͢1 innm||m+[,SoJ`KPrȍ<,)R`MMw˜"T$:r'55`7P8`] 11v2%׫0(Bd(:LII6jC.ޛ<؟e0+ em;c|-/3Ƨ~1/;3cmW)@.0DzPg=,Q!0u(<.'>D"t?,?%a !-:q-4Z#@ P p1 Y -i{\*r+Lx ꤎݪ(mIZJY m{lZ4Y!ef9$-c)I+4hz!"ƿ;OIR a/cOeogikmoq/sOuowy{}/;PK$W,PK,AOEBPS/img/apex_prodlink.gif!OGIF87aJ|LbbDtvtDBĎԜ\^\TVTԔTRTܴܴ\Z\RԄ̤,Jɫڱ~;M*\ȰÇ#JHŋ3jȱǏ CIɓ(S 0cʜI͛8sɳgƕ JѣH*]ʴ'PMJJիX>m-ׯ`ÊKV-[]]˶۷p"K] vMh }SV8aḈ+^̘ޗxd剗k̹#|tà t̗WVw۸s뾊*|J]ig#_8rwKNMUGgvW{8p嵭_ϾEVgx雗<\|yv`rVhᅛKjy9(" 6,Wf^Fxɍȟ=@)$S17#dqy8ޏCVi7yXvjِv`i晸͵aP\!prikщ|~*9J衈&*c4裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫌*무j뭸뮼믟 k&*lF+Vk>v;k覫+n櫯&o+{j pG.u W\igq&q'c.(,0,4l8<-O!#<$L7PG4ɶ .d\w B-H{}JTjXp ؒmvڳM>`Wxr7 }a{ kò&~o8*Rz鵜~:.,;J9ٔ^u |`2z*WO=}ww{= ߨ?jʳ߼骯:.oÍ}*i\;Wo}h>5y P:t̟7 c 5Tw䥯xc b+rtD)j̈́',U CB9P}P k*y_~.CrB,$jb֨!px3l[v+ns}pDaH@6dV#B2҅T#hC;V̤-j7?RL#d! H /Vh)#f ŸWɈ,iY)[n.K`:& d&S,ԶM g.)jfÚT6Lq<9tbjj'qzwz GeXlxa\`;76yVu Px'L 7qZY-#$ksifخMm|΀0nЈL,.8"$iVZVt=jƎ0#=jTyzšFu]MjM_ӮgNָ(ۤ^ 37MbǶ>jX3.YMjy₨n{඙縓l_}vη&MbٛWַ~+`䓔e.PP8VxXxg" 0f@HÄx)T*@PxD@<0@Fr|oh?GC Pg@ІrÂ=p-XrE|BDž W*'I C è  0gЉF苳Â<<0Ѝ'᧋rluG8dE p IX+vqv(;,X46;59P4)@PhO0G"R?’,1tx:tAdԓ9ĄJ8)?;EyGfP x I+ xk@لr900:`/6)@X?@/(u)wYwy*{11p[Y\i4VdG=y 舾ʘoXƚ4 >)- *+ک 0jJn:ڗ$ڪ:b6i x ( ֊b^5,z)@pp*[: gZҟҁ6Z   04;D p⢲Ұ]Â)B;B[HkJi뚒y qV{K:b s/rN\|ݴ7S@ Q@/S]Ls E#~[F۸Ƹ·sL3;}yk->En/58b[QNԹZÂ!H({*[qrF+k*C[/ N(Vʶ43zcv)ś ,) qԤ,,)ً ȊȊؽ4Q w %,H 9srǭKȍ)k y $|苢Gxy?2y!ؼi3+:w2q9 ûJ_cYg i,L+/L:gxIz隰) .)\u\#,NQ)̤1 8å(jG I!D \U*XORZVZJƱ;z˳rLǸ拽4,J D*LLH\ ;ʬ[*ǜǹD{)kpͣ,o|8+ɥ̣XH3PelXgl-J=@]6 -m m M0]M Mk$.#](].',-+0}-/4--3]8,7<~@m?D/;]H}+GL}yC -qW8,.א\1g]]͵sȐ<@Llk%.<;,z]rWLngף #: sowf䐏'Î 1]tDY\ոjب|Bxmئ۴-]۸mmۼҳ,4Kl}Ɲr!EL܊5KG,%1 aݟT؝NC3D{ 2ɿ,B1]9}}};lu߸| M}},- N̎ONW7q>7}Ǫ,#G-JSÊ)NDEJݹ|:NHy-9I d"ۻBs.>>'ΧAΓ㹬<#F.)Y:* 0Y3{^>\ǖȪ,GiW[4B?IhXn=.JIZ弌Lz^Mk N葨?"*c~ꑮޕ֨7yB FэhltK/,崎{b$*cnfث2:. r,7nV>ξF.>n9 YFSپ\r>~lG(TOmt d)$=*:mN(<1TJ*)N;UA>/W$=>MoO?qAku oo+Ow&ΫẰPѺHMS~w|m?p?t/x,߿}ͷm]ަ֨OQqsēY}֝߱o֖Kx_|rP⺿ͷo(6ʿ?Nk&X7,[_)t¤=X](@ 1P8xX(hȨxH8IYiy@0iRxjbIZj:@(*9+ kHKz:lYz"z:M]m} ^*PP( ^j0`>O=z˸Xˏ\8 4zhZQ!0‚ d4ttK!F&m̙4kڼf{Dڷ1%C25ȕT'9l-Ŋh$锣~$ڒOk DY'7޽v 8.,T>}fJ{V-I_OeOYlZymةc%YZvzye: ;nu~ޭx24饍mUʠbeo)Ϭ|zڮ'ԥz+c˶n}gځۿwo G r%Q[EIG 3yv 71O{A܈*#!vb.ڴo eXbgJyc ^ԝ'6DfNr^axAFs7$2Nxd4/~ f~y wlqY`=Y&%^zv!.q iZwZU{ ib)L:VdowP0',٣pt:tk~nk&!mUiWoe_1%l> W-KlDX/B 29qnlޖڮ.w_Kok/3ooMS8O_Iq԰"\&/r. s2Ls6ߌs> tB|rltJ/tNROM5N\]ZW5u*vdLQ)= vch?ęJ]߂[U{̊_+gM]C_y?O8}vey袏NzМV^9!,q@N5Î;%p]vߞ;ɧ{^/_촟 u8B<{k>| >^e>c€薠(a~&#Iݪ~Vw//W#=vj,Rad-"6P%' &5E;DuI6,|L ܗnъ,\8bK2qӬ@pH?M]he4Rbv"lbS<a %hw~EI.aSwCT*VB1sBfGqbIuSRٽ8,b x IQdP" ! 2> БY߄7 8Jrjs%;MPXو-9TBTϜi0G1Y'ªd<Ծ484YJVQM oj̈́+uRN(Ƕ~VsR鏀rn_bh%_ @7ьR❜h,6{VKF1\1iEj|t%KU2u'(6ҤW;iUrj!jA%VT̒D5faJְn'b-Yj:NΫjm[J5utj׼u+_ Ư-aK"vm,JvP,e/ټZ6,W7Њ6iOEȢvUki[ RmJvm{-o \b6-.k*8]sBwԝtrwO׻y[׹]{ʗ}k[ꗵݯG '[+ ^ KZ kحްX!]XxԄ׊_xNm1hcjh Z2LTdpQu_*2_(#kLve)ky!#>0 l` P@ȥ1ղ8_" Yf6*oj6Cu&)gi L L+EKCN ?e(>p=kv9OG*&:2P[o7xo+kה[{m#ED:L;U,8as+#g_K &8^ ho@ {}?nmؑ]~hf>3zaoyG4m4Bү?/A/7whPP 耋(h^SeS5A& #H%h')+Ȃ-/1(3H5h79;ȃ=?A(CH1bGIKOQJ@5UhWY[ȅ]_a(cHehgikȆmoq(sHu;PKĵ!!PK,AOEBPS/img/cube_view.gif$GIF87a=ooo3f33ff `ƙ̙fff3333ff333333%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%,=@@pH,Ȥrl:ШtJZجvzp3@.˄zn8,~fBz|zd~sst̴֎d{ChӰ}?Q:/IH8y3jȱGC?Io!O\ɲKa"IP/sSRJ7q E0΢)ɴS@?JJF%`ÊKٳhӪ]˶۷pʝKݻxWlI1} XV|,beœ-7ϠCMi6yװc˞M۸sͻxJ3#_μTΣKTTPGv`3/ixB̀׎)QB!?u?O?Gg(E yIP ՀC ʷ-eaguzwڈ$5@(vb,h֊.ƈV!!bfQXg2EvDe9Vga>$鈣dAI;$^@^n qhelfpf#yFyQ*%eU'tud~NI$l>y$Wbz)pI Y䡖ixڨ'5g1 bJk_*7.$V(YB9*k K)2 *|kmז*ijǙڶjk.KW2+bof-*Xj9d~;pqF;-n-ˮՆ #p g"e&z鳘|Wp B=+C^g|\(/]B]ڧ,uTpm,b3Au[E5J"rEwݣݽ׵=KeJv: 4K|hg$Vn圇.褿yҠs~z.r*/{'ϰK3CSk+~2.gbke2 b{,l5jcb͵6yj+;}R+I%%YӺ̶lY-aՔrC+_Y->uҬv\vݑ6 *m,Z1{nvuX^wE`# u؋e 0q4ǷnY`֭X1jawE2{aj"rdE *㐙㲘,[+ˣdN5ͭj3Lg4ɹxγjܱ0π͝MBeІNE;fPC'4,m@ |^`8>`= VդejZ֬~ckSPտoZؼNke^6-j?ѾBX/ *}iKwժ2` p7m ho|[7 x o#| 78''w\ x= 8WKggs79+6<,xEŚ:|ԧErS)V@>%jWT&H̩?ԎK4L{.DK}tπ<(^7;.vj=?]DxrF#ONޞK"xGIVx< 5qSxldF,yл~O^va󲀅{~GEcjm[տۘ{AAG$Rh~E(u$݉uTuP[~x:~ǡ U8N!x;a-&EtM7d%!y'KqHN~ (Nvj 7OH#uvǂnwR!XHJ؄PhOTSh %5}Z(: 5V'Ulg4~*DYj9]tXwMd~#-BZgA[W8'F)C *DXmx`%*D@Y"f㈑2b~aXi84xeUX䅦׉؊qX@PD׋8XxȘʸ،Θ ';)G[E_EIau~`STkqC(D_u!`~:TuݨMߘUExxgxFDO@7 X{aT'<ńG{u(NUMFw>v0U7SpdOt갍Hd 4&H;294Y6y8:i0XU]CR1t 5g3i`ѹ,9e-c9Y0&\Xәx"Ud剛Uɘ|UqY[G"I\_93ei9YzZɉi5ɞۉ' cL PO )))T iZ#W),K@5)*h95ѵ\d991ȂK gӖ2{Y]y2H_J{nHV JQ*LVD杜Wک]1.$J٥fʢoɦ'5%ӡ:*ij1 @ʩ赔%j/*0-ڣ:Zz3:j0̙+m&Zjzʙ_ZʠT*aٛ:Iyڦ ^{%BrZrꤖ3i _A,§Z\کřZJJ.E:گj:\?CBڤ;Ȗ Ke^`;s1jQ3Y^jҺ ;ZjjzN.k0QJL۴[ W9I(*VYùk:55(Zˤ6d(۬d>V[cbZHWoۮճۤ}jʵ[Vzyⴒ;[P;TG3[c 4[ 5y fʳ7k3" d+sò@ۺ; -;>+˥j'K[%4Z6+z۽gv+b黾+P>;k={<+<;<趹jz ̿k< S\C~9"\fFK;(:) .ô"i Pnc×iԶm?ë6ĸFfӆL@\j"A6TG\Z\[]N,_,tB7n9t/r C89Mp+;S-8Uw!RAXTT,e{Zԧ8(N'8wTA։G3s~&4H ͏qpxTؗ=S-xStFm{SFԶ= xۺmfܻh]ܐƝܷ, |́7zXHȇO7y}7Řmy+mz' HB }{;(1H H] |y~gֳ'{P{pʘQNG 5Wx(NA24^9}8^:>n@8DF~䪘Jn" GQނZÔw-u/.E TP5VFpS#x4{WT[?xn$ L=}}Mإv~Ff~䌎 .?]M~ 8~~X۪۩߇[gpgvV3vaT..h4Թv IuCpn%!؂}T{^8Mx~-^ٕ>Wz^y ~Փ uzm-?xfF _^n~ kQzSKZ$Z/b DnuWqw8HVŶO:3/P5oMvwH|6aňa7vI{ГV7s5 3ewe[#(rlgn/p_(|~|/<x_G_ۭ5oQQN?ċ/R*P?G"+G_ hEҾ=G/__}Ѹ&LV)Ńhw Aե  @h,HNA :%mQY.2mNf.d1n/p0@KK02R RϲSkSR*4nn4Ӵ2ow(ԖҶָ0.qTjΑVK*yۜ8Jݼt}] 89Sp 4+ШqEI7v2DATÇM/H 4r#~L`@oQ#H^<*cjOOQHKm˦V&LԦUvm)T5{mZkٶun\sbpo^{p` [qbŋ7&|qdɓ XY8wthѣI6}uTvvղi׶}6kܻy.$VÉ7xr娑/wwsiƼ3,= w~|ѫ_><ſko_O9/?#8®=[/@->&D@ ;E ;<9pEˋ>C7Ȍ4oqrElT/E$R r]$CRH.C:hl'ń|4rMϢ\*O23atG ]46G%oR"Q!|"OAUQs$A3M%uUKmUWa2nIeո]y]_UTҽ?Q|-+EYAq;[/LeSgZdd6q$6|TRZIl-Z1 ;SzD_g[8N#<` d'5xÇH.Ά9lc=xI-9fe<=˓IXՐ7 c w[v1Ee9rCxs_vgzc"q5B횶&P?:8,[mnF;MPI[wplg4UO \.>UYMVEfk1zms [۔\U_\җcG\SݣSnUD:j#L:Γ#^u/=i͓=]˕?F~|}~tՇW85uruw3@h>Z_Np;]StAyBPq(4kTx/jpi!fClQpث?MyB\ -! $(!օj[`$|$ +ٳoZg#NF<gyWvD1걁tʈ|T(fg| XѮj3]H4FRy)$ވ0.hC)F5<)G`4PiQ q8D0ib!"ycQ iWo˼q mGkNQe%코 2Ppx b ĠqdSlUs:miL96ucߍ?]hvIVd'?9F&\(7(򖹬5)ka1iraYn_f:ߙv٬g>Y~,hBɆFhF?Zǎg,iJ__iN)jR:F{jVzpv-i[Wzuym]u]DY7nlgpϖTi_q/$mo#]nsVnw]o{o p˰6^%@Rp xx'|5gI>r!WyS-i>s1ys=ω>t AWzѓ 8qCVxN ]F@Nv}پvo{>ww{w{ Nx>W|/?%_G}Bpvsv 0}e_{Ͻێ O> ſ[_٧w{௾}|Quӓ_}c}vp44 Pp#P'%)13;?pCPGESPQpUAackopsPwu׏^ `@N F/8 0}y0 {P  P   ? p 0  0?aAj+ 1-N 05`+/Q1537;GQKO1QUSW eqgQlaQ[qYc{Q1y Q .02`1qQQˑϱ1q߱k R!R"r""#"3"5#7#;Q1v `&kR&i-``''y2(r'{'(((r())R)r*r)*R**2*r+*R+,,--.R.ג../.2//r./.2 1S1&i&3&Yҷ(2FR373;3?4C3K4K4O5SS5Ws*H5_6cS6g655k7sS7w7{"\7S88+n8S99(!99*)^&S:A;k+;N̷AB"(# (TA ;$"~> >a>$ ?A$$"j!=}b"b?@@Y >SA$ ?@+? @T@I9Bd bC(\>Fm&jAE%=i%'$&C! 0TG HaGY"aVHIIA(As zKGSE1Ao*$HQBI;AH!Kt"ҡGH"baGLJ%TIM5zQ%5"i$w y^49:x8*褜jJ)5j)M%z%('؄jvjΈ1R i!¨|"{1쳠ncHKmb+ȱ^vi7'6-ڊ nV3֛,z]6+Hl1PD"-꺋.V<ͼ> Mʾn[,}+/Igßjˮ2kh clͶzjpF364Cl\ޖ+ 5$s>:3r2%gdm)_z_KSt1il}|׫κY yV^KN5" L9r.甇.D2tNr LD! B . !!6-բaUUG8Br48%jopPyx)6DK\4 .rNlbJ K>( 5ȗ* 3kt>yDG=D "c0"\K($P&E(B(!E¯$@RBn A qA$e6ƴ#U S@ * ˆ0dO <D<R~'J=}%_ {8UGl`'x v0z!+~-fX\ G22Clb'.qa`!;y(l@Mmix>eSN򉗬b9QF\b9o-\/5cγM{f:er8zΈ6fF;vσ6 hKgЏ5 J:<6Z\n*kY=._k֯9[hUŊٛC;ʭ.G86w]\X_so65W;=ma^5ϫvِMo{{*Zo;w+{F'.;y{{7]pA?~G/^0=0X(hȀ 5@~uvׁ~ӆiRWU{g*e'o灊wvi'j7kG8x:P>h5 o065؄9Ȅ8؃@BxZ+T'HLEn6R\c%x&؂ǶHx`v;mnȃ?8Uh[Dtv~iko~8R8gdwU)8f}jlqXO8S5v(i؁Jh(H>XEUTWd|ȇHxXoƉhe8QXaSY(}XHXXhHȈ@u(W[v7X舎҈ ( p 9 I鏂ujE☑XxHzT7_Gh|7|0Y|71Y/) f>)}捐f)Q47ɔ28);ٓTɓ!NHH؉Ww㈔hO i6M)UW_BiflQɖPɗ/9?iPиwr\Xx  y i y@Y&(yȒz)hٗom:^8UIF}Y{)| &Ks^ikѷ|t%wYvǘ uY$Wu8ٝYy虞깞ٞ`RYyUq#y`"91&8aC:a 9#+m&#:jCʡR a:jӠglb'8 ڡ젠@ CZjG*Aڤ1KR:TZV tpAZU@N@Q^R`+3J0ҟmZ5cZeJz|ڧQczSʥic el 5$]Ѩ]џQ3zb $RJ偧WJJ@$Qj"12=A"s Q3*#%$"j*02/0ᬾO;Ic:09 $ʣ@(*k;j;<*2ų232A-9):<:bds (7"O "Q#ڴG3µT:%k [3Je, # z.x3)îr(x6F۲z@[7z۲p_;9V[MkNԸ@)ĶW㶷8[)4c;"ǃ28;3c<2ʲ#-K1벳v{4/4*e #3C;k7B'#$c<.-K0+ý34[ӽ>;2@뻿3Ծ;{ۿ< \ | ̿DIP>PQRJH5QDKudN^\YlNULδLY[MMNDNNNVj % 8\l xQνp\ ,Zׅ25N267!07Mu nmS.{!C~u<;:>~ y֦8Y♆U IY}N~^zTyGR}{.~'hN|YսgNyxNB~9XNfy-TMGGYɋpȍʈK^S^fx1nO鞨xHɸeSh>}gݘ&>~D t>~&H鶹SŞnIxyH־®9X=pt%aIo]c +"_+?Yd;eޛI? \^0PMTP\?v.契~zT1^U"O)"َyV,?jtv_xnOpo}h׎Ϛo#@o6nșt%Oow|ο+/_޿O_ZC?E*ߟ IJ߱ P:A#pD@tt`Hd(9IXyi9y)ZZ @h(x ii+I (;;K[ Ů;Voޭ;Q'ŎA ut/z 'ՑRZvҩYYd} 7ܹtQҼfw 8`T:Z8':~ 92/˜;{ѤG:լY. ;ٴk۾;ݼ{F;ċ?<~f.{Ы[yPܻww=D?(X=t󠇉Iu&q c!_]bc&[ۋDn%jFK6`V"EWZ{fTHgZvIgs} f,b.BуY 9h~4ڜvNJKxY a `zzJ*6iɰS2""묶J̩k>l""llUTjj,%F+ɫ^0Rk& nKannKNZ/L=ʖ.$:IsZ1H|klL<scq'KNLr)<3B3/+c-2Lt%> Ft5uV)R+us0.{!kfͶi.Lq;o,i ݱsv@6E/^,sU>*LT=aE5(JI;r -tm޳ϮƲ--_ǽN9vͅ7hx6-j| F/ʽz{ԯ3;߿Z,P(@Y2H,L=`nz[sXAuf؏ -8ep0p+ 7o7]V;55i 3T&q&YB&>wRdaH+*nZ`&B11 IoG \j 2$ :h#\ǭv)~ %5QkNs!I/>"r,dM89d2"^x< y\7mh`Wln$|':nh<[mn1Ey5&XI԰$3yRU˄_׌Kr!*wyD" WFBXP@ױ5A  (@d/q#HNmwk7|,~w] Om6DJ",%#ӣF+qU2ŪC#V|HPZajCy }E;ul3^}`[Qp\)d,z'ws ^z(}C8KgΦ?|?"sEhVue,(Hh Ȁ (Hȇɗȁ!#(%H'h)+-Ȃ/13(5H7h9;=ȃ?AxBhCxIKMȄOQS(UHWhY#Xj eP6OV'hv:lk؆qns(utwvyȇ}(舉Ȉ(艙ȉ([V؅dLV_8(c(Њ(HhňǨ/BXhˈרȍ(ȅgk8H(8HMȧ(IX˘TN֏ i)IiĈ d)!I#i%yRȑ]X.)hmPt ()Г?@D)E9I0樓OQy* ؒ`Xi\ًR) hiliyim)ly0@0&MYc)YWɄ98ie9qv閔YpYx| yT)CAYit9y}ɚI郧ɛٚ) `y  JyiiDɔz)y /(=H9ٜɜi}ɗ @멟ɞ }蹅I2X@xɠ'﹜ IYJٟj: jJD IQ&Yhy3eɟ7zJAB٣މhIJ)jQJaɤ?9Y<:UZ*p ] m٘MĖ} 5-ڡ4Γd puMs=۶kץmͭ],؇+cmٟ-ڼͧ}- ׯݞ=MR':ٚՋя-ٮګ ٜmPޤ-ޫ-Fݱ iXT.!N#n6:0-1-ݤ]7~9*ؽ?2. ^ӍGzRꕺ跂;2ٔ]_NZ>l (()^ @N0>C=i.ҁ.p^]w>|hߛ. ^ Xl搝A>.^Ϝޕ~z.Ǚ..׻ w+8Hx.Mʙ~׎ E]|X>$>i}>y3 jН% e1*>֎꜎ھc^܀ݞ!QȻO>͵Nid~}C= ώs~ށ^{Mߊ&힎 P\^`/]O_iyt[[o*o^ef{cϔh #9OlFo<,llOpj_s=Nɭꐿe9Ϯx|/SЈoQ_stߙ/̴۽mooEo^'8^H?7_Ɍoo/  % &:˺̸(ߚ    6RAK+%t@UQxTV2zNu9]It˷_K")4H!%M(XQTψai(NH;&]zYg84XT] u kٱfɪ! m/ \uҍ{YFd oa‚ Flxqa\"P`2X˓+k92mB|7I&=j٨5kF21ɞm ĉ߯?'& 6FVHMeDއ^!5""(rL8-"{&h^;r% 3#DޘE&ɞ&\ #GP iy4Nj%UQRYW_dB^%S`NcX2Hfxҩg|g)hwjhh.h:cĤVj饘fv駠*ꨤjꩨꪬ꫰*무j뭝J뮼+k&VzijF+Vkfv+k覫+n2G,l'F,G, 7Lgw s\/:/QʰԪ̯8<3{o/LѨ 2#6,TWm<3([>-6J6=ڹbp-7Ztғ*_GzNj)".xރ=jϞ+ުvϊQ-褗.zw3zzNꋷN\`];#y߻.|J=}{ߓ_7y}xD`JQO +;L-+@A2|, E8B02`w8$XTByH7ܥ(/| Ȼpx˺C%ML Y.NЅ`r6q~; o%@qmxx<1qo I8*V6#fo !'IJf̐ɪ IAi\$-IRRɌʵ}r(OIZ  w^ 0Ib-<2f:4II\̦6n˚ 8Ir":v z̧>~ @OgpRҗІ:TT DiЇ~J_bE7JEt fE;)!B#IR~405H[j)>K}hګ)&^ӢRrB5IqR;MjzGA M"QH զ'% JhVUip͡WyԔTP`A[]4{[J͕`#ƎmҺl'!+΍,WI5KzKw֝m'gQK۪`KC6neúRƖ]l\w|`%7,j /Ȟk\2+6Nޓ`{y9V~7FއFR/Uj?^ 8]7aU~Kaסm3wm_T}cu`ѾpW 7/oWsp1Sb8# /Xq<_7]VFqi\F;JO|G-/tDyЇ^ =K?s+V~r=*w`V0!|QHBY2'c C!5^=w#S=IzxdK\'|w=x)t^kڝ#1v@x<[}n'tuo{G8ɛ~^JFV{y>ֵ/]a~wXܮu='Z~j7~[s瓌-_K˟Fl8Xx ؀8XxecTˆdZ'[mm16ւFă4YHUb/EU]8{ty˷s/tɷ}}qڇw~T{{煇pAX!TD`T$;SF:r8D3E3}g{SuBg_uu~o[giWlx:{ALjT5TdeVR;hvC8$ćO(|S'xtHyb(~Wx¸w|@pyUVq@z@㊯cuHP87q˗{sHèx~mHWK~1h||<ӏ ~191eu3m ᥐǐ2Xk "9$Y&y_%0LM)H1H3$礍;iͅ椓fo*v#"w|u|ZIH~'r\6!L0XFMU2;MrOBbMwdx7}\؉`t(qwxG㈕m[oyvU>tUCwVQogpFxgxv"w'|9Ȗ9MΨWW%EUBf[RR8y9yhG5|h01H52iĜǓCş۔ZJّ:Zz :,I޶EGF)=IeIE2ʢq5q xt)Gg`tiҹxpU)טɘ4ZmEJ98^ቤ:IxHDpVJPKʕdW:H)6FV+1qyQ Kth؋өsɧ}Um[z?egzAs OxwJ{ixZIY\Ʋ)>Ӟ:SIAtjCF.dκ1 SKM:8Ԡj:ZzʮEeگr;{ ۰+ +R ;{ZM۱ "[&KH${*7,0K:.4[W36:38>7@;D1=[H J۴4{NJ R[CKV:Z۵1˵^* b[! f/j۶&+4s` VZt[v{wĊW~Z{۸+k}+5lCdk/Vk$)iR2yƹ+2r2.'Cy;NpD1GºkZ,/;opEE˽6Q-{/û5N[bcHþ~E*k3/R!oHp2$7;  A/3 0rrX)@ %+-OUO0. NI۾DO,-B:L+;)rSR ěK)V2sOeĢEx \L0) n7H`HWPRkPkfR7- @*$L{BRZUO06? ?B-,4l>HéR-C\rRԲOf*|]OU)HN\\w^/ /Rf oKKm\ds0?t9/(`Ͻl;N. (Pɗd(PK6HPHWPƟ}7ZVEbpl|b CϜ cP=) / -~-mNH,=̝MLV00=۲ls;ͽ<^,CXJPۻ v,u|\]S{ aeMLݚ֑^~븞j$ڼ.^>n~ʞ.^>n~ڞ.^>n~.^>>/&/^/_% / O o ?O _ ?/%($!'-O1o&9_/37;?_:/G~NML?OVOR_XZY\[?^fObOll߱Jpertsvux|~U/=l(`>8DBC?Oo_?)_oo"S @-pn~?_ُ?kro. mU.c"ž 00 H(xxب(I i9yYٹ)J j:zZں*K k;{[ۻ+L lR<|܌ 9M=X}Xx9]-^nm~=NNN?/oO #xໄ :=)NlXE81ƌ#<9rc4f ň4gڔΚ9y'PD4REɎ.uZ4yTZ:*\z 6رd˚=6ڵlۺ} 7ܹqEҽʧ^n7pTP '0Ê3~8M!O|s%ʎަE)IuiէMvz4ٰiˮny[4E&b~7[|:ڻS` V>qyFh%Ƚ"#j("s&)b-57f!"D4 iɀPpBPP:9N>X`%Y^Ya\Y]dic٦iv™'z9%DCh4j(*zh4>g}Ngw^ʧbgBJ)J:jj*eNzTWHVSM54 9 GljAT`&*ˬV&X~ n5.?J 4CJC@%PӬҊe**(/ O`B.|!:|/6Lb슈cd5Hc%'F 304<3/)m2(J4K8й)HG q,bM/3^?vp=\/+][n~r:/`38< y䒏Ym֋}ݜe.?|pܬ~]ݯ{M/7*xԽG\n@7>п.=G#UsH2(}GDׇDuAPqCe0P\WVr,{`x(XF .oX$θ5{aa>Q!alX(&R_Il؀DUq!# HIͥ )é҂`8xJˁ킴\em ͅ$V {79W0Ү.J^`R*X=SRU5if&p LDiMh餦:8\Mxs>ON2WX81^Y#@?~q#E]cI4"ot%)NJT6sI\jp!m/:@3]!mLIP (8! t7(=חɕ6T@j!Q~c$ՄV,}Rʴ޲zt\jYڲj+w W2n1dbYե 1E})DG)QZM2u,emE4uD%G{8=QЂFIQ [;MSlkC[Գ5ZNvc ;{M3zjrmU{7ƅ|]кֺң|w#W7*V [-ep%bSbE.'ײv0Z`ls cMc+Y |lOav"[V}}wR_?I*, Λl2-μ}J)e2aeb\k{7H39\IαJd,וg*WA<LY 0_ iKZm;Vxƛ/]KxtCiTH@Nkx˶[B'PW!6L*Kcxn)O~]R:9uo/:.i.s*dP4'ۍicv!C%'˖ Ϙ ˚q]'+qo[WK(o@71̝KI ]m% س9hVܰ泦ak#3&Oٯ_K3Vz4b6$&snO@8W 6:Ծ%;-Juˎvl/lLjI5"VP~!g98lI=ЦTgIMpᤧʿ/?9x2nyxG>gI8~t{DkowFt'-H*w|GR_9JЁWHC$1=9|ؕ\|xgHgW{Vyfd|F  `wrr&4B(;`Q7n nQ.(>}Gzl1zzGf z/(}UJ 09+G.qI8FrquMȄ+h_[x>xTXXm^Xdv\|(Xn(tn-r#kr,kC -hE cwg}(~Wwv'(C~Gxwwwl6D؆kR{ xbCz\G؀73ZX|8 kQc% D(%Ɉ%Ȍ(HhՈרȍ@e-߈ᨎȎz<^>xNh툏(f d\}XwtJV5TԊ?֐=|!Ɛi 3[w S6nF r}h+)=X~׈m-y}0'j.i։0EI#aT`ufW Sx(V/CU 85yfA.akyt&L'tHro 17VU^}@;hf&{?HiяDyYdqYUa(7o_񏹂Z5]yXgyeesg8qyESWYnVI{;5SȒ5Hb0YG@i9Yى9(Qד7)XG# HH ٝpCF}xyϱ Zיif)m! #*%**apȡhјn';/9NmxnȆC*EG XF:Im !ꤝ05i٥0œ:J&J$j 9Pvx/Rw(yJ(z(oڥyx#?4 档y>JG*F Iʤ*ڤ<cF *::I(JW:jpXtSrt{ie3o UzEjʢhf|*v ӪڢԘ:ẙ\wpq٨Tj>J KPmjBZZY 9nXFӫU#)pȱ IjZ ˲!kw~&Ke*-/ˏ~*rF("8SvUlg3ʯY SRY{گ)k*0(]1 &Irxeeꬊs5kIڵ٬)q~۷"zjJ5f ttX TiK;4bjʠ^ UbK V zZJ}En)1rZgۦ\ۗR h{׉5 Cߋ[0vʶ^j` {fKۋ oox _zkԼ{ ` 250TܷokƬk# K({* 05,Mݟm}Z ި} ml- {܆9^ =]࿭6~8GM խ= -K0$Gh~贘LNeO>POn,T4n^%X#nG|PZK'P)-%5an>~>~~*5=lJPLбjrC>Ȇ]mMO7m= ,>F.0^=: ӊ}ȍ^-9-FH^ JM;P-],\^`?r( @-/$&N>L-y m6+/QGBTiOBH))QʵiUVz,ٳ]M+VQ6rKr۫/߿~dIXeKI"8JxbĎIvh:@w^M6\p#I Ƙ4UHmXSh 98q*=wԈM;@_}<9wHݻ&KTOouk* >F8v%q"5ހz륧 VҘ1Ce4276AU%g ~i)U)'EtPgg$|'NHF籧ik0ECIs2S衆 (F(MFD7jJ:hrUS%rZll 챸echu}-`VK䣤"bmmOf(.+VhWx@fkFپ))˚/ OaS͂, 'B k\ !&|r+̲0 /|@/l3:; 2 DmH' "B !8 Q?]VS"w1(xq_{+ lvp-7+@ xߝ7vw{ 5P'7 2 G^9_n晻@,6ا=ve q>첫]7߼ NCι_ ٮ:ٱΪ}z"TP]@@"T`_A?Oo@(Lg:#8 0 pp`ArЃ`ߜTa#.+K/Ex+[IBSt$K@R\`HDQK]"lŧj⚦XB̢lhĆ1Uf<՘B6i 蟁x 9X J!V!.ha>r&X$8"ƨ!3b8ި#>-(PDߑ  3C"Sz(3dP0Zpe\Ne^vI])im&q9n)vjY}jh袊6Z(:J褃Vz^z\"[ QHjꩨxF꫰*k7j뭸+T7XXy%^R&jd]Z 2XφnW Tz+ͺv޵. 8fjw*]' p*DX[TËƳ5 0*D(4@(S!˰ 4׬6Υ@}:ӠQ͂oVò7RPWt[{QGu9DmhgSp-tmx|߀-'7݄[7*жnc>o9g褗nyG圳y{筇{ߪ6y*.o'7G/G.M B `tjPHa=/N,oN]?L=g=(4ݳ@Z%06p` PXGHɳ*ֆ0t_6h# 5mhC$ ! HPOHD ;T䯀(D'EpI̢h$ _$ZRE[LȾ%FDdHY!bdDC[נL( 8'"?* P̤7FK)M5VE]IZz@Y. K ,@ޖ pH[҃%f:yӞ$h `4@r@@VrSxʤ#tvzR y!8eO p -f =2<$ =IЊ摥E7IDP@ & t$%Fר)1BڔA_Dp`@ RHubKj 1jPZMUB`-aVFֲUmN=ZF]ִ.V]im^YM: 0YSazx Dۿ* -$ZP%7zvtmha[д,m)yE֒MrŹl,[Я.ͮag H`w'Nv n; 0{} N ^߷M+TL x[^X݋anؼ~+G'vŋ0f]LGUd[@N_L"/lFNs%;ɫ\-F%5dҒ .W-^1ٱch0r؇e˄QF" &E?]P=IOI[ZїftNkӜCMJԣFu!}jVիtejZǚҐFtN11+9-m,e4,K~6 lhO̦mmngvm;ྶmtfoxݝo~n7M\wpʶF (@=_: 6)DD"'ǣW>r0Qr3WusԜ8:Ї`4zґ D_ӥPg#J1}͕Jq {Z9s;s;~z{w O<w|!xK<7wCƐE:RPdQzէW=e_z=W>}{O{ˏ>_=}g/QH51wKg/9\WgVg pDuHqlH6100hWf8 P"X&; P'202eYve`.".wEe'B<&@8'DxdNv29Ge7h,1"n0iFk3b8dXfxhĐl؆np(6c9#:sӇ~^`86S:(78cUXx:AD3De\e[H\Pdcd=="1P@rPPBaEchU $M@AA T(U \[[$T8U]Rل (`j$\hSxYs[\QD,8B@H@O*xQ渑ycsb!yST=քM(@JݳlY4)PA A<%A6P:4N093Ɣ7 1eCM(FR 8Е!-8XYNV v9vIŞHYX 6^i]L+ ٞV#x(P&z'j*,)$%ҥآ6J/J3٣!8>zBZgEFhJڤBäN;#36Ra5H035H.RzfDC,^e\0e1adPڦp2ot1sZxʅi6 r$<G'KG:Zz :ڨ*Zz UQu+c#[Y#.b#J#;"#Jjʫ, *zjڬ?rfB2/\-Z%kƄ7Ir@=Um]9 MD$Ӥ=R1*Y>>}.h[(I]D>IA(4ØD i@MГx(釔IF46EDRPTO*dJ0Tp9>B8>߫ >gRD] ZYvP 0A *^~W~kA,I tjJB8=404GE` >#iYNI DDE H}l5 [N #SR @Ⳟ@> T(m΍ eH#,~>N؎@^DDA Nn= AP-@ODOs /CD%䌡-$@'\!?3tHq䋤EPi%?5L81+eߍV9͜YiQ Lrլ[~q5uGհ{ <٣LF;ݤǑq_Uyܻ{oYY'c36rӷ??f^4G`~^LeW x`N`QaCID0e[b /EƠX:ȣ*!2Ds#) cJ(@N> uTi`V^eZne^~ fbIfVRifjfn grΉ%tމgzg~֑Jhhzکh> i褖^in*M~ jjڑ kJꬶފkr֪k 왂֤ѰfV%){l҂iUUmml .eZ;mzYi1LUڲ -䆻n`MhfM&'s- *pNO\_qƎq& LrZlr*\1. yLs*Qs> tBMtFtJ/tN? uЄ`\[-6c}vhn wr7s}wx~ xނ8}x+y7^`@pRls}cZg6izꬫ벻N{^;Ͼ{N|_<|+;O}G_XP3[l[>)L #A6-Ѓ$ %h)a WB04` Ohs#VZ5v+_VFp} 3X"z"ؠ,|= 2 4#F3fjD#x1ޱ"vHF@1c GDd" 9C:2 /HJ>R$&'Nғ)EJN$+_ʅ @>Eo`z/E%>aZ/xd+Kbr ۞C3b4xf9sVĜjd':yNuR$g< uSg?Oyԟ'AYt ]C фJEZQ^mhD %Kx }LlV3ҘT]diHӕ>sa8} { *1q.K%*S=TUըjYVծիdYŊְieZֶխt]׸rǼ3wyY.I+~(gXֽ0^c[;( 8αmd$Hg8zιs\];o=_oȈ:bVh @3Zo>k] ׽&GyK~-_g# ,`;Pw.on{o%{zO6e}\O =ozܷuz~_|W~GΗOk->d{ ,wO~_~7]`:~Bv`5R y)F'fȁxb'[/16XI+)KƂ/o1H58&3h9Y;?FCHU҃EExIȄ>M5QH,X+S(Bht %ZF%5%hJ/RiBD]ȃ'S⅙b* -X$0DDuLEBS}(.t2t6St9,B(V4TEŔ-pxHE㉽pQtEGXLE؉D(D4 )qhp.%,OH/L4dhJS,37etôB˨Rtxp(hCȋtȅGEl+RhXx֋FGl(p( pRS!ِhd(Sx(oKg&.+b"c*5i>’UȓD= =AI46E6sIɔ/M )QI 3UsYɕ)pFA$b3`]ib @縑))S*9gf""65Ȏx8SXyɘhXЖlYp\xbH/(w٘I56]5)896)93\5Xxwb8)9-[iɩĩͩ+щ))yiٙ*ԩi(')(iiɞB kI#HuI > L*Kih Ʀ)EF8jv U( *x&*9)ʚ1L>:Z,8Ti8#:9E9z6XXP&TڄYY詥]'Xa*,ejgikʦmo q*sJuʦe9`{ʧ} *wd:ʨiȡ*Jje.1 ʩPZp:j: /zڦZ* jʫɪj Šjz JJክjR튦z*tڭZ:s:j  +K  !먅jK!q`MMp*˲.۲+*`*rbL5@AkB5H=e%@.:Cʯ%s^\ʫ1Y!<…ูal%p.:Cp,BDP߇¼<u2\ "=̮$̮,D#Wu<L <a9|Έ- -}\ NĬ,ѳ݇}9RrLe  | X `qw[MO0m3@hKd@׉mRekƁ,8؍}%^l)/K> Ik[K;د[ +=/-PЮ-r;ZAH{f29` ǍL"=9`K`w]ڭMSzSe  M=ŭD|43Mݝ ~; /8:!).N85_bhCO%=;:bF60#=$q7=>#61`401>d:^ 9G^1FNW~*~Q. P.H'I~&U])\v1P(k'p/=;~茎"(|g0=[A>椛N\@%`x(`)nݠN/~RN"UHK+y.`a0 (,%UR_.6Dʞ붾 ݮ ^ n CNqo XM2/#O%_4/)?\-&`12O5;'72#i,߆?)pڸ[0$F/Ʋ zD/D$UD7j]Kj\qOtrO 1 y;>mHَy8.p{DT^ PR l@,$LĒ'r7ЂVh=WvxÍ(b]Gey #"|xހ֋8`&>H{(z5GLBgR`f_@2Xߑ4ާd` YeI I*$l7@Xi[=IWT~矀Z#iL6VjiEd"x騤ґ|tK.LYZ?*"%Z+<@ H" "N6&b,+kf쩩 bFk!tnHֲZ,l' 7G qUlgw ,$&,0,l8L7PtTWmXg˴\w`-dmhlp-tmx;PK[.00PK,AOEBPS/img/sumfirst.gifJGIF89a3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!",@H*\ȰÇ#JHŋ3jȱǏ 4 @R@'ID$˒.KTy'[Ҕ ϟ@ JhO6a9JMED!҂2$hӨׯ`ÊK٠H]˶۷pʝKݻ˷߿ ޫwÈ #^̘o#KLːUkϋ X4ӄ1^Z@盨c4Ϗ[z'o-QD-^ĘQF=~aE>8yJ&L$Lc%H=}TPEETRM>uaMU^ŚUV]~{5e͞EVZcپm\uW^}eX ε-bō2v-_6ƛ9'.˥MLTђC6[ҧmWN}1bٴ;.$A9j#Y9xZG/>rҵo^9xɷ]/x7>>⽫n|/@:0 QZPP?1ê$ 4<ц QH#m+hr0G)OPL3SS//$, E=?uOSJAOVV-jS[Qu/[5]"Fem;U-U&g-/^|X$6\\ w\6 o-]GmW]c={uF8a_28H]blx݌%>?)8d{XccEgXf&8☭ٞҗ'{HeNfHZtJ%hoHР6hN2)uB*DrبR7娡\YjxrZkJ諿lt랶 AJ,B+\7alnׂJ6i;丈>kkö›jBݾkor/ma޹;0zBj%aW}1ķVh_7WJdgW$zJ&r\%"bh|2 C /lAÛr7t)*]'ӪK. Z~Moرk墝vF= Wl d6|xނ6ά׊߭މ-]a8Mf w>y mm 䖫nrGn{_8°7;ꚇ:RWmuݢLuҹnotYg^\/4)<~!(oNj}~4>g2:yh}ӓ3B3@O%/$ \G.w+0 -u \h L!`80ir» C 0 w08t^hBXऴ(.ɋ 0Hth"FUqqobHǞıswaF-% S!텉#3BЇDZ2.Nd.IŘcKꨲ_[IKғw{eX^BC.K_3[40A:<8`A&TaC!F8bE1fԸcGA9dI'QT/_6 qfG1[ԹgO?=,(!QF "UT)POF:5bSDk *+ׁ] [4!XaRUm[&řYt^]ޱ}8՛Ǒ'WysϡGxu/#Ǿ{w?|yѧW}Ǘ?~}F(,LP !% P 9A1D)IRy}St[lu~p_eT&l51߭%WۗD-e4a=FRb)&b{1^SڑMNJ?eK!v*anA8d9]f6sژ}sV-wfi^ps^YQNo ɋQ(Zh_ۖ͡zД.K۫cn4]pc\T;<]V:-||s??v-dSH6Vr\W't5;qorݩF<4ge`}y)Ƚo`7坐TTANSfA͏~L=v2T dO]P*CQbWNwA,Fܢx "fr fTC篈kN{ץfQJfDQ`ę3FjMCK%*!-pOaJ4DVl۳Iu.8*A_c'G̱(Tb7rZTxK*`,.%P013FIbS%զejfGʇfenfHR'.WSbt0eTRXQ̟Kq)ckH)(I(E]xQ8d&q~hz)<'01Y %Fzю:a(ǣ\Suh"R*>r#mNI[9U4y+e\M)uU`5XMjT:cjӶ59 PSڏ<- X&[`XңuݫEZݩH)k clEqY=)KYUq kibRZluEF2>f5 6%"f2<^v_->կ!kpy*Ra'0#l"h8%Ўɼ>z>i(sy^YRth*|6Ѱ]3Lfm-۵wg5)7zӍ>|H 3E؈k`ek7/|^@p0vL$-2lCxU0UBy, c/XJatK SY l2n_Mvvo\^ w^]ս] >r.y+ZHcנNs/;#ղG4f&PGԿUti縟4ge `P׺c"c]uӾ&*3m~WtN|ldLrLnl¬LbTRTԼT~쌪||ʴҼllf424tt||dZ^LBGlbh<:4*.,*,ľTJO$$BL,H*\ȰÇ#JHŋ3jȱǏ CI(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]*T ӧPJJիXjʵkJ^ÊKٳhӪ]k,۷pʝKݻ>˷߿ n9@È+^̸1KLd!$7gLhOT :ù5`ͻɚ]*І8pǓ#G8ӐKW/NuKqQn9mƙI-q-v'HOmsKm~#Jh6zJ s9 D7y¤7dCT>*A" ) 2?͋Ԓû ؀cCpoDsK T=C@ !h4g$Q c;gȣ_Ĩas`5DXk91p쨤@8cuZ5cL)Ӝ[[8`O #JJtsO4a (=JRgl J i& P$He;v| 4ɸdD%ql:Vaq@,L%3{Jq @e[ϛHA)(4%6ǑුEn$C:A%(dJH&](QLȮ$/>HDG=~,ʶǑQ|LAG=!A= YϚ SDqSF@ƁOńhGw׻^kʤѨn(lєx` ѲFD@dA+JXi%Z[ 8Rm "A..hxC>оz½ q:Û(!;ѱk ;a͐_Z$t^d^6 J%U!?(].-^ >fQbNj H)J8Һ-A[צR@!~G otz9Zլu ($4@GЧH)P4#e0G ЩS*>RTh 0pGi%lR(>MD$ljcvkO|S[*aŰ4sxϖ#v 8*7A^tE>%J`Ig뜏whMފ1COYQZݓip`ax$\Go@@@ w:O}ǎ[,6<,C뼒Tr(>ʲZtAjΆA @#GvbwE1b>ƦcZ2i`m<5AzJ ww 0 +0` 2`M I sQ5S20$;gy7Q4zp e!XtbrM _V0A3)]+ 32",ؐ) "~ypr@B=DA HJLNPR=T]V}XZ\^`b=d]f}hjb-pr=t]v}xz|~׀^ւ]؆}؈؊،؎ؐa]ٖ}ٜ٘ٚٞ٠ڢ=ڤ]ڦ}ڨڪڬڮ=۴]۶}۸ۺۼ۾=]}ȝʽJ*Z}؝ڽ=]}= >^~ >^ ">$^&~,,.02>4^6~8:<>@B>D^F~HJLN^*R>T^V~XZ\^`Qd^f~hjl2pDQ>},S>}z7 8~.N{B9葾茎^3 Fn>p*)t~ n`=B@3n6^4^.Ȯn;~N|.⠾.^>@ 3p 1  a 0>ǐ炎-Aޞ"("A1),'%_./?O?BJL(!080^p`/`0> 36 { 1_:/_{oovO6_/}O{>).H?ED_OעUX@=..բ!nOįO:O1?20n?,n/(`  `<1V:paD/\ᰁ=aI>8dJ+I0̘*m'2J)>+;!o6 *3-&"fkO?lҩQJ :ͪм]T;GUrRPN7ɷSģUW_5V*!n5ךj/ (0|`aTiVp蔰N 3 [m VY[q|nWk\ue]s6\ݒ`V@>@`Y:`Xhmh؁zTw_ƋSuc?9d¼t .2[&`09!6m&h9ifi^,mr. 027* VH0YAg, a&8fcCjx'xG>yGF^%XE3xY#aP(ƹ`czVX02߇?~秿~?`8@ЀD`@yOb`z5iӛg0b.@'>|X06/a e8CІ7auC>I@ׁ \0&Р0y, aEh cC.vы_c8F2Q>0A tx1F & #6,hΏbŠb..4c"HF6ґ$8$p20LB P\Q|..PP(.d,e9KZҖ<$a͗F(]aDf2Lf6s,`LjVӚ5L3g89.*Ϝ9չNvӝ79OzӞ:PԠ@P6ԡT"TԢhF5QvԣiHE:RԤ'EiJUR)=iNuSԧ?jP:TըGEjRT1;幀MjVUvի_kXuԨT@UZ!T5k\:WծwYNo5`A T6kbX66dkd9M ( ltV* ҖִEmjUZ:ֵm\!+YpcrV_|@. x@_%"T׺.<@wI1^RWojw ^7+k;_׾w׻׼lUF*Z`7xf` #f08 wq5\?{qE|7зna[VAxO܀<2[E\ѽt{?!%w{{ ^à{^,:kwcn: :}70 pVEsU$[:gn  ؎?=L 7,T]uvU1ی_ yJݔt|;޿Ac9=Azއ|(rL> x t`W;kz-Q|8% bԇ[~x SEO>\'>o|'>u??m]ɧV [??D{x4ѻ4y=x7 :J-sb=着=?>)A883pAsk)?A+A[ Y;\H9sB55*l>?6Zx#;>AN|?I5j3؁Z8/8)XYZ̩M DND?>ZȅgT9ZpBTBhXE^l3Ż\lm:FqTǏYlM|NTOD5\N,LO<,4OOļjӃ6ȵ8 ŇP FH*QД;-O tVXQPMM5޼7@cԟT$NZ|TƵCPn|&\uţRQ-.5*uNLS+uN15q&"bt"V%#ũp @H "HZZʮ/23MN3F4>cOO c3V:fc7c2[JN?2@;~cV@Ef;ƄAdEfIn6~dd:MNpdHNdMQ&5DTZD )sI\j8KL_3:fbfcJ4Fd6L8fh2a4kf4opq&t2skg"TE1y1 gbP@Pթ.V^-h4$𭭉6BDܴB@XIOʩ h~fv闶`MW Dx4 ͠؞^DFx 8 0Gx[fvj陦T\Ĝ7ߚ`h|VV먖w,:Aoزg Nڌa]hߐ Zupx']9t:nKkGKɻ/o^83ONïo>QG?~!Fx  :|L)8 >xawQbxhxZT(($YT3c,g=d5vcR9zM:I$ dU>6%RJZG1Z;liyYXujfon'Duɔ?Pf A9y(n:(I@"@ĜyegQx7i\RjZ}9K%j &+{"#0蠶~$OFMgE"J{j~6PJ6{hPPN$jIfNbP6aO@S0AEV;80ĺNq1/px1om@!+Բ{21riAq +n)+34Zfپm%/@KM]VPL4ᄙl0V\1!}#0jgqk,T#LKĠ|ܫ 8  7~)E$d݅z~y  "*8ꐻEՒDy]2Np^pjL'd⪶[Om9QH?=Qߪ_h={77 A Ojx˞諟>A D|"??,PMʃZW?OL`OZ؟4 p" @-x,4 %8yrPQo @x=n}8"b,|MC5;"䎊SPS[d`&h<<|+V"Q9/1TB1VbBըA-c ")II`XP!PerjfUi<)mxC" ? b'Y--=Io8ā,1ILᡙxL?Kce]3b*<.gT4 Mi j|'( 9FMLL$65(D R 2tdHk;X즻򆳜[>5hrv,;&-8J;. EH t|4-at64E/jɔ5i y<(z#:u:Nv*VʯqIPsXNg×V&uS55`KTf!,C)HCO+ϤE)alg74j*D i6ֳ;IXNmjӴZv$Gc:,b_իR`j!TF%w ׃.|ƆҷԛNaS"x&7)2ش]綀~rF/\`ϩ}C3L斍n~wXLҌ3Y #C`/ _sE9\|byXwG)j汢j5UDRjU+C5}CӺFYx6]׻%Mge! i* Plrk+֫r9a sL.x׼겕e(Fiz+x-^7} 6-7xoںדwO}dQ̊ݳFuJuǤ]\ <@B`E:~>W;ݪzR>/2׮bp >uA-|r nifY$Q@pX]Nz&ui* ›bX-UTs^[ Ջ}핦;Rws쟉ϼ%೿?/ӿw?p? `p&. 6> FN VN|\n v~ VH[ N Ơ ֠   !!&.!6>!NF!V^!fjn~!! !!dơ!n!!! " ""&b[̇"6" #!F"%!$V"&%fbN"'~n"(b")'*ʠt)b$Nt-bK,"/. Tt`.10fK-6@3.30^6 H,,SL#r86:bK,@@9Z9bS\]#>IT 8:#=c=ʉ !$Ic>^hND9FIأA Cƣ'bB6$HF(@L@IH$EDEGFLdHLNb.KGdAcG~dM&H(@p@@Nd-aԤPVfQ*eX8SIWz%QKF^]A"V~%X6b@D%H%ZR^\=fa%]jE6b%c*&b.&cNfeZ&)%Y:bjd^f&(c*$F.=fޥ"T_ҦNng$Z%LfPRoV&ffkJf\gk'oVbJRunFPfFfo&'er^fo^wr'x¦"v@ e4gE]wgwNf| gx|Χ|ҧ~~rRbsZ sg{JcN'w'~vfanx&bL@_r@st{Ҥ}6&}ghR:^{bz6@4xć(Zb*FRhbH d|($&(CNf^ipb;^ݨ(h"(hxi#~)'%\hi֧'|+:@Z<*K)i[*qvi .* @et@D^b]盂gz*j~ʪR*($>6(Rbz%rB(v.^V`*in'v*Zgu&gfdirbDe观+i&&jc^ b%8NN%'kjZ&+̺J*ki&'fqi# Ȁ f+Wk_lI>Z'ώ'H@ jf &B-Iς,ֆ*mV @lvYJb.N@j #OZ^m>a4jg,/vf:܂j.R>䆢nn&n.vnF6$莮.l#ꮮ.XnHta em FLRҮ_n/(G>/FޡV/ Hdn/.oLaLanݴ//!H oroήoG.H'/I|K0a//oo:700;p#/ cnp g/o'.p p0q' /װ po/3Kp oqo pp!3 g_q wq3oñp r!#qqzp#1%g2 ӱ /q$۱O2&22%2+s0DzS0,pI 0qOw7~(312/.2  IX/6g6n7[ .k sR81=׳=3>3=<>3@3hr3As;'4 .tH"4CWCG#tB4E;Dg4mdA'2G;!o9FtlI5,b4KϠ&E4j;j"-M 4;_114An*ǪCBddP+nW̲_B̦ Q ˱%uJW#WjU\TXO#(aru`'\ `ǠYub'5[_~_ue+s&m6a5dǵda#u.ucfipF,lc5ׂe_jdjkR'"gR6iqsj kARr7pvRvszhfk*eRt.+rןr/B,jqvw@~*&*5ow'7I÷4@|Cfhn8rmDhxgkxU{x+Rz[iy7g&&gTz38W76*@nv5\㸠7[nڸwjs8~x.jB*rue3K5[*/xIW6oŠg:@Onkg'Ga߸lZ7o듣xC8,{都(hL"9ТGz$NzZlW6xzK:_ci6Gu+묿9qzAҎLG{"R-Xmoo34)#!-oݜ{r-*Lg{ 22n'74_s? k߮d; Ʋ+55r g2/;˲s,1(«`k4; 0k/ <4q*/.-'<"i'$#33c3rț6 G+0˃qoZ| 2}O?c;=Nj75 I8>P Ӱ?gԁ/oCqw3j\'u)_7bC>۟g?b?`sWsޫ4??@@`A$ F8bD*cGA9dI'QTF/aƔ9f͕.+bHNvR|HPC J(ģT`BQe^̈fW_;XgѦ=['Po}QC>0ѽufjצ֊l&VqeDHo<LЦl ӊ =*A4(r I,LlB{xC U35Y1űc$2wLN&);rRK+bQ O@ *s"5sHR<2qǥDRx@?; X`18(Q`,yyXdy "X装܃EZ>@ ` ࠟ.6,X &l.[nˈVZp (d&<@޻pwZh(j$A؀x}=;mo6տԛA=]w^*luV] ݝ}nY;p^zCgu^{Ps{/ϗo?R`pw @-z-Nz^w@&{k @΁_W128=9/fkY03 Th D`lC"c}H9pwE "P  5ÿ́kֲ¬\ ôNeL'Dw n1@@ H0usT\bh8`!!XB2ss#!ɐь7m 7P/P`I.0?0)@咐%C`Nkc w8Ql\)hA*?U ^$!Az.DT|i=btj<Ӱ}LfP"VPpDbX WʀYVB)E9P6"@gjzZhdڧEKY *xVE*oE%4\v8@: XӔ#R͐dJ eL[RUVN e c:Ϊژ mAD0t hkL5.^TS]Z36MЧe&nc;U٘u<tuha'3i) cT=;rĪӲ4ֱF:W*;bmk3..X%=iRV-b 6Hѽ#(hD]icfj55bR3ײ Sz1"=]m7d/| 7y3f&^4E]Y_Gd6b ik\LfojԠX\bs;.؉iLg: Y-/sMdԓ]!/81d; u~)bgH:1駠 `P7ѭt6Ù͍n_ yձ3 kJ9=&?:?26 MJZʼ1h\K;׻5mj;Ζɥ;>sYܞ4G-f,smֻtmFc,3,D&yr3-pCc%1f$bfM\|7H4"I\/ =m;S)W˻o{L.FvmP?hۘ_3bH=Phuzmz_{vg^([=f)Mnbw7vJSuLe1|U*G[=Ut]J>aU-ue0G ~K0{8Q?ץ/m胛r_ X0y?O%ALdžy{?To){{2mc| D7"is'U?{C=Ѿ/0Np&d֏6 rbab*7x!NbJJ/LGJpofPDp,"PMƂ|zKn&# p P<#,P $ + 0 iv 0Gb6Pǿfܩ8h Ao0 I/;<0$&qkc/o`="iQh  6>hb/ fpL:e!OE*DoLd9Q{<bMK,B4KpKt/d//)b)uVqba"pFQcѺQq -\r6VOq@R1[%-4jCCdoL#+Mqt!a"U*v1,LGhqZ1:F%Ch0So #B 1$1 # RpьгR."F2+ALq(Y7/hNR +?qX/!c,',7SR6PI12й292ax 235+$41ߏTR ΰpv:s_pB0;IA!3s@e;e?4;kBBm`/sCC9CAzTZ4Ec4!Gr ATEjGrF"BH4ItI&H6OItJE<ԆxJF;ʾt24LMLE[J۔1tM-N#N)utOOO-9ɬ`Fn6MC}NeD DPs5%qQL* 5iRdUx!CQ*eLT*FϾ#YF*EWWSkq]TmN(OSUU$;8RHRCs[ .1aJN"һ:u/RM 5<۫8̆&TZɃZejC@S,C3,/S\3q]5r].#,U^KIJjJ$2vK:J>9qt[^ef1ʢ]5za&^) O$Pi E:JQQi(W])cVV+/,SԄaL˥>j *ᄌԴGhU`EVh_^)W%pE`14U)0 %"D%]~짛¸c%Xs>7tj35GU7>pq I 7rMbr)dLeTy^&dif|Fgxg$gwhE3xV-thv5Iy=jjHFpelPkKmziuh hҗ~,(q"gr*r2gssHGt|}W}yNgm|xxn_bix!yƊȵyD`mпTЄ"[SJTl(}Ӂ -̶7 '~~m̫˷+:k[us" ihVp MlMn29ȃ@Hz$ PHXHfȄ )qVmu&8Xu O ㄉIzo.-ytXhjh{hI8tzHfuFA+fcV6hY'+tLKoNlɰ('HV9K[0?TYjYVPӁV}g XPI(kfm6*zɏ 3+pY]59#[%ɗyĘ-q)IsRYǩ$fCu٪^8k TϜWJ:mnpj* hFuK3kU$rrjz꧂*,@63nuQ>'#hR*檮*gJ|KǼ:R 8&yD QL˴PK"TkX#&{Mesĭ+BdX{>oi$׵:ʟ=Kۚ2wOIt[C#и[K'Aq;횛OA"D[U{Ax{K۴{  ;{|I:{;os1ܿ!ïZ%8,UE|D*x$W\F6-INs7ֳ;^>P#kЌmّgP^n%jJ߅>WB^=M͝f<loe_}c^]m~fH11yݵ炃jsEt>sGGe:ɘϝk]#ˎ cnWs~yw5j~ˊK{X~ 1W^|7Xz>_wnXO^;lj~f~um ]_.=+T ,@*tx0aÄ Pƍ;z2ȑ 1J.\%-].sA<tX@z)Q@R%^#DO>a]*vvUXVr7Ն\a -HЁ .(QGej#Q %[f؇me]uce dBPA9@}ɆYLf)~Jh %}i]!&w^.9 !l@5vAX ~ᙣѽJi`Jފk[+t L' 8jc9Zzk:~kY!0 &dζG_ubGh-RncHrxef95GV Yyu2k4s~x13Ktw/n9㘳mڜ܀GބS.k*~FZ#3ꎇ='4{]Kw3(zdmuխV4_8GF+֮L={n_~ٜrdiЎ3 _RY&(8әN~ !.; t{AIR"MKQ^󥺊)ME,+z Җt#Qw?r87 9RN-B=PjUPЁSR;ڦY)V Pkc J6Uz':Ю6TLVR T1qz(J1e\洰G%,gs捰H8>搲] ]18ِDuPטgn[Z2$ZH&2.jkfD*<xP.UF&^:>}# sXn6f-{ A z u T C6uekzƷ &򷡶e⤇\'v*.m%*/o|ZN/̽%yONJ!skڟLYݤ_o=%#3jlSȾ(;mQXrxq:ir4C l6m( Tvmg'L˛.v\n`;܊TpT~Z7A}dGvmn6Xܖ'Ы<3Xb3W_-pdwxoO&7ԸY02k^Zw/n6FM9\pS`:^PT/MEb/W.ۡOW_Đa4e!IK~򔯼/k~?ЃRbmC~ԑ>֢dBxPG^zQY_`8=?I&WWm>"%_A3U׃x~G__e#(VzwYYȇAUH.CDTH?x'*fhh{WC?NWw5Ȁg13Fr(fSGV](dW&8 y T !S㗿 )Iʼnyb98cҙ$ z`u6}g8sY(lI4Yn& EN$\'F)G9It pR*G;=Kr|QÆyPP0"102#!13j*%S%WN6P1d98'1!#Cq4J10BVJw; S *((D) 0n *@;`4ВQZ{wj]_TEۑ!5(@**J:aM16ک)g(1)Xr!&'@%  n-ZS)"8.z%XB`[rӺx $PXz}1Rba#cTSGv@yV¬)RM- pKzM*j.q0Q)% z(%(%g(,pz31;q*Da#>:֙wxc46xB¬I+ta2:1s2+ʜIcJl ez7q 1$L?gιu'H۴#!ڶ]F"&"*".49u*q?;[aoV|B۝ԸKVbYjNKpcR&g&k&o*0'Ar*y;<+Lq(K%g)))B0{1rKKeh+2,r,R4q/1Ib-_+ ty.m.."/b-rt0= *1c1s1wJ:- I ,O4-KC4`Z<4zpIòyė$@̺LYN,ILTHQ,=E4 ؛#Yw'TɁgg#wuV%6Z=>`o .L> ڈhɛTEƅQ溋|ȫ}woFlɆ+bka`@5x}<ɧ?&a`|F0x>^<ȸraŖ]ʩ͋YͧӼ\ ̑q̓9ͅ\ptpiΫh5ebu%jϴ7vFt̕=<8pm ]EeE\gvoGmQpwmwNq$mGS_^EoFqMYfwiӚyaohvrMF˦o6n-ʲH˒|u@v|,I$|MM'igpDTx T0gʗMֲܫA94}+\}%$Ad߽Ѳ] /Dذalz 5>\H7.DEi/tNZK ezNs>T-an趒{<.zĐ-Ě>0>>qʩ~n>ó]V~$cgeM%U N^SW\]\zqUmM؛Rxk]#E^ׯ~՞}LrcZX!qQMcPFn>)zk7Gfw~}ެjok% ]`O~{].K˻!cJ^L1쑋! @ DO! H@'Qk$;hs<\wܫ%<uKA>rn B߱N/Oy8oUݾ~v7힟˛Bo}T$9g7Dozi)'/_Z7w~՚(b hfZ]!K&|o1SHsO<Y^ P@"T(`C %NXE5n EE$YI)Ud9*LȐfM8kZ@B>/ Z1dKI.e)ˣI:|ZF nׁ7 PAgϦU;bt00۹u)F_O,Xaĉ#5,e,mX! D ?;Am t%vP[,lg7ݿ;}ltȇ/gC fvP ֱcXs" Rw9;yn{,xe7Y82@<-`#P oC CӐ$3QI 32cJh(a@$aVృM (M /I>I(Or2Dl_$dK*ljHG PH.Sb:ɅO@T8+2KaTKUqPHSz$(BT҂=: J-UO>4RV9\ UGFX{݈dG̮NBpf gm ^u[/YW/]yv*`pTAe=PZ T[o52Vxava#xb+b72sM4Z]T^H|17շjvښfIg3xDC^PTP\`S7;UjNSK.{^l ]DFoM.Ƞ*@ JG͞{q]nrk}]s sB .Nw6fR i3 qQg|v;|v'Z`8TxƷS“/\5 &PX@u T]&<- Dx$ ZCݹ}8xB١> 3h$lӊ 3X0.d9!Tz8@p?$bIXDцCDb3D' *dbx+n(bE/*806inʵE Vhd#X?qLQJ [EG<%2hcqn2?t )$=1]EG+1%OhISȍd\'uuJr{T)SyATrC_6Xc%)Yh]"1ԏH>c/dKffoل!=)hFnX1YCn 2IMqԼO,yLӆg &Ed)lP`XXP hEO_QE,A9OR M:l9@m"X$'FSӤS`hXvGYY6Rl`{Phb 4@PS+h-yE%@pjRWVU-UREÀ. SZkլb)j@aQ2X$c/Xe,.dmmh"L6ס"5Q6X*mcP[$ e0VԮt4MDCۀ^j-{B ؁ lvۑ%/dvٵz[^ƷͬpECܥ^hUM+ 8qӍ.X<׮n{gJ伷uc+^ Sxn/12Spvѹ0 `]1ڪaN 01r]yv9,dOXD'RQ(G9M/ߩ)P/3ʘvcwx>Nrb/f7=suLg5We D#eҔy q<9͆w _#Ϲ~#A#3Q`=iPn73ZIwOcXZֳumUzէ&ץk_]aVVv^H1" u}mP?{ځ|KFmvOc0 D͐<$"Tmo7xD$QGχ'*śb񖸛`E7Ń~u* H.&?9ER^o\,gąFC8G0Dwjۻ0?̕7-z̗^ug9Et=`o8xn J>}y.=kWЉ^Gy4/N|L8ΓrH?;=ovГ}G_y9ԓ=n%:ʟz0)!Q;UǛo;ӗ=R"?+"lI4뇧{_sGV?zK==s۹+L=#D3v:Ps?̈?y۽`s}ط#8KA#>ѫ<;۾HK+Bk[;3[L@8z?Xt : [BjxBșzr#Wq* +’X 9C:C;C; ,T@pp 7Cj%"Ā2C-2\D7,C4(4t]&r2`z3$`w&4*BBDKlT*G@YaDQL5l[d T\n&G'.)Z%FEeDFpdťE_i=Ϋ@6aN4Xd?W@qdCx i FmƁBX2CNkI{.D$ {Ib'Z[ANFt)=Iӡ@vL II9J <|@̼x3I I>J4H#tǻJJ ss9ASK?qىKKf0K <Œ̇TLk@,4dLLLs̷ȴL2$J,Kj $ʁlMDMٜMڬMۼMMMMM NN,NJzr޳TBr"9M22d"юz4 }0"P Mu3%-^b4,Nwms @P)D URRT@ P `@zUF'jўgf=&NO%e1йԺb@pp `]aC3)/P&CifY p[2!˚V6dAӺV5,=PPhQ=.(b_Kxs}PWJōn,XbmPtP@+򊇝f %(׫斔09|uũ/~_8QR (->'Ci>ZK^ G g/Wbg40IU,t\AmsA8!ca$%%Q2dߍe)[yUe`L2hNebmfAށ#x9 T*}BY@Jh+wwcX̺AIUNIL-&OԷcjGP6*8=IT)jd*Twmsu(]؇VfZlKPa,XC 9rJ =)2u4g<'hM JVŦ3i7*\7~.O-=AsZo_] 9ƥs㛔Nra (SI~p֠ uG9&S:fgwf}"nhF}WTNf#!^dd=hv=+s\j#O_<<fqݦͯ~ 8S/oZ{)}+kyO,~~|_-s411?q?E#>S3o`{Wqc'~1nw=ǒ-k6XX#@RĠr (Rdo SIFGLUV4HVEV6V:ODt45l]ĂU@NDD<R8%DG0eTerIKDVUQ6TlMJc t$LN OB%OLԆt\$\bNjEa^ TDT]}@7V4E9(Ȇ,PUPOG(h J&6W8hI:_sTJCS5p)-@zW \5tMhHX؆ąEȈХu!2eSUp1 1.-FUE,N{GŊFmܸҏ5["Z5U&u+)HRx shR- ! !#]命m\G˶>,B A9FEyJyNi,Rqa9a FbZ\8Ta= 8_xI-©I9bfwiIqo8BkNםY駀ϹM@9ZyIg $9ʟzF ڠ%lf!TYxa kkifo gFmcdzkkR*+,i!:5xB8J6*(9ڣCFJ@Zw‡{16|fɝxTڏIJw9>d),zg)bnr*cRjj(W6o1**ơFnrk~ҦzƧB:ڨړ z^ lZ>y=g`*B*s}F*v"+4c xl&h d"s&& ~zjZJzDʓ|ל׬j^Zqh<ש'$_og*nڣ* ich wnZ_:3:f( }[{ڱr؟۱9$&{*k,۲p-2U<P/A1g$9@/9>s7q& ItSB :J;/04@XZ;f /N ;BUHX`Tr˶Y#-CP>> u+k'0SW6L|D|k}? 1TIWXuqGz;wӧmzq51=2uG<PJxI/@W#=F>q;B˱p15{X+۽>K;W~蛾wy6K;|{{ҧ|M{yoq+{.4{OmV[zV g֦ ukz'G{;w9G{lz!l{+6͓ôLץ“Ըkiiö[{3q#;iL|6xOBNL<,>f>t ʾG~wXT2YW3I #wŐ3qwe+slƓJUl:Wi4{Ul%;9U'B@qcd6wÃcN|%ZL,lS<CLtG ĖcĔ,d9鳁4汾f<~}紳\\m;޴W-}5J2=PVY\Cu-ȑ&}ޢ.2G0 8QjHHPQ)Fz4H2ՠU/G<VK͌ĉQ>% PՇV;Z= \]!^F|Gtd+l=صVju[]- =قZЅӎ=PfhԠM٤=Kaٚ ُL4XڴIm )߁IAu4 zhWy+ٵh5dEع  0LAuz~;VVB^v-rDxhDPrܮ$Vԟ mE\TP*stݣH އ|eՉE~^2]} ~tj$TGJTPSRS3G1<ރ#h &(h-ڵ2 U' ZhM=*}-cYZ!1%/KX[.^UߟиZd/] C(f^ݵ Ss2@"`-t>LI)X%H xR0rއ@GU~ X~=aZ]3"..FB~ǎ+ջŎОbJY^>xR e--p1>V@HH~Z i(@&Xn OZI4>'uR`$& $U]ej\m8!'L(Hp{T03_>]չGUQ\ ]D?oA ] Mһ9bhd_[vhejSnocMՉtv!{zg\ ]GA? zRo*a#a`%! oo[噖"!n~闤ii_ bod;I`? Ec;vߙ P 9a_@0 P8`@Yiyi *:Jj +;K[k{+x+Y*N^n~/?O_oO?`0 <0.~)|1ĉ+Z!!;z2ȑ5:$2ʕ,[4̙4kڼi$G<{ ԣΠD=ФL:}t)ԩTZ])ZӺUWBcuV+ei}2k]^^[nپ|Md60aZL6ȏ  ٲNJ Z\G}#ش޴m&6ZגkoFYaz']xj>:I-xҟG/{x۵[.y_>}r{?LH`v4 . A 6a*^*fana"2&_("z*cW!܈c:c>dBv# bWJ.dN> eRSd#Gj)F56N fbIffXe$1GYqy%@_ @6u։ zI'wvgvIhi.rc Jgh~ j,͙^kJk˚6Mj:ilAZB) mN)8 nmJZ SC; 8@枋nn oKoދoo pӋ 2pQ'pûZOLq_qoq 1MszKr&v kl(Ls$\i[p,+nDSJ/48x! iw:6]cM6OoJɍljuھzj=8}uۊ/>'ޢi] KZnx+e&z::N{첣Mώ{p#/Tpȹo,|^'AWa9U8lB4T+cĖ LlbIqT,j^݃[F/d,z'-qllGuqs8%(׃@:m( <!VDU #?AjRQpZ#O>+.-lDk(mR7k5h &9$=F|s't$HTnٿ p:hVo0 p,Y vSܦ/MHMhs׬: s?c\N?Sǂ*tEIB M6Ԍ4hьjԏhܨG? t$͈HKҔ*miK1Ҙ2)hjӜ:)xӠB-jԤvJmTTQjUԬ 0`"YaBe[fZ אzkWZuK99>ݭ{"i>$[*e\.=+e׳v~epspIh &Ȫ\@z@#5fu4K k\d|K>ߢV-nHWuFmN6Rju\jW?LݮwAwF,yST>]{(` 8 P (r*X ~+!`X`зMtq[ТX@ 8xX {lE}D:.AA }MԖV-.{ [(@X\G <6( +UjfoqL.f.H`<t\%DWN)\gC&puYE,b(I>ᆒ͞y2GQs|i xhCYPw+~ΧcCdH9pE  $#5fG(||ѳqNTŒH|`fF9S̗1 @M I!vEo)s(^7w˛?鞷KW{[y޷m TKR+<"^ÙK\m{ضz*m5GoEƝsY㴮ډE%4ϰesUS;$o}C:=ǰxt,9~-mM[[GCpr1c93Fzjvc-?;ѽNgC3 dVF'.(s!2N\vTIh+/Ϗ~:>:?B}zparn=ȯm9rR2vtPwڐ=p 7_Ik;ʿn}g&{`>{nnVٹ6oɼt\S( 4d?;76аs(F 'r27sq3׳r9v]Qw-qHѵr dրQr (JywMesVudGyԗ.'u{hg5wOg{&\hZIgsr{2tfw& !8q"zN8JqgehhGar68'(y]84|z؇h}x~*xh\Fs]~{Kz'l4j~V~G?{|k7@爸DŽ~{Gj]w'|˗nvY}HoZHn h%( (HLjHgp٨ Ǎxp'ohxoȎn(Fxn㦏m菒bIe^ qqhwVHEUrXVs鑱`}vtuc'Tj¡Hi+wX]58 ^yX62Wjv=Juhm{5ngc2\V~|~{ IRU~}(jmaIfgVՆAeHɁSVq×"a  i⅘5UĠmט|QR% % )Iiɚ隯 )I P(I IY 2 )Iɛ  _ٝܩy,i`_驜RPP)ɟ eI9 i @`` ʜɡ:#J%jyzzJI= Z+mJbF)DFI'ʤM$:my"8IXڛllp9YkڡFO q*y0@VV5ᩡ䩥\J+:jJeZ𙦝9ꨏڤڣ `: YZ")ez*ʨљZ_J&ײB驫  i*4zR% z* :è)2CjI: Ԋ* ʭqG:oHoɮgT kJ l 밞iz6`˱z-"*J'u `5wbr-IBCK늱ڢ @6J5{^8.JVE_kX O;"S TjXa {`yKGp[@@[NrkXKywn| P={  h{caϿ?eXz|f 6F(!6^|Շ}v (ZZx` nx|PXUxp-KK75Lƽ$tGhӐB夤NP$9$Nx2rHHdi`%xb-0!rx| }j衈&ןኊF*餔VZ "(c߀TN?uI\%$d~Qi]PbZԫM +j*CA;6Yl=t6[-ޚ볳Zib_覫:#+.gA<0A7<0?P /Y?Oq _ho ,rjop׀OU+.)60=P@x(a ang9p :ܛ.W(A{8kE܃2L UiN@N@[AD .癎/N04P 5,;uk300Aur=[?+G0B<40w:Iܖ Z`(zlѠKmֽ[1ʹLIU`,)+m3D°T TDW:֪aOXf Ӫ6 p[B6'BqhLQZlVbKuDfuQfu4b5OiclB$[e nqb$7tQP݈Q F>}Fu<B-rIZR-w˶ 0%_pLfX܀3H>ә`%4@MXs&7ùLG:VNr;MwĞG8u&Й/ǔFA6.IG,,6XCcHQ#g>֖6EnK;CW`Ԅ}Q9=bқZRCgT^"GjRW Q+ P MVKUj\WJֱhkZ˺ֳl[j] 0jr,sˌݦ3QTV|-lg+ kW15ĵMr:ЍtKZhOvٳ]t xKMxJ-$Bw; ͯ~LN;'L 77{ GL0liKH-|[Gxɱغlj:L"ӗHe8CvU6\ʃ]q-e"#H>\0ə e8d HN +@G.PɚI3MB>! H@IO63~f*"=i&ϱʮi/cS5GTI3Umi}Z\1[1#@G`w9~6MjSEζn{j*.X0 Ɏ ml*@~{b{R8+|*8]p3|x%os-n\8W?"/;~#8?-п-GtUh@hd@`{b:ַNq{`^8U< <8A#"O \V9]~pB] q{_|gnq_|%qۜ<=/\<P3{qG{[w~AwFh1(qx6~zp=؇ȇqwzAr-'z=x׉؇~XXsh{(xjXnWn2x1Gxʸutll$@%l&7y!Gxxs7}zGzxȂ4sGsg%xH37،Gv vh ِ9YyD54vduPg>&9tْ.0.^d)*yh0T𓣑HRbJٔGI L)NV9WYXZٕTY \)^f9gYhEgܕn]pdYtyliyjٗz| L^dB3И;6)!GWFIgЙI eiYd$TFXDhY&y afk )ٛ!1YƤi{9"9ya(ٝ9YƓ҉깞2۴5YZɞyPdIdKB1DK+S}P,qDk>#TNHԠjcK5d 2e+Š RUk*T YZ6'J[r "k4ZH.2ʋ6ڣ>JjHj T'Jh/*svm@12#U@?@dSstjhDTD$R^=$jC5eV֢K:[MѸqz91Z3~zghZC Ҙ%SOQ-u*)RFS$X5o&#%C&)(UeURt6$Q*VQJSMS{:*zS:OOztiƚLڟǺv2SBr]9XBe000s01Zz暮芮IcSEu9R2RUF%ךTʭ, *#Fb*̪.κx&5#U;ðCB<ZUeV"b[;x9P[p|ʣ&E? `? ?ʲ4{gt:ԫJMG4:ˎqKϊYc) "DнAd3ѠQ"Hm!] !#]} " $-&679;==?]8] y]uCKLN>S U-@MYm[B_4=AMZW3^@DёyЌٱc7q"z!{-}-|~-؀=؆]؈׊M؋}؍،َ-ِ=ٖ]ؚ٘Mٛ}ٜٝڞ-p p =ڰ ڱٴ-ڲ}۵=۶۸۾ۊwmtȫ r=ԽbԄY= :Ŝ" n P߼ x]g*+lj^ Švf r8ϲd+k ^Tf[L*2%M)3>eT*!MViCiE+t"PnnVXo9vQ~x/`[>}~Xxh}m,8z׉z?'^.Xo&]8XnX@P7w3؍xhx}en6zNpy}y}97s>ghfngN쵎xr7k.N轎.Oh~9馮V<}<H8i쁎How'ϊ'p}!'{z?? >Nmv9?ٶ<@5S!p%(w No8? [?a/n(_!Zo!b7A?C߿`T4`5ϗK, v5@@do'?{?r/xOrXwo/t*{7olvՈȈ/ؿmE6%RN.PX_{{^rquO '}tΎj^2}x^xn00@(88hHX٨Hx9i Y9Y((IZjz +;K[k*0@APQP"|< B2mbRihkyX9^ >yߪ.^N*T4x :|.]|FeМ  @<0@ʕ,[| 3̙4kڼ3Ν<{ 焕CUUphХL:} 5ԩA$k50P6  `[`m۷( p޻yŻ߾{`6NbǒOL͖;WshЊE&yӫS~:vfسecuݸMݚ7pڽu~߾7ltp߶vtһ{>˛?>ۻ?ۿ#`H` 9#@>aNHaTanȡvb"F&jX* c2ʨ1 ܈c:c>x16IdF$5iMdN>LBI%BJ3cee^~2C7#gh=ioƉcw'l (j:;'x򙧛(hgg@VYp3 *2J*ꪣ* m fYI*:#~. ij.*eJ[:F;fzmJyB:lnʙ,*j﫰z(2[:.p1ZeVj+q+yqU:\ Lr-hr*r. 31Ls6ߌs塬s> tB'ȳCtJ/2.!AXEtZouX#S[guX{vn t<u/gWY"w~3bm7T6Z{x?0J \ Wz0G*k*3yno 窋|;<?ozOOkc_z.,9-Yygx/˧jyW_?g]`&=EptR Zo۟71`^Nh>Up| GηUrp qx>jLl8#}=t⠈,jщR\ hmqd,ߺ/ofl߸44^kHQ|`l&-Cm)$Y@H;s!A܉RdxJqPhU`TH@L \9h@G% IU"tjALRy P6< "Llfd3+I`ҙHtЕ߹γQԢ\OJNqН][H @] <_o/D$ӑU(P?:˨ŔnhTͫTIL\&u֣jX =ԜlL[Gҷjm\6`W̫_ŽvϮ-aq(X m{dpSd8zRylZiI -kWZֵؚ/DF }:P.ulC!KIu4 zUB勺-ІnP.ݼ+` /xk<PoĂab2'4&ts:fY\H]}Enn|3`p), #ưݷ ?@O,Dhf4`X}KiL8ꎃ|89 >؃wTYHQ:25cjt -nD=iQ?yIK`b/uVQ}RLG~2g:,_/1[vr|ڽk jU{* W=wɽfAQIo<Ot֕/y3U#u* 3ܿ~]v '8բ7~Vo/~(=X>W#0U"L܂gX_~L٬Tc_KUe뿚BYn';@}S3S&xHOʇ M ȀIgi7np(Z(8H'h)(*X-/(,X0756pۑg7'@ZY FZ{ZՄL8[RV8XXp\^](_8a]PU_RS }d'idtHRm}DQt}xs-5,EG'Ք]`[^ie5@6@8 @5F8h6 e6%P6x@V uH^%cq҃fp@ju4SsLvy>X]Ȍga*Xa`6y]ia ِ a $i/%Yf)8b?@CVb ѸboAdi`[.&c0b;d@L?S)UٔTyVYɕ[I5B@dFdJ> gœBqRFemo inh[s\vg] _*vd:^jikZlzm o*jt:njy{Z|z} *z:~jZz *:jZxY75Hמ4f@d*}sjShsiy4yɫVlRc8 ؙ4ʬiY3D1 "L〜vf!+g9+zy+4K#'*,,b)J.-,'2.-?e2t7ڊY3UzrLJ vۑ) K()&-R) /2+([(4:TXFXԭjG1˳0|O 3Ar0 [_۵_+cKekg+urеol; rϦmR{ _ȶUwy~vgU'pӸ #g\dq`}{:E@v9Yqqi˻뻿 +KK!k [ ۠ P 0 0Hh ꫠ Q 񽰐p` ۶W[0-@ K[K { ;̾;,ԋ;0 0@  3|,/, ( @l 1 K Kk\P.L k^aLdpe\NPRcru tly{dzA`943  'Ʋ0)\9f[%|h< ɭ0ɨP*lk||TKV p<<>,<<l5ì,lL:,' Ќ|"<0> CLE؜&˜ĨL,X;33 4{L =} 0Ȑ45 `u%m)+MƳ<:MZ3+9|  Ζ0lΣEJ`B-̗l pW}L$<3H@Vݽ?$\]-Y A[ JҽJpL 85@@=Lw\dmװ`Κ,L̟ԡ- *ܽc ڥo- ٪-¨l?-p$K}2=4@ y 4` ]*mmЊ ]I43ƽ\q=٨`Oۧ ׼ÑQ٘,I ί-m n^-N`M!i- rߒM m0-ȀM*!ܬԗZ;y]?ė'~6 nY-ՠ[llmۙP^WV|}Hy{}.N腞 n2M4PM,=`: =«|-.,JqNMpG.Ԛ̯z=灜ϒ`^>b)^q%B.]g- _N׏옜>ڱN>mꭰP6} v93ߍ ܹϹ "` Pb!?N'0()?(/ϵɱ.->7{[^f,E$g&y\)&>n:]?NX]\o`noZ80n P+%p/A/D-x1Ƅ-YSXO>#TPnw㲞_a.ԑX 4imqSkH.þbu!jH^%E$Ol8+?O/    ȧɯ̮λӾ ਠ*\ȰÇ#JHŋ3^e-GCjIɓ(S\9۽=3΃Yn\= (AhF@AӧNB**իVbݪ+ׯ^Â+,ٳfӢ] O:]xw߾ LxS<_ZRvb3k̹ϠCMӨS^ͺװc˞M۸smۧ Nȓ+_μУKNسkiyËOӫ_;˟Ot(Pfd  Vhfv bh$Ȝ{$,0(c885@bBc\J6餓c?)c2bcXZidFj9e??3c8sWg8ݙXwڣrL>)$nֳb.%>:㡈&`&6 `bjf7Rʢdi)ZJjnhꨢ:h&)眖SYwS*{,|'љ'J+v+["[Zo 㭾)˯g/X’㧳k*K1_[-=nLeo$|W{ ,p+3 Cܲ2,@i7o4ڰOG"wOk1Vd=osh1 ?(7<;mpcԡwwn'a> G.y{gnϚnyv;>9>nꬷ.nu߮{/ |'ߦG/y'8g9*X}ڇ/ XXE=o.@곯~R,ׁ`& ?0̠I? -8 (ӷ/~,a gH-_ 0Bzz6 (6}#@|D(tO$ǨV=PܪÆ/xf>%'uƦF21lT4@4p`T'B8S'h1[]{oV,Y}Iju2c$ QN $#K5fj[ ֦,GZleKGYfyKl e,qU*󑑼4g:7 bK-ҍL+NuFS\)I`jj[|Nznҝ;ЇgA6ψYe>21a(>5Gb@ =q!$8Y&s^+J(YNT.M(HOꔜ$M9vМ#ԊJԩ4kMAU~ԥUTS4:#7 ͕|zѵ16iAī` ml8 OjMi!RZ3,_Mʾ - {XNv2jW;ͮUEmYKΎ5_eXsAbn9ɍt%\κ5&ͮv\^tX׷pKخz{4.9`&x ^)oMs׫U*۸NäK~~oN 'X_ALM%TUXSO_RfUKqo7;f'B9| .)bةVޤQsXÜD@Nsǽrs5|&`w~%Lcӡv(;*~4gl5Kfc'?mT!d9Ε /k;`,p21VgZIug [ǡn+`9ȞpO;ɎanVE}N7/mka7@$_mc}n^cXpKq57Y;>=1##Fgrd5ED/xVqݸ{4|/s;dtu}IGgQ9j>-EMYϘ74嶬9b*zDzѽx^^1e~Ԧ=$1Q9x=w)I 3ch~j-BynF,~u{JLB{dt1̍.^m,}‏;:!S.QfOOx|=X́_Sm|/wƌn4n;9GnW޵wC~َ?9Zml|觭-?[+zWXGQA`7:pggXjP^xdȁ!M&%H?}o~ `qUFqQ__5v_GXD(KI؁}|͇vC`Y|a}1$8j{y7xSDH%H^Buvut؇x>S0WfqeTwJh'vk$R 65rn4r{ve{}z_w>p_ЁB8QS|E%rxQxU|`wz*&e#uEJ{'Tf@b,@"1>@C؎$) t3F*S%Ru]匀3ߣiQ+Y#Yi yQ`/ bȐ4Tk%T(?ACY GIIiHٔJٔ3QC?@h?$“p+D1LTgYhilnpLH@U\'A AGBaCA٘阔   |~ZyAyG,M,!Po9yo9cXPrfH)>MiYvyc9}}Ԛ iЙȣF# 0Zx I 3CE?p_? iƝ 7PftP0jKh_PPEjA`]c 7f9i\(爳V͡R[X#PP0k'fOMOpFPi2J$ʉ{2PʸjAwMzPP^# #p;:УIQjZVCz7@@`NBiiC8ӸKQh$FQHU7yZy*=Z*`)I`g:@AuZ@8y,z:o+z̚mk:dgG-Ě:(~:Mź䚮5J Zڭa܊q Z ; j[ѰkKၱ $kVڦO aȁ"q+{/ ɲv\"k$ii8tLJ۴>Gs6cZ6R IքT4bhToZ JO˶6vn{sS['d4sU{qIzt*MvIrӱ_6袖o({1A:w6%Lgxff/jxC5e۹HPj͈=c+y۶TxǦe>Ckbzu:[xx+|ЛPeT$eׅcF|J`$9mw 0{{g3GVs;(4[{{\[l˩\aw$W[iUzJe{k{ngt~+cBo`ۮwrWs۸ۿ$LXZ-ܼ[p;9]8 Rfзk9S;YUdVd PeKij &pgukY ŎD*b|l{ EzFWo;ڥW@vo 5kk`⫆7iUkKuȘDjwڼۋCLG8ϧk&cʁy YbkDuHM(/!^,jz)ܲwҬf\|*L߹Żl*گ; M@ ؀л!0\$pE ="]$ wvS(-#xL脃|9Ӛ=>@=;]?mB (,U.j9+<(!:w= g7;`D #",~>h#Ȍ}=} ٚؒm9٢}ݓYPM<ڞ?M]wvG$WLi x$6g1b~|2{Qz7 w+\<␬A5޷2n|UwWx%Nܤ_ HtTX_~^^WUg~dRX^]>v(\?ě8v( :/{xK;̧ܾ;K¼Lp_TDo.5pٴo.Amj>>G. >ʾ`? ?QQMՒ!7 ai DDCBDy~O/   /_ _`xT$`Y)/o)m/-4?67/8:lixzn&oA8 STVR[U`IC =-}zö*酁s\l^MpO#̵ VMTS;MOtoﴗtKۭ5h6kc0^|O>X*+7>޻QPY ߽KǏNyUO19&/^eW3zwfoDw[/>h8ۋ^ 8HXhxX((`8阩 *:JZjz {*@[k{IXy) ,N^n~,a!^@Q@Н0 D(TrhO%KZ1ƍ9s!Cȫʕ,[| SBhPMb}c 4С>7޽|<# 5ԩT /ƒktXZʚ=6ڵlۺ} 7ܹtڽ7޽| 8 >wLL"CȓU>0@Å4gЛ;_4ңSf}خi^=jٻk~7޷đOtԛ[yܕ{^}׵J M`;]pZ@(aN!Nxafr8"".""4hc-⸣3"2c?$*9!8 eHIeVJydDjY%[~%\^)&d yiehJ5YAH hHc~Nf*0hz >hN(Z*i^i~i)*jjj :!jkk ,ˬ (~R-ȏC@*@咫颫n{n.΋oޫoko /p p ?lpJ.ZC{,r! r$&o>m%ly5DPA ttJ/tN? uROMuV_uZouPo|qb{Mvfvjvq]A% 3p{Ǯz;N|o|//|Ǐg] w?=]@@Wڧ` '`>?~>~/???# K @>P\+A jptB ~P! /0,! [H0.d _xC֐2a8C Pq^wU/;(JqT,jq\0qd,ψ4qll8эrD%#;U@)#!(D*rl,Hr%/Ljr'? Pr,)OTrl+MY9r-o-61O/ ̟$Ө5ksl3a;,)&IΞljsb3x|T&7ωtsFA Frjƒ묧=aɘ9 Ѐ ԗф4Ky1lC9ɇJtEM;iE&0|3$-IOҔt,mK_ ӘKM_-vi:'1 uD-QjҚt*g,Tg -+X<XDV FU(iYS k5[TdR׌87U EvXrjUGX:vmW"YvuxHΕm]iK;ڸ6]kߪضvEl_ƶwͫo %uqS" V6ְe.e% ݰnvMt)aYVdmwKWvmmQﺵ&mxsZu^"Z"\r'+`N=0XMm\X۳ʗ/9\w -]/ ޳>I{[#M+kw=E1V yD.Ja,$cJ`s3F0lm3V퀫۲qlU{&Dn|[֍Yx 8w7lK[$gF$a#|lX?-wayG+19'nr 9΃{0zɟ.{޳wWqu;#yDž4x=G];w=tUU^E^&@>#~dV<K~^$B~pGQ$AOyϣ`et<`ӫ__:6{5D~EP1:P$>?G(?Cӏ}˞w>_gh~-Nc)>ʶ|!>w~Jy&@zb}|h䇀~w}G|x~HR~W~wGEX~S|#}}'~ h)}'( ~,7X64h}1x+{N IY:JZy0 0oK0[c{xVhˮxKkE+T)i>ڷfv;FkE&*ɒ. 2I}QɷV:Iyx?A gDEI)Wbxka9eyiꝷؘrFIۗqwi5j ʾX)X'*ۖyשݩʋ[*E9Z㙈ոy˯ۅz)#ɝI ˚liX(6ɵصQ$i79ͺz#j%\ [Ŵ+J^̔i&\wBQ3Z7;Z+KhĪ9OԤOj\,ɓ\ysuw|^JPɟ QȑOmq:LyʮʱLɣ(*󊨊ľK]ʖKzQ씟z̽KcTnvLˀ:ڲllY—IIe] ʜ { = MW.<{Մ)VHqmps{v+ˬ׋}Frm؇؉؋g]⨉ Ȁ=Ȗ98٬G˺̛iH匵 y~}'ۙm$y蘯}Iig4*ݑڻčVōa+ꙝqlͧ i۞7,0.z.͵][<|Ϲ\W fZ1- M2:,c[P3'֟m+^+?|ߧk"=|2} U лܨOńTEW$.ПFݷ8}NG4[RE>&IQNbNFM[ߨZ>x7z]~3lμOTג]v豷6O>~ h'{#]a9[$ވ?)GɑɜjPLtI!Nn뷎빮~  )'Ѣ WO!ˮ">ξNߎ.>Nn.NN. _ ?  /?R 2'sDS duBπҞ!./_"0/2"46_!837;:O1o59=M/N_H/J?L_!}5!XW]CPOOQOgofc`_npo/t_l P`oP㲲.O((@o_/Ooo/? rO/?ďoO߿ׯz !臟?n7-y~4    dz˭ɻ̿ϵ  )(x"JHŋ3jȱǏ CI`PKRɗ0cʜI͛% ܹA( w$!N>PDW eV\ KvYgǦ-ZlʍKw]w歋^|ʕpˆxc#7o_yС3@m&jK%@ 6F(Vhfv (]$X!k&,0(4h(ި<@)DtϑH&L6PF)TViXf\v`)dih&;PKP}ZZPK,AOEBPS/img/bipub_rpteditor.gifi`GIF87aEV V|䔱܆||۬<>:6\JK d!!|FےٳhӪ][֬6裐F*餔V`vZa^#;j_8'5z<[^fdlHOc4I&VevלhdRqљc9bZF[mw%a&[wL}WypgkF9>+oyol|W~갩}b1:ıvFcWHUX% H"$8AikǙc>Gi{-9;sB#mt4#覫2o{Yo}Pk8p-tm7ݘ|7<\*<#x'NڏÅΌFrzݶHv]=A^Zc䴣9,~ &qrۭC=;=Gk{tk;k]'\u-|emw=/~ ^o!*xn|(gK>i#Rw]P9A̦$c+KVvt/#^u2M yP9%,k9crf o['|¤09yeuy8NzGDiooߣ=D5Q|yC8m}S>I}`g<3&]80 Nade2GlHC2e)(-+5 B`&̝ #Yh: SWr!c#i,4bS@㕰,b^i#MD{FEn$fnыQFdf18mm%>ֶ=mmsMngWv6v?{Ax˻7 x؆lvg4)QS}Ŵr2}W_BW֯v,rLrjRO4;FrtpPK2g7>އe-k8ѥ]ak!Em,t9jS;nqk봝}n{7}ﶫdw׬!gx: .9iZDrwr"<7ވ7W^0l֧r0Љ/#x8by3^x^Eg$h6yØØjiOĨi4{VsQR^YcYayfʹIvٜ9{)I8|y>YIIM> Vki~5xyyO{֊1deh铣z1ך: iψik)b'F@ڡ "@p9*,ڢ.02 ui3z8ɝrW<)8a,t9j3x~v1yǙ< -XCr+gڦy ZTxC.@Ч~:Zz94*:ʣY*@Bz8GqwǨIȤYTڒ]aeSpUZXB9P\KE;yƦܲl ƫ٢PĪ;Zz1eA('̓>'|j z/Z(쪢;Z |i_9p#*wG_H9 itVJ7 5Y:)O `t`Zd٬r:2jZs܊CVP05;8}Z4|Bˮ*H _ hR*BJ:ߙ(Z!yWM )Ʊ#rhڶk3x W,۲P=;[{۸;[{۹~;{ۺ;[B ۻ;[{țʻۼ;[~ڻ۽;[{蛾껾۾;[{ۿ勽<\| P| "<$\&|(*,.02<4\6|8:!L<@BF-K^M^WN[ݝL[ٍדNӖ~Ed^Y6.lJo>ި=گ~Š|O=$\ImǷ~ʾu5MӐ'-*؜-n^,#8B n.^~9lUlT>۶~ˮ1_/Q "?$_&(*,.092_68:<>@*OB_FHJLNDR?T_VXZOQ^`b?d_Eљjlpipr?t_0sv~=/rJ.oq_򒯢0?_Sj װ ڠ ۠ n/` P?_ȟʿ܀ 68 ˰ ?_?ihƠo YpqJ DPB >QD-^ĘQF=~RH%MD#pmlqmxUTU^ŚUVY)6ei%ˏ utŊ("D(9V$|՞w-FXbƍ?+̘gJ֌شeƄeF--,%x 61B=;n޽}\a *ˬygaU6Z^ү_u$N$9!c}uԩ]:pǟ_?/*k&gyhF;<`.B`$<$:G@lD{o?_1Fg̯ R`G`%So{(@ $Nl/= Z$RE1L1$L3M񄛔Y&bބ y&4L4TQG%TSOE5UUWeUW_5VYgV[o5W]wH[ 1f}ud&hF:iKNse]xsq:kk z>аl)F;mfOp;n离n;oox G>yg>>z駧z>{{?|'|9}g_ڇ?~秿?`8@ЀD`@60i:V8A VЂ`5AvЃ@8BЄ'Da UBЅ e8CІ7auƐ?b8D"шGD&6щObD)VъWbER_c8F2ЋeDcոF6gtc8G:pcG>qxc 9HB2d"HF6Rtd$%9IJE&5INvғ%'+9JRҔ(JVҕe,eQҖe._BEUҗ&-u9Lb3 f2 ZәτLj*f6iVӛ69NrD+YNvӝ3<+ t3|g>OƳg=Y PuӠE9P{r- e?#PB hF5R4ehE:ҐNhJURuT(He*S4(eiNuQTMi҂ԨG'/T2M}R UJT*|"ի_&QA4gmЪV5mek\*׶լeEXWgR1v]]ݺխ\{ձ_;Ylc!YFүD D;ZҖִiUZj ֶmnuܺ6nm4׸Enr\6׹υnt;]V׺ nv :u׻]L;^׼Eozջ^׽o|;_׸n~ޗ @p<`m5pA_Wp%7^B,gzFy]Q $E-fAp߆K` D VX Jp ,d8hSBD 񐃼j8֯Nrw7 ,(&v̢k~=!YHaSa.%kwV(a+:3n[< `yw%v 8kX@ 6vՃdq/^\7B@VHP]8)ZWE|ȣg-ywΞuI =jg{Wv +PA&BaB$b.PӿVhV@t>3ȳӼ@<@[2; ?;JM(l\AdAth?XHS) F:;H<#,UXU&$vy> ɫ@24C ?)J(?[AATHTn9"@$SX%LP' DDscVXHDB0.4E CR4EU1r1c>HBCg iiTLǛ8HFƱYHn Ec7 @ Gy@ C \ǐY2ŖcJpM$9lɬqɯqNNY(P$hɠ, ɨJ+ɴ6TIJ K`HDLʰĄ,˧ȩt˷D˾JйKH##P˽˿DTL[2qLyʹ으TÜtTMԹQ14ld$4DTdtNiMCK|䚊<T<1c2c=cAd>c?6d=.@^dCvdB@dI^d=KLMNOPQ&R6SFTVUfVvWMh=:U@\e]S^>]^f_6fb]>d6f`Nfdehvf_.feklmnopq&r6sFtVufvvwY>Wie?=|1g~=g=ggV&hh6臖hfh}&6FVfv闆igzvS@̓΃2ii=1j2-iFj.j&jjj&6FVfv6U֚/6k>j&6F췖k:.ktŃȖɦʶ2&6FVfv׆ؖ^lilǮ\S;&6FVfvn߮mm &6FVfvooT;'7GWgw p~8p99p8ZTQUgwqIyewH?qYS95*W$WFh8x'q)"1:,_9@4OQihq8Gp8n XO1'@93W9C6oFwtG>s?YJtAe#TAt; LwtGsItUKU=}UK_XVNuVtT?i7s9s;Zٚev}ugu*i]?C_EgSH?UXXwu5wdYvSvmRSOpgde?wiw74Rw6ws89X?I7 Qg *Om{ՈCXxs4%!U 0%XS^_|XaxJ#=Vw 8dT4M:RHU.(%6h%aq%I5B#8XD$li:5嘁femY( (9~f q)YUyiV|B))S6je&* %ZߣTjF)nrZIl[*X񺔪j zmn;.pIgzv*+m& [/"[UΦYf{0^*t"0djdBKHi{ +{gZ+p

8Y oR{}GK,WPnᡋ>:'q7^Y~u;﫞k겭i;{yBC;K?k9+?>M =|??[?_?(@7 PAd{ #( M jwNh&BT&4> $O8PQ2!f2M&.(D @N|DⰊ J!z-F8|dHDp}@"5n 8,vcTD. i"1z"pوE.r|dZt:EP$3)%}K?E52 ` ql\", YDS#r]2B8IK0%Iq3CG-9i*-u")NqRTeH 9!ԋs(y*s/ (Fg#́ĖkSD"Ѕ*B<9y@.$)sy"$)W(i*DY01hl әt*:rSD8,)G28''=Q(?̔ƒ3)}@]Մ3rpWbutx>ELqkS*uu]}-tJIs9ˡYT*Ѫ`VUτPJebt9U+[J-^ n3! ,Ζ&)mA?O6%H>WmkpgI/֎XTֲJԾ6}lwDӭ1~-ygM}>7C~ w}g .qtxe">q3L4w&7G𒟼Oyl!\-dsnpf9 1:?yC';垦iTs8Q8Îq5@ ;#4y`;N(7PazDHmǷ.xJݲ1ٹ@{kͻjn /}i}7~Y@+EP?DDWaG^<[>) ?W_ԬVtw|۷=[?]ˬ4yNtj=??ӯ?/ӿ??)D-E-== q^}!dn v~  Ơ ֠ ~6 1!Qi FN!V^!fn!v~!!!!!J!rz -ơ!  "!!""&"~"a]`L"%V%^"&f&n"'v'~"(("))"**"++",Ƣ,b%6@#4F4N#5V5^#6f6n#7v7~c0""/:c:;B;#<#ʣ=#>>#??#@@$AA$B&B.$C6C>@#9#0\$Fb$^FfFGdG$II$JJ$KK$LƤL$M֤M$NN$OOD!PZdIv$R"G&RSON%UVU^%VfVn%WvWdPrӰ %QBZeZ!Z%[[A[\%\]^%__%``&aa&b&b.&c6c>&dFdN&eVfe8[Yg~gg&;Ahi&i&h&lƦl&m֦m&nn&oo&pp'qq'r&r.'flY^`WUP'ubuZv^."xx'yy'zzGssB͉'}'}g~gh}(&.(6>(FN(V^(fn(v~(h{{ȉ_(;hhbA樎(())&.)6>)FN)RfV)v~)))֑Ŵ.I֩)橞))**&.*6>*FN*h*nK***ƪ*֪*檮**+jfij_>+FN+V^+fn+GTThy2됈++ƫ+֫+櫾++,,&.lz"WAVYչU4‰~,ȆȎ,ɖɞ,ʦʮ,Xbil=+njdIǒ\Eq^lŢjv9ڕ=_V-,Ɣe:EzYX ΂_I ^uZvmSLѢ(VW\eBg۾b**k^Jr_ڮYϚ.R׺ݎḿmZB. ['eՅg4I mᮖo eOE RD~&k4foDj/vױn /֯į/bop/~SLLH0};xs() m K_Q;Ro$D@ @ 0SGl$pU;Q0E%oE @Oq' kqqS@A1|1 1oQ-E=;1r# @\@O4[11S1 @r!ͬ-;r$ 0N@A8$MXPkلr0 @x!|,rײ8AtCز9?29+L4o)/ T@t\TA@5yI4K0771IrQ|AApC3=rFD\X=Fq3\tL3s@A4X4A  DAneDCpAp8>t985(t>tt\c@u 8RSW5. q@'sItF5pc43G33$735Pu\u] @ 04^ߚmys]1 DAdqW39Co_pq 7Z gh0PA\ < v_eW-S,  OkWIfq7rsrrDwTR-l7x_W6aspW$d[_ In|eWt~W~[ <77Av3FOs"khCCA6zv68׊N'3A88v{ύ[`WNcy+Q/NC׹\ySTA^#'7x9#:y/z:S3?zlDgMTwzvpz:lf~kÚ:cP::%zz:opy Sp B0ٱ%;N,;/ܠk _3D!,5Eўq{Px7EPSTDQ;O\Y%;ObB`*"!|1J MɣG<9{_|RtI_R;+%RGSɛL< B}d=@{ʳ*ȼby@I0Vϗ=;=П|+=C/>O>;>7G~W/ҋ>ĿYTqKVsFݖ2iH?TUȒ}+>[>>~[~7?ꧾ!vc{T8Y$TQoaW~C>CBD3K???<@X`A&TaC!F8bE1 「A9dI'QTeK!~8q AB4P>}Y3PG&U4 OrJB8C ׮6c˦Ekȳ[e$ٱo]ջo_KG'Vqc Anre˗1g Lj#|ȩ(PCjH}ikL`U JZ\Nys3G>Jk{wGzyǎ &FihjD__S * ,m72k{S9̂ #,BPB -T,:I,1 )YlEƛi1pQG*l@m,#<E{'\1FK++o-DJ ~Ѷ *LS5l7S9Εq(ϊA -I.ҁ h 3 K̓JO Q =4SQE@RYmU4t PiIQ_͵HSSUu Va S[M;\m:VikV[m[KmRqMoMWu6=ˍWއm{WhF} ._nX)uYΘ\+Ab4.YYCNYYkdaif_YNg矁8睉砑NZt.i^Zꩩ&駱/ꪥVxZ.۲rnh(_;;o o<Џ$qFn :aAl&t)'=tj\=_]!?vRsj{gs4ݑ/ۙ?hQw9#T3xw_/yIa>$Gi{'~??j:Ѥ&wao~0@-0AR (H Bt .`MAz% 2dXh֐'C)P5"9^xB%e$ 8*f0lmu8F zJ歱$!HJ'LBNҏ؁"9dИɬ4e(+R*OKY)t)gK]b$.wLa0LeƄ2Mib,4dVӚæ6Knva 9ut;OyΓ csmD?_ I |$ PfFEp3m N}#I)-uKaSΔ5M5zFң$,w4tQD*SU /T_ӑ$!C@ $E*"JTԩ3[U2j][W@"jWP"%%YXXut Yɮd1YNf#~l_CW&b=XTcA+vpn=[ҎnIKU5-jAڪ5+l׶uA ^񖀪-oy{wp%z;^w/|wⅮ,(N?^m#Ac׼ͯ~k_Ʒp~5|Sؿ * \4lB؋{#>]N}q qO1qo&.67v_풯\e'Gy>-Ϝ5qs=ρtE7:gKi)FuOUձuo:Уk(yўvmw| "%I19x7x/]?yL~@Hg[OrvƏ7Qxx@;N`*=?xЛDKA{3(Ib$*WE{_G̯>Pzo]o)&ه$|CxL?BO~s)GW pծ(B(@@FЏ1/LoBo>DoK0Qݏ  p&O*8*~D."ЫvPn-p ; /g֯u0)R4p )LpO _c հu0Đ P P* 0$xe54X#[CG p Opi /0 M)61:jeoDYvQ;QGq 7%}P/Q$WQ*\+2m"& 1# Q91Q q 2e8pCQQˑpQ$o7, UN#?$Q4a%Y; UA%mp& '?RH !űN738:S7b4s99N?@s:9B9,/C<2GrR#Rs= /^s|r;&2?b2ӎ<s/ @}E=`6">V3#3ո؏U591uy-U1gÕ%9"GY'ǔ8FOqayF<זq;ٓy}Y".zIX1TR1JU?ww9B{9-{q0OS^?q^R]W;Y92<?9pyK'x}XWX&Y×W2;0-E7DX)9E6`csY#w[آa:ӨukZnoZbٝ~{u%zvX{qzqU`ŨZ<9UNץ2u۰COu^:lњdۙ`߹ª߮y5xm+6;9z; [zf-1;sA{:mO[Y_ֵsc[5ۧC϶;j#9c;؊xyh[F;Qy w#{^;uP\Wsi2wk1Էy/NߗGQNڜn!}Gh1˹a[i": q\W\&3#7IߑIq {Wi:C:\jU`Y[;ۿ#Y8Xi7z;SCqQ|Y)1Ky> ߰ٞ>_#W4>AmI|qY1 kg>Př^OߗS?kևYp]Q]y]&Ik{{ ".ݫ==B Р… :|1ĉ+Z1ƈ_˼۶/^lG``Z|e_/~]aMX݀ ~b"sI(!a2yVge!$Y%c[=ţFEw$fBAIz$Nq5X8'n,碅4&w6cu%oR9AuWQµJnZq9CrWYexybӍY_3iDU~7UhZNVIU%t>iT [XBq&k(鬯Ԛ*if)RivKbkG갍 $y+[lҹнS$lK3K7h%%(xS"Թ;.ۧ \o*0[lD̦|@/*dlNobz,0uC>od:Nj>{o! gF:0~c藗wӟutRMogU^FVzL#BЁ]mGA  o#,HR 1D#}=l;nM,^HXy0.h~RI1+^.քbGD~lQLs'Y:PFR3[9le9bw,gTT*3-sX3i^+=ke{^>{*PWVxx6nƛ'LiΌ&0Q E+щmO(&G/Bg\XjPfKkj,AtiыL-*Q83Q<\RaVJHw |Vذ OsxNu > 7Q(H >S5)2zU+ڟ#ti%*@׏>=w}=6cqzp6S1WZ2UR!re{iD}Wp=wt'VOismeX):Q`{ׁp&:$׀(sUCxrREqVm4xa{8|:؃].rfnvXUKr&tjPM6o}WH#C!t OLt&TgL=ۅ=6~N4PWq-O憉gAsH2bd|rwxGHgH2Gu7É(lY#!bxvw[Y8Tfod̤i'׉8.P((B荼ۘ&8v#B߈a8l}ǸdH=bȎ5،#Git~\dSOxhjwst؏mGPid wUc/\x4L5obMo7g$7Uce:tFoFn&v/(3Kyiu9)渎)7mSmR(3Lr1ɔ}[(hBfpWtŕn_]xXy+ȇ3׃tuKC]Qw w5WQu;{9jUw~]t{KUq(Yhys4@9hÉGY雦 #)霬~'}3ω!bՙ!י [4T@Evw&4yt)")xۑ~"7k1Nj O<՟I jZ˩z4ņnYlNO)ͦ3 Z!4.%;)UǦp/~$F9uTs8 :[ r>rsyVKFMJ5O N!.RapŢ&ؘNX šiZTti}XHG#(va7Y٧q!Zb1dCXB9}Jy|&NheJf-JGJu᫘*Qqcʺ5̚Tϊ,2Z#jW*Qz)"*|ƱꞜڔ:~B#$-§I[7==U*uik*ҭ:R%!0]_K&Kfj=閺P$s&0H<²-[2/KY*V:U:[ii`)KI@Kp19J-&l^xK{MKOQ+$i48 &tհ ӳձJu˷'HeL*}kiq+gk (z냓˹QUs[+kۋ g}ʺK+Q{q;  `뤫{0fDk/%>UMF "+E&$cۼOgmY:Y@I"K;K0;˺#j'PC~ =s [tE 2Ȉ;F C ,Qk(r֒*9_:낭&lV(, @j˜;aK jIHMSpF,hSc%hȦ;L=<;0; !|E,G̸IYGۨUQdWJ6lkAF%Q|<*QzHrjpmɂA.0̣<7Wyǁ1ȖzȈ|Ű)uC=eg-G\㷂i[ ^|1f̭h,rB7 q0̄l<ʙy($!P"` ʙvA κ+l |<ϰ+|1,}1`` ,tݹa\+bb -5c3+ͼk? A-CMEmGIKMO Q-SMUmWY[]́< lemgikm:b=omwy{}-{9؁-؃M؅m؇؉؋؍؏ ّ-ٓMٕmٟٗٙٛٝ ڡ-ڣMڥ;PKvndNWpa+T|g;G6䯘3k̹ϠCMjزR(V-[oݖM۸sͻo ofm. (_μУKNسkνOӫ_ϾݍFϿ(h&E(Vh"v !F_K|Мϱrw (h89rt t7U9sw@{K^:sv?=WӇy7wKw zۭwd/o諷zNr :k<`@a$`8f%VS} $-^8950! HYP7<Py߶υK}m2xM #8Y9$-hLG0_+9vTcx=>>%mGV|ș#d@d `@~) Oʭp,d"(Prׂ(:%ŕ+ Q8>(a'7#rzD/SCNNѸ~2kfq>8=<C@Bl$A Kdv~s(w.ОfG~ޱ] 6øDFc#!)IJZD(gR"1"+QS%2QHkM,DSӤ)ѫ7m JST^92vg9ϙuPHEJB3ߙS=jE"P ơt˞BIVD%X(`id3$'yW]t2-aIR,TMfa8ӚvԄjf["kՐ1[:oS4':Nh`oZ]c_ @0 Ѻ%%-KHhBf]/{Z7{-e5ĚrЌ1[Goz%u|a.OI*p,io+\ ,Kg-U'm acߢ Y lm[!zغ>z;/) ]2X)_P,tmK|^Zy] SeeMY<)~c)V 5gݦQgڤeHpL?2! mCW(񵢣cAnl+S$T}L̬kP/4?M)A,Q\uK]SMk*UW5[U,9v uCЭu ͶCn{ņܶ4ۀpΠ 5{)6.5ijT_΀+vzZxֻ`{5~q6;o$#, ]DzN>C=iN^rW˿ǺیuyJyW`zfƒ;='=UmW^ցl/1g/2__ Soo6kýfN]LU<^ G4six wݺwVZpjE*{~~Qقuk{J᥿וvnx|:t@rt|)5zi!~/+qjv<"kx/cmbbB9n}riZJLZ~j|%zTĬoJ*䭺y}ʤZ{RJzSڟU鮲{ YKt꛺ʡxckvz mji:iZ}9/yW;wxњ5'E:f*p9_5˭Xujy= a =Z-K^~N q t97$@7**  #.3~)׳%I`zy"C"L> P,^H*(Rf)ZiF#M>*>) p @NqBab`~舞辢!"$b`A~阞>^~L ~Pxp.>Ğ@.~aq.מޮ~Q>Ş!~]a?Ϗr+ 2._8˹23ob3+s(018JYA304/L#C"&4#6#PR%YR$3%?%A%K?'3LO31Cbɖ+i7'YiiN2dQcoglړr?t_vxނi٘YOa22c/UnixB_((R/01LȔ3P/2s"O//z-X0FFJi43Y]y9S?NI[7)2iTC72 <@Nۿo=3zhLd8WxCf҇G@@ DPB: P 0(:"pH%M$0@` R QD}4QK*5X)OVmUV]"SXUÖEñA" @%X` Fpb\7,qdʎ'VnǏ!O~reVTFZj֭l)Pp_RnԬӡEbu]pW g7q''g|;doO|{Aز϶"ݏͲe3ĐD́vG<$@ʣrۭ/|3"DlB B4l2C!{H0EWd0 qAx ;9"9Z[.z"\G2l &5Q' )cCDq#ēN5! '0 DA* ǩn*=3礒βSdBy,  @S҃2mSMtI24Q%/TW_e-Ƥ9_t wD^$ǣe+ϓ-FD54UQlm2Ls6ߌ3XeXucж5޴7fVl ^Z @ͲamOo$b/6l+.:>sdINlX9OfByE8lWd7ڜbmX(fM\3TM7\]{i1n_C=XDZGJòXa*n!= $0Y; QfQHQSyNç.eiSN^/BlvvTޖ-n&ۥF(fJ:1G杵c [pK{/w%4>yG$S@ˠ^v>#ePu%]kpUs-}:>]K#yyl"F=X2F#W4@%v0[#PSԼ(vMkj@TyoxD[7]òԩ 1 uî_twIebMnfrbv7 fK.ֿ|a4`n1hRVIqkƵbtd|%zUtYڔǷ}Tt!GF6+{,QF N G.Q}{b9/J"eȳ bZfkiR59@s\KA< |$ HO Rgxm˛/I0dG[\ȧQ&} AqE,),2s;\& @խ.t1"m;إNn2iOLQvaD5P$|iZQܹv\gXΦYiD8.R *D$4)9̬ٱ$sˠЙIOR/%>%+# s;8bSi;ESSs|`~9[E3*yufvW B=E.t)]2rymeb&g2F3l@;;\%.K]UjəNbե3h{S]֬;x6X-Zn߲DulDrrl0׿~<`>`/A" a W~1a w3`}ku+ `6ucrÂ<:;>rdOrXEn! \E0y^VfجGRfF՜f6mg:y7Xփg7|w|wG|w7/?yW|5f7ƶ8/Mi?}՞˳g<޳I]~}G{}o>ms=ow6}?'{>7? n؏~/wK> >KH5S t7?rLs; «L sz%z *E+`!))ī^Ү )bA b6.Aq€BYα*zZ-Qh (p؈Π=m=p@ T5d6t7\»2d3  *&,A , TA(TT%ډ B"+#7]ĘFASҬPDU")'2dGYìê "kT B Dd*HGO\B,J$¯\流EAFTD`G!Ev"+jvdr}\ȃ |ȂIÄtʧʨJ;ʈjȒhcTFMܓfHilnIwd’qR%>6MjʵEVR4QNxd J?XY@[\]^_`a&b6cFdVeffvghijklmff[pq&r6sFtVufvvwo5z{|}~&6FVfv臆舖艦芶茮gz/;0B@;:fv闆阖陦隶`j^ ?@;8;>gygj^yjjkj簞6kv뷆븖빦뺶k56h pv68P{^ljdž쫖lŎǞƦ}Vk춾&6mk^mk"&l88.m6FVfn<$7&N6~×fvo22N5E@goo Go qe)3?l+X( c4d_g {77qqqq=JYw_o wpp )p+٘r(+0' 2={t>?8o>qss"sss@zks A7/t7ngqGt3`'?>ws@;gr2P(Ro6_qdt**pɕYZ[uD]^n6`&uT ? \[uk{hYk6lg7Ib:Ok>o?6Z[b o5CYSuuUOv:to4su|V"4p؟P"`\*ZS㌠_eL>M2IBapj,&Hea'ڄUr,CϧnԠ" |ɣ= ,` @p @< `"ƌ7r#Ȑ ,i$J$Slr˘2_άiS#LD8 B8 (Ҥ @>LJj32~z1a׮ĎEjM{v-Yir-ڛze;wX .6_y5H0"A :x̚7s3ТG.m4ԪWnڴزg6JS!Px@!A3k8ʗ3IH)b,\:vq|msW=que{dbF""(0 '6nOTK3$laYx!^hDԵY'V`,ʕ+7^Ytݍ+HciX}?ԢEA q߇8` T1ѕE[x4#]6 v$eג "JwYg6g)Y'xxt")>IQʼnQa"Xy)d "mFIDR6*z**"**hhw]iU Wv5r2cxW%f{x%ֶgMe5߅PA!/C?!!z:/&;#;Y-ܣ.06Q湳nVPSA0䙅pxBkt.%`9aM7 ^knZIG)dJnNʹ!\@,7?qGP R[$lN`tՁ;naQ?.Fg,j9{9v*:s!O,:k-҂dȓb9Ɗ.ƽB{o>>H;%VJG5 tL%7 o2H;/Z` 58/<Mυ (1f4)=PuQ|#5E# 7cqKq"\5V_~oY^ i zlQyz_'/z _[S9or_!qT2a 3"m cV4$uh8A`()dftjdg<PE2l3R?#f#HUZhiXtYظR~Xc ai0=@MOecW6ĺ9ny[70R${XEL9WOg(HC*ґT)L@})L_ 액7?OY4NNS%;UyIy0'JƴTqRO3Q-K! Q(f-E~lX-MUkQT[ dK\ĭax5i5\!R(J$[HHGhYCw 싴|CƇGrƟ>v&G(P6*#,Rgw4Rw0_*MN W;aIy_sRT c/x3mkUɞ^^)×H/t-L1cn^v Lk٨vͰ HV/gbJ)0d,X]kVpL܈m2Yr{'GSP["Y_. s߸MsģZ;NtUdaAsЊ>9Sr1ܺF75.ɞ+yS^JlGIP9=,ښ#+nߝ cU{k 6?FuwLfϘrQdo+Zٽ.׏]A ލ]%3=SnYVp15,-h %yˬV "vAPvDoaoT W0O جtT-!6a!el! ͍ Z{]_Y\ѽ`V!aUZڂU^Dd᳁ۏ  X#2yaX\̠|\la-aS]<ґ`,m!UVUޓ]'>_aY%` &~G0IF"׀b̝@EM1T$^]u"e#9t#e ^L_.U_z]# q/٦ar dS0!c[9; <"6Z!¢Mb"A_݉Aab]`\Em#\fTcAT e9%_l  QR#bbHc@SEe`$ z\9Pҙ(`qڜAbH` VބfWd D b_c>dSNfe$Nm"$"G.brbI"MgI>afMl2WX&pxytH zg'g|{F|}g~'~~|ڧh('.6~&2h:(Nh|L>ync,arM'~Hh(RhZ((h(Bڨ(ިh(b_ty~"b& S.ē2|\)`f)n jiv~)釸) ))i)iީ)) Dt% Ut&cFADNRV*^) 0IΖ騖j꩚jC<*4**ix&w B*j*++ Hȳ@FkV^f+nkeC|%B W&jBk.~hr+벚@JV+zkR*jm@4@>,:lV,jlHnrȆ,ɂ~,ʎɪlʖlˮ˲,¬;,JCE,ll26F-NV^Zmb_B,K EB$Q׶۾-ƭܺJE---..&..6>.FN.V^.fnq܆.閮:b!چQ$.Ʈ.֮..@./&eZJDUdNFDz/^/ڪmZ~b~쪯"Do$/o/ίo.֯ poƯ0/XWp0rC$Ep}0'@0 E n0p sp  g001en>;abg`BqULKq/*Ebson70oo1/1/0.q/۱qjp߭ ˰' n/""0 ; 3r#K!p$m&o%0'c2p%3r61#!/+r+,2-q-2.22/inM/031j/2/337s1#炮3O35W5-4Rspsy3n>$3}_4<20c=T>_>?CW@;c<aVdqKc:q<4:4Ds1F@zq[4Cs4WES;߳oJ/[KGqFJkEG4CGN[ltH4DGOtK4?tCH봑δotS/uBu8oUwtW;Ojsn?;IbM n$HRV7s&͝8!SڙإYHHOZR"*ҝ8^M"Y7ŨKx~ݥdMxwPr7,xA@Pmnwt^w1iq2+n7v"GV bqݶ<^"$ hV#mx!2x[ PJs"gD~xDOa4{7"u'Wf9/Q䈇9zJw㜃Uҝw{twx_"s8/'iLY]"%ZOKp!xvF:J7ޒӉ#x?zR$3c[iqFgG^e=[sҐ{C ~_8z̙:X$ w9:Ck;ǻ7$3)_wyqw9GY5:s@<<9I|u/D4;m:OZ{g<۷~g;_D0^<#z|US兼} z!g3+[ോyO|;c#:ۻ; B;M9=їd3_88C}u.{ <ś+Ə'{ :$ȏ<}|~RgU8 bþ||c~ы̨w; {%j"/Ic9Ѹ8ʻ~wg=ۧ?CGyg8ۛ?gCb;?@A`  … 2Pa1f@Ay#I! `cZƔ)L7qYSgO?m:PG&UtiSFF UjՂTv<դɭR jLe0.N0/z9;9$ >hNz|0D ]R;݋T<+O'Q6{3ZSDՏN=AU;QX#6?=C_Z.Q#XePa1%EULDlMd;# 32oVY]œYs^{2_B$4ORӬݗ{DX* a1bW$E-6Y+۳=m*Y)49_d!/q%LZC1VI6 \{tpbyؗKmؔCT陥0uY]uGGszujUd+l?&ٽ ;5ZP+k}[eۆ芼p 'NMUUdwMw7ޝxs>/4U0F)y]ߜM%6F#:]꙱{CjVWуX@@>O'ADP5L|(6 IPQ*b2qⳡ,TEGIKҘx_Fwi^6 cVL<ӤĠ45x6RN xb<42p.[h[N] \ӓEst_oƞa9T*xuhFTjAU)lfMR'\M7?ޭuIT2p{:" ,^9 K."UJ5h*\BnזM}.B^5-ڸf$wGzFj#ߕ3ucgxaA& F'@8sV` (P']vWw|ifF6^Y5jGM{ & qO/Vx$v5)wِ; `f 5 `<3yq.\=o}C7zё.]MgӏC}SzMz5ե^uT/;͞v}jo;;uw&&.1 \M/`nPKW3,F3 |1yg|Ayч7}Qzէw}azoc-o^}{7w/ͯ;Lbbx).> > }{ o?ߟ/p 0p0!p%)90;p=0Ap5P0U^A-f-&q0upy}0p0 p 0 p 0 p Ccp ɰ 0 p ٰ 0)\B0p1. 1q%q)-11B=A1EqI9;*$D<VYq=YQH<""J1qQ@_mZlNXRuQFT,?@? j q’q`E`@9qQv /uűZx 1{"L]%a2&N&AUlQw#K2$Y,(yDV"+"Sq( v"x+_+?)*ZR&r-ٲ-'.'`+r+ap/@"+%r)"" 0O$(s%'%)`0*024Es4R.4$2,`2!2-36U2 3. 04%*I738s8 7839s9893:9:3;s;;;3s>>>3?s??4@t@.4AtAAA!4B%tB)B-B14C5tC9C=CA4DEtDIDMDQ4EUtEYE941b dtFiFmFq4GutGyG}G4HtHHH4ItIII4JtJJJttKKK4LtLɴLL4M4ؠMMt%dt18 @M5PuP P P5QUJTBt . AOOm4jSs4F TuTITMTQ5UUJ5Bu! OnTTEuHwL{uU5XuXX5J[ TY Ua4 Ss5F bS=T[UFÕ\=uFu u\]\]u^^^K[uYA@ @[յa^u\#b/b95]˵W+F5]%6_A6dEvdIVdU$#A5. \e_v4c/a1Vbobg=vg!];gKvhhh5Y?@ASY`Nf hW6kvkkt_teg ܀lͶl !mmiAV&n6ovo5o7pi!Yp7qwqu]q!7r%wr)r-r17s5ws9s!Y3tEwtIW-tQ7uUwu)tYua7veW]wvmvq7wtuw}w 6Lx7ywyyy7zwzzz7{&x[L w*y7}w}ٷ}}7~w~~~}#>75Nw7W9e㗁" W$$8398} E JW1;Q`!1ٗ_%w؇7x-؅[&P6W'Ή+Nq0'OuCB%N/ӑ%W8Y؈/؆wa.88}88嘆؏o9COC‰$yyxx!Y$3D95;9g7'q#j]Y$N)%g'Q TI-tٔ?-Q8A9eY8y8+嘏99YwѐC9S99ٝ9Y7Y陒Uyiy&:#n |S;Yٓ-$$:0Y=7Azї Y$98UxŸyUZئMGy{w']YxqR{Җ:.w% ryyaz[Zmڧiګzɺ׊뮟:|//:؜+.e|@ذ1!Y{u$,6;_:{K>;^B])ۀ/;u0Lz[_c{g[kG@b·L1o{;'nw; [[5#{+0`z0S|ZĽ{+Y <yn\9[)Yڪ)9<Y[;3_xQ%:Kq;pm/?uSm^^ bmЀxjo>wHBlVm^7uTLꅷʤ2`^^/7bC ԀE~u>?` |c2 *UCz̫K^t%F,Ӳ7s J Ԁ |(@)1?x/~6̦輸3>`b@9 rk~YJ ߳7\ ogE`\{Fp R~F YS|BP_{+@Ic9__O3DreC` l0Ĉ&Z1ƍ +r2$‘G",irǐ,[Dp!@@@D5J`)9DPED\2, 6l”^Ǟ,!ɅNl˹t}{l^|I… ,>4AF93K;9DТKg$m:Zd jB>tiS >0`CPVƍ+y!RGuܻg?~0[ˋWu8oʗ~fM NmS`BK|D]Do$7`"H∗!X;$|EYVҌ4Zd #GԃFdIIaMr=NIeT>"e/gj<9јSIfGi~1xB(D' (4 ifjvvX-7GW:)ZZyzYC?CI' )`|" aD^Jl:IڹB.j\V^$Jt]ti]{fjlZfy' :+6Ee`L^.E;gv%qj-Cz˜v"iu͉,mK޸rn\lĮŠoykj qQ{pJ,Ь-L{2VvMXhzrJp©l39xY@BPpbҊ/pͭJ12xW93ď\wQ;,9;:F.&T?H!&g Ot[7ִ`ҼW;j1Z(H : pQ!DێmGM YR΁& -"halhg3fNrST2V.li 1F5˃K\e`1*a &A,yU P :Ɂ2@=tp+`+[_,`qr{!}dWcZ$%־hJ1%] %.7Fg}s<${ `aS0Rp&4?VbS^H3G@IMrVY +&Lbj M=te=2}mJ`_q>c N0TAY0 J"G|fL$R9Ig/q`X|8ܟiA K)x.oC("e 0Q!TeUH,W5^Jd 7CIqsOSU? #C:OGՈ2"hJ Q'*6F"6XL>Lesfk0P~eDӢ b_"t>UlfkFA:|-.1a\b!2AjX*%uJתn i*$iu{ܒ .oH^ 5tUh#x#qM2:A-(]`Ԥ 66<YT|E]TS/kވ߱[u{j9+ ,ÒַӺ'EȖ$HgM̋fx.LȜy+܇EӖ&қǔ攃Cؐh)1T]"]-ӫ Ѩh!іHݨ+m $ ![: @փifߨ\=l9Qq ̪~vvFEJAm17\k L !ژ|azG\Ŵ'*n?,`eUWV(9 s}@կEN{M۠t]\h[Mէ8},f ٭7يL *zF-ڱ)ə@ʝGDW C͟VJ`ԽD5MX-]#~ьoK~i4R>N^}o^Yh>'=p?,. -@K;B=_[R:n4zK)5=*_(7nM:xwR "?j>ǖGdT{qx>x(Y79ٓ6,>ߊ;ՎoO愯;2 ʚ̤br].g_^-M͒-#]m}ܧ|˞+>,ح` ϊm^z "Uai^ѭ~"ng*m^a |0 \p!:(bÅ,Q`A 0(AT<K1eΤYͅpٳNA:QH.}YT 8z($VnU%tγ2dQ ZHa.Syۗ 6` cN!O(r^˗'gX L zeX0Ʀ)"D 8Ƚ‚'^\Ʃ_UrcsJ˙N׏f>sT Z-ڜ}ϧ.irqc"pj:p4г1:A+%|iA 0 ;ĉ&ƒdb S ԣ,[ȶZRZTrI&hF3 %ƞ PQT1BaР' C/#A6M)4ab9\ lRD̊*F*o5ґ=zIm409͉:ORgQL%V[u1۔SK7kBZ)kME^oŵWa3)V>zuږjQ'#2!4Tpׄ5\UwHDqtn%voŵ^|1"\~_x` 6\6vkZI"ظ=XdGdS.ye[F]VYfgqXxfkfc6:袑>z*%A¸[{%.ZꎾUkN:l6{iXmَmі[ˮliow8j[RhF\joW,\/|s9=tA7sG?]Ko}uYive}w{w}xމG҅J.1?b-~x^_A}'|~G^p_[ yz f5ɷ>ʯ~ l׳av`)A>0vcg8oϩF~J] ExCЃd|0:qh9OKdb7fr+W%4YIP/f.+cxF1j4cݸ7scFۡ {c?1vd!iHBRfL0UȒb1,a>0H2$%"KS&RU1%&kcؽFu,e!;YV6lg9٭%-bU2,bmk]ZVmmm{[Vn39W%nq{\&WerUK|+tI{]fWnw]W%oy{d.u^Wo}{_7J;W&p |`'X 毝`GXp-,7p=a8Ӛ{bjU]\+X3nm|c!N0r0 Yq|d$'Y+d(G_q|]礄ʏ!w`&s,~\2*'|g[AAl |AAA3l*A!B",1%\B&lB'|B(B)B*B+\.@ /1,2D34̯5,, 69:;,<=0>@l@›BmKDl?CDZ< ? DHlD/jHTAc"I|< ED_jLCB?kEk6W4bU9`\EOElD$F#%˹e+tM%d朰C0dT-T.SBB"O,4iO\RO-|ۊOTO5OxP%DP%QPH`BO,C P&Q@}(ŠPdϥ61@:O[YŒ_Ȑ9Q(m9-1R*ݓ # £RUy,4Q@!%4R!eS3=8r 0 Nċf`!=S`q: T"mERKZђ3qRb>@T1ɒGՕ1QOT/ #Q3e,4TYSPHE3Ǹ`.@ST)T_ѕ]-2UZeTZBIKR-RS V(WNqUCkT"uUVW uX%EQY/R2MNyW` SE Mfge1XR E^E (YUE-p=YG=OqҖEXXUP1Sze)YUMYt퉍}Y5}WaYH/u+YvZuX[H;SŊ5DQsV[`Z;9PmZ [SPό ĕTp?Yܰu\ɝ-] E\ǽͭۼΨp õ Qݱύ]x9V`3Ե ]ݦh]x-VU͕me\S56Z'oR]XiUs0%uM+]5!ZuԍgeݼV.1^R ٩VEYhԐY%%zT=W_Xx]2W U`=6`a\W5H%~cT,1U[ޝ&m`qE6W`(Q"%Yn U r`~5ab*=X0a$%c V3~a_- ^Y=a؝ZT@߮QBخ\Zed,FcqaG5LhZ2u}24PQQv}*ޔ89\ =J]\ݾ]9\ ^PTfga_Y6fDfڅfmf_]fA]jFNkeueoNggg̘C)`]b]%LdR7=/~\'bP^%Rd>&_-v>-aEhAa-،fh+_6i.6Zes hrEu=NnMŗF T&eaYUd] .ya-\R8Fdbvi^W#V{e-'Z=6Qf-6_Fڸ>'%gCFc=Vꩵ<&z.KX.Ԛ%YNe/k dvVUifm\}Zz=N>fQ]ndZWef>fwuۉf g`@]fxg](9Z1|gNffv҅ooeխc[fo fll;Q綦`oW Oh>l>h.㌶~h+l6m&mvU_%7ʦ7 f bnSb&mӮkPD%dFqRn㹦l`VO^njJU4F+j莮jѭ%qqf9w:ik.&g`]!nklu)fނ]nh6_!g:7qc('l n8^hr}&l׆$_%oA>nMGޤ}n.ԞA^mc/>NcYmNd]wKDV"uUr%p3pon}pnpn[p'opx~`@gr'ty_pzoo |Wpuvwzxpx`wΉ^}vn~fhrD|'qNP/_FNUcqWԤ5/h7jlOqƎkXz$v oGp.tJZoji ty~<ߒyqNT9)neUp2꣟RF_9q:jl@{{'{uFetr.?XpFn&liǖf|Sq7TU?U =cOPEn6v6luagv>wcmbjvM?rZvkvl_ )n_u(g( p LH`B(/b̨1b? )rd$OLҤʖ-Y)s&M>YsgJ< tD$H ӥ6 IGTuG\W~ +6ױ5˚%6ɵ-:MSANe-ս|x_j8$-ش.ûU+eֱ旝~ XJΤ5֜$'/+L8mx퇷o@pŇG{h亓3W~޶sC<9}wv޸ı?<ؿ9ַ_qtٴQE6WdELoJG!ipݔL݇Åx^cw~r8s!Z3v[*{""w{%x. zw}'6b馤AC1qAxN>YynhU\@yDiw]nxWY:fRVfz%hyCn`R*eQEHӨ #K^@dҺLk<哽쭰(.&nY(ߣ^hz#N,W;#&ԘZ֕cK-D|LZ=jtVlGu[`ذtfٲ}f'sA.,` %<)D9Η f3uȚ '9XI &N+7]ʭ"`BWqgQ`1q%E3mC^JE%ESJ2 @IG`8Y6l힁ډw0bb$9<\&k: 4^gA1iKnNKM>M9[&MBT'EVzԩ2=h5]_SG43Pd 1i[]j)5BU$]xY1tENg=4)/ffEYM|%cBfĂ&(JŬ2HZz6xk<[.msg6Jh%kURVӝcuOBݘjE]E)-K֎兣 Hvq HYk൦ ཯mNf핖N^,@ʺY-@b;9oq E-KLO?cfGzLh2ͬ&y3\0*˽Ǧ'.iZ|ʧO>lt*lΨqR m ܊|sԩ3 Rzc hn5#["7,9Ԝjh^\X‰U]M#nh?eRt$I42xukW@r`^!f_@47.3:Ke.ҔF{͙ _u:<~TQC,S1Y=mט=/DA<׹omomIWn}(dz{ kGY֒E# w;b|.|܏uJڄ>j^.;Pv,BAA Bz`}=)ޝ*VSBTRUgr~A R&L)#}"(&:&"L`ij2x@|i@HIi隞 $iiiiiE " r@J*N*T x@ Drvꦆ꧊*j*ꨲj*j*j @"k&kB+JR+ZkV+^nkrƀ:L빢k뺲k[ISF.2j8:F>>% F T,kl2:,>BJl6,^Flrz,~ƂȊlv,ɞɆlʲlnWk,֬lζ, m>,k*2m*mET '.j| xJjH-m٪ٮmڲ챲Fm-ܢ޶-m .""n*+N%Tބ~>.\kFbPeT*@lP n",nnn.nnn oIV*o2BoF/N/Rbjrozov/2n2nE @U^eVn+TVo. /Iop0 0/pC0?pO0GpK{p0p_p o0 vk p0 Sp pp p3'1oK(EIfn12@HYZ1J1 q1qqq߱1 r  r"#" r##+2$3#Sr$W$[r&c&Kr'_'kC1r)rE4qf*2dwrq,r--r..r//s0 0s11#s2+23s3;3Cs4K4sv)cs6k6ss7{7s88s99:s;;s<>s??t@=@A#tB+B3tC/-ACKDStE[Ect)CtFstG{GtH+FtIItJJKtL˴HLMtN Description of the illustration product_dim.gif

Displaying the Product Primary Hierarchy: This screen capture shows the Dimension Viewer with a hierarchical listing of the members of the Product dimension Primary hierarchy. Total Product is an expanded folder at the top. Hardware and Software/Other are subfolders. Hardware is expanded to show subfolders for DC/DVD, Desktop PCs, Portable PCs, Memory, Modems/Fax, and Monitors. Desktop PCs is expanded to show three items: Sentinel Financial, Sentinel Multimedia, and Sentinel Standard. The Software/Other folder is fully collapsed.

PKHtPK,AOEBPS/img_text/agg_haverage.htm Description of the illustration agg_haverage.gif

Hierarchical Average Aggregation in a Simple Hierarchy. This diagram shows a simple hierarchy with four children and one parent value. Three of the children have values, while the fourth is empty. This empty cell has a null or NA value. The Hierarchical Average operator calculates a value of 3 ((2 + 4 + 6 + 0)/4) for the parent value.

PKPK,A"OEBPS/img_text/hardware_select.htma Description of the illustration hardware_select.gif

Restricting Product to Hardware and Descendants: This screen capture of the Member Selection tab of the Create Data Security Policy dialog box shows two conditional steps for the Product Primary Hierarchy: Start with Hardware, and Add Descendants of Hardware.

PKA6qPK,AOEBPS/img_text/calc_qualify.htmJ Description of the illustration calc_qualify.gif

Limiting a Dimension to a Single Member: This screen capture of the Qualify Measure dialog box for UNITS shows a crosstab with the names of the dimensions and the selected members. The Member list for the Customer dimension is displayed and shows the long descriptions for the members.

PKvPK,AOEBPS/img_text/calcs_lag.htm& Description of the illustration calcs_lag.gif

Creating a Calculated Measure: This screen capture shows the General tab of the Create Calculated Measure dialog box. The following values are shown:

  • Name: UNITS_PP

  • Short Label: Units Pp

  • Long Label: Units Prior Period

  • Description: Units Prior Period

  • Calculation type: Prior Period

  • Calculation: Period period for measure UNITS in TIME dimension and TIME.CALENDAR hierarchy 1 period ago

  • Expression: LAG(UNITS_CUBE.UNITS, 1) OVER HIERARCHY(TIME.CALENDAR)

PK"QPK,AOEBPS/img_text/prod_data.htmr Description of the illustration prod_data.gif

Data in the PRODUCT_DIM Table: This screen capture shows a selection of columns for the 36 rows of the table: ITEM_ID, ITEM_DSC, ITEM_DSC_FRENCH, and ITEM_DSC_DUTCH. Scroll bars on the left and bottom enable you to view additional columns and rows.

PKRϒPK,AOEBPS/img_text/cube_rules.htmR Description of the illustration cube_rules.gif

Selecting an Aggregation Operator: This screen capture of the Create Cube dialog box shows the Rules subtab of the Aggregation tab. A table identifies the aggregation method for each dimension. The table has a row for each dimension and the following columns: Order, Dimension, Operator, Based On, and Aggregate From Level. The Order column lists 1 to 4. The Dimension column lists TIME, CHANNEL, CUSTOMER, and PRODUCT. Arrow keys appear to the right of the table for reordering the dimensions.

Among the aggregation operators that are listed are Sum, Average, First Non-NA Data Value, Hierarchical Average, Hierarchical First Member, Hierarchical Last Member, Hierarchical Weighted Average, Hierarchical Weighted First, and Hierarchical Weighted Last. The content of the Precompute subtab is not shown. The Create Cube dialog box also has these tabs: General, Partitioning, Storage, and Materialized Views. The contents of these tabs are not shown.

PKXGWRPK,AOEBPS/img_text/apex_report1.htm Description of the illustration apex_report1.gif

Basic Sales Report in Application Express: This screen capture shows the same data as the original query executed in SQL*Plus shown previously. In this figure, the data is displayed in a browser by Application Express. The report has a title of Sales Analysis, a Search field, a Display of 15 rows, and a Go button. There is also a Reset button and a Next button to display additional rows.

PKK#PK,A OEBPS/img_text/agg_rules_adv.htm  Description of the illustration agg_rules_adv.gif

Selecting the Aggregation Operators: This screen capture shows the Rules subtab of the Create Cube dialog box Aggregation tab. The order and methods are: 1) Channel - Sum, 2) Customer - Sum, 3) Product - Sum, 4) Time - Last Non-NA Data Value. The Aggregation Hierarchies shows that the Time, Channel, and Product dimensions are aggregated, and the Customer Shipments hierarchy is aggregated.

PK % PK,AOEBPS/img_text/cube_log.htm& Description of the illustration cube_log.gif

Maintenance Log for the Units Cube: The Maintenance Log contains three reports: Maintenance Steps, Maintenance Load Summary, and four subtabs for the logs: Summary Log, Detailed Log, Rejected Record Lob, and Dimension Compile log. The Summary Log is currently displayed.

Maintenance Steps shows 17 of 17 steps completed and these columns: Object, Partition, and Status. Under Object, TIME, CHANNEL, and CUSTOMER list LOAD NO SYNCH, COMPILE, and UPDATE steps. Partition is blank. All steps have a status of Succeeded. Additional rows are not shown.

Maintenance Load Summary shows these columns: Object, Object Type, Partition, Rows Added, and Rows Deleted. Additional columns are not shown. TIME, CHANNEL, CUSTOMER, and PRODUCT are Object Type DIMENSION with various numbers of Rows Added. UNITS_CUBE is Object Type CUBE, partitions P10:CY2007 to P2:CY1999, and various numbers of rows added. Rows Deleted are 0.

The Summary Log report shows these columns: Maint ID, Object, Object Type, Partition, Operation, Start Date, Start Time, and End Time. Additional columns are not shown. The Maint ID is 102 for all rows, Object is UNITS_CUBE for all rows. Object Type is CUBE. Partition is P9:CY2006 to P6:CY2003. Operation is LOAD, LOAD - GENERATED SQL, SOLVE, and UPDATE for each partition. Start Date is 26-May-10 for all rows. Start Time is 09:00:28 AM to 9:00:33 AM. End Time is 09:00:29 AM to 09:00:33 AM.

PK+&PK,A!OEBPS/img_text/classlevel_gen.htmn Description of the illustration classlevel_gen.gif

Creation of the Class Level: This screen capture shows the Create Level dialog box. The following values are entered on the General tab: Name of CLASS, Short Label of Class, Long Label of Class, Description of Class Level. There are no other tabs.

PK+KPK,AOEBPS/img_text/meas_view.htmm Description of the illustration meas_view.gif

Displaying the Units Cube: This screen capture of the Units cube shows a crosstab with customers labeling the rows and time and measure labeling the columns. Data from the Units, Sales, and Costs measures are displayed. A bar chart illustrates the data.

PKŪPK,AOEBPS/img_text/partition.htm; Description of the illustration partition.gif

Example of partitioning Time at the Quarter level. The Time dimension has 36 months, 12 quarters, and 3 years in the Calendar hierarchy. Partitioning creates 12 partitions consisting of one quarter and 3 months each, and one default partition containing 3 years plus all members of the Fiscal hierarchy.

PKgDMPK,AOEBPS/img_text/awm_mod.htm  Description of the illustration awm_mod.gif

Analytic Workspace Manager Main Window: This screen capture shows the main window in Analytic Workspace Manager. The left pane displays a navigation tree with the following folders:

  • Databases/rel11g (global) - OLAP11g/Schemas/GLOBAL contains these folders:

    • Analytic Workspaces/GLOBAL (attached RW) contains Languages and these subfolders:

      • Dimensions

      • Cubes

      • Measure Folders

      • OLAP DML Programs

    • Maintenance Scripts

    • Maintenance Reports

  • Databases/rel11g (global) - OLAP11g/Schemas/Data Security Roles

  • Databases/rel11g (global) - OLAP11g/Reports

Because GLOBAL (attached RW) is selected in the navigation tree, the right pane displays the property sheet for the GLOBAL analytic workspace.

PKD= PK,AOEBPS/img_text/maxfirst.htmB Description of the illustration maxfirst.gif

Maximum Method Followed by Sum Method: This diagram shows the following calculations in a grid format:

  • Column 1: Maximum of {4, 1, 2} is 4

  • Column 2: Maximum of {4, 8, 3} is 8

  • Column 3: Maximum of {na, 6, 7} is 7

  • Row 1: 4+4+na=8

  • Row 2: 1+8+6=15

  • Row 3: 2+3+7=12

  • Row 4 (aggregates from Maximum): 4+8+7=19

PKhIZPGBPK,A"OEBPS/img_text/bipub_rpteditor.htm6 Description of the illustration bipub_rpteditor.gif

Creating a Data Model in the BI Publisher Report Editor: This screen capture of the Report Editor displays the following items in a navigation tree: Data Model, List of Values, Parameters, Layouts, and Bursting. The Data Model folder is expanded to show a data set named Sales Query. The Data Set page shows the following entries:

  • Name: Sales Query

  • Type: SQL Query

  • Data Source: Default Data Source

  • SQL Query: The SQL query against UNITS_CUBE_VIEW shown previously in this chapter.

PKQPK,AOEBPS/img_text/agg_sum.htm Description of the illustration agg_sum.gif

Summary Aggregation in a Simple Hierarchy: This figure is described in the previous paragraph.

PK{LPK,AOEBPS/img_text/agg_wsum.htmn Description of the illustration agg_wsum.gif

Weighted Sum Aggregation in a Simple Hierarchy. This diagram shows a simple hierarchy with four children and one parent value. Three of the children have values, while the fourth is empty. This empty cell has a null or NA value. Each cell has a weight value assigned to it, which changes the value. The first cell has a value of 2 and a weight of 3, giving it a calculated value of 6. The second cell has a value of 4 and a weight of 2, giving it a calculated value of 8. The third cell has a value of 6 and a weight of NA, giving it a calculated value of 6 because an NA weight value is calculated as a 1. The fourth cell is NA with a weight of 4, giving it a calculated value of NA. The calculated values have a total sum of 20.

PK$snPK,AOEBPS/img_text/add_db.htmY Description of the illustration add_db.gif

Defining a Database Connection: This screen capture of the New Database Connection dialog box shows the General tab. The Description is rel11g and the Connection Information is localhost:1521:rel11g.

PK #^YPK,AOEBPS/img_text/proddim_gen.htm] Description of the illustration proddim_gen.gif

Creation of the Product Dimension: This screen capture shows the Create Dimension dialog box. The following values are entered on the General tab: Name of PRODUCT, Short Label of Prod, Long Label of Product, Description of Product Dimension, Dimension Type of User Dimension. Short Description Attribute is not selected. Long Description Attribute is selected. The contents of these tabs are not shown: Levels, Materialized Views, Implementation Details.

PK[b]PK,AOEBPS/img_text/appexp_xtab.htm\ Description of the illustration appexp_xtab.gif

Year-to-Date Profits Compared to Year Ago: A screen capture of a portion of the dashboard entitled Profit Reporting. The data is shown as a crosstab with columns for Time, Product, Customer, Profit, YTD (Year to Date), YTD Yr Ago, YTD Chg Yr Ago, and YTD % Chg Yr Ago.

PK? ܨPK,AOEBPS/img_text/meas_gen.htm Description of the illustration meas_gen.gif

Creating the Sales Measure: This screen capture shows the General tab of the Create Measure dialog box. The Name is SALES, the Short Label is Sales, the Long Label is Unit Sales, and the Description is Unit Sales Measure. This measure is in a compressed cube, so it must inherit the cube aggregation specification. Thus, the two aggregation choices are grayed out.

PKHPK,AOEBPS/img_text/calc_index.htmn Description of the illustration calc_index.gif

Calculating a Product Index: This screen capture shows the selection of Desktop PCs for the Product dimension on the Create Calculated Measure dialog box. A crosstab provides a row for each dimension in the cube, and columns for the dimension and for a selected dimension member:

  • Time: none

  • Channel: none

  • Customer: none

  • Product: Desktop PCs selected from a list of Product dimension members

� PK%snPK,A OEBPS/img_text/set_privs_dim.htmf Description of the illustration set_privs_dim.gif

Setting Object Security on Dimensions: This screen capture shows the Set Dimension CHANNEL Object Security dialog box. The Dimension Name is <ALL DIMENSIONS>. The User or Role is PUBLIC. The Grant Option is not selected. The Available Privileges are INSERT, UPDATE, DELETE, and ALTER. The Selected Privilege is SELECT. The SQL Commands are: GRANT SELECT ON GLOBAL.CHANNEL TO PUBLIC, GRANT SELECT ON GLOBAL.CUSTOMER TO PUBLIC, GRANT SELECT ON GLOBAL.PRODUCT TO PUBLIC, GRANT SELECT ON GLOBAL.TIME TO PUBLIC.

PKb.PK,AOEBPS/img_text/logicalm.htm1 Description of the illustration logicalm.gif

Diagram of the logical multidimensional model. Cubes consist of measures and dimensions. Dimensions consist of levels, hierarchies, and dimension attributes.

PK>淪61PK,AOEBPS/img_text/set_privs_aw.htm Description of the illustration set_privs_aw.gif

Setting Object Security on GLOBAL: This screen capture shows the Set Analytic Workspace GLOBAL Object Security dialog box. The Analytic Workspace Name is GLOBAL. The User or Role is PUBLIC. The Grant Option is not selected. The Available Privileges are INSERT, UPDATE, DELETE, and ALTER. The Selected Privilege is SELECT. The SQL Command is GRANT SELECT ON GLOBAL.AW$GLOBAL TO PUBLIC.

PKR}PK,AOEBPS/img_text/appexp_dash.htm. Description of the illustration appexp_dash.gif

Dashboard Created in Oracle Application Express. This screen capture shows a dashboard with tables for Profitability Analysis (showing), Sales Analysis (hidden), and Product Analysis (hidden). Profit Margin Last Quarter is shown as a dial. Profit Trend is shown as a bar chart. Profit by Product Family Last Quarter is shown as a pie chart. Profit by Product Last Quarter is shown as a horizontal bar chart.

PKPC3.PK,AOEBPS/img_text/meas_folder.htm Description of the illustration meas_folder.gif

Creating a Measure Folder: This screen capture of the Create Measure Folder dialog box shows the Name, Short Label, Long Label, and Description of Global Measures. All measures have been moved from Available Measures to Selected Measures. The measures are named PRICE_COST_CUBE.COST, PRICE_COST_CUBE.PRICE, UNITS_CUBE.COST, UNITS_CUBE.SALES, UNITS_CUBE.UNITS.

PK{PK,AOEBPS/img_text/cube_script.htmK Description of the illustration cube_script.gif

Creating a Cube Script: This screen capture of the Create Cube Script dialog box shows the steps of a cube script for UNITS_CUBE named CUSTOM_MAINTENANCE_SCRIPT.

The following steps are listed:

  1. Clear Data

  2. Load

  3. Analyze

PKn4vPK,AOEBPS/img_text/calc_gen.htm Description of the illustration calc_gen.gif

Generating Multiple Calculated Measures: This screen capture shows the General tab of the Generate Calculated Measures dialog box. The following selections are shown:

  • Selected measures: UNIT_COST and UNIT_PRICE.

  • Calculation details: This box currently displays Prior and Future Periods. The calculation template is:

    Prior and future periods of measures in the TIME dimension and CALENDAR hierarchy 1 period ago.

    The following calculations are selected in this category:

    • Prior Period

    • Difference From Prior Period

    • Percent Difference From Prior Period

    • Future Period

    • Difference From Future Period

    Percent Difference From Future Period is shown but not currently selected.

  • Time dimension hierarchy is CALENDAR.

  • Under "You have specified 14 Calculated Measures" is a table showing the Type, Calculated Measure Name, Description, Short Description, and Long Description. These are the types and names currently shown:

    • Share: UNIT_COST_SHARE

    • Rank: UNIT_COST_RANK

    • Prior Period: UNIT_COST_PP

    • Difference From Prior Period: UNIT_COST_CHG_PP

    • Percent Difference...: UNIT_COST_CHG_PP

    • Future Period: UNIT_COST_NP

PKۑPK,AOEBPS/img_text/apex_pagedef.htmS Description of the illustration apex_pagedef.gif

Application Express Page Definition: This screen capture shows the page where you can define a Web page. The areas shown include the following:

  • Page Rendering column: Page, Regions, Buttons, Items

  • Page Processing column: Computations, Validations, Processes, Branches

  • Shared Components column: Tabs, List of Values, Breadcrumbs, Lists, Templates, Theme, Security, and Navigation Bar

PKXSPK,A!OEBPS/img_text/bipub_template.htm Description of the illustration bipub_template.gif

Sample Report Template Created in Word for BI Publisher: This screen capture is described in the preceding paragraphs.

PKNPK,A OEBPS/img_text/prod_hierview.htmg Description of the illustration prod_hierview.gif

Product Primary Hierarchy View: This screen capture of the hierarchy view for the Product Primary hierarchy shows a crosstab describing the columns of the view. The Dimension Name is PRODUCT, the Hierarchy Name is PRIMARY, and the View Name is PRODUCT_PRIMARY_VIEW. The columns of the view are described in a table with these columns: Column Name, Data Type, and Object Type. These are the rows of the table, which describe the columns of the view:

  • DIM_KEY VARCHAR2 Key

  • LEVEL_NAME VARCHAR2 Level Name

  • PARENT VARCHAR2 Parent

  • TOTAL VARCHAR2 Hierarchy Level

  • CLASS VARCHAR2 Hierarchy Level

  • FAMILY VARCHAR2 Hierarchy Level

  • ITEM VARCHAR2 Hierarchy Level

  • PACKAGE VARCHAR2 Attribute

  • BUYER VARCHAR2 Attribute

  • MARKETING_MANAGER VARCHAR2 Attribute

  • LONG_DESCRIPTION VARCHAR2 Attribute

  • SHORT_DESCRIPTION VARCHAR2 Attribute

PK4jPK,AOEBPS/img_text/appexp_hbar.htm Description of the illustration appexp_hbar.gif

Ranking of Percent Change in Year-to-Date Profits From Year Ago: A screen capture of a portion of the dashboard entitled Profit by Location Last Quarter. The data is shown as a horizontal bar chart. The top 15 locations are ranked in order of increased profitability from a year ago, with the location with the most improvement at the top.

PK3PK,AOEBPS/img_text/prodattr_gen.htm< Description of the illustration prodattr_gen.gif

Creation of the Product Marketing Manager Attribute. This screen capture shows the Create Attribute dialog box. The following values are entered on the General tab: Name of MARKETING_MANAGER, Short Label of Mktg Mgr, Long Label of Marketing Manager, Description of Product Marketing Manager, Attribute Type of USER. The Create Level Attribute Columns in Views box and the Index box are selected. The Attribute Values Are Multilingual box is not selected. The attribute applies to the ITEM level. The content of the Implementation Details tab is not shown.

PK_PK,AOEBPS/img_text/lang_gen.htm Description of the illustration lang_gen.gif

Adding a Language: This screen capture shows the General tab of the Language page. It contains three columns: Expressions, AMERICAN, and FRENCH. The Expressions column lists the following metadata in a tree structure. Under each one is a row for Long Label, Short Label, and Description.

  • Dimension CHANNEL

  • Levels CHANNEL and TOTAL

  • Hierarchies PRIMARY

  • Attributes LONG_DESCRIPTION, SHORT_DESCRIPTION, and CHANNEL_TOTAL_ID. A scroll bar on the right displays additional metadata for CHANNEL and the other dimensions and cubes.

In the AMERICAN column are the long labels, short labels, and descriptions in American English.

In the FRENCH columns are the long labels, short labels, and descriptions in French.

At the bottom of the page is the Modify Languages button.

PKHPK,AOEBPS/img_text/bipub_html.htm~ Description of the illustration bipub_html.gif

BI Publisher Report Displayed in HTML Format: This screen capture shows the generated report in HTML. It appears on the Reports tab of BI Publisher. The breadcrumbs show the location as Home > My Folders > OLAP Reports > Global Sales. The Template is Global in HTML format. In the crosstab, the Product column lists Hardware, Customer lists North America, Asia Pacific, and Europe, and Time lists quarters for 2006. The data columns are Sales, Prior Period, Change, and % Change.

PK:~PK,AOEBPS/img_text/apex_report3.htm6 Description of the illustration apex_report3.gif

Sales Analysis Report With Column Links in Application Express: This screen capture shows a Product list with Total Product selected, and Customer with North America selected. In the report, the Product column shows Hardware and Software/Other, the Customer column shows Canada and the United States, and Time shows AUG-06, JUL-06, and SEP-06. Data is displayed for Sales, Prior Period, Change, and Percent Change.

PKr;6PK,AOEBPS/img_text/mv.htmv Description of the illustration mv.gif

Defining a Refresh Materialized View: This screen capture of the Materialized View tab of the Cubes property sheet shows the following settings: Enable Materialized View Refresh is selected, Refresh Method is Force, Refresh Mode is On Demand. Constraints are Trusted. Enable Query Rewrite is not selected. All compatibility checks on the cube and its dimensions passed successfully. The Relational Schema Advisor button is available because the materialized view has already been created.

PK;;{vPK,AOEBPS/img_text/dml_express.htm Description of the illustration dml_express.gif

Using an OLAP DML Expression: This screen capture shows the definition of a calculated measure using the OLAP DML RANDOM function. The following fields and their values on the Create a Calculated Measure dialog box are shown:

  • Calculation Type: OLAP DML Expression

  • Data Type: NUMBER

  • OLAP DML: random

PKՋvPK,AOEBPS/img_text/maptbl_dim.htm Description of the illustration maptbl_dim.gif

Product Dimension Mapped in a Tabular View: This screen capture shows the Mapping Window. The toolbar is across the top of the window, the source schema tree is in the left panel, and the mapping table for the Product dimension is in the right panel. The source schema shows the PRODUCT_DIM table expanded to list the names of its columns. The mapping table shows the PRODUCT dimension mapped to columns in the PRODUCT_DIM table in the GLOBAL schema.

PKrPK,AOEBPS/img_text/maint_script.htm Description of the illustration maint_script.gif

Creating a Maintenance Script: This screen capture of the Create Maintenance Script dialog box shows creation of a script named Global Maintenance. These steps are listed:

  1. GLOBAL_TIME

  2. GLOBAL_CHANNEL

  3. GLOBAL_CUSTOMER

  4. GLOBAL_PRODUCT

  5. GLOBAL_UNITS_CUBE

  6. GLOBAL_PRICE_CUBE

PKDRDPK,A"OEBPS/img_text/cube_precompute.htmZ Description of the illustration cube_precompute.gif

Setting Cost-Based Presummarization: This screen capture shows the Precompute subtab of the Create Cube dialog box Aggregation tab. Cost-based aggregation is selected. Top Partition is set to 0, Bottom Partition is set to 50. Level-based aggregation is not selected.

PK$*3PK,A OEBPS/img_text/apex_prodlink.htmd Description of the illustration apex_prodlink.gif

Definition of the Time Link: This screen capture shows the Column Link area of the Column Attributes page with the following settings:

  • Link Text: #Time#

  • Target: Page in this Application

  • Page: 1

  • Item 1 Name: P1_PRODUCT

  • Item 1 Value: #PRODUCT_PARENT#

  • Item 2 Name: P1_CUSTOMER

  • Item 2 Value: #CUSTOMER_PARENT#

  • Item 3 Name: P1_TIME

  • Item 3 Value: #TIME_KEY#

PKPK,AOEBPS/img_text/maintwiz_opt.htmp Description of the illustration maintwiz_opt.gif

Selecting the Scheduling Options: This screen capture of the Maintenance Wizard Scheduling page shows the following choices: Submit the maintenance task to the Oracle Job Queue and Run Immediately. Maximum number of parallel processes is set to 2.

PKXPK,AOEBPS/img_text/prodhier_gen.htm Description of the illustration prodhier_gen.gif

Creation of the Product Primary Hierarchy: This screen capture shows the Create Hierarchy dialog box. The following values are entered on the General tab: Name of PRIMARY, Short Label of Prod Primary, Long Label of Product Primary, Description of Product Primary Hierarchy. Set As Default Hierarchy is selected. Level-Based Hierarchy is selected. Value Based Hierarchy is not selected. All levels have been moved from the Available box to the Selected Box. The levels are listed in this order from highest to lowest: TOTAL, CLASS, FAMILY, ITEM. The content of the Implementation Details tab is not shown.

PKPK,AOEBPS/img_text/map_cube.htmv Description of the illustration map_cube.gif

Units Cube Mapped in the Tabular View: This screen capture shows UNITS_CUBE mapped to columns in the Global UNITS_FACT table as follows.

  • UNITS_CUBE has three measures with these mappings

  • UNITS to GLOBAL.UNITS_FACT.UNITS

  • SALES to GLOBAL.UNITS_FACT.SALES

  • COST to GLOBAL.UNITS_FACT.COST

UNITS_CUBE has four dimensions, all of them mapped to the detail level of the source.

  • MONTH level of TIME to GLOBAL.UNITS_FACT.MONTH_ID.

  • CHANNEL level of CHANNEL to GLOBAL.UNITS_FACT.CHANNEL_ID.

  • SHIP_TO level of CUSTOMER to GLOBAL_UNITS_FACT.SHIP_TO_ID.

  • The PRODUCT mapping is not shown.

PKƛ{vPK,AOEBPS/img_text/dim_log.htmA Description of the illustration dim_log.gif

Maintenance Log for the Product Dimension: The Maintenance Log contains three reports: Maintenance Steps, Maintenance Load Summary, and four subtabs for the logs: Summary Log, Detailed Log, Rejected Record Log, and Dimension Compile Log. The Summary Log is currently displayed.

Maintenance Steps shows 5 of 5 Completed and a table with these columns: Object, Partition, and Status. Under Object, Product lists LOAD NO SYNCH, COMPILE, and UPDATE steps. The Partition Column is blank, and the status of all steps is Succeeded. The PRICE_CUBE and UNITS_CUBE objects each have a COMPILE AGGMAP step with a status of Succeeded.

Maintenance Load Summary shows these columns: Object, Object Type, Partition, Rows Added, and Rows Deleted. Additional columns are not shown. The report has one row: Object is PRODUCT, Object Type is DIMENSION, Partition is blank, Rows Added is 48, and Rows Deleted is 0

Summary Log shows these columns: Maint ID, Object, Object Type, Partition, Operation, Start Date, Start Time, End Time, and Elapsed Time. Additional columns are not shown. The Maint ID is 106 for all rows, Object is GLOBAL.GLOBAL for the first row and PRODUCT for all other rows, Object Type is ANALYTIC WORKSPACE for the first row and DIMENSION for all other rows. Partition is blank for all rows, Operation lists BUILD for the first row and LOAD NO SYNC for all other rows. Start Date is 26-MAY-10 for all rows, Start Time is 10:43:42 AM, End Time is 10:43:44 AM for GLOBAL and 10:43:43 AM for PRODUCT. Elapsed Time is 1.35 for GLOBAL.GLOBAL and .18 for PRODUCT.

PK³BVPK,AOEBPS/img_text/appexp_pie.htmb Description of the illustration appexp_pie.gif

Contributions of Product Families to Total Profits: A screen capture of a portion of the dashboard entitled Profit by Product Family Last Quarter. The data is shown as a three-dimensional pie chart. Descriptive text and percentages identify each wedge of the pie.

PKĢPK,AOEBPS/img_text/sumfirst.htmU Description of the illustration sumfirst.gif

Sum Method Followed by Maximum Method: This diagram shows the following calculations in a grid format:

  • Row 1: 4+4+na=8

  • Row 2: 1+8+6=15

  • Row 3: 2+3+7=12

  • Column 1: Maximum of {4, 1, 2} is 4

  • Column 2: Maximum of {4, 8, 3} is 8

  • Column 3: Maximum of {na, 6, 7} is 7

  • Column 4 (aggregates from SUM): Maximum of {8, 15, 12} is 15

PK߉;ZUPK,A OEBPS/img_text/bipub_report2.htmk Description of the illustration bipub_report2.gif

Sales Report With Choice Lists in BI Publisher: This screen capture shows the generated report in HTML. It appears on the Reports tab of BI Publisher. The breadcrumbs show the location as Home > My Folders > OLAP Reports > Global Sales. Three choice lists (menus) appear across the top of the report, with the following dimension keys currently selected:

  • Product: Total Product

  • Customer: Asia Pacific

  • Time: 2006

The Template is Global in HTML format. In the crosstab, the Product column lists Hardware, Customer lists Australia, Hong Kong, and Japan, and Time lists Q1.06 to Q4.06. The data columns are Sales, Prior Period, Change, and % Change.

PKpkPK,A OEBPS/img_text/bipub_report1.htm Description of the illustration bipub_report1.gif

Sales Report in BI Publisher: This screen capture shows the sample Global Enterprises report. The report has columns for Product, Customer, Time, Sales, Prior Period, Change, and % Change. The Products are CD/DVD and Desktop PCs, the Customers are France, Germany, Italy, Spain, and United Kingdom, and the Times are APR-06, MAY-06, and JUN-06.

PK6CyPK,AOEBPS/img_text/bipub_newrep.htm Description of the illustration bipub_newrep.gif

Creating a New Report in BI Publisher: This screen capture shows the OLAP Reports folder. The breadcrumbs show the location as Home > My Folders > OLAP Reports. The page displays a Search box, a Folder and Report Tasks box, and a Tip. The folder contains one report named Global Sales. The View, Edit, and Configure links for Global Sales are active.

PKSZUPK,AOEBPS/img_text/dml_function.htm~ Description of the illustration dml_function.gif

Using an OLAP DML Function: This screen capture shows the definition of a calculated measure using an OLAP DML function. The following fields and their values on the Create a Calculated Measure dialog box are shown:

  • Calculation Type: OLAP DML Function

  • Data Type: VARCHAR2

  • Function Name: PRODUCT_ALERT_PRG

  • Program Body: Code from the program listed previously

The Compile Function button is at the bottom.

PKZzPK,AOEBPS/img_text/cube_view.htmq Description of the illustration cube_view.gif

Units Cube View: This screen capture of the General tab of UNITS_CUBE_VIEW shows a crosstab describing the columns of the view. The view contains a row for every dimension and every measure, and columns for Column Name, Data Type, Object Type, and Dimension. TIME, CHANNEL, CUSTOMER, and PRODUCT columns have a data type of VARCHAR2, are DIMENSION object types, and have dimensions with the same names as the columns. UNITS, SALES, and COST columns have a data type of NUMBER and are MEASURE object types.

PKPK,A!OEBPS/img_text/calcs_measures.htm% Description of the illustration calcs_measures.gif

Changing the Variable Parts of a Calculation: This screen capture shows the Calculation area of the Create Calculated Measure dialog box. The calculation is Prior Period for measure UNITS in the TIME dimension and TIME.CALENDAR hierarchy 1 period ago. The measure, time hierarchy, and number of periods are variables in the calculation, and can be changed by using the drop-down lists of values.

PKt^*%PK,AOEBPS/img_text/awm_open.htmg Description of the illustration awm_open.gif

Opening Analytic Workspace Manager: This screen capture shows the initial display when opening Analytic Workspace Manager. The menu bar contains three menus: File, Tools, and Help. The property tree on the left shows a collapsed folder named Databases, with a plus sign and an icon to the left. The property viewer shows links to several sites.

  • Getting Started With Tutorials, Demos and Videos

  • Documentation

  • OLAP Discussion Forum on OTN

  • Download Samples, Analytic Workspace Manager Updates and Helpful Add-ins

  • Display the live OLAP Home Page in a browser

At the bottom of the page, an Exception is displayed in a resizable pane. The error message is not currently shown.

PK PK,AOEBPS/img_text/agg_average.htm6 Description of the illustration agg_average.gif

Average Aggregation in a Simple Hierarchy. This diagram shows a simple hierarchy with four children and one parent value. Three of the children have values, while the fourth is empty. This empty cell has a null or NA value. The Average operator calculates a value of 4 ((2 + 4 + 6)/3) for the parent value.

PKPK,AOEBPS/img_text/apex_report.htmM Description of the illustration apex_report.gif

Drillable Dimensions in Application Express: This screen capture shows a page with the banner text Global Enterprises, Inc., the following elements:

  • A Product list with Total Product selected.

  • A Customer list with Total Customer selected.

  • A Sales Analysis report with columns for Product, Customer, Time, Sales, Prior Period, Change, and Percent Change. The dimension keys in the Product, Customer, and Time columns are links.

  • A Reset button

  • A Search box.

  • A Display list with 15 selected and a Go button.

  • A range of rows with 1-15 of 24 selected, and a Next button.

PK@CRMPK,AOEBPS/img_text/apex_report4.htm> Description of the illustration apex_report4.gif

Dashboard With Choice Lists for Drilling: This screen capture shows the Sales Analysis report in Application Express with two choice lists. The Product list is set to Total Product and the Customer list is set to Europe. The report has columns for Product, Customer, Time, Sales Prior Period, Change, and Percent Change. Product shows Hardware, and Customer shows France, Spain, Germany, Italy, France, and United Kingdom.

PKZC>PK,AOEBPS/img_text/maintwiz_obj.htm; Description of the illustration maintwiz_obj.gif

Loading Dimension Values Into the Product Dimension: This screen capture of the Maintenance Wizard Select Objects page shows the Available Target Objects box with the Dimensions folder expanded to list four dimensions: CHANNEL, CUSTOMER, PRODUCT, and TIME. The Cubes folder is fully collapsed. The Selected Target Objects box lists the PRODUCT dimension.

PKc=@;PK,AOEBPS/img_text/part_advisor.htm[ Description of the illustration part_advisor.gif

Partitioning a cube: This screen capture shows the Cube Partitioning Advisor dialog box. It has radio buttons for the two options, Partition Using a Time Dimension and Partition Using Statistics.

PKVH(`[PK,AOEBPS/shortcuts.htm4 Keyboard Shortcuts

B Keyboard Shortcuts

Keyboard shortcuts support accessibility in Analytic Workspace Manager. Most shortcuts work on all platforms, but Windows provides the most reliable results for all of them. If you use keyboard shortcuts for accessibility, then install Analytic Workspace Manager on a Windows platform.

The keyboard shortcuts are active within particular areas of the user interface:

Menu Bar

File menu: Alt+F

Tools menu: Alt+T

Help menu: Alt+H

Navigation Tree

To display a menu for the selected object, press Shift+F10. This is equivalent to clicking the right mouse button.

To close the menu for a selected object, press Esc.

To expand a folder, press the Right Arrow key.

To collapse a folder, press the Left Arrow key.

To move the cursor down the tree, press the Down Arrow key.

To move the cursor up the tree, press the Up Arrow key.

To move the cursor from the navigation tree to a property sheet, press Tab.

To move the cursor from a property sheet to the navigation tree, press Shift+Tab.

Property Sheets

To move the cursor from the navigation tree to a property sheet, press Tab.

To move the cursor to the next tab, press the Right Arrow key.

To move the cursor to the previous tab, press the Left Arrow key.

To move the cursor from a property sheet to the navigation tree, press Shift+Tab.

To move the splitter between the navigation tree and a property sheet, press F8 Right Arrow or Left Arrow.

To change a menu choice in a table, press F2 Down Arrow.

Shuttle Keys

Move all: Alt+L

Move selected: Alt+D

Remove selected: Alt+R

Remove all: Alt+O

To select multiple items, press Ctrl+Arrow, then press the spacebar.

Mapping Canvas

Table mapping view: Ctrl+T

Graphical mapping view: Ctrl+G

Automatically arrange mappings: Ctrl+Alt+K

Automatically map star schema: Ctrl+M

Remove all mappings: Ctrl+D

Schema Viewer Navigator:

All keyboard shortcuts for the navigation tree are available, plus the following additions for the table view:

To copy the name of the selected column from the tree: Ctrl+C To paste a column name into the selected field: Ctrl+V

To expand the width of a column: Select the header and press Alt+Right Arrow.

To reduce the width of a column: Select the header and press Alt+Left Arrow.

PKYPK,A OEBPS/toc.ncx[ Oracle® OLAP User's Guide, 11g Release 2 (11.2) Cover Table of Contents Oracle OLAP User's Guide, 11g Release 2 (11.2) Preface What's New in Oracle OLAP? Overview Getting Started with Oracle OLAP Creating Dimensions and Cubes Querying Dimensional Objects Enhancing Your Database with Analytic Content Developing Reports and Dashboards Administering Oracle OLAP Security Advanced Aggregations Designing a Dimensional Model Keyboard Shortcuts Glossary Index Copyright PKd5)` [ PK,AOEBPS/calculations.htm Enhancing Your Database with Analytic Content

5 Enhancing Your Database with Analytic Content

Oracle OLAP provides an extensive set of analytic functions for enhancing your database with information-rich content. This chapter explains how you can use Analytic Workspace Manager to create calculated measures using templates and free-form calculations.

This chapter contains the following topics:

What Is a Calculated Measure?

Calculated measures return values that are computed at run time from data stored in one or more measures. Like relational views, calculated measures store queries against data stored in other objects. Because calculated measures do not store data, you can create dozens of them without increasing the size of the database. You can use them as the basis for defining other calculated measures, which adds depth to the types of calculations you can create using the templates in Analytic Workspace Manager.

As soon as you create a calculated measure, it appears as a column in a cube view. Because calculated measures do not contain data, they are not associated with a build process. You can create a calculated measure at any time, and it is available immediately for querying by SQL applications.

Functions for Defining Calculations

The library of functions for defining calculated measures contains these basic categories:

Arithmetic Operators

You can perform the following arithmetic operations using two measures. The calculations in the cube are performed on a cell-by-cell basis at all levels of the dimension hierarchies.

  • Addition: Adds the values of two measures.

  • Subtraction: Subtracts the values of one measure from the values of another measure.

  • Multiplication: Multiplies the values of two measures.

  • Division or Ratio: Divides the values of one measure by the values of another measure.

  • Percent Difference: Calculates the percent difference between the values of two measures.

The arithmetic operations are available in Analytic Workspace Manager as templates. as described in "Using Calculation Templates".

Analytic Functions

The analytic functions provide the most powerful computations and fuel the most useful queries for business intelligence and similar applications. They include a variety of rank, share, time series, and other single-column functions. The analytic functions enable analysts and decision makers to make comparisons and identify trends.

Analytic functions provided by Oracle OLAP leverage the knowledge associated with the dimensions about levels and family relationships. Time dimensions have additional information that enables them to support time series methods such as lags, leads, moving and cumulative calculations. Because the knowledge is stored with the dimension, you do not need to specify these relationships when creating a calculated measure.

The analytic functions are available in Analytic Workspace Manager as templates. They are described in "Using Calculation Templates".

Single-Row Functions

Oracle OLAP supports most of the SQL single-row functions including:

  • Numeric functions such as ABS, CEIL, FLOOR, POWER, ROUND, and TRUNC.

  • Character functions such as CONCAT, LPAD, RPAD, LTRIM, RTRIM, REPLACE, and SUBSTR.

  • Datetime functions such as CURRENT_DAY, MONTHS_BETWEEN, NEXT_DAY, and SYSTIMESTAMP.

  • Comparison functions GREATEST and LEAST.

  • Conversion functions such as TO_CHAR, TO_DATE, TO_NUMBER, and TO_TIMESTAMP.

You can use these functions to manipulate the data values in a measure, typically as part of a more complex calculation. These functions are not available as templates, but you can use them in free-form calculations, as described in "Creating User-Defined Expressions".

Creating Calculated Measures

Analytic Workspace Manager provides easy-to-use templates for creating calculated measures. You can create them in the same cube with the source measures, or you can create them in a separate cube.

Calculated measures are available for querying as additional columns in a cube view (such as UNITS_CUBE_VIEW). They are not available through cube materialized views (such as CB$UNITS_CUBE).

The calculated measure generator quickly generates the standard calculated measures for one or more measures of a cube, including rank, share, prior and future periods, period-to-date, parallel period, moving aggregates, and cumulative aggregates. The generator uses naming rules for formulating the names and descriptions. You can customize these rules on the Naming Rules tab.

You can also create individual calculated measures, including user-defined expressions in the OLAP expression syntax or the OLAP DML.

To create multiple calculated measures: 

  1. In the navigation tree, right-click a cube and choose Generate Calculated Measures.

  2. On the Calculations tab, select the measures on which to base the calculated measures.

  3. Scroll down the Calculation Details and select each type of calculated measure you want to create for this selection of measures. Modify the calculations as desired by altering the templates.

  4. Select the Time dimension to use for time series calculations.

  5. Review the list of calculated measures. You can change the generated names by using the Naming Rules tab.

  6. Click Generate Calculations to create the calculated measures.

  7. Repeat this procedure if you want to generate variations of the same basic types of calculations, such as another Share calculation for the same measure but on a different dimension. Change the naming rules to generate new, unique names.

Figure 5-1 shows the Generate Calculated Measures dialog box.

Figure 5-1 Generating Multiple Calculated Measures

Description of Figure 5-1 follows
Description of "Figure 5-1 Generating Multiple Calculated Measures"

To create a single calculated measure: 

  1. In the navigation tree, expand a cube folder.

  2. Right-click Calculated Measures, then choose Create Calculated Measure from the shortcut menu.

    The Create Calculated Measure dialog box is displayed.

  3. Enter a descriptive name.

  4. Choose a calculation method.

    Your choice of an arithmetic or analytic function dynamically changes the Calculation template.

  5. Modify the calculation template.

  6. Click Create.

    The calculated measure appears in the navigation tree in the Calculated Measures folder.

Figure 5-2 displays the Create Calculated Measure dialog box.

Figure 5-2 Creating a Calculated Measure

Create Calculated Measure dialog box
Description of "Figure 5-2 Creating a Calculated Measure"

Modifying a Template

The calculation that you selected is presented as template, which is a description of the calculation with variable parts that enable you to customize it.

Figure 5-3 shows the template for calculating the prior period. You can view the choice lists by clicking the links.

Figure 5-3 Changing the Variable Parts of a Calculation

Prior Period template
Description of "Figure 5-3 Changing the Variable Parts of a Calculation"

You can include all values of a measure in a calculation, or, for some types of calculations, you can filter the measure to include only a selection of values. To limit one or more dimensions to a single dimension member, click the ellipses (...) next to the measure. The Qualify Measure dialog box appears, as shown in Figure 5-4.

Figure 5-4 Limiting a Dimension to a Single Member

Qualify Measure dialog box
Description of "Figure 5-4 Limiting a Dimension to a Single Member"

Choosing a Range of Time Periods

Many calculations are performed over time periods at the same level in the hierarchy. In some types of calculations, you can control the range of time periods that are used in the same calculation. For example, you might want to calculate a running total of months for each fiscal year, not a running total that begins with the first month stored in the cube.

You can use the following methods for identifying the range of time periods to calculate together:

  • Level: Calculates all time periods at the same level, so that all months in the cube are included in one calculation, all quarters are included in another calculation, and so forth.

  • Parent: Calculates all time periods with the same parent, so that all months in Q1-07 are included in one calculation, all months in Q2-07 are included in another calculation, and so forth.

  • Ancestor at level: Calculates all time periods with the same ancestor at a specified level. For example, if the specified level is Year in a Year-Quarter-Month hierarchy, then Q1-06 to Q4-06 are included in one calculation, Q1-07 to Q4-07 are included in another calculation, Jan-06 to Dec-06 are included in a third calculation, and so forth. Any levels higher in the hierarchy are not calculated.

  • Gregorian periods: The Gregorian periods -- Year, Quarter, Month, and Week -- impose the Gregorian calendar onto the selected hierarchy. This can be useful for analyzing data that uses nonstandard calendar hierarchies. For example, if you use Gregorian Year on a fiscal hierarchy that begins July 1 and ends June 30, then the last half of one fiscal year and the first half of the next fiscal year are calculated together. Time periods higher in the hierarchy than the specified Gregorian period are not calculated.

Using Calculation Templates

Analytic Workspace Manager provides templates for all of the calculations typically in demand for business intelligence applications. The following topics describe the types of calculations available as calculation templates in Analytic Workspace Manager.

Arithmetic Calculations

Basic mathematical operations enable you to perform cell-by-cell calculations on two measures, as described in "Arithmetic Operators".

Arithmetic Example

This template defines a calculated measure for the Global Price Cube using Percent Difference:

Percent difference between measure UNIT_PRICE and measure UNIT_COST.

A query against this calculated measure returns results like these. The PCT_CHG column shows the percent change between PRICE and COST, which is calculated as PRICE-COST/COST.

PRODUCT                   PRICE       COST   PCT_DIFF
-------------------- ---------- ---------- ----------
Envoy Ambassador           2892       2664        .09
Envoy Executive            2803       2644        .06
Envoy Standard             1662       1737       -.04
Sentinel Financial         1755       1658        .06
Sentinel Multimedia        1770       1813       -.02
Sentinel Standard          1552       1410         .1

Index

An index is a mathematical operation calculated on a single measure. An index calculates the percentage difference between the values of a measure and a selected value that serves as a base number.

An index does not use a calculation template. Instead, it provides a list of dimension members for each dimension of the cube, from which you can choose one to use as an index, as shown in Figure 5-5.

Figure 5-5 Calculating a Product Index

Create Calculated Measure dialog box for Index
Description of "Figure 5-5 Calculating a Product Index"

Index Example

This example creates an index on the Product dimension using Desktop PCs as the index.

PRODUCT                   SALES PROD_INDEX
-------------------- ---------- ----------
Desktop PCs            76682955        100
Portable PCs           18072328         24
CD/DVD                 17302122         23
Modems/Fax              5565552          7
Memory                  5347292          7
Monitors                3926632          5

Prior and Future Periods

Oracle OLAP provides several calculations for prior or future time periods:

  • Prior Period: Returns the value of a measure at an earlier time period.

  • Difference From Prior Period: Calculates the difference between values for the current time period and an earlier period.

  • Percent Difference From Prior Period: Calculates the percent difference between the values for the current time period and an earlier period.

  • Future Period: Returns the value of a measure at a later time period.

  • Difference From Future Period: Calculates the difference between the values for the current time period and a later period.

  • Percent Difference From Future Period: Calculates the percent difference between the values for the current time period and a later period.

When creating a calculation for prior or future time periods, you choose the measure, the time dimension, the hierarchy, and the number of periods from the current period.

Prior Period Example

This template defines a calculated measure using Prior Period:

Prior period for measure SALES in TIME dimension and TIME.CALENDAR hierarchy 1 period ago.

These are the results of a query against the calculated measure. The PRIOR_PERIOD column shows the value of Sales for the preceding period at the same level in the Calendar hierarchy.

TIME     TIME_LEVEL                SALES PRIOR_PERIOD
-------- -------------------- ---------- ------------
2005     CALENDAR_YEAR         136986572    144290686
2006     CALENDAR_YEAR         140138317    136986572
Q1.05    CALENDAR_QUARTER       31381338     41988687
Q2.05    CALENDAR_QUARTER       37642741     31381338
Q3.05    CALENDAR_QUARTER       32617249     37642741
Q4.05    CALENDAR_QUARTER       35345244     32617249
Q1.06    CALENDAR_QUARTER       36154815     35345244
Q2.06    CALENDAR_QUARTER       36815657     36154815
Q3.06    CALENDAR_QUARTER       32318935     36815657
Q4.06    CALENDAR_QUARTER       34848911     32318935

Period to Date

Period-to-date functions perform a calculation over time periods with the same parent up to the current period. These functions calculate period-to-date:

  • Period to Date: Calculates the values up to the current time period.

  • Period to Date Period Ago: Calculates the data values up to a prior time period.

  • Difference From Period to Date Period Ago: Calculates the difference in data values up to the current time period compared to the same calculation up to a prior period.

  • Percent Difference From Period To Date Period Ago: Calculates the percent difference in data values up to the current time period compared to the same calculation up to a prior period.

When creating a period-to-date calculation, you can choose from these aggregation methods:

  • Sum

  • Average

  • Maximum

  • Minimum

You also choose the measure, the time dimension, and the hierarchy.

Period to Date Example

This template defines a calculated measure using Period to Date.

Gregorian Year to date for SALES in the TIME dimension and TIME.CALENDAR hierarchy. Aggregate using MINIMUM from the beginning of the period.

These are the results of a query against the calculated measure. The MIN_TO_DATE column displays the current minimum SALES value within the current level and year.

TIME     TIME_LEVEL                SALES MIN_TO_DATE
-------- -------------------- ---------- -----------
Q1.06    CALENDAR_QUARTER       36154815    36154815
Q2.06    CALENDAR_QUARTER       36815657    36154815
Q3.06    CALENDAR_QUARTER       32318935    32318935
Q4.06    CALENDAR_QUARTER       34848911    32318935
JAN-06   MONTH                  13119235    13119235
FEB-06   MONTH                  11441738    11441738
MAR-06   MONTH                  11593842    11441738
APR-06   MONTH                  11356940    11356940
MAY-06   MONTH                  13820218    11356940
JUN-06   MONTH                  11638499    11356940
JUL-06   MONTH                   9417316     9417316
AUG-06   MONTH                  11596052     9417316
SEP-06   MONTH                  11305567     9417316
OCT-06   MONTH                  11780401     9417316
NOV-06   MONTH                  10653184     9417316
DEC-06   MONTH                  12415325     9417316

Share

Share calculates the ratio of a measure's value for the current dimension member to the value for a related member of the same dimension. You can choose whether the related member is:

  • Top of hierarchy: Calculates the ratio of each member to the total.

  • Member's parent: Calculates the ratio of each member to its parent.

  • Member's ancestor at level: Calculates the ratio of each member to its ancestor, that is, a member at a specified level higher in the hierarchy.

When creating a share calculation, you can choose the measure, dimension, and hierarchy. You also have the option of multiplying the results by 100 to get percentages instead of fractions.

Share Example

This template defines a calculated measure using SHARE:

Share of measure SALES in PRODUCT.PRIMARY hierarchy of the PRODUCT dimension as a ratio of top of hierarchy.

These are the results of a query against the calculated measure. The TOTAL_SHARE column displays the percent share of the total for the selected products.

PRODUCT              PROD_LEVEL           SALES TOTAL_SHARE
-------------------- --------------- ---------- -----------
Total Product        TOTAL            144290686         100
Hardware             CLASS            130145388          90
Desktop PCs          FAMILY            78770152          55
Portable PCs         FAMILY            19066575          13
CD/DVD               FAMILY            16559860          11
Software/Other       CLASS             14145298          10
Accessories          FAMILY             6475353           4
Operating Systems    FAMILY             5738775           4
Memory               FAMILY             5430466           4
Modems/Fax           FAMILY             5844185           4
Monitors             FAMILY             4474150           3
Documentation        FAMILY             1931170           1

Rank

Rank orders the values of a dimension based on the values of the selected measure. When defining a rank calculation, you choose the dimension, a hierarchy, and the measure.

You can choose a method for handling identical values:

  • Rank: Assigns the same rank to identical values, so there may be fewer ranks than there are members. For example, it may return 1, 2, 3, 3, 4 for a series of five dimension members.

  • Dense Rank: Assigns the same minimum rank to identical values. For example, it may return 1, 2, 3, 3, 5 for a series of five dimension members.

  • Average Rank: Assigns the same average rank to identical values. For example, it may return 1, 2, 3.5, 3.5, 5 for a series of five dimension members.

You can also choose the group in which the dimension members are ranked:

  • Member's level: Ranks members at the same level.

  • Member's parent: Ranks members with the same parent.

  • Member's ancestor at level: Ranks members with the same ancestor at a specified level higher in the hierarchy.

Rank Example

This template defines a calculated measure using Rank:

Rank members of the PRODUCT dimension and PRODUCT.PRIMARY hierarchy based on measure SALES. Calculate rank using RANK method with member's parent in order lowest to highest. Rank NA (null) values nulls last.

These are the results of a query against the calculated measure in which the products are ordered by RANK:

PRODUCT                   SALES       RANK
-------------------- ---------- ----------
Monitors                4474150          1
Memory                  5430466          2
Modems/Fax              5844185          3
CD/DVD                 16559860          4
Portable PCs           19066575          5
Desktop PCs            78770152          6

Parallel Period

Parallel periods are at the same level as the current time period, but have different parents in an earlier period. For example, you may want to compare current sales with sales for the prior year at the quarter and month levels.

Oracle OLAP provides several functions for parallel periods:

  • Parallel Period: Calculates the value of the parallel period.

  • Difference From Parallel Period: Calculates the difference in values between the current period and the parallel period.

  • Percent Difference From Parallel Period: Calculates the percent difference in values between the current period and the parallel period.

To identify the parallel period, you specify a level and the number of periods before the current period. You can also decide what happens when two periods do not exactly match, such as comparing daily sales for February (28 days) with January (31 days).

You also choose the measure, the time dimension, and the hierarchy.

Parallel Period Example

This template defines a calculated measure using Parallel Period.

Parallel period for SALES in the TIME dimension and TIME.CALENDAR hierarchy 1 TIME.CALENDAR.QUARTER ago based on position from beginning to ending of period.

These are the results of a query against the calculated measure, which lists the months for two calendar quarters. The parallel month has the same position within the previous quarter. The prior period for JUL-06 is APR-06, for AUG-06 is MAY-06, and for SEP-06 is JUN-06.

TIME     PARENT          SALES   LAST_QTR
-------- ---------- ---------- ----------
APR-06   CY2006.Q2    11356940   13119235
MAY-06   CY2006.Q2    13820218   11441738
JUN-06   CY2006.Q2    11638499   11593842
JUL-06   CY2006.Q3     9417316   11356940
AUG-06   CY2006.Q3    11596052   13820218
SEP-06   CY2006.Q3    11305567   11638499

Moving Calculations

Moving calculations are performed over the time periods surrounding the current period. Oracle OLAP provides several aggregation methods for moving calculations:

  • Moving Average: Calculates the average value for a measure over a fixed number of time periods.

  • Moving Maximum: Calculates the maximum value for a measure over a fixed number of time periods.

  • Moving Minimum: Calculates the minimum value for a measure over a fixed number of time periods.

  • Moving Total: Returns the total value for a measure over a fixed number of time periods.

You can choose the measure, the time dimension, and the hierarchy. You can also select the range, as described in "Choosing a Range of Time Periods", and the number of time periods before and after the current period to include in the calculation.

Moving Calculation Example

This template defines a calculated measure using Moving Minimum.

Moving minimum of SALES in the TIME dimension and TIME.CALENDAR hierarchy. Include 1 preceding and 1 following members within level.

These are the results of a query against the calculated measure, which displays values for the descendants of calendar year 2004. Each value of Minimum Sales is the smallest among the current value and the values immediately before and after it. The calculation is performed over all members of a level in the cube.

TIME     TIME_LEVEL                SALES  MIN_SALES
-------- -------------------- ---------- ----------
Q1.04    CALENDAR_QUARTER       32977874   32977874
Q2.04    CALENDAR_QUARTER       35797921   32977874
Q3.04    CALENDAR_QUARTER       33526203   33526203
Q4.04    CALENDAR_QUARTER       41988687   31381338
JAN-04   MONTH                  11477898   10982016
FEB-04   MONTH                  10982016   10517960
MAR-04   MONTH                  10517960   10517960
APR-04   MONTH                  11032057   10517960
MAY-04   MONTH                  11432616   11032057
JUN-04   MONTH                  13333248   11432616
JUL-04   MONTH                  12070352   11108893
AUG-04   MONTH                  11108893   10346958
SEP-04   MONTH                  10346958   10346958
OCT-04   MONTH                  14358605   10346958
NOV-04   MONTH                  12757560   12757560
DEC-04   MONTH                  14872522   12093518

Cumulative Calculations

Cumulative calculations start with the first time period and calculate up to the current member, or start with the last time period and calculate back to the current member. Oracle OLAP provides several aggregation methods for cumulative calculations:

  • Cumulative Average: Calculates a running average across time periods.

  • Cumulative Maximum: Calculates the maximum value across time periods.

  • Cumulative Minimum: Calculates the minimum value across time periods.

  • Cumulative Total: Calculates a running total across time periods.

You can choose the measure, the time dimension, and the hierarchy. You can also select the range, as described in "Choosing a Range of Time Periods", and whether you want to start the calculation with the first period and calculate forward, or start with the last period and calculate back.

Cumulative Calculation Example

This template defines a calculated measure using Cumulative Minimum.

Cumulative minimum of SALES in the TIME dimension and TIME.CALENDAR hierarchy within ancestor at level TIME.CALENDAR_YEAR. Total from beginning to current member.

These are the results of a query against the calculated measure, which displays values for the descendants of calendar year 2004. The minimum value for quarters begins with Q1-04 and ends with Q4-04, and for months begins with Jan-04 and ends with Dec-04.

TIME     TIME_LEVEL                SALES  MIN_SALES
-------- -------------------- ---------- ----------
Q1.04    CALENDAR_QUARTER       32977874   32977874
Q2.04    CALENDAR_QUARTER       35797921   32977874
Q3.04    CALENDAR_QUARTER       33526203   32977874
Q4.04    CALENDAR_QUARTER       41988687   32977874
JAN-04   MONTH                  11477898   11477898
FEB-04   MONTH                  10982016   10982016
MAR-04   MONTH                  10517960   10517960
APR-04   MONTH                  11032057   10517960
MAY-04   MONTH                  11432616   10517960
JUN-04   MONTH                  13333248   10517960
JUL-04   MONTH                  12070352   10517960
AUG-04   MONTH                  11108893   10517960
SEP-04   MONTH                  10346958   10346958
OCT-04   MONTH                  14358605   10346958
NOV-04   MONTH                  12757560   10346958
DEC-04   MONTH                  14872522   10346958

Nested Calculations

You can extend the variety of functions available through the templates by using a calculated measure as the basis for another calculated measure.

For example, Analytic Workspace Manager has templates for Moving Average and for Difference From Prior Period. You can create a calculated measure that calculates a moving average, then calculate the difference between the current and the previous moving averages.

Nested Calculations Example

This template creates a moving average for Units named UNITS_MOVING_AVG:

Moving average of UNITS in the TIME dimension and TIME.CALENDAR hierarchy. Include 1 preceding and 1 following members within level.

The next template creates a Difference From Prior Period calculation from UNITS_MOVING_AVG.

Difference from prior period for UNITS_MOVING_AVG in TIME dimension and TIME.CALENDAR hierarchy 1 period ago.

These are the results of a query against the Units measure and the two calculated measures. The MOVING_AVG column shows the moving average, and the DIFF column shows the difference between the current moving average and the prior period's.

TIME     TIME_LEVEL                UNITS MOVING_AVG       DIFF
-------- -------------------- ---------- ---------- ----------
JAN-06   MONTH                     47776      48520         66
FEB-06   MONTH                     47695      48940        419
MAR-06   MONTH                     51348      48683       -257
APR-06   MONTH                     47005      50387       1705
MAY-06   MONTH                     52809      48411      -1976
JUN-06   MONTH                     45419      48872        461
JUL-06   MONTH                     48388      47546      -1326
AUG-06   MONTH                     48830      47857        312
SEP-06   MONTH                     46354      47532       -326
OCT-06   MONTH                     47411      46869       -663
NOV-06   MONTH                     46842      49768       2899
DEC-06   MONTH                     55052      50947       1179
2006     CALENDAR_YEAR            584929     575324      -4032
Q1.06    CALENDAR_QUARTER         146819     145705       2093
Q2.06    CALENDAR_QUARTER         145233     145208       -497
Q3.06    CALENDAR_QUARTER         143572     146037        829
Q4.06    CALENDAR_QUARTER         149305     146439        402

Creating User-Defined Expressions

Among the calculation types is a user-defined expression. Typically, you create calculations using the OLAP expression syntax, which includes the analytic functions, arithmetic operators, and single-row functions described in this chapter. The OLAP syntax is an extension of the SQL syntax. If you have used SQL analytic functions or single-row functions, then this syntax is familiar to you.


See Also:

For user-defined OLAP DML expressions, see "Creating Calculated Measures Using the OLAP DML".

Using the OLAP Expression Syntax

The easiest way to formulate an expression in the OLAP expression syntax is to let Analytic Workspace Manager do the work for you. You can use the templates to create a similar calculation, and cut-and-paste the syntax as the basis for a new calculation.

To create a user-defined expression in the OLAP expression syntax: 

  1. Open the Create Calculated Measure dialog box.

  2. Select the calculation type that most closely matches the one you want to define.

  3. Modify the template as desired.

  4. Cut-and-paste the calculation from the Calculation box into a text editor.

  5. Repeat these steps if your calculation uses two or more functions.

  6. Modify the calculation as desired in the text editor. You can combine numeric operators, analytic functions, and single-row functions in a single calculation.

  7. From the Calculation Types list, select OLAP Expression Syntax.

  8. Cut-and-paste the calculation from the text editor into the Calculation box.

  9. Click Create.


See Also:

Analytic Workspace Manager Help for detailed information about the OLAP expression syntax.

Expression Syntax Example Using an Arithmetic Operator

This template for Multiplication generates a calculation using Units Sold and Unit Cost.

Multiply measure UNITS by measure UNIT_COST.

The template generates this calculation using the multiplication operator (*). It is displayed in the Calculation box. Note that UNITS is in the Units Cube and UNIT_COST is in the Price Cube.

UNITS_CUBE.UNITS * PRICE_CUBE.UNIT_COST

The syntax of this calculation is so simple that you only need the template to obtain the qualified name of the measure.

Following is a free-form calculation that calculates a 2% increase in units sold:

UNITS_CUBE.UNITS * 1.02

These are the results of a query against this calculated measure:

PRODUCT                   UNITS     TARGET
-------------------- ---------- ----------
Envoy Ambassador           2116       2158
Envoy Executive            2481       2531
Envoy Standard             3300       3366
Sentinel Financial        30513      31123
Sentinel Multimedia        7948       8107
Sentinel Standard          7302       7448

Free-Form Calculation Example Using an Analytic Function

This template for Cumulative Average generates a calculation for the average number of units sold:

Cumulative average of UNITS in the TIME dimension and TIME.CALENDAR hierarchy within level. Total from beginning to following member.

The template generates this calculation using the AVG function.

AVG(UNITS_CUBE.UNITS) OVER HIERARCHY (TIME.CALENDAR BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING WITHIN LEVEL)

Following is a free-form calculation that computes the percent difference between current units sold and the cumulative average. It uses the AVG function and the subtraction (-), division (/) and multiplication (*) operators.

((UNITS_CUBE.UNITS - AVG(UNITS_CUBE.UNITS) OVER HIERARCHY (TIME.CALENDAR BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING WITHIN LEVEL)) / AVG(UNITS_CUBE.UNITS) OVER HIERARCHY (TIME.CALENDAR BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING WITHIN LEVEL)) * 100

These are the results of a query against this calculated measure.

TIME          UNITS    CUM_AVG   PCT_DIFF
-------- ---------- ---------- ----------
Q1.06        146819     107965         36
Q2.06        145233     109062         33
Q3.06        143572     110048         30
Q4.06        149305     111138         34

Note that you could create this calculation using templates:

  1. Calculate the cumulative average of UNITS with the Cumulative Average template.

  2. Calculate the percent difference between current UNITS and the cumulative average with the Percent Difference template.

Expression Syntax Analytic Functions

Table 5-1 describes the analytic functions that you can use to create free-form calculations using the OLAP expression syntax. For the syntax of these functions, refer to Analytic Workspace Manager Help.

Table 5-1 OLAP Expression Syntax Analytic Functions

FunctionDescription

AVERAGE_RANK

Orders the members of a dimension based on the values of an expression. The function returns the sequence numbers of the dimension members, and assigns the same average rank to identical values.

AVG

Returns the average of a selection of values calculated over time.

COUNT

Tallies the number of data values identified by a selection of dimension members.

DENSE_RANK

Orders dimension members based on the values of an expression. The function returns the sequence numbers of the dimension members, and assigns the same minimum rank to identical values.

HIER_ANCESTOR

Returns an ancestor at a particular level of a hierarchy for either all members in the hierarchy or a particular member.

HIER_CHILD_COUNT

Returns the number of children of either all dimension members in a hierarchy or a particular member.

HIER_DEPTH

Returns a number representing the level depth of either all members of a hierarchy or a particular member, where 0 is the top level.

HIER_LEVEL

Returns the level of either all members of a hierarchy or a particular member.

HIER_PARENT

Returns the parent of either all dimension members in a hierarchy or a particular member.

HIER_TOP

Returns the topmost ancestor of either all members of a hierarchy or a particular member.

LAG

Returns the value of an expression at a specified number of time periods before the current period.

LAG_VARIANCE

Returns the difference between values for the current time period and a prior period.

LAG_VARIANCE_PERCENT

Returns the percent different between values for the current time period and a prior period.

LEAD

Returns the value of an expression at a specified number of time periods after the current period.

LEAD_VARIANCE

Returns the difference between values for the current time period and a future period.

LEAD_VARIANCE_PERCENT

Returns the percent different between values for the current time period and a future period.

MAX

Returns the largest of a selection of data values calculated over a particular dimension.

MIN

Returns the smallest of a selection of data values calculated over a particular dimension.

OLAP_DML_EXPRESSION

Executes an expression in the OLAP DML language.

RANK

Orders the members of a dimension based on the values of an expression. The function returns the sequence numbers of the dimension members, and assigns the same rank to identical values.

ROW_NUMBER

Orders the members of a dimension based on the values of an expression. The function returns the sequence numbers of the dimension members, and assigns a unique and arbitrary rank to identical values.

SHARE

Calculates the ratio of an expression's value for the current dimension member to the value for a related member of the same dimension.

SUM

Returns the total of a selection of values calculated over a particular dimension.


Creating Calculated Measures Using the OLAP DML

The most advanced business calculations, such as forecasts, models, and allocations, are available through the OLAP DML. The OLAP DML is the internal data definition and manipulation language for analytic workspaces. Its primary data structures are dimensions, variables, formulas, and valuesets. These dimensional objects in an analytic workspace support the high-level dimensional objects in the database, such as cubes, cube dimensions, measures, attributes, and hierarchies.

Several commands in the OLAP DML support dimensional database objects such as cubes, levels, and hierarchies. You can use these commands, as well as the other functions, operators, and so forth in the language.


See Also:

"Cube-Aware OLAP DML Statements" in the Oracle OLAP DML Reference

The OLAP DML is a mature language that was developed specifically for creating and managing dimensional objects and for manipulating dimensional data. Although programming in the OLAP DML requires significant skill, the language offers more power and flexibility than any other language.

Selecting an OLAP DML Calculation Type

Analytic Workspace Manager supports two types of user-defined expressions using the OLAP DML:

  • OLAP DML Expression: Calculates an OLAP DML expression. Choose this calculation type to execute an existing program, a built-in function, or a single expression. The expression is stored as the EQ statement of a formula in the analytic workspace.

  • OLAP DML Function: Executes an OLAP DML program entered in the Program Body field that returns values. Choose this calculation type to develop a new program in the OLAP DML. The name of the program is stored in the EQ statement of a formula in the analytic workspace.

To create an OLAP DML Expression: 

  1. Open the Create Calculated Measure dialog box.

  2. From the Calculation Types list, choose OLAP DML Expression.

  3. For Data Type, choose the data type of the return value.

  4. Enter the expression in the OLAP DML field.

  5. Click Compile Expression to check for syntax errors and to save a compiled version of the expression.

  6. Click Create to create the calculated measure.

To create an OLAP DML Function: 

  1. Open the Create Calculated Measure dialog box.

  2. From the Calculation Types list, choose OLAP DML Function.

  3. For Data Type, choose the data type of the return value.

  4. Enter a name for the function.

  5. Enter the program in the Program Body field. Omit the DEFINE, PROGRAM, and END commands, because they are generated automatically.

  6. Click Compile Expression to check for syntax errors and to save a compiled version of the program.

  7. Click Create to create the calculated measure.

OLAP DML Expression Examples

The OLAP DML has many built-in functions. This example creates a calculated measure using the RANDOM function. Figure 5-6 shows the definition of this simple calculation. The calculated measure will generate values in the default range of 0 to 1.

Figure 5-6 Using an OLAP DML Expression

Description of Figure 5-6 follows
Description of "Figure 5-6 Using an OLAP DML Expression"

The next example uses an arithmetic operator to calculate a 2% increase in units sold. This example of the OLAP DML is identical to the example in "Expression Syntax Example Using an Arithmetic Operator". However, note the difference in naming convention for the measure.

units_cube_units * 1.02

These are the results of a query against the two calculated measures created as OLAP DML expressions:

PRODUCT                   UNITS     TARGET     RANDOM
-------------------- ---------- ---------- ----------
Envoy Ambassador           2116       2158      .6467
Envoy Executive            2481       2531      .0773
Envoy Standard             3300       3366      .2349
Sentinel Financial        30513      31123      .6027
Sentinel Multimedia        7948       8107      .6494
Sentinel Standard          7302       7448      .5912

OLAP DML Function Example

An OLAP DML program that returns a value is also function. The following program returns the value ALERT when current sales are less than the previous year's. The actual calculation is performed by another calculated measure, UNITS_CUBE_SALES_PCT_CHG_PY, which is the percent change from the prior year for Sales. If sales are greater, then the program returns OKAY.

Example 5-1 OLAP DML Function

VARIABLE _alert   TEXT
VARIABLE _product NUMBER
 
TRAP ON error
 
_product = product + 0
 
TEMPSTAT product
DO
  LIMIT product TO CHILDREN USING product_parentrel _product
  LIMIT product KEEP UNITS_CUBE_SALES_PCT_CHG_PY LT 0
 
  IF STATLEN(product) GT 0
    THEN _alert = 'ALERT'
    ELSE _alert = 'OKAY'
 
DOEND
 
RETURN _alert
 
error:
RETURN 'ERROR'

Figure 5-7 shows the definition of this program as a calculated measure.

Figure 5-7 Using an OLAP DML Function

Description of Figure 5-7 follows
Description of "Figure 5-7 Using an OLAP DML Function"

These are the results of a query against this calculated measure:

CHANNEL         TIME         PCTCHG STATUS
--------------- -------- ---------- ------
Catalog         Q1.06            -1 ALERT
Catalog         Q2.06            -1 ALERT
Catalog         Q3.06            -3 ALERT
Catalog         Q4.06            -7 ALERT
Direct Sales    Q1.06            -3 ALERT
Direct Sales    Q2.06            -1 ALERT
Direct Sales    Q3.06            10 OKAY
Direct Sales    Q4.06            -4 ALERT
Internet        Q1.06            29 OKAY
Internet        Q2.06             3 ALERT
Internet        Q3.06             0 ALERT
Internet        Q4.06            16 OKAY
PK_$PK,AOEBPS/content.opfL\ Oracle® OLAP User's Guide, 11g Release 2 (11.2) en-US E17123-03 Oracle Corporation Oracle Corporation Oracle® OLAP User's Guide, 11g Release 2 (11.2) 2010-08-04T11:18:40Z Explains how SQL applications can extend their analytic processing capabilities and manage summary data by using the OLAP option of Oracle Database. PK*ZQ\L\PK,AOEBPS/dcommon/prodbig.gif GIF87a!!!)))111BBBZZZsss{{ZRRcZZ!!1!91)JB9B9)kkcJJB991ssc絽Zcc!!{祽BZc!9B!c{!)c{9{Z{{cZB1)sJk{{Z{kBsZJ91)Z{!{BcsRsBc{9ZZk甽kBkR!BZ9c)JJc{!))BZks{BcR{JsBk9k)Zck!!BZ1k!ZcRBZcZJkBk1Z9c!R!c9kZRZRBZ9{99!R1{99R{1!1)c1J)1B!BJRkk{ƽ絵ތkk絵RRs{{{{JJsssBBkkk!!9ss{{ZZssccJJZZRRccRRZZ))cBBJJ99JJ!!c11991199Z11!c!!))Z!!!1BRck{)!cJBkZRZ,HP)XRÇEZ֬4jJ0 @ "8pYҴESY3CƊ@*U:lY0_0#  5tX1E: C_xޘeKTV%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:qw1Yۦe~?$9$2Mxݿ!|K< a.o6$ TV*qp^~jGRҵd%i8ٱpFkw7Kg(?jpdbo!39R@;+/ĺ7u}Rci쬦ddBq+M]KǞ5H-!+׷UFU*'s1\(!xk1]&$bl Q yG_ϣkVmF]ɵ`#p{{%W`|?ɶv/=( _H<5/[8V%sBFJ$A*QEQ^_>&oyg lk[X#":fQEQEQEQEWgƺ+kipZMpoǕ#8h(((((((((((((׈|19<.YP#/#Q,1taFeX&[H$:`Xq$ׇ\CF+L6\?xC)>(>'٧ÿ:ϗk})(QKpR$9#WN}|%Os`=H8@'%UjIaY?TU;y_]覯?jEE@E^LӮo$mby}EҀ<㾭q>K'q,T`O~e(dWfɉ|3 <22y2[⮫?_}%IN )R=cqgSg;:[]B'K0(<`EPk [}@|2nZf_kP{+>EwKe"9UU ~b!t'Ce+k2NFb@|z|c\xb{ney E]x1$lNFёlXзez)=yK@LnH22 ~z#Ŭ^(9yVyc 0M>ו:Oj>~`m7G>͝RD*sp d/k#~Z}#@e\& # 0!Jτ^ iWݑ=*]Qp2*dpp]oyN4ڝ;.9F+O hwR^' 6J8ݜg 1+ _H  +^?i&o;3Gjڶq{<.]wLx`AȣnƓjh%ةlΣ $](_Ht/x҉(C▷sƭi7gدtȧ >zi:q2]8PHuw҈%$B(9xZOhi?k<Lke¢C)#k |HկmR Wg[gwNƿiGώ Ӯbdʹ4g}+*JѾIFλWE (U YQ2THiSZ]ƟxΧ<췱u6@F@Vu3+q᫅1;xL6cwO{%igaF8?  k>xϟ`w0y[t!đȩihװk u=GU?i!0w6Sg'ɣ ~Ig;WtQEQEyxV:Uu-6S*вQz3d!_>dCi1cI1\"|o|2}B=oᗂCqG>v4,\T$g-7' TPfeHKd S#;y'|]%qs}Rԥ3 עKu<De\}NϽdt)ʔ2(A9PmGך\Wr^$C2l s|_[ڍƧȄYi:M"\`qO$1x/7h|?hwi!HreKFr}MW~Ji5hP{AdfhɿT^62%q+nJ<l0G< ?LäO hY$$ʪNpUN>gCC=ad3F=UN`h?ס*^ŠItiK)\|($l$G'a’yBN4O 4m. "9 Q\X' qҷ+|o6Zڝyf.(` I(z_j #Aeo%ċ dQW*9[{ PȡԌA8roj=Er]L-8i#_C^IY7U Jf"oܝDY *M7|y%$|dA,F :vZ<)wYt} ˬ +`1' i /#txfMuC =+b(/?~_-v J>xR dH/:i^4/][Hȓ6vl D0l(02+_w2ے~Rzt t]HwI,6PI9c;H<'wǩMnHVFnK#pv_V?#o˝ۭhDg.޻{aeӊ4M;Ú<No{7yqog۹Xy$h߿+S},xOZ7j:]fH7@F} xs[\XE8Ь{IhO㌌I m$)b+Po@>2 HP`#;z gׄu;;kc}H_ Qhx+𾣡6(nQ qqx?.5Y4׆SpNB!P]Xg:t/ً]sL5H'k2h0x sAmbv@TOj1f{H. єP8AyR_?^ۏ9]5[z} ;XV%-2B3}sz}Þ2/ym|ڗ !| krpWS_uWN4=fVP? B,ayC|^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_ವ\>7 ڣ6ŒyޥAx"b:mm9?)xLr9T::΍c[w Fp}M\oOO=?qFeߜ}8xG }&~g;cYzvQEQEQEW㯈?k[_M3"#cfs/L?; ??v=#;4}_݁dK|1Wa@Q@W`|?ɶv/=((((((((4]#Y'Ruh.EYwd 89TnOZ?Ε7,XICƀ<>_HͷVqva EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^#Ķ͌w[-qN1Aary ,m>#vKy2 a^^?G<+=O<5`_W?O'UZ(< oy 66A˸̻޶\Hx3OjiO@@W⎛-KB mT0sPrHSqy_>xF|YKS6}1xT-  B1F1֕m^}"(1̨G# SqcYsMҤ6HY/dk)L{z8b8$WW.g~CNO.eTy!U  >(ih52?o6(X;ƾ^mWu4gTѰr,[x$]|7)=~t#li7pXa!|#6@㟋_kk9}v],m6 *`BbxylfTqZh =w4ך̚4Y5Ik\M7 ,bE, uិ?t,I $c,C؁^1◃vYu;Z[SUbBљր:|',w4\ 7M6L?2GQ$a5|S=kMi O1vJG9+|6N%O D7#dKOJ/$ӼE`f`4>Wpz#OIx(Kʾ?9ћfEEeÞ@~*xS7KF2a<"|f=xsayZD̞TCr0!DPljhpDm2 H ?'ŋEi6!­D%ɸ(%`W+?hNIXehh]Æ9ȍ?/sYZx||iqHDqʆ*yC/$WiZ45M'P,8~;rkFm_b>3"X+ Y7"OVap9Dxn⸷9$l]H #㟋_kk9}v],m6 *`Bbx y%ieDvfbY.8VCuo-QRHPF Ab\n+$ Eep$7999⺿?+\hTfuGh܏#H9r8cIKxOPI Ѩkh;S? QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEw?±k@7HON1sҬG7,>4%S?叚'I-&>(keo{5y߆_𱿲o7]~m oHvK.U2-D0rzgW}q, \V 09g*/wM;>[|3g`XyM]"mkN2aQa@`<$St~, 0pWsZ=kgÞ:Dm^E6Eyn%E3u p|UV5`Gi*(>P[ic3eU 1{nk<ZԚE$W3̀o9md97_M˷~ր6>"z_ͱu4A;,rOjgèN_ cK-QdF-%\$dk+]kBƛq>DlV*wpNTŎMzEG$R U(CaS؃޼~>*⦳4I#%eu#gqx+M6w455ӫ0bUF0x84Z;eRݤ! gow,|᫽bH&}ypvƼG\ 5ݎ WYU Jdd & [P[ic3eU 1{n%yY+VZX{yM->om}uIqGWy>cOQEgzy_ڭ/w c8FqP^S Y3h$#`pÃ*A9yԗn`pت!@ {I<vPE~9<յy[].x :sҀ: +B;X|GH)!AO.tyֻH'+yc P/gNyFDf9ڼln ,MzGS_O,fTd#q\q; [RG}E viw̲?S$hZ?lGOR@Wyqh dBK@^dXJ@s4?KnY|ȅm1s@@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5#qF+C4X^:O8>P ;qȨInC臔ǂx܄lt[$!-,%؏[ 9ȯ+  < #ę Tc%|8ZHuw҈դFK9b^PbG:Jgw.;Ql\Fmuqg#|CI^^eZhvҤ߱縌$NV=4/Ѭe! Ak9Tޣlh|Nƿi]NJu֞#^үtyCQKdnOƼ@ſxTEl^R|湈ƾdF@I>>9&5'7өڟŝ3zm`|i-<[\xϧwZ_3~|ۉ2{l$o+A)td{Blvy|o?GCWEҴ[5Jl|YT\`NwhOx3ZWhk'D3NAnX/A VG  HB(q5[8ETP0+V"Y/xMnc.œJm,zvwQj6$:o,3yq fی ⽳Ě>֥唳yB<1#гaG85Kl5\yr1Pd`Wi p?Ճ=((((((((((((((((((((((((((((=SO[!\ *_t  Exr%*_}!#U #4 & ֩3|b]L ]t b+Da&R_2lEٱZ`aC)/яmvUkS r(-iPE Vv_{z GLt\2s!F A#葡JY r|AA,hB}q|B`du }00(䡆<pb,G+oB C0p/x$…– ]7 @2HFc ) @AD \0 LHG',(A` `@SC)_" PH`}Y+_|1.K8pAKMA @?3҄$[JPA)+NH I ,@8G0/@R T,`pF8Ѓ)$^$ DDTDlA@ s;PKPK,AOEBPS/dcommon/darbbook.cssPKPK,A!OEBPS/dcommon/O_signature_clr.JPG"(JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?O '~MQ$Vz;OlJi8L%\]UFjޙ%ԯS;rA]5ފ<׈]j7Ouyq$z'TQuw7Ŀ KX߁M2=S'TQt?.5w'97;~pq=" ~k?`'9q6 E|yayM^Om'fkC&<5x' ?A?Zx'jß={=SßM gVC.5+Hd֪xc^)Җufz{Cީ|D Vkznq|+Xa+{50rx{|OG.OϞ~f/ xxX[2H )c+#jpUOZYX\=SG ߨC|K@;_߆'e?LT?]:?>w ڔ`D^So~xo[Ӡ3i7B:Q8 Vc-ďoi:FM292~y_*_闱YN\Fr=xZ3鳎OwW_QEzW~c]REeaSM}}Hӏ4&.E]u=gMѠ+mF`rNn$w9gMa꺢nTuhf2Xv>އ a(Û6߭?<=>z'TQuw7Ŀ KX߁M2=S'TQt?.5Kko\.8S$TOX߀Gw?Zx汴X)C7~.i6(Щ=+4{mGӭ¸-]&'t_kV*I<1)4thtIsqpQJ+> \m^[aJ5)ny:4o&QEnyAEPEEss 72,PDۢ׃K W{Wjr+wگ iM/;pd?~&?@;7E4gv8 $l'z'TQuw7Ŀ Gֱ=ɿ&G?. iR(5W*$|?w᫼gkmIbHe/_t>tg%y.l}N5[]+Mk0ĠeHdPrsst'UiC,y8`V%9ZIia|ܪvi מYG,o}+kk{YbyIeb*sAtի82zWoEK5z*o-eo;n(P u-I)4Š(HQEQEQEQEhz(X/Đ?}Bk˩ ݏrk0]4>8XzV? }6$}d^F>nU K ?Bտk_9׾x~w'ߞ  uDŽtL ؈5c-E/"|_Oo.IH쐍=i*Iw5(ںw?t5s.)+tQ2dUt5Vĺ.jZ"@IRrZƅY4ߡ_;}ų(KyQf1Aǵt?sZg+?F5_oQR&Dg߿]6FuRD u>ڿxl7?IT8'shj^=.=J1rj1Wl$얲cPx;E,p$֟ˏkw qg"45(ǛkV/=+ũ)bYl~K#˝J_כ5&\F'I#8/|wʾ_Xj Q:os^T1.M_|TO.;?_  jF?g N 8nA2F%i =qW,G=5OU u8]Rq?wr'˻S+۾.ܼ 87Q^elo/T*?L|ۚ<%<,/v_OKs B5f/29n0=zqQq(ª=VX@*J(э(f5qJN_EVǞQEOuoѕOuoa5}gO?:߂8Wא|cڽ~]N&O( (<]>͠@VQ=^~U ̴m&\խ5i:}|}r~9՝f}_>'vVֲ$~^f30^in{\_.O F8to}?${φ|#x^#^n~w=~k~?'KRtO.㌡h![3Zu*ٷճ(ԟ]z_/W1(ԟ]v~g|Yq<ז0 ; b8֮s,w9\?uEyStKaª@\,)) (!EPEPEPEPEPzѧts{v>C/"N6`d*J2gGӧWqBq_1ZuΓ\X]r?=Ey88Mp&pKtO-"wR2 K^-Z< \c>V0^@O7x2WFjs<׻kZ(<Т(OFw/6$1[:ޯԯ#q~4|,LVPem=@=YLUxӃV}AUbcUB.Ds5*kٸAeG>PJxt͝ b88?*$~@ׯD VkraiJs}Q.20x&mXξ,Z]“A-J#`+-E/"<]\a'tZGy.(|lދ~gMK OZdxDŽU9T6ϯ^<Ϡt5CZ]].t۫S=s`ڳ%8iVK:nqe+#<.T6U>zWoy3^I {F?J~=G}k)K$$;$de8*G Uӟ4Ocºw}|]4=ݣ\x$ʠms?q^ipw\"ȿPs^Z Q_0GڼU.t}ROM[G#]8wٞ ӫ87}Cgw vHȩBM55vof =A_٭`Ygx[6 P,5}>蚊(0(+?>+?> k|TuXq6_ +szk :u_ Z߶Ak_U}Jc2u/1[_»ݸG41-bሬ۴}}Eȹפ_c?5gi @cL\L<68hF_Ih>X4K7UТ sMj =J7CKo>Օ5s:߀t ~ηaٿ?|gdL8+gG%o?x`دOqȱwc¨&TW_V_aI=dpG!wu۞սZ1yL50$(l3(:~'ַo A}a3N*[0ǭ HKQV}G@֜$ 9of$ArNqUOgË05#m?D)^_h//5_/<?4}Jį+GkpG4"$ r| >S4Ђ"S 1%R:ȝ 8;PKPz PK,AOEBPS/dcommon/feedback.gif7GIF89a'%(hp|fdx?AN5:dfeDGHɾTdQc`g*6DC\?ؘ||{;=E6JUՄfeA= >@,4`H.|`a (Q 9:&[|ځ,4p Y&BDb,!2@, $wPA'ܠǃ@CO~/d.`I @8ArHx9H75j L 3B/` P#qD*s 3A:3,H70P,R@ p!(F oԥ D;"0 ,6QBRɄHhI@@VDLCk8@NBBL2&pClA?DAk%$`I2 #Q+l7 "=&dL&PRSLIP)PɼirqМ'N8[_}w;PK-PK,AOEBPS/dcommon/booklist.gifGIF89a1޵֥΄kZ{Jk1Rs!BZ)B),@I9Z͓Ca % Dz8Ȁ0FZЌ0P !x8!eL8aWȠFD(~@p+rMS|ӛR$ v "Z:]ZJJEc{*=AP  BiA ']j4$*   & 9q sMiO?jQ = , YFg4.778c&$c%9;PKː5PK,AOEBPS/dcommon/cpyr.htm1 Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2012, Oracle and/or its affiliates. All rights reserved.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Alpha and Beta Draft Documentation Notice

If this document is in prerelease status:

This documentation is in prerelease status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Oracle Logo

PKN61PK,AOEBPS/dcommon/masterix.gif.GIF89a1ޜΌscJk1Rs!Bc1J),@IS@0"1 Ѿb$b08PbL,acr B@(fDn Jx11+\%1 p { display: none; } /* Class Selectors */ .ProductTitle { font-family: sans-serif; } .BookTitle { font-family: sans-serif; } .VersionNumber { font-family: sans-serif; } .PrintDate { font-family: sans-serif; font-size: small; } .PartNumber { font-family: sans-serif; font-size: small; } PKeӺ1,PK,AOEBPS/dcommon/larrow.gif#GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШtpHc`  өb[.64ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPK,AOEBPS/dcommon/index.gifGIF89a1޵ΥΥ{sc{BZs,@IM" AD B0 3.R~[D"0, ]ШpRNC  /& H&[%7TM/`vS+-+ q D go@" 4o'Uxcxcc&k/ qp zUm(UHDDJBGMԃ;PK(PK,AOEBPS/dcommon/bookbig.gif +GIF89a$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9B!& Imported from GIF image: bookbig.gif,$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9BH`\Ȑ:pظа"A6DBH,V@Dڹ'G"v Æ ܥ;n;!;>xAܽ[G.\rQC wr}BŊQ A9ᾑ#5Y0VȒj0l-GqF>ZpM rb ;=.ސW-WѻWo ha!}~ْ ; t 53 :\ 4PcD,0 4*_l0K3-`l.j!c Aa|2L4/1C`@@md;(H*80L0L(h*҇҆o#N84pC (xO@ A)J6rVlF r  fry†$r_pl5xhA+@A=F rGU a 1х4s&H Bdzt x#H%Rr (Ѐ7P`#Rщ'x" #0`@~i `HA'Tk?3!$`-A@1l"P LhʖRG&8A`0DcBH sq@AXB4@&yQhPAppxCQ(rBW00@DP1E?@lP1%T` 0 WB~nQ@;PKGC PK,AOEBPS/dcommon/rarrow.gif/GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШLlԸ NCqWEd)#34vwwpN|0yhX!'+-[F 'n5 H $/14w3% C .90" qF 7&E "D mnB|,c96) I @0BW{ᢦdN p!5"D`0 T 0-]ʜ$;PKJV^PK,AOEBPS/dcommon/mix.gifkGIF89aZZZBBBJJJkkk999sss!!!111cccֽ{{{RRR)))猌ƭ{s{sks!,@@pH,B$ 8 t:<8 *'ntPP DQ@rIBJLNPTVEMOQUWfj^!  hhG H  kCúk_a Ǥ^ h`B BeH mm  #F` I lpǎ,p B J\Y!T\(dǏ!Gdˆ R53ټ R;iʲ)G=@-xn.4Y BuU(*BL0PX v`[D! | >!/;xP` (Jj"M6 ;PK枰pkPK,AOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PK,AOEBPS/dcommon/toc.gifGIF89a1ΥΥ{c{Z{JkJk1Rk,@IK% 0| eJB,K-1i']Bt9dz0&pZ1o'q(؟dQ=3S SZC8db f&3v2@VPsuk2Gsiw`"IzE%< C !.hC IQ 3o?39T ҍ;PKv I PK,AOEBPS/dcommon/topnav.gifGIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)-'KR$&84 SI) XF P8te NRtHPp;Q%Q@'#rR4P fSQ o0MX[) v + `i9gda/&L9i*1$#"%+ ( E' n7Ȇ(,҅(L@(Q$\x 8=6 'נ9tJ&"[Epljt p#ѣHb :f F`A =l|;&9lDP2ncH R `qtp!dȐYH›+?$4mBA9 i@@ ]@ꃤFxAD*^Ŵ#,(ε  $H}F.xf,BD Z;PK1FAPK,AOEBPS/dcommon/bp_layout.css# @charset "utf-8"; /* bp_layout.css Copyright 2007, Oracle and/or its affiliates. All rights reserved. */ body { margin: 0ex; padding: 0ex; } h1 { display: none; } #FOOTER { border-top: #0d4988 solid 10px; background-color: inherit; color: #e4edf3; clear: both; } #FOOTER p { font-size: 80%; margin-top: 0em; margin-left: 1em; } #FOOTER a { background-color: inherit; color: gray; } #LEFTCOLUMN { float: left; width: 50%; } #RIGHTCOLUMN { float: right; width: 50%; clear: right; /* IE hack */ } #LEFTCOLUMN div.portlet { margin-left: 2ex; margin-right: 1ex; } #RIGHTCOLUMN div.portlet { margin-left: 1ex; margin-right: 2ex; } div.portlet { margin: 2ex 1ex; padding-left: 0.5em; padding-right: 0.5em; border: 1px #bcc solid; background-color: #f6f6ff; color: black; } div.portlet h2 { margin-top: 0.5ex; margin-bottom: 0ex; font-size: 110%; } div.portlet p { margin-top: 0ex; } div.portlet ul { list-style-type: none; padding-left: 0em; margin-left: 0em; /* IE Hack */ } div.portlet li { text-align: right; } div.portlet li cite { font-style: normal; float: left; } div.portlet li a { margin: 0px 0.2ex; padding: 0px 0.2ex; font-size: 95%; } #NAME { margin: 0em; padding: 0em; position: relative; top: 0.6ex; left: 10px; width: 80%; } #PRODUCT { font-size: 180%; } #LIBRARY { color: #0b3d73; background: inherit; font-size: 180%; font-family: serif; } #RELEASE { position: absolute; top: 28px; font-size: 80%; font-weight: bold; } #TOOLS { list-style-type: none; position: absolute; top: 1ex; right: 2em; margin: 0em; padding: 0em; background: inherit; color: black; } #TOOLS a { background: inherit; color: black; } #NAV { float: left; width: 96%; margin: 3ex 0em 0ex 0em; padding: 2ex 0em 0ex 4%; /* Avoiding horizontal scroll bars. */ list-style-type: none; background: transparent url(../gifs/nav_bg.gif) repeat-x bottom; } #NAV li { float: left; margin: 0ex 0.1em 0ex 0em; padding: 0ex 0em 0ex 0em; } #NAV li a { display: block; margin: 0em; padding: 3px 0.7em; border-top: 1px solid gray; border-right: 1px solid gray; border-bottom: none; border-left: 1px solid gray; background-color: #a6b3c8; color: #333; } #SUBNAV { float: right; width: 96%; margin: 0ex 0em 0ex 0em; padding: 0.1ex 4% 0.2ex 0em; /* Avoiding horizontal scroll bars. */ list-style-type: none; background-color: #0d4988; color: #e4edf3; } #SUBNAV li { float: right; } #SUBNAV li a { display: block; margin: 0em; padding: 0ex 0.5em; background-color: inherit; color: #e4edf3; } #SIMPLESEARCH { position: absolute; top: 5ex; right: 1em; } #CONTENT { clear: both; } #NAV a:hover, #PORTAL_1 #OVERVIEW a, #PORTAL_2 #OVERVIEW a, #PORTAL_3 #OVERVIEW a, #PORTAL_4 #ADMINISTRATION a, #PORTAL_5 #DEVELOPMENT a, #PORTAL_6 #DEVELOPMENT a, #PORTAL_7 #DEVELOPMENT a, #PORTAL_11 #INSTALLATION a, #PORTAL_15 #ADMINISTRATION a, #PORTAL_16 #ADMINISTRATION a { background-color: #0d4988; color: #e4edf3; padding-bottom: 4px; border-color: gray; } #SUBNAV a:hover, #PORTAL_2 #SEARCH a, #PORTAL_3 #BOOKS a, #PORTAL_6 #WAREHOUSING a, #PORTAL_7 #UNSTRUCTURED a, #PORTAL_15 #INTEGRATION a, #PORTAL_16 #GRID a { position: relative; top: 2px; background-color: white; color: #0a4e89; } PK3( # PK,AOEBPS/dcommon/bookicon.gif:GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ޭ{{ZRRcZZRJJJBB)!!skRB9{sν{skskcZRJ1)!֭ƽ{ZZRccZJJBBB999111)JJ9BB1ZZB!!ﭵBJJ9BB!!))Jk{)1!)BRZJ{BsR!RRJsJ!J{s!JsBkks{RsB{J{c1RBs1ZB{9BJ9JZ!1BJRRs!9R!!9Z9!1)J19JJRk19R1Z)!1B9R1RB!)J!J1R)J119!9J91!9BkksBBJ119BBR!))9!!!JB1JJ!)19BJRZckތ1)1J9B,H*\hp >"p`ƒFF "a"E|ժOC&xCRz OBtX>XE*O>tdqAJ +,WxP!CYpQ HQzDHP)T njJM2ꔀJ2T0d#+I:<жk 'ꤱF AB @@nh Wz' H|-7f\A#yNR5 /PM09u UjćT|q~Yq@&0YZAPa`EzI /$AD Al!AAal 2H@$ PVAB&c*ؠ p @% p-`@b`uBa l&`3Ap8槖X~ vX$Eh`.JhAepA\"Bl, :Hk;PKx[?:PK,AOEBPS/dcommon/conticon.gif^GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ZRR޽{{ssskkkcccZ991ccRZZBBJJZck)19ZcsBJZ19J!k{k)Z1RZs1!B)!J91{k{)J!B!B911)k{cs!1s!9)s!9!B!k)k1c!)Z!R{9BJcckZZcBBJ99B119{{!!)BBRBBZ!))999R99Z!!999c1!9!)19B1)!B9R,  oua\h2SYPa aowwxYi 9SwyyxxyYSd $'^qYȵYvh ч,/?g{н.J5fe{ڶyY#%/}‚e,Z|pAܠ `KYx,ĉ&@iX9|`p ]lR1khٜ'E 6ÅB0J;t X b RP(*MÄ!2cLhPC <0Ⴁ  $4!B 6lHC%<1e H 4p" L`P!/,m*1F`#D0D^!AO@..(``_؅QWK>_*OY0J@pw'tVh;PKp*c^PK,AOEBPS/dcommon/blafdoc.cssL@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.10.7 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; } h2 { font-size: 152%; font-weight: bold; } h3 { font-size: 139%; font-weight: bold; } h4 { font-size: 126%; font-weight: bold; } h5 { font-size: 113%; font-weight: bold; display: inline; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #e00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #e00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKʍPK,AOEBPS/dcommon/rightnav.gif&GIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)- $CҠҀ ! D1 #:aS( c4B0 AC8 ְ9!%MLj Z * ctypJBa H t>#Sb(clhUԂ̗4DztSԙ9ZQҀEPEPEPEPEPEPEPM=iԍP Gii c*yF 1׆@\&o!QY00_rlgV;)DGhCq7~..p&1c:u֫{fI>fJL$}BBP?JRWc<^j+χ5b[hֿ- 5_j?POkeQ^hֿ1L^ H ?Qi?z?+_xɔŪ\썽O]χ>)xxV/s)e6MI7*ߊޛv֗2J,;~E4yi3[nI`Ѱe9@zXF*W +]7QJ$$=&`a۾?]N T䏟'X)Ɣkf:j |>NBWzYx0t!* _KkoTZ?K Gc+UyڹgNuh^iSo5{\ܹ3Yos}.>if FqR5\/TӮ#]HS0DKu{($"2xִ{SBJ8=}Y=.|Tsц2UЫ%.InaegKo z ݎ3ֹxxwM&2S%';+I',kW&-"_¿_ Vq^ܫ6pfT2RV A^6RKetto^[{w\jPZ@ޢN4/XN#\42j\(z'j =~-I#:q[Eh|X:sp* bifp$TspZ-}NM*B-bb&*xUr#*$M|QWY ~p~- fTED6O.#$m+t$˙H"Gk=t9r娮Y? CzE[/*-{c*[w~o_?%ƔxZ:/5𨴟q}/]22p qD\H"K]ZMKR&\C3zĽ[PJm]AS)Ia^km M@dК)fT[ijW*hnu Ͳiw/bkExG£@f?Zu.s0(<`0ֹoxOaDx\zT-^ѧʧ_1+CP/p[w 9~U^[U<[tĽwPv[yzD1W='u$Oeak[^ |Gk2xv#2?¹TkSݕ| rݞ[Vi _Kz*{\c(Ck_܏|?u jVڔ6f t?3nmZ6f%QAjJf9Rq _j7Z-y.pG$Xb]0')[_k;$̭?&"0FOew7 z-cIX岛;$u=\an$ zmrILu uٞ% _1xcUW%dtÀx885Y^gn;}ӭ)場QEQ@Q@Q@Q@Q@Q@!4xPm3w*]b`F_931˜[ן+(> E ly;<;MF-qst+}DH @YKlLmؤciN<|]IU)Lw(8t9FS(=>og<\Z~u_+X1ylsj'eՃ*U3`C!N9Q_WܱhKc93^ua>H ƕGk=8~e#_?{ǀe-[2ٔ7;=&K挑5zsLdx(e8#{1wS+ΝVkXq9>&yஏh$zq^0~/j@:/«Vnce$$uoPp}MC{$-akH@ɫ1O !8R9s5ԦYmϧ'OUṡ5T,!Ԛ+s#1Veo=[)g>#< s)ƽُA^䠮ωFUj(ǩ|N3Jڷ睁ϱuږZYGOTsI<&drav?A^_f׻B$,O__ԿC`it{6>G׈C~&$y؎v1q9Sc1fH[ѽ>,gG'0'@Vw,BO [#>ﱺg5ΒFVD%Yr:O5 Tu+O멃]ی38Ze}R&ѝ_xzc1DXgس;<,_,{ƽY'AS#oF.M#~cBuEx7G+Y)(5q+GCV;qF+CLQ)qEC&6z𿊘z}?&w=+)??&\g{;V??׻xGœdٿ׼-Nc')3K]N)iLTӿCdb7Q^a N sd>Fz[0S^s'Zi 77D}kWus ab~~H(>.fif9,~|Jk;YN3H8Y(t6Q݉k͇_÷Z+2߄&[ +Tr^藺97~c܎=[f1RrBǓ^kEMhxYVm<[џ6| kqbѱ| YA{G8p?\UM7Z66 g1U1igU69 u5Pƪ:VVZC=[@ҹ¨$kSmɳО\vFz~i3^a Osŧυ9Q}_3 όO{/wgoet39 vO2ea;Ύ7$U#?k+Ek&dpzbӱ+TaB0gN{[N7Gי}U7&@?>Fz~E!a@s ?'67XxO*!?qi]֏TQN@tI+\^s8l0)2k!!iW8F$(yOּT.k,/#1:}8uT˾+5=O/`IW G֯b.-<= HOm;~so~hW5+kS8s.zwE| ?4ӿw/K N 9?j(#0UT` Wzw}:_*9m>󑓀F?ELzv=8q:=WgJ`nDr Zе<ֹ](Q@Q@Q@Q@Q@Q@Q@Q@ 'IdC0EYJVcMty_~u+Sw-aO n<[YJgL#6i g5ЖDZ14cʝ!!\/M}/_AYR__>oC? _?7_G#RERW쏞KB}JxGSkǕA pƱơP m]hwB7U$Zq M95"3q1ioATߚ{g.t uu2k=;h#YB= fgS :TdLԃ!44mFK{Hrd^7oz|BVr<{)6AXգV»|>*/hS܏z͆OM=Εq (s|s׊LKQI :9NJ)P+!ʣoAF>+=@I}"x/}۠1aנc¹4emC:>p_xWKX` >R3_S½èųp3޺u3N e یbmͺ<_ mnݮ1Op?Gm)Qb%N585'%Ahs\6yw!"&Ɨ._wk)}GP;Z!#\"< *oƾ\)}N>"լ/~]Lg}pBG X?<zZ#x69S=6) jzx=y9O&>+e!!? ?s~k5Gʏ)?*ce7Ox~k5􇔾Q/e7/Ԑ#3OgNC0] ;_FiRl>Q.g>!%k#ú:Kn'&}?U@\pџPtp)v<{_i}Oվֲ3XIYIx~b<D?(=_JXH=bbi=Oh?_ C_O)}oW쏜? %Ƶ;-RYFi`wۭ{ϖZMtQ$"c_+ԃx1*0b;ԕ݋ESQEQEQEQEQEQEQEQEQEQZ(1F)h1K@XLRE&9P (bf{RӨ&)PEPEPbԴPGKZ(iإbn(:A%S0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKje88PK,AOEBPS/dcommon/help.gif!GIF89a1εֵ֜֜{kZsBc{,@ )sƠTQ$8(4ʔ%ŌCK$A HP`$h8ŒSd+ɡ\ H@%' 6M HO3SJM /:Zi[7 \( R9r ERI%  N=aq   qƦs *q-n/Sqj D XZ;PKއ{&!PK,AOEBPS/global.htmSK Designing a Dimensional Model

A Designing a Dimensional Model

This guide uses the Global schema for its examples. This appendix explores the business requirements of the fictitious Global Computing Company and discusses how the design of a data model emerges from these requirements.

This appendix contains the following topics:

Case Study Scenario

The fictional Global Computing Company was established in 1990. Global Computing distributes computer hardware and software components to customers on a worldwide basis. The Sales and Marketing department has not been meeting its budgeted numbers. As a result, this department has been challenged to develop a successful sales and marketing strategy.

Global Computing operates in an extremely competitive market. Competitors are numerous, customers are especially price-sensitive, and profit margins tend to be narrow. In order to grow profitably, Global Computing must increase sales of its most profitable products.

Various factors in Global Computing's current business point to a decline in sales and profits:

  • Traditionally, Global Computing experiences low third-quarter sales (July through September). However, recent sales in other quarters have also been lower than expected. The company has experienced bursts of growth but, for no apparent reason, has had lower first-quarter sales during the last two years as compared with prior years.

  • Global has been successful with its newest sales channel, the Internet. Although sales within this channel are growing, overall profits are declining.

  • Perhaps the most significant factor is that margins on personal computers - previously the source of most of Global Computing's profits - are declining rapidly.

Global Computing must understand how each of these factors is affecting its business.

Current reporting is done by the IT department, which produces certain standard reports on a monthly basis. Any ad hoc reports are handled on an as-needed basis and are subject to the time constraints of the limited IT staff. Complaints have been widespread within the Sales and Marketing department regarding the delayed response to report requests. Complaints have also been numerous in the IT department regarding analysts who change their minds frequently or ask for further information.

The Sales and Marketing department has been struggling with a lack of timely information about what it is selling, who is buying, and how they are buying. In a meeting with the CIO, the VP of Sales and Marketing states, "By the time I get the information, it is no longer useful. I am only able to get information at the end of each month, and it does not have the details I need to do my job."

Reporting Requirements

When asked to be more specific about what she needs, the Vice President of Sales and Marketing identifies the following requirements:

  • Trended sales data for specific customers, regions, and segments.

  • The ability to provide information and some analysis capabilities to the field sales force. A Web interface would be preferred, since the sales force is distributed throughout the world.

  • Detail regarding mail-order, phone, and e-mail sales on a monthly and quarterly basis, and a comparison to past time periods. Information must identify when, how, and what is being sold by each channel.

  • Margin information on products to understand the dollar contribution for each sale.

  • Knowledge of percent change versus the prior and year-ago period for sales, units, and margin.

  • The ability to perform analysis of the data by ad hoc groupings.

The CIO has discussed these requirements with his team and has concluded that a standard reporting solution against the production order entry system would not be flexible enough to provide the required analysis capabilities. The reporting requirements for business analysis are so diverse that the projected cost of development, along with the expected turnaround time for requests, would make this solution unacceptable.

The CIO's team recommends using an analytic workspace to support analysis. The team suggests that the Sales and Marketing department's IT group work with Corporate IT to build an analytic workspace that meets their needs for information analysis.

Business Goals

The development team identifies the following high-level business goals that the project must meet:

  • Global Computing's strategic goal is to increase company profits by increasing sales of higher margin products and by increasing sales volume overall.

  • The Sales and Marketing department objectives are to:

    • Analyze industry trends and target specific market segments.

    • Analyze sales channels and increase profits.

    • Identify product trends and create a strategy for developing the appropriate channels.

Information Requirements

Once you have established business goals, you can determine the type of information that helps achieve these goals. To understand how end users will examine the data in the analytic workspace, it is important to conduct extensive interviews. From interviews with key end users, you can determine how they look at the business, and what types of business analysis questions they want to answer.

Business Analysis Questions

Interviews with the VP of Sales and Marketing, salespeople, and market analysts at Global Computing reveal the following business analysis questions:

  • What products are profitable?

  • Who are our customers, and what and how are they buying?

  • What accounts are most profitable? What is the performance of each distribution channel?

  • Is there still a seasonal variance to the business?

We can examine each of these business analysis questions in detail.

What products are profitable?

This business analysis question consists of the following questions:

  • What is the percent of total sales for any item, product family, or product class in any month, quarter or year, and in any distribution channel? How does this percent of sales differ from a year ago?

  • What is the unit price, unit cost, and margin for each unit for any item in any particular month? What are the price, cost, and margin trends for any item in any month?

  • What items were most profitable in any month, quarter, or year, in any distribution channel, and in any geographic area or market segment? How did profitability change from the prior period? What was the percent change in profitability from the prior period?

  • What items experienced the greatest change in profitability from the prior period?

  • What items contributed the most to total profitability in any month, quarter, or year, in any distribution channel, and in any geographic area or market segment?

  • What items have the highest per unit margin for any particular month?

  • In summary, what are the trends?

Who are our customers, and what and how are they buying?

This business analysis question consists of the following questions:

  • What were sales for any item, product family, or product class in any month, quarter, or year?

  • What were sales for any item, product family, or product class in any distribution channel, geographic area, or market segment?

  • How did sales change from the prior period? What was the percent change in sales from the prior period?

  • How did sales change from a year ago? What was the percent change in sales from a year ago?

  • In summary, what are the trends?

Which accounts are most profitable?

This business analysis question consists of the following questions:

  • Which accounts are most profitable in any month, quarter, or year, in any distribution channel, by any item, product family, or product class?

  • What were sales and extended margin (gross profit) by account for any month, quarter, or year, for any distribution channel, and for any product?

  • How does account profitability compare to the prior time period?

  • Which accounts experienced the greatest increase in sales as compared to the prior period?

  • What is the percent change in sales from the prior period? Did the percent change in profitability increase at the same rate as the percent change in sales?

  • In summary, what are the trends?

What is the performance of each distribution channel?

This business analysis question consists of the following questions:

  • What is the percent of sales to total sales for each distribution channel for any item, product family, or product class, or for any geographic area or market segment?

  • What is the profitability of each distribution channel: direct sales, catalog sales, and the Internet?

  • Is the newest distribution channel, the Internet, "cannibalizing" catalog sales? Are customers simply switching ordering methods, or is the Internet distribution channel reaching additional customers?

  • In summary, what are the trends?

Is there still a seasonal variance to the business?

This business analysis question consists of the following questions:

  • Are there identifiable seasonal sales patterns for particular items or product families?

  • How do seasonal sales patterns vary by geographic location?

  • How do seasonal sales patterns vary by market segment?

  • Are there differences in seasonal sales patterns as compared to last year?

Summary of Information Requirements

By examining the types of analyses that users want to perform, we can identify the following key requirements for analysis:

  • Global Computing has a strong need for profitability analysis. The company must understand profitability by product, account, market segment, and distribution channel. It also must understand profitability trends.

  • Global Computing must understand how sales vary by time of year. The company must understand these seasonal trends by product, geographic area, market segment, and distribution channel.

  • Global Computing has a need for ad hoc sales analysis. Analysis must identify what products are sold to whom, when these products are sold, and how customers buy these products.

  • The ability to perform trend analysis is important to Global Computing.

Identifying Required Business Facts

The key analysis requirements reveal the business facts that are required to support analysis requirements at Global Computing.

These facts are ordered by time, product, customer shipment or market segment, and distribution channel:


Sales
Units
Change in sales from prior period
Percent change in sales from prior period
Change in sales from prior year
Percent change in sales from prior year
Product share
Channel share
Market share
Extended cost
Extended margin
Extended margin change from prior period
Extended margin percent change from prior period
Units sold, change from prior period
Units sold, percent change from prior period
Units sold, change from prior year
Units sold, percent change from prior year

These facts are ordered by item and month:


Unit price
Unit cost
Margin per unit

Designing a Dimensional Model for Global Computing

"Business Goals" identifies the business facts that support analysis requirements at Global Computing. Next, we identify the dimensions, levels, and attributes in a data model. We also identify the relationships within each dimension. The resulting data model is used to design the Global schema, the dimensional model, and the analytic workspace.

Identifying Dimensions

Four dimensions are used to organize the facts in the database:

  • Product shows how data varies by product.

  • Customer shows how data varies by customer or geographic area.

  • Channel shows how data varies according to each distribution channel.

  • Time shows how data varies over time.

Identifying Levels

Now that we have identified dimensions, we can identify the levels of summarization within each dimension. Analysis requirements at Global Computing reveal that:

  • There are three distribution channels: Sales, Catalog, and Internet. These three values are the lowest level of detail in the data warehouse and are grouped in the Channel level. From the order of highest level of summarization to the lowest level of detail, the levels are Total and Channel.

  • Global performs customer and geographic analysis along the line of shipments to customers and by market segmentation. Shipments and Segment will be two hierarchies in the Customer dimension. In each case, the lowest level of detail in the data model is the Ship To location.

    • When analyzing along the line of customer shipments, the levels of summarization are (highest to lowest): Total, Region, Warehouse, and Ship To.

    • When analyzing by market segmentation, the levels of summarization are (highest to lowest): Total, Market Segment, Account, and Ship To.

  • The Product dimension will have four levels (highest to lowest): Total, Class, Family, and Item.

  • The Time dimension will have four levels (highest to lowest): Total, Year, Quarter, and Month.

All dimensions have a Total level as the highest level of summarization. Adding this highest level provides additional flexibility as application users analyze data.

Identifying Hierarchies

We will identify the hierarchies that organize the levels within each dimension. To identify hierarchies, we group the levels in the correct order of summarization and in a way that supports the identified types of analysis.

For the Channel and Product dimensions, Global Computing requires only one hierarchy for each dimension. For the Customer dimension, Global Computing requires two hierarchies. Analysis within the Customer dimension tends to be either by geographic area or market segment. Therefore, we organize levels into two hierarchies, Shipments and Segment. Analysis over time also requires two hierarchies, a Calendar hierarchy and a Fiscal hierarchy.

Identifying Stored Measures

"Identifying Required Business Facts" lists 21 business facts that are required to support the analysis requirements of Global Computing. Of this number, only four facts must be acquired from the transactional database:

  • Units

  • Sales

  • Unit Price

  • Unit Cost

All of the other facts can be derived from these basic facts. The derived facts can be calculated in the analytic workspace on demand. If experience shows that some of these derived facts are being used heavily and the calculations are putting a noticeable load on the system, then some of these facts can be calculated and stored in the analytic workspace as a data maintenance procedure.

PKOSXKSKPK,A OEBPS/toc.htmMX Table of Contents

Contents

Title and Copyright Information

Preface

What's New in Oracle OLAP?

1 Overview

2 Getting Started with Oracle OLAP

3 Creating Dimensions and Cubes

4 Querying Dimensional Objects

5 Enhancing Your Database with Analytic Content

6 Developing Reports and Dashboards

7 Administering Oracle OLAP

8 Security

9 Advanced Aggregations

A Designing a Dimensional Model

B Keyboard Shortcuts

Glossary

Index

PK7RXMXPK,AOEBPS/security.htm_< Security

8 Security

Oracle OLAP secures your data using the standard security mechanisms of Oracle Database.

This chapter contains the following topics:

Security of Multidimensional Data in Oracle Database

Your company's data is a valuable asset. The information must be secure, private, and protected. Analytic data is particularly vulnerable because it is highly organized, easy to navigate, and summarized into meaningful units of measurement.

When you use Oracle OLAP, your data is stored in the database. It has the security benefits of Oracle Database, which leads the industry in security. You do not need to expose the data by transferring it to a standalone database. You do not need to administer security on a separate system. And you do not need to compromise your data by storing it in a less secure environment than Oracle Database.

Security Management

Because you have just one system to administer, you do not have to replicate basic security tasks such as these:

  • Creating user accounts

  • Creating and administering rules for password protection

  • Securing network connections

  • Detecting and eliminating security vulnerabilities

  • Safeguarding the system from intruders

The cornerstone of data security is the administration of user accounts and roles. Users open a connection with Oracle Database with a user name and password, and they have access to both dimensional and relational objects in the same session.

Types of Security

Users by default have no access rights to an analytic workspace or any other data type in another user's schema. The owner or an administrator must grant them, or a role to which they belong, any access privileges.

Oracle OLAP provides two types of security: Object security and data security.

  • Object security provides access to dimensional objects. You must set object security before other users can access them. Object security is implemented using SQL GRANT and REVOKE.

  • Data security provides fine-grained control of the data on a cellular level. This type of security is optional. You must define data security policies only when you want to restrict access to specific areas of a cube. Data security is implemented using the XML DB security of Oracle Database.

You can administer both data security and object security in Analytic Workspace Manager. For object security, you also have the option of using SQL GRANT and REVOKE.

About the Privileges

Using both object security and data security, you can grant and revoke the following privileges:

  • Alter: Change the definition of a cube or dimension. Users need this privilege to create and modify a dimensional model.

  • Delete: Remove old dimension members. Users need this privilege to refresh a dimension.

  • Insert: Add new dimension members. Users need this privilege to refresh a dimension.

  • Select: Query the cube or dimension. Users need this privilege to query a view of the cube or dimension or to use the CUBE_TABLE function. CUBE_TABLE is a SQL function that returns the values of a dimensional object.

  • Update: Change the data values of a cube or the name of a dimension member. Users need this privilege to refresh a dimension or cube.

Users exercise these privileges either using Analytic Workspace Manager to create and administer dimensional objects, or by using SQL to query them. They do not issue commands such as SQL INSERT and UPDATE directly on the cubes and dimensions.

Layered Security

For dimensional objects, you can manage security at these levels:

  • Dimension member

  • Dimension

  • Cube

  • Analytic workspace

  • View

  • Materialized view

The privileges are layered so that, for example, a user with SELECT data security on Software products must also have SELECT object security on the PRODUCT dimension and the Global analytic workspace. Users also need SELECT privileges on the views of the dimensional objects.

You administer security on views and materialized views for dimensional objects the same way as for any other views and materialized views in the database.

Setting Object Security

You can use either SQL or Analytic Workspace Manager to set object security. The results are identical.

Using SQL to Set Object Security

You can set and revoke object privileges on dimensional objects using the SQL GRANT and REVOKE commands.

Setting Object Security on an Analytic Workspace

Object privileges on an analytic workspace simply open the container. You must grant object privileges on the cubes and dimensions for users to be able to access them. The table name is the same as the analytic workspace name, with the addition of an AW$ prefix.

The following command enables Scott to attach the Global analytic workspace, AW$GLOBAL, to a session:

GRANT SELECT ON aw$global TO scott;

Setting Object Security on Dimensions

You can grant privileges on individual dimensions to enable users to query the dimension members and attributes. For users to query a cube, they must have privileges on every dimension of the cube.

The privileges apply to the entire dimension. However, you can set fine-grained access on a dimension to restrict the privileges, as described in "Creating Data Security Policies on Dimensions and Cubes".

Example 8-1 shows the SQL commands that enable Scott to query the Product dimension. They give Scott SELECT privileges on the Product dimension, on the Global analytic workspace, and on the Product view.

Example 8-1 Privileges to Query the Product Dimension

GRANT SELECT ON product TO scott;
GRANT SELECT ON aw$global TO scott;
GRANT SELECT ON product_view TO scott;

Setting Object Security on Cubes

Privileges on cubes enable users to access business measures and perform analysis. You must also grant privileges on each of the dimensions of the cube.

The privileges apply to the entire cube. However, you can create a data security policy on the cube or on its dimensions to restrict the privileges, as described in "Creating Data Security Policies on Dimensions and Cubes".

Example 8-2 shows the SQL commands that enable Scott to query the Units cube. They give Scott SELECT privileges on the Global analytic workspace, the cube, and all of its dimensions. Scott also gets privileges on the dimension views so that he can query the dimension attributes for formatted reports.

Example 8-2 Privileges to Query the Units Cube

/* Grant privileges on the analytic workspace */
GRANT SELECT ON global.aw$global TO scott;

/* Grant privileges on the cube */
GRANT SELECT ON global.units_cube TO scott;

/* Grant privileges on the dimensions */
GRANT SELECT ON global.channel TO scott;
GRANT SELECT ON global.customer TO scott;
GRANT SELECT ON global.product TO scott;
GRANT SELECT ON global.time TO scott;

/* Grant privileges on the cube, dimension, and hierarchy views */
GRANT SELECT ON global.units_cube_view TO scott;
GRANT SELECT ON global.channel_view TO scott;
GRANT SELECT ON global.channel_primary_view TO scott;
GRANT SELECT ON global.customer_view TO scott;
GRANT SELECT ON global.customer_shipments_view TO scott;
GRANT SELECT ON global.customer_segments_view TO scott;
GRANT SELECT ON global.product_view TO scott;
GRANT SELECT ON global.product_primary_view TO scott;
GRANT SELECT ON global.time_view TO scott;
GRANT SELECT ON global.time_calendar_view TO scott;
GRANT SELECT ON global.time_fiscal_view TO scott;

Example 8-3 shows the SQL commands that give SCOTT the privileges to query the relational tables for the detail level data and to use query rewrite to obtain summary data from the Units cube.

Example 8-3 Privileges to Use Cube Materialized Views for Query Rewrite

/* Grant privileges on materialized views using query rewrite */
GRANT GLOBAL QUERY REWRITE TO scott;

/* Grant privileges on the relational source tables */
GRANT SELECT ON global.channel_dim TO scott;
GRANT SELECT ON global.customer_dim TO scott;
GRANT SELECT ON global.product_dim TO scott;
GRANT SELECT ON global.time_dim TO scott;
GRANT SELECT ON global.units_fact TO scott;

/* Grant privileges on the analytic workspace */
GRANT SELECT ON global.aw$global TO scott;

/* Grant privileges on the cube */
GRANT SELECT ON global.units_cube TO scott;

/* Grant privileges on the dimensions */
GRANT SELECT ON global.channel TO scott;
GRANT SELECT ON global.customer TO scott;
GRANT SELECT ON global.product TO scott;
GRANT SELECT ON global.time TO scott;

Example 8-4 shows the SQL commands that give SCOTT the privileges to modify and update all dimensional objects in GLOBAL using Analytic Workspace Manager.


Note:

The GRANT ALL commands encompass more privileges than those discussed in this chapter. Be sure to review the list of privileges before using GRANT ALL.

Example 8-4 Privileges to Modify and Refresh GLOBAL

/* Grant privilege to use Analytic Workspace Manager */
GRANT OLAP_USER TO scott;

/* Grant privileges on the analytic workspace */
GRANT ALL ON global.aw$global TO scott;

/* Grant privileges on the cubes */
GRANT ALL ON global.units_cube TO scott;
GRANT ALL ON global.price_cost_cube TO scott;

/* Grant privileges on the dimensions */
GRANT ALL ON global.channel TO scott;
GRANT ALL ON global.customer TO scott;
GRANT ALL ON global.product TO scott;
GRANT ALL ON global.time TO scott;

Using Analytic Workspace Manager to Set Object Security

Analytic Workspace Manager provides a graphical interface for setting object security. It also displays the SQL commands, so that you can cut-and-paste them into a script.

Setting Object Security on an Analytic Workspace

Take these steps to set object security on an analytic workspace in Analytic Workspace Manager:

  1. In the navigation tree, right-click the analytic workspace and select Set Analytic Workspace Object Security.

    The Set Analytic Workspace Object Security dialog box is displayed.

  2. Complete the dialog box, then click OK.

    Click Help for specific information about the choices.

  3. Grant privileges on one or more cubes and their dimensions.

    Privileges on the analytic workspace do not automatically extend to the cubes and dimensions contained in the analytic workspace.

Figure 8-1 shows the SELECT privilege on GLOBAL granted to PUBLIC.

Figure 8-1 Setting Object Security on GLOBAL

Set Analytic Workspace Object Security dialog box
Description of "Figure 8-1 Setting Object Security on GLOBAL"

Setting Object Security on Dimensions

Take these steps to set object security on dimensions in Analytic Workspace Manager:

  1. In the navigation tree, right-click any dimension and select Set Dimension Object Security.

    The Set Dimension Object Security dialog box is displayed.

  2. Complete the dialog box, then click OK.

    You can set privileges on all of the dimensions simultaneously. Click Help for specific information about the choices.

  3. Grant privileges on the analytic workspace and one or more cubes. Use SQL to grant privileges on the views.

Figure 8-2 shows the SELECT privilege on all dimensions granted to PUBLIC.

Figure 8-2 Setting Object Security on Dimensions

Set Dimension Object Security dialog box
Description of "Figure 8-2 Setting Object Security on Dimensions"

Setting Object Security on Cubes

Take these steps to set object security on cubes in Analytic Workspace Manager:

  1. In the navigation tree, right-click any cube and select Set Cube Object Security.

    The Set Cube Object Security dialog box is displayed.

  2. Complete the dialog box, then click OK.

    You can set privileges on all of the cubes simultaneously. Click Help for specific information about the choices.

  3. Grant privileges on the cube's dimensions and the analytic workspace. Use SQL to grant privileges on the views.

Creating Data Security Policies on Dimensions and Cubes

Data security policies enable you to grant users and roles privileges on a selection of dimension members. For example, you might restrict district sales managers to the data for just their own districts instead of all geographic areas. You can create a data security policy on dimensions, cubes, or both:

  • When you create a data security policy on a dimension, the policy extends to all cubes with that dimension. You do not need to re-create the policy for each cube.

  • When you create a data security policy on a cube, you select the members for each dimension of the cube. The policy only applies to that cube.

  • When you create data security policies on both dimensions and cubes, users have privileges on the most narrowly defined portion of the data, where the policies overlap.

Granting Data Privileges

You can apply a policy to one or more users, roles, and data security roles. A data security role is a group of users and database roles that you can manage in Analytic Workspace Manager just for use in security policies. You create data security roles and policies in Analytic Workspace Manager.

As soon as you create a data security policy, all other users are automatically denied access. Analytic Workspace Manager creates a default policy that grants all privileges to the owner. Otherwise, the owner is denied access also.


Note:

Do not delete the default policy. It grants you the privileges to access your own data.

Selecting Data By Criteria

When defining a data security policy, you can select specific dimension members or those that meet certain criteria based on the dimension hierarchy. By using criteria instead of hard-coding specific dimension members, the selection remains valid after a data refresh. You do not need to modify the selection after adding members. For example, a security policy that grants SELECT privileges to all Hardware products remains valid when old products are rolled off and new products are added to the PRODUCT dimension.


Note:

You must have the OLAP_XS_ADMIN role to manage data security policies in Analytic Workspace Manager.

To create a data security policy in Analytic Workspace Manager: 

  1. Expand the folder for a dimension or a cube.

  2. Right-click Data Security and choose Create Data Security Policy.

    The Create Data Security Policy dialog box is displayed.

  3. On the General tab, type a descriptive name in the Data Security Policy Name field.

  4. Click Add Users or Roles.

    The Add Users or Roles dialog box is displayed.

  5. Select the users, roles, and OLAP data security roles to use this policy. Then click OK to close the dialog box.

    The selected users and roles are now listed in the table on the General tab.

  6. Select the permissions you want to grant to each user or role.

  7. On the Member Selection tab, select the dimension members or conditions. For cubes, set the scope for each dimension.

  8. Click OK to save the data security policy.

    The data security policy appears in the navigation tree in the Data Security folder for the dimension.

  9. Grant these users and roles object privileges on the dimension or cube, and on the analytic workspace.

Figure 8-3 shows the Member Selection tab of the data security policy for PRODUCT. Users who have privileges on the PRODUCT dimension based on this policy have access to all Hardware products. They do not have access to Software products or Total Product.

Figure 8-3 Restricting Product to Hardware and Descendants

Create Data Security Policy dialog box
Description of "Figure 8-3 Restricting Product to Hardware and Descendants"


See Also:

Analytic Workspace Manager Help for information about creating data security roles.

PK__PK,AOEBPS/reports.htm Developing Reports and Dashboards

6 Developing Reports and Dashboards

You can use any SQL development tool or application to create reports and dashboards populated with data from OLAP cubes. This chapter shows the basic steps for working with the tools provided with Oracle Database: Oracle Business Intelligence Publisher (BI Publisher) and Oracle Application Express. You can try these tools, or you can apply the methods shown here to your favorite SQL tool.

This chapter contains the following topics:

Developing OLAP Applications

You can use any SQL query against a cube as the content for a report or dashboard. Both BI Publisher and Application Express contain a Query Builder, which you can use to develop queries against both relational and dimensional objects. You can also cut-and-paste queries from a SQL script or another source, which is the method used in this chapter.

If your goal is to create static reports and dashboards, then you do not need to read any further. You can start developing OLAP applications immediately using your favorite tool. This chapter explains how to create applications with dynamic content. It focuses on ways to leverage the unique capabilities of cubes and dimensions to create drillable reports and graphs using a single query. You will learn how to create two types of drillable interfaces:

  • Choice Lists: You can create a drop-down list for each dimension to drill on the dimensions in a report or dashboard.

  • Linked Dimension Columns: In Application Express, you can add links to the dimension columns of a crosstab to drill down to the bottom of a hierarchy, and use a Reset button to return to the top level.

These user interfaces set the values of bind variables in the WHERE clause of the source query. When a user changes the current selection in a choice list or clicks a link in a crosstab, that action dynamically changes the value of the variable. When the variable changes, so does the condition of the query and the contents of the report or dashboard.

When the variable sets the value of the PARENT column of the hierarchy views, users can drill on a parent to view its children.

Example 6-1 shows a basic SQL query against UNITS_CUBE_VIEW in the Global sample schema. The query selects the SALES measure and three calculated measures that use SALES as the basis for the calculations:

  • SALES_PP: Sales from the prior period.

  • SALES_CHG_PP: Difference in sales between the current period and the prior period.

  • SALES_PCTCHG_PP: Percent difference in sales between the current period and the prior period.

This query is used in the sample applications developed in this chapter. The PARENT columns for the Product, Customer, and Time dimensions support drilling in these applications. The CHANNEL dimension remains anchored at the TOTAL level.

Example 6-1 SQL Query Against the Sales Cube

SELECT p.long_description "Product",
     cu.long_description "Customer",
     t.long_description "Time",
     ROUND(f.sales) "Sales",
     ROUND(f.sales_pp) "Prior Period",
     ROUND(f.sales_chg_pp) "Change",
     ROUND(f.sales_pctchg_pp * 100) "Percent Change"
/* From dimension views and cube view */
FROM product_primary_view p,
     customer_shipments_view cu,
     time_calendar_view t,
     channel_primary_view ch,
     units_cube_view f
/* Use parent columns to implement drilling */
WHERE p.parent = 'TOTAL'
    AND cu.parent = 'TOTAL'
    AND t.parent = 'CY2006'
    AND ch.level_name = 'TOTAL'
/* Join dimension views to cube view */
    AND p.dim_key = f.product
    AND cu.dim_key = f.customer
    AND t.dim_key = f.time
    AND ch.dim_key = f.channel
ORDER BY product, customer, t.end_date;

Product         Customer        Time            Sales Prior Period     Change Percent Change
--------------- --------------- ---------- ---------- ------------ ---------- --------------
Hardware        North America   Q1.06        16002175     14493426    1508749             10
Hardware        North America   Q2.06        16032643     16002175      30469              0
Hardware        North America   Q3.06        15698208     16032643    -334436             -2
Hardware        North America   Q4.06        15958791     15698208     260583              2
Hardware        Asia Pacific    Q1.06        13416447     14273900    -857453             -6
Hardware        Asia Pacific    Q2.06        14306431     13416447     889984              7
                 .
                 .
                 .
Software/Other  Asia Pacific    Q4.06          652300       647019       5281              1
Software/Other  Europe          Q1.06          737523       634293     103230             16
Software/Other  Europe          Q2.06          678391       737523     -59132             -8
Software/Other  Europe          Q3.06          499008       678391    -179383            -26
Software/Other  Europe          Q4.06          710796       499008     211788             42
 
24 rows selected.

Developing a Report Using BI Publisher

BI Publisher is an efficient, scalable reporting solution for generating and delivering information through a variety of distribution methods. It reduces the high costs associated with the development and maintenance of business documents, while increasing the efficiency of reports management. BI Publisher generates reports in a variety of formats, including HTML, PDF, and Excel.

If you have not used BI Publisher, you can download the software, tutorials, and full documentation from the Oracle Technology Network at

http://www.oracle.com/technology/products/xml-publisher/index.html

Figure 6-0 shows a report in PDF format based on the query shown in Example 6-1. When generating a report for distribution, you can select any combination of Products, Customers, and Time Periods from the choice lists. The selection for this report is Hardware products, customers in Europe, and months in Q2-06. This chapter explains how you can create a report like this one using drillable dimensions.

Figure 6-1 Sales Report in BI Publisher

BI Publisher HTML Report
Description of "Figure 6-1 Sales Report in BI Publisher"

Creating an OLAP Report in BI Publisher

A report consists of a report entry, which you create in BI Publisher, and a layout template, which you create using an application such as Microsoft Word or Adobe Acrobat. You can organize your reports in folders.

BI Publisher is a middleware application and can derive data from multiple sources. These procedures assume that you can access one or more cubes from BI Publisher. If you cannot, contact your BI Publisher administrator about defining a data source.

To create a report entry: 

  1. Open a browser to the BI Publisher home page and log in.

  2. Click My Folders.

  3. Open an existing folder.

    or

    To create a folder:

    1. Click Create a New Folder.

    2. Enter a name for the folder in the text box, such as OLAP Reports.

    3. Click Create.

  4. Click the folder to open it.

  5. Create a report:

    1. Click Create a New Report.

    2. Enter a report name in the text box.

      This example creates a report named Global Sales.

    3. Click Create.

    The report appears in the folder, as shown in Figure 6-2.

Figure 6-2 Creating a Report in BI Publisher

BI Publisher Report Page
Description of "Figure 6-2 Creating a Report in BI Publisher"

To configure the report entry: 

  1. To define the contents of the report, click Edit.

    The Report Editor opens.

  2. For General Settings, enter a description and select a default data source.

    If the list does not include a connection to the database and schema containing your cubes, contact your BI Publisher administrator.

  3. Select Data Model, then click New.

    The Data Set page opens.

  4. Enter a name for the data set and enter a SQL query like the one shown in Example 6-1. Do not use a semicolon.

  5. Click Save.

  6. Click View.

    BI Publisher checks the report definition for errors. If there are none, then it generates the XML for the report.

Figure 6-3 shows the Report Editor with the Data Set page displayed.

Figure 6-3 Creating a Data Model in the BI Publisher Report Editor

BI Publisher Report Editor
Description of "Figure 6-3 Creating a Data Model in the BI Publisher Report Editor"

Creating a Template in Microsoft Word

BI Publisher does not contain formatting tools. Instead, it enables you to design a report using familiar desktop applications. This example uses Microsoft Word. A report template can contain:

  • Static text and graphics that you enter like any other Word document.

  • Dynamic fields such as the date and time or page numbers, which are processed by Word.

  • Codes that identify the XML tags for your data, which are processed by BI Publisher. When BI Publisher generates a report, it replaces the codes with the data identified by these tags.

You can format all parts of the report template in Word, selecting the fonts, text and background colors, table design, and so forth.

Example 6-2 shows the XML for a row of data returned by the sample query. The tags match the column names in the select list, except that underscores replace the spaces. The tags are Product, Customer, Time, Sales, Prior_Period, Change, and Percent_Change. XML tags are case-sensitive. You use the HTML tag names as the codes in the Word document.

Example 6-2 XML for a SQL Query

<ROW>
<Product>Hardware</Product>
<Customer>North America</Customer>
<Time>Q1.06</Time>
<Sales>16002175</Sales>
<Prior_Period>14493426</Prior_Period>
<Change>1508749</Change>
<Percent_Change>10</Percent_Change>
</ROW>

Figure 6-4 shows the Word document that is used as the template for the sample report. It contains these elements:

  • A table used to format the banner, which consists of a graphic, the company name, and a horizontal line. (Static)

  • The name of the report. (Static)

  • A table for the query results that contains two rows:

    • A heading row. (Static)

    • A body row containing text form fields, which identify the XML tags and the appropriate formatting for the data. BI Publisher replaces these fields with data from the query. Note that the first and last columns contain two fields. The first and last fields identify the range of repeating columns. (Dynamic)

  • A date field. Word updates this field with the current date. (Dynamic)

This example uses a blank Word template, but you could use a template with, for example, the banner already defined.

Figure 6-4 Sample Report Template Created in Word for BI Publisher

Sample BI Publisher report template
Description of "Figure 6-4 Sample Report Template Created in Word for BI Publisher "

The following procedure defines the template manually. Alternatively, you can use a Word plugin called Oracle BI Publisher Desktop. On the BI Publisher My Folders page, click Template Builder to download the plugin.

To create a BI Publisher template in Word: 

  1. Open a new document in Word.

  2. Compose the page according to your preferences.

  3. For the query results, create a table.

    The table shown in Figure 6-4 is very simple. You can use much more elaborate formatting if you want, including nested columns and tables.

  4. From the View menu, choose Toolbars, then Forms.

    The Forms toolbar opens.

  5. Enter a field in the body row of each column:

    1. Position the cursor in the appropriate cell.

    2. On the Forms toolbar, click the Text Form Field icon.

      The Text Form Field Options dialog box opens.

    3. Choose an appropriate Type, generally Regular Text for dimension labels and Number for measures.

    4. Enter a default value and a format.

    5. Click Add Help Text.

      The Form Field Help Text dialog box opens.

    6. Type the appropriate XML tag in the Type Your Own box, using the format <?tag?>.

      Enter the tag name exactly as it appears in the XML report. For example, enter <?Product?> for the XML tag <Product>.

    7. Click OK to close the Form Field Help dialog box.

    8. Click OK to close the Text Form Field Options dialog box.

  6. Insert an additional form field at the beginning of the first column:

    1. In the Text Form Field Options dialog box, enter any default value, such as For-Each.

    2. In the Form Field Help Text dialog box, enter this text:

      <?for-each:ROW?>
      
  7. Insert an additional form field at the end of the last column:

    1. In the Text Form Field Options dialog box, enter any default value, such as End.

    2. In the Form Field Help Text dialog box, enter this text:

      <?end for-each?>
      
  8. Make any additional formatting changes in Word, such as the appropriate justification of the table headings and data columns.

  9. Save the document as an RTF file.

Generating a Formatted Report

After creating a report template in Word, you can upload it to BI Publisher and associate it with your report definition. Then you can generate reports in a variety of formats.

To create a report layout: 

  1. Open the report editor in BI Publisher.

  2. Select Layouts.

    The Create Layouts page opens.

  3. Click New.

    The Layout page opens.

  4. Enter a name and select RTF for the template type.

  5. Select Layouts again, and select the layout as the default template for this report.

  6. Under Manage Template Files, click Browse. Select the RTF file you created.

  7. Click Upload.

    The uploaded file is listed under Manage Template Files. Whenever you change the file in Word, upload it again. Otherwise, BI Publisher continues to use its copy of the previous version.

  8. Click Save.

  9. Click View.

    The report is displayed.

  10. To change the format, select a format from the list and click View.

    To see the XML, select Data.

Figure 6-5 shows the report in HTML format.

Figure 6-5 BI Publisher Report Displayed in HTML Format

Global Enterprises report
Description of "Figure 6-5 BI Publisher Report Displayed in HTML Format"

Adding Dimension Choice Lists

You can add choice lists for the dimensions to a report. When generating a report, you can change the selection of data without changing the query. To add choice lists, take these steps:

  • Create one or more Lists of Values (LOV) to be displayed in the menu.

  • Create menus for displaying the LOVs.

  • Edit the query to use the bind variables created for the menus.

Creating a List of Values

For an LOV, use a SQL query that selects the dimension keys to display. Include the LONG_DESCRIPTION and DIM_KEY columns from the hierarchy view. This example creates a list for the Product Primary hierarchy:

SELECT long_description, dim_key
     FROM product_primary_view
     WHERE parent = 'TOTAL'
     OR dim_key = 'TOTAL'
     ORDER BY level_name, long_description

LONG_DESCRIPTION     DIM_KEY
-------------------- ------------
Hardware             HRD
Software/Other       SFT
Total Product        TOTAL

To create a list of values: 

  1. Open the Report Editor in BI Publisher.

  2. Select List of Values, then click New.

    The List of Values page opens.

  3. Define the list:

    1. Enter a name for the list, such as Product_LOV.

    2. For the type, select SQL Query.

    3. Enter a query against the dimension hierarchy view, as shown previously.

  4. Click Save.

Repeat these steps for the other dimensions. This example uses lists for Product, Customer, and Time.

Creating a Menu

In BI Publisher, a menu is a type of parameter. Creating a parameter automatically creates a bind variable that you can use in the query for the report.

To create a menu: 

  1. Select Parameters, then click New.

    The Parameter page opens.

  2. Define the parameter:

    1. For the Identifier, enter a name such as product.

      This is the case-sensitive name of the bind variable that you will use in the query.

    2. Select an appropriate data type, typically String.

    3. For the Default Value, enter the dimension key used in the WHERE clause of the LOV query.

      The menu initially displays this key.

    4. For the Parameter Type, select Menu.

    5. Select the appropriate List of Values.

    6. Clear all options.

  3. Click Save.

Repeat these steps for the other dimensions. This example creates menus for Product, Customer, and Time.

Editing the Query

To activate the menus, you change the WHERE clause in the query for the report to use the bind variables. The value of a bind variable is the current menu choice.

This is the format for the conditions of the WHERE clause:

parent_column = :bind_variable

In this example, the WHERE clause uses the bind variables for Time, Product, and Customer:

WHERE  p.parent  = :product
   AND cu.parent = :customer
   AND t.parent  = :time
   AND ch.level_name = 'TOTAL'

To edit the query: 

  1. Under Data Model, select the data set you defined for this report.

    The Data Set page opens.

  2. In the SQL Query box, edit the WHERE clause to use the bind variables created by the parameter definitions.

  3. Click Save.

Figure 6-6 shows a report in HTML format displayed in BI Publisher. The choice lists for Product, Customer, and Time appear across the top. The crosstab lists the months in Q3.06, the Hardware products, and the countries in Europe. To see a different selection of data, you choose a Time Period, Product, and Customer from the menus, then click View. This report was generated by the same report entry, using the same query, as the one shown in Figure 6-1.

You can continue working on this report, adding charts and other tables.

Figure 6-6 Sales Report With Choice Lists in BI Publisher

Sales report with dimension lists
Description of "Figure 6-6 Sales Report With Choice Lists in BI Publisher"

Developing a Dashboard Using Application Express

Oracle Application Express is a rapid Web application development tool for Oracle Database. Application Express offers built-in features such as user interface themes, navigational controls, form handlers, and flexible reports, which simplify the development process.

Chapter 1 shows a sophisticated dashboard that extracts analytic data from cubes and presents it in a variety of graphs and reports. You can easily create dashboards from your cubes that display the rich analytical content generated by Oracle OLAP.

If you have not used Application Express, you can download the software, tutorials, and full documentation from the Oracle Technology Network at

http://www.oracle.com/technology/products/database/application_express

Figure 6-7 shows a crosstab with display lists for Product and Customer, and links in all three dimension columns. Choosing a different Product or Customer changes the related column to show the children for the selected key. Clicking a dimension key in any column displays its children. The Reset button refreshes the page with the initial selection of data.

Figure 6-7 Drillable Dimensions in Application Express

Sales Report in Application Express
Description of "Figure 6-7 Drillable Dimensions in Application Express"

Creating an OLAP Application in Application Express

In Application Express, the Administrator creates a workspace in which you can develop your Web applications. An application consists of one or more HTML pages, a page consists of regions that identify specific locations on the page, and a region contains a report (crosstab), a chart, or some other item.

Application Express runs in Oracle Database. If your dimensional objects are stored in a different database, then you must use a database link in your queries. The following procedure assumes that you have a workspace and access to at least one cube. It creates an application with one page containing a crosstab.

To create a Web page from a SQL query: 

  1. Open a browser to the Application Express home page and log in.

  2. Click the Application Builder icon.

    The Application Builder opens.

  3. Click Create.

    The Create Application wizard opens.

  4. Select Create Application, then Next.

  5. On the Name page, enter a title for the application such as Global Dashboard and select From Scratch.

  6. On the Pages page, select the Report page type, then define the page:

    1. For Page Source, select SQL Query.

    2. For Title, enter a name such as Sales Analysis.

      This title is displayed on the page.

    3. For Query, enter a SQL SELECT statement for your cube, like the one shown in Example 6-1. Do not include an ORDER BY clause or a semicolon.

    4. Click Add Page.

      The page definition appears in the Create Application Box.

  7. Click Next, then complete the Create Application wizard according to your own preferences.

    This example was created with no tabs, no shared components, no authentication, and Theme 15 (Light Blue).

  8. On the Confirm page, click Create.

  9. On the Application Builder home page, click the Run Application icon.


Tip:

To continue working on this page, click the Edit Page 1 link at the bottom of the display.

Figure 6-8 shows the results of the query displayed in Application Express. Several items are automatically added to the page: breadcrumbs, Search box, Display list, Go button, Reset button, and Spread Sheet link. This application only needs the Reset button, so you can delete the other items if you want.

Figure 6-8 Basic Sales Report in Application Express

Application Express Sales Report
Description of "Figure 6-8 Basic Sales Report in Application Express"

Adding Dimension Choice Lists

Like BI Publisher, Application Express enables you to drill on the dimensions by adding choice lists of dimension keys. The dashboard user can choose a particular item from the list and dynamically change the selection of data displayed in one or more graphics and crosstabs on the page. To implement a choice list, take these steps:

  • Create a region on the page to display the list.

  • Create DSa list of values (LOV).

  • Create a list item with a bind variable to display the LOV.

  • Create an unconditional branch for the list.

  • Edit the query to use the bind variable.

The Page Definition is where you can create and edit pages, including adding and modifying graphical item. The items are organized in three columns: Page Rendering, Page Processing, and Shared Components.

To open the Page Definition: 

  • After running the application, click the Edit Page link at the bottom of the page.

    or

  • On the Application home page, click the icon for the page where the report is defined.

Figure 6-9 shows an area of the Page Definition.

Figure 6-9 Application Express Page Definition

Application Express Page Definition
Description of "Figure 6-9 Application Express Page Definition"

Creating a Region

You can create the choice list in a plain HTML area at the top of the page.

To create an empty HTML region: 

  1. On the Page Definition under Regions, click the Create icon.

    The Create Region wizard opens.

  2. On the Region pages, select HTML, click Next, then select HTML again.

  3. On the Display Attributes page, enter a descriptive title and select an appropriate template and location on the page for the lists.

    For this example, the name is lov_region, the template is No Template, and the location is Page Template Body (1 items below template content). The name can be displayed on the rendered page, but it is hidden in this example.

  4. Click Create Region.

    The region appears on the Page Definition under Regions.

Creating a List of Values

For a list of values, use a SQL query like the one shown here. Include the LONG_DESCRIPTION and DIM_KEY columns from the hierarchy view. This query creates a list for the Customer Shipments hierarchy:

SELECT long_description, dim_key
     FROM customer_shipments_view
     WHERE parent = 'TOTAL' 
     OR dim_key= 'TOTAL'
     ORDER BY level_name, long_description;
 
LONG_DESCRIPTION     DIM_KEY
-------------------- ----------
Asia Pacific         APAC
Europe               EMEA
North America        AMER
Total Customer       TOTAL

To create a List of Values: 

  1. On the Page Definition under List of Values, click the Create icon.

    The Create List of Values wizard opens.

  2. On the Source page, select From Scratch.

  3. On the Name and Type page, enter a descriptive name and select Dynamic.

    This example uses the name CUSTOMER_LOV.

  4. On the Query page, enter a query like the one shown previously. Do not use a semicolon.

  5. Click Create List of Values.

    The LOV appears in the Page Definition under List of Values.

For additional LOVs, repeat these steps. This example creates LOVs for the Product and Customer dimensions.

Creating the Choice List

For a choice list, you create a list item that displays the LOV.

To create a list item: 

  1. On the Page Definition under Items, click the Create icon.

    The Create Item wizard opens.

  2. On the Item Type page, select Select List.

  3. For Control Type, select Select List with Submit.

  4. On the Display Position and Name page:

    • Enter a name that identifies the dimension, such as P1_CUSTOMER for the name of the Customer bind variable. P1 is the page number, and CUSTOMER identifies the Customer dimension.

    • Choose the new HTML region for the location of the list.

  5. On the List of Values page, set these values:

    • Named LOV to the List Of Values created for this dimension, such as CUSTOMER_LOV.

    • Display Null Option to No.

  6. Select the Item attributes according to your own preferences.

  7. On the Source page, enter the name of the top dimension key for the default value.

    For the Global Customer dimension, the value is TOTAL.

  8. Click Create Item.

Repeat these steps for other lists. This example creates lists for the Product and Customer dimensions.

To activate the list item: 

  1. On the Page Definition under Branches, click the Create icon.

    The Edit Branch wizard opens.

  2. On the Point and Type page, accept the default settings.

  3. On the Target page:

    • Set Target to Page in This Application.

    • Set Page to the page with the list item, which is 1 in this example.

    • Select Reset Pagination For This Page.

  4. On the Branch Conditions page, accept the default settings to create an unconditional branch.

  5. Click Apply Changes.

    The Edit Branch page closes, and you return to the Page Definition. The unconditional branch is listed under Branches.

Editing the Query

This is the format for the dynamic conditions in the WHERE clause:

parent_column = NVL(:bind_variable, 'top dim_key')

The NVL function substitutes the name of the top dimension key in the hierarchy for null values. The dimension keys at the top have no parent key.

To edit the query: 

  1. Open the Page Definition.

  2. Under Regions, click the Edit Region link. In this example, the region is named Sales Report.

    The Edit Region page opens.

  3. Under Source, modify the query:

    • Change the WHERE clause to use the bind variables.

    • Delete the outer SELECT added by Application Express.

  4. Click Apply Changes.

For this example, the WHERE clause now looks like this:

WHERE p.parent = NVL(:P1_PRODUCT, 'TOTAL')
    AND cu.parent = NVL(:P1_CUSTOMER, 'TOTAL')
    AND t.parent = 'CY2006'
    AND ch.level_name = 'TOTAL'

Figure 6-10 shows the modified page with choice lists for Product and Customer.

Figure 6-10 Dashboard With Choice Lists for Drilling

Dashboard with choice lists
Description of "Figure 6-10 Dashboard With Choice Lists for Drilling"

Drilling on DImension Columns

You can enable users to drill down from the top of a hierarchy to the detail level using a single query. To implement drilling in Application Express, take these steps:

  • Create hidden items with bind variables.

  • Edit the query to use the bind variables.

  • Add links to the dimension columns of the crosstab.

This example adds drilling to all displayed dimensions.

Creating Hidden Items

You can create various types of items in Application Express that provide bind variables. They store the session state for a particular element, in this case, the current selection of a parent dimension key.

Each dimension that supports drilling needs a bind variable. In this example, Product and Customer have bind variables created with the list items. Time is the only displayed dimension in the report that does not have a bind variable. Because links in the Time dimension column provide the user interface for changing the session state, Time does not need any other graphical user interface. A hidden item serves the purpose.

To create a hidden item: 

  1. Open the Page Definition.

  2. Under Items, click the Create icon.

    The Create Item wizard opens.

  3. On the Item Type page, select Hidden.

  4. On the Display Position and Name page:

    • Enter a name that identifies the dimension, such as P1_TIME for the name of the Time bind variable.

    • Choose the region where the report is defined.

  5. On the Source page, enter the dimension key at the top of the hierarchy.

    TOTAL is the top of all hierarchies in the Global schema. For this example, Time is set to CY2006 to restrict the selection to one year.

  6. Click Create Item.

  7. Repeat these steps for any other dimensions that support drilling only on the column links.

    For this example, a hidden item is defined for Time.

Editing the Query

To add column links to a report, you must change two areas of the SELECT statement:

  • Select list: Application Express manages only those columns that appear in the select list. You can choose to display or hide the columns. For defining the column links, add the DIM_KEY and PARENT columns in the hierarchy views to the query select list.

  • WHERE clause: Add the bind variables for the hidden items like you did for the choice lists in "Editing the Query".

Example 6-3 shows the modified sample query.

Example 6-3 Revised Query for Column Links in Application Express

SELECT p.long_description "Product",
     cu.long_description "Customer",
     t.long_description "Time",
     ROUND(f.sales) "Sales",
     ROUND(f.sales_pp) "Prior Period",
     ROUND(f.sales_chg_pp) "Change",
     ROUND(f.sales_pctchg_pp * 100) "Percent Change",
/* Add DIM_KEY and PARENT columns for column links */
     p.dim_key product_key,
     p.parent product_parent,
     cu.dim_key customer_key,
     cu.parent customer_parent,
     t.dim_key time_key,
     t.parent time_parent
/* From dimension views and cube view */
FROM product_primary_view p,
     customer_shipments_view cu,
     time_calendar_view t,
     channel_primary_view ch,
     units_cube_view f
/* Use parent columns and bind variables for drilling */
WHERE p.parent = NVL(:P1_PRODUCT, 'TOTAL')
    AND cu.parent = NVL(:P1_CUSTOMER, 'TOTAL')
    AND t.parent = NVL(:P1_TIME, 'CY2006')
    AND ch.level_name = 'TOTAL'
/* Join dimension views to cube view */
    AND p.dim_key = f.product
    AND cu.dim_key = f.customer
    AND t.dim_key = f.time
    AND ch.dim_key = f.channel

Adding Links to the Dimension Columns

When a dashboard user clicks a linked dimension key in the crosstab, the value of the bind variable changes, causing the crosstab to change also. After drilling down a hierarchy, the user can restore the display to its original selection of data by pressing the Reset button. To implement these column links, you must add the column links and activate the Reset button.

To add a link to a dimension column: 

  1. Open the Page Definition.

  2. Under Regions, click the Report link.

    The Report Attributes page opens.

  3. Under Column Attributes, modify the report display:

    • Clear the Show check boxes for columns that you want to hide, such as the DIM_KEY and PARENT columns.

    • Set the Sort and Sort Sequence check boxes for appropriate sorting for the report. In this example, the sort order is Product (1), Customer (2), and Time (3).

  4. Click the Edit icon for a dimension column.

    The Column Attributes page opens.

  5. Under Column Link, define the link as follows:

    • Link Text: Choose the dimension name.

    • Page: Enter the page number.

    • Name: List the dimensions in the order they appear in the report. Item is the name of the bind variable. Value is the DIM_KEY column for the dimension being defined or the PARENT column for the other dimensions.

    Figure 6-11 shows the link definition for the Time dimension.

  6. Click Apply Changes.

    The Column Attributes page closes, and you return to the Report Attributes page.

  7. Define links on the other dimension columns.

  8. Click Apply Changes.

    The Report Attributes page closes, and you return to the Page Definition.

Figure 6-11 Definition of the Time Link

Column Link Definition
Description of "Figure 6-11 Definition of the Time Link"

To activate the Reset button: 

  1. Open the Page Definition.

  2. Under Branches, click the Go to Page conditional link.

    The Reset button was created on the page automatically along with its conditional branch. The Edit Branch page opens.

  3. Under Action, set Clear Cache to the page number (in this example, 1).

  4. Under Conditions, set When Button Pressed to RESET.

  5. Click Apply Changes.

    The Edit Branch page closes, and you return to the Page Definition.

  6. Click Run to display the page.

Figure 6-12 shows the finished page displaying months in Q3.06. You can continue working on this application, adding more reports and charts to the page. For the SQL queries providing data to those reports and charts, you can reuse the same bind variables for the dimensions.

Figure 6-12 Sales Analysis Report With Column Links in Application Express

Dimension List in Application Express
Description of "Figure 6-12 Sales Analysis Report With Column Links in Application Express"

PK8ʶPK ,Aoa,mimetypePK,Ax?zB=:iTunesMetadata.plistPK,AYuMETA-INF/container.xmlPK,A-IHOEBPS/aggregate.htmPK,A[pTO*OOEBPS/cover.htmPK,A OEBPS/img/cube_script.gifPK,ARGG+OEBPS/img/lang_gen.gifPK,A BsOEBPS/img/cube_log.gifPK,A,,OEBPS/img/dml_function.gifPK,Ato1$OEBPS/img/agg_sum.gifPK,Au=&8&5OEBPS/img/agg_rules_adv.gifPK,AMNIn\OEBPS/img/meas_folder.gifPK,A!3GbBbwOEBPS/img/appexp_pie.gifPK,ALLOEBPS/img/awm_mod.gifPK,AG3'F"F&OEBPS/img/calc_gen.gifPK,A_mOEBPS/img/maxfirst.gifPK,An&[ V EOEBPS/img/cube_precompute.gifPK,Aw~d?:OEBPS/img/product_dim.gifPK,A ojqOEBPS/img/dml_express.gifPK,AP8p0k0'OEBPS/img/prodattr_gen.gifPK,Ai66OEBPS/img/cube_rules.gifPK,AAh? OEBPS/img/meas_gen.gifPK,A:~C""/ OEBPS/img/maintwiz_opt.gifPK,Ayۊ,,R OEBPS/img/prod_hierview.gifPK,A 'R"R OEBPS/img/maptbl_dim.gifPK,ARijdj OEBPS/img/bipub_report2.gifPK,AUco"< OEBPS/img/bipub_report1.gifPK,AnZ:U: OEBPS/img/apex_report.gifPK,A6~7 OEBPS/img/agg_wsum.gifPK,A1$E@W OEBPS/img/agg_haverage.gifPK,ASbA<Ui OEBPS/img/agg_average.gifPK,A*#--z OEBPS/img/maint_script.gifPK,Aú+ OEBPS/img/calc_qualify.gifPK,A_ôPPy OEBPS/img/bipub_newrep.gifPK,Am59U4UH OEBPS/img/prod_data.gifPK,A7R.5)5c OEBPS/img/apex_report3.gifPK,AVo< OEBPS/img/add_db.gifPK,ATQ OEBPS/img/part_advisor.gifPK,A|p)j$jH OEBPS/img/awm_open.gifPK,AX|#_U% OEBPS/img/appexp_hbar.gifPK,AJ//*/[ OEBPS/img/apex_report4.gifPK,A<< OEBPS/img/hardware_select.gifPK,AVP=181OEBPS/img/bipub_template.gifPK,A"EOEBPS/img/calcs_measures.gifPK,AY6,,LOEBPS/img/partition.gifPK,A/fJI&D&yOEBPS/img/calcs_lag.gifPK,A  JOEBPS/img/calc_index.gifPK,A1aTOOEBPS/img/classlevel_gen.gifPK,AZ3]]@OEBPS/img/bipub_html.gifPK,A*'OEBPS/img/logicalm.gifPK,ARz5+=AOEBPS/img/appexp_xtab.gifPK,A-1(1OEBPS/img/set_privs_dim.gifPK,Aـ<7/ OEBPS/img/proddim_gen.gifPK,Ax[V"OEBPS/img/maintwiz_obj.gifPK,ARQ;L;@OEBPS/img/apex_report1.gifPK,AK. .!|OEBPS/img/map_cube.gifPK,A$W,vOEBPS/img/appexp_dash.gifPK,Aĵ!!OEBPS/img/apex_prodlink.gifPK,AR$$OEBPS/img/cube_view.gifPK,A90`__+OEBPS/img/meas_view.gifPK,A[.00*hOEBPS/img/set_privs_aw.gifPK,Ad2OEBPS/img/sumfirst.gifPK,AlyyOEBPS/img/apex_pagedef.gifPK,AfD+B+=+W)OEBPS/img/prodhier_gen.gifPK,AP}ZZTOEBPS/img/mv.gifPK,A淪61a OEBPS/img_text/logicalm.htmPK,AR} OEBPS/img_text/set_privs_aw.htmPK,APC3.JOEBPS/img_text/appexp_dash.htmPK,A{OEBPS/img_text/meas_folder.htmPK,An4vOEBPS/img_text/cube_script.htmPK,AۑOEBPS/img_text/calc_gen.htmPK,AXSy!OEBPS/img_text/apex_pagedef.htmPK,AN!%OEBPS/img_text/bipub_template.htmPK,A4j 'OEBPS/img_text/prod_hierview.htmPK,A3m-OEBPS/img_text/appexp_hbar.htmPK,A_0OEBPS/img_text/prodattr_gen.htmPK,AH4OEBPS/img_text/lang_gen.htmPK,A:~9OEBPS/img_text/bipub_html.htmPK,Ar;6=OEBPS/img_text/apex_report3.htmPK,A;;{vRAOEBPS/img_text/mv.htmPK,AՋvEOEBPS/img_text/dml_express.htmPK,Ar_HOEBPS/img_text/maptbl_dim.htmPK,ADRD.LOEBPS/img_text/maint_script.htmPK,A$*3"OOEBPS/img_text/cube_precompute.htmPK,A ROEBPS/img_text/apex_prodlink.htmPK,AXyVOEBPS/img_text/maintwiz_opt.htmPK,AZYOEBPS/img_text/prodhier_gen.htmPK,Aƛ{v]OEBPS/img_text/map_cube.htmPK,A³BVdcOEBPS/img_text/dim_log.htmPK,AĢokOEBPS/img_text/appexp_pie.htmPK,A߉;ZU\nOEBPS/img_text/sumfirst.htmPK,Apk qOEBPS/img_text/bipub_report2.htmPK,A6Cy vOEBPS/img_text/bipub_report1.htmPK,ASZUzOEBPS/img_text/bipub_newrep.htmPK,AZzO}OEBPS/img_text/dml_function.htmPK,A"OEBPS/img_text/cube_view.htmPK,At^*%!OEBPS/img_text/calcs_measures.htmPK,A xOEBPS/img_text/awm_open.htmPK,A^OEBPS/img_text/agg_average.htmPK,A@CRMxOEBPS/img_text/apex_report.htmPK,AZC>OEBPS/img_text/apex_report4.htmPK,Ac=@;OEBPS/img_text/maintwiz_obj.htmPK,AVH(`[3OEBPS/img_text/part_advisor.htmPK,AYOEBPS/shortcuts.htmPK,Ad5)` [ OEBPS/toc.ncxPK,A_$OEBPS/calculations.htmPK,A*ZQ\L\~OEBPS/content.opfPK,A_ OEBPS/dcommon/prodbig.gifPK,AY@ cOEBPS/dcommon/doclib.gifPK,A'-ed`d OEBPS/dcommon/oracle-logo.jpgPK,AhOEBPS/dcommon/contbig.gifPK,ASOEBPS/dcommon/darbbook.cssPK,AMά""!OEBPS/dcommon/O_signature_clr.JPGPK,APz ˮOEBPS/dcommon/feedbck2.gifPK,A-#OEBPS/dcommon/feedback.gifPK,Aː58OEBPS/dcommon/booklist.gifPK,AN61OEBPS/dcommon/cpyr.htmPK,A!:3.OEBPS/dcommon/masterix.gifPK,AeӺ1,OEBPS/dcommon/doccd.cssPK,A7 OEBPS/dcommon/larrow.gifPK,A#-OEBPS/dcommon/indxicon.gifPK,AS'"OEBPS/dcommon/leftnav.gifPK,Ahu,OEBPS/dcommon/uarrow.gifPK,Al-OJ!OEBPS/dcommon/oracle.gifPK,A(OEBPS/dcommon/index.gifPK,AGC OEBPS/dcommon/bookbig.gifPK,AJV^OEBPS/dcommon/rarrow.gifPK,A枰pk7OEBPS/dcommon/mix.gifPK,Ao"nR M OEBPS/dcommon/doccd_epub.jsPK,Av I OEBPS/dcommon/toc.gifPK,A r~$OEBPS/dcommon/topnav.gifPK,A1FA<OEBPS/dcommon/prodicon.gifPK,A3( # OEBPS/dcommon/bp_layout.cssPK,Ax[?:;OEBPS/dcommon/bookicon.gifPK,Ap*c^OEBPS/dcommon/conticon.gifPK,AʍmOEBPS/dcommon/blafdoc.cssPK,A+&l/OEBPS/dcommon/rightnav.gifPK,Aje880OEBPS/dcommon/oracle-small.JPGPK,Aއ{&! jOEBPS/dcommon/help.gifPK,AOSXKSKkOEBPS/global.htmPK,A7RXMX OEBPS/toc.htmPK,A__OEBPS/security.htmPK,A8ʶoOEBPS/reports.htmPK14