PK PFJoa,mimetypeapplication/epub+zipPKPFJ OEBPS/toc.ncxG Oracle® OLAP Customizing Analytic Workspace Manager, 11g Release 2 (11.2) Cover Title and Copyright Information Contents List of Examples List of Figures List of Tables Preface 1 Customizing With XML Documents 2 Introducing Analytic Workspace Manager Plug-ins 3 Examples of Analytic Workspace Manager Plug-ins Index Copyright PKjL G PKPFJOEBPS/olawxml.htm Customizing With XML Documents

1 Customizing With XML Documents

Analytic Workspace Manager provides numerous SQL reports so that you can query the Oracle Database data dictionary and system tables without having to open another SQL interface. It also provides an extensive list of templates for generating calculated measures. You can supplement both of these features by adding custom SQL reports and calculation templates.

To define these customizations, you create XML documents. For an introduction to XML, refer to a source such as the W3Schools XML tutorial at http://www.w3schools.com. Use an XML-enabled editor or browser to validate the syntax of your XML documents.

This chapter contains the following topics:

Describing SQL Reports

You can add reports to the Analytic Workspace Manager navigation tree that appear along with the other built-in reports. You provide a name for the report and a SQL SELECT command. You can optionally modify the report contents at run-time and organize them into folders.

Creating an XML Document for SQL Reports

  1. Develop a SQL query that returns the information to make available in Analytic Workspace Manager.

  2. Create a text file named awmtree.xml in the directory with the Analytic Workspace Manager executable, typically Oracle_home/olap/awm.

  3. Begin the file with an XML declaration like this one:

    <?xml version="1.0" encoding="utf-8"?>
    

    Specify the appropriate encoding for your site.

  4. Enter the XML for the template, as described in "Reference: Elements for SQL Reports".

  5. For the sql attribute of the <AWMNode> element, enter the SELECT command that you developed in Step 1. You can replace values in a WHERE clause with bind variables from parent <AWMNode> elements, as described in "Using Bind Variables to Restrict the Report Contents".

  6. Refresh the navigation tree. The new reports appear at the end of the tree.

    If the new reports do not appear, then look for syntax errors in the XML.

Example of a Simple Report

Figure 1-1 shows a new report named My User Views in the Analytic Workspace Manager navigation tree. The report displays the results of this query: SELECT view_name FROM user_views.

Figure 1-1 Displaying a Report

SQL report

The XML document in Example 1-1 defines the My User Views report. The document contains two elements: <AWMTree> and <AWMNode>. <AWMTree> is the root element and identifies this document as containing XML that defines a report for Analytic Workspace Manager. The document can have one or more <AWMNode> elements. In this example, a single <AWMNode> element defines the My User Views report.

Among the attributes that the <AWMNode> element can have are name and sql. Example 1-1 uses name to identify the report as My User Views, and sql to specify a SELECT statement that executes when you select the report in the tree.

Example 1-1 Creating the My User Views Report

<?xml version="1.0" encoding="utf-8" ?>
<AWMTree>
   <AWMNode name="My User Views" sql="SELECT view_name FROM user_views"/>
</AWMTree>

Creating Report Folders

Folders provide an easy way to organize your reports. A folder is simply an <AWMNode> element without a SQL statement, and it is the parent of other <AWMNode> elements. You can nest <AWMNode> elements as deeply as you want.

Figure 1-2 shows a folder named My SQL Reports. It contains two reports, My User Tables and My User Views.

Figure 1-2 Organizing Reports in Folders

SQL report folder

The XML document in Example 1-2 shows that the <AWMNode> elements defining the two reports are the children of the <AWMNode> element that defines the My SQL Reports folder.

Example 1-2 Creating the My SQL Reports Folder

<?xml version="1.0" encoding="utf-8" ?>
<AWMTree>
   <AWMNode name="My SQL Reports">
      <AWMNode name="My User Tables" sql="SELECT table_name FROM user_tables"/>
      <AWMNode name="My User Views" sql="SELECT view_name FROM user_views"/>
   </AWMNode>
</AWMTree>

Using Bind Variables to Restrict the Report Contents

Bind variables restrict the contents of a report based on your run-time selection from a list of values in the navigation tree. Figure 1-3 shows the list of views returned by the My User Views report, which is now displayed in the navigation tree instead of in the property inspector. The property inspector displays a report for the particular view selected in the tree.

The most deeply nested <AWMNode> element (the "leaf" element) is displayed in a grid in the property inspector and can return multiple columns. The parent elements are displayed in the navigation tree and either return no columns (that is, a folder) or one column, as shown here.

Figure 1-3 Modifying the Content of a Report

SQL report using a bind variable

The type parameter of an <AWMNode> element stores the run-time selection. By referencing the name of the type parameter in a nested <AWMNode> element, you pass the value into that SELECT statement. The XML document in Example 1-2 shows an <AWMNode> element nested in the My User Views <AWMNode>. The nested <AWMNode> uses the value of the type element from the parent <AWMNode> element as a bind variable. You reference a bind variable by putting it in braces {}, as in {view} in the example.

Example 1-3 Passing the Name of a View to a SELECT Statement

<?xml version="1.0" encoding="utf-8" ?>
<AWMTree>
   <AWMNode name="My SQL Reports">
      <AWMNode 
         name="My User Tables" 
         sql="select table_name from user_tables"/>
      <AWMNode 
         name="My User Views" 
         type="view" 
         sql="select view_name from user_views">
         <AWMNode sql="SELECT * FROM user_tab_columns WHERE table_name = {view}"/>
      </AWMNode>
   </AWMNode>  
</AWMTree>

Creating Reports in Object Folders

The awmtree.xml document defines reports that appear in the navigation tree under a database connection, after the Reports folder. You can also define reports that appear in the folders for all schemas, analytic workspaces, cubes, or dimensions. The reports must be in XML documents that have the following names:

  • schema.xml, for reports that appear in all schema folders.

  • aw.xml, for reports that appear in all analytic workspace folders.

  • dimension.xml, for reports that appear in all dimension folders.

  • cube.xml, for reports that appear in all cube folders.

These files must be in a JAR file in the plug-in directory.

To create reports in object folders: 

  1. Open Analytic Workspace Manager and select Configuration from the Tools menu, as shown in Figure 2-1. The Configuration dialog box appears.

  2. Select Enable plugins and enter the path to a plug-in directory, if these parameters are not set already, as shown in Figure 2-2.

  3. Click OK, and close Analytic Workspace Manager.

  4. Create one or more XML document files.

  5. In the plug-in directory, create a JAR file containing the XML files and any icons referenced by them. You can create one JAR file for all of them or create individual JAR files.

  6. Open Analytic Workspace Manager and expand the navigation tree to see the reports.

Figure 1-4 shows a report folder named My Tables described in a schema.xml document. It uses a custom icon (red button) in the navigation tree. The My Tables folder appears in the GLOBAL schema folder.

Figure 1-4 Reports in the GLOBAL Schema Folder

Description of Figure 1-4 follows

The schema.xml document in Example 1-4 has an <AWMNode> element named My Tables. That element has an icon attribute that specifies a graphics file. In the JAR file that contains the schema.xml file and the button.jpg file, both files are in a directory named plugin11202.


Note:

The references to icon files or Java class files in an XML document must reflect the directory structure of the JAR file containing them. The examples in this document of XML documents and Java plug-ins were created in a JDeveloper project named plugin11202. The project deploys the XML and Java class files in a JAR file. In the JAR file, the XML files and class files are in a directory named plugin11202. In Example 1-4, the icon attribute specification includes the directory: icon="plugin11202/button.jpg". In the examples of XML documents in Chapter 3, the viewClass attribute specifications include the package name, as in viewClass="plugin11202.DimEditorPlugin" in Example 3-7.

Example 1-4 Including an Icon in a Report

<?xml version="1.0" encoding="US-ASCII" ?>
<AWMTree>
  <AWMNode name="My Tables" 
           icon="plugin11202/button.jpg"
           type="table" 
           sql="select table_name from all_tables where owner = {owner}">
    <AWMNode sql="select column_name, data_type from all_tab_columns where owner = {owner} and table_name = {table}"/>
  </AWMNode>
</AWMTree>

Reference: Elements for SQL Reports

An XML document for SQL reports has the basic format shown in Example 1-5.

Example 1-5 Basic XML Structure for Reports

<AWMTree>
   <AWMNode>
      <AWMNode>
         <ShowIfQueryTrue>
      <AWMNode>
            .
            .
            .

<AWMTree>

The root element that identifies this document as containing custom reports for Analytic Workspace Manager. It contains one or more <AWMNode> elements.

Contains

<AWMNode>

Attributes

None

<AWMNode>

Defines a report folder or SQL report. It contains one or more <AWMNode> elements.

Contains

<AWMNode>, <ShowIfQueryTrue>

Attributes

<AWMNode> has the following attributes:

  • name: The name of the folder or report. For a folder, this attribute is the only one required.

  • type: The name of a bind variable that stores the selected value of the report. Use this bind variable to pass a user selection to a second, nested report.

  • sql: A SQL SELECT statement, which can contain a bind variable in a WHERE clause. The bind variable is defined by the type attribute of a parent <AWMNode> attribute. The query results appear in the tree for a parent <AWMNode> element; for leaf elements, the results appear in the property inspector.

  • viewClass: A Java class that implements the ViewerPlugin or EditorPlugin interface. The plug-in displays in the property inspector. For information on these Java plug-in interfaces, see Chapter 2, "Introducing Analytic Workspace Manager Plug-ins". The viewClass and viewSQL attributes are mutually exclusive. Use only one of them for any single <AWMNode>.

  • viewSql: A SQL SELECT statement. The query results appear in the property inspector. Use this attribute to specify a SQL statement for a parent <AWMNode>. The viewSQL and viewClass attributes are mutually exclusive. Use only one or the other for any single <AWMNode>.

  • icon: An image to use in the navigation tree. The image must be in a JAR file in the plug-in directory and should be about 20 x 20 pixels.

<ShowIfQueryTrue>

Controls the display of the parent report.

Contains

None

Attributes

<ShowIfQueryTrue> has the following attribute:

  • sql: A SQL SELECT statement that creates the condition for displaying the parent report. If the query returns one or more rows, then the report is displayed in the navigation tree. If no rows are returned, then the report is hidden.

Describing Calculation Templates

You can define a calculation template that appears in the Create a Calculated Measure dialog box like any other calculation. You provide a name for the calculation, the text of the template, and a calculation using the OLAP expression syntax.

Creating an XML Document for Calculations

  1. Create a custom measure in Analytic Workspace Manager that performs the type of calculation that you want in a template. Use this custom measure to validate the syntax of the expression for the template.


    See Also:

    Analytic Workspace Manager Help for the OLAP expression syntax reference.

  2. Create a text file named awmcalcs.xml in the directory with the Analytic Workspace Manager executable, typically ORACLE_HOME/olap/awm.

  3. Begin the file with an XML declaration like this one:

    <?xml version="1.0" encoding="utf-8"?>
    

    Specify the appropriate encoding for your site.

  4. Enter the XML for the template, as described in "Reference: Elements for Calculations".

  5. For the expression attribute of the <Calc> element, cut-and-paste the calculation from the custom measure that you created earlier. Replace the names of the measure, dimension, and so forth with the variables from the ui parameter.

  6. Open Analytic Workspace Manager. The new categories and templates appear at the end of the Calculation Type list in the Create Calculated Measure dialog box.

    If the new entries do not appear, then look for syntax errors in the XML. To see changes to the XML document, just reopen the Create Calculated Measure dialog box.

Example of a Simple Calculation Template

Figure 1-5 shows the Calculation Type list in the Create Calculated Measure dialog box. The list contains a new folder named My New Calcs with two additional calculations: Discount and Average.

Figure 1-5 Listing the New Calculations

Create Calculated Measure template list

Figure 1-6 shows the template portion of the General tab that appears when a user selects Discount from the tree.

Figure 1-6 Displaying a New Template

Create Calculated Measure Discount calculation

The XML document in Example 1-6 defines the My New Calcs folder and the Discount and the Average calculations. The document contains three elements: <AWMCalcs>, <Category>, and <Calc>. <AWMCalcs> is the root element. It can have one or more <Category> elements. In this example, the <Category> element defines a folder named My New Calcs.

A <Category> element can have one or more <Calc> elements. This document has two <Calc> elements named Discount and Average.

A <Calc> element has four attributes: name, description, ui, and expression. Each attribute takes a quoted string as a value. The ui element consists of literal text and hypertext links. You create the links by entering one of several available parameters.

Example 1-6 uses the {measure} and {number} parameters. You use the same parameters in the expression attribute as bind variables, which pass the user choices to the calculation. Notice that the Average calculation uses two {measure} parameters. The expression attribute refers to them by their order in the ui attribute: {measure:1} and {measure:2}.

Refer to "Reference: Elements for Calculations" for full descriptions of these elements.

Example 1-6 Creating the Discount and Average Calculation Templates

<?xml version ="1.0" encoding="UTF-8" ?>
<AWMCalcs>
   <Category name="NEW_CALCS" description="My New Calcs">
      <Calc 
         name="Discount" 
         description="Discount"
         ui="Discount {measure} by {number} percent"
         expression="{measure}*(1 - ({number}/100))"/>  
      <Calc 
         name="Average" 
         description="Average"
         ui="Average of {measure} and {measure}"
         expression="({measure:1}+{measure:2})/2"/> 
   </Category>
</AWMCalcs>

Adding an Option to a Calculation

You can add an option that changes the basic calculation. The option appears as a check box in the Create Calculated Measure dialog box. Users select the option to create the modified calculation.

Two elements support these options: <CalcOptional> and <CalcOptionalDefinitions>. You can define a <CalcOptional> element locally or globally. Within a <Calc> element, <CalcOptional> applies only to that particular calculation. Within a <CalcOptionalDefinitions> element, <CalcOptional> applies to all calculations that reference it by name.

Figure 1-7 shows the sample calculation with an option of truncating the values of the measure to whole numbers. The user has changed the percentage value to 6.

Figure 1-7 Providing an Option to a Calculation

Create Calculated Measure dialog box with option

Example 1-7 shows the Truncate option defined locally in a <Calc> element. The option applies only to the Discount calculation.

Example 1-7 Adding an Option to One Calculation

<Calc 
   name="Discount" 
   description="Discount"
   ui="Discount {measure} by {number} percent"
   expression="{measure}*(1 - ({number}/100))">
   <CalcOptional 
      name="truncate"
      type="boolean"
      text="Truncate the decimal places"
      expression="TRUNC($expression$)"/>
</Calc>

Example 1-8 shows the Truncate option defined globally in the <CalcOptionalDefinitions> element. The option is used by the Discount and the Average calculations, and it is available to any other calculations that might be defined.

Example 1-8 Adding an Option to Multiple Calculations

<AWMCalcs>
   <CalcOptionalDefinitions>
      <CalcOptional
         name="truncate"
         type="boolean"
         text="Truncate the decimal places"
         expression="TRUNC($expression$)" /> 
   </CalcOptionalDefinitions> 
   <Category name="NEW_CALCS" description="My New Calcs">
      <Calc 
         name="Discount" 
         description="Discount"
         ui="Discount {measure} by {number} percent"
         expression="{measure}*(1 - ({number}/100))">
         <CalcOptional name="truncate"/>
      </Calc>
      <Calc
         name="Average" 
         description="Average"
         ui="Average of {measure} and {measure}"
         expression="({measure:1}+{measure:2})/2">  
         <CalcOptional name="truncate"/>
      </Calc>
   </Category>
</AWMCalcs> 

Creating More Complex Calculation Templates

This example creates five calculations in two folders. The calculations in both folders use the global options defined at the beginning of the XML document. Figure 1-8 shows the calculations as they appear in the Calculation Type list.

Figure 1-8 Listing More New Calculations

Calculation Type box

The My Period To Date calculation has the most complex syntax, including three lists. Using the <Params> element, you can create the lists quickly. This is the definition of the first list, which is displayed in Figure 1-9:

<Params>
   <Param type="list" name="timePeriods">
      <Item expression="GREGORIAN YEAR" text="Gregorian year"/>
      <Item expression="GREGORIAN QUARTER" text="Gregorian quarter"/>
      <Item expression="GREGORIAN MONTH" text="Gregorian month"/>
      <Item expression="GREGORIAN WEEK" text="Gregorian week"/>
      <Item expression="ANCESTOR AT LEVEL {level}" text="Ancestor at level"/>
   </Param>
</Params>

Figure 1-9 Choice Lists In a Calculation Template

Choice list in a calculation template

Example 1-9 shows the complete XML document that defines the five calculation templates shown in Figure 1-8.

Example 1-9 Sample AWMCalcs Document

<?xml version ="1.0" encoding="UTF-8" ?>
 
<AWMCalcs>
  <Params>
    <Param type="list" name="timePeriods">
      <Item expression="GREGORIAN YEAR" text="Gregorian year"/>
      <Item expression="GREGORIAN QUARTER" text="Gregorian quarter"/>
      <Item expression="GREGORIAN MONTH" text="Gregorian month"/>
      <Item expression="GREGORIAN WEEK" text="Gregorian week"/>
      <Item expression="ANCESTOR AT LEVEL {level}" text="Ancestor at level"/>
    </Param>
    <Param type="list" name="aggOps">
      <Item expression="SUM" text="sum"/>
      <Item expression="MAX" text="maximum"/>
      <Item expression="MIN" text="minimum"/>
      <Item expression="AVG" text="average"/>
    </Param>
  
  </Params>
  <CalcOptionalDefinitions>
    <CalcOptional 
        name="percentages"
        type="boolean"
        text="Multiply by 100"
        expression="($expression$)*100"/>
    <CalcOptional 
        name="truncate"
        type="boolean"
        text="Truncate the decimal places"
        expresFlsion="TRUNC($expression$)" /> 
  </CalcOptionalDefinitions> 
  <Category name="DEMO_CALCS" description="Demo Calcs">
    <Calc
        name="PctDif"
        description="My Percent Difference"
        ui="Percent difference between {measure} and {measure}."
        expression="({measure:1} - {measure:2}) / abs({measure:2})">
      <CalcOptional name="percentages" />
    </Calc>
    <Calc
        name="PriorPeriod"
        description="My Prior Period"
        ui="Prior period for measure {time_measure} in the {time_dimension}
            dimension and {hierarchy} hierarchy {number} period(s) ago."
        expression="LAG({time_measure},{number}) over hierarchy ({hierarchy})" />
    <Calc
        name="Periodtodate"
        description="My Period to Date"
        ui="{timePeriods} to date for {time_measure} in the {time_dimension}
           dimension and {hierarchy} hierarchy. Aggregate over {timePeriods}
           using {aggOps} from the {calcRange} of the period."
        expression="{aggOps}({time_measure}) OVER HIERARCHY ({hierarchy} 
           BETWEEN {calcRange} WITHIN {timePeriods})">
        <Param type="list" name="calcRange">
           <Item expression="UNBOUNDED PRECEDING AND CURRENT MEMBER"
              text="beginning"/>
           <Item expression="CURRENT MEMBER AND UNBOUNDED FOLLOWING"
              text="end"/>
      </Param>
      <CalcOptional name="truncate"/>
    </Calc>
  </Category>
  <Category name="NEW_CALCS" description="My New Calcs">
    <Calc 
        name="Discount" 
        description="Discount"
        ui="Discount {measure} by {number} percent."
        expression="{measure}*(1 - ({number}/100))">
         <CalcOptional name="truncate"/>
    </Calc>
    <Calc 
        name="Average" 
        description="Average"
        ui="Average of {measure} and {measure}"
        expression="({measure:1}+{measure:2})/2">  
      <CalcOptional name="truncate"/>    
    </Calc>
  </Category>
</AWMCalcs> 

Reference: Elements for Calculations

An XML document for calculations has the basic format shown in Example 1-10.

Example 1-10 Basic XML Structure for Calculations

<AWMCalcs>
   <Category>
      <Calc>

Example 1-11 expands on this basic structure to include the definition of options in the calculations.

Example 1-11 XML Structure for Calculations With Options

<AWMCalcs>
   <CalcOptionalDefinitions>
      <CalcOptional>
   <Category>
      <Calc>
         <CalcOptional>

Example 1-12 expands the basic structure to include choice lists in the user interface.

Example 1-12 XML Structure for Calculations With Choice Lists

<AWMCalcs>
   <Params>
      <Param>
         <Item>
   <Category>
      <Calc>
         <Param>
            <Item>

Following are the descriptions of the elements.

<AWMCalcs>

The root element that identifies this document as containing the custom calculation templates for Analytic Workspace Manager. It contains a <Category> element, and can also contain a <CalcOptionalDefinitions> element, a <Params> element, or both.

Contains

<CalcOptionalDefinitions>, <Category>, <Params>

Attributes

None

<Calc>

Describes a calculation template. It can contain a <CalcOptional> element, or one or more <Param> elements, or both.

Contains

<CalcOptional>, <Param>

Attributes

<Calc> has the following attributes:

  • name: A unique name for the calculation, which conforms to the same naming conventions as other OLAP objects.

  • description: A description of the calculation. Analytic Workspace Manager adds the description to the list of calculation templates.

  • ui: The text of the template, which Analytic Workspace Manager displays in the Calculation Type list of the Create Calculated Measure dialog box. Enclose hypertext parameters in braces {}. Table 1-1 describes the valid parameters.

  • expression: The calculation that is executed by the calculated measure. This calculation is defined using the expression syntax and by using as bind variables the hypertext parameters from the ui attribute. Enclose the bind variables in braces {}. If the ui attribute uses the same parameter two or more times, then reference them by the order they appeared, such as {measure:1} and {measure:2}. For a simple example, see Example 1-6.

Table 1-1 Parameters for the ui Attribute

ParameterDescription

ATTRIBUTE

Lists the attributes of the selected dimension.

DIMENSION

Lists all dimensions of the current cube.

DIMENSION_MEMBER

Lists the members of the selected dimension.

HIERARCHY

Lists the hierarchies of the selected dimension.

HIERARCHY_LEVEL

Lists the levels of the selected hierarchy.

LEVEL

Lists the levels of the selected dimension.

LIST

Displays a list of values specified in this format:

LIST:expression=value;[expression=value;...]

Alternatively, use the <Params> element.

MEASURE

Lists all measures in the analytic workspace with at least one dimension in common with the current cube.

NUMBER

Displays a text field that accepts numeric input.

TEXT_INPUT

Displays a text field that accepts any text input.

TIME_DIMENSION

Lists the time dimensions of the current cube.

TIME_MEASURE

Lists all measures for cubes that have a time dimension.

VALUE

Displays the current selection from a LIST parameter.

param

A parameter defined in a <Param> element. Specifically, the value of the text attribute of an <Item> element.


<CalcOptional>

Defines a check box that can be used by one or more calculations to modify the basic expression. For example, a calculation that generates a fraction might offer a Multiply By 100 option to return the results as a percentage.

Include a <CalcOptional> element in a <Calc> element where you want a check box to appear. You can fully define the option within the <Calc> element, or you can define the option within a <CalcOptionalDefinitions> element and reference it by name with a second <CalcOptional> element in the <Calc> element.

A <Calc> element can contain a <CalcOptional> element. A <CalcOptionalDefinitions> element can have one or more <CalcOptional> elements.

Contains

None

Attributes

<CalcOptional> has the following attributes:

  • name: A unique name for the option, which conforms to the same naming conventions as other OLAP objects.

  • type: The data type of the option, which is always boolean.

  • text: A description of the option. This text labels the check box.

  • expression: The calculation that is executed when the option is selected. Use the expression syntax and ($expression$) for the basic calculation defined by the current <Calc> element.

<CalcOptionalDefinitions>

Contains one or more <CalcOptional> elements so they can be referenced by multiple calculations. This element must appear directly after <AWMCalcs>.

Contains

<CalcOptional>

Attributes

None

<Category>

Defines a heading in the list of calculations in Analytic Workspace Manager. It contains one or more <Calc> elements.

Contains

<Calc>

Attributes

<Category> has the following attributes:

  • name: A unique name for the category, which conforms to the same naming conventions as other OLAP objects.

  • description: A description of the category. Analytic Workspace Manager adds this description to the list of calculation templates.

<Item>

Describes an entry in a list of values or numbers.

Contains

None

Attributes

<Item> has the following attributes:

  • text: Value entered in the <Calc> ui attribute and displayed to users.

  • expression: Value inserted in the <Calc> expression attribute when a user selects the item.

<Param>

Describes a list of values or a number field referenced in a <Calc> ui attribute. An expression that corresponds to the choice made by the user is entered in the calculation instead of the displayed value. This element contains one or more <Item> elements.

Contains

<Item>

Attributes

<Param> has the following attributes:

  • type: Either LIST for a list of values, or NUMBER for a field for entering a number.

  • name: The name of the parameter, which is referenced in the <Calc> ui attribute.

  • default: Provides the default value when a user enters a number that has no corresponding expression in an <Item> element.

<Params>

Contains one or more <Param> elements.

Contains

<Param>

Attributes

None

PKPKPFJ OEBPS/toc.htm Table of Contents

Contents

List of Examples

List of Figures

List of Tables

Preface

1 Customizing With XML Documents

2 Introducing Analytic Workspace Manager Plug-ins

3 Examples of Analytic Workspace Manager Plug-ins

Index

PK[׳PKPFJ OEBPS/loe.htm$ List of Examples

List of Examples

PK) $ PKPFJOEBPS/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 PKPFJOEBPS/dcommon/oracle.gifJGIF87aiyDT2F'G;Q_oKTC[ 3-Bq{ttsoGc4I)GvmLZ).1)!ꑈ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-OJPKPFJOEBPS/dcommon/cpyr.htmd Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

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, then the following notice is applicable:

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

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.

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.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information about 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 unless otherwise set forth in an applicable agreement between you and Oracle. 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, except as set forth in an applicable agreement between you and Oracle.

Alpha and Beta Draft Documentation Notice

If this document is in preproduction status:

This documentation is in preproduction 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.

Private Alpha and Beta Draft Documentation Notice

If this document is in private preproduction status:

The information contained in this document is for informational sharing purposes only and should be considered in your capacity as a customer advisory board member or pursuant to your beta trial agreement only. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described in this document remains at the sole discretion of Oracle.

This document in any form, software or printed matter, contains proprietary information that is the exclusive property of Oracle. Your access to and use of this confidential material is subject to the terms and conditions of your Oracle Master Agreement, Oracle License and Services Agreement, Oracle PartnerNetwork Agreement, Oracle distribution agreement, or other license agreement which has been executed by you and Oracle and with which you agree to comply. This document and information contained herein may not be disclosed, copied, reproduced, or distributed to anyone outside Oracle without prior written consent of Oracle. This document is not part of your license agreement nor can it be incorporated into any contractual agreement with Oracle or its subsidiaries or affiliates.

Documentation Accessibility

For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

Access to Oracle Support

Oracle customers that have purchased support have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.

Oracle Logo

PKKPKPFJOEBPS/dcommon/oracle-logo.jpgt JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222'7" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzE7V%ȣ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@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((9~kmEke z'a::έ:Ș30d`Q^+|hw\}ۆe ʸ{'|Co 2O$ `8PC²訫(S\[5|1- -sn8;@>_[zueI4/8<:׍ua|UKi mh $dC@Ex߳ }{Y#ux.]lUx8=[|Qjxs_;\ VW$7: g<## Q^c7mhwU ^TdORA +~ j>([3*A2g$ nQ|.U[\"$bR#:B0H Fs{eNVt[{B{m*4͐0=jU;=[M.. Kep̮жHÀr*FRմn5MBp%8'ƀ.QYzotfoMPGkt\3+$xZfZ[-b"bcEǙ*sT:[zޛ}:v%`$)' gVko-ıH^I$`I$$:[zޛ}:v%`$)' gVko-ıH^I$`I$$..3D ?+pcV4[MmK-/W(Z̲lTq(} 闒YJ8rRr2?lP;=[M.. Kep̮жHÀr*F?@ޑhoF'٤!۵@)8dƶ/Y2K;iVQ|3@#*NFA jnnic8EeK` cY?0UG|+f #. (V@wH*xiEGx]!=7J8aj(>k1*M9;`P8> 2qЈ ucij<<#|Guyi!s @8vϖ8T>, 4)..DE} (p@ <Ü Vuo?@>S bcP/dVfldhOESm;_m$Yc;exANIz5z?mCUҵR4$;Lcn} ( *mG7o^ >jVR݉Z%%1K:t |ZRuۯ;]7vDf6˱$|'(?}k 2$ x C" Ni<]1+h(!=-.&խ4gb1 ̀rRqQ';g1TTyY?$$"_§FװWrg#O52 RV'2+w Ƣ'L$c\ym8/?6Z=/k^mJ8iJCy[np[*F C[~w ϕv;mqgK<օ]i}ī% += <9 '6{>/,̤F)I`z`43MoP"I.?: M*izceiM Fr F:.⯇Б4-Lcnp;QNӎxo߅|#_d# ?%(H$a؎?*;/|^t]bd*̌. 7'5otfoMPGkt\3+}foiv~#/m؅H48]鸑6&ȏNrFEc%Qx͊.{.mSpO2_LQ¸P'Tۊ>.IWYWR`dpFJ6>b|A$5?w>9@uOfXNHso$ >hqv›ڋFO'x;,,7jz'4-9k-fҼ'uTm `5?{ǫZygLg*b`gzoo%:c㐂Q@N89qQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW,N@O CIfbIOvP?k>a-$!I!]KmAۜdg(I|<{'n?нr-izkgNI^G`?'j>UTcآ׼-xgV󤲗ζ%xUІ Džm{Q;?>Kγ5|yE랕EQEQErz/}$;iXrH[=ODe\}NϽdt)ʔ2(A9Q@,;9, 1"6#*x8 ¸#Ð< d9rO^㎽k1 h_~E֩/xkc1 rj x]cCvp:BBqqQ@xG·G t Aیlk:95{/m['dɝ7)ꭂpgZP/ῇ~%}H,hL b:cYaA{j;&L$OUl#<Т8gt E/LymC(+r=k [q 29P~itˋ{>Xē'U hv~}֗/fkS)=+b+G𶍠:g]j׏y9.1ֶ( }6euK^?X HtZ7z}}dj7mPpvP’yBN5_w[vc:Eٱ /1’9& (\^GZD̛܌a'W4M;Ú<No{7yqog۹Xy$kB<-kڎZ\uSNp/\aiZuƊG@#5Exn%9a]ݴF؏{ 3mqkp!*;DQ._H*h. ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 1$(ּi{I܆5 i둻(ZrwREkbyOICr_9 9#T-CS{VWB6"eJm2Pxn⸷9$l]H #ԕdyhg4SLܛdg09?#Bkwv6}cW=麍jD!de*͌!(oC྽]'7]}y^?ly3\ @h؂8`0@Ey_ m nQ;#[Rm'|G i'K4Asqnɵl^@=OUfhͷ!$ :N:Vvw"*m@T2n0Yu#x| ]c[u)7my[8@d(?I+q8xUSdGͨbq N3ֽ7KKq|vWza^Wjڗh*MB\(c#!CC++iUw‘,X,7\ m^xmm<"{8Bob+2I6O.F0MwC7׶1y"-3mILw.65k[?hj75KpZa#O?)b@v?s _Gj{p 9 =פx6𾣮].".$yN2*33lQ^Ꮖx^d粶B(FF1$ZhN}y{|pwr˙@#@=?#Bkwv6}cmuwVkV5̒(YZ6 @Ot>,T {x}{}H7Dvj 2N8.S4/¨'T',8;N0(/uyQxF0$hm`pŶ眾s\~߈/gյ{1br䘜4n$q}Es~ ѦY tIh!ڪH…rp7uhVݗs5Z0cl pdQ_?m|Y=R}" bԲTʻB~d-g-<վ&Oo~R̠1C9S(W%uI"-l)`wgIɮ7uj:~ )-R)<,DI Ș @Ey|Gxǖ+}&}OR>69.^A[}{YTGuL.sk{%73CVpIq&}.'cvH5|2k|@sN6&-70`G8@p4WV#i^/#d'<[On9˨$V2䏗l(((((((((((((( mxǚ7tY#on.16av0O??]7K=Ʃg]F1EUQ" O9礠e_=O0Xqe+l>T3GS@%x(*?m{s~V}g],}j+3TmL( fCԞ0xSǃ<8ֺ~xaTC9H #x=?? -kϷ_=@" =G8+{seV% v/)݆azSm(%$B(F _̟?fy~_j<-?rCy-mwy;V=2yso2M2_-TU;B2/SSm?~8j--C(zB|Ǎ3k=sNk7PlVuwIIQ2 r(A">x]|'NhKbDda,I;JTsI s᷂XA[d`2Aco6Q<3&7#dr2 ^oazgm;V9-n<1W n*0-w4J oZ4k_Kfg}^L0@*xZo5 T9[[,.]#a򤑘B:(4vsL#ڤr00V7w6p%ծߴBn]9\Fzכ?/yiZUc,I$umq€~мg<6KA/B5k՞maUNWg=S$a? Kƚ?*rIɭ1˦?dI7t88b(\g4_§FװW7Oi(t-R{n>lv܍ʒFck5Xt$29NL20A tg}R^5;]F2qCEg xݍnZm5E=/żTmvI~|uḀvA wUt$Mz ;6x9(Q|VH~ :6x׶7{c1Xtk~P`]׃Wx]X5f*~V.N80HI?ٮ%.ܲePF'Ԛ>kw  ϩGhW i`ALF p 0g?qi7+SGL4)a$z4 ik1Z/Ibzf$2I |9㯇7Hqjr$WT_.x`qs@M~/Iti'ֵwml]@[q ]'3+ϩxCf$-t"f/p=#b Dԡ'WW* 8*jUiw6w X8 A@o ^[z#jRjMIKFʘ\6Mrd%ݯi <%X1p:_?iu_'>;3~qcyÿ |?_\kBOo$֋iPvIcXMpzV pz*BBƿ1یA $V$td}w_tێsO_-j;B1*UB=FA:^on"3E%a\NЊM? RKh`"_̇c. h'*u xVȺ%TMb3 rӯ5|+l3y4r;q% 1XiEy/_˷[Vk{` m5;yO>.my_H8@V?zEQ@Q@Q@? <OSEᮼGkKf+88#QEQEQEQEQEQEWY>$Oæ>6OZMRJP[}1xγ/w۫G "*UI;vT_|_Vi?hڒIy*p|0TvrQ\oQÍ'Vծ>}?KSvٝG 8PEPE3]ծq4/SlV?-xGNC%<ד.@=~Uo.妹a*;[{xÍruS޶4~-Ӽ+ДiC`8@U5T0,9`(򿏺xK.gmN4i-fh)*A@8QEQEQEQEQEQEW'vZ K#PD(cbUp[#$ \7ǏMyWO.3v3>Nm|s@EyoW-TH,|CJ %~R6$r?6PEPEPEPEPEPEPEPEPEP_§F~ xN)d=/ZFtؕP-ITDr|2|_§FόV0[ZIb0i*PgX3@bo~7WfH|&R#!*n xq&F?pƤjEE[/}Iw 5k3<*%Ws83r3^6rQKIoQ%q1eEеz}w@֥a_51d27ā zgc\46PVK VbrK*oxGJ oZuR_ xgIM^/|- 3}x>.x\>"3WٺNu NTrXPFUgn<;'5-77:_$e`%fw%J઒AƧI~/|@ѵc/Eͬ 2ǺY2q#mpO)q3U~skXwuWQGRI$h?>5M/T5 %p=ňUNY :F?'-L 7FMl|>faguu ns< : '?KL66n$ű,p%Q6@KH4Ůs⫿u"P7TRX\PA{ 5MSG$[v%ZhWSЩ ׮t>*jR7ηhUۧ3ωg'uwm,ݻw%݌gMs~okM5薟gAg IȠl/)܅lWy#h8hlӴk+/').dT$3k/O<5`_PEP^?J q^^?J q@\xW_)OO4uj-YB6&RȎq}~b@^,4QLH/G3ܐ>S^j:o1&N? ypEx'9͕9 (g 0: {es;y_]覮ENĽv.OĶziEK@k6~u{kiJ E\ y$ ?JGLj.簵.$(v$)B@'s7\P+cq|(ᵏ̑bI9G<*כ':߉%GōV+)ckXDuQq mFԷiV#$ׅK܆/o!U;{ #c55sx>kKmBkY.+AYA,uug|5 4[}sj%M{ \mݎ|a5Ky|1&}6m{PXd d\0y2)cQO?Q~SCVIrcҺO3F4ki| *$eI gyb`eIz?;uť$z\@0i1rW .uONK4~tk. Y`7 ʪ8$dOÿxYw.#[kro۹)þNJxCQY#ya2,lRA'3sJgLmjEeTG V;\6>Rzį:|?_xWܶ[:O_8R.~DmZ6I0y$ v.p9toxj]rOZ]YhdcdVYHE,Hrsks?럔~7>xWԮ5 hZ=1!'u^ F֌Z foɭYI"P˱ٌHQ^@G \\D+Ƴi8lgE.RZGia獼1 /}^_3nFs{AEgZg''inv2qg5𧄢Y֫YcFVF# Cza[$bb(kM{7_5- X>`w( Og+^.,$Vݾ!ti$ț,rZ(=M2VV~\0Y?~x[u9dK+}dFp@;q1ڽb{>$,㳰Zǝ p| O^Xz{kcNP n6ݑg#Um=:?2'dF`C FA=( ^ZD[Ÿ[ "l .rtr"p0B09kek)MC2P!#<|5IJ޳;X~89$]x+Nk=vv/$̣aA'dAYOI󼟷ZKmݳz݌9EhQ@|1w,t}g/vN1{QO Z-^nhdS`0JtP~eyvV7ob{ x c''''yBr][~"))MW #z,oxU |5s*D㜝Wq]&n|#n7/Š+oےf'ILjmd*0+(/=exźfYR'w'wÊ@7HON1uqoG^εG+dS!TYdqEy~b\<9MW@i. # φ1_I!o_xk}Ԅvr˒\!"b?4hsim/ ̂$3!%6z;-\Ա8ePO<''5P'X"񡻻5Yon-3yyXWYEG/,[??`n<vr9j~LvikvC2FI‰2I?{E+uOjZn-}Ŕay((((((((((/Ě>֥唳yB<1#гaG85-oop8*ƾ,~â[2js[+06~s8̋COoAGv!%L%{HA%wG`#//p\jx"8t76Bq$`6Q\Od%pAI'}>UϰPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPdWbcZ}qq$grzmz *]|YQX{d74gc,`A)d@ y9@@ۦ:W?'%Ujk}vÖx ]wxv+z.tkKOƯiot[ך8HH8I@_WW 'IVoc.-bǖ'^_x{SӮ>}=[ͼ#! ۇ#Ƞ u/z>mę[[Dl=ÎFF[{+X-|9l{}mvײv6ݓxSsg+ ↯>m3LΛvs }-S+((((((((((((((((((((((((((((((vzN]\Yiݾ!Ql eXSW(((((n巸9 I]H#TP{ =2;; H--c`FIŽI'Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@PKCttPKPFJOEBPS/dcommon/blafdoc.cssc@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.8.12 */ 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%; text-align: left; } h2 { font-size: 152%; font-weight: bold; text-align: left; } h3 { font-size: 139%; font-weight: bold; text-align: left; } h4 { font-size: 126%; font-weight: bold; text-align: left; } h5 { font-size: 113%; font-weight: bold; display: inline; text-align: left; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; text-align: left; } 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; } li { text-align: left; } dd { text-align: left; } 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: #f00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #f00; 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; } } PKr.hcPKPFJOEBPS/pluginpreface.htm[ Preface

Preface

With Oracle Analytic Workspace Manager, Version 11.2, you can add custom objects and menus to the user interface. You can customize Analytic Workspace Manager by doing the following:

  • Adding custom reports and calculation templates to the navigation tree.

  • Adding selections to the menu that appears when the user right-clicks a navigation tree object.

  • Providing graphical user interface elements for viewing or editing relational database objects or OLAP objects, or both.

Chapter 1, "Customizing With XML Documents" describes how you can add reports and calculation templates to the navigation tree by using XML documents. It also describes how you can specify an Analytic Workspace Manager Java plug-in within an XML document.

Chapter 2, "Introducing Analytic Workspace Manager Plug-ins" describes the Java plug-in interfaces that Analytic Workspace Manager supports and demonstrates how to develop a plug-in. With a plug-in you can add items to the right-click menu of an Analytic Workspace Manager navigation tree object. You can also provide a viewer or an editor plug-in that displays in the Analytic Workspace Manager property inspector.

This document describes the Analytic Workspace Manager XML and Java plug-in interfaces and provides simple examples of implementations of them.

This preface contains the following topics.

Audience

This document is intended for XML or Java developers who want to use XML documents or Java plug-ins to extend the functionality of Analytic Workspace Manager in Oracle Database 11g Release 2 (11.2) with the OLAP option.

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 on Oracle OLAP, on using Analytic Workspace Manager, and on the Oracle OLAP Java API, see the following documents.

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.

PK `[PKPFJ OEBPS/lot.htm~ List of Tables PKۃ~PKPFJ OEBPS/lof.htm" List of Figures PK0yPKPFJOEBPS/pluginintro.htm Introducing Analytic Workspace Manager Plug-ins

2 Introducing Analytic Workspace Manager Plug-ins

An Analytic Workspace Manager plug-in enables you to run Java code in the context of Analytic Workspace Manager. With an implementation of a Java plug-in interface that is supported by Oracle Analytic Workspace Manager, Version 11.2, you can extend the functionality of Analytic Workspace Manager in Oracle Database 11g Release 2 (11.2) with the OLAP option.

This chapter has the following topics.

Describing Analytic Workspace Manager Plug-ins

Analytic Workspace Manager has the following Java plug-in interfaces.

  • AWMPlugin, which you can use to add selections to the right-click menu of a navigation tree object.

  • ViewerPlugin, which you can use to display information in the property inspector about the current navigation tree object.

  • EditorPlugin, which extends ViewerPlugin and adds the ability to edit properties of the object.

With an Analytic Workspace Manager plug-in, you can implement programs that perform actions such as the following:

  • Create new types of calculations.

  • Create forecasts.

  • Create custom OLAP metadata objects, such as an enterprise-specific time dimension.

  • Control the display in the property inspector of the information associated with a custom navigation tree object.

  • Edit the properties of an object in the property inspector.

In an Analytic Workspace Manager plug-in, you can use the following Java APIs:

  • Oracle OLAP Java API

  • JDBC API

  • Swing API

You can invoke OLAP DML or SQL procedures by using JDBC classes.

Enabling Analytic Workspace Manager Plug-ins

Analytic Workspace Manager has a configuration option that specifies whether it uses plug-ins. To enable plug-ins, from the Analytic Workspace Manager Tools menu, select Configuration, as shown in Figure 2-1. In the Configuration dialog box, select Enable Plugins and specify the directory that contains your plug-ins, as shown in Figure 2-2. Click OK and then exit and restart Analytic Workspace Manager.

Figure 2-1 Configuration Item on the Tools Menu

Description of Figure 2-1 follows

Figure 2-2 shows the Configuration dialog box with Enable plugins selected and with plugin as the value for Plugin directory. The value should include the full path to the plug-in directory unless the directory is a subdirectory of the Oracle_home/olap/awm directory, which is the case for the plugin directory shown in the figure.

Figure 2-2 Configuration Dialog Box with Enable Plugins Selected

Description of Figure 2-2 follows

How Analytic Workspace Manager Calls a Plug-in

If Analytic Workspace Manager has plug-ins enabled, then on startup Analytic Workspace Manager dynamically loads Java code from JAR files located in the plug-ins directory. After loading the contents of the JAR files, Analytic Workspace Manager looks for classes that implement the AWMPlugin, ViewerPlugin, or EditorPlugin interfaces. It also looks for aw.xml, cube.xml, dimension.xml, and schema.xml files to add objects to the navigation tree.


Note:

You can include multiple plug-ins and XML documents in a single JAR file.

When Analytic Workspace Manager calls most methods of a plug-in, it passes the method a java.sql.Connection object as the conn parameter. The Connection represents the current connection to the Oracle Database instance.

Analytic Workspace Manager does not pass any user identification or password to the plug-in. It only passes the connection object. An Analytic Workspace Manager plug-in does not allow you to do anything that you cannot do by writing a standalone Java program. For information on the parameters that Analytic Workspace Manager passes to the methods of plug-ins, see "Describing the AWMPlugin Interface" and "Describing the ViewerPlugin and EditorPlugin Interfaces".

Calling an AWMPlugin

When a user right-clicks an object in the Analytic Workspace Manager navigation tree, a menu appears that presents the actions available for the object. The menu also displays options supplied by the AWMPlugin plug-ins that apply to the object. An AWMPlugin uses the isSupported method to indicate whether it applies to an object in the tree. Because Analytic Workspace Manager calls the isSupported method of each plug-in whenever the user right-clicks a navigation tree object, an isSupported method should return quickly.

The menu displays the text returned by the getMenu method of the plug-in. Figure 2-3 shows the menu that Analytic Workspace Manager displays when a user right-clicks a calculated measure in the tree. The menu includes the ViewXMLPlugin example plug-in. For the code of the plug-in example, see Example 3-1.

Figure 2-3 Right-click Menu of the Navigation Tree for a Calculated Measure

Description of Figure 2-3 follows

If the user selects the plug-in, then Analytic Workspace Manager calls the handle method of the plug-in. The handle method specifies the actions that the plug-in performs. The refreshTree method of the plug-in indicates whether Analytic Workspace Manager refreshes the navigation tree to include any new objects created by the plug-in or to remove objects deleted by the plug-in.

Calling a ViewerPlugin or EditorPlugin

As described in "Creating Reports in Object Folders", with certain XML documents you can add objects to the Schemas, Analytic Workspaces, Dimensions, and Cubes folders in the Analytic Workspace Manager navigation tree. You add objects to the navigation tree by adding <AWMNode> elements to the XML document. If an <AWMNode> specifies a ViewerPlugin or an EditorPlugin, then Analytic Workspace Manager calls the plug-in when the user selects the navigation tree object that corresponds to the <AWMNode>.

With the sql attribute of an <AWMNode> element, you can specify a SQL SELECT statement. Analytic Workspace Manager displays the result of the statement either in the folder in the navigation tree or in the property inspector, or in both places. For more information about creating the XML documents and the SQL statements, see "Creating Reports in Object Folders".

To control the display of the information in the property inspector or to enable the user to edit properties of the selected navigation tree object, you can use a ViewerPlugin or EditorPlugin. You use the viewClass attribute of an <AWMNode> element to specify the plug-in. In the plug-in you can use the Oracle OLAP Java API to retrieve OLAP objects or alter characteristics of them. You can also specify user interface elements for the display in the property inspector.

Describing the AWMPlugin Interface

The following is the oracle.olap.awm.plugin.AWMPlugin interface.

package oracle.olap.awm.plugin

import java.awt.Frame;
import java.sql.Connection;
import java.util.Map;
import oracle.AWXML.AW;

public interface AWMPlugin
{
  boolean isSupported(Connection conn, String type, Object obj, AW aw,
                      Map params);

  String getMenu(Connection conn, String type, Object obj, AW aw, 
                 Map params);

  void handle(Frame parent, Connection conn, String type, Object obj, 
              AW aw, Map params);

  boolean refreshTree(Connection conn, String type, Object obj, AW aw,
                      Map params);
}

When a user right-clicks an object in the navigation tree, Analytic Workspace Manager calls the methods of classes that implement the AWMPlugin interface in the sequence illustrated in Figure 2-4.

Figure 2-4 Sequence of Calls to an AWMPlugin

Description of Figure 2-4 follows

Analytic Workspace Manager first calls the isSupported method. If that method returns true, then Analytic Workspace Manager calls getMenu and displays on the right-click menu the value that getMenu returns. If a user selects the menu item, then Analytic Workspace Manager calls the handle and refreshTree methods. The input parameters that Analytic Workspace Manager passes to the AWMPlugin methods are the following:

  • conn, which is a java.sql.Connection object that represents the current connection to the Oracle Database instance.

  • type, which is a java.lang.String that is a type designation that Analytic Workspace Manager assigns to the object. For a description of type parameter values, see "Values for the type and obj Parameters".

  • obj, which is a java.lang.Object that Analytic Workspace Manager associates with the object selected in the Analytic Workspace Manager navigation tree. The Object can be a String or an object from the Oracle OLAP Java API. For more information on the obj parameter values, see "Values for the type and obj Parameters".

  • aw, which is null. This parameter exists for compatibility with 10g plug-ins, for which aw was an oracle.AWXML.AW object.

  • params, which is a java.util.Map that contains objects and information that the plug-in can use. For a description of the Map keys and values, see "Elements in the params Map for an AWMPlugin".

  • parent, which is a java.awt.Frame object that Analytic Workspace Manager passes to the handle method. The plug-in can use this object as the parent frame for user interface components.

Values for the type and obj Parameters

For the type parameter of the methods of an AWMPlugin implementation, Analytic Workspace Manager passes to the plug-in a label that identifies the type of the navigation tree object for which the plug-in is invoked. For the obj parameter of the methods, Analytic Workspace Manager passes an Object, which is a java.lang.String or an OLAP metadata object.

A plug-in can use the type value to distinguish between the navigation tree objects that are associated with the same metadata object. For example, for all of the folder objects in a Dimensions folder, such as Levels and Hierarchies, Analytic Workspace Manager passes as the obj parameter the same MdmPrimaryDimension object, but it passes a different type label for each folder object.

Custom objects that you add with an XML document appear in the navigation tree at the level specified by the XML document. For example, a top-level <AWMNode> in a dimension.xml document appears in the Dimensions folder of an analytic workspace. For an AWMPlugin implementation specified by an <AWMNode> element, the type parameter value has the prefix AWMTree_ followed by the value of the name attribute of the parent <AWMNode>. The obj parameter value is the run-time value of the type attribute of the <AWMNode>.

Table 2-1 shows the type parameter values and obj parameter objects that Analytic Workspace Manager passes to the plug-in for the selected navigation tree object. The indentation of objects in the Navigation Tree Object column indicates the hierarchy of the tree. Text in italics indicates a variable object name. The obj parameter objects are String objects or OLAP metadata objects. The AW object is an oracle.olapi.metadata.deployment.AW object. The other metadata objects, such as MdmStandardDimension and MdmCube, are classes in the oracle.olapi.metadata.mdm package. The Reports object and all of the objects under it have the same type.

Table 2-1 Type Values and Objects for Navigation Tree Objects

Navigation Tree Objecttype Parameter Valueobj Parameter Object

Databases

Databases

Databases

Database name

DATABASE

Database identifier

Schemas

SCHEMA_FOLDER

Database identifier

Schema name

SCHEMA

Schema name

Analytic Workspaces

WORKSPACE_FOLDER

Schema name

Analytic workspace name

WORKSPACE

AW

Dimensions

DIMENSION_FOLDER

AW

Dimension name

DIMENSION

MdmStandardDimension or MdmTimeDimension

Levels

DIMENSION_LEVEL_FOLDER

MdmStandardDimension or MdmTimeDimension

Level name

DIMENSION_LEVEL

MdmDimensionLevel

Hierarchies

DIMENSION_HIERARCHY_FOLDER

MdmStandardDimension or MdmTimeDimension

Hierarchy name

DIMENSION_HIERARCHY

MdmLevelHierarchy or MdmValueHierarchy

Attributes

DIMENSION_ATTRIBUTE_FOLDER

MdmStandardDimension or MdmTimeDimension

Attribute name

DIMENSION_ATTRIBUTE

MdmBaseAttribute

Mappings

DIMENSION_MAP

MdmStandardDimension or MdmTimeDimension

Views

DIMENSION_VIEW_FOLDER

MdmStandardDimension or MdmTimeDimension

View name

DIMENSION_VIEW

MdmStandardDimension or MdmTimeDimension

Data Security

DATA_SECURITY

MdmStandardDimension or MdmTimeDimension

dimension.xml object

AWMTree_parent_node_name

For a folder, the name of the <AWMNode>. For a value returned by the SQL query, the run-time object name.

Cubes

CUBE_FOLDER

AW

Cube name

CUBE

MdmCube

Measures

CUBE_MEASURE_FOLDER

MdmCube

Measure name

CUBE_MEASURE

MdmBaseMeasure

Calculated Measures

CUBE_DERIVED_MEASURE_FOLDER

MdmCube

Calculated measure name

CUBE_DERIVED_MEASURE

MdmDerivedMeasure

Mappings

CUBE_MAP

MdmCube

Views

CUBE_VIEW_FOLDER

MdmCube

View name

CUBE_VIEW

MdmCube

Cube Scripts

CUBE_SCRIPT_FOLDER

MdmCube

Cube script name

CUBE_SCRIPT

Script_name

Data Security

DATA_SECURITY

MdmCube

cube.xml object

AWMTree_parent_node_name

For a folder, the name of the <AWMNode>. For a value returned by the SQL query, the run-time object name.

Measure Folders

MEASURE_FOLDER_FOLDER

AW

Measure folder name

Measure_folder_name

MdmOrganizationalSchema

Languages

LANGUAGE

Languages

aw.xml object

AWMTree_parent_node_name

For a folder, the name of the <AWMNode>. For a value returned by the SQL query, the run-time object name.

OLAP DML Programs

AWMTREE_OLAP DML Programs

OLAP DML Programs

Program name

AWMTREE_OLAP DML Programs

Program_name

Maintenance Scripts

MAINTENANCE_SCRIPT_FOLDER

Schema name

Script name

MAINTENANCE_SCRIPT

Script name

Maintenance Reports

AWMTREE_Maintenance Reports

Maintenance Reports

Maintenance_report_name

AWMTREE_maintenance_report_name

Maintenance_report_name

schema.xml object

AWMTree_parent_node_name

For a folder, the name of the <AWMNode>. For a value returned by the SQL query, the run-time object name.

Data Security Roles

ACL_DOCUMENT_FOLDER

Data Security Roles

Security role name

Security role name

Security role name

Reports

AWMTREE_Reports

Reports

Report name

AWMTREE_report_name

Report name


Elements in the params Map for an AWMPlugin

The params Map contains information about the navigation tree object that is currently selected. Table 2-2, "Keys and Values of the params Map for a Non-custom Object" and Table 2-3, "Keys and Values of the params Map for a Custom Object" contain descriptions of the keys and values of the elements of the Map for an AWMPlugin The keys are String objects.

The params Map for the Database folder does not have a DATASOURCE, DATAPROVIDER, or GETDATAPROVIDER key. The params Map objects for the higher level navigation tree objects, those above the individual analytic workspaces, have a null value for the DATAPROVIDER key until the user selects a tree object that requires OLAP metadata. Other than for those exceptions, the params Map for a navigation tree object has the keys and values listed in the tables.

Params Map Elements for Non-custom Objects

Table 2-2 lists the keys and values of the elements of the params Map for non-custom navigation tree objects. Custom navigation tree objects are specified by an <AWMNode> element in a SQL Report XML document and have a type that begins with the prefix AWMTree.

Table 2-2 Keys and Values of the params Map for a Non-custom Object

KeyValue

AWM_VERSION

A String that is the version number of Analytic Workspace Manager.

DATAPROVIDER

An oracle.olapi.metadata.mdm.MdmMetadataProvider that is the metadata provider for the session.

BIND_MAP

An empty Map.

DATASOURCE

A java.sql.DataSource.

GETDATAPROVIDER

An implementation of the oracle.olap.awm.plugin.OLAPDataProvider interface. The interface specifies a method that gets an MdmMetadataProvider.


Params Map Elements for Custom Objects

Table 2-3 lists the keys and values of the elements of the params Map for custom navigation tree objects. A custom object is specified by an <AWMNode> element in a SQL Report XML document.

Table 2-3 Keys and Values of the params Map for a Custom Object

KeyValue

AWM_VERSION

A String that is the version number of Analytic Workspace Manager.

DATAPROVIDER

An oracle.olapi.metadata.mdm.MdmMetadataProvider that is the metadata provider for the session.

BIND_MAP

A java.util.Map that contains bind variables from the <AWMNode> element and from the parent of the element, and from Analytic Workspace Manager.

DATASOURCE

A java.sql.DataSource object.

GETDATAPROVIDER

An implementation of the oracle.olap.awm.plugin.OLAPDataProvider interface. The interface specifies a method that gets an MdmMetadataProvider.

ISFOLDER

A String that is TRUE if the <AWMNode> that specifies the plugin-in is a folder or FALSE if it is not.

NODE_TYPE

For a nested <AWMNode>, a String that is the name of the parent <AWMNode>. For an <AWMNode> that is a folder, the name of the node.

TYPE

A String that is the value of the type attribute of the <AWMNode> that specifies the plug-in.


The BIND_MAP Map contains bind variables that are associated with the navigation tree object that is currently selected. Table 2-4 contains descriptions of the keys and values in the BIND_MAP Map.

This Map includes the bind variables that appear in the SQL statements of the <AWMNode> and the parent <AWMNode>. It also includes other bind variables for the currently selected object in the navigation tree.

The keys are String objects. A bind variable is specified by the type attribute of an <AWMNODE> element of a custom navigation tree object or is set internally by Analytic Workspace Manager. A plug-in gets the run-time value of the bind variable from the BIND_MAP Map. For examples of bind map Map keys and values, see Table 2-6.


Note:

When you reference the key for a bind variable in your plug-in, be sure to use lowercase, as in {owner} or {measureobj} or {dimension_name}.

Table 2-4 Keys and Values of the BIND_MAP Map

KeyValue

aw_name

A String that contains the name of the currently selected analytic workspace.

owner

A String that contains the name of the owner of the currently selected analytic workspace.

schema

A String that contains the name of the owner of the currently selected schema.

user

A String that contains the name of the user who is connected to the database.

Other bind variables

One or more elements, each of which has a bind variable as a key and has the run-time value of the bind variable as the value.

Examples of other bind variable keys are dimension_name and cube_name. For examples of other bind variables that can be in the Map see the "Example params Map Elements for an AWMPlugin" and the examples in Chapter 3, "Examples of Analytic Workspace Manager Plug-ins".


Example params Map Elements for an AWMPlugin

Examples of the keys and values of a params Map for a custom object are in Table 2-5 and in Table 2-6. All of the values are String objects except those for the DATAPROVIDER and DATASOURCE keys.

Table 2-6 has the elements of the params Map that Analytic Workspace Manager passes to the methods of DeleteDimPlugin when the user right-clicks the CUSTOMER dimension in the MyDims folder, as shown in Figure 3-2. The MyDims folder is created by the aw.xml document in Example 3-7.

The figure shows the menu that DeleteDimPlugin displays. The property inspector in the figure has the output of DimEditorPlugin, because that plug-in is also activated when the user selects a dimension in the MyDims folder.

An example of getting a value from the params Map is the following line from the isSupported method in the DeleteDimPlugin class in Example 3-2.

Object nodeType = params.get("TYPE");

Table 2-5 Keys and Values of the params Map for DeleteDimPlugin

KeyValueDescription

AW

An AW

The current analytic workspace object.

AWM_VERSION

11.2.0.2.0

The version number of Analytic Workspace Manager.

BIND_MAP

A Map

A container for bind variables related to the current object.

DATAPROVIDER

An MdmMetadataProvider

The metadata provider for the session.

DATASOURCE

A DataSource

The current data source.

GETDATAPROVIDER

An OLAPDataProvider

An implementation of the OLAPDataProvider interface.

ISFOLDER

FALSE

Specifies that the <AWMNode> is not a folder.

NODE_TYPE

MyDims

The name of the parent <AWMNode>.

TYPE

dimobj

The type of the <AWMNode> that specifies the plug-in.


Table 2-6 has the elements of the Map that is the value of the BIND_MAP key in the params Map. An example of getting a value from the BIND_MAP Map is the following lines from the handle method in the DeleteDimPlugin class in Example 3-2.

Map bindMap = (Map)params.get("BIND_MAP");
...
String owner = (String)bindMap.get("owner");

Table 2-6 Keys and Values of the BIND_MAP Map for DeleteDimPlugin

KeyValueDescription

aw_name

GLOBAL

The name of the current analytic workspace.

dimobj

CUSTOMER

The run-time value of the dimension currently selected in the MyDims folder.

owner

GLOBAL

The name of the owner of the analytic workspace.

schema

GLOBAL

The name of the current schema.

user

global

The name of the current user.


Describing the ViewerPlugin and EditorPlugin Interfaces

As described in "Creating Reports in Object Folders", with certain XML documents you can add objects to the Schemas, Analytic Workspaces, Dimensions, and Cubes folders in the Analytic Workspace Manager navigation tree. You add objects to the navigation tree by adding <AWMNode> elements to an XML document.

With the sql attribute of an <AWMNode> element, you can specify a SQL SELECT statement. Analytic Workspace Manager displays the result of the statement either in the folder in the navigation tree or in the property inspector, or in both places. For more information about creating the XML documents and the SQL statements, see "Creating Reports in Object Folders".

With the viewClass attribute of an <AWMNode> element, you can specify a Java plug-in for viewing or editing database objects. You can add a viewer or an editor for relational objects or OLAP objects. Relational objects include tables, materialized views, and so on, and OLAP objects include dimensions, cubes, and so on. To add a viewer, have the viewClass attribute specify an implementation of the ViewerPlugin interface. To add an editor, have the viewClass attribute specify an implementation of the EditorPlugin interface. The viewer or editor plug-in displays in the property inspector.

Describing the ViewerPlugin Interface

The following is the oracle.olap.awm.plugin.ViewerPlugin interface.

package oracle.olap.awm.plugin

import java.sql.Connection;
import java.util.Map;
import javax.swing.JPanel;

public interface ViewerPlugin
{
  public boolean isViewerForType(Connection conn, String name) 
    throws Exception;

  public JPanel getPanel(Connection conn, String name, Map params)
    throws Exception;

  public void cleanup(String name);
}

When the Analytic Workspace Manager user selects the navigation tree object that is associated with the ViewerPlugin, Analytic Workspace Manager calls the methods of a ViewerPlugin in the sequence illustrated in Figure 2-5.

Figure 2-5 Sequence of Calls to a ViewerPlugin

Description of Figure 2-5 follows

Analytic Workspace Manager first calls the isViewerForType method and passes it the following parameters:

  • conn, which is a java.sql.Connection object that represents the current connection to the Oracle Database instance.

  • name, which is a String that contains the name of the <AWMNode> that is the parent of the <AWMNode> that has the viewClass attribute.

If the plug-in returns true, Analytic Workspace Manager calls the getPanel method and passes it the same conn and name parameters plus the following parameter.

  • params, which is a java.util.Map object that contains information about the currently selected navigation tree object. The information includes the run-time values for attributes of the <AWMNode> element that has the viewClass attribute and from the parent <AWMNode>. The plug-in can use this information in specifying data to display or to retrieve from the database. The keys and values of the Map are described in Table 2-7. For a description of the Map keys and values, see "Elements in the params Map for a ViewerPlugin or EditorPlugin".

When the user selects a different navigation tree object, Analytic Workspace Manager calls the cleanup method of the plug-in. It passes the method the same name parameter. In this method you can perform any cleanup that your plug-in requires.

Describing the EditorPlugin Interface

The EditorPlugin interface extends the ViewerPlugin interface. The following is the oracle.olap.awm.plugin.EditorPlugin interface.

package oracle.olap.awm.plugin

import java.awt.Component;
import java.sql.Connection;
import java.util.Map;

public interface EditorPlugin extends ViewerPlugin
{
  public void setValueChanged(Connection conn, String name, Map params,
    PanelChanged parent);

  public boolean validate(Connection conn, Component parent, String name, 
    Map params) throws Exception;

  public boolean save(Connection conn, Component parent, String name,
    Map params) throws Exception;

  public void revert(Connection conn, Component parent, String name, 
    Map params) throws Exception;

  public void showHelp(Connection conn, Component parent, String name,
    Map params) throws Exception;
}

For an EditorPlugin, Analytic Workspace Manager initially calls the isViewerForType, setValueChanged, and getPanel methods, as shown in Figure 2-6, "Sequence of Calls to an EditorPlugin". For an example of the display of an EditorPlugin, see Figure 3-11.

If the user makes a change in the property inspector, then the Apply and Revert buttons become active. If the user clicks Apply, then Analytic Workspace Manager calls the validate method of the EditorPlugin. If the value is valid, then Analytic Workspace Manager calls the save method. If the user clicks Revert, then Analytic Workspace Manager calls revert. If the user clicks the Help button, then Analytic Workspace Manager calls showHelp.

All of the methods of an EditorPlugin have the same conn, name, and param parameters as the getPanel method. Those parameters are described in "Describing the ViewerPlugin and EditorPlugin Interfaces". The methods also have the following additional parameter.

  • parent, which for the setValueChanged method is an implementation of the oracle.olap.awm.plugin.PanelChanged interface. That interface specifies a single method, public void changed();. Whenever the user interacts with the editing field of your EditorPlugin, the EditorPlugin should call the changed method of the PanelChanged object. For the other EditorPlugin methods, the parent parameter is the parent component.

Figure 2-6 Sequence of Calls to an EditorPlugin

Description of Figure 2-6 follows

Elements in the params Map for a ViewerPlugin or EditorPlugin

The params Map for a ViewerPlugin or an EditorPlugin does not contain a BIND_MAP Map. Instead, the bind variables are keys in the params Map. Table 2-7 contains descriptions of the keys and values of the elements of the Map for a ViewerPlugin or an EditorPlugin.

Table 2-7 Keys and Values of the params Map for a ViewerPlugin or EditorPlugin

KeyValue

AW

An oracle.olapi.metadata.deployment.AW.

aw_name

A String that contains the name of the currently selected analytic workspace.

DATAPROVIDER

An oracle.olapi.metadata.mdm.MdmMetadataProvider object that is the metadata provider for the session.

DATASOURCE

A java.sql.DataSource object.

ISFOLDER

A String that is TRUE if the <AWMNode> that specifies the plugin-in is a folder or FALSE if it is not.

owner

A String that contains the name of the owner of the currently selected analytic workspace.

schema

A String that contains the name of the owner of the currently selected schema.

TYPE

A String that is the value of the type attribute of the <AWMNode> that specifies the plug-in.

user

A String that contains the name of the user who is connected to the database.

Other bind variables

One or more elements, each of which has a bind variable as a key and has the run-time value of the bind variable as the value. For a plug-in that is specified by the viewClass attribute of an <AWMNode> in an XML document, the number of bind variables depends upon how many bind variables are in the SQL statement of the <AWMNode> and the parent <AWMNode>.

Examples of other bind variable keys are dimension_name and cube_name. For examples of other bind variables that can be in the Map see the "Example params Map Elements for a ViewerPlugin and an EditorPlugin" and the examples in Chapter 3, "Examples of Analytic Workspace Manager Plug-ins".


Example params Map Elements for a ViewerPlugin and an EditorPlugin

Examples of the keys and values of a params Map for a ViewerPlugin or EditorPlugin are in Table 2-8. All of the values are String objects except those for the DATAPROVIDER and DATASOURCE keys.

Example params Map Elements for a ViewerPlugin

The cube.xml document in Example 3-5 has a parent <AWMNode> that has the name MyMeasures, a type of measureobj, and a SQL statement that references the bind variable cube_name. The child <AWMNode> has the type measureview and has a viewClass attribute that specifies the plug-in MeasureViewerPlugin.

Table 2-8 has the elements of the params Map that Analytic Workspace Manager passes to the methods of the MeasureViewerPlugin when the user selects the UNITS measure in the MyMeasures folder, as shown in Figure 3-7. The property inspector has the output of the plug-in, which is simply the name of the measure.

The MeasureViewerPlugin class in Example 3-6 gets the value of a bind variable in the following line in the getPanel method.

measureobj = params.get("measureobj");

Table 2-8 Keys and Values of the params Map for MeasureViewerPlugin

KeyValueDescription

AW

An AW.

The current analytic workspace object.

aw_name

GLOBAL

The name of the current analytic workspace.

cube_name

UNITS_CUBE

The name of the current cube.

DATAPROVIDER

An MdmMetadataProvider

The metadata provider for the session.

DATASOURCE

A DataSource

The current data source.

ISFOLDER

FALSE

Indicates that the navigation tree object is not a folder.

measureobj

UNITS

The name of the current measure.

NODE_TYPE

MyMeasures

The name of the parent <AWMNode>.

owner

GLOBAL

The name of the owner of the analytic workspace.

schema

GLOBAL

The name of the current schema.

TYPE

measureview

The type of the <AWMNode>.

user

global

The name of the current user.


Example params Map Elements for an EditorPlugin

Table 2-9 has the elements of the params Map that Analytic Workspace Manager passes to the methods of the DimEditorPlugin when the user selects the CHANNEL dimension in the MyDims folder, as shown in Figure 3-11. The property inspector in the figure has the output of the DimEditorPlugin.

An example of getting a value from the params Map is the following line from the getMetadataProvider method in the DimEditorPlugin class in Example 3-9.

Object dp = params.get("DATAPROVIDER");

Another example of getting a value from the params Map is the following lines from the getDimension method in the DimEditorPlugin class.

Object obj = null;
...
obj = params.get("dimobj");

Table 2-9 Keys and Values of the params Map for DimEditorPlugin

KeyValueDescription

AW

An AW.

The current analytic workspace object.

aw_name

GLOBAL

The name of the current analytic workspace.

DATAPROVIDER

An MdmMetadataProvider

The metadata provider for the session.

DATASOURCE

A DataSource

The current data source.

dimobj

CHANNEL

The run-time value of the dimension currently selected in the MyDims folder.

ISFOLDER

TRUE

Indicates that the navigation tree object is a folder.

NODE_TYPE

MyDims

The name of the parent <AWMNode>.

owner

GLOBAL

The name of the owner of the analytic workspace.

schema

GLOBAL

The name of the current schema.

TYPE

dimobj

The type of the <AWMNode>.

user

global

The name of the current user.


Steps in Creating a Plug-in

The prerequisites for creating an Analytic Workspace Manager plug-in are the following:

  • For the Analytic Workspace Manager that is part of an Oracle Database Enterprise Edition distribution, include the following files in your development environment. These JAR files are located in the Oracle_home/olap/api/lib directory in the Oracle Database installation.

    • awm.jar, which contains the plug-in interfaces.

    • olap_api.jar, which contains the classes in the Oracle OLAP Java API.

    • awxml.jar, which contains the oracle.AWXML.AW class, which the AWMPlugin interface includes for compatibility with the 10g release of Analytic Workspace Manager.

  • For an Analytic Workspace Manager that you have downloaded from Oracle Technology Network, include the awm11.2.0.1.0.jar file in your development environment.

  • Compile the code with JDK 1.5.


Note:

Only plug-ins compiled with JDK 1.5 are compatible with Analytic Workspace Manager in 11g Release 2 (11.2).

To create an Analytic Workspace Manager plug-in, do the following:

  1. Create a class that implements a plug-in interface.

    • For an AWMPlugin, do the following.

      • In the isSupported method, specify the objects in the navigation tree to which the plug-in applies. Be sure to have this method return quickly.

      • Have the getMenu method return the text to display on the right-click menu for navigation tree objects that the plug-in supports.

      • In the handle method, include the code for the operations that the plug-in performs.

      • Have the refreshTree method return a boolean that specifies whether to refresh the navigation tree.

    • For ViewerPlugin, do the following.

      • In the isViewerForType method, specify the type of navigation tree objects to which the plug-in applies.

      • Have the getPanel method create the user interface elements for Analytic Workspace to display and specify the actions for them.

      • In the cleanup method, perform any cleaning up that your plug-in requires.

    • For an EditorPlugin, do the steps for a ViewerPlugin and add the following.

      • In the setValueChanged method, store the PanelChanged object from Analytic Workspace Manager. Call the changed method of the PanelChanged whenever you want to update the display in the property inspector.

      • In the validate method, validate any change that the user has made.

      • In the save method, perform the actions required to make the changes and then commit the current Transaction to save the changes.

      • In the revert method, display the object as it was before the changes.

  2. Using JDK 1.5, compile the plug-in and any other classes that it uses.

  3. Deploy the plug-in, XML documents, and other classes to a JAR file. You can include multiple plug-ins in the same JAR file.

  4. Put the JAR file in the plug-ins directory.

  5. Start Analytic Workspace Manager.


Note:

Analytic Workspace Manager only loads the contents of the JAR files upon startup, so if you put a new or updated version of a JAR file in the plug-ins directory, then you must restart Analytic Workspace Manager.

To use a ViewerPlugin or EditorPlugin, you generally do the following steps.

  • Create an XML document that has the name schema.xml, aw.xml, cube.xml, or dimension.xml, depending on where in the navigation tree you want the custom objects to appear. In the XML document, you can have multiple <AWMNode> elements at the same level. You can also nest one or more <AWMNode> elements in a parent <AWMNode> element.

  • Develop the SQL statements to specify with <AWMNode> elements.

  • Implement the ViewerPlugin or EditorPlugin interface.

  • Specify the SQL statement for an <AWMNode> with the sql attribute. Specify a plug-in with the viewClass attribute.

  • Deploy the XML document and plug-in implementation in a JAR file. You can have multiple XML documents and plug-ins in the same JAR file. You can put the XML documents in the same JAR file as the plug-ins.

  • Put the JAR file in the Analytic Workspace Manager directory for plug-ins.

  • Start Analytic Workspace Manager.

Describing the Available Plug-ins

You can provide information about the plug-ins that you add to Analytic Workspace Manager by creating an awmplugin.xml document. In that XML document, you can provide a name, a version number, and a description for each plug-in. Analytic Workspace Manager displays that information, along with the status of the plug-in, when a user selects the Plugins tab after selecting About on the Help menu.

Creating an XML Document for Descriptions of Plug-ins

  1. Create a text file named awmplugin.xml.

  2. Begin the file with an XML declaration like this one:

    <?xml version="1.0" encoding="utf-8"?>
    

    Specify the appropriate encoding for your site.

  3. Enter the XML for the plug-in descriptions, as described in "Reference: Elements for Plug-in Descriptions".

  4. For the name attribute of the <Plugin> element, enter a name for the plug-in. For the version attribute, enter the version number of the plug-in. For the class attribute, enter the class that contains the plug-in. For the <Description> element, enter a description of the plug-in.

  5. In the plug-directory, create a JAR file that contains the awmplugin.xml document. Alternatively, you could add the awmplugin.xml document to a JAR file that contains the XML documents described in "Creating Reports in Object Folders" or the plug-ins.

For a sample awmplugin.xml file, see "Example of Plug-in Descriptions".

Reference: Elements for Plug-in Descriptions

An XML document for describing the available plug-ins has the format shown in Example 2-1.

Example 2-1 XML Structure for Descriptions of Plug-ins

<AWMPlugins>
  <Plugin>
    <Description>
         .
         .
         .

<AWMPlugins>

The root element that identifies this document as containing information about the Java plug-ins that are available to Analytic Workspace Manager.

Contains

<Plugin>

Attributes

None

<Plugin>

Contains information about a plug-in.

Contains

<Description>

Attributes

<Plugin> has the following attributes:

  • name: A name for the plug-in.

  • version: A version number for the plug-in.

  • class: The Java class that implements the plug-in.

<Description>

Contains a description of the plug-in.

Contains

None

Attributes

None

PKz{zPKPFJOEBPS/pluginexamples.htm Examples of Analytic Workspace Manager Plug-ins

3 Examples of Analytic Workspace Manager Plug-ins

This chapter contains examples of the Java classes that implement the AWMPlugin, ViewerPlugin, and EditorPlugin interfaces. It also contains the example XML documents that specify the plug-ins.

This chapter contains the following topics:

Availability of Example Classes and XML Documents

The examples of Java classes and XML documents in this chapter and in Chapter 1 contain the complete code for the class or document. The complete code is also available in a compressed file that you can download from the Oracle Technology Network (OTN) Web site. The download includes the compiled class files for the plug-ins, as well. The OTN Web site is at

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

To get the examples, in the Download section of the Web page, select Sample Code and Schemas. On the Oracle OLAP Downloads page, in the Sample Schemas and Code section, under Oracle OLAP 11g, in the AWM Java Plug-ins and XML Documents for 11.2.0.2 line, click examples.

The compressed file customizingAWM_examples11202.zip contains the following files.

FilenameDescription
readme.txtBriefly describes the contents of the zip file.
awmcalcs.xmlContains the XML for Example 1-9, "Sample AWMCalcs Document".
awmtree.xmlContains the XML for Example 1-3, "Passing the Name of a View to a SELECT Statement".
plugin11202.jarContains a directory named plugin11202, which is the package containing the examples. In the directory are the xml, java, and class files for the examples in Chapter 3.

You put the awmcalcs.xml and awmtree.xml files in the same directory as the Analytic Workspace Manager executable file. You put the plugin11202.jar file in the directory that you specify for plug-ins, as described in "Enabling Analytic Workspace Manager Plug-ins".

Examples of AWMPlugin

The examples of an AWMPlugin are in the following topics.

The examples do not include the documentation comments of the methods of the AWMPlugin interface or the input parameters and return values of those methods. Those methods and parameters are described in "Describing the AWMPlugin Interface".

ViewXMLPlugin Example

The ViewXMLPlugin class displays an XML representation of a measure or a custom measure of a cube in the Cubes folder in the Analytic Workspace Manager navigation tree. Example 3-1 contains the code for the class. The plug-in applies to oracle.olap.metadata.mdm.MdmBaseMeasure and oracle.olap.metadata.mdm.MdmDerivedMeasure objects, which correspond to the Measure and Calculated Measure objects, respectively, of a cube.

The plug-in gets and displays an XML representation of a measure. Figure 2-3 shows the menu that Analytic Manager Workspace displays for ViewXMLPlugin when a user right-clicks a measure. For an example of the dialog box that ViewXMLPlugin displays, see Figure 3-1, "Dialog Box Displayed by ViewXMLPlugin".

Example 3-1 The ViewXMLPlugin Class

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import oracle.AWXML.AW;
import oracle.olap.awm.plugin.AWMPlugin;
import oracle.olapi.metadata.mdm.MdmBaseMeasure;
import oracle.olapi.metadata.mdm.MdmDerivedMeasure;
import oracle.olapi.metadata.mdm.MdmMetadataProvider;
import oracle.olapi.metadata.mdm.MdmObject;

/**
 * An implementation of the AWMPlugin interface that displays the XML
 * representation of an Oracle OLAP measure object.
 */
public class ViewXMLPlugin implements AWMPlugin
{
  public boolean isSupported(Connection conn, String type, Object obj, 
                             AW aw, Map params)
  {
    // Support MdmBaseMeasure and MdmDerivedMeasure objects.
    if (obj instanceof MdmBaseMeasure || obj instanceof MdmDerivedMeasure)
    {
      return true;
    }
    return false;
  }

  public String getMenu(Connection conn, String type, Object obj, AW aw, 
                        Map params)
  {
    // Text to display on the right-click menu.
    String menu = "View XML Example Plug-in";
    return menu;
  }

  public void handle(Frame parent, Connection conn, String type, Object obj,
                     AW aw, Map params)
  {
    if (obj instanceof MdmObject)
    {
      // Get the MdmMetadataProvider to use in exporting the XML.
      Object objdp = params.get("DATAPROVIDER");
      if (objdp != null)
      {
        MdmObject mobj = (MdmObject)obj;
        MdmMetadataProvider mdp = (MdmMetadataProvider)objdp;
 
        // Get the XML representation of the MdmObject.
        List objects = new ArrayList();
        objects.add(mobj);
        Map renameMap = null;
        boolean includeOwnerString = true;
        String title = "XML for " + mobj.getName();
        try
        {
          String xml =
            mdp.exportFullXML(objects, renameMap, includeOwnerString);
          // Create a dialog box and display the XML.
          DisplayXMLDialog dxd = new DisplayXMLDialog(parent, title, true,
                                                      xml);
        }
        catch (IOException ie)
        {
          // Ignore error.
        }
      }
    }
  }

  public boolean refreshTree(Connection conn, String type, Object obj, AW aw,
                             Map params)
  {
    // This example does not create new metadata objects, so return false.
    return false;
  }

  /**
   * An inner class that creates a dialog box that displays the XML.
   */
  class DisplayXMLDialog extends JDialog implements ActionListener
  {
    /**
     * Creates a DisplayXMLDialog for displaying the contents of the xml
     * parameter.
     * 
     * @param parent A Frame that is provided by Analytic Workspace Manager.
     * @param title A String that contains text to use as the title for the
     *              dialog box.
     * @param modal A boolean that specifies whether the dialog box is modal.
     * @param xml A String that contains the XML to display.
     */
    public DisplayXMLDialog(Frame parent, String title, boolean modal,
                            String xml)
    {
      super(parent);
      setLocation(200, 200);
      setTitle(title);
      setModal(modal);
      
      try
      {
        displayXML(xml);
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
 
    /**
     * Creates a dialog box and displays the contents of a String.
     * 
     * @param xml A String that contains the XML to display.
     */
    private void displayXML(String xml)
    {
      JTextArea ta = new JTextArea(xml);
      ta.setEditable(false);
      Font of = ta.getFont();
      Font f = new Font("Courier New", of.getStyle(), of.getSize());
      ta.setFont(f);

      JScrollPane p = new JScrollPane();
      p.getViewport().add(ta);

      JPanel buttonPane = new JPanel();
      JButton button = new JButton("Close");
      buttonPane.add(button);
      button.addActionListener(this);
      getContentPane().add(buttonPane, BorderLayout.SOUTH);
      
      getContentPane().add(p, BorderLayout.NORTH);
      setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      pack();
      setVisible(true);
    }

    /**
     * Performs an action for the Close button.
     * 
     * @param e An ActionEvent for the Close button.
     */
    public void actionPerformed(ActionEvent e)
    {
      setVisible(false);
      dispose();
    }
  }
}

Figure 3-1 illustrates the dialog box that ViewXMLPlugin displays for the PROFIT calculated measure in the UNITS_CUBE folder.

Figure 3-1 Dialog Box Displayed by ViewXMLPlugin

Description of Figure 3-1 follows

DeleteDimPlugin Example

The DeleteDimPlugin class deletes the dimension that the user has selected in the navigation tree. The plug-in only applies to dimension objects that are in a custom folder and that have dimobj as the value of the TYPE key of the params Map. The DeleteDimPlugin plug-in is specified by the aw.xml document in Example 3-7.

Example 3-2 contains the code for the DeleteDimPlugin class.

Example 3-2 The DeleteDimPlugin Class

package plugin11202;
 
import java.awt.Frame;
import java.sql.Connection;
import java.util.Map;
import javax.swing.JOptionPane;
import oracle.AWXML.AW;
import oracle.olap.awm.plugin.AWMPlugin;
import oracle.olapi.metadata.mdm.MdmMetadataProvider;
import oracle.olapi.metadata.mdm.MdmObject;
import oracle.olapi.metadata.mdm.MdmPrimaryDimension;
import oracle.olapi.metadata.mdm.MdmSchema;

/**
 * An implementation of the AWMPlugin interface that can delete
 * an Oracle OLAP dimension object in a custom folder.
 */
public class DeleteDimPlugin implements AWMPlugin
{
  // This plug-in applies to dimension objects in a custom folder.
  public boolean isSupported(Connection conn, String type, Object obj, AW aw,
                             Map params)
  {
    if (params != null)
    {
      // Get the value of the type attribute of the AWMNode that specifies this
      // plug-in.
      Object nodeType = params.get("TYPE");
      if (nodeType != null && ((String)nodeType).equalsIgnoreCase("dimobj"))
        return true;
    }
    return false;
  }
 
  public String getMenu(Connection conn, String type, Object obj, AW aw,
                        Map params)
  {
    Object dimName = null;
    if (obj != null && obj instanceof String)
    {
      dimName = (String) obj;
    }
    // Text to display on the right-click menu.
    return "Example Plug-in: Delete Dimension " + dimName;
  }
 
  public void handle(Frame parent, Connection conn, String type, Object obj,
                     AW aw, Map params)
  {
    String dimName = "";
    // The obj parameter should be the name of the currently selected dimension.
    if (obj != null && obj instanceof String)
    {
      dimName = (String) obj;
      String title = "Delete Dimension";
      if (JOptionPane.showConfirmDialog(parent, "Delete " + dimName + "?",
                                        title, JOptionPane.YES_NO_OPTION) ==
                                        JOptionPane.NO_OPTION)
        return;
    }

    if (params != null)
    {
      Map bindMap = (Map)params.get("BIND_MAP");
      if (bindMap != null)
      {
        // Get the name of the owner, which is also the name of the schema.
        String owner = (String)bindMap.get("owner");
        // Get the currently selected dimension.
        MdmPrimaryDimension dim = getDimension(dimName, owner, params);

        if (dim != null)
        {
          // Get the schema object that contains the dimension.
          MdmSchema schema = dim.getOwner();
          schema.removeDimension(dim);
          MdmMetadataProvider mdp = getMetadataProvider(params);
          // Get the TransactionProvider and commit the current Transaction.
          try
          {
            mdp.getDataProvider()
               .getTransactionProvider()
               .commitCurrentTransaction();
            JOptionPane.showMessageDialog(parent,
                                          owner + "." + dimName +
                                          " dimension has been deleted.");
          }
          catch (Exception e)
          {
            JOptionPane.showMessageDialog(parent, e.getMessage(), "Error",
                                          JOptionPane.ERROR_MESSAGE);
            // Roll back the current Transaction.
            try
            {
              mdp.getDataProvider()
                 .getTransactionProvider()
                 .rollbackCurrentTransaction();
            }
            catch (Exception e2)
            {
              // Ignore the exception.
            }
          }
        }
      }
      else
      {
        return;
      }
    }
  }
 
  public boolean refreshTree(Connection conn, String type, Object obj, AW aw,
                             Map params)
  {
    return true;
  }
 
  // Get the MdmMetadataProvider.
  private MdmMetadataProvider getMetadataProvider(Map params)
  {
    Object dp = params.get("DATAPROVIDER");
    if (dp instanceof MdmMetadataProvider)
    {
      MdmMetadataProvider mdp = (MdmMetadataProvider)dp;
      return mdp;
    }
    return null;
  }
 
  // Get the currently selected dimension.
  private MdmPrimaryDimension getDimension(String dimName, String schema,
                                           Map params)
  {
    if (params != null)
    {
      MdmMetadataProvider mdp = getMetadataProvider(params);
      if (mdp != null)
      {
        // Get the dimension from the MdmMetadataProvider.
        MdmObject mobj = mdp.getMetadataObject(schema + "." + dimName);
        if (mobj != null && mobj instanceof MdmPrimaryDimension)
        {
          MdmPrimaryDimension dim = (MdmPrimaryDimension)mobj;
          return dim;
        }
      }
    }
    return null;
  }
}

Figure 3-2 shows the menu that Analytic Manager Workspace displays for DeleteDimPlugin. The figure shows the menu that appears when a user right-clicks the CUSTOMER dimension in the MyDims folder. The MyDims folder is created by the aw.xml document in Example 3-7.

Figure 3-2 Right-click Menu Displayed by DeleteDimPlugin

Description of Figure 3-2 follows

If the user clicks Example Plug-in: Delete Dimension CUSTOMER, then DeleteDimPlugin displays the dialog box shown in Figure 3-3.

Figure 3-3 Dialog Box Displayed by DeleteDimPlugin

Description of Figure 3-3 follows

Examples of ViewerPlugin and EditorPlugin

The example ViewerPlugin and EditorPlugin implementations are in the following topics:

The topics include the XML documents that specify the plug-ins.

The methods of the ViewerPlugin and EditorPlugin interfaces are described in "Describing the ViewerPlugin and EditorPlugin Interfaces".

LevelViewerPlugin Example

The dimension.xml document in Example 3-3 has an <AWMNode> that specifies a folder named MyLevels and a SQL statement that selects the names of the levels of the currently selected dimension from the USER_CUBE_DIM_LEVELS table. An unnamed child <AWMNode> specifies the LevelViewerPlugin. Figure 3-4 shows the navigation tree folder and the display in the property inspector for the document.

Example 3-3 Creating a dimension.xml Document

<?xml version="1.0" encoding="US-ASCII" ?>
<AWMTree>
  <AWMNode name="MyLevels"
           type="levelobj"
           sql="select level_name from user_cube_dim_levels where dimension_name = {dimension_name} ">
    <AWMNode type="levelview"
             viewClass="plugin11202.LevelViewerPlugin"/>  
  </AWMNode>
</AWMTree>

Example 3-4 contains the LevelViewerPlugin class. The class displays the name of the currently selected level, as shown in Figure 3-5.

Example 3-4 The LevelViewerPlugin Class

package plugin11202;
 
import java.awt.FlowLayout;
import java.sql.Connection;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JPanel;
import oracle.olap.awm.plugin.ViewerPlugin;
 
public class LevelViewerPlugin implements ViewerPlugin
{
  public boolean isViewerForType(Connection conn, String name)
    throws Exception
  {
    return true;
  }
 
  public JPanel getPanel(Connection conn, String name, Map params)
    throws Exception
  {
    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());
    // Get the name of the current level.
    Object obj = params.get("levelobj");
    if (obj instanceof String)
    {
      String levelName = (String)obj;
      panel.add(new JLabel(levelName));
    }
    return panel;
  }
  
  public void cleanup(String name)
  {     
  }
}

Figure 3-4 shows the results of the MyLevels <AWMNode> in the dimension.xml document. A MyLevels folder appears in each dimension folder of the analytic workspace. The user has selected the MyLevels folder in the PRODUCT folder. The result of the SQL statement of the <AWMNode> appears in the MyLevels folder. The property inspector displays the same SQL statement and the result of it, which is a list of the levels of the dimension.

Figure 3-4 Results of the MyLevels <AWMNode> in dimension.xml

Description of Figure 3-4 follows

Figure 3-5 shows the results of the unnamed child <AWMNode> of the MyLevels <AWMNode> in the dimension.xml document. The user has selected the FAMILY level in the MyLevels folder. The property inspector displays the user interface specified by LevelViewerPlugin. The plug-in displays the name of the level.

Figure 3-5 Results of LevelViewerPlugin

Description of Figure 3-5 follows

MeasureViewerPlugin Example

The cube.xml document in Example 3-5 has an <AWMNode> that specifies a folder named MyMeasures and a SQL statement that selects the names of the measures of the currently selected cube from the USER_CUBE_MEASURES table. An unnamed child <AWMNode> specifies the MeasureViewerPlugin plug-in. Figure 3-6 shows the navigation tree folder and the display in the property inspector for the document.

Example 3-5 Creating a cube.xml Document

<?xml version="1.0" encoding="US-ASCII" ?>
<AWMTree>
  <AWMNode name="MyMeasures"
           type="measureobj" 
           sql="select measure_name from user_cube_measures where cube_name = {cube_name}">
    <AWMNode type="measureview"
             viewClass="plugin11202.MeasureViewerPlugin"/>
  </AWMNode>
</AWMTree>

Example 3-6 contains the MeasureViewerPlugin class. The class displays the name of the currently selected measure, as shown in Figure 3-7.

Example 3-6 The MeasureViewerPlugin Class

package plugin11202;
 
import java.awt.FlowLayout;
import java.sql.Connection;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JPanel;
import oracle.olap.awm.plugin.ViewerPlugin;
 
public class MeasureViewerPlugin implements ViewerPlugin
{
  public boolean isViewerForType(Connection conn, String name)
    throws Exception
  {
    return true;
  }   
 
  public JPanel getPanel(Connection conn, String name, Map params)
    throws Exception
  {
    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());

    // Get the name of the current measure.
    Object measureobj = null;
    if (params != null)
      measureobj = params.get("measureobj");

    if (measureobj instanceof String)
    {
      String measureName = (String)measureobj;
      panel.add(new JLabel(measureName));
    }
    return panel;
  }
 
  public void cleanup(String name)
  {   
  }
}

Figure 3-6 shows the results of the MyMeasures <AWMNode> in the cube.xml document. A MyMeasures folder appears in each cube folder of the analytic workspace. The user has selected the MyMeasures folder in the UNITS_CUBE folder. The result of the SQL statement of the <AWMNode> appears in the MyMeasures folder. The property inspector displays the same SQL statement and the result of it, which is a list of the measures and calculated measures of the cube.

Figure 3-6 Results of the MyMeasures <AWMNode> in cube.xml

Description of Figure 3-6 follows

Figure 3-7 shows the results of the unnamed child <AWMNode> of the MyMeasures <AWMNode> in the cube.xml document. The user has selected the UNITS measure in the MyMeasures folder. The property inspector displays the user interface specified by MeasureViewerPlugin. The plug-in displays the name of the measure.

Figure 3-7 Results of MeasureViewerPlugin

Description of Figure 3-7 follows

CubeViewerPlugin Example

The aw.xml document in Example 3-7 has an <AWMNode> that specifies a folder named MyDims. For a description of the MyDims <AWMNode>, see "DimEditorPlugin Example".

The aw.xml document also has an <AWMNode> that specifies a folder named MyCubes and a SQL statement that selects the names of the cubes of the current analytic workspace from the USER_CUBES table. An unnamed child <AWMNode> specifies the CubeViewerPlugin. Figure 3-8 shows the navigation tree folder and the display in the property inspector for the MyCubes <AWMNode>.

Example 3-7 Creating an aw.xml Document

<?xml version="1.0" encoding="US-ASCII" ?>
<AWMTree>
  <AWMNode name="MyDims"
           type="mydimfolder"
           viewSql="select dimension_name, dimension_type from user_cube_dimensions where aw_name = {aw_name}">
    <AWMNode type="dimobj"
             sql="select dimension_name from user_cube_dimensions where aw_name = {aw_name}"
             viewClass="plugin11202.DimEditorPlugin">
    </AWMNode>
      <AWMNode name="MyLevels"
               type="levelobj"
               sql="select level_name from user_cube_dim_levels where dimension_name = {dimobj}">
        <AWMNode sql="select * from user_cube_dim_levels where dimension_name = {dimobj} and level_name = {levelobj}"/>
      </AWMNode>
  </AWMNode>
  <AWMNode name="MyCubes"
           type="cubeobj"
           sql="select cube_name from user_cubes where aw_name = {aw_name}">
    <AWMNode type="mycubeview"
             viewClass="plugin11202.CubeViewerPlugin"/>
  </AWMNode>
</AWMTree>

Example 3-8 contains the CubeViewerPlugin class. The class displays the name of the currently selected cube, as shown in Figure 3-9.

Example 3-8 The CubeViewerPlugin Class

package plugin11202;
 
import java.awt.FlowLayout;
import java.sql.Connection;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JPanel;
import oracle.olap.awm.plugin.ViewerPlugin;
 
public class CubeViewerPlugin implements ViewerPlugin
{
  public boolean isViewerForType(Connection conn, String name)
    throws Exception
  {
    return true;
  }
  
  public JPanel getPanel(Connection conn, String name, Map params)
    throws Exception
  {
    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());
    // Get the name of the current cube.
    Object cubeobj = null;
    if (params != null)
      cubeobj = params.get("cubeobj");
    if (cubeobj instanceof String)
    {
      String cubeName = (String)cubeobj;
      panel.add(new JLabel(cubeName));
    }
    return panel;
  }
 
  public void cleanup(String name)
  {
  }
}

Figure 3-8 shows the results of the MyCubes <AWMNode> in the aw.xml document. A MyCubes folder appears in the GLOBAL analytic workspace folder. The user has selected the MyCubes folder. The result of the SQL statement of the <AWMNode> appears in the folder. The property inspector displays the same SQL statement and the result of it, which is a list of the cubes of the analytic workspace.

Figure 3-8 Results of the MyCubes <AWMNode> in aw.xml

Description of Figure 3-8 follows

Figure 3-9 shows the results of the unnamed c':hild <AWMNode> of the MyCubes <AWMNode> in the aw.xml document. The user has selected the UNITS_CUBE cube in the MyCubes folder. The property inspector displays the user interface specified by CubeViewerPlugin. The plug-in displays the name of the cube.

Figure 3-9 Results of the CubeViewerPlugin

Description of Figure 3-9 follows

DimEditorPlugin Example

The aw.xml document in Example 3-7 has an <AWMNode> that specifies a folder named MyDims and a SQL statement that selects the names and types of the dimensions of the current analytic workspace from the USER_CUBE_DIMENSIONS table. Figure 3-10 shows the navigation tree folder and the display in the property inspector for the MyDims <AWMNode>.

An unnamed child <AWMNode> specifies a SQL statement that selects the names of the dimensions and also specifies the DimEditorPlugin. Figure 3-11 shows the navigation tree folder and the display in the property inspector for the MyDims <AWMNode>.

The <AWMNode> named MyLevels, nested in the unnamed <AWMNode>, selects the names of the levels from the USER_CUBE_DIM_LEVELS table for the currently selected dimension. The MyLevels <AWMNode> has an unnamed nested <AWMNode> that selects all columns from the USER_CUBE_DIM_LEVELS table for the currently selected dimension and level.

Example 3-9 contains the DimEditorPlugin class. The class displays the name and the short description of the currently selected dimension, as shown in Figure 3-11. The user can change the value of the short description.

Example 3-9 The DimEditorPlugin Class

package plugin11202;
 
import java.awt.Component;
import java.awt.GridLayout;
import java.sql.Connection;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import oracle.olap.awm.plugin.EditorPlugin;
import oracle.olap.awm.plugin.PanelChanged;
import oracle.olapi.metadata.mdm.MdmDescriptionType;
import oracle.olapi.metadata.mdm.MdmMetadataProvider;
import oracle.olapi.metadata.mdm.MdmObject;
import oracle.olapi.metadata.mdm.MdmPrimaryDimension;
 
public class DimEditorPlugin implements EditorPlugin
{
  private JTextField shortDescTextField;
  private PanelChanged parentPanelChanged;
  private JPanel panel;
  private JLabel dimNameLabel;
  private MdmDescriptionType mdmShortDescrDescrType;

  public DimEditorPlugin()
  {
    panel = new JPanel();
    panel.setLayout(new GridLayout(3, 1));
    dimNameLabel = new JLabel();
    panel.add(dimNameLabel);
    shortDescTextField = new JTextField();
    panel.add(new JLabel("Short Description:"));
    panel.add(shortDescTextField);
    shortDescTextField.getDocument().addDocumentListener(new DocumentListener()
        {
          public void insertUpdate(DocumentEvent e)
          {
            changed();
          }
 
          public void removeUpdate(DocumentEvent e)
          {
            changed();
          }
 
          public void changedUpdate(DocumentEvent e)
          {
            changed();
          }
        });
  }
 
  public boolean isViewerForType(Connection conn, String name)
    throws Exception
  {
    return true;
  }
 
  // Get the MdmMetadataProvider of the session.
  private MdmMetadataProvider getMetadataProvider(Map params)
  {
    Object dp = params.get("DATAPROVIDER");
    if (dp instanceof MdmMetadataProvider)
    {
      MdmMetadataProvider mdp = (MdmMetadataProvider)dp;
      return mdp;
    }
    return null;
  }
  
  // Get the currently selected dimension and the schema from the params Map.
  // Get the MdmMetadataProvider and get the MdmPrimaryDimension for the
  // dimension.
  private MdmPrimaryDimension getDimension(Map params)
  {
    Object obj = null;
    String schema = "";
    if (params != null)
    {
      obj = params.get("dimobj");
      schema = (String)params.get("schema");
    }
    if (obj instanceof String)
    {
      String dimName = (String)obj;
      MdmMetadataProvider mdp = getMetadataProvider(params);
      if (mdp != null)
      {
        MdmObject mobj = mdp.getMetadataObject(schema + "." + dimName);
        if (mobj != null && mobj instanceof MdmPrimaryDimension)
        {
          MdmPrimaryDimension dim = (MdmPrimaryDimension)mobj;
          return dim;
        }
        else
          System.out.println("Cannot get the " + dimName + " dimension.");
      }
    }
    return null;
  }
 
  // Get the dimension and the short description of it. 
  // Display the short description.
  private void read(Map params)
  {
    MdmPrimaryDimension dim = getDimension(params);
    if (dim != null)
    {
      dimNameLabel.setText(dim.getName());
      mdmShortDescrDescrType =
        MdmDescriptionType.getShortDescriptionDescriptionType();
      String shortDesc = dim.getDescription(mdmShortDescrDescrType);
      shortDescTextField.setText(shortDesc);
    }
  }
 
  public JPanel getPanel(Connection conn, String name, Map params)
    throws Exception
  {
    read(params);
    return panel;
  }
 
  public void cleanup(String name)
  {  
  }
 
  public boolean validate(Connection conn, Component parent, String name,
                          Map params)
    throws Exception
  {
    String invalidDescr = "foo";
    if (shortDescTextField.getText().equals(invalidDescr))
    {
      JOptionPane.showMessageDialog(parent, "Description cannot be " +
                                    invalidDescr + ".");
      return false;
    }
    return true;
  }
 
  public void revert(Connection conn, Component parent, String name,
                     Map params)
    throws Exception
  {
    read(params);
  }
 
  public void showHelp(Connection conn, Component parent, String name,
                       Map params)
    throws Exception
  {
    JOptionPane.showMessageDialog(parent, "In Help.");
  }
 
  public boolean save(Connection conn, Component parent, String name,
                      Map params)
    throws Exception
  {
    // Get the currently selected dimension and set the short description for 
    // it.
    MdmPrimaryDimension dim = getDimension(params);
    dim.setDescription(mdmShortDescrDescrType, shortDescTextField.getText());
    // Get the MdmMetadataProvider.
    MdmMetadataProvider mdp = getMetadataProvider(params);
    if (mdp == null)
      return false;
    // Get the DataProvider and the TransactionProvider and commit the current
    // Transaction. If the Transaction is not committable, roll it back.
    try
    {
      mdp.getDataProvider().getTransactionProvider().commitCurrentTransaction();
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(parent, e.getMessage(), "Error",
                                    JOptionPane.ERROR_MESSAGE);
      try
      {
        mdp.getDataProvider()
           .getTransactionProvider()
           .rollbackCurrentTransaction();
      }
      catch (Exception e2)
      {
        // Ignore the exception.
      }
    }
    return true;
  }
 
  public void setValueChanged(Connection conn, String name, Map params,
                              PanelChanged parentPanelChanged)
  {
    this.parentPanelChanged = parentPanelChanged;
  }
 
  
  // Calls the changed() method of the PanelChanged object supplied by
  // Analytic Workspace Manager when it calls the setValueChanged method.
  public void changed()
  {
    if (parentPanelChanged != null)
      parentPanelChanged.changed();
  }  
}

Figure 3-10 shows the results of the MyDims <AWMNode> in the aw.xml document. A MyDims folder appears in the GLOBAL analytic workspace folder. The user has selected the MyDims folder. The property inspector displays the SQL statement of the MyDims <AWMNode> and the result of it, which is a table that has columns headed DIMENSION_NAME and DIMENSION_TYPE. The rows of the columns contains the names of the dimensions of the analytic workspace and the types of the dimensions.

The MyDims <AWMNode> has an unnamed child <AWMNode> that has a SQL statement that retrieves the names of the dimensions. Those names appear in the MyDims folder in the navigation tree. The unnamed <AWMNode> also specifies the DimEditorPlugin plug-in.

Figure 3-10 Results of the MyDims <AWMNode> in aw.xml

Description of Figure 3-10 follows

Figure 3-11 shows the Analytic Workspace Manager user interface after a user has selected the CHANNEL dimension in the MyDims folder in the navigation tree. The property inspector displays the user interface specified by DimEditorPlugin. The user interface includes a text field in which the user can change the value of the short description attribute.

Figure 3-11 Results of DimEditorPlugin

Description of Figure 3-11 follows

Figure 3-12 shows the result of the MyLevels <AWMNODE> that is the child of the MyDims <AWMNODE> in the aw.xml document. The SQL statement of the MyLevels <AWMNode> selects the LEVEL_NAME column from the USER_CUBE_DIM_LEVELS table for the currently selected dimension. Figure 3-12 shows the navigation tree folder with the MyLevels folder selected in the CHANNEL folder. In the property inspector is the result of the query.

Figure 3-12 Result of MyLevels <AWMNode> Under MyDims in aw.xml

Description of Figure 3-12 follows

Figure 3-13 shows the result of the unnamed <AWMNODE> that is the child of the MyLevels <AWMNODE> in the aw.xml document. The SQL statement of the unnamed <AWMNode> selects all columns from the USER_CUBE_DIM_LEVELS table for the currently selected dimension and level. Figure 3-13 shows the navigation tree folder with the TOTAL level selected in the MyLevels folder in the CHANNEL folder. The property inspector displays the result of the query.

Figure 3-13 Results of the Nested <AWMNode> in the MyLevels <AWMNode> in aw.xml

Description of Figure 3-13 follows

Example of Plug-in Descriptions

As discussed in "Describing the Available Plug-ins", the awmplugin.xml file contains descriptions of Java plug-ins that Analytic Workspace Manager displays. Figure 3-14 shows the Plugins tab of the About dialog box with the information that is specified by the awmplugin.xml document in Example 3-10.

Figure 3-14 Plugins Tab in the About Dialog Box

Description of Figure 3-14 follows

Example 3-10 shows the awmplugin.xml document that produces the result shown in Figure 3-14.

Example 3-10 Creating an awmplugins.xml Document

<?xml version="1.0" encoding="utf-8" ?>
<AWMPlugins>
  <Plugin name="Cube Viewer Plug-in" version="1.0"
          class="plugin11202.CubeViewerPlugin">
    <Description>Displays the name of a cube.</Description>
  </Plugin>
  <Plugin name="Level Viewer Plug-in" version="1.0"
          class="plugin11202.LevelViewerPlugin">
    <Description>Displays the name of a level.</Description>
  </Plugin>
  <Plugin name="Measure Viewer Plug-in" version="1.0"
          class="plugin11202.MeasureViewerPlugin">
    <Description>Displays the name of a measure.</Description>
  </Plugin>
  <Plugin name="Delete Dimension Plug-in" version="2.0"
          class="plugin11202.DeleteDimPlugin">
    <Description>Deletes a dimension in the MyDims folder.</Description>
  </Plugin>
  <Plugin name="Edit Dimension Plug-in" version="2.0"
          class="plugin11202.DimEditorPlugin">
    <Description>Edits the short description of a dimension.</Description>
  </Plugin>
  <Plugin name="View XML Plug-in" version="1.0" class="plugin11202.ViewXMLPlugin">
    <Description>Displays the XML for an OLAP measure.</Description>
  </Plugin>
</AWMPlugins>
PK 1'PKPFJOEBPS/img/gregorian.gif"GIF89aV1 1icececk8Jõýǽ˽Ͻq!,Va@HȰÇ#JHŋ3jȱǏ CIɓ(S\ɲKH ͂.|ɳϟ@ JѣH*́8otsիXjʵׯ`6efYTU۷pʝKݻx˷߿ LÈ+^̸c *Mx&ԩ:Ug3BpAӨS^ͺװc˞M۸sͻ Nx+P0dϢGνO⏷XĈGaՉb]߀0]70z 2xÃF(Vhf v ($h(,0(4h*h $CGtQ`ɑ'YWCh %2Xfe7v`)dihr#  yt!ِ~ g z"ߞ_|2'~&:N$4`1`饘妜vze*ꨤjꩨꪬ*무j뭸暫 ɐf Y'lޙ}٬B QNC[覫+k,0B# &DlTs.[mFkq _iѶN- !ʜ ,4l8wb.MG$J$?=F%<y7|?yw}#G(g[WڀKC#^"=Gy֯~ÇW̐֊OG߃_=5H>~7|/_ )w׻Nj> ~oG~zG|~|w'|7 k|<ևؗXW8'H|g~)H xBΧ2q~t'{R6H68ǃ;ȃC헃5H0/W.&sݗz.}+8~.X(pDlp?G(a(GVɲ18-(<<2(u'8qh8'-bXgwȆ8xr,ll}mL3`Hbcȉvxny؉uF?芲8H7MVg}'kxg|YH~Hko&f1V~SkF1Wm}؉'8~x565m XWmyxcoc88lt~h8V؎yh AJh9Dȋi?!)NV.uc]xxm8'Ȓ)i'&VqՈpݘܸ%im1iq{Ch0l19kHۘ.nx|V9蔺v1 i馊&% ;oYArwxH&X./'95]礼Ǐ9ɓw\2I}(Ȗ-  HIW)Yؚ0ɎcoUxn¸'g~+j5 i)i(}, ʣ.ѢJII Xl]ynHE4CVƁ4yWF{_ǜ# eW|hjlڦnڦu) hoZvzxKa=ʀhT%d sQxCuzZyYOAzm稜WPHZ% {Jj:L3:Zz`Z?:{jڬwʪؚoZުךzx~ڃzڗjvfsʓ7Y4Ƭ 9hّ ˑ I&HGhZYvyZWOׁ؈:;HZU+"kwsIq:J %*Foxhh7e|8ٸי$h˖?=hG+;XNP;)kj݊6Yp:zض(]ٌ9 T:eM{[zbʰط{~;o/A󹤮i6 ǵ&ɹ\&{mNʔYX;y : K;Aj@ټĻ K-yn+۟p ;KKɸIK9pK(~i;۞{i lkx 뿳{eX ?C@j0 Zm =ć&4Hč>ʢYLSgɦY+ʻNJZĦ| z ,wBn\t|l옞**RƃSKUx\] ȉi1^ۛ都霮מokx!M qb)-8Ҩ#|D /볮nwGkN}:b3 [ȫ-4&w.F-P3#\=ԟ˺'h^N4~gyɌî׼5\մ 1h@ ?f2^3ݽɀ=CJ$_hwދn./&YZhWx"Y;q&ϗ*@. 5`>_NvFZ6p_^a/tFw;pr?\vOx|~DŽ_t|ƊhƐO<Λ"_?Zպ_zߩ?xo7Ŀvg?v_пu?WW?u؟OܟtEt_=wsɾGou$=ۮלr@`@A $xD,X@9n1$D"An8J-]SL5męSN=}TPEE .b{ǟ9ߡ0@$@/ dA:/0C 7DlB* CG$Do.-ziFjggU]>eh.m_h.d뮻ӆzjocpCon綛fzO)~Z?_=kYr-m-ߖmA#}[yM]oUmya䡇׳wݓ7^Uyw}g|؅wz}ȁ?7e\_-jC 6Yי6=Kk;܎֧+pn|:xoY9x_V>qWTmqwx, yyi蓷Oy~#׎y9s]AЍt/yƚ>u#Wzյ _,z`# cG{[v]oؾdwܽow>[zz?y $|5ߪg}:ЗOzփ熼%zڳ>}C{?G~?7Gw|׏{}s]ؿ~W}Gϟ~||ǿ/|@{yK: C$7d6 t5 4C $4DT70| !L $#D$,9:%t'`B*+D #-.)"""PKPFJOEBPS/img/unitscube.gifAcGIF89a99BBBJccck{{{{kRB11)))!BR)!9999cc!c!!!!!!!!!)R)c)ss)1)))))s1!11111c11111cc1k11)9999999B{B{B1JJJJJJJcRBRRZZsccccc!c1c11cccc1ccccccccccckk!!k9BkJkkck{s{{{{{{{{{))ޜJJZZcc1c1cΜƔΜ))祥ﵭ!!RRRZε޵ccssƔƜƜƽƽƽ)11c1cc{Μ1ΜcΜέέ1cΜ1!ZZsތZB甔絵1cc1ccss{sccΜ!,H*\ȰÇ#JHŋ3jȱǏ CIR#(S\ɲ˗0cʜI͛8sɳϟ@ JѣHӧPJtիXjʵׯ`ÊKٳhӪ]˶۷p㎭ Ӻt˷߿ La'Ӟǐ#K~˘3k̹ϠCMӨS^ͺװc]⪧kͻ NuqO|JKNسkνNߝMͻӫ_Ͼ3\9lϿxWv|U_ 6F(k-H`[\ymg"'$h("!rfס~8H #ُB٣I1PwcfSbx%hEBgcnƤ;$KY_)kU^VdWr%5圀 fipbfr6f馈褔ggeeΨ%mV**lG>JZd6E 먴zdRɩ|򹥥*i@2&H:VF6k,g٨˪b&"ꪲ" YNmb[ö ,5٦n~j֪,?,ڦnW, NL1clqgDE/dZ &lvqg:,-~\B\G,56g+s|/yJsh'0D l+mlt{K:{d u%o2]M28қYfz{Ђބ7]4җ#66:̖n; ī~yS}:SW:Mt4{srؑnx0bo~__M<mM%9,^ ,`2@bH.`<5imv#T‚OBt7>މ큠 ԭqNs:t0UJ"9yZT2ςDۥCN t-qH 3֮^S`@qwtE85zx{LNI.'c ϸ>rP[ddAڰ|vDd%)IIMГb"'kfR)*qJNTV򕰌,gI˔&ĥJ鲖 0IbӖ:RÆp8Ќ4IjZ̦6nz 8IrL:v&3x̧>~ @ͼ CMBІ:D;MͨF7юzᨨ@JҒ(MJ/*R0LgJӚ5ͩNwӞԞ7=OJԢ; j3Ԧ:PURJժZXTծzG*XJֲb& Yl[)Wixͫ^'ָRl6ͻ6ݫbX}Uk]yR?,f/WͲunlcGKҖ󱃍d݊oֳml,֮5nwjkd3K[-qq{&Ѝb{v.r.7 xJ]kZW].zn׻|Vmw?kXU/q `aEZ`;=4kkN`慰7 MhЈNBF;~'Ҙδ7N{ӠGMRԨNWjM#tgMZָεw^MbNK/ЎMj;ֽ5n{ǝK4;.&1[ Mz:w plcְmJfh o{;6-~5f np#8dx從-︉?IA֞fx2Z,җs;ysu4Gz =nӚHva;]!@1m"U ƺsZ{ ';BVk'퐏A]RwBU7o v2_k+GQvGu{^Ϸ ,̿t}֚G{ePw[=Oߛ/#kGW>?>?`zGօ~{{87H{׀v4~`76u7}dW}}vH~'hx%.mugsVXvgk`Gt@'k-ǀ(x'Ƃ/sGV88̗uηu@i恇gxz X H{vh({gH'rxm7s2h|W|&V0T8SGpɧZp&WxeXh~h|wuZZF\5`_e[wZ'Mle8PXvHPx}Ϥʼn]a]a|Wl!H$8θvHsL(^^_ȕ[xg~X ̰ P }Uu8v5_9ǃXȎ(#(]Z(XEX鍍rw6 gp$yg0 ܆ ѕ셑֏^v]6 G0 D)k(Jm, H`[ȍX]ȓpEDyKy֔{8T UىZryX!7FIY)ljَ/ٖjFafƗS9#Ip`kx,{l}YOX~ o{/.ِ1ؓglHkIDyk}PؙkMȜGGY{)yɖXx&if䩙Iz}㷂i؆-  +h9-woܹYlv#ezGD0ٜꩀxʄHȞY~řͩ.ysRI:^I GzJ@q٣梅)ءp{ ښ9q* I/jZ1t胴vG0ƣ_ HyZiOʦgچ)'7miWj^Y\ڥ_< nҹڦgڨiFB!Jnz*-ڧvYk:*Yh7F2{CJMqzhxlH߷֩,: %Ym:#ʪeJ&lGfU ] Fv i7mƦRؒyVmxK@BXDt&CWtLtM[O[Q)~L;k׳qȟ] k aXSny׷l wcۗ!k*kgzmm  ٮ򙹂+m[7{Hvl kR Yǥ׸'뻩ϩm kKbۃ۷ccG":ț̻Wy n{˸@Czj myfʟYMپ{V˲v20kR\Vq ,k. .<+jA<4H pXK6ȼ;vՇxD2tZًozǙxԶƸmҧ}6h Day<.(hJ,|՚V/Q.ɥzk-G]ສ]ǻgj}+̍MSON㾭߼T60L7<~`Fu.e.͌1澶߳…h3萷>.,~.9;NmwN~~ئ^m C P  o-PŮټ^kȾ>=hDzʮ>.'~Rn6Ʉ ݞOHkI:*NPt Nk S@YO&Oٺo&/Pаz; 0 FO_Ho, Hú.ߤ^;=3oR5r߭NLPUcj( %v_&_;Z$ؾ4*~ ; D?+?|?{YКk &O/6 U0 8 0h/$ ofoX⤝\TK8_˺?  _ǯwp߿z/Tx~п?jn6QƆ͕WXeɊ42mGklǨQPKAn=`DK2sUdʕ-_ƜYfSb*h?FZuaWp,z 9hЦZ{`ݽERq˗1gYr͝?询j 0loZ,]z+fFqɣǟ_~_곯k@e:\ :90B {o8ƌ{즃C?Q: M@LpVLE_<$VC6 1GwG#:H#DBѱ31J)23 34Nkѻ$ ռlD 3h$I5׫ *N;D5$̆\88!NG<ܓHddԞ3LPSB47cH_5&r@O5A]Hd)3XرRmU ]Yg,-RS0O~$#{'*RK=lEUZw߅(i+]5[p73u^5UTpڍ7a@jS<7`" _w בm#[eɛn_ͽw]Uײfu܆eFv߷޹utkV~x@17߇?u>_OsOT?*#܋H71BCf@ VP^ ҴSv7@ Є=A`k5/wB0au8!? tEDHTb (Ī5HBH'jN_[EDqScԧB5*-nE]<8͉qYnTO4_KdM#D^ INƃ싉㪞 8IߠnPBe g# re,%JEkiYLETKaz˄-oDfhIRZ =hROkĘidv]\#S"llԩNeXnvw[HMoSԓ6L W53M.GO{64R$#̑LTG&эEB9OBkE OWe(G'Q3i CVIԧUZi$:T+)K ӟ6UR>*J:B(:ի= *93Ū3UhVԯCaUk}ָk[!n,]հj@76=ldW[uEc Yvv3:!lj-ZN%XҹNڶӴAjuޖ0.liN wZ^w\eIk۲!2(P\˦9i<1+'J0WFc(rP.un.jȣEjZտͮyZ_f,=cVrf.=a?[FͱKN$>kmowmmXrF.6T+ٯ4Q~tTcL{һt=HciM[E[.wSu:Lz- (64?߹w9u_j=x=ՙP$癿5-w\V@ɜ{_5Ju~ss,~=2‚@Ё=S> '<%"[%?"8d7\*@~Lz:̿=y}.߃7sA#Ooa??U??t!>B?R% Tt!$Ÿ2T8$ܗmӾ=7;r@ 9CTr<4I8c /A BA>Bt(8|!h&{xD7Ⱥ ۺ99Y|ӎ'@A$R4DDD|~ iD~yHXy/;/Y18#, ? `a|<@cUdEpg<:HA=A% PTߔN+҃ Ȁ 0OSC|Lw͑ ؀1DCa8OY&2 8Q%1HʩŪ4 Oc0*,%k9R-SS ;<!+p3S0R+*',R"NTɸyԛj4I=2>F@6/ѝ\x[  m׼'9*TR;5b%Y]տTBPW-K[լiMQԡl`"4#5]NUUV Vi#`֚OVֵmefp q%ׄVhuW]AWu]WxbH}-cۻzvo] 뢃[PX׆̓ƝBH2TՠW{9~ِ}w3C<|UXXs1L6- ٜ凒RRjY@@ EW]ޖLGMu<~gu[x^f25_)}9^-l_Eʦ_QE`R`_ ~5@ۣt` U|=_aVNmB]XmX-^Y `gs;`S;\ᜢDMbJM%ɉl*m ~BZ+[E70(\ΖdDEU}c0CaAc(aU;b4^\]GKluBfCcdݱAb>v=E֝⅊dIWJ&GAUƈQ&ewSc_ߊY1V^ee?_`e%b^\f#fhF,i4waf o2p^JY.g=g}M>f@uvFegzm>Dwd[N Wogb7Tׁ6|>h8暥LޖNb.a;!h?A=hLg.RV){N;]@M^VH騮Dqi[ޙ&k櫮c].5ҕ[歺;U]V3$jDj`Uf^6l0kj~jM옞jj{v>mϱl.~.edmnr0FVfvFnmfdmpmޱ(r@&6FVf.٭nntn~o%go1oekInvNpl 'FU+!^7xP2nqt ] ne 7Ap"w1#go'gor(+r$K_r*1^mx(s~8sar)_5+7rs,rrdrLs~?_s7+C?,?wq`=Ǐ0\?'PE'tO7oE7Bt;o oI>@L7sM_rNRuPQtZS'SVub~g@$'r#?"A/PD\7Gύu &ru4oq\tq7/ kHzmjJGfgLor}7u 3_vWxgwu_Jl{unCyxw쫸G<yn uߖmayywa1Ϗ'z7Z_vn`zz}_p'3W|rIw=,„ 2l!Ĉ'NDO4f5URt+Yr$I*Wl%̘2gҬi&Μ:w'Пܰ56l= LRQ.+|sH6R7I >G C =kCRă! EHBmBC qx!p) #ݢM!൭-D$ ^ɶA f$ӈF)IT\XE8*"FX!!(H~[P-7b_* ǷC6""EWqqy1nJIeD#*YHL aJ,XZd(7mR~ (;Qф~| QEAqrIrF*&K)MLaq,TLYhr59ys,Z"5^6XQA}*ԩMTZ%ρE*XrUO\ +Z:ֲu2hc5v"8{떄!P:A2_#:'U:͎e*ђ`U9RqCx4 кOwL[!Fft4Y>϶}ptT~!0* UTCְ4\t=g;:bHj`s Y؂ocF[bC{9(D!`bB˽{"G ,vPkW/+ujv1wb(DV W|O|,a}X|1b`ذ*Py8ōb">>SUCp%ˉ t"G=ыTPaKx:f53:/%A2K=P^D*6,t+aDr3- >Z(fWShC@*MlϚ( clyS#zQ*6ֳvjR IBD F}V Ƿb7UؾwKجͽ Am7 O/r>ҜZ.GD+T.lQ Cb1PxYC yTӼ$G BnWCE_{7:AV01XPBczӯt<,P(,a;BzcӰ}4q e@phkfh@c1O2ÒsF)C_~ę{$G^Dsg.&@+ *g!\s=ǃ&OHoh7늣W*3>-~'j ?`22 0@B-RiX>"A9Ub F? ? $=B",$@UKXSa>LOଉ-D2U ^2 B =2 IaDL.A_L%OdiۉqƐ ,2P FD[--EI!z!.ͭUVyB,a  ?/.,RS xaٓm ub b"b"B֟% ^20!;C;C!2t6N$єbL&aN1+ܵ"m$62<<ȃ/b0*NZ4z4R+ZŢ̞<&/;b!0r94";&).C;c!b: :dc@B;$#DFdbEFbKHIҐIsKޤM KXB$PP%H3tR&R.%S6%=LSN%UVeA%Ld]d̤mX8Y%ZZ%[83`x̥K%y"W% X>%b&b[7Ё_xHIPfxXIh% fZVo&Y.ifc:&7ldf~fqȦf,  yDjCI8l6X5 feX&s&fcpfd&HlRgVem X8A;i?sfjpq&[('g5'|ec pf[fqT'&vb#c41TxTg*o'q'r{&FN(jtu~s(351һh#hasBgz2({{@jhhFhpb(4'[u(愑~mƇr5iAR'Rb @ AgNÚJ(}bqNMDcĝ2ieD>n)ӕx Fy"[) ĂL樛@4&hi.(Ui8h_*jĒDj:jejujmM59X8@̨$ ef+r꧊jt*Dꫮꭾ*jk*Mj+ȡT( 3Ÿ.+6&~+^KJ0l8DI8>LzZ3*Yjj+֩KiɺNiBk`Ԏ63lX0+phI$lR,Қ*mʩqflkzǂ,rȪkǢ,ՖKfR,iѾ%}-}@-8 'ʭbjzV+Klĸvmײlrx [Jkef֭-nʭqb\*CfɦlǞnLlJF.*'mT嶍-^j->/F'L\>-.T~mĬNf /zo_o$nyr7"nCob\nojRkz*)RfƇ>d'` fo0wog֒0:Q4CI0 ǰ 0 װ 00WpPքg-,1-pSyj #ccLpZ!Sq"1/;qPAfelګ88F111  2!!2"1S䛪%VlipV%_2&g&gЂ'e_xJ2xrHnб'+2,1H,r,.#"F#LO113QU&2/%]T.34/s3*OZDnl37w7388Y`FF333;;3<dz8z&6C#I0$i d3?3AA@kDB3B7A?4DC4=rj4>33tsjG tDHslDIkI3CJHKD[sGtjswFGADt6PC+F5CRtL$Oo`ttMVSG@B/5W4lWkDX3XuWu<7W6lVTUW^1 @Et^5__5``6a6?awDbb/va?6dGdKZK]ptt\A-f g^O6iiKujwjBkiǶlveef[pgAI>E|p7qq7r'r/7s:sDttWws_7vgvowmwvv[6gpoz7{c{D||w{7~wwygh@f4yAE8'/87?8GO8W_8H xsvCՀ#qc88cu]8׸8縎8899''UW1?9GO9W_9Me`w99999ǹ979\bĞ:Dp'z7::GO:W_:go:w::::ˆ ::纮::;;'/;7?;G3{S{+Ŵo;w;;k_;R;;׻;绾;;<<'/<7?;oIK<_+nn:n몳ʲ뽵ml+0a6i{b.`Zkn[+o&$nn3=~[ג-u4S'w)lθ2;k+6'0zr=?vDU44[Kݴ|/,; +-55]~5:xfgp%wF׭-b|X{=/؇ uʬ<-#5஧;NwNHtCt8{#);ᖷ,r >˽Ս /= |<+./c٢6~.|D//#$-~w1h`KmgžPxCjvjؼǶa0Vb 6BnX3d!:H g'毈IB>,Fϊ`<5E!u-:)Տh(JdTZ(G5JtdG+JL 75:ҍ))J(2IX̤&7N~e( f"*WVH*#2˓Xȥ.w^ 0IbL2f:Ќ4IjZ̦6M`R-8IrL:vܴJq z̧>~޴JЂMBPd: D'JъZ}Cדюz HG:̍(MJWҖӤqLgJӚڴ0MwӞ)PJԢ*RԦ:J}TJժ4îjͫ^Oa%뇖 RD=aۚح d'KYtU lW̺6 m2cYմMjWKS ,bG;vti Z n/]+LVmqtK`Wp-v\.׹x;󺂍ls[ַnl _N5oM-kUn˺M;@! [l07tGL‎%N;fL8αw@L"HN&;PL*W0βU-{j2LeN*54m3LgʹxE>Y|3ǔЈNtCkF;ѐ'MJ[Ҙδ7N{Ӡ^NWVհgMZָεw^]FNfԦvMj[6PlCԗu:@DAN=kh2܊v3}qηmmwoVpۺ<r'k/O_Ք(0WT[D7<{wSjxʟWDi8.mًGxɧz  УIZnZʩ9e(ʦ9Z/:x&֯ЛIk*p+ʨfIz:ΖJڱ:j-9SЯ@*$ڲ[ Vy)\ZI놳Kʳ`*YHpyɝ:1Lu[39X({F?kAl!Ϛ&۫ GǵF$ع;끊[0SPtL+}k{{zmζ[ඈ^ǻ(Ztxțb(w nJ;b՛븽ؽ%[m8nt+䫤Kbkfo;};VKmp po+}۳+#Wr(  Ll7w{u۟?ض|a|Ww$ƒ+wu'0'kɇ::6j*= ¨XtWwD\%`:Q,FڅzzAso\˫OKc [YǙ^UM5[}cYl`؇92u>Y0[_W^lNЅ[Eʐ%ʉ@=xn'r*뷂ɥXXe~T^V~XZ\^`\0j4n<>Vl|Pv~xz|hX6nq.gPkjý.^6 #sr̟+q([|Vѷ5ZɛLfeh߻ uu[',ZX3>7xőJҤʕ"OtH"C(Ζ<_LARM>UTUܸ% yl2abW`M (QZ ٺh E:ËWR,TXnB #L8ܺ#&ぅ.Lfl)1F?.:sID_ ]d٫q'̓eznG\r͙bװcR?{4mgݽUn^x"J\Ճ_>Lp[!O W>{;08ܜ6mӈs"B /lg, G\Ln:'C{l>rh? {d賍I lA(*2˨4D3KD$D3<3"bM=3/,N0@LCR"&ԲQFrBH'tJ.:0CPΌ,3P16/CGT-V[uD 5W]wW_6Xa"bE6YeRgM4;R5#ל1$Umw\sEd]w߅7^y祷^{7_}_<RZ 8bM&X">2;9dr0;9c){3e_uac%fw..3k3.?yF:iҝYqsvVi1-yڂ3gels O"kP4nA6xji6(l .ZϵF|gdƉp E֋1t!,ol\tQs߼ Xkmgkk~ǛfYzAw 53zs<Է뫇}{ͥ}y==jq#]qzF\N%yRl$zrֽqz<`? |@*)C 9HD/6XA%e; 㣧WM&N#Z (mz%JW8]CTw5G=*1 9BBk=6p6tz pE:rƈ:6E1X+JXEJ?فe@`[F[P^h"5w2CalD%Al}KsH&k`h:FuCGD%(y1 PEdL59dv!D\+Gy#nh|@NAČi8o2',e|CjTsh'oGsR"tiO zhFH;|8 < A=\`ѐ.)wQcc! a`@# 9tiPA<>T>l$hСƬb(:ĵuEeӷďr!)1x hhiRi6zINtkDzzѶnU\ &W‘ O$6~,4"h 4Co'3nsEҶ,ַnp[Q';<*&wp0Ā"t!^0A ԧ5餷YG٠Z8E|bI`A֢0,>^M l6&nJ0j"Ddp @`GTR\b5XG/]ns6w.vO7o7MKf}4!Gywp|uc-CX3:iv>F^b7DG?86j2?#qCM zxoteҽV Bx do@Ww]^u=w6nSru7!wbij2wV&;*r_=a}.ܻ9_5ϫ Gz=g[n?}W?W>2i}_C<)JUQ{[Y#;ғlg?Kk?{?=1b?M;""1X9[@#K>s=;@k9D/<7=8:&t%ؑ#T8齴(4=61l2%Ab368!充9ģ@BsD$Qۺ6"DU9JS42bz3s)q꾲zZMD?de ?8)Cr^$lEÐ#9 D\E]$2FyS8e&7RE[lirtDO2RCFz lt(ʩUBtLsBӖpGYy>SF|ڹmn|9ydFȑG Ȋ c灺ZH{C:KҺnG옋@q19$$IlIH\%Y? d8?I*;IBU7k,ڒ"3&͹d"J ',* ,<dD'JDx4~q*H˻Kkʗ|F-D#?DtH GNbʹɣɽB-œ-QLŌ3gHFqDդL;LLD[DڌsJdNaI5՜eEr:'4((Au0O=oMhr3d]R$qQW{2u$k ]PXeڞq۩Jz7JZm [1mT$PMUYLm`YduO|ςEƵUI]a)(k]X-v4mO[%] W=1&ㅐcX܈? e;`j,29-қ!%4:͛ڥ!,`/.b]Sv_E\FۭdPKSm=E\MS 8h]P. Q5|Uu}̒m8Ef] >T<\(Z;F)]?GŹ^Q\-a8c۬<]ZJ4*|^[$:vvj~^^q/~\‹\\fce&!R}dK_um"6膈gRmՠ3$\~e(h$ӗѐ&&Vi^D `NeehI:6ai}VBM;fÝ5i.O:E>eiRRݽ zgklkkla^QaE5Ά̞be]J>aGKLidNlێVw]2J&\enRn šF} ]ZF[~Tfn9HduC4e&2o%[n(S$zfFĎoslTnkDԲeF~&>FH_=7_gB]nj5\z> ޶a8{H6ZnjQrdl:>  mf! ZppfW=Zٝco_gi˵ƿnĝr̬h* p8#/¢Ls[ Ν\vzs(֤.&vhoUe[2$YN TTqI JVgI՞*]U2]dc|I5 MHC?D.akOqu^EkN?jvnmt>L`wkdsq6ֶ<_m-bk*v쉧x+tLx wsw9yxd&J|cξgl4κ!F#[.1rxu֮lGO7om2Du^m.D.]^q1i.o*4U!q}K_hwY>G{F~t"./S6foW]PW%zO}w;,h „ 2lP A% @Aj(ƐG"iƔ1t%L6=Ys&M$'GA;i#ɘJ9#ʡIYfХKj+ذb|% yl2abBڵmM-sÖ @ `)ȢS&.PqHVRV8Ӯ<+sLxA.m4jeeZtڼVO>|1oMb}Q)_։S n}`ڷK_6\rҮ-oBaEӋ .67۷j8 `yZxW3(n wSf:z!!8"%x")"-X!1:t x)8[y&S8W6~:)KդQGxoRHi%CF>`*0&Q)xaYfhڕ8ӔstPIPw}y3UwzB>i%Toٝ3FE2jWΦ8u.꧛OxW=Gif3:nٛ͸dMw,eօ-g㈭A\ʬ'0%cܻ%o^|TLhTfh!&d !vv> l`9B-]Br#g>R;tN%3Cz.s|_P֘H-xҢg(P;UC+vV*D!>;VOFǑ!/]2?-2-Kpq8u;yQ^38G&hJ k~2W7Pnj@v7~2gk[1f9btK9ɜY K4%[YAkM!$ ]ܠ/IQY* 8"] "촨 ts#CHRLA=&TXU35YF ~ͯ QlU֪Va ;MH=<uVI}e+Yi1q `ո0+ɺסRh+0 X b5~ȭ}-lcۢVȭ͋V3b@i#k27H͠ ri[ ^Pu=jGE 8}eYmWKanjdN)ušTǗnuF.L,.1$v02jq(p3^ewJgˈάҹۯ&jʅ4RJa+vՁ70B$ qF&\ Tؒ!Ո ^Z"4ZcxWRC7F6q3ցx\[BQ1$+#ٞt=ohl恀tesA,༪Zp8UW5ux{v Vfnn11Cy}95>gst=TBkZ4n0C8\_!]8jA7[r]O%=2TRz굴~= iy؊-J_SW\~$"Z @ n\2, Yc꒟Mnȶ7KnX{bWbآȓӧcc*hGx /޶^KH7/7tۤbZw|X0ͩ9 ǯfQrW$ITpskNrf68^5%4mOWue3m5BRcgkxbqt7wݪEO,e]k/pS+z1|T)ͩ^+JÙ3ao|XN Asi;i74K9xSF R:8?쏇ol䖸l4,?wVz_<|&w?-w%yYӬ&aʀUq[yZI_[]B0ZQܮuh9W_``p 5?A&-Qz |`jm^ W% vJAV9\"%^ j^[ena<j‘,N5a=NM!^X!ѩ`_ V1iYO\Ӽ}}!$*pb߅}"@Wb#F*`M\Au&Z޼ a \*bJ RNٜ3Ʋ Q 0VJEYK"1~c|MD IbuKtmPHT7#>΋8R2J2]AUcuc>&A!#!BFda̍!ArZ^=DJB2䣤<:Gd>R\AI$8$LV0ΤMLKjd_MbNBJ_MMZn$QRNRuLTaU#SccSAzPr !bdbRiVaW6#4*!6_;<> Zo]eWN @& n-a`1e&%cJc@(rb'*fMW\_Jը-h>_i>FF^&J@Tf#.aeνem_#AVfn&n,>\-^f<l#&";EAE'HNj=&3~_^ff|FWlj ng㡧8y Yl Rٛa&]='y>F.em7ހ$煮J(讥gVdr: I h6ڎv$J$iِ&iW )zْjmOBreaiVbqhK.ESRiV)_Xh;%%(DRiXʈ{^ı|gmfbx=1~[2ߝ&XGzUVfaj fj*x6)*5j惥fИVjg)Pu>Jiժݨ)Gju⑵J#sk~F.+)9"]*c'umg-/( Vh+ZdZ"be3✤+icjSY)+`*bQXB;jDbIl5+d!B"kjUQlXlERzd`lRH"ђώ z>2%VծRԪgd]kmkER>d͚u}NmBX-ܶ)"Rm-o%`j jI2.Q[am<ꣲ  mC-"}*梘nݞjVZ})i.*#_h~VF]Agj,"=.^,.v[p*m*Hu<#w%(/6'm`ڣf]òn l羋fU1lìeU`Ǿi%6~f.'N0iˢMGII TpIJ0  p" ذ},61Ԓߖ.1_cl~l3;2JzO^ wq&1 1GLJS^iq~9Qα1Q0hNsEh12|vpnzn^zSr !ji+.-F)rXv\RccPr零#2.[_T{-ir/kέT֥&M2Ol3n'Ȫ+ᢖ~g+r8C *[{F&3zi5(K8Lu\!^_dEZ:;Ν'sA43V RwO C2c uqɳI J=㝩.K| ؚTt;tSaM4h4Q'E&5 D1ORsQ T/uU?36-B\5Vo5!}*Pu?-p N(""k bv[SPWX%':߮un߀`WTao9K;3'_cδVOvV,W e!B6HiS4ֽ5?"klR63õё̼oGe/:ǔqKKn1>>,??ˈm_r6(*gb$sGy72 ZHKK}۷!7 q9XNid7XOsEoր;v5 0Zw 'it|8fm-8֔u184~#~.uk_8x![6G]#(r/b|; #yɐag+ lEGvyרxGg6k\m`Ypkɗ/Ss&xb5U7y>s'w깓8a+_ڎwL˯Sz#RΥ+,hc W7vo{p;:պVi/M.zʟz ^kfC2mK#cetOU\_{z+8]˹=WU;++ ϼ{zP5 5OkK8T{><mи9lVF1I\V'CςS`1տ_kC\]VF=}9 9q*Icp#NGIN4b %dw)I @JQ*LיӯGt+ab2pUoAbeLa-^$t3GZ6[fǚMmn+f yMe49Mܩ/'ȉNyΓSe ?P <',P. uC!QbOE1QRtO<&i5 \IO-uKaSΔ-4pZRv cOT1 8HgL+eiMUΰNɇ2j1\WcuCjԔTmuKWh8Ÿ*V 0>["XKΟ^wV+cVBxF3aWկ]lQ Cps '}rcG2ֱdq+bĸf$ % kh8DmDŅTi-Id7ڪԶw^񎗼-o7Z -&qH\qbeTxH7<$ǃe.u棻quKqp1 advE{;h)뽅E:9:֏8]mT/+R] ^n p' 9ü%0 8'Kqgeo{^2 Ё#*21(%ya1ȾSR2ضL^` K8Lv0o, ]Lʱ uҒ=/ׇv֦7b{cﴹ<0`;kSj8pkA5#}Fζ~t[O{v[I}+:Nu21|/@EUGe>Hÿ uhv97v0_^W|j'Hoh6Gk:l005p9=Dż0{7Zchmq0upy}0pqP0 0xOp(,>p 1po> Jи*^`p>: / @ a 5I,.po 0Ȉ qcJ g!%q)-115q9=A1EQpLxy!஧dqimqDu)H[. q1$#gQ=[-C{i 1, 13Kk0,*q R) 2R! 1F5r#lP$M$Q2%Ur%Y%]%Y$KR&Q&m&q2'ur'q2"Wh"*$-28(|<r$y)2*[RL*K*Q+R*+u'U() .Rm2-2}r-.+2/U&g$&20,S$2..rֲ1{28 -.22LR3K3Q3A3E3* $(s522cDТph6m6q37us7y7}s766s839s97KL6BX:Y5DBf93Iqɥl :PN'csV֘|b]:&gI& *bqy-i_KJbvWeyda:⇨%Ezj話.Ej*kBJꮸȦ%SqiPU:h)hv[Hz--+k+;k+vѹTx)x.f ,on!ߛ{ƂOlV:kRm:`7ƫ!괸Tt#:*bMHˬmX,>+`H=,g="s v%=-/>Jގhv۝3k[)S?(-scqo|uQ:ƪWZG7̳-^7➺ՂmoF؆>/6a~z[/otΏeixR>^rӊ[L>H2Ōkվ@rx6<5gap"[qqÛ4Ź+\My e&BXuu㝶bǿq DY8( Is `2xDU+$ЇʛMe܇)mFtS=%F#"8+]sY(Fi)KG:xlQF8qMY}g4FNy A@H8򑐌$'IJZig4Ǹ2R$&GIRL*}δr4)H|AZ̥.w^ 0IbL2f:Ќ4IjZƔIe9Klz 8IrL:iΗA쌧yL @JЂu/І:D'JQ_̀F7юz ?*JҒ(M2ό0LgJӚt*ͩNwӞ3glJԢ8RԦ:,h8zԪZ5OͪVխ9BXծhMkDT7U\J׺1 +\ Ӳ `VC@bI՘㱐UR`7΢fo9^6vkjɪіlg/*t/c׾7fykY2Ѝt b-.}M-pKT5ٝz^z6DnoqߚVv-Ϋfuq\寄%r{nnZ7 o{a xgŗ-`W4N?buLe8-&w#+'WeL2{S26䱚Y:hL(π,g>8ЈN`gCϊ:hlѿ7!TGMR!MWVհ?zZָεw^MbNl_W಴Mj[ζns;7MhoN׍mpT~5=^Lvc ~RM෿ayW'Ԅ3&N{|ƸO O<6ǟYJjm&A{|o ϗۘ{py{.[uHq˙Nv:|֮joy)pNw7M8g] OO;񐏼'O[ϼ7/xн>Wp}cPϽwOO;Џ{h@jlW=S?~c/v폿OϿ{ۖ}}}bzvqw~zx7\wY~}؁ v}}ڇHsSh\pwswdnur(`(DXFxHJHe!5hp{Gu.vH~o?!Cb8dXfxG5]H%p(WEEm0[Hp]H#!a8xMYlpHy8\@򇅸؉ަ{؆/Hhphxxkbx!Y؊F|X8ԸȌ(jƊHXA蘎긎ƋxpȎI9xjX(yywemG7)(*hn Y I+yg98:V$@mY(mI YȔNXKimQ9mS9En6Z'\ٕ]ْޖhOPٖRymUmsWnYY[|ٗ(f6IYi锉閾hkIPixꖗ~`zYm\֘m)Oi阗iɁnX9TɚٚIMY5ii(ٝX6ƩlIٹj٘pi8֛ޙىig) v*mGɔrJ)) Z~myYK,ڢ ؟'3hK+:Xr]YHƜ~ɣLڤזV)JZi>K zK9\~ ڔXelznPmdڦBʡn6t|Y R:t*Z(}}fsJxZlwکjpIzZʨVP0yչ֫Tɫ"z疧ꥆZ :fhfZ,WZ &ᙝ*hگIYJڋz =9`Z는κ+{ X۱}$[9( ,{ 2۲z[:8<1B۳5 _@: HL;JR˟E[S 8zW\{QbK';`jjk^ƱnDXr:[xm|H۷*ř۸;[{۹ +`] xd{ƺ۰6ka+{; ໱;% KT~Ǜ `ِڻ۽;[{蛾껾۾ILFczۿ7+v Y<\| k[C \mk\f#(L̛lrGBV2|[7׫ ;NxfL\9+Q4Bʼn:Gl/K@^̧`y{5km\o\[ri\l\TlkNnP mzDŽl<YNJLnjŔn|eH J|Ƞlɢ,ƅ|*[\ʣ,ace<ɪ|nNʼdk̤ۺln<x[vج,{ >mu N(['b\9', YLn#5G~x'R}a\\2)pZnۋ NLlܝnW.hn"P^(6p>&>P>l.ॾ৮㩞t~02  iz mpP˅Tu:"  N|n^^!̮̾] "_!h玮ƔEKY`?,a~:gk OikP._\>^P}83C Hnc1~ϣ8q>X>!XuaNr N\CjfudYOLNY^!+|2c&}n]ƽJz;ŏ­ >ޕ峟Tnߍ \@~pc 0 Pp!!Il|#냂(Ob6%"*|(XH*TPЗȋ'ĈP%Bx" cTPEE44M#&=E"D ~Xe͞EVZbʀےI.WދѧJ+an%2ˇc+ȈpȕW ᠅]V 1D`͎i0fWKyWkի s}V,qխ_mXN>$;<K"}9(oПvHpL$,(&M?^0h*@#K3/Dsjj*溊D1FawD+A*C>m##$|*ȠH[`$ʦ4  bIL@<(P<)MDLT+E4PAѫA  f" %ʐ\ͶA <pv2l2TQ- 2*dWLnOC}E6Y ƽrQY@=le,0_@̇F+VSh70E 8tRE2ߢ%)R XyOP^s5E'X/fN֊%1",je<&Ϧ8d* Sas4_d)` wnfO:.vV/h Xmr K-&pCjlB 4|il[Y( %K]\oj`O r7:3}Vcdz,sTl6h*WԊ"z"K^-׼P"4*ѫ\Xʧ^^aAZ;S?_n"TȦ bݷ @Y\v܃:K$g"AL'zzV0Y˘-HRЙWfMY 6T %|xLd2 24@ `nRB&L6&,(} "5Y W A,fgV`U WІd!Ċ@AZwbP`0WI@>*)/"#1T3}żH.bIRfGb) Z7Q@dʝ 0]n%IjrB0 I8b8T y9IfAxx-T9뜲{$g^|$[a0Oz6%Ri' [OI%zS}a 8'BQ"6XK2jZ@N ~Ԥ󜡺-R^k𒦙ngLyV$zj;J gwD%jJTŜ,^UJ4\IX~#јޅgfˌVL`٪`B3dZ=S2RZZJ=y}ŶzpC^$ɰ eCEò%BWKK] i#eӴJ^Zim5pHlz;jT;[زE%dY!7q^I8VȽꥡ$S2MDokڂ'XT-I c[|/Пc&k/VX!j M-vr]tF|廂9A'Emk%ϐ)qa.xb=c>OhbX-/n {,GMiRMBoi;s#% >,|(W+˿Y+d/rc%<UDP2Ž_ ef])7fgD9SsS?WGLb7ep,?*2IPכdSaf$3i?H:A^FA39RϧsxniqtC^gI<@+8,$B>YEz+leai u#_|A8DC\b>iW'eYJ_@Ui2l%NvZlˎɭZk kz+v|f@)pp|,.9OєeM^n_-eqBbȢ~T!;xfفc3!$}3oΞգྦ{(7JcKupA7@ dZ)hF/R&!$O'M3u"D+}$TrwnxG,'-!=x!Ydme z5tIdUMycѢCR@IG$Ζj;.{/Xڰ{831r5Z+)2+jtc-<<<:HmR@@q\I˔X$qt=,[+ 8lKtH"" %mA.-?>^s| 8&2`2/   C.4AxCK q:umʵ8= # F (Q'EB0-Qۏ(ǚ4 [mcEfb Hf@yQH ABDH ޠrQ): Jec[ $!*)\;48Ɔ2_$P?XyqAл*8/@BLCDDsȲj9 X k¸pi`bTH3z 0:sB{V&GQ0 [;0kʕG< h&T)+_pp`T=:l  #QPJQI220 %A z|s&!#K%: AH4D Y3k2HYʻ`(`f{;O`"l+ #pm ʎ꒓Лw̘@IJx$ZŊpH5q%3y X]RXT 8pc{8I:oGd ԈH!zYHjK Ey KD{i_0 `βYWr% 䊌$M3#Bi[Jɽ`j/D!w4ǘXgK.GNXRZ@jL @̸Pb8i%qR8Rvܝ#u\I /V0P8z*Sd6RȆt,K&IPP?Xɖ#@_Ӈ@00BQNHE䟕@/; N oY98R DCBm TX3iB9\Y2vq4ƈ % B۩p%5U:RQZ ISʰ 쌎IʦR!lhDa ]23 +ʌСk D  _`Ma%~eAH1pR*ĘP83۬O#38ʡ(ɑq "A#u"ԙӘقZ 04D ̈RsM7aP8АWí=b^ݛ+1мHLRZꓧӥ/Kjj`[ڸeZ"3:@PXсJ lM dA!7^E|j @NLSnpPa4MP^wq @%=6_*_X|I[8(ЈA]QY_ T/ƌP[6Acd SieB$P4±v\]cZ!p@׻.Ƀ{Pȹ[I}lIZ (")yQ>VD:!G#\Uk4Sz PQqս4`IIm&(.434/_ ȆyQjeЯΪcШĻ/ŵZJ%&_1(caN4-\ *ҕԥXO244ʷL.Rax/w)d!\bz X)4pJI »[*t%j6:yܱ.*:yͧa֙fԘU79 lЖ\a̻`ڱ)ܡ"9姴”W'J s^-͉.x*+&֏ѰF;̎2Vҟ `j2cT82<8!3rʲB Ly$ٟ11XRjaԐm: f!MoKD=M 72ll-D$p!0HNzT0bAOb< l &2͎\HVS @8 gŲb2-K:ʨw*| eXQOXdKʆ'HpFBeV 3ma˨8HpbCY.RUrVzp_@n $p:rPW qC1)uBчl .N&JTsO~Sd  h\J _grrMZȃ5\g8?V46^,:(ɑIZT ~%65!K9z͂0lkc\wݝV\j"JIVUYD&j3!f\]-BCoPF%4p((,jՂJxFB%%V@qrX[Y/ryl6ڙbFEF%j2̚/CJ,V7'U{d^Ҫ/c̆:%ѫg7%;8Xܺ"Vج;k>I9eʗ3sUO6۲sgдC=mӞ6x'x߇)PR]U+8#&؂=5HR#-Ny$I.wo\'ՇUv'Vh%]z K"GpQHij%0&qdAYܙri'HQ牂*T(nHQIߔjRE>)vGd2ԩ*cvzjʪ+Ik)ʫS[*,ՓRk{2۔zI6I<& 2-;U՚z*NwlNyJ;0‘۔f'u00SZ[^J%K5(#'Q!r%+Œ$F|33ʜ^393Iw3R4;*-Q[m GW8JU{=v~Y46!6͙]RmWO$ߩUviixJX6iDBB熇W߭&Zx a䮲ෙdy^❇;SW2-4xO7E|gZ$(T֚J >h|^bTAxQ_kotof{0fb͏u 64B9~HlbFG9xN\/Mc811 $$]΃>\sL=),[)CWe (~rt\^6R ᧃ^IN3"$,X"j>Vs Bą(K$Y-'d`r|(+azHL{H(ӝ:,f#pR RJOQ\߄Ɔ2S"7% 8b=R$@9FƊ@;0#F bA8 h:z!? .vJ9D$f\m21v p$Z_ѻ_, d3{D ("2 +RGiv#f㔷~s5 sOKĔz,ڂɑlKP8+FnatgCgZW?j$vo+0kp*RL$Δ jJ}k`p+E+ b+D+ ӼkC+^M:>Eʴl"l",LkFlŠ*|bq9ANJĆkFŎ(,Ūr˺Kɖ2,bAB\?5\6m-&.-6>-FN-Vfm~-z-6d-ϊֆm"ڶ-؎жmܺ-rݚ-,/*H ,^C>,.6>.FN.V^.fn.vZn=.>.nBnM4.CM2nn=R2~nn=C= Nt( A @dnn~///// v@̀ ̀ޯ >lA\on^ o^oӀ;/@ dpB t/x/o \ovcovA\@z,6E2P%[X%P?1GO1W_1go1w1o17[%qqT1A%  ñ%TBñWq#2?2+d8_2'1+171l 800S3-0.2//20031132'2/3371330.C026G3724Ws;s.C0@+2r-3-XB7׳=3>>s2K??K/s73?3 .%hh+C/8=5#G4HH+0.%4/Ws53K/K_Jr6CG 3LNtN3sOstP 5/@D3?((`,TC4UWU_u411/T2%`3.C(7I%.?Wwu%$@307t[c5@@DOt˺,FFa6b_0/rw2A'/83%lpg0h45w0g=40ر0XjvAm0Tdq˵8u_+5E;oSC1vbGtO7H[B D(:Tww;T;3tA,CJ[8|7<<;{5B510%|A9C4 %t.5KB8)7{7x; H:C1sfkA'D8x{s;;,73A @ufR4sS7׸;$ q 0-֎4lq88?X8c7145s:C3t2.g3-Bh1X1Cfm=@ۃ&@O%h65;\C;:'C:F';:StC83)Ё;A,=m:z?A:m>=zCP0HX<́';'p'x2,hA jnKBNA4;&$2h-dd‡c]';CY<538=c51A>5trdrȂ,6 6X5  @C?C5r&?h;!dA.K%p;"9@˂3C&wg2dt;l0hA'5P!AX |~ %,28g}53S [=p8/U4F=7?HC(܃Or/A5`C?Dت!{Qk*?DT$l'X50A.kA=C=Ch@6ذa, f:~4"8q`-],=Y8P 5& FbK.!B?7qԹSg{)!OB#RiOF:jUWfպSL}e@A+T"m[oƕ;n]w,K~R&qbJr a[%IF?~,?~@Ϟ>v[$mYJ_/)} *TҤʕk4gpQc-ʤYѠC'xG SѧW}_u?Z׿ ï~N:0a$F3(Ɵ*xhbŖbDyJԢ6e"!Əs"0z̢ {}LH}Ȟw Ӯ&Ks3LSͬ#SK7;pІH{CkQ'sXlC? {W( 9g>kKwǓ!!EH|ʟސ?-2oL\Si6}o W\h]ȉ$!& "&Eyة|kJTUp.bءwk!Jܢd ug\Ap bfȧp9he dNY/}Zkyq6,mvMZ饙Kg9-tIm Ol) &WyGp0h6Ǧ\OIIsB] B(`4 KLX(Vk\ 6B (ƒAbiet Yo="q]iKJ> C -c>2pupA b$ Ʈg(k=YOưq>؂- T? }Ī(u1@  ,Xs% d݌(9Y\BP*#z\f` aC ̠AOa=!aFoRBAutQX4.ayiABmX:Za;&u x={M0"86qD2 iS'F:tBT JhA6;ݲ<, eǞ24)QaA1PG>)BJ)JbL>-kZ! 'A_KdfB B,5X 1 OzWf)ΟѰ졯րE$2J_d6IgtlJ.4 28Oq =up`R>Lx x%dIt# zAqԿ(%zb%5Ie Z4XX3 nǒa2]JPZ]}Pi<0V]QhtU: 6A!jPc p1~!DxF:w逆4 *jk51&Z(;k־ҨӁ ^ҟ` Y\=<@K-VN?|+,q9 l=XKNKTb k%!è,Տ~u*=aNB`>w ^r .^b_u&bEC,*+ꮘyċ2*vx P[hx7&vKI:>nD =*O<)zt]\7 \FB-\r߂f7ODd_-l0[eA=O( fˍv4]^!F 2i'-VØ$LFХCf{a}< cp{ɂZ]WWs0 #eS/{FOD 7lFJlnq6ѝnuFmX=衅]cצ6gZ#o6LMo}6BaKp;7y}7I~x=q>/*R h3uy8:4XXzE7ёt/MwӡuOQ' ޅ-ln6g] l`̀c P00ۃu'l@9Nc}a\]{c`{~wg1ͼ'͹Iwa{Ϟq{|| }{Ϛpރїx֭j݆}>'~ݜN֧_o=;jz{eM!( 0pЖl!0%p)-10- CX҈1*>"2VR^3"i0/|ʇTAP0 m MM=& + Ӡ ?cnH- Z+& ɰ p _<<0 " a 0P ِ$ o +p+*!1 P11*Q+1=Eh ߰)@wbQ]qMDJL^U+Xy#IQI11bb > l E % Z0!n_!2*q}! q Z!_Q 0 Q|@ m" |Ӡ! |"!"#!K&.r#ё%O$"Q!!0io*1mB.(q 'q"Q 1"22 $$ |++Z$,1 ղ&ȒP!Ra*@$q[$ 0|@j2 $`#+  0>$c&.-14E'Q q"(3$5'160(b(B)1*/Ţ#/?@%3 P`9 2`<};P"=3/?.Zq3R 2 p$l"P .s=112G_>. 2,Q  sC t Z0R; 21ב>="Q#+R, ?@2S&w}7P77b [3F1rr /[>@>Ւ"I2/i"Q ;)ƴZq2 =9~~_.,} 2: (O@/Nq ?D˒ 22-r<-Q@P?`<|A<}9PRPt ACt#&2 v G0; KE [3Bq$#ufg1{Uutvguh=|6*1-`\\6_%TZwr u:s[U9oSCV-VVTy\ rkS+PB s-+0+mZWpuMISE~IM?@^S~]a>e~m)86]v'Ig~ ^ ~꛾m^{轾]*m15^^ >a^뷞q@YA쫼 ?ӍMq^%? +/_ 2'Z>I ?E \a=iC՝"yO_ʄ^U|?Os?ҝ??X$<ɿ?M??— <0… FgO&<81BÍ;z2ȑ$K<2ʕ,[| 3̙4E^H1͌5{ 4СD=4ҏ;)ZSҩTZ5֭\6*Ϯd˚=6ڵl=~}ܹtڽ7޽| 8 >8Ō;~ 9ɔ͹͜;k9ѤK>:լ[~ ;ٴk۾;ݼ{:*\E)><̛;=U5,Fܻ{U,˛?>ۻ?ۿ?u9Ѐ;` .`>aNHa 8fSY~b"Hb&b*šbc2Hc6ވc:F;PKlYgYPKPFJOEBPS/img/dimeditr.gif<GIF89a99BBBJccck{{{{{kRB11!)1))!!!BJR!)!9999cc!c!!!!!!!!!!!)R)c)ss)1)))))s1!11111c111cc1c1k11)9999k9999B{B{B1JJJJJJJcRBRRZsccc1cc1cccccccccccck9JkJkkkk{sRsssks{{{{{{ޜccΜƔΜޥ祥ﵭε޵޽޽ƽƵƽΜ1ΜƽΜνsc!, HAo*\ȰÇ#JHŋ3jȱǏ CII ;Mʓ0cʜI͛8sɳC*ѣHLӧPJJիXjʵׯ`ÊKٳhӪ KM]Kݻx˷߿G+W(QX.+^XƐ#KL˘3k̹ϠCMӨS^cqnM۸sͻ VRibIya {,x؋Pi,ss& ǥ ,ٖGk9rlٖ*~lq.}C 3-(oR;7ٳ Ct_j%-P7au!2]ႻlՐ-I7[\27۝O.9-8 R=8\2Q[8˱.f1>7Κ\Mc 4Zz{|K{ܚ.{޴-o;3/]3$Rk>>Mrޫ.h߃S]Kc*Wഅ;:P]a3=+[4(͊T^ MbJ[-鯀H߸{ :X- ςm{ۢAGw Jwp}+Z"6)Xw^ayOgEh,<#/c #3nЎpD43++$8%)pF:򑐌$'II(r3bCfƓ (GIRd (/ΰh o,gIZ̥.w^ 0IbL2f:Ќ4IjS9+!Knz 8IrL825%jLRr]%Xm9VhͨSc)̲5ne\[5xͫ^iUҵc}1*! Z=W łuݫd'KYsuEc1jmgXVM-4’YmkgAU]Uv-`M+\׶eYk;}.k;uesw\6 /o{溶yYvmxKߴNw֭~T~Uj5A};}'Lo.ΰ { CLo&Njp Ⱥ2^ C؛-`ʝ}!7O"mishuUk~|P C:oS_~o<Ƚv~73˺ZԬ?CцSG~þ7Vt wtprWy6sQGwS~x|{w~}fz׷z؁!(Xxf) X׀W~ ygrs8H7jw$#}8'V(X~ւ0eNTwjw{H{^zhrMtO`&sփzX{Lvno\63h|~w{؈%ׇbrthkЃ舠HrR0XcXb8kx!y8rRjV!vgx p x P Uȋ֊˜iHƘȌȷheX|k8jPPxlxɸ XfVPPɎ0ؐvިᘋaWk( ) Y$)kȏ7Ky&)x W:k'eՒ.)a~yJ#y]TjOI}WIxeHxwX9t=(o8$I5y l"}U}\ 6%zg7?iiP729kn9jJL}`Y}_ }֙(),Y)w8`n6 zNHȈ Ahzi&$؜yYmYWYVUxzGN NМzz^} a iP蓱ajiI&P PfD9Cx顮`)O)@(r9P( z`Im)ZYΐ ɠڢ z &J҉V霫9Ej1ʠ3NȖ3hFУiУɜ9j:ii 9Ke!yqjp/g䊺l 붹r_j'YYחYطIf[_t{Ж88xʗ#JF۵3[4I?+'haKkۺչ7KmWɴMKjƻ{ s[9KK%1[zKjૼ}٫G[j狾E+6۽۾]YkZ%XukjWKZX\%Žvm Z5]Y]Q 2\õ\X`|QAlmmlȀwiǧz5LtV)ʴ{iP*ªLYdg} B:(jwܾiʏ>;ʨ;i]LjgHj$LjP|Q"zͣLULrX, $`l0jOɧuL˯\Rl,kXl, jLmP϶}і׺ѫƐYЩ]$=mJѶ>ӤB=7]Tˀ:,.lC\CKMT<-KU-T }0 i)fuՠhdmkZ?հfqY}j։)[KK7g妱 ث6׆Sv`w+Mu~+ +V.،w| vD H!֧T ՞jI;Wܣ7}x)wIٟܜsL-̝NڶʧugjЇܯGU=FӜ&Sljw{ygj>ڸ{͏,ןNz]fRޭyw ޢMеٍ=Iȶߩ8' ls9DΡM╛C)m,U|8V)ޠ ̟ :Mm+1/k'j78樊cNqk8:. SG6|ϪC&jशnڈNޝO]NG},^Tnl۟nԥ^ꄛ䯎l~~j0c0^Tʮ0 p p ~ .uu~y룆.nS|UTU^ŚUV]~Λe`zFLٳiW\-F2^?JqhG0gbu6yʻ2iĩOHZhҥMFZQd͢}3-췒mƍ{R_^V FG1]5qѡW_Ǟ]vݽ?m=;nMrm?*/C7J_~1LΎ;D0A.b¸C #=0D9dE_ER+ Gh=qG+1PlD2I%jFd{J+ !+2E&3L1[tr<ϛҽvOMi9#3N,grN͸$14PAM+(Ѵ3QLhNE-K:?4SM7mPhG7aRqS iDQUe䌓NHg &9W_,JP P3DNgXiD>-WmVAO\ =QT/?qQaWL5ɥN6jTl_Q \έJZJ] *{)/8&NJSڈ^J&V@x9ǑA:20fZ9"8.5&hAa?7: )evW^݇!ƚ%ȥtZ >=:mЦ;nNFP 6Pj|9pDzwm7`vJZfTFax!]<_vu3m{ط}aJ7N>I?ߏD|+Fu_Rr)Jdo}yG'i}Ly}ii'7 z>Eғ_RY5́:ЂN3=:$X/ 'D!Fmp~#Va[YKuKau Jd]4C"JaPEbGtDl-ъWJC-~B| $+)&b8&e.8^錫D- *V Vtf" H:8q46(f9P&I1 !٪HIVo#wQuӉHrM<Ҙ}ra EL WyLn/9 {׳oF\d#mvӞK&,ieĜ|E𷿙{zgsJyS$c9ѣ}pg:i5)oeCHCZ Ipa>S ShhLזOpl@5R 6TtSJw͜d0iRf.OhBlfI*V ]e)yJEhzQ2S DUZ.gp5^v&TRfhZcNljA LYk[RlfJvD*W=kblj}Գ9UMcJWjv.bN Xַlkm"rQ_<ֹb-\[fe)vwLunzWX3M.u&1j'Yu{Y׿2b.*Ҹe\o]}MwE{*vR OvzJ oAڲsW r¨̕u GPmfK*e^---냛c*o'>q-q:s _jRՎxZ)ZpUjz W uQifN 4<aYN|vMHČY.wp%]+y?g4|n#OQrR^-5i'yү͜ӔQ$ hgTbk&4~j٧tYzt?5ÙI6T#Ү~v"kr,zKcB{.uP:FxU-Zu17n&%$?Ct|=h9ѫ.x+ɟ_?fl|s{31K^y]6M|H1BBSSԳ_P=Qʽu=BfktR@ncjZW"}^={<֧w]?|^=7wu<@~w).qRl|?A}3??K}8W8 .,u +w_x?bz뻮 FX$8SbZ%>۾@j,-2px @>>,N) @,\  ;ӈ=! HH02> ?܃  P(B,?"#d: hChHC`3@6AiYC6 -Hhx4KLG71AO$5.E>7$.Zc29@ P4[ZHMD6P<)`x)E;+S<=F;8#\]|SDE4FBET;{"T$X(F'wtGj N8T˷b[EZIol9eAEȂ/FiŜi+[GG~D8TryYJ[DM4F+HL7EyD%&$IgHAr|Hɓ<W3IDKJxB4 +JCJɧ|JJ8SJ$< tJl J*JIK{;C$HKKlGik1:gJK [˷lK 7ܑMpL̃HbL+7E,*K3g$MgLQ#m+֜ 6,F<48tL69M,ԬTCHo6j'pc^d BcٔJɼL2LO,`+V Il4QțN8͛L55y(N$7qM-xWiP4h-Xa-SK$\mЉEkU"2Xݣ}Vߌ؉%Q,e5WUqҡXR]ӝcYrY2C6 UӇlJ٦ŢKi%۲5۳E۴U۵e۶u۷۸۹ۺ۷B YUU{[ֱ%ӃXe*C \Ņ\$E\נTlQGeǍϝe'a@Ueuׅ]a./R25q7Zӻ) 5EU]^=3T4U /EeM^e5]6S] ޾eT V^ ٕJ!$ݣɠ-Li_e*`^-8GՃf݄gV6^{F&^#:ea =EҐŜeanb>>"(%ܗ QLMeb%v0.bxc2na&fb'v2@ϕ7*+(a.%A%32!&^5(D."9\ú`,Ӿ3M6-{-؆!Nb".c@&KUT&"F\`cBZc@~@4.e_ V`V~U\JܹZ\#f#k&_uca槩'yn6>Z'}f?Fk3\{1Q/ogH!f {+NVQӃXFgA|vhEgqg`ރNFޅƑ~莶n/gdPEd^VfS۵h&F6.Er頖pihکmu꧆jefgvcjkx#hHI6i?}ߥ~ѱ҅kqƠick^߿\̉Fq]_-l=Ķlk&`htՒaY3ދþFfۍVZvq#fnzqnq#pg:!or.K,br/'#Vfmr1-e7?d07s9j2s)q U+I@js;h8jA't:rCmճmtunHfDftuHF.j(Gu=)d5 STWeQlo@0@cG\'BvaDu4e Ao?pqFAY*o:_ߥ iWUaowzLgmfw^lxjktY=WX-o55t7p@E8xwpJy`pax[2u:PycL5aWm'e/c/zcp 6|ǐҌ\Ol\ywyvw^:l{Śztmz,{y}Yz ж/_`'wI ?VYBLrçзO|[GǏ|W|_Tc g}yWwOx_&ԯ}տv:/~~/3zZWEZhc~ķՏb_eg~o?i}dOOPW).u7_&m2l!Ĉ'Rh"ƌ7r#Ȑ"Gԃ":o-1,]'xˍqV4A˾'W R]J‹?<Э-۵~s`:m>Хė۶6IDiʉG=۝oLv'DW@cC(Bb)g:SP],.(Cp`CW<pX!ߺ8ծX,C68S"UC0O*of@&oKMe|iHoғ`9Gsc+'9t.hHJs|yRrX ;"Ed[&=)JSҕ.})Lc*әҴ6)NGŘDfs,!6Sa"*թRV*Vխr^*XUR3.j΢>s\GTʈTv+^׽~kUɊO$ӔĢ-̀Ue v-L$r,hC;gI?8j*D!R¦^-ns֯)1{ȹl&B}.t+] v:rnT+NPӸOm\~}/|Mzm+x:"!I2~0fVI;! s6ϟvhU0 mX0 Iи61sƪ͌{,!y? }) Ӗx$#V7|e0І}!33&-<&-g&]}VMe+Ԧ21R _Bn4!iF:fKYl gu,J[6WJ!miڄF40~ы^:Ȭ;[kޚQ2y$3aBU6o.c{۽ūmpsv-m_UXw' 7S Q70C.򑓼&791"17kp" GE;%-5{ƮqF'zLm\b.9cμ<6lkNfć*P>MW:ԝnw;,u *\$ ;za:6.Sޮȝ t}I'ދ"-/^ֵT^ 1m_#׃snd?d9)Qm82-)wGQwﮇ=ey}_7|GEUQjHU%W[f˖ RDVɿ,B, _  R]?raӲ\Fbh@d`r`.x  U͠ ^_qa`u%]闦Y1BaB*`Wva  K aΚ É'r}"/("(*E("/,(b+,, ~II N"`"#_\2.ad]|i[55^#6fc66v~*B*B-b|1^.6b.2nF<`*X%!- @$ Ac*B9{IbAD&"c _<K#36cbʕ.PɂJ$KK$LM2Cn:f/Vu$>=J%:/LA%[HX"̂eam&gvg~&hf*$)hi`:j"Dkk2淤V.m3 9Af/%dXԋY%r]r.'tFgs^Y WbVE =&cZd*q'{VP婕@eIy @ ,oe{(VuR-&WI'QE|[\(e&Ezj\{Z'RJέUF~r }Z&o~(_Gev U]:i[ dqOg'VrU"hJZ\FiŹƛ,=iz^)(O)1hpAOi~ ~)&*u͝m6OPk i4Q f(oi*~h%\Y⣩6Hݠꔶ)ƪfϪ**Z^WX\"~bJ}"+&.+6>+FN+V^+fn+v~+2++ +ƫ+֫+櫾++,,&l%>,)WV^M2,b,v6Ģǎ,ɖiȚʮ,JWFƬ,֬,,,--&.-6>Ҋ*,t$VV-[\n-v~-؆؎-ٖٞ-ڦڮ-۶۾-ƭ-֭ݺm֢-ˤ-Lܭ-..&..ڊ][N.V}ąfn.v~.膮.閮.ꦮ.붮.Ʈ.֮:>Gb.//&j.<XBN/V^/fn/vvo|///Z/ί/ޯ//00'0/70?G0OW0_g0ow00 ;PK1.<<PKPFJOEBPS/img/family.gifKGIF89aD11199BBBJccck{{{{{kRB11!)1))!!!BJR!)!9999cc!c!!!!!!!!!!!)R)c)ss)1)))))s11!1111111c111cc1c1c1k11)9999k9999B{B{B1JJJJJJJcRBRRZsccc1cccc1cccccccccccck9JkJkkkk{sRsssks{{{{{{ޜ1cc1c1cΜƔΜޥ祥ﵭε޵޽޽ƽƵƽΜΜ1Μƽ1cΜνsc!,DH*\ȰÇ#JHŋ3jȱǏ CIIgƲ˗0aI͛8sɳϟ@ JѣH*]ʴӧPw4Z@Sjʵׯ`ÊKYL93۷p}ܻx˷߿ LÈ+^̸ǐ#K̷.WLϠCMӨS漹Jn3v;I۸sͻOξs`+_μУKN6rzOAlܺ˟Os/UNauځ& 6f`_V^Uv\F}@b"X!h#( h^'DB"bG^2'ByoQYXz6$^[գVe!cfifV\#]I.fso瞃u9k7Aׅl Ah-JYXUIgqJy碜ve:nx蟃H6ZT0h eqш"k:)+R(ڪjch^jhk@jS^k+ʶ +\Ķ+,x{+0O[pS+VKµ-xjnꥆF,:RZ'%;,/,//#--*X(xLu!m [˲Lϒr֚o6ӫ6}Hӥ4R'R- }ݷJ]86|z63Cn̐߬^6~\臗wl{j8; n.x?/qGk[$ý6К3^6~;>#]7ӭ8g1{I2O8aw0 v 3i^7; J">`]ǯ _^c↵tMae7\Sc[/4᪎a.qZ{b2Vk<+ճ% ;SVC_j ۡ Em_Ӭ(N)T kDD0"EVG^4=,DkcGBoԣ #(Fa %Bc"3mO$-NZ̏+1K*2JL*WVje, to̥.w^DH2f:Ќ4IjZ̦6nz 8IrL:NerCYH;Iz̧>~5g<MBІ:]f ъZͨF7юJ[HGJҒ(DҖ0LgZM8ͩNwӞs>PJԢը6 QԦ:jAJժZX-gRծz`TֲhVɚM%o歬 W.kZ׾tl3MRӰ+bX:eZXf"&aKt]2MjWN"SegQ MŒ-mkˢִ p;ɾ6-hC{MmOYFͮvZmnލrۼ-v^7-|qk]up!t1\vV].l[׿0VkKvjwpΕ3L&NWl 0q;Q,t1w3>c!$23&;PL*[Xβ.{`L2hN6EF^%xn>~AT4hѐ4N-J[7QJsӠ~hARԨNWVհgMZָu9 rMbNf;ЎMj[&(l{ n#׼&vMm47ц~a^W4 e c@2jDכ7M{68p;++n[vv! nԜ7A"Gx+g];SXe~[׬Ϸ= ':ʏ^+Lמӛ uZ67 [E@wb'ɋn|NxܧQ8'_ FX}aw^}}>@Fggŷ6>c>E͗"~|߽@~/g;8(}Nnt` ֘~PH;9__{[>EDx'g۷1\{@7lF|mP{0fy~'HÇ|{h8m7tԗrkxtfo7~y~{7|7X9؃aGr$Xwjlx,kVuU׀kًφY5ʠ c:=jylY󩡋 MZ8&(;F%Ɨ0o0 :홑*˙Cʙ"G *pu'ʟڐ/|*n6*"a*ÉmrJm:pnQ%Fg&w zyn؛u :mYPʬNާny8Z:/b 6[l { KEY*{ctzO% cznhofw*;K1+(q:س@Kf3Ws7sqʴ1vCnZm@uVWYgʰZa3[:n~ G;yG;>jȲ"0&Ƶ Wu նj X{vpvy;~ 8EƸl6ڂ[|~K>{˂ X=Kʤkl_+PXssgGZv;N{kQp54 拿ԫ黝ʷ۾o+n_{Z㉦۫xwl+lLF5qk% a[nɼk2(v+ˢ{Bܿ!;= {C*%-V}V&8HnJe^տ6b=W'Yn;euY_qg}iMאn †:wPȚ|͍֏\E+kk{lN=nݦ67wT;ٔŖMXv_UodkڧlsV׏΃[F Լ<fH{y \;dx UҼˀw޻~ Aj̞#v;܍|,~tG~~}|,ɨ lnM}l|Kw J0Js<,z 킙"X*`+'=v7~TO}F+0r弉&&M nNEfcy?ه<޻ vkLlkCfmlZ^nm8:؍kP.(\^u [{^OK~lvl<ɍ>>nm멾ٛۀBȎ8l P >S^ 0 0 > 01ENl~FT6 csŽKzOUe@Š ҟk#?. ۹R_ _lP c@\˞w}!-z l0(UnlW \p: D?'.*3j^fh/lO&58f \Pe< >e_)(Lr行Km=%/]Xِ 8Pqχ/}h_CEku#X_ 0_o,ߛ-?dn&MDk /o#?@9 P\X`Ç !R/_FC5xX'ua_'zӤD5dAgQʔ#M嘏F:锨^lx@9  jf!##9ѡSiߎy扝ΓdwgkkJo.\ѵnnĿ\.B羻&q*pOgbFRV!v@圚Xg87\@"uIW:uUfwmi!.T)r= T/ݠ]GUUWyHٖzw{n}wTtLH9CЫW?UЂ|U9&s :N[Y.BZ{D{gB|̆7,! M?g2 vXDC`hAb?5"8)vы:ba%}/j/`AeMe_cgB#PwģHA9QavF$Ȍyܡ$7ё_cƈHJ#HNB$z+ @ bCL^Imd ;9FfȢTjek%m4)KZӂeGRz%|Q#Kt5×4gS1I=[.lC~5%i2DSv8.l_k^IB5*!"jfZ\zOkd#3UK):K4.Jִ+fC %V9x=mlmE־r^+ZqB׺-l[ʮ"l?Vf]&nsJPzs$s;Ⲭr;Q6CM@5^4F/yۣ6Ǫfo;_bмBoYmwAe4/.O}y_W\ָ^Cqq3[̠[O/0YED$u76JtcZaHWPը[]뺑8iBRbȗ+=W1c<|qWTlU< dxʔ[e꒸crS: ua*ꚶЗI,DW'jE24UAO<0}Э٧F^uiM¿jA[6} [3[~IwV,h)lmlŮRѝ9wMX{︛O8N}Xo/ߛ7C.x:qsW{Dpt38d9J^Wf۶ą6q,X)̱r¼H5 s\P m")N:[GJ w.GXc&zѝb ԝ\>;٫eمQo9ZF]wVi'jzcȐxʜj#9n왱dȯ%9x}ZX^H;KOqg=i"+ڴ{.zw|j>S|YXoW4=T=yӟߴG0}{⟇漏Wz{6 9㷍?0uC7+?%1zc:rԮS $@ū< A@tA@#|.XC)A @.kSAs9' BӲAA<'AAB\R%!$BB?bprJB-̫&<(d:I2do6S3Dð. >2<®zCAC!8ˢ>)7;ĝD<1$kC@)8D9VlE'C$5Γܒ>,ŘRC7? E LTљhclX#[)D[\ŋ:ETd;CqmX;Q+3H =?ݛEK)ć<ٙme$Erw;GFk/<)n4mEÚp hl~G=I̿^BuHvmH'h%iHcGtpVW<l"tʧ$Nj4DJȥ@JGvĆCuJ"˲죒K0r񫷄8:KIK=T=B D,ԈrrlhKK<6~ Cq!C#A0ED@H`lCDM8CzDr(Lj->A4:[C30+ǘLN*;A_LElMC6 ܦ=9@\ Ȼ)k1^LϔOq˫LK|\˪DxO3hC*[tߌ@T'OLuݵIx OիI"ukMPgdHa*PL-R?$ͤ K4Pj*U͏8 Sd/0 aɖĤmNeE}$">-@P&̼R ƴSMΈdԢL:MUeUjSLKܴC݄[$E Uc'NSOΌպ,`bO,MUEҊd 9=:]o'i-9juBTKo<.$a5QbMQwFUrCؼBD$KQLh}lKZ:TO4,mׇ%I (3\RٹWm 3 Y]Z-Y%x}@XוіTڙ%O N_pE㽢`=8z%jU-`*FaR:P\`s0%hE{$!~V^c{@b8Z$*r-(ⓑ(M;3ɵ&M8./6`?Wc}:S*egc=`OCnd^}dbڑ`0^N5e ˖de+vPQ9U&]3>X䝥 *A6MeU >a%~HYaΨJK "Qc`fDi&f@n]AbmfB~dlfSfpp-MKfbwƔb.>-_ Vvd{&ejy.zh%g%`T6fHE0V67>DZeTq(q銾KJhy1V|fOnhXe{\5)k65i)ZhZ˖F쳵fxys$Nx陎Hȅ\7(HrxkĞm-@hHБ\9Ͼ]?NnFo.ޖ*Fh"f[m{<F &oqlrp7 (xRfZ^ZN6[ZsWb[i6xccoQY+5=p)pcm޶ 4ufR>NizHzהuvϵyp5{eeۃYPqdEobxpy6JmX(6b7lGm#{"/suT zze@,gŎxFK5زgӮm_.]x%‡/ -oΜA?.xi٪~kǓ/o~vFj WO~B&wtMt!D]9ާ`iܹHw!jag%GҩXNr̹_ 8ָ%BVje!Ey$ISԈ''c%wЕDZH#\\9 "8=ߏڐ*9'uy!*i)%e_>י=2fy%Vmy'j]y& ChjA^jj.7$޵v) ;,*y b{}:X]Zkxi}JXr{.*y,:jeg%m{>KoZ <0Q00A*'x[|1z仂1UB;t/sU[}TK MP{u@JGK"F7tmuAZ3u}c 7Ivry7)v{;vd!O wĺj7Ƀ9>3 s穫^),g6xݚkZ; P"w+/#3zBO{i|:9F u~A$ x9?O>-'ކ@=jEpNW.R4i1$}[_qf$} DDH" 6͂.|! %2 Cz(đ ׻l0<1,:T(qv?#ֲ_Se&L|&4)iJ*4&6v2nP.;ɐ Ӹ:өu\4Gټΐe!D9)Ё 4g縶fH|2bd6y p~Sk+'@ эӠ &=ES6'7ҋ*$};=*k{(#'Z4!8js>oG|=mQ[ސ6}mBw Ty[رDm^X_4% Ej^U`=ȟ&EA fb  Ȼq`O[ `9\!JUPaڔ[huao]!V_!i ƹ`ׁWѡ_Up 2)"""q@Qb%bS#!$>⑖" *'vb1]"&JA"B#آ&*"-}!F",2$D.B!bM+nɚc-V .J%0"( hA$cv#]Ä8"5b #Axc=9 _9N:c?r#@jdA=bbT4±?_j}#慠=E&"v#VBh?jG: E2XI&!JVWq"BcM߭8@BN&AcBv*VUV&2eSUFeCeVZSN9#B:Q.X%uWVc[Orؽd\. ]\%"e`zOY$c(.BmsFDݧ~Ҍy'f!f|n '}F|Bg3_+EMvX(x*AԂh3xh**hrjf9D$鑖Ì<=ph/ƦzfC)B֜\, xR)Q(bX(ިBp)~KVҊ&钶!)V{bvΩJjK*џb "`^*)U0*%a2Dȧ* eꩶ^ͪ UjuB%B8&dJg5j*V\fʧj'i +O zd{jfisf""2:k]`(m fnvk92kتZT)AkA|gIjQ +.6ӵws>z Px dl%&F% ʧ>C8HL~62i7H7InU (uÞߘ$EJ&-ޤ.欥,&R ꥵbhCnhrɦl@پ\V VmJl~-m@U1fV-돂,Uk9jnNdmR.$l]bvN*JBҬR'*-m*n^-emKbVrjՒk竖ɖ)% :. oh/Z2Q^g&>obj,Nj-J>B1//>o&/o.*y%x9C2rЮ.v C;4O^)%2+r3r,_+..O-/ʜn13A[^Ht9rRϯTFqN5t2gK =cqrV(MmTkuPuXYQu7Ck 3>jZX#nYMA4\uu^ Gt!۳R4,na` ZoƧfDU?vpubw0[fdf:ck6D/i Tv_ߞgCJxc;2^PSjf5jZ~6$ ~:5s_ g6Kw5vm ,u-w#7ӂxw5tt_ceX7m{;-n/|o5oG7"x?.1l Uںv+i\˵|۬.UKx3u~N*novdoo8Wx縎 ϾVBm.97E% .)W_9gKL9r9K'#'o%T9y69繞9߹5D9cDgȢЌߥ9>@* ȹ׹9w? ` mܴ$z퇥c׹:y5z4<3,èƩswK}Į7;5@342 0CnD7l纷s:G;İƱuxxLJK\2{WóGWsMs{y;+CYFoȺON5VXc9;CSøC7\ɟ<ʧʯ<˳|52<2$<-l4<R0ƤevivGƻػsKGg>#[DDk>4H$Ht>G?V3f~#OwнenWKG;B6ˮ~?@6`A&TaC!F8"4O/^$Icǎ3n Ɇ$?ZT J"!MUjդDR% p徆[r\ϦMKլQYf07Uw>%Z/5Sl0Ŷx((ܹ)SЙXtiӧQV2&̕.a~y2l_׿i+33gysϙcU[N:bÖ=ںHN.t>-gU㾑'c6f m,,I"r{-%Tm! %DABbM -\h'S"O*bѼΫhԮ+o;tQ)Q RZ=ދ>ǪqF)lJ+R,Kg S1u03LSt %.Ĉ͇.C; PAj"8D! -P@M4ѣG!Q̭,3ҳ2ӫʁH S WLwGs HFuTPMW[eoJ?+l]tXdn9MCe?7vvAYF.ٹw%V0i9ݹjt1AXWդx#w6(iUpEnR.kEN{ށEe;[hZ' ?ꇣ.\ڌܚkծ1\9A]I/+O]Yo!Zz;eyWJ)Z)yj_ovk +_|a\xYfe{;g_h'_ǿMrZؗ t!A N1A nߩB@(/>JZH%*A 4c aCΐ5.G S_ȿ "d+"B>pP"D9E)N ",nq]"=C 4 _F5?tv1>9ΑBXG=iwPBT@%R/>  E.t#!IINRhX%+yIMf')F,cFUa9AJ8"oK]/La4f.a.t(?2[2v\MmnjeP"Zeĥ3љtḀ;oOx%4r`Le7P!\,E R =Bz={NԞɼE1z̋RgQ:T? R4 X M]4W|uh~HsL*)TJ领VcIU[y\%Y7'bNb bHHYycFObfأrTuxf)rF䢄Ƨ4 SDfJ[M9@9*%kI4jꬢZ`*6z%H_ji'ګW)N,XƎX%KYz&w2jp9-[)h.$2+f-UfF6Z lc̔)aFkotJjO{T3"D='ܱL745sjOWm5@5][?`-dsZflttmx|߀.n'/Nh# @Wngw砇.褗n騧 y.n4.oG/˾Ww=o[> >hot:S Zd(zGHB pn%L xB0<_ cHo6̡!HD qs\M":GC9*bHFM" hLΌ`,(._l)J+g<;X="Gc,cӈH4 Y=.}4$&/EHz{_z3\g*ENRѢsOh*Ӝݼ&,YsrEAKvft@oNt'CEѐvtΜ" Y KOKi,qHt= jl*Ԣ"4RyT.l ɍ3xz-~[cҹv3i+c\[3[ljktJ퍛lSI~^ v.㱦Gf5&~3E,9{v~*W6cnYط^|^y<;B.wm27$-c 1ғ+gisMZNz£_ZWl5|ak١lE=j˵3q{EWWW^ف5m_b%iillo>}u[~wSyVgCmRێ9b:߻1Q̹>pܕ b9}l6Ε4[]٠vk-rk#7d[Yi~[.rAoX2e9:J]|n;`)"Zꝛ5.*h.;e }uF_@~v T 5~%Jtg\sj3#^yx}|#yhk5Ǽs:/??̓^֜E?{sA?Tw\=y3TNu?Us/"?so=̧}+z^8'x+^ RA/1-pdmCsW{6Ip&ew`f H}#{qmshe oV_ɦufhfiz*uf/'s _Gs29/4DBFxDJJI؄PA2c#~vuҖ:F9x}PLUu;3UņXƂHiLJ\jv_qx4o*i@7?ƄZf[uOWHZHl)^I7Hp{/e!wi_XygZKr(\Xnznh8i1i[$(`mw%~_r_sH،?PUX`DyHh{6r@-fo8$hBϸ+@ 4E5Hn6e^tȍZHx8Osm舃r`senj]xsXueV uvu0 :2IvVwa8o;92قX0y5tu`XXyAӕ^Yz;dmcy6NUZh^z`7 QHnņ9Ws7(rr{Ai>L7w8WYVd9R؅vQ$O}vl(ƨwss䈅PXtҦuIQy>Z9{(犐ِ$'PK iJwi~j(ȉtv&Er]`ɛu㉑z'>s_yXV991ؒǞHlz8!~XAqmW~ٙ9JIVRY.xH99għʙ*80ai [ ʘJJV=W?rZ_}詔|v<ȚfjeUx(Sz &9fV4b<@g3tZwiyzB|vNjUU}byV$U'lfynUwǁ&X*z:ؤPZ*,ժ}V (fբ}j`֩`JL*i Jzm=oEΊnzeZvq9%k7ʦ^ncGu[zMZjYՖ6V *^LI$ī9٩@:[([(a_f7UyR$&:Ga^p쩲aZxp>ꮤvm![ۥb:6S +!!8nڠY9x^kMO[8*X1];Afdc``BO [e`jy9)xQ*⹙g<䚅9dĹ@CغZo˺̪8;CU~okfzHo˓ɪ)sYJ,ڈ Իt+צzst7 jJb;[3 > =CXRKp:ۙENjZ:4c,q9닗iװq՗ʪ'yvZ̐&ukwwKZ{wjlnٛuL|]kf#xvt]sS2 i ľ KrkG`c(MBIۍ<9\[iLtа7w@|݊<vȮvʠʯKw][;*Yy#8ŰlKɵiҽ6mpJ尹ߥ [ql,-QۣxK]sia=p[B[s h{|=ȸy;U ~9A~>cSɷzU_甆ͩElʾȫ4z9³>~gry"|ĸ^ㄮf޾uLĖ% xͫW#N7,V;73ҿmFEbx7)UaU:bqh|tNЏn> ͭ(]qN2g *LW8m{c<ٸV`r >\PR-V}틈*5T`̚l< bMX .Nm=Mmoء:[ސ+l.LMՋy.K|C"h=P`\Nv/mD]ܘ/<>Xܟܡ_no\G{U(d߹{+Ηߥтk]=˟_̥p0 xjֿv=ym?9/_y?~v-AB@ DPB >QĈA5r@1"$$ ɕS,ʕ2i,YrJ(IКBRRM>E;fR9M;qv Vmس1c%Y[śWCX9^@ޙj}vb-XrcpŜY}?^<8oau{MhZ\m^fWŜmƝٳU1+x\Kd8ms?UAv{ڱQKCΎzYrW ޹t:*_{ 8o@d?CA>-B /0C&MC?1DBOD1E9{ BM<U:m2,[oȴ^zG'7 Kj貲T2ӈs5I3u#Q> ]DspIC.;O͢\LS<һ$/ OIL3@89u;U=%'E.@ +_k-!u-SMkTwj;ø$ 4%rTxJ&6[mIDv[qv\sE\te=uۅ7^ޕ^{UD6'Õ;S%-eUkS6'k`7Ðvd:c"rbl1iUku9J6ƺ.^x/1ҥe槸u0ivhݔ(i0a,*kgsGjfWmmVnFn>SooT;/HpuXЉF<^8+8( =#_wrpf80jEglY]nfJIU'=#}l܇M,ϛۧz3ş|G}sk})=0~Ku77| زyXHќV&ZU@e`ڧ9JF|^B;bV ޔ pR d{ʆ* 89 B GE5]JWEIWHE-nQ] 8'pC @h}F6Ǎ갵=#90.㡈?@wܔT4--Gah?1QJ^#S";!_4$$)D&C\yt2lP)UɧUD ˼fC=U x%K!%I~v6ZZԤ&4i>mnsz8MANY2!>s)lfH5~є3%9 O*R^RӘ" cg> ~V3`GfeO)CΘΆb.C&q%ψiǑeB)fMLN .D=EHޒjFQƊFE3hbR:8ȌͤLXz(fRkJHZ8%ҙ\b5Кֻ[ 9FJgܨ*^U]JI+Eqs05'6~ +=(DFViħec.=bg{;JU YOumb&Nljօ&ud%ntݘM"uZ&0ݽwEN)Mx3S{:j-n`vc\V- TEJTsYL+6'ط,9$,3WyFn0npa[vX0YC6JG$iM\~vhuѰ5qd׉26d%pQNY)QY$`m IYRձ^~3z"#}k紦ΪZ73;AK^Ugn9Ba1KlQa0!SҚ'y3>Y aY!*WxAYbSsun\n׽nZ#a[E66R=dK]h[L.g(fiS2*}<*/(5HctMhIYһV5aQOu˵o;D5l6AݬJG򽡍 jB!r;%O hHoyNZ ]{9-hgwK]]ۑe|.!l'0C=u=ѺMu[Ρݻ_*XR&W[mm]u;ȟC]?BS'vx? C+Y3{DԹB8+3 uu!NtyKf4՞Jɮѱ)}^;u};s[o~ /vHO_@}w?~Gտ~oI $4DTdd@s @ $DTdt@?B $ $LB`B'()B+<" -B%T&tB*43+6i p9\0 3(܀>̀ `C:$D8DĿ(E@;lDH=L AdMD Q?GdHID+L DR PPYEST `a$5dXQE\LfE^ıClmD `Fid.$9HFlwFWs$Ds/udlt vT Wh{G7džBH(lkHHĄ\H,ć )쀀??lIsɖyth`ȒB<(Ll\ɗ$ʢdWIɞtHuc6IJtE 8HtūJLJɧAK @Kdű tKK˸K˲AVK @TdzIH8 LTC@J HMlLLlTdM GptڴܬMDDKN|؜DŽ͛0 Nd$N|NN$ <PITD,<4@AAt$E3e]| ʴ$O%5EUeuEQg !%"5#E$UR$"9`&]p)*+,-%[4' 1%204U5e6u789:;<;<==A%B5CEDU: T;xHIJKJ ;PKxv%q%PKPFJOEBPS/img/measview.gifGGIF89aF1BBccccc!c!!!)c)ss1!1111111c111cc1c1c1k9999k9B{JJJJRccc1cccc1ccccccccccck9JkJkkkssk{{{ޜcc1c1cΜΜε޽޽޽ƽƵƽΜΜ1Μƽ1cΜνsc!,F[H*\ȰÇ#JHŋ3jȱǏ Cɓ(STb˗0cʜI͛8sɳϟ@ JѣHu *hӤPJJիXj5ӟMKٳd]˶۷pʝKݻx˷߿ L0]{J԰ǐ#KL˘3knX%IMӨS^ͺukB<۵۸sͻ߬n\{Үȓ+_μГ9&b_Wνfدy˟O}懛' fWօ`\.ؠ`|UfhX'WqȖH؂|8oUxa *#|,U8Xhxh:)zݸc)ɖ,2y|/褑XfIdZyť ǞYyHueYiJ"R{UVi9n Z}b)&foa FQiePufʤZ⢓i㥓颦F詇j~ X3g䨩jZɨpo۩&)Ӷ cJv賥jk됳p)\G﹯2-";l n˯7Zkge˥Y򏻞s;/'p5 v -62s89aÐrc= Bj E+r-'vt3cʵr{cXc4hO'Y[mo6?͸["ZquR,ŔC.0/x޳|nkɸ6tf9.nc 7K>mo {d:YH9jkC'-ݸ+>*Ms2kuÓ/a곡cE. 8wʘrd*i뻙$w7fIK` ȩP@ʨ^zLa>,M !"G(!¬yJL!n400B",+wJ$ .# Kb&u1K"CN=-)I(FpH7Q"w#C`: IH>NĐQF:򑐌$'IJZ̤&7Nz (GIRL*WJIV';i,gIZ̥.w^2I/IbL2UZV͌4IjZ43nz 89mֆL:vzӜt90XMBЈNh7h>s'MJ[Ҙ3 xFx FmdԨNWh4կ@8a jt#dpnZС6Kb6aYָ5Iyko$,l. ۃ MraZ:f*kO"\gJ]<ŐYmmvx}j]sGt "w3|k-:TMY[gG+0^96*y/ڴIM=fyoʊi|U†jݧ IMgv*$iilUM]̆M+ >Ɩr9RmӘ]g_{k1}l> ^px) .;jz7gK_KE7~ KOOO5P~h>G"f[p_.enhg޼ilf_.` `n~jlwNy~!NLkfm|t$h)Fi̧%y nlN~l"fm `/ L9q鋾^_zI! e @_P뷮gR|l=6{ʶlm!.^;֮)) .:4ŮA .s`H 05>~$)ŖGNp "oda.MCUnMijVGp?@NngoImPB?SUO:>(gmOE^to~]l`/_n0nr2zp t_RD^嚯?hHmP0C FPvnW&i5d13g_期O/ޏq {o:7 O#H@ " z8ĉ<^ĘQF=~2EhМ 2 *M0I2c4eάSN=}TPEETRwhAP4-JjM]~9CرMpÄZW\]IDK2ulX`… FiԩU6k] ;ZY䁜zLk75e֭]]wJ*^Ypb޽}|bgmrb,Zh b^\v}s(\z'%1rf;{ $4mAA%LB63fKin+C1EWL,>s>g IN4#İ/Đ,B id, %*4 c1K-'+.8ێ,.B\z1! \<3I>l2А`6̻.eQ F1y"SPK ZsC#0N=P5FYVf9euU<UёoٽC>g&e1Vm?9g~=h/:k&R`jlg_Ph]Zk.)Y:V;oŤt:Hg>kw8}Fٟm<{pψO(zB9 u*)}K_zW4UԣFri`Sp!4 GbկدVZB5d9`JѲ^t2|Wr]sS(Nk1&Ґ>fgY8d,MU7eWS7ϥ.oJ+vK8z1 o$ʻ'ZFt6-pnk<?f<Y#EqZbvW0XqY8']D߭-%ё1N82ʅC=%?Tm.:沛݆:w 6[{A>A _*r@| dK4,l<?@AD(l7Uq9 L( T§A]k{3<@CA9ܢ+D-D«c“sd<,!iCA9:ԝ/$18X5CDѻCįp#=.đQD1|HāP QL+7FV,::Gi<$ƍFIFjZ0CgeGț)ȆzN 뿆$E\ `br D9dMZ@(AI; -ӫ ,BD?1 1BqD{{TIȄAM?,B-j/* D%4\+./NY9H46O1)896-&4W @%d`aIF=DE^Amd<<{EZoӂ2vbBnB_edNOG6c4V45WXcb.\xefHne] 0FPCWjf䩙:=[%b=Y>pf¸γH ۜo.p5fu6b= Kuւ^x.z~!|H4Q<hfZ6gk i,NڹA(}Et@9n|!ix5Y&gmL^&6d$͎Tik A5-Qa kK^(kXVnLLιjrjrj'd`,0k^w_">Q~Ǻa\%ck.Ϧn,٬BVUalt읂l 㙾5Z#gmhtN4&dVԦ[אЋPlFhm޶k!.TNlVQnin>顦עוȖc*bjX?uC-.*V`c&fo6 oo9o_+mF^?DNp omٖٟMp ωgٝWUaMbeUt'tvh/M6!#D[=4Sq_F\E۱[ek޻(q&e"Olڧ-`zN!J,|ejr*pFbE_t/-e㘣ML6ǘA'76GgWn^ZЂE8CȂ/s>o#vUؼbN|X* *,pd'qNld-8N%23e4q57rS?I'AXr/wI^V,,Ktu^uNCp}@ p1rn!meixvjuOr=g~SpE_veKj`lyץ$cP/;'yh R6FGxNGyt)oxy~xtgRG?֠'zL9W{u'fvٴ7Λ(YPrwrR?bL?|s? l4q4g408U_ /l|w|7/C6| jCZu{jD?~+_tDӥcܧkz6}g—~~+\X1ċ(f#Ȑ"G,i %wVlr"0ci&Μ:w'РB-j&-JTNy*֬Zruذa-ΐa,Z!^Fq]KÍyzjJ0e*++q"?*c^>_:%5ꭳ~9G;ާΤk"qB>) okxY=O=}Rϥ? ("< #2PAĞG?Ir*;חA^p:^'җļQ&<ƅ7 #L<p')\\"17pˊW4ch4B.zc(6/$ZF1lt# 0NhZ*Gk$"IeN<1䎈L$\*쏔<%v[%LȳӼen[dd]Œ0g/eO[rEdД|fN|J-DHFc΄&8]"MOt!H 9q$pӝf7oΓ$+KLô#cH}vf=ʪOgt~Fj)Z<7ˎatJQRfDH.D6KiL)9S©DOr)G)^)STzi\ Vƭ$!)3,JZ*V/Z JP*S\Xבu$hZ=RMU#`I֮Q';FldwX@'ؽhCZH-5/}.PB=mʵC. xH^z,#}ͷ+%&z<2!~_?aq),z:_Jã`VrĬB0gga ?vO#ItN{)܊i,ލyceix}Ax%oȫ:6ٴ`HYfsnծiǂ]\Ό,KmT^$ݥ2b3uІȆijs+#s8l'# P"i;43/cjxke&M`j@s94pjokjOͶiH=:#FQYm[۷#۬v7e&ף6ۇ66#Srgsˑk˛ԥ."my [t[5kӭXk1K;ۚ8ԉ? @M#`I{n~;YN[<u~UC4)o :Azns9oVn>ֿ^'Lvoj~;ޕ3){{xɇGl˜5IUxm[|rLs{'qrtд+h=m]^SҞ%CHEǫDi8Ž6[oS{]|oXŴ,?<0j\]nk|+S=3v3G,9Q^hğa]P_)["\\c1`8]^' 31ܳ[)mq՝ Gvuq\]$`wY]ܻxmi \=q0 \mQaNVf#i} ݝ_حYy!v%U[a!ݡ a! &"R b!a a!^:ba("k4^!'JG_\a)"n8`މ",&!F`byB Z}&"%Wg#ɟ-:l" _(E`AQM3z@#Zȹ/2`;##.<^."[//N}Mgtc@.<.ۚMU!$ E&'8E?R \ _G"d6^;d $}"(Eju\ RvK NO@B!JAbK0>F!rEJaddeF%Y8d>!9nSX%Ƥ$ Ka1^W]e%$V ]"(%`YebI[FH%0ZD&jZFf4杉m&gdV[^"-h&}x&&kBk:PUSbVNj^^1^& [}%Xfml4$M:2ެIaY6Bm>炔%b2~_eFcwnb'ND'qeC=\`>BYos'uy'jB^_9ɥqقRh|z*(`crFjDGBNr`hD45^~h,hz&DG}eVfc:$]TxkZ"'G&%(Ej&z$s(ֆ2hVWj^ͭSMQXƙFӑn)t*zZfInG~ibH)'e_vidoh" jnin炎e2^if"jihޡbdzKi&Z Θ+j:*b0p&c'S"# *cPM'f{\_(vg*rN"e%Cý((']***Iأ(ɚ6H :ѹ^e8jjKzmVkWҡ]*Z+}hh ::Rv(6l>n˾LRMNzJ.b"UbAe RRҔZrIk m&-A&Flr*zڜ.ɚRiN$s(ɺ2X~*H)B"^r_Dvek^2;Ex.nljZl*Rn ɮn~"&&* +nZ>n*XgqS\Z >d{kIfl>/fpTh.]0Z1:{N//g^o +Z'/odWha7!.6>aL`Mf+b0W5,Jʺ`0`/V6mِ]jUխZi-+ .'}.0&&q*.202qbfW_1g|11ANx1q4 !VA(!!  2!!2 ,2+[4?mP&zn(6Y1.'Z۲~\:L 4A89,4CO4PP5Q5$T\tudtlDP3y'kZfۊn@M#N O3M4 t\55]u7D=SׇSvQ@N1uHUeUC,H-Φ0Wr5(lWÛBoY 44,\tB_F[3^׵\ߵ]6]Kt395}\J`OSׄ3#*)Z\⣽velecLW2YhFtNU:+3t!vkFt\uy193PvK6o|ovOԷ~w}nq?wi;hŖ( zdm6KugF@shoDZow׾ x1w7{7mrPw۷8ON7㸍9xa8Gb7iMs6aڅPEuh4i  tN@KJNĶvĸ-7~yxӹMԲa}8oqT+Gk5/e4uBpuf8oy5U:\lvsgh45wĚz9|v3ď:9z'sJs(Y*wek8Mvv$rM66pA{Dw{?:y7Ϸ7B kn36ڮ0 k+.߆3w9w["g<lЯv|t<*ӎ^{[{r2> =׏S<{t3GS'ß]Y(w'5_>Ǿ>'~:HuSS>X?'/?7??GIˁl7o?wùw`A8aoMGS=IKQ'~?@8`A K(3D8bE1fTcG#n(dIIZ$!BiҴ̌3ѹ' :hQG&UiSOF:jURٓNqRĹ(c"lвYCL[oƕ;w/w5{ɶ}kqp` dI3̗oU˗1gt3ΟvW|,S{BLyѧW}{Ǘ^ɿ~ 0>NRm'j$-!P )‰c; h`0H,QLQYla1EJDGy@>#" E'R)1+mPr S1SD3ID3 5$7dqȒ쒁? TЊ21"C=htE)I)}S11J99QG!32TUYmBòËV*]ym%10-c%TV\Lf]k]J#[oo۟(sMWumwW^u1r"|8e][D:T-!R 1cAY] %\@eYnv ^pИiψy&>2-(88蟚h駡Zꩩ꫱Zkq릿n"챷.N[\D餕gc[o57\pVOfiǛ\r)r{ߘ[![-H]Wa]iq]y߁^u֑_sT&5b-*$^_/O_Oh%Q%_@4@.PzPo A N1A n/3%4 QB-t aCΐ5 qHBY z=D!1#;<D%.MD)NU+n]še4XD;mtG9ΑuG=}HA4!HE.u\#c\IINN%1IMn'AJQ4)QJUt+aKY򒦌MNY/La415K[n10q3M0Fմ5Mmn7Nq49љNut;)4rnȜ=O}?PT'" H. u C!QNhB-QnGARt;PKN.dHGPKPFJOEBPS/img/awmpluginseq.gif SGIF89aWWuu3J` 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Ȳˇ^4s͛k|sϟ0)QD^LMA bUXY^]s+A^f2,®C@ȶHAN4KD4".ڽl޵K#ޯ|RUx_ K>9ZŘK}NcΑ=\(үa[[W۸sDSBeWG E'N~9ğ7'[ntycʛr{;>ݱwϋN<я7}̶nﵺGw_ݷ_ `zeX5broyMQw[f^/ڇ&!wa{xl~' =Y&MJN5_# FcAgLU^jIir饘fJW&F=&#Zx^#zo&97#k$q68'PBgٌ\~' >zj:$)WF^nJYz^lNjZяb"Z#i9+8ܚi,xX5jjVi|~kCvmIi[߱˭OδF{nhR>rbApr oUlaf6,r#G<2 R&{/,4l8/t3>,4C-(IFӉ%}7t0cTAC-O]eR 臌tBs"^! &Pjle=R6 S6{mf/,upf.nyyԄe8-n>.ogX#|NOj\k ;4u,O']/|}Uc7 [w=?ׯ+G&͌rZ>s;N!|M8NgSJ<Bs5X$[ֿH YOjWlxCo=:_!H`&&y !F6|{6Uъ[a嬈.Y{,h .L!Ĉ'Rh"ƌ#Ȑ"G,9У@&Wd%L2cҬM*q3Ϛ; ʳhȡHQJ=eTXʵcJNZ-CF^Tضr͙D*Km_} yEvB qcsF\Qaf \3`-Ok4gAw=Vg1Vjǯ u숴ExtM,ɡCNi;Ǔ/o첲32 nʹh ILv>t̤&7^ (#Q򔨤c)SV$fIZ̥.i] .{)bL&c)B0љ̦6nz ' BgL:v4;Izڳ,A~I#9=({,Az&TQ@@'ƁrP h:Qz4hD)JR3Zx'ԹҏⳣďKRZSq:BЧ% O͔s5%@R Tv4lKЛvj*ԮF|*TT'hlXmp{_ V5L?*օw f1 kLB"Ho d?n^|BHβu,e>]F/2w`6 pާkfF0 Ԥ=;zNF;"'MJ[Ҙδ7N{3$MRu5VհgMZָεwk]v^rlMOfe3{~MjxUmM w&MGlTg.4 ]pOwGMn5 6Ab[zOӄ޶+8!np0 %DًVoqאr q>^| Ow =vg6##Â(Dyy^Ö (ug 0fm_ SqyV\[=;WiŎղS\a{v="=1!31 :e,E;&]p>x8ƪ{s#< vͷM @r!ysw=w/eoRl]hn){\Oc'\3燯w3?b;_g}=wc^Gm&zT{:yet>sUvgvg{|Uu{QWwF*9'ugry%wwt|P-8C/B1I Htoޖ~ 44Tt(j:w=z@MXqZdw跄fDBN$䗂UDlkfxVhKjpr84~9;nֶ|MЇ|(XxvBGjI~F(FxSȈxwf{Hf8vo%ocׄfdiOFMqlܤXؤihÈiӸƉ_Ht,v۴hi苪xMiHi帎hhhixx~XXHxXO8&ИFψi"  ِi-Yؑ8$;38iJ,Lɒ )LIBIWU)̘RɎg I49h B9kɕUMIQi^9VKV8IVɓ?9(THHxil = I )Y2ivYQ0+sySɗ6ਘ]yƑɛvs陭iI雮I{)p9)FbA֝Y5 yyR󉒘y]9inIyY9鍸%I1 )l֌i' ;-* ə,ʕyiJʚi4yxlSX 晇іt}X8P jjJZ*HhrzwxtJvz]p\JFyE^Z8zsڦ\ʧA鉩H& :L:jڪꪩy9gm٘ihhX$١(jzq iꨛ:{hi: O:("ɝ" AjbJAiٝ6)*d +i5 ڢCm zA*9zPYYΙ[Ϲ&: ʞx88z9 ;3ʠ!ɘY ,.+ 94SWZzzȮu{߉ ;ٟ% (*K/9)nKMiZʰZ5:GZ4k+ۭ ?r[bZmGj;i+;[r r멲x[z Fz:RjZ{lm:KLm̯|lD:Mj* <_ \-L6D)( %1IO1+z˼(=!mM医hXmu|m~9䜟ϛ)2jr%n ڵj>Hkd+ Lߑۈx.ԚԢZ^{>mҴ~N+9μ-zк|꒎%ݹd^P ^9~n҄|c$[ ~ȘB8ͼA.̸3[[{ . n<v> Ეнj ]<8|+D 5Ϋ;.?NCA۳tVK:AF/@V4_[I_3caOg +RݜN6 l/|]< WnmllYnnr\x/mɍm;bש"ޭ$>~<O޲ɳܰz?q ~K^)d+ԹqVnZ,^ؿiI Jf~L>հZ  ?QB %'Vʬɼ[".ɿV2—3B@LT7@0 (0VL/25lS+tB%dIt(d% 2K-K/G 7ɸdL IJMS:ӰETDDan.*"fݦO~0b\@0.hf+ *=nJO~J'1i~ԠEhBπsThD%:QVX&*lZԣiHr*K"EiJUe&'Ke:SO.C9Qԧ? )N5ӷGEjR)LJjTNr OjVfVwjX:V^y՚;(YպVʨ|iRVufu*ZWf-jZ:X²DJG XƪWkc%;Y>V'lf5{P˪i->; Жִ\OZF3mmle{tmY 7ȸz6.j׸nd\&7̅qطF׺G{]6nxO׼%`ϻ¦塞{;ʗ}߶ꗿkz0`Fp`7p%[ \{wo_t =j9 [𦴼MoR_"N6nW`']MTn!Eks@ Ox)  <@KϤr;6=>v\8YT@.3kNr_ܖ=YZnVt#36R'ӁdukzNv6SvW݁h7 ]e_- 4۾$oL>4#Z[mq@ 8?W>`4 Ӵ$9t@Z@ $ @a `ADA*KA L !$"4#D$,c&t&<')*+,-./01$243DC//0D489:;L !R4SDTTUdVtWDPŴ(BK[\]^_`A[;PK_ڲ""PKPFJOEBPS/img/mydims.gifzAGIF89a99BBBJccck{{{{{kRB11!)1))!!!BJR!)!9999cc!c!!!!!!!!!!!)R)c)ss)1)))))s1!11111c111cc1c1k11)9999k9999B{B{B1JJJJJJJcRZsccc1cc1cccccccccccck9JkJkkkk{ssks{{{{{{ޜccΜƔΜޥ祥ﵭε޵޽޽ƽƵƽΜ1ΜƽΜνsc!, H"\ȰÇ#JHŋ3jȱǏ CIɓ%vtR#K0cʜI͛8sɳŗ+JѣD"]ʴӧPJJիXjʵׯ`ÊKٳbjepZpʝKݻx˷oԷXʶÇ!^̸ǐ#KL˘3k̹ϠCMӦgFFX)װc˞M۸sͻޒbqȓ+_μУx\Jνxu[%|*`˟O]ĭSgS@W *XUQ5 RHaxv~6"S_'~rbF"x}X+c^#.$R& "Gd}4f#S dS/8dKveZIȟCn$ulUaWMViX%0זrP yZ ihf6*VȣRB!F:6ᄒ3zJ#5ʉtRZr*jz:j+YEg"pĊue:+Цԝ,Q6[*̆ʭQb칯:ܮ[k𺕢Ae:&p^d..3LpӲ۩Z,W $W++ p4Ce{pw8{ +.p8jn&-5W߰(z/P3*d;#MmA?3޶s:L9xwdeQY^؄خ0W^>]4zMF]Qk;)bnou尫Zʖ+َkRiUg7 RsD1LMzJ:uhSV@5rs\{"7jXd7]cd2ɇHشCE,> PLt/ IDEg$uɃjgDDF8o> IHѐwL"򑐌$'IJZ6L&WS7ⓠ (GIRL*WV򕰌,gIZ̥.w^ 0gYdL2f:Ќ4IjN%&6nz 8INZkL:v.y̧>~@JЂ%@І:DPONͨF7SV HGJx~(MJWRa0LgJӗ8ͩN#jSVJ,3SZGeRwԦ:5=]RC9XV5WmRէz`ugTU9գ&UAVeVEE*R*Txͫ6NJUլܪ\{AWº_:+*jR֕Uf+Y,dGKR,f͆VRmj9UE)gZĶֲm\W -nK۹vjZ\Rflu6uݮwKޚN_.*dN+{=/:LN,J3#L {Ȱ7{ GL(NW0gL8αwO@rnP!1d*PL,*[T,s`FL2sfNJdp'j@:xγ>πMBЈN!J<<ѐ'MJ[Ҙδ7N{ӠGMRԨNu0gUհgMH;Zӎntw^}iC-=38 ~ Mma;:60z ]ܢxECy8حf" jNmw7Pm0٧\6 cvv;|ζ nq3@R3AfҝXWjG\ܦx/ޠk|\-i?Z1~ GZB@˗L<%+k W wNJ<&GaVNip;_@ձ^eg=4> ݮ]Ag!S|yXGuo-]Qux f <FAHמG_߮;OXϛNs?ZVXok0o~ǃ?/]^ο8~Շx>?pviG~g}nG׀~1~GX7K&}sg}Wr}hh} X~~XxS7s6h8:<؃>@B8&Jx]szviwvf7 g~h~xH7'Wy0؅&xotu_fxhx`sn6vr`(5Xw؇~tքdWvP8my|KE8X&D\7JeiP0h(kRphp%NdžVj(!u(hjRiV8oȉĸ֋ P X 0 Vx~ 6Fxf88hبݸthjyi w (hi'6k k0XטTY8~ yW(R8y)÷{,iWU7|H7T=Ʌ>y(9y2YxA~-{1wyx?}Pi7 iِmuȇ6P0hh¸c||0'mxi=%yْ@[99,*hקD9)'~G gIj Xjxi hn)r J{F(X~OYYYiʹˉy~)ٗѩYiiɘ㉅U Ix&rFm9Wv雁([iɎy)Ǚ JٞZ Y~y9LtZ7Vj_'p PЕ :>ziUG*mɏ{x昚޹i9ʝֹE:͉Y !:OhZ~rzI6Wj7i)h0:߹bZDj ɠrO)TJjZDs?z٨f Sɦ馣ꨊd ʫ j:w詟69=ZTIM WQꞽzJZĖɩj -ڠKi*N:jDYj+Miڮ GyŊy :tyn8gixhNx (zjXfQ*7u|M ?C^Y+j}Ϛx$,˫*ɰ\8(#zmn8:qAkpJ+Ƭjɣ"; %hV[|ʢ鵃{b ni;ʳ;{6Wʁf|;hV ` Y*jzzZj`+::l˛Sۻ lz)j)i$ ;SJ)YI ۰*(m*z؟j;{7F Rk鞪toKk=hD<\LKL;kNJ{AiZFfնkKdɾ ~ ˋ}Rœk (* 3Ϡ9H> (,ĝJ;ܚlFqMLG,mnSLLgE»FgpCpA,'ƕKeĴV`$grorp59tldFybBiȾ/.H ȒFT^6zØL_<>k>~@G[^JGՊܙJ?l^_nkczd)Zz&圹j}Ŋv^~؞ھ>^6XVn i7~jx Fp~>n^j.F𰞬k>JN>ƠF fw2iOP6/O;ǡ)! Z,뽶8۬nN % F:].JROR_?`V"|  ĥk[?Tޤ}]}Y=qr}_Mݍ|~uY5JTo`eg]܁nip/eVj\|؝_^},-X, _yEJ_`F霆܌EҩMW=5JR\_\YMZ ?gLᜇz\r/ŏ3OXqݠ?ѫ D(`A \QaC ᩘQF=~RH=khHd\r˘ęSN=}>gPn>/™g\!恀C3XRj֭]yJ.aʴ]ScR}卓G~,+а]O:skQ迭_/J,Zl•ː.՜ӟqe+FOywO"ˋ 6dAe+n&7lꤢ*+Ω?FyQFc9KcF`|EcŭZ$JYqEm ,j뭸$+<믽8˲.M{=(?Ӳ>o'òN;B$ 7 1<2nӨ+ s"$F%st%u1RSA,KJ3N\l@3U|U6CS!7y-L֍ijYg]M^ի +CCYD?鸪8P't]٭*PmGL4ۯ.- /Ji34K4#Lr&U.49؂+dOHZj)P7f1`!glSuI St)^e%MuYEy-jYAWjkwcZmvCqY50c$Z頗i_oKS{RjU[6l|rɽ;/tlIWZ漚{;EA%I^5yHއ?~秿~?&`8%Hzd=ѝρBYP"i?U~`cEP7BЄ'Da UBЅ/a e8C"ІS`ve|(ȕOGDX qIb )VQ(Tb蛔m;l-JgǾ^fh"9]_Aю<Ҋr4HF>9IJQt\]<3حp$/uRF|'EVҕ1{,I$K^F╕dԐ̫g>TnHD\Ȭ]*4fbY1يD$dQgT|M@#fƮ"%3vJd39NE3p@'9PleݔqiTG(D͙Nѝlty\&S>nr[N  Һ3": \NFj&ɣxA5T+%WԽ!hWzիfU\elXuHd͉,d>՞gD;Z.r誩І|IeZURo[-6-ulL)2Ӵ-+`ENz"Y\8Xp0 ޵kkC;{Gę4vwar)^j (i> XEVSB6YP(;_\ `~ ސ@T|x2PD>mrU& fnQ\wP{8PBb f˜^ E#uɝJ$ɛ~rN*+ 00`D1ary9i*>\bH+1v"~=$6u#|:й@l[t*Q8͢Uk=)WcffiLۉmeN]C'zڋb6[*ԗl1 ]n]_a<x>p߶</rϭW(:W8d4r<'~őD%#\ǡ^]_hodP~|.79srrkۡx-% 5D! E=f oc!>}R<:-K=p(<;`R1ojuC؏eoqxw/aw]^_;gZmgdĠ+x=:Q{GzR4)M"c'K.63T)(Hm=P{"5{4ϣOy~Ї;'?q;c*,K+X0gcc <ʳ<(<:4?8s*"@i>p;P ==@sAݲAzA;$A+ AX@c5 T&c@ 48œ(X+ $ھ<*l@B/<=( ( ,qDk@:ѻw2K&-+3࢝ 3/VZD+j׋84QDЉIl^c?F8ÿ4B61 Rwß[;0<.l@a:BI,^ bdCDCCK-ZڻiFƪmĎnt" E\5h7$ғ3,r;Ԅ ȓ IDdJwtFFƯGʝ썞̼o40ǣLQPŽ sx>ȁl)Jj |<飊` K{Hsj@zȻFKLI=lAP̷;/Su[KƤ Ǽ àK d.4) =;{BĥAtd0 0{Ƿ ϴLˤ$KAbAҼB$EИ곾\D,hiĨdDPڑAPTNB:3\cCALB*=E = E  ,6DcMMt  04$URHB BS?%QB4eԱTOBK20LS` ̖ғ(U6TCTN]TҁMK}QeR-,Qd۱ZժlU{DՒJ|0y<%4TR|VklmT)VęU]=ħx Zq֔lUT4V#dEWi.EUyHzNݓ[΍lNFuRWz gxi1gbK4؃͖{ݶ7퉋XL43`f0aHKKu_{AR,e<}va#;WJ34&L3DblZ}3(Ǝ؈B1Wa N25K^w-?&F@F.E9U,NĢ)^5QdA+ `nRl`y9ClJE+KjcJY3B6E )3A6PeZVfUeUM SF1efCRdq%_ia 62q&yL&BmfjE̲΢n6vNSy f9R臖 mf{u~ N#X!P.H_k݉FqmSp%H0͒ǓNϊv~[-1hh[j}Yikۄ8$-~Y&`s6MN~Ҹܞ* `0P#ۢh&참T˃  P(l8lh蘃  hn]}Wv;@/ vȨ֩Ghh4 FFO40;l܆nEijO(0 Ph4&Y@#RDf4kEQ(0.o>otQ f]۞W0QgVa 58vY TvQ*SW.[2~_VoSC,oV1q2fpFN^qj noFnvW8g mCq(Ok)rr *_/rl#.k6iOs5n\n!n1O&95s% ttflt3.t>GoFGsIHOLh Թ-tWB٣XS'!7 8i9utYăLu\?]ՒQc?M^"PJBd[ghgw^*Z 6ge t?Nv?vZe7 h7gv|kKYbͬII7n:7dc^޸stuv]l״ܽbp0v}oWtawvtC/kv<k׺wlhGio$r7w_GCb=nHSTΎmwhpp [fy$woXtd[ushgRozSN%U%Axe_Yא(,%xKmrdhq=_8K×3Vdiv7zBy|M7GWg}vП̷nDr`?}|t'7}V߷ds/h0}vWR?]Ogooz}O]wʉ[LSG}WI$9B&i᳈'Rh"ƌ7r#Ȑ"G,i$ʔ*WJlː7Ȑr̚7]'Б>%4ѤHx&iħRJjլZN uTVV*[J& ׸rҭk.޼)]”I&ο;y&jG4Ϙ^*5j嫕byzklځvزgӮmvI1s ָS4"me;sM&kmY#<ף7eF(dJAuMg u "`WuiVC Ej!f^|BrῺx`ujYvPhߥyX7 9$E`"FѓEYD\3" nF]Y8ޅa&m~oGXny}g`ZfFFXUZB9)'|I2YWSZiE%r(W4j.Zx zv$'p$r\2(,)̘6*k=J ,J땮JӯA:Ѷu;ҷ;. .I)v{/"kc;0"zp\R/[l iy1mL^# 1ܩ,Thk3=w0<4K2$D+p@_;^^3/prx@5]w}43=6٣9|e[t)"2l5yMmC}8xIݑUkTeDxdp;NE-GcZ\tb=:&)VԊAm7b>y^7;u~zw ~NrW:_߶;.}h3x"N I3Vfl yVp#,,g>II:a&(=ɭh]S:PĐ(lK<g2K'k%Oͅ,d$)~g.vGld fׂ[e;)?]WR0tΫMۛf\39#w3giEx{>$>vc%艊P~*mfInFgQ앾T'3ɞMKR`"hi/R]qBU趚ڑ-} 3 mtv;/{WUU4[׼9L̗>/_W8[3񯎼Y?ٟ?׹IuZeZ6> _YUۨ`빉A~  э^=M ]Pt Iۙ^]\ٓY\     " *Z N!VaQ`6Og!^!X!"*x !aנ!!`!UAE!8""2,2#>"$F$N"%V# /d!a'G(6(nDD"&"#6%"-"&f"/'R!}})HRt+*"#֢4N#5/..!0v/B0&,M)#OY;C/.B-+4#@2$?#5,ޢ/.lc7z87r8R 5=ݓ)_;Z#<#=#>30b?#@$ .-pABn^8>_CfA`\T QG~dHc=#I.bJ&0DTN%UVU^U.WւL֤ݤ-!O61~XWNL9 \=GQRbSe^G`ab#B-B,|%XXVfؑtM%ŠY YdqdSd=!e0 @ JR_6>b"fa*fba.c=Jd`MVq^Bj9%O|#g`2a1ZP%$=XF IQkq%m`bfb;&aʧoZ#pւ~cqe!k8Ds h8D2rf݀5-(r 0ʠ,wE^&5q %I.eOh$fX#}(}~g`r2@6&-(icQ\ _uvZcllhD0|$@Ci/ B)'_*hB:(&))f2():Ca&c ю}^ƣk)ĩjBi- f )rfMVi*.CZZ juKy'% 0%p^+pj.pkz+b~+))B )*sNj+aTgIv_/f66,r0,B8,b,-ll*t(: tk6jl""RI$)VB(l&$L*.H#*)Ȇ,:'^NҬ*r*lV.f#+nm-۞+@)|RAg+b^-5L teuP*Bpc>&,l.v~.膮ڭ(mZ-*6D`n*F..䎡Q\..~.&n>m(|'\ޢn홥>IfBWfnڭ/-FRYnNekܧ5X 00'/07?0GO00ׯb,tp,أz0 0 B&&/pCppqW0q'SKo&.Wڡn1'ws+k&T1DZ1ױ11* 1!!!7q G1G$ `ڀ 3'w'2((2)r)lrY)*)2,Dz,"M^b#CN2/rUe &ϲ13222E33?s2O35s-0G>.7sk9C s s9OE5;r+<<=i\39:sق@o"O3>7=[Y@tYHt)PE;4FW>+X*tar@Ht7j`+rTKK4LǴL4M״M3tNNkBOMP5QF? JtS8HƖ(ƮtQ_5Vg5QGKs5Zx&5Xk5YuYuk`,U;,SSHGu T^^5__5``u1ua aOBb/`7c?6dG6ZֵѶµf \]Gh6i;6i DjOjvi6ld7g-f{f$w3,/,L$p7qq7r'r/7s7s?7tGtOq϶A,mno7 6T8x7yy7zz7{{7|Ƿ|7}u?wkv788'/87?8GO8W7A{fOX1w88x588Ǹ8׸8縎889As7'穑k?9G6yJ_9 nwm99ymy⦹99ǹ9׹9繞99:+,.77>O:W_:go:w::::z{:z쾺:纮::wfM$/;o4;GO;W_;go;w;;;;|{…;׻;绾;;{:":'/<7?⽙ﰌ/[;'ps1smE : xѩ{{<o^g_Wn7[PiZ"'{CzWx~ZmzW밅1nπ^֬|AmZإ>a tß.T6vp'4x+Z滲Q9e[Cl_ٴ QK±"nFbD%!wdR8^2(es$jJQcȵ6J_,J(2L"Fd$Tґ̤&7NzdFՋRL*WV򕰌,gIZ̥.w^ 0Ibȴ|$Ќ4IjZ̦6kʧ> 8IrL:yH 6ЍnfկݫX ZߪrڕlhK򦕺"yޞna/LUOѫ/LSNe [07Rw GL(NW0gL8αw@|b wH~&vN )[52j`sF,2d>4pV:yŃ>πMBЈNF;}~*J[Ҙδ7N{ӠGMRԨNWVդCaMZָε/MiPSzһMbN !9O&@m3AζM`x.tqZ>elffZfMzv0=r;H]7ngwtuAq Ծ'Ng:7͍nIUs}_c:rKwB̷qp{x@r.|r%WeŸ1J'|ޘ>ҏKkԧ7!?!MkM}hQd:ꕆvy wC^NhFvBB혦;+w U^Q坮gtǻmqB8e%xKpj)!'l!.{;=q;{ooںY_io5|/n|A`C^|~G)oc~5zS|I`}vnvgi~ǀ X~t767WGVL}AJfm+rvx'G|׀,Ȁ.iH6(ju9l @B8DXFxHJh't'h{kvU(y지ytZhyYx~wd8j9wWJ^Wte؆nM@ j'hi*p؇2wȃ<臄X8qrxJN8vPjTvl7 5xhl(}S,X؉osn&( *X&؊U~XxFwRڇ‡&N5'ʸ~8F P X 0 ƘT8szƎg񈎦接&XJxpHilֈȍ~PX&FģLjwj8k* k09؍էnbX~cxyW{Y=48|@h@yALFɓa/?Iו`iDyUzcI}J k锕׀R|qf w ȋhk6/1y4ƨ9iJцFٔ18w -|x_y08i3x|Y‡JYH) )y|q{ɘ{){i-)y (ڸ6 z ~[iW> 5~ٙIߩ))ٛIIIiII9 Hbyj(gi*iΉ9 y8IdɓM9Gy nDY)G)I)N97>ii0jO . i>i Zx}Yjlp,* Py':8Z GygyciwZKjtɚiቤ} 79z+izj%j~ ƣ&uH" ڜ*٣ڪ)jʤ4:um5 r: Hd:YZ9J٪wIښɨɤڨ9Z٬'')[ڥ5﹅s}\ȭuGcw֩ك)yEy:ڝ'"Zj:*[*ꣀan:)kJtڠY6QIxnN J:ZNZ|ioi]a{WTvݗxBTM+x K{)ZgFHjiYdKo溋șjjki @; C[ir[dɴzO{JoWlظ;#8wio ` ௣S1[NkֺKڻfRiB o ڷVˎ\x!Z;+{*@Jf˽C ~ˑMI74FnP.i.+)f`VkXowa-<{_}l<ܹ雿i܋艞_nk.,:ѯcz~g~;KM^@}^hΗ],lFF ^E 9>~6nNPiڮOPپ`G*ij ~>^~=FnؾHyƦ "\?q V򪜗-0%'oTLVRXi]_4 U{?h qk?[-=6܇vy{ܿ}W'}om_g/?1NvipE_߸M\ ޖWl-xQ|bmlm8}_|mռ=DiȖvːld(PհԕuMuT7vlw <<6ѫ $XB >QD-^ĘQF=~ H%Mj| !9n!s̗1gVēRN=} @PC>3iJ3ǜ>3Qj4eV VW`Ɋ ,ײme[;j=WN)XZUJp)M&M('ĤElC%[tX 3ZhҥI4ZuDY)fŝ[Ϝn; ݊,޶a3mscVwo'^*^8 e̔=_?_j5,5^I6lr'|n/|Mބ *6z*p@N# 1:l0 CL1 ZϠ̷ L2$4@'J"BtPF/D2t86E>,:D8]7]3B܍F3/xkJEeQGrBdpAٺS&TJL#Pp S=SVdNWL@Q:4RcE6YTI[Jp&Kk]% m6(YcqH396յVJd]իpBm6`Y{v-/ ߣt57w"\qIC0'v8?~F_@` Wfe_9fgfo9gwg҃K8څZSטc֔j|E[;l&lF;mfm߆;h-jTQ6*&/ukBOnp 6u.tQb(&-<[O0 ^%'>!bOu* ~WcGLh glyJ'|be-FNBdFޕd)bF7It%JzV* @>#;,CEY!o](Vr"7Ē$ SDI҈(SV1"J[qUU,($#թK\\xƥ^iS3.u嘋Kf.}TDF j/W͚V _\ `E KZңl"EP)]O},)Q)€V*2%Ƅj %eCPqwyfXYb#hl=4=>CҐt[LEyS:*hn#(A F UZҬΓ20_jϫ&2&USJړ[AW]pڬZ;2CTκ [uU&6i.XF GYFPt, ,yk_F QLunOJVJv/Ի^׽o|勳&}LQTӦ&ۺǷ.l;nKԞ^k~ 8ydԋ0'\7/I#)QX"N'w?F^bTw{yF!`t"%,#!GȞ6_ezREf6N_G|ƽWߵ͔F);Dq~v>z2;I/y*e{։ (yANz'wۼp7@6>V ёW4 OW5GǪc~7ĵ?Ыe"ߟ7{3455`4Gc7H@@#*Y2P[7U k?^5]5_`˳a ?B=36FA\!<̾=gXA̧ɂ?B"1B;H.=s?+$CBl$8.T#®29hh.|x,[;DD]I0L76<sx5(O栧&:DDYDRºK@ TT;NWPFC/< gxpY:Z7 jAA٭^ ^` ._8 =FN` daKeQ`\@.[%ăLb)*HJEbS- >bƤ_%^̉ex6v6b,6*^a2:&_x} =fp ݘ;fgC.j.I܋j޲άj'jgn?ݯ\>S┨b"hn᪦L(b*e(Ed!j҉gn>+VCvcl*a_xgQl$Wq9Ķl f͐lĤ3+ÞNmkH*glb]IfƹƎgMUc$v^]^_>dcMY>nnAhfhocN>vnkAl&T ^8iqoNgpeg`^nb>pkp &7loi 4/Kq:?Wq 2!w6o+r#'4$/L{6'X9)j*q΄i46tcˉr/@O39n^s zݤ7ദ6DGfҙC90_OGs}h2!Ns.tsEW6;ͳQWt&TUr(tZOf8J˹t_7D\3wϮ< ;7?]`fv oVHgUOmo=`WVv_G8Zvx'p}wqv2gUqG/=ylWxv1/.H)'yNxw'fGGVyն<›'ono7N-&-,GzVgzfѻ7{z,zWV8y?x?q°o=g{Σ(ny{GU?̃'xFo~t ſ/}O|w|xtmP ?}w|W~}z{% Xub}W4ߧ~0/~M3|n{~w|^i:~/sK0)Ϥ$8*,xPೈ'RhѢ@VVXJI$9J&OiŘ2gҬi&Μ:w'РB%ڲ!9n!s TN= (֬ZD"l{ 7$r/"KÁāX}vڇov6W~:9].cC@?v*VxN+iNN]yS:#&^ =KOyU{>u_sV_p޲;ыpt M~κfFQ r0~APW v׿X\@z1Ih'T0_)d^Z(D]-jC$ayxA;"B4p~s` !C`4d< NTF)J0 ɋ/}nlQᯖת4ʱX*sHCiVb}#Ø%@j}4$(H &+$3&el%əщ+%.E6C,"#h*=i,Lj9O沚fe(@k䘘#W9K3fd4/nSgشܬ8.?b38Hyl'B3J &4tƉle%-љA4RBWaY\)+<4}pB So7-}"Lsڢwo#H4y4ӥƍd`CW-.1޻%Sjo7a~wSjEY)& Ҡ"M+\iy3Bƺ¸'s+KĤ-GyR_5])fJ<,fqJX"~\hfS 6FNd/VVdAWC&r,75Uqq^(cNTժmh RwgE;LjImr)ܲ:1$}0c]ࡺ}u]?Rb;Jo3n;7v)J /9vt^si9LXkl[]aNk덈IK][dڈ+@xk;Xme<`kN&\3C {a[ςfrDP1XepIvr3_E-z>Vٓ˅3\ ͨt\}ȞuZWEKzk[vR:D֮Ho:.VHjzv=?ozLmR\y]-k5-:5Pt\JhKjhr^ ;:ErXt[.ĮiM}bk74۞\n=r;IwOn'۾K:t&}Osvbr`/֝'9$R|dxBa;X(1aa%Ӹ#/p)o2LaS#,؟yIWKeޓ(d3vqsTĮ1{{5gfy2ei]~eSvmyHUB3uY5yp0,oӝaiumOdKM˞s\\Ҿx'ʺ}){_/Ol>߃wRϾnBzyv-vc ^X~Y=[^Fi~]] ᖸۼɋD٘1 āqEpAQz܌!? 5\]e ElY W\_ v :lܴt,`p`ZDiڽW E! V]at~1wyW fFb  `r X *aÉ a5FQ^Jߑ-S: r#>!T BaTU_4b ($d;y`Efdэ$IA]Y#LBF խñL4$d$! Q5!U"RSFO99";bEd\!%w5е]bl8v8dEKe3eN\]W2TXV>nNbڥ@\P &إ $U% mN!eRfnaQ-T^Yfnck2gj2j6n~M&c&qEEr#s:WBkY N0"rufMoVZuggw4Lz霧ŧ|:{d`c0x6} }2g-A*k֍~~' FeT!ފ烾M. ezg2m$iﱈ¨yFq"ZHeh_&ƨԌRh&%idW16)M>ib'/i'cji١zp:*'Pf\Vv)6)X&(BfD*cEK&0j™n*ȩXi>#asDb)ƙ=~*{*ꬂKbYn*>*,FN,lOMka$&V`n%>Rɞ,ʦʮlZ,-ө$!Q:\R],,ʺl줎cdKPdF-2cz^-fn )ln)y(e)r۾-z-b{j%y!iښ&&% m&..+ݾ*Xe%E6~.nX2&Q)fd^[j.Ʈ.>k~d_ݒ,.)Nrl`2H/V:.kKMm\/f/JgrOB/ƯN!*/ʡ/0 $oR+^!3L++1do0w0g0 G/*(Φs0Ϻs00f,r/YwP0_000 p6KHvRMLUp_gkp0t//#6q2>^,m޾N3t1C/.B-+P;' 2/.1q;CF.<w+ !r#.-q#o$?,$KZr>)l`r&orqar2 2/3373?34Cs01.Ts-r++;l,,GA]B&li&0w00((r:3dr=s03>3"ۂ-6g3nA{k7w57g'"f2/vdoهB/ @ 0J22s>>3Js*@4BC6W7t*)-Vn*entqr0|tH;􌘴<3Ksi=sVtt-uӴ6kMKtZKNuܞ\uʽ@q-Q-|]%e1ti'wdK6ttVc6fgWX4Y.N`ݵ]u[v\55jijrU.!%i0u4'4dC&siDtGtwL+hFr]vl5xB\Y7jjmW2D//Ίۭ"ȍ*v߱cYr7Xu7xJTc-h7w{Bv{kgkB݆z{8m7%|wURk2Gur 0KK@.2# yX+D)t3nyk[O5 8Z{eݮ/xNnF&wGqs#;/i:i:3:->'/>7?>GO}=Ku{ >闾)(`p3. llGCS>>B?O O?0g _o?ky|xw1̳@?ǿ?׿߿A?*?@Y5P@&TaC!*WE{y#GA8FTeK/aƔ9fM7qԹgO?G2W$-z4)K 9ڰ5gfպkW_;UfKUKm[ob)HTE4YYJsl]@CJQLQYlaQFAo$gRA4"qI$.h+'R){P"[].411,(PDD55aM33!GL]Sb? TP L,|EFjI)K1TM9SL4IGS?MUUYmΓmQHo;XT]y핰BлZ-Xc%mUeUJ4IkUX[q-߆2XD|w7^${W}X .ݶIy~D=W)C9c YI.QNYYnaYOVg7^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!,>7H*\ȰÇ#JHŋ3jȱǏ Cɓ(S\ɲ˗/IʜIMn̩ϟ@ q(ѣH4T"ӦPJutªVjm*Ī< JlRW%vZp~|[R@wM 9oXN ,Aw8ݽ Kpŏ옱E˔C$dΊQk<׃]3EZ/շ;qԧmgKo0+_УKgVkח='RO?QWo x[E lX^!֙q|'biEUOaȘc"W z Gpplᅓ;X5z=YcJ6xc3nۖgddjkVw)ш3巫Z_ZZTm] l ںGkz֡ )>ֆay*q{ {_О'Ypr-,,*糊&I{"yeգ5+._i|0K [s+Ͷe!ƙ}322(gY=օrY f98a}+\c=3^Vc} ۋc^liӥ:u*=fTl{Ood~3G/OKo=rm_>P'ԯ~x+>衿 ''@Pr`wOR ZEe&ի.t#ɟDH8`A PpaB8!D 'ZQbD)f\X$ŏ$3>|RJ/aƔi ˙7qdiH%?8ThĎO֤4(R;sF:iKWB}aˑk׋Z"z4*Zo]K2A-kӧXZ+ݺEؠe犅7𷷍Eݖ,;#Yt~ݳt.wf?|yѧW}J{P|>{~/ P /~snL0„,/Cp ]+D?QA1BTkpU;u"*J xHjބKrA)%RsEQ7jMȴΜJ"r6Ahӣ0J8ݴOOƬ ("s \AGsJ7JTMYa4G!>RTP6SuěUSݔVXw% /WU܎V~e1e=8T[5kY18qIut[n]%:w%]wu7no[I; ~E׀oěQaT́e4`,Ґ4xچ[6⇇Ix|t٨*8e'CO%s׎맠\K͛}EZߜwXҰ3eƲe36gKOC:%eMdeO.b;rꣁ:n1mdF2p#oV &%ҢӘVĚbЙEq*k4BDɞ5s+דmBzUlٰS͂\^p\-=,~>LN/G5 nԝ+v Zkv*΋'iѯ}V:jlؿz o'6n2io w1m6ꡯw*y-wW*}{Ǘ?~}^?sO@lJ,PA[ݢ jB,,0@2p?<4C7 ;EWP7*#&KqGqPs l2HǾv۫~p+]\Mt8[DQ Bm^]dmӄXf]M9xOUH߇Vj蠊DIt eRNIeV^e2\&-_YygF$]' igN) ('hr'iZhQAZ[aXVJ~"jzY#>R* i0:۱*,yfT;*ج[v(X}{ga떤ٲ*I|[_[Zk  olLOLW>y{o r"k 0*YcϾaZKy65s>2;Y/M=4H纲IG݆-Jr*e+iuQ&vJauG^kqmuf;mE moJxӂpwワ=20h9ok.zm1I7B8`A PpaB!F8bE16l8pcEÄQ!Ð'QB8eK/aƔ9fMԹN)-IPGiӓJ-*BUf8O_Ed׫ef%uiZEu\jE[WQ}X`! V<1y[ƕ^ƜPȝ=zliҞRɭ?ÖmwlSmZ[[ܽ ~xq།'W^ˡG<sף7_Q!n\8^秓5_rI˰0UC\j+Qc܏uTG2HǤI%lr&(b-GH},s۲L<Ӫ4Ռ 6%{N!ӣ S=? TA ;PK+9PKPFJOEBPS/img/total_level.gif⽙ﰌ/[;'ps1smE : xѩ{{<o^g_Wn7[PiZ"'{CzWx~ZmzW밅1nπ^֬|AmZإ>a tß.T6vp'4x+Z滲Q9e[Cl_ٴ QK±"nFbD%!wdR8^2(es$jJQcȵ6J_,J(2L"Fd$Tґ̤&7NzdFՋRL*WV򕰌,gIZ̥.w^ 0Ibȴ|$Ќ4IjZ̦6kʧ> 8IrL:yH 6ЍnfկݫX ZߪrڕlhK򦕺"yޞna/LUOѫ/LSNe [07Rw GL(NW0gL8αw@|b wH~&vN )[52j`sF,2d>4pV:yŃ>πMBЈNF;}*J[Ҙδ7N{ӠGMRԨNWVդCaMZָε/MiPSzһMbN !9O&@m3AζMiax.tqZ>elffZfMz0=r;H]7ngwtuA #Ծ'Ng:7͍nIUs}_c:rKwB̷qp{x@r.|r%We¡1J'|ޘFґKkԧ 7!?!MkM}hQd:ꕆvy wC^NhFvBB혦;+w U^Q坮yhtǻmqB8e%xKpj)!'l!.{;=q;{ooںY_io5|/n|A`C^|~G)oc~5zS|I`}vnvgi~ǀ X~t767WGVL}AJfm+rvx'G|׀,Ȁ.iH6(ju9l @B8DXFxHJh't'h{kvU(y지ytZhyYx~wd8j9wWJ^Wte؆nM@ j'hi*p؇2wȃ<臄X8qrxJN8vPjTvl7 5xhl(}S؉&( *x&UȊxiXJxp‡8&6NUĸH xR׌Ԩl 0 IPlXkxw^j(Ǝ68Vhlט؍~`jXj )jj/Ȑ6V({iPPPȍH>X}Ƃci`x=|yB y9Ȕ[z>9|8IFj8EyC9w6 i\y駕t(v6P0tYi)ȒjHpXV9hX<9ǘ;ق4Xy}0ci_镟~h٘ ɑ)َkɏ'ju tyzЀ-~71h‡7I)YIy|Iɘɝ5(Ii ə Y螝Ɩxj(gi%zi|i3y~bɅa[yyb)~G[8RWz!:ٜ_Ȕ٘!:鉛FLjwjlp'9% PA)YHj/(QmJzXi)ٞ9I(ؓ$Jʓ9*|JsJfʡWzq:)Ik 5 ΉOz٤*u'2S \ꥊ Ib:~Zfڡ{꧙9IIjˉ&uNڜZY :$YGʢj:l/JNZ|ꩳjkZ=mFِMI':+ZI9r - Z1 zم"Zɭɭ ɬꖾFQ'sxnNjYZ&jo麥iyJj2B sڣoɱ}'%x&+6.*y: :Xi Ypٖ=[jAziw $; '[iV[ٝaۤ[;9 0ږmۮ ʆrlt z˷S{`p ਜ਼rW쩯ʧ.۸g Fiwx+fphp&zg+\HY sb^Љj;ڻ]ʮ»[{ӨkT+![*hTƻƙj\| gu z {3w몜k wV;۾3n#܁mYk',܇.1z3 »I+KĦjMAk8mtJlwL̮N?5m&oV|R"GxCi pJqHG1gV&n`(^oi,/&3N`5ƨ!+B?`ANsD~idPVG};Zʺ6zڂZ_.a. 6̗="NNe繆Z# 肎_miLJSĐ5fgi$PniεZÝv@F ioWcљِ>^~؞ھ>^ރi> ?Nq.^jʞ(Hedi > *,.02?4_6nPwB?F&wlJ; - P; ΚIl(,%|SPXPZe_OagPUQiPk_mĦiTqoiqe]GT=Vdr%_Yoޔ uoPGؠ/^Y-Kw_PyZa$+5\,9g#ْ,JKmno[8I\D 5?IETKRZS}QM`A vkV$OV=sP<(d=EKokn-dԄcG. N/Pg?hePF7lƫ9͚ otv!f1ǹmxŏleWfW)xp;DuϢ})f ׏oui?ܹ'ށԆFx7@9}$X\6G ) 7uZ$>}RssfBT*Uj@Ā=\8@ ['CFV!881JGMe  2ьgDcոF6эo :юwcG>я9HBҐtqpe[N4x5 JD2IOaUrARҔDe*UJVҕe,e9KZҖ<"1Hܻd02 dQVd2I.&w8LjL5Imn`,YDojW9չEO>3\g9O͓c=)h&9r4 *|.tG u ѫS'E5т6ӆ`\39JkVke]>Y ,ĐP,*N_3@=ըiN %{Tf4&H(SVMjVvȞf4D$dQ hTzV.mMiL'©ʮ+*TA^GS iXVeԓO 'jmkf3ָ6ve0k&iue`UZz(F?P͔>qfJJxMA Mi:Q!iQ/Ɩ_mW` n9A-xYhHzԕʾCaڔ"6^X\.B Si~z7`nkܛ7(gy-|.$F{y" Yx#+&5 ޚME׿cuyА>@v][ C W)ErKN{azBWBQBp`ݚ|cjaKS.k5&r[U5Q7e7oy"q['5}m$Z˞ng}嬶 O2Wm|%?yW|5Oy]{>19=ĺ9uz~www/oMg /HST{7v8pJW0Q#eK_o^Gs//bH y Y:?hDL*>t@s)z xbc=0, <@4  PdA ъAUQ@* 3P@!D4B̿d&܊ %&X&X#+5*!rr)n4AbBHAgYD"!G[mTDoGGDF #g$t$,u,ܹE*eyTG DbQ| F>Iȅl+C,DxFȖLA@əTI dIII1F|,ɪ8I'ɜ$Jɘ¡,ʥ*[A{dDyTJJ;ʬʯʩ쮱 DE9˷T8(lJt}DJKEcɟB!$B#LK\K_%nj|$* ,NBEcL ЌL)@ LVL؏F FteQN6`FyJZ6a/|= OcBwTOǣA BO4Gl hx)Y,~1H]̵[O =5QmV Pds6 #P%}"I3 "=!-*}#$=&})PkO+%P4,A2Sk3ͺd–b8>֐,u;<@TF>E=E$Eu9mHϠ@K׼AH2ʌMNOJ=HB@LM5R5"EՂQ˼- S3ZVխP}Ӓ RJ&Z -iS}N`nՔ[&}Vݡj5k4TVd8fho]3I2Y6mU+DsTt4̍x=B0]X=)\}7 V5UMMuPPyx`{b[6!;ϩhrXX k,fhX=DBOײXK0 hhc`Kt˚ӛ%ɪPQQaYg\, ,A:SRѡ`;{Zt3u`% h=X[@}JAdRM=m&.p(HXȕSEx=]ܦ}Z%ҥ %Z̽T\R%EѸ]25<"- ]˭^'G\%^م_vJڥu] _ɝ;%_۽\A8%D`RI^ uLV(AEX$M]޲p^]_Qϐu ;6VA]N`-M-%T܄8$-mݳpZ=`~Oaܥ<! HH0)@f[u1sU`e`̃  P( cK\ n\5fcFABC^  pKv}!pVoa%dmcNd|@xF@Ze4hd5X^EzZ]eb~S.N)f 0 Pp4kY@ v$3X=M5D悫(0jflg\|YZQ d}tFeCT]EenP(g'z{F5Bc_gleMs^uv8DȂ/y3<+\ M]j %ք&&NeD~cb&᪠ZZe$q-gi&h;UvBkhJ i}٪vIFVj ΄QVcMZNbn<1Eg~LdNk4ʌAkkV>Ve%ljFŶlottE7 RKg6~K̎( fpmRk`=m^UŃLmvྃP3n{kͶmTTmف`hwz~ɮJ^dKMVq4fohnF'N}dټ:ĿA6ef^(ui~nMG{HoN۪#Ri6$GnvCQH p:p?'ZCkeǪ/JN 6n[eq'GD׽c;P5g+[Z`I^H|#گ>p2I(*m9_( '@7s#51t&terP2bPHpVkfmSuT[YןOwt[LlDuy-aA^'uA/J8x]s!kcux{Xo} "-(rftHMAN"eAr y1&dH#y5 ~?4a B*PFj 6͇Vaăr8}-ɳe vh;SZOR4>uo(NI6+Ei z51uQ<\&Zֺ%{ӷX&8;A-rV sMe k׾3ncJfX&eS<6˲E  !;RkzYek8d賜i1 0&mG5UL|d֡Kg^{ڬd#IAFwݟ^#;n"jW{ AfFϝs;>EjH/r_uoŮ.=w?vV.{ |$Lbxg˛I1lg^9X-$rd0dn\V!l;|9q"ò]{ȅeykdv?kl F_U.:٭_yez ׻Nί8W'9P{&Aܑ̱IT|y}G;nRs6E|_#Jӯ =tހ.R'<37of|:Lҷ<$^3c{;s}IÏc3[1݁|kMC/񏿅7ۏKO~qxʙyV[q^Xċ_ M\̢P`_eBəN0ߍp} O! !L`aT_e]^ɠ=݅wތG`ظ Eѧ J1]h0n $na|u!൴ FUbX N ٭]!!.@L!aO 㡚!JO-"%F#>oD$V%ڠ Y!W@%'*8")ᱝe؞Z ߴ(#b Z"+! 7O_b/nYc}"d4#c 8v}㸸c<# 0b?~4@f=}B>n ?&$cEdL$E"B2G FFnGjZ\>DdX#w LI`$O!J6T+,f"w` jQ R&e4ٕԎZFݰcN|%$X?nW6ޣa"Ma-aͤWdF\R"NS*MZaڡ!f&qe)*b*dc6[nj ҍU*D3^&a.~gHX~e%'ޙo[lR9mfSΛ_6,2%a'b;"&IzqrYh c2ϝO\p 'ʹ2zh.Ji.nv&,2lɩ(ՁBLJl:lAl2z llF~*D,q,uln k+ޡc^,̀JlB˶g*˪,eU\hϱ: >-+"i߁ͪeQBM"T^mj~!jfۢVrlzJ止-M^zߖlJξ^)jjڪlnIFnm&ܜN炮D}ͩ++HƢ>j&. 6 Ҋg.zmߖ낾,LnR.iǼ":/.b/@/No>nzjI^)Jo.+":!_z2ec.?0GO0W_0go0wsVb0 2*J0 0 ǰ 0 װ0ъf1r*-Q ۰11#1. rpO j"So1w1# &nZOd^DZ1qq@^1riL_6e]!h 1#7#?2$[0ө>jPj.v2#*2D2))OrVk࿜qfy*c1*/20*0+k gr..B+!G^(q84O35W s6Ʀ(77P[ܮZqrX:3;26p /~k._eoE#4T;?ssrTNm2@7C?t wT#CC4FgFSDh ?1M3:?!ОI4J4Ft/ƴL4M״M!*L4OOaN_3p6s?2!3,R/S/C1DTO5UWU_5VG0W'Kg4*uttt~ti1}05S?5Tg5^^o5W|5F,`'UuS?^GdK0T//_CvP@5Dev0.-,c3<2vnO6o5_kfsvgtxvv qoj0kl6g<2n6wWoxf7@#76+7@Rrs+0<7k6l6mcc߶Sk2805.,x-7yy1zϱz*wQ-4@wt7u\_7gv8t 6J-B,8sO8)W3{LkNuTz~0 @ t~[J`888xBl˶:#KcOgycCj)x$ ÕgB8y/j8KzWׂ6C9p:DϹ; /:!bk3z1.)C&aϓз0`Bwu7};;UT6S;WgyW3d:P/7{^d 'F՘~0dto9sUtBD7Ó"+w4#{:ǣ{:;+,)ds[{د:{}cf:R͘m8Z9t Ƚ|/s>k>B>?-*$(8k~9oVq['Wys~Xtuױcr9n/Z5:-V[J{Ǘ?~}׿[O7Ko8κ!|0!BK O 9- DěӒq*b))nQi1F)@JEk#LR%l,J>!R\&TdJSMa`d7S9;S=?Y)k뷞.:X PK1TM7=E:Q0 .I-JMUUQIuU+14s"4 U@y9y3X7ecMV@e-W5mQQmkvC\PQq-\Z(sm]H%Zi5yXUX ._ex!FX)fU35=s VI.dWe<{3V􅦔iqYyge9R.磑NZgXZa# {䫱Z?JEN3cf> מR~;>i;7j\^1Y F`Jh)hi9or Yo _D#j"=ϝs+h}fK^x݉%?Zס^cwVmM~.5 _/O_G?~M柿__w:-y3ؑiv!B|1(o&> $& PJ]CΰT k20D!E4D%@l8(NqU,;a Be ŇYthE"q?$8}ܢֈ0Lf4!46c$IIN%1IMn'AJQIB&te2foQNBK]/La41Le.󗦄-JAմ5Mmn7Nq49љNut;˯1Vڲ=O}?P4r0AP. uC!QNE1QnGAjQ4IQRrm#]KaSΔC-jhS=MoSE-#PhT.MRUfNUUUn]WVe5YњVmu[֛ʎ_@KKz\Rt]ʗV]0g{?v[`6?مSs+ڵ5!rK`$9V,6ȅoT`̂Y0w*b!9Y2A/@JD%3 OC%~z"k2ReVbe6~I"8эxLRXE,.n Rɠ "2pRPĒɤ&7Nz eD0Yɦ"*WV򕰌%%/yᖸ̥.w^ 0IbL2f:Ќ4IjZ̦6n:8IrL:v,Iz̧>~󟷜'@JЂMBzP2D'JъZ4F7юz UhFCJҒ(MJ9ҕ0Lgjϖ8ͩNw_ڴ@ PJԉHMRTtPTJU`>՗&%Ws]%Xw9֪hMUG̲ՙnf\Yֹjͫ^ԫҭ` 2D=aV d'KY]5Kn ,aQYմMjW˒uldǬlM[)[sKކ-ri.7Ѝtk:6m,j a궻tKӵM/hak]u\k׼ͯ~ޒu׺ܒ^զ~;/'L oTΰ7lP s q<=,$1W3S.g˧8αw@L"HN&;PL*[Xβe*Ø`3,2Yd>,4pL:vvγ=Q3M ЈNMF;:Om'MJ[Ҙδ7N{ӠGMRԨNC}]gMZָεw^MbNH/ЎMj[ھ~_jl{Mr;ͮ./k"Mz~4 cnRۏ1n:'Nqj7Npk սKvLCw˻0g[x[X#//M~L? 2pcPm< $:amrhem"a@pqMu5$9Mu] ^OgZ֏u?[TWp~71#xYG;'$~֓| !G=smh>Di=Ћx)}_Z?n kǞ</~>O~c_߼u+>؇>ZSwx3pxW~'{8{~8vqV|g<nBKbwxxw0xk Ȁ/xx8Hkus؁w|%jDGv$x}Ixzh X~RThk5\~;m>(GCegzk'x.耷7{m7' {]؇yubLN-`BdXlMkP8~myh@xKN@flmxxm؃eȉ uG(lpw؋v87V@`_;%l*h"xv5x`ČS(xhmxW`QQH B>P|(^X_|jxi ʶ8x8u]\EVnSxpɶf&P*Y&` 9H[uXY[Y^=v!S#Kl6P6f0'Y݈]>^%CySEfwВLyKRG4)7{FY^hcIIz )lFk* m |p٘p'huيxI^˷Ub2U[Il'k,y* ƚWw7kzh{i9O0%GkJɖKik ~߇[ȚܩkXRxׂ{ &Y$Nɩ.Ŝv)i'{I~Gt6؟)84X)IlIyɕ(9Wogr)6z7@)y-zS ~٠y~jlJɡpV*z*:w0>j|X 3 {Xj{7J*2a6W9F O(Eil(+ kT I]Z\Vj2k7rU j:llZƉKFOQtvʖQJ4@toУ^ yʪZ  kzYK*ũkHk*zJQ *IڨiYʟqx;Jڛ9֫EZfšZĪ&ڧչkkjlJojwnڮ$gJoGڪ%9vk[T+Yxm| Ϛ* nV8m-/ %y9;Sy8i:y)D;KMi*ƚokGdkV;=ŵ:n7e;j9D:LêK nhr*v-gvtKgwY˷UŶXm k"tJgMw˸+'| { &wWgWKkv)P)`{kЛ7Xۻ^Շzgk{J~+qGj ۞ƤX P Zw{ح~۱+m;hg:J qiH;mʱ:{n{m  ZcJlUz˻V|񛬷{\*|-E\`GMs`LʨLDž5 m k^ *|XiW%Vp$?[3ưbld\%Z[X^@ɓaY_UȅI|Ē[ƞi_ Y 庹\k[_ǀx.[P aə˘UZܑYtܗ{^ȣ_y] ͊~3[ .To{P(kPP.`z!T#m]k'w/^1~;S=tADn/JޅL:*GWއY847lFpeɍQk>K^빴0C~g2zkar.|0Jx闗Rm&+W 0'꣮R>s%>IoNq(5v´fWnRs \px'NRѮlڮ[(xW=}9+ˋ: QB?__i4ܛv7k~qX.iZmJ8ۻqZr|޵~{ <}% K6/f*E%ϋ'OJ s7&zhx]6߂:<÷QAQ6fhxPmKÀK(2ozOQ]Ϫ(WCO.\PUj?ltnKmy%NkN)_j[Z}B|wγ ʟ'O?OspMMky}_d+%mUٿݯHkҾ\{T+$kq  APB >QD-^ĘQF-|ǐ9V@',(ElQ&4-ڔ'3fTPEEX+QFAD >bD(˗>zj&دerEVZm_Lj܁Kn޺HX$hJ.% -?YfG2} U*U[C6XbͶvVlڲ!(׮^w\p=8ʖ(sI1ŭ_ǎsӧQVz:kHjWf]96gk¾I\ov8Uօ7[3|@k9N!vpw `_qWa{Y:t %dX;Hi+zZvu q%-R#d} .4`R8guHh `[z﹭^Q8b3&: jA5ҷEC:@t \_yez駧z>{{Ǻ0YwWalpC*z`gs^oo퀖}p3*8 qS^%8A VЂUs\0{ 8mc?.n5ě܂'<iq|8D"шGtɧ+͜h皈>.EbhQvz t<)ZBb8G:QrJI "$ Q.|:pL#{v/lկT*XкivŻޘz*y{[^cv*9'dp. @ᆾ'0zPv_0m+a ػ᝱w(8'd0 )1%0w2 }C&78q*䳨i`#[wE|xw1o)X>xmZ&Ff3JD3Zф<F/wѺئDfmYaVZ=X^OS l}gt'#s~%` x[tX0?uΆ/˳굵 .̛IF.*ڲݸhG~7RmnK:J`[\b#,~ߍpF{ݖi|WQM\[HwL52^/cƝdUz(²B r{ՅyЅNDOqҕ~YCz+V L> n9]_}٣zվ>Q}R6[ON̴wwnc.\crwO_<.&dw|}IN}E?zҗG-:wϐ~6SS.s$t\}|Ffh}]޾GHbbFNWTК ~}b:݇?P{=? 1Խ1}>>[7/c6$0c);*k38Sc1YY@;d=6\?ϑ `@6d+e8l$7*zӱQ33-:D:G3·68~;I/04L'7F{8.C,Գ Q1*5!@vCBA/pcu1 hC?De @6$Txbܲ7C2?u4R@J˾ȸk[<[;pD7l$s8^DŔS»80!3XKQS7 vU4DC.[Ei8$ƋCJbƩR5 S@+s$k,  F\ G|t42h B{F }B~Sd/SARV$+TTa\$%l,+R1TLTҀ9 T Kz:2,y^B6=UElcEdڰ^C=eQf>ԉtE&5KWm]9\T]SeK8~9Nd( #U`}ObY0VcƎSV`ʍ㢀RC;\VB>jh5h]d EHL.&g0^A`hERF%N-9O$כq1S~>E<:ph:$1ӷe c0sE3Oe~ءVhə%0i#|]PD߱]LѤ(fOjFՋU:㮌oQ4kȦ9^eq5E41;9.1d@deeYHk ANhfH4\MpԳZ y Zɖ` fVkY$-kjU%a(i!iMm@{mk7ymZl`Sbe$,ZsL_4F(vUAٻNI@LzVl{CJ6Ji}hN6mƶ63kdaVfcenlfp.]W-W(KֿY FE3'/bה{-1J!F;"5?3տf^J:J;Bwm&kw(_PL&6x.n["sEӁOԁB˖b膎EVGtk6k\99h_`a'b7cGdWegfwghi58k5wrVFܖ~阖UoX~qr tmj]^uj~'xkv2hqeMN誶jscH{^vvjϞ4f,ڎֱwٍ<{Twcowx53(2v( )*rfxgk ^O ͸{OWV]9@7G_73 ymGe_ :x@ nYln&}C2kZk_vG? wgg'7GWgWk?0}/yW mg{(Rm8ɍo8x8K'-gnV*|Ǜ|r{'7GWgw20؂뾃}6w`P9Xpa‡#&X!A%J\h"BC~h$ʔ*Wp+QfFAD >Z1'Ϟ?j >.m:4SH :EZTOfҰ-ؙ3gD:#Q-\5#KR;q/.l0b>ɀeKC#ͱ8q`,Lм[Uf6'OFy4ܺwK2iĩѠFJ5jիЭR޵I[,ylٳi7׳o={*tE }ZƬgߥ7 (klv J^p1TM9h-]taeW"J݉$t &nVaC!5q4FED|Ey$IFdؗ~b_fu~qۗ}y;p[Z&U8Lidas`MEUVT-U`'wU{(VA&jx7F9#Enc>":*z**ԘYd1EJEIWf&FHCo^(q*wg*Vڂky&c;~׶f{.*k +^V%X kn/ eXlrvL: mk!AdxyqIn:}2-21<35|39>???oY.7VU(!)0}+Z' Ujtž|B5q0Y-@;,A Q_.|! c(Ұ6!s򐆯"\#{d6% ,zL|"^b!}@ Q:Es}0 _"'1f<#Ө5n|#(9ұ;,hIt$Nn)Qf;q.Htq[E;JH` nҁ J.l#*SU|%'%r?]ɉI/}Gi0V,!F>r̛9~2K|֦+P a%H209{2\)w?I,9 ͹)&լ=ѭt\&h$ۙ5x1#-9t1MMҩy'-Q 1kR d7 YֱȬ]g]{://-싚zpi:/;n6m^%𰳭h{rlVx-ﻈ-oIp_\ܦyZ"(9ϣiAzGcgUwZvu[Yd~v{Kv0 Dw;+i`.3+>ی<RwГP?%byքmUY>iG=U k+jg/jKʏfxo5ppvqL\gjbIf>cnUf""3Z]Q!ۉaganNPxweY&]a[1"nYw٧hKT\\!]IV'FS&Bxe` (w>Ҧo'2o"(n~:0偆%TfB-_:gۓ"Hi BcP2&`&^`#"8'hh #n'01&v",W. V)K(VJqgren$vm!e{66X. ivz[ƕ *ӰiXNg!ZjO.%Q%/~i0(c6*)j֪*+J0͝)EDb]r"Wj2+:qY*'6f7NV8ZjD`kFݶ fj& .&nkJFazb;2ݲ6}aT2ZF鳚j2* v B*., L2CҗHl$,Jj%r*?^sƎG$K,J˾l,}F+j6 -Ԯ҆ڬ>ޥN~T-R>_ئm{Jl "*J^v 퀐-f+~k .l,&~f,^r on^2n^Q`V*Qvblս=߁.ʬ,~FNҚ鞨-b튒U >PhcV(B=À.D.n(:oR!&Um= N lb`pu:źi&`jo_jkN3k&f/e^)/B,n]( )z (ڦljgg&pRm C mݢ.^20eM!e1nqne SunY3`". JD,lֻz0g胶Tzq(m 6%(#F>iֱq2nO>f@z쇲r# rmNo(( 萆1g(Z5n̗(tW`)z2"`:b2J$2S)б%c*C.OHV2ZB;8.B/3:k8<3&3htz3>AK?o tB+C,/o,Aw@NnD_CB0ʖ*Gw}ZEoF Jtr=۴tm 4g~">)0-S7S?5T[4Ȣ/+UVU֚3Q';j.jWØOW0I?8ZN49n #]`CH[4lH3+^uacwK uT+t,.F[7u&o]g8h;ak4isE7^$(wl} kk{aqZP6o"w6=϶e{rf{CP={*bVw1`o_npsMvR"_p,2f7mxWx;7@vtuKy;zh0+v!7Ҿ7gelij!.K8s3^oXmc8AlL+*fTooh`xҷ{+rO6\N#w $3el筁C mƴnȰ' fo_}8f11[3GN-uܲ8/ٞbu.?ox94YCQK*ucn޵|59_#5yzKzn0c[բvCmwz7 9Lo68+ͺ{W8Cp1<>yB{d3Hsrew'd;mTw;T;z-Epq6ﻗ$E zz3n{sGv[sc|o:F9gīꪧOO%k&M{߻+'9w۱ǃ,|.<f|<ϟ_7͇|Z{>5xg#/_$l#Kr|y3|X;1qf6¯c :f/K׏ :r'fyK= 㫶'V۽[{wJկR׾u&k~7s w2xpuy0~Ń* 76w>kj!p>ڻ#Y:v~͋:cu+**-r7C>@8`A&TaC!F8bE [Ѹƌs@"N,XFvbK/aƔ9N;<0΂~%@ҥz+XYt,Tmƕ9.Duջo_*U~rdɓ){kP- nj s24sĝ'!*tiӧQF8Zukׯa;l3IDvؿ_\Ό=AKdys-.>zmxwo}C3"yJj4h[?~W=pK>, LPeceo%D0h0rC>OD4+Q#*.X4mQǼpG\P@8LR!R2ɂz+#- # ;.YnJ$SM.\MӼ L :!= F;kCMTEmG!TI)K1TM9e7A+!1P4ӥOQmBV]QHOs2%ymR!3*Uc3eMNb,rLfSϧ"m[۹h6:={K?k ZUy_^o,Z1:k!s+^.(NXn!X)1X^W-״u0]m`J;8Yy矁bA.Yj_S(YY諱Z뭹j^gԕUmuWN!@ũ'ؒ ([ͱIuZ_vio)Em_rq=wT! L3R1[ ))/0?] HY6 Vْ/'?YH1QvxaEGE\S*\ F% Db:;afYVWUjpfaU`MXIsQ '. mF[:U(}Wes7]j٪tW5aie-oeBc ũo]:ް/Sj=>͋c:.dY12U쓹U"d$>bX] }V%ʎe5#SLc4-K],IH^[fuh3f@/:Kmm 7ئus:Ѵ5yЧJj8zymr -͊R+Kjg}V9{apd+]cT_ ]={k8JF۩ lmfؐFucmYCrҞ>lw&Tm{ԖN,,e [l۬rI7H=`w[j+Ԥ:S&x w I#3Aι͵n5ng\onϽp;ꆋ&ĩ-OnKqe⸕yDsD<ſywKs6v8Nk'tW-Znjo9Ovԕ_!hG؝nvܞ )]reO,fkr_3ܖݹ\撑r}x3 ͏M8IЃ;ɫ;z{Y>SM{v˽;߯nrSyny?o &KM]4cpN=ŸNAHaݽջ:̰yq劎ZN^En,0m-&UPp0^-M8.L oo/X&b&^f.>b~9=99 4^F0.=@ g&*Ohͷp CO 7< t$ 1Ґװz yOnz:}m'tp cDLq0V#  7Frq[1LB Q +ͼe/=OvqCQQϖQqPQ\qݪ Sq)}P"‘  NY /"Q!K!] ߦ,ԴP&mtj<@R#E  Ez e-z2( 22q We͒)),MyR"ӑ"mua y**..Q^O",K*!P/or-)-5M,0oQӠHr02 s@3Cm1R4Q1Q2810Oa9#6I4#/uS+PT&~0`5[+pST':7$+!SukZg+'=+Z64ӖR9^t @"-1#S22X m=3$%ÜKN%M4[ ctV@[t^4GsF GhGC8sCy+eGsH;HH#QDq31sQ%;F1.XҵJyԭTE@L4K722S,&)@&eh?<4зrRIJLIN:M )98BA=-ETPUjVO|B6lFRh!vkh iMrFCd?rDalaun{j)knlm%vHcQlo! pE7e3TK'ViYNLo#[65?WkCwqeQwieaնpU5Ǵ7BS}s'usw[F1_xtm{vPkP@.POQ 8nrv7/V7fg׸>@5~*4qXw>3s [U,uuVfIv40tWVޗzSYeG%W@(7;7maCy2~0\up] z#{-XwWBVV3g53sdtg倷T~UלԱVN ×ES?\ECu3r1#ć!{~=8ye[iw~wTx#a1zs5jX?VD6Ksa yMvxאH7XIy/2Ŕ9KAʢD=HUYcXXwImWוiv+y9f{w'8nxښysx5O^,?K8zQMX`󇫙Mu'71) P=qN٥9%yvagכE`-9f8V?zU3™0K) 7 ӝ5{sؘ8ve(s9|RKZgꤝS7.x٥_8ZAWipH_YUC2g䗗MXypKA.vCQCK)ou*AeÚzض¹金5uV9sY]V9:dګ]c] V]PuZvCۚcr紦ozΑ*SFAQz5[u:"Z}Svl}A 9x_[c[!:v{ۺkt]4śr{~7۸:mW;J=g0۵'ۓkesצ]F e_0@ݨk+g\!a[ɳ+6s;#K39ͱ\Ѫxo5Sƻd艾^Fޠ\y>[~@Kc۵^]Ga>}싾 -"4ǣQO >/P@m;&8iQDIMQ?U_[?qmiOq?uy}?tپ[v??2ə|݋ٛ|?ٿ_e/?TA?Y( :\0DRD!c;z2ȑ$a&ʕ*[aJ,kڼ3Ν<{ 4СD=4ҥE[̱8q`3fɭ\z :d9=6ځ'y)%Mtڽ7޽|m4ԪWQd]C68#FDF9mw]SѤK>:jNWBJ*VZ7۾{NYqg>P ;4h> ikߔpGDž`x.ܟ ?s=E"F@/hlO>@QgE N5E>QP#>v0rb,Hr~JG><[ c x$z! Ltu2E)DXY! +R%X" HC)\4au()  J͠d"p܀JT b]iG"1Io@Rb/Hބe1HRR8s_&C hJ~Th*60'XI7 | ꐨ,da }ĥ;Exr&PMl$? +VA'trDTC4iJ")mℜJQsd;O{sg?9eӞKHK~@iWӠu1چ5(kTAOUTQYB;QG(>.iOԬ@mTPLTdZ:1"2EP+<  %,;*v`bՓA>leY*h _:}sYC+IefM)3u*m{ X6+ێ8 w%.\ts RB:Y f&.M`$'z^HKcZv- kᚏT9)]NroGr҆^0Ӫ0Uu6W Kntw9tª'u*:Zwo Zȡ\}K1r^떳*Q:P ja< N(rʹn\wXĝl"LbU5^1cGd\a@ 8ydn#8ɫS\ oʺ *SjԢf- zQڀ/檧? Pz\]0g>6a&䭲GK !cJ;n^|'m)4I-lk{R(n[jNWrc.O oaV1W`WmߏR6|fZ9ҙ)MFiW6y/qӦ݄ίh+%NEdl|klk.9EnQ57|{1Q:R;~ ~M+~{yYocy+ `6<OpƋ~0;#v;u~q5Gû/bs6~4m $~ݱ/E'jST?دD|4p&hDA7c{fgyVrX4'?.~~sȁ| HӔ#8wg@~/f HPQeRo@zgj ؂2|OQ(SHUhWY[ȅ]7gT%er#b|EH呁uhB}}`~b7?Y{kxbrnIX+(tx7fT%G2-vlzJs{1H46h{Lk$ƒttatwm-[Hbxb$o)0O11199BBBJccck{{{{{kRB11!)1))!!!BJR!)!9999cc!c!!!!!!!!!!!)R)c)ss)1)))))s11!1111111c111cc1c1c1k11)9999k9999B{B{B1JJJJJJJcRZsccc1cccc1cccccccccccck9JkJkkkk{ssks{{{{{{ޜ1cc1c1cΜƔΜޥ祥ﵭε޵޽޽ƽƵƽΜΜ1Μƽ1cΜνsc!,>H*\ȰÇ#JHŋ3jȱǏ CI$m(S\ɒ%0cʜI͛8sɳϟ@ JѣH*]ˡO lJիXjʵׯ`N:ٳhӪ=[v۷pʝKݻx˷߿ LÈ+۶o㽏KL˘3k̹̑ŸͤӨS^ͺװc6Y6gͻ N\"JOУKNusfwWnۯOS﷽wϿtp t|6ZXE!]^ޕ}$k&ƨ߅hr8/Zأ}8D9h!ɖG|FFߎ| 閄fY8b飗QId闒99Kv)fX[%\Yt9朄Mdm&&Bj褆Uevz:bj*VBg\h'4fi'hchX`^)f6+jW^'ZV+߆{*nJm*iF+n.k]l־,)/ +Ӻ+ Ëjj+ؖ{)/ Wl2&.qְ%s3\1Ӫk9V0=z4z 4 tD+Hs633h XUlip]}"6qAz{ Cj~ob#W,ƚ:mmvy[ww[7ǶDϯN 6 dm ʻ^tn~<δ)pv; JjB_ S.;o2KLOկw(=E x]NmǴjM;y.\W:{5@{!zE6g׵PMaX "RtX"!p?D'7D=qwI4+,bHAI jf 6ƺ AA EX:x̣nj83BBL"Fڦ"JJZ̤&7Nz (GIRL*WV򕰌,gIZ򖸴dv#\ 0IbL2)K^>Ќ4IjZ̦6/9^n 8Ir&%v<۩y̧>Pֳ @JЂMBІ.D'JъjͨF7ю HGJҌ(MJWzϓ~2C@LS)Qʔi&uҞt'ySVG%%O P5IT:UjI u\iQcՙUhMZIUNZuMR׺Z\T GSd=XWƖKM,_+Zl&ߊXTFbCZbUf5Y~u]C26-ZWSLVYW\*qu 5sKݍB5jrVuK=z^U|3/~_귿eN;'L [ΰ7{ GL!WV>-Q1wc@2A,"D>$3PL*KsVβIU?x`L2hN6p<Laxγ>πMBЈNF;ѐ.OҘδ7iMywsGMRԨNWgIT6ؚ `wkTy4e F/-Ֆ5^[~=a^vLl!C5 m[uMz;leי.7-Csrx.3aZ;<Ϫ'Nq][wM b'>'ϳ6V9C@gNs?_|' y89ҭIfg+b|9gGXgsh9m,܌|GG8C`.u M=Bww=~{|!]e> !=kWf=w~ԯ^7=W_qzx;ή紣g"禇/;ݕ>:[qOWziz9Ip}HFSiW9 Yzvy{ziYuؑ)ٚ)W hw).V9yɛj}i{)Yrynh gY9ɇXXyh ɃYw@薯ٜzW=yȩ1YɃw 9wɚ -y 5 D&ٞZCǏ{ @H"i?ɢy@ɘVy8(i,ٞ|ytٛNJR9Iԉ©P h zǡfǔx q@I()ZN نȐ;ڣȤ`6щy 7Z9_:ɜq*jYu(uJijz6J&jْ>JxٓEi{ɠ9침)k ږJ눭YZJڜ嚢ɨʟ }\jH+h|תzykmquR n`ꗽJlyxukʪKٕjy)&1g㩎&mzhw:qWR0Rpኤذ9{:+/y\J xNֶ.+y6T0`xvj`H:j;ʢzjJ:P[vjRhj*YK7 ؀ JO)ι> 湴skw۹iyۙ4g;[=ʶx9Je魻Zk0iq[<ڬ[ƫmf*yi5!˺_ꌼJ5'ڕvւ;[᛼ײ& s k8 i{jFj˴ -˻i+u7K{뿐g6Q,{Klʻlܬ Vkr%\q'̽)"kr1\s3̱XۨjnrVm=|+*,C|Vx pL<NY LEĜi}*r0*eS=ZjmvǘJǛKjvuu|B lǙ+J~ ɒ*y\ܿ,_ ~,{|,qa<5ZHY$]ZX̸cW˱Vŀrr[N{̽]̬`uL%WϢL t|jmzKxJ[;\ӌWќSUG%Sɕ\Њ }[lW<[= } T˵иwϦ֝tژ4 ~9v7]7jw\s9B>U䗖 tϒ[Q.Ex㛚 ^f`]b>&Pvgz0No{_`xF o> PW— >^~ꨞꪾ>^~ng዆ۜ`nf.ǎ쉦I홝T݆$,ى^.߮閴NP„y6_~h.˂.L>Pβ߽~SƤz[L=g.,og!5V%]m؅׏GeeØزE… ΉO>@?*}DF]ΨVf<_~ӷ\pa|_aE-O?vi/kVόs~CgJG09Owgl=TeX~x%pOS?(?)tM {sڢ8}ڋ?;]h?_mHX|~PwQ ~9ɴ&δ^ԶOzG.srg'z,Y z uLQK)S>yg3 .lÆ":xaƊ9j@ƏMXJ-]SL5mrbN=}2$z%SL B)Fv0@r@zc([8c=*D6q1"+DӎP Ӌ9&0/@!$H#{"H!tFkjjJ 2K,CG:Z4l3D6Ӽ0TJnϲ2 4PA/IBc(A;׫pH*ґzN%4ԫqG!8aUW_5VYgV[o5W]wW_6`84D[ɧf 1q|RgISo"-%\sE7]ue]w߅7^y祷^{-cwJm:.[%f!_f[=yD b/cN2تePY;X$9erXGoQgf?F6EGXZg9nTJU:jUyjgyWdfk~Ge̓;Mf[۶ke^1=@{O7 B5vspr*N%N eP:e@\!3ūr-.=vُ{{(A)޻w&s\tg>ۘgyxGv=dϭsA*1l]I_q՝;â~}綼}Xc.A cxX79-N X JJM]"ž9ia\pz׿0(J' 8Ne Ѕy( h`QIJ[֦őЅW, B(rA]éP:tЀ` ,8YyOǹ~u VQ|󶸼aёӢد//,Y  . \pC!:s ))1|H?Tчsd{J6D+"Hbz-$4k8!_xk\Cp@rf+kG8ձg*];ޒtÔ76)Ӟ;mv"w@9~Ykz*Uo?x5qm?ugI{YTywP^y;qhx1FJ_ce,<+/'k0Ё5>khns^zmag Sy7Еw8OZM|i]VV;ľUŒzT"ІnޚFvjs~Ϯᧆ\w=B=_L͏=T+|7x?Psn҇M}_Ֆg|T*#xO^eќ^Uu_{^2&۞c6:f珱RQEPʵsuB+## a D?9)54>l:  ۽@[)x ֙k8ơ$A3AfCT9c'#7'() Y!:뿮@( B俈;%l[AA b 4Cy/)[ԥ֚'z7d89lAc<4,4S74pCĕQD*qȻᣱ{۶$ u:Md# EDD E*aDt.A#FҋA404[q,Y0nƐF vltd9["y$wxarLJSGgՋ.-<ȗKaz|L&YHJR/2G#Կ?dÊ}~\4Tԟ+㣒4IAɌQ٫ #&NRHarHI[5GʡԯĘF$/ W #3ZE};=1:" JCE۶D%ݻ'$4L,ʌTjJ{ $EwKtܙ+F-7s6R>RR7R8՟Tͼt56ST`TRH+J=D:@ۣADEA]͂7ɵϮTOMP5HmH C\LYQW5RX­\eU\N^UgiUbLcXGHD]Ԡg8iV4VJ\UgU_eTm1sIky]G JI4STm M{ES,+;K XuKX}փ-R=Q|QrS'-!eK7e,tzmY|Y]Gٟ-vLזڠ}ƜSlҤ IeYԗ=JJJE!M7Z+ Иݲ h|IsWZN̰ kMK[e\DZ&mԥY 󲹵[ڹ4(#K%3!YGe/ [U(2܋\í1 \[$ݡjJTJ}ĥ>2Xm(uK-&dK^umh]gͶqMX5ڕ׭FxE0E^]C7TS޶]L};up_UO뾳Vm@aZH]ܞm_J_P_C vݍ%`XN`FQܐq 5cBk=^~HfY% ѕS:'^XU@L٬5aa tױ-6-Ɔ$n~'>([:kGWtaǹ3-# 4VNa5[l<)c5چE,]60+(`H6>Y?Y]6c26c4V[M~ ^eCm":;.<^SFed \=k!8K[AUv[\$+ f!JK6eEfeG~X .[uO=ܽgcCcC.e" ܪ`]tf:cxfymZHNPp~u4xft^B=ԠK fCFd66:z5J3i9Z!OOuidcc\eADžfhSP2K]ƂMc v&e8c]=v!{3"NgetЕ XYZ&рjiHq6Шj>qZ(k&J;:^ӠUzII>pm$(!|[qo01%f&hUHGK6v8r:'1?r)?׺wusCGbs3X!t:2MLOL)_AYAR!7ޖhUwMl;[[Gn_cStb2;Yovdv h71aI9f7wg7gvuo_i/jy%hLvw0ppbv}s7Nu"f!m_&nwqm>x'wuo~xLjB皌x7?Jyʵ wy8n a 0x$  ))z/~yx94+$>h2Od 'ygBq7r#Ȑ"G,i$ʔ*Wl%̘2gL:۶EG'OtlH(ҤJC"7TDkReyE 2tXQ"E-k,ڴjײh'О?wJl[)ԯI%o$7įZӸq۪W+<[h;Iqvk%d{RVn31M:V*5,??0uK!KEx^=a.< zKbĻ)OT4@j n@),p , đDMl1={Lu6LH |'6"6 υ,&C x)2/"H#fR{cw#ʪv;,jV$R2J!b 41TI$c(H9miȜU2!Z#7~Hr֧ Bpj _1&m 4N%rqd,)ˬQnkC& bBz!\1ox8HKAR\V)6W R%6VK9 !Ƒ 5"$:ՠ>MtgU9w³ilkffnCTюY$FoR &D!:hg IOXnPA<7ljp)6L5qS|ۏjĝHG;ҡJq< .#F*8S PP'!Q| ~(Qj'#=#D91*NPXֹZl*^ W}$'gje]k|ՉT,d4R_أFg;ђ=-jSZBnJY2(tݪ$W-p+n4ZK|B-tac[ֽ.v\l6ޝW@8lty-둰}}/|߼֫wWeIMza3qo||˵} efIjW!#~(AQoA/pQL\+,F|'֥Q1Z, k>ƏK<X#},_:x+ +o^? \#5U<2 Iw,)%/6e/<~Q,4jN3UB/*i9SEu&!t SP.T?Ј>5 f4zՋfܛ&364_Be*bVFY,k9fɮ=},#B64Se>I}~7n_Xǘ4~-˟><2Gnq|s)a~fGߐ\lc<ͰKso GNKs.[[͍ce>WF/ڥ3x}#I D:|Cy2M+8+Jdt}}u϶o׺kz2t<𢓤;vn\v_i=+O!)R"/9S~Pߕԫ4䦨"KLD{roDc5B>WicۋusLӛ*$I)X>Wy«,~>g_'*|_9AwζO;iشaތ^4Y=_hH_П FҘR-xUeWf}_ e oB~ l`] vH >`?1 Y va VUat]zaanک5!]?!}su! ޙ "E]z~GFbXMi!'v%bPib$%` Mz_"*~*'"""Kh)iT".E #/-2c6b' 2ӈ,~Il#7Β7bQ01Icd"#}nMpF՜NVw ,J]jh*8*'S2M#r.槁f6{:fb*gzz6"_Re~]e]PFi$)J&ir>Ir'합f)i*GeLZ^i>"y)[N)^a& bil ]fV:*J) 阺Vb^*HjEjȠ__O꛾藊jScs(*i^lfjQ&wb j x;&*N&hR)* *\璶ഺOY6bk%>k~g+NMkRo*cjkgvhukE+.=tN:hJ ֏JhM5)òkϮ.Eg@lfO*ʦlH+7u:llRlr,Ώzrlz&Ȋ,z -,5Ѫb\jNml@4rxHlҚ,-> ԖyDz(B߆mm6I*%.G("(Gn3qٱ)֧Hzݒ7_&R1nnR*nDr_ntY&Dj+;.9cW&/n|.:.܎`d>j($)vDR/vd֞//mGG4.N< -#^.n6hLĭOm.%p/Ͷ~뷢秺pmi00 +G, p #Z{60^+F$$1$'<1Gq0 1G,81lZbq.G866(q3xWI1hF,$F1'Ա[1q oDqqGh%k+[ES2?9rx/\2*r!3'reV #)2/[m"5+L,rh{)6DD@fCr s1,) , I3rā9,Ъ+n2r2nsQu29w,4Grs`3h3=[ Nr8D#0-7îfD}_}.jw't/E/3w05{/8|M9pT7PCxro7 ۓ7FEăv/mg&/4 '8psnzRxgrFHW(I #&񱴃cVk;/Ow0y}F#Hy9[wjvMW y﹡㵜':hly9GƐ,/ghoo+pǨC_*4B@0Tc6q'% L 4 f;/z7w5$yH xWao~״G)|H@ (A|};o:"dd@\, AT *{l |h@ @7p[|~rpT@ pA8|8zWqKg&@<@ dLd!R߸~Y}(=x|mb;ڂ 0 =1`{kc|s4؛Fg =O?g}5EWXTf{ K1/=~;xq 'ysϡ_=gb-v?߿9XGW}}>N÷T?̩6LP3;BqD 7>*m5H 1@gda!B)qt),2]"%#cBkJ LO)r=3 ϲHt2H Zjt-Wv8˜dޤfߜN;i~f=ά1ۙ{8xi51-Zn\gYc&l]_n8\oș{nu;n3OeƧy<+|l5sA/`љIOSoTMoot-]{nwr)ffxnI_oߟd7|qu< tލ,; 8 n1A7%d)!Bǐe5zз(},1+ }n b6/l\#"Z0y̘@p F@X.d^Y$!DZשe4wTg>"fPH$6;.mM4-'IĊDsFx.2٢B[ERd#YBMV53UD tdhkr+K#Q# (HeU$LJ6 /J*!aJiNR`wCf`B@p:cP8'ȥ.tEJ&SȌH1Q,_"]'#L1d$'qbC?,s6Q%fBЙNU'2NxH+d/){uJS*:uCA+Cic n8 5 D6Jm*3E5K] #E<JOS_,Xҡm}MtP%Kq:!,pvpTj󍡁a0.u,1c1blVEWڞR,< ҳմkZ[1Mn$O2.td{#8 6 ,,p0)us ]D\.pX6 kԚy{ T +$&t e}B_(Xxb0 \`$*0 Vpљ^Ӵ7*l]Z^m5 grGTK}S#)$̾Lsx$8`0d!E6, %O .^7xĴ[Rn+l]f1e6ќf59mvxg=n,XQPy2U[^d,$/TZ ir ڲ1͉E9N |\ԥ6QZЄ.4s}(_6I׽la6le/ו~D1j^ƵQCnqBɲ Źj]6&3oWLkfGbkg;+8O|Rwig:bAz池"(i^-wasϜ+?ons\5ρ^7(=}q//%'PqUձuo]թ^beўv9;MmϝWq:q7O]}`W}(|xggA˽|S7il^' 8yI/7zԗ~o|nV>GqdN-AFz} V/~Տ_/qr&Kf%M~7џ~wϟ?ohGO*/p#J p MA%-lc%0pu$$X]a0epi?ZYPo0}056VR@PlDLPl,Vp ZP Y ?  p c5c%s -/ WςA<0p1q 03pwܰ!FM4-115q9=A1EqI3VBj%]a1eqimq1uqy}1qe6 ,(1q,W q1qɱ1qٱ1qq12 oM S!!d! ")"-6$R4r#9#=#A2$Er$I$M$Q2%Ur%Y%]%a2&er&i&m&q$ H'}'}ʀr((֍(2)r)))2*r***2+r+++R(3,2-r-ٲ--2.r.,F"/r/2/_/30s0 0 031s111!32%s2)2-21335s39s01"2?3I4M4Q35Us5Y5]5as5G1cr6q37us7y7}738s8o6839s9993:3 ;PK.ϳNNPKPFJOEBPS/img/discount.gif BGIF89asS1!cccccs{{99΄ք֌ޥ֌ޥ!,sS'H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8ɳϟ@ JѣH*]ʴӧ>qD իW5hʵׯ`ÊKٳhӪ]˶Z6 K.x˷߿ LÈ+>c!;X"(QbFxMS^ͺ׭M˞M۸sͻ߲Rp8AϾ蕣{2wN@(`g 6F(Vh G|^Az!z!~E'0(ֈ8<@)Dסw_z#2pAy/e`㘨ihj"y*F$AiYgs5" ejb`袌6♢9.rʧ_|Ay :藎*:諏譸kaNfIâA5ڟlЪaJR\+FTj,n;»bK/[qFdp8&E[j;&<w ,$l(K_@@0Zl1?ڳ&lH'L7PG-TSrK-'6PFÚ*cgsUp-H_RHТ\ /`7G.WncnJ@A l}@7 #zj.no/o'7G/WoW{JTYW o觯//C RGL:'H Z̠7z GH(L W0 gH8̡w@ H"HL&:PH*ZX̢Xd!ǨMdL㔊,)IOrOzؘ&lRxJD"1QQ$G7vjS/5HKQXL$FƑܣ$_Eĺd ML*WV򕰌,gIZ̥.w^ 0IbL2f:3^,H@jN&5nbf8 NnsfAԹȉSwIMlj 5rOrs!geܹOHs'(`$g?#}고 (>*!}`9TYOLh J ݦ?)s0EF+ `$(ŘGQR:GћbN8Ԍ64Cz\JzUG.NX>Ϛ VhC֭1I#)P{*Tւule'WvS+XXNbJTbqy3;jheϩR5j-x.[Joҕ_ElLa,nۉ! pKw=d@zHЍtKZͮvz xKMz|Kͯ~LN;'L [ΰ7{ GL(NW0gL8αw@L"HN&;PL*[Xβ.{`L2hN6pL:xγ>π}~ķ1FzFT cSI֑_lil]<.z=OY&4hdd,R#=F:nyh&ՄMbNI"f;ЎMmj3kuζn{-rN]nrMoչηoo߻Om̫Vg3[h&]l-hykDqzMlx5rW=|C[oYU cDk<k^7ǹUtO|jyut=PTsmݼKys]kX4>O>wd8@u#;~=bm7x\vo[sO^rO~)>oٞrԗwڽy=Onx>z쟟}Ɏy5z{߅/(~IqϟayGِӿ1> W}#}z7sFHy6r| (u 8xx؁"z 8&x W(,o*؂02X6(n4x:ؖ<@HuDXFFJ؄?ȄN6RX-HV&Z؅ȅ^bXGf7j؆#n rXGvz؇Ƈ~XFᆈ؈ƈXdB؉qdžX8H艬؊h8X舸hXzxhʸr،j8hxb؍ZhRmx蘎긎hK;PKO PKPFJOEBPS/img/awmconfig.gif6+GIF89aV1kR{RRZk9JƄƌƌƌΌΔΔΔ֔֔ޜޥޭ޵罽Ƶƽƽνs!,VqHA*\ȰÇ#JHŋ3jȱǏ C#!ɊL\ɲ˗0cʜI͂);ϟ@{ѣH*]ʴӧPJJիXjʵ+סVwR뵬ٳhӪ]˶۷p+gʻx[r߿ LÈ+^̸ǐ#KL}!ϠCMӨS]s(oʞM۸snIʉw Nȓg~ZlӹqKNس[|3ߵoy"K=>y{ϝϟ{E^o߁U]m~ F(aRTU^8 Vk!a[/(J'H^ސ> idzArh H! O`Tv9rdG)ff$cc$^Y%QZrƥnIhzfF [TIWBj: .ꩊnjYi)RTu譣&j8,j*Y{6 , [>uXViݖLb;l@5dkG},ҫo-$f ?K2Nm Ьv)/4VV%bSfXg\wjacmhlMN/-tmx|߀.n'7#NDngw砇.6騧ꬷYsnݖ/o}^"7GKog=/w觯`~/ ~  `:0} |'HE̠qwe GH(L W0 gH8̡wڐ 2p"HL&:PH*ZX̢.z` ǨEoB6pH:x̣> $ BL"iΌAFFZ̤&77V (GYG">ɓ(IHTn𕌫$,gJA_d9^"^-vTgy,f0 8`2z2F=335K͛w6s;MSoլ5&Ns7NxƮ|;gIu OԠ(B:7f+IQv.t=(D#9|MxQLiA3ГIUR41GһTntK_jS4M<93M4o=OFRɨ_jXPlVթ;ZԣVu-]I\L'MץկpE2 ӿJ5:+1N&zd#SRu=3J Uպmx,[o:tB}khYb3(hgޭt;fyvp&ܴ}.[αttSd>˷5Mz|Kל )yFD2LN0OcV/'L 1]`!GLbDb8ø0;L%gLc60.~ )AǑщEhEGԨ):KO'iCZȣn4{Bf7:Y}:W=tLf^ͷj[{U.tG y3qq\n}W0gCוޞwRon3~s\w{8K=/~KxW8syo=?}:;zwz~p7^7qCvox|ixHopy Ifs}|FwG*(5.(l$Ȁ&ւ7w82C9R`\ٕ^`UX yXtHhHWvkyjGn)JiX֖Y TEG֗Gc|I闃 }GYHx,Ȉ>Ǎ'f9 bȈpdxt7؉yɘIvfxh8 X{̘8HYh懋mhjYH|~sT 89IXjxYy~i{Yyy㩏Ty'Ȑ}w7٠ʞy7Ys{t\՗~ i}Ǝ4*|Y: )}=I@tT y9~5 "o{Dʥ8~ JRI+D9XڏGʏ٦^ʣ9X>,i؋!~ipJuy|xkPJz-9(ʛE9ψwx;f|H6Z:J*wzjmꥸZ=jws:rJZZڪjg*':Zz*݊}$WrCj| ::G@&*٘ ˰u$iڦǯ}uT ˚J)*$_iˉɛkf *w$8&[(G*;i++ɧƦdj?9AGk֤eMK":kUKC{ef_zGy(iǶmk8W{qsovx[]zrWju[s*ɡ+(&(z ykUoQfe3Jڣ: [ȋ7~[}{WVfk;&Wۯ=˽üኮ{蛾rޛ۳KaKkwܚeOvˮkhwc&K9  H;o\v;Vs۞ȱ걙erT[+J钡8,p*Z*7'L},0 RkS+7?`%L@ f݈LJ-LFʴwɇ}jZNlte&G(\uy^tQJbySn|}|\q|Rlj[gk|dm Gov*ţ4wYȻ}G KFoQlj;ëÎۛL/~쫜JE&nD˯rܿtk\̷Ќ\Lyܿ%8;pLϡtgiyWϲ$ Кyzi$#<왢h) FJ(Л4|bt,xO c+/. =mLlŇȉČS\,;2̒幨' 7ݔ)h̥`:iJFJOtQS '| k[Nklg ݢ" ز Ū[h\N\Eey {Z.I|{GLq}đسf]%ݛl=ګ x cM9;3GV|wme]umH]܋Dڑ '*ڽ-M tݮl#ŗȠ7Z-Ȇ *g})ժ02mHь 5H܉Q; ꍩ,Ns*ɺۖ,z׈jzM4ޟd>9hX|}$Jۻ˖{P68͑'&]md^fG*ʊ]v~x^_h^p}Go2(薺B9N@SӍI ްr^ѷVfў^^.m@6)i-.JV힛~>G <ԪK$~aUmS|&I[<;n৾vR-NAm+.TnxVXЪj\ fZnb7[&(3 ,C2O4"܍t7HқC󃴸?fTFoMH_(;KmTqOOQ޺IY-MO@[ælIn8.Glq]y&H}9Z2w@hץ|}K/Њ6m~85[>OT[O*)ObO?| O =,H}p~o˿%u,h̤ͳ18rY _?՚ٌ[.how<}{%o͟H>#sxcg}60bOn:cΫκ.@ ǻ0C nA6$DIDWLL0>~ʠFo1GwG2H!$H#D2I%dI'2J)2@=W[2LbQL5L6M̄ M-G3O=%sO?S :|O˶"GK=-挳D-EK.ieMoQ8!siƖzjfr0Tb۾oygy矇IOt=zOݪG{'g|u35,ԏsQEUTf?~0YߡD 8A=^:o엻iX~ޔ,ƥ*VҞJpj(4z.ز $9[ M5+mA3k%֌dN\ 7+mY4mpxh62)&pE-W46E-"+b.bHFLepoxD iXc3~y@q,ϘE|eb42DHɣGrJ&S(CCrj% z*1mqa٘^q\G2\I.p<3'g0򘵛b Dkr#9"yNHd_U:U$':I5{b @έV;zBUԢhF5QvI_DPV~Jē"txRΕԦf*Kv럓 IXI_B`NlffHXx{iTDY @RšVi([jj zJpYdhWTB13Hh6I}WʧjQu&)%Hwr@CH։dZY.c!x6[nV;:T寳 jS.S=ڃ Y2s=&6Qv]m#nqY  P4M5welB@VC1]=t4+jr~'X'1$f^k*~`Q؎}eϣZ-pY- 61XF y/qer'GyUe>s7yKr?zЅ.r$@zғk?癇>uW,8ޑ ⩏"pHhլgG{^tgn W73 9}wxlHzd[hgh&zѱv_ yw^KYOrۏx5i JU=?{b&O3[}NjWp!xp j|=ELNwЍͻiiC7pD/jR[=ټ;͋9n; kD7r&ZCDCI>@?yۡCTK:T,7c ٸA qf 7 #BZBZ3u´k"B B@%T`*23*l $l T;2 * 2'2+tR3<93mҳ;Z@d$"jMC"3( @ȻK*MӬȷlM,ǓAN;\=礼=LSN۷Nd B7! N6,GjM5朴JObdT|SNK mTGyqDڌgZ$Hp3R 5lP[ЦjlNыQꦬ 55Qь8ʛ$"5#ER NO,  Q(,m*RR-S:+/ 551>C.=M6sӉ𺯤AA]@-;ӓ?})AuԴs1TTLdxM:BUIx+OLԂPSNEUԂT MRSMZ]UV5N4ǓUU[VS2E#=Ug͹BzѩlVSl@iHJ!L Vm%׉V9*u%űJxy<'MWdjV.Wftc?$Z0ם %3VLG Xw2tF CRVŮ}Cۭ?tHSTV#Nͯsɩ؊ٌ3DʠJF3vțZE\Սm2I"*}U9J[XU[J5-ڦۉ ۖ Q TzX<[E\ UlOP[m[[[ ,KU/Jw\OMY%}Y]\4 m,t̾ϴo }ݏ\0\֢9Nj!UQf"a>[VD%Sܸ\܊1.^Xh{ō0u ȊqT}u-Xz%6_,bA J|]W.W @TM`nA>i 6afT uY 5_-Hsg{Ffޮv]d}vK1|rUF2]-i\Xj6W@2\2]TەNٔ>f呮ޒ6戕~AE46U%PsLH;hvY駾i 8gt|ZMEi&됶jj$͌Qm|_m6i k^jѝ@DoGQ@k>iol{l^Ⱦlf__mll~kAi^BNֈնvR8&6FGCfvCߦ ]2_UU `sգPodpJovk /e0.M3&qvN --@M(q?&wڍlG W/8gH,NF]9#r7@69sa>w?he]s(bB/bQFw)RlYrs>E"67"6er?-O1K?4ba DOq[_LM|9s\`pmcTdWEp]čJ+vjTSU\t'wwq3&SDCH57?t^3pw tA?Ԃ7x@E:UwxA;xՇzWZ>VhǤh^d}|VY֢⨅CƠ٠lpx!W zJE0yQL;/I uR!],$u_D/nۂnXn왕WGZ~go˟w?;7ouf}yx * XVՃW Zx!xG8"%xy8}'"1j"}Y2#=Gh,8$E+M:$3%iQZy%>NIߒYz%"n9n9y&i7]&q捆)'y U'~'_J)(*S-(6ZZz)j)z):*z*PJe*:+z+ f+ ;,łk*,:,"-Z{-j ڪ\n-;.N[.骻.Ξ.;/vKf// <0|0 + ;0O*1[pk1f1!#|2Ŗ2-/<3͝T3=3A s5mC+4C XMK=O!UP]w:06e}6i]6 0q/5u}7y7}}^ډ+8mmZ6kζ0pܡ{~:ꩫ:뭣U喇-/vsS~ŧ=򞻰;+ Փ |@c<V{9~B -<P,; 'A0w_ `4W$)aj Ұ6!sXyn>D1(DSiЁ1!D.o!! ק)RL rх'F1c^ϨF5.E~)HA 89\#bFl R@rw=A*yrf!>YJK[PP$@ ҄v#JDOMI90'SʔG}LԛT \R5QjV?U괧nT \ZԲug}Yة)k>VР d'Nl.{r8vVF4x,gSkYfUgTʹu-k+R6llAUYv18q;60e]&ԭsp7hGL`U. N׺mzx "r\>m/׹nX ", S3aR@+^@܃UpN?@u1s4`W; Ў~4:B'̴MsZ8% }59|%5;jG4`eD1"G] @Sֳ_8רԊiS־6=eX/&a` 87ӭuf*ʜN}{۰Vn53? P|p>q 8C.򑓜8,ӆ8c.K߀IեDj> w+FoW~#R;:ԣ~KVq\:صc/;گ~ko;i.ҽv;~;/?<3s>/??ӏ~?*g/ӿ?@  &. 6ڝ"^@;PKxy66PKPFJOEBPS/img/report_view1.gif0GIF89a!c11c1cc1kRBRc1cc1cccck9JkJsRssskcΜΜƵƽΜ1ƽΜνsc!,}H *\ȰÇ#JHŋ3jȱǏ CIa’Dɲ˗0cʜI͛,UvLxϟ@CѣH*]ʴӧPJJիXjʵׯ`ʳذhӪ]˶۷pʝKYE˷߽> LÈ+^̸ǐ#KL˘3kp`yvMӨS^ͺװ )z%E8sͻo-xij-μУKo nOf?4;׫GO.X߇SW`P֧]Jg|y9!zU:աR&x~އ>,7_S"%arb8Z%"U*_O=?X$x;K(| 10rvw#X6% IBL"F:򑐌$'IJZ̤&7\G% (GIRL*WVv6q,gIZ̥.w9I 0Ibf:Ќ4MiZ̦6)jr 8ICzL:N`{ @ρMh2+Fg# ȈNcFюzt-F1*ɑҤ(Jgҏ05dH 9Rf>)Nt%)Do*QHLYSԩ)S:U4@N*KԮzKC:TէYE+QҲju_\@6lkZ ճ-`[κ\uTXRE+a'KqV~dYY4bwjVeԺ\OZRBVLnw{L }+׵=r;2U*CZuݘ.U xKMz|Kͯ~ƯsKsNÉ;l0'Lfΰ) {í0GLQ(N%O,~g,ȥF8αw@L"HN2 PL*[Xβ.{`L2hl6psd9xγ>yXH'yH4&F;Qs M^Ft N{:ϒ(+Kz2N4?MZ95SljiW~7 PmfkYKkR6i)=Xvf8q=W[s-M#)0)rbw?X;T~_`7A>'Gh?y1,ohFp(|8 BGWnh0w̭M?;H&NLYG7z9^rb{șt&UQpHc[yMP6ٕ>x}gCRǝsnݷ}'/z|q'F_;??W4gn%gOϽow|h[>^.3~en~xM}6fyCyhsu}rV|tVsfw~Sx,؂.l xj4e)S+eчgl;}=X3'Hlj9eAxeO~QThG jhPlwՄ'}a7} 'r7wzr˗tgri}eoϧ|K'pv}x*wxl8}q?HGTg'g@POf0Xp7G9zvSv'pgz"zPqtdhzt|xkv33Hf=(8v@Dwige(uG׊eHxᘎr~Hb6lP6X}7|xȍpxvsohk(CWਆKI8g(6flaX_鍉=y^h֒J8~t0iXӨ 9z(Ѹ5)g ~XyC@X pIeȔ?)1*t~z ٓg(XѸFI XXٖwYV؎Y)[9e$^x)ɒhEvN)t記J}ri(>y)>yy؆9ǐ#ɘtafFq68g9t9 W(B Wـ͉u"Wq9C0Yx虍)ؚ(9빏9 j)y f#eH9dy(7Fiz h*Y-|OX8n62_yA@B=0= f?ZPR=T]9FzM ۖMX}mաbSdmZlx)xMKnMe|+suwmKy}M{MNJg،؎ْؐ=ٔ؜:x t=~e0ڤ=Rfڪڬڮڰ۲=6p٣PY[PoO&%Ѝ^,rSe.^7CߏuLe&de>g~GI䫽l$rNlns(~PQ^}S^TBRTpų*搖C`ڒ{{'yw>޶m{sXθNʌL)PVvꡞs.L~en姾~>W+ _ǭΏfej옮o~]^k.Iً4T{[}Gf6~KL#KkAG}>oN "^>֣JiN?:+zM@B?D_F3.Px;_V\^{0o|OQ?tSojXi.l iC(Fz~prtLWو#s/>ȤJjepٝR)gOrm3| 9JR jMѼ_ϸ?ꇚbhhmoߤɋ)ѿ?Ѽ_OhoϼY_v`@"A lP!B':\XP@)~RH%MDReI +]q̙0 ;0fEETRD"TT-VqíM^aG]Iڱ\mKuO S'Ͻ?>X`0*G5UW-k1dj/{\XhtI {3Ͼ@=[죇aG :UlcnF垝w8s[O@|K<R,"mBл3DZCAG$$ɣIWdE6tQ*'{ͼwD1H!]QH1DdR6qK1 J+2K-K/3L1$L3D3"<$\I9E{295ylF3PRPCkPD](!d@G-t%IgR1?."u-nPN_UI3}s8aOg2V(+SnR5We)EZuYiڵ+ 8*8_6!mYUJ]Z"+4weYUVrY4W|e37yKXdsk_w~7}ӀWy &?Wm\#.qhEU]b#7ap{ìf%DsܙӋ14fNg~9h1Q5=iHhT56aTE"k1giqZ.Qgm{gtFm욤FZSon ;U3r'r/<+!mq9 tϐqLot_O u U v]=dguwQ/xfzݏ[p8fQ}AEŷ?ޖUw?>z3YI^}_@%[dN`#RKʧ*1okI'%DkqFi )e>ysGCTXǞ5/3i(D0^L8;d 3 | 4bƴf@-yFsCPc@k" 66+ay|sEP;Vd#x4*`tTqf997 nH]ˡΧF4rafTxF ;pDdtpG WHЭ+YIRN&u2:%i 9bӘDf23_M,y8_BT.Y+lΒ5jTպ9isnT!Cg(Rk3NE=PÓ'$+ܮ0-0t{6#[`1uXK\)߮Ykq~o[uniYĺ\T9f?ua虓oX^mNtkݾzUg]`ăΡu 5L>3;s:٧nP&O ʱ+mHtuk?Qq]P?JwgF! ϐ32 # S #C盷9cx!#W @2":zSDX9?@#S÷nr-2V5Jފ0dTC3%k/'L (()<=ak./0#C"ă89DCƒB3:,;d$ ?4':! ¢ ߒ0Sđ`q İc{DnD??T+Ő8EltTQ۲XY&G[?쳾@fE)54k@U+$"AD3@b7񃹡Jb[FFhZ񻬜"*+);GH`J DX=#>XƾĘBDd4HژǃG^Rȅԥ4 k3:ȎBHH< d+D9D$d<7D046\I-Dpĉ-?"=ѣ%n2ɇ%ٸ[`,$=CTÔt?ʝZʣD> Śfhʺ 7(b4QLqjK8DJC˼>@ |čy+kF ̷sFTd,¿dA:EvV|dKNOeaop6ci[j^XqFtV!g-e,΀yz{|z΀u6CfmdȀ ~h h Ёg_.dގv[s&ڧhhh^րPO.j>FhR~cSF騖jdN>UjI^vikN[\n6쌎k껞ed敽Fjk^l&mҾ~fvXlJמdv5k8n괖hή߮&홨h`feF*d`&l.nFn&oVl`HnUnl/-..nn^hoFo.^mno@oToPo po-Gf؁qN )oGo ?qpF$% '&V 0ǘ 11f@( rPp$r%gro*1#s>r+,r/G3GF 34w5o7Us^"b;rORt+YeCrWmŖuYuZ\Y os 8MtNqu,NvT,J;-Z{-j+z-;.{.?;{⻯<| # 3C<S|cp@;PK:00PKPFJOEBPS/img/menu_big.gif GIF89ay1!1kZZ9ZZZccccck9J9{9s޽9s{{99΄ք֌ޥ֌ޜޥ!,yH*\ȰÇ#JHŋ3jȱǏ Iɓ'\ɲ˗0cʜI͛8sɳϟ@ H*]ʴӧPJXj݊ `ÊKٳhӪ]˶۷pʝKݻu߿ LÈŸ"ǐ#KL˘1ϠCM4,Jװc˞M6Ŭiͻ W5Z+_μУ-5-rسkg{w ߗ{׺>kZrc}oXU  |߃F(!8gQ ray8} 砄," GfU!މx}.i$t:G^ygdL 褒KVX$:ri#_zyޙg&L pt։ؔj>'%Y;fxk*g|&J]U:(NZ!zzU)ꨀi%\Zz~ΚhJ%i婰)jgjsq%ҺS^,b-H). սIֱD2h9{`ꊯݺ+eIeNjF,1XI*L*Ѐ'H Z07z GH! WS! gHڐ2w/[H"HL}&:@dd@*ZX̢'z`!7. hLьk(ṭ;>o<θB9>FB$iHDϑM: 'IRIVr|eb#>|TVlv*Ve%?=J{AfYf(KX8g>v\JudThb'AI8hy$=ti7ipXWDv'h|mxad؈RG Ĉ8`4؉j6ixq(cx@8X$g_5c?(ʨr=ȸҸvX^IDž9X siNH?ee񨐕)jُeEiɗYs9'Ɇ⃜v҉iٗٙ Ii牞sDlpI`UUVIUNy JJZzڡ ":$Z&z(*,ڢ#ʠ*04Z"p8:<ڣ>@B:DZFzHJLڤNPje=>21/dZf,wjlڦnpr:tZvzxz|ڧwzXV"8/ .i꧐:ZzhcyxF\*N0'Ъ'r:Zzګ:Z 6搤Y(_H%pؚ%rڭ:Zz蚮꺮ڮɪxF^XuEҪJjjEE{E{KRڰ;[ 9c[ *UT X2#e02;4[6^.FJcRh= 0#)&KE(qO۲-L ,{Z\۵^:teЪ?cxӳ7JJ%0='+u[vk {W˴{[EAiA=n+p:hY}z˷wKElyl %ݳ!&`q % ݱ~;Tۻ;[{țʻۼ <8 н` ;K{Ỿ۾;[{ۿ<;>-˽޻y;M |@B p@X,\^`b8:).(+Huz[vcSN`WB.KOwO6wOZ P>mB^O+@tN={?~hՐ4P(߼ͽt讞G[ͻM>^~RH5>ƞ왔Qn=CbmCb\2 nEUnNEE.MQ/No ?/>G ~N"_ O)&o#/*,$3"Xt>?$(E_COoFI4+/J;Ud,O}_JfmO/Q_uo2(˽]/?Xov/ )KIO Vup_p.T-+tO??/Gݫ˿ϿT ݑ|h/ی//j~`*/|E!C@0 0PB >QD-^ĘQF=~b+$HHJ2X @L3eęSN+!O&tX ">UTU^I$J0]\9f̱5E vPCmP)Bqee@/޻;0V… F\Xɔ1+so/^ڦϝ,]鰪:쁱oZw}=ݿ/wcg5 _.9r뿏F):ɺj+=[;/ kB C?qz1 [QE+N 4ʹ)΋Ap/ 7P2JF 2S9cܲ9b$4p\0CB𚴰"5!A)ύ'-,8//02ʭ1ͺ MjHOHQNOUWeu#fV[kl2M SRճ$$6O[eYV-Vi6Rk\@Sd=Cu\suZYe]wqv)VSq-]}W$uW2]u03<@|ea}շ@ bZa7x;bG>N Wfe>d 5o9ggm/9h9޹g߭Y塗fZʢzx.٫Znk#/ڨ.XA6c5ZR:nf&n9G c+sN%kSnšnuJ.HļT.S']&uD27!Isuс'gW`G^s\v&_;zozk5^]6p o|!J֥k;׽*ҿ5pi# G/M+c t`uƻ*Ez9^V<  TFBЁ(L0Bf1 k2Cq>b,0hB$&bP@Ȃ!  ᆯԑjgD'fE*o]M~S8%5mc HD:-y7:plH80,±d& УU:"eAҔ$E'`+!0A&W>ґf*UٮJ,a'I6`VUȆ),P2?YJyϖ4iMvBD۔ zֳ(Ms 9Pq$`6ԡl#hDN)hFBъ  껎*1'}GK ,e(Tҋl1)FMRyiPӘjRU`S˗>TdNIFΨL<*ViU<*ugE3sUUiTqO\e+A5d.#!8T~)+_+W5IX f4|*XE>|,bأڴ}s?kd*^ /VmnVnu;\VcF\iƚ;݌q)l[Y:U5yF Wk׽YoOɺ674m[_kwźK_|ރFwt;o⩌b+9S\s0IYQl,75OTkZԯKi}uÄ\ku\óp%ǭnXUt=hBЇFth<_yΏthIWҗV%1iNwttE=ꑁԧFukejUկf a=kZZֵu#}k]פ=Flf7vv]7hOזYmnKwimq9!խt;PKM_ PKPFJOEBPS/img/option.gif[GIF89awQ!!))))1!1)11cccccޭ޵ޭ޵!,wQ=H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0c&l͛8sɳϟ@ JѣH`*FEAEXjʵׯ`ÊKٳhӪ]ہ Jjݻx˷o؃@8aa ^,2T u˘3k̹fC`bŠQc< 1U)b8ֳ۸5ͻ7=xxp _N<0r瀑'=yQV`6Mfӫ_Ͼ˟O{'x}*~A'M]l)&ƒF(y'fv ($z`H¥ҝH]Pv ZfT(e%iH&ߋ*wUWD82>^yhlnhڛ["X qbp%D 9vWB+Yh>&h YVj&f#cUܝIiOj]u-Yؠ !蘆 JFb(v@lfjkk+-fIy{#l`J-Bk,b$vqD @S+qB ,$l(," Z(( 1ȍόbl(H'L7t2Ds$+ p)f`mhlp-t5K h63u]S c~'7G.Wn߽R`.褗n騧ꬷ..*=eT/oȳ{J5G/'gw/o觯/o HL:'H Z̠7z GH(L W03I2a rJ@h8-jHQFӊs%&60.()vъ(D)~QK`4!k,nьhLc i,5Sv UE9 IBL"F:򑐌$'IJZ̤&7Nz (GIRT+[Z2,u)\r4. 2L!>䖝HKWr tfBbIKhҜBc2 xGQFNe4LkjԼ&7M9wz |r1вX(1#1YvS!CLa6 "EaQ*qTBh%ԋ{DNlR]BUJS(h-U͜('4!5Ӎs.0[SwR: :a EUPKRrըfN:S (IUo}cNx U*̇ӥgC9˘24"^ XMᕧ*FGJ޲(f)L̂hGKҚ+jύ|-lgKͭnw pKMr:ЍtKZͮvz xKMz|Kͯ~LN;'L [ΰ7{ GL(NWb0gL8αwx!8aG G `II( Cfk"}-\9*{M@d#/#Tfk?猘h "0yˤʒ'գ]QtWRS䌒_X<Μ2(4֚ѽlt+5Jzr-cIX4@Qt]5SPQKd=p(PlWX {-L5Y=#JTu[U,W+8~֝8yTļNv8r1i#$ zb.3"L9D"ڄ4?w@qNHOҗ;PԧN[XϺַ{`NhOP[2̫~I?`:V<*J)`1 tn`k]13|/w@9D~=YHwJٔNi|LR9bTyXV\ٕ^W bYNIfEjٖ>ɖn5 rY.Iv%zٗɗ~YG퇘٘ǘYGӇٙǙY'ٚɚ YIٛ)¹9I|yYٜٚ9YYDٙYYy٘깞ٞY9ٗ{ٟ{7Z;PKZ`[PKPFJOEBPS/img/report_bind.gifr)GIF89a!c! !)a)a10c1ec1e1i9qJ}RARZc0ce1cecck8JkMsqk{u{cΜΜ޽õýǽΚ1ǽ˽Ϝqc!,XH*\ȰÇ#JHŋ3jȱǏ CIɓ Yɲ˗/-I͛8sɳϟ@ JѣH*]ʴӧPk4jA%сQjʵׯ`ÊKٝX꣭۷pM+ݻx˷߿ LÈ+^̸ǐ#KKک1O̹ϠCMӨV&|yeیaPʞM۸sͻX1y]U3ȓ+_μУotS}f?˽O<<ѣ5^zڞ˟Os'A]_f& 6f}'`QW!v!apX!E^$+bj/4衄yሗırhDuaGd^1C&BڒnQYX][#v>vYYYYmiWKxqfsUf]mi2&s '|)&9 9R({az顜YqBIem⊴fRB:*鬽k:Z宋 둯:Y+hB'\~r9*R?ZhnǮˮӾ+. -[2+m>[+ ;&Kྕ^un++2mkrkz2K#ܯvs`K' My#?7-ld:|3^*O ._|1*vNͥF(m/|3+_րS*]ouˁӬ6׆ .kR[^mD׍*#Ӝ. +nkԅ+ʻ/ԵW^[ ;:qM7v[w[5g³N{K͸=S)_hsU~]~^{3Y̪/Vu/`3[,Ud|Ot_ E 2lXR.7,lኵ(pmҙHD+au&ЈPDR䊤1D&PZ"]*ҨebM#AahABU5ɌSF9t4)K-, >*qLnTAVRJJ璘̤&7Nz$H(Ei*WV򕰜 *%2KX%.w^ 0IbL2f:Ќ4IjZ̦6nj=7IrL:vg0\̧>~ 3IMBІ:C'JъZͨFсl HGJҒV4JWҖD)LgJӚ8ELsӞ@NJԢH5PԦ:PRJժZ.1SKtՙ:W˱ҬXMZRe&\Llͫ^Qc5k D=a׮ d'KY}uk`iFᱟū2iYnMjyYar5}m2;[v}iolm03VsЍtz7qmc].׳tK^ Us1"ִvEyiWo{e Ͱv]U3p<, [ܤ07/SGK(S緵gL8αw@L"HN&;PL#X2p.{y\^hN~\P5k 3LgʹxsI>lMЈNtL`nѐ'MJ[Ҙδ7N{ӠG=j4rhHWVհgMZָεw^MlXc.f;^5Oj[ζnZftJl\w@@veMo^ٹ>~̎wW]z[,%`H7 [x^pEyu4-ot(W (񖻼&;/T8tj`:X/Os=͜愶yqNB: yG7|nK@zo=w#?vol5O}^Guҫ'|Ͽ~?я[/ܹ{4'|_jzG||z~eրFQtv؁ "8Kj$ku]GxF|7Wx|'<8ӷK؃B8DX&{S{UkjF8KGAHXZxHhoJwk-u\[xvV{@nBօtTKNɗImyLyzRYy~HkXXf9knəyHi7ȩe8J{Iyu֏)k(ɘglim9iI9YٝɖْF߈ 蝺繄}fy"I9YYIzB}   ly ~ِ;Z&Z$ꤐH"J]ʐY:lNɎi*7Ji h#6:FJ:xɤH] ؟tʜ+Yu*:k9d :㉩ə [zL*ɸ`X&;מ89 w_ 0|#j DIwڡšZZG$V+zkj*kkyvwhMbɬKZN8jxͪtE׺jsrʞƓ 4Ы  ʜY Z"ugJ{g_ʣzz˝7{1:F{'+LWiƫhꟆitZ[zȩ X얯kl۶ڦȴf!U۰hG' tymj $8[{(͖tv 1;{lioIg3}lvZ붱{}&rlkwX*g; g+ƉnD+;g ަos[yۭj p'q⋽KN۽&r޻rvh+}0jjY7ٚmc m6vgwB^ L-wtpPܜ|*yq 4F% (,Jg{!:ó6e6{\TLAOG4^6~8:<>@BFjf)zM⚗$PR>T^V~j䎷LN{ ]kbxۻ}ctkkpg.i[pb}PY.Ϋx>_' [臨\>bP:\m\wg`,[UJ[:MZU[!%"&.ͪ.aXEK9ٞnϥϰ>ӥXPG=ٜYӷ%?WBM4YsliH=LвNg͌ڞ^'"%4Q\?%,d*Nk__pBOt >xX,dk/˝NZ \5P_^ͳYV/g,UղϷ]y;; Zt.?slOD-?^5Q7loh̓}q@h4@ B 6TÈ-V\@B/Nh1EMDRJ-]܀&̙1eҌB&(pٳ#P JtO45$:iPU^ŚUkΝ?. PPڔ)հKJW\Zu&|۞he+Yxq`!L>,Xxc WmČr1 ~>(!D&AV%Q~zۻ=^~0}׼#@@d,0켣?6C9 DG\P3H4<J{hE ođpm!2H~H#$$LB,mJ[ ̴K/ܑ#L3D3M5dM7߄3N9͘3O=O?OAd'dԽlܲQI'0LCM7SO?5TQG%TSOE5UUWeUW_5VX E襤4W]wה,b|%XH06YeDvxB ME6[mwVkf%\5%h(K7^yU7շ_]WuuCxF8acŴOJf|Q)nM*/~O4?.D}xch$"Ymǥ67fegLkpT(6Zfd'|cc$:f.3kn9IP6qjGs6Y륱9Ҵ:cv>8a^ 3JeXjͦȶYFDsb}> 6o%:"?}mgDZhv TX:VլgEkZպV?n3UbM `4J-WJ,5`}͗S:I |AJ,.Xu, ;/•r5aY5gxU֞4՗TXb˳u\ZM>N Rp*mѹd*CKBGT,_o96N+s: V7bmkeڪuwBl.JfѷS_&{mwv;:e` JݚF|ާ6dwɅ<0ѧnc Uh h?i;sIlp$2:grRoj곔i4V~*V'Ke+89ZVZn8^We"p5蕠7&]j8ņ&=67L \=p'yI[,W8J"-8$\n̳u&=/x>jC tm1YfڠUe!@>w#/VGԡ}?NC.+ կ>wBTƋAR|5yw^nZ#>)ǣ4֫wlj.Ew D$"2#_eo{Ԟr>ys~ |ŽK=br1I/? 5+AWA!k3ss9eTsB0R7 k{ cJ$6sc 2 7 ABKC;$,).HBj3̲AFˢ@B3-?=4 LٛCC+ÏTT41tDE#VE:ܻ{A7"6c&+PERAN2XdT°3Rŕ=SZԝVSB)ī]-_pҡF1 b Tid/x5K7eB\A %cC]tí;"CD3"Qǿ9FhI,qT9'1F%d3G4.G\,:y'7?#+KYC -uYۖcl胨>Ԗ ))∛2095@~ṁC-܏kH)KTԚ:R1܊' $H3b|rȠ8 a+t yrX,B3{cDKa2$M5=KHH8#9,1QQ 9% =YsI7\mtؕ Kb1J/%T _WMUZZcaڀ֐>\ t Z|Zbs,χXn5J2${,,ͻۼ۽[<3NC-ǤK=SN۳<]\_I۵QL}54(uM}!u峨-3*VTDd"/sNqKU%]4]E]@\)V*]tڝMwc܊H8DCYy7e4Mm U]Gy@őeK ̩dKr'e^_]mTOO w$!DVSeG,4eY_:UЮm9cjPVU4OuSU05TbMX.a'}`&M.I V+%k̢+PPu a:ST#bžULWjƆeCVhu~/`ಭ"&%R-X.i\|81fuU>UbM Mg{cvWlR&F7NNB=EUֈMb {!U1VMWCw|䁍dcJW:4LNAvdyן_SINf#,5X\XDCfvpjꪶA9MN@fhf4f`f^k>khq6붦f봦kN늨kKXi]$ \O-뽎lvɦl>뾶l.lklіlvkFm<}=MSa(\Үцjml.ҖӦlm-&ۥI~\;mnmmvoFklpgſ^=>S9>ݭFk.]YL+q̂ÇgIfTh\,^~fom^VnvnmlFoT@B^(4fa=Ujja9zfNdda$M]uɄjmploml&nr&qGF!(=ثRCK>`"gF&JRZf'f*fsv-d jZߝJJ/qrt.Ȇq>9<\3AYH6s4VKS"7忒Y4M6qJmPrhGsdnNn.S*P1KB}e7ŕ 2\8|U1)g%d4QxN=/\4TfEkbHBIN`u?OTL\WdFFMF[n})vG?xmif^o1YUpmeэtWINrV.˗GH$p`lWztF.rXK+X5:؉UfW0UB^YzkYX7EG {fy6(<.{`emDW^PtJfɚX-VVWQN3omm i ILV]ag+nHilWwmo>vЭj ,IcOFx)̥.=["\mqr87hLZ3vd[램M[ނ8"L&OSܭU]'+)=Gc5RsIkG"qos·?& _̌3J97skug꼬kgcY'j%u:Z+cZkZ{Mi(ĕp](%y (ExSEqAbB/.f3q|m|chF0m#X*‡~# )A<$"E2|$$#)IR$&#yÙov$[{7<%G?TQ|eNIGN8L(K"\Rk%] aA['ʴ%o!s&)F[Z")i1\HEhӎJ)Q9Ov5 &l#L+~Сg%ѵٓi?U?}S B6wf˞"y\Y+h%u/3⺴tbi^JQVEtk4 Ȧa嬌jP ׄ $#Z&~K&71in ^Q%\=Me橁[lYm/Z֢7K3_Yh.:LݽQi(V6aì5Sz%wJ<~=ОzܨΧZ]huUt>j"G>\HWԂ R- E4Zj L&+!6RtCo(w=yoj,1|5as) ;\;>I4f &bxP/vx`Gtʺ{{`Å/֓4HeY-JgIM&O5A}^] ,e7:Cf 䳠;t]գn2'Ѣqc(<JF.LI /KV0t$>HCjP ySg6QؽZl'q-ь&jw99W/*2wpⶈ2ԥ}ɍ{%iw4g+&\nnyPt7iLr8C.򑓼&O&Cv3k_~;\4"?]0<o7Df]RFo-9t20}܏9Mdd 6~SƦD.у}֯Q]];[֓4BtꪻNUNk5 Z82D-۫vN}c 6cN|Mk|Q4VhUu:yZKwiFw?. NJNWx ^+8ǥ/ k*^ۦ[luV!\U_^Qe.ETPILdZUߝٕ\MP_Z8_0XYJWXP Q|P}}]Io=SUYֽq dE%rA Wݚљt` YoɠDNX""Zx[el@@Qy ` ؀m b vbyQF|ܔ@}j!b95 [)!(ٞJVޭ!QY&$`jb# )j?DP3N1+.Ɍ5a 6l⤄ ޔ3v/R(L)P]Ϝ:<ݵq"Azmׄ,.^^XൖN.0"` A`\rrXFJ$|cЄccd#x< [@I*\#QRMƏMFVqŤO\;FRZKSvRSbQeQlɭ%[[%\ƥ\j䷡ɠ_b`^WX:]` `.&9CإE`Bf4fDav&CI&'h&FxDz-iI)Y?!&dBee""j%fZ@D5?%jn"ءa*F0f@^ XTV2*!(*v56s"UbRViHLg7mv2V3r'_}Vi!zxiYe~ Ҙ9r :Vy&^]_&Fc1^0`X>:& گ Kz_u( JE"iZuhCݘuChC V[9h$[EgݔUi5 ɐ'lcg 牲ەOF<) )zHP})i#kabKV`aU 1F*}Z֨2YVZGE>̘O݁N #zBaR jj*'%fXy.$bL|A) IcJ+6*+Qkڌ76e>^2!_c72vD#UaV(:VeGh'Kٟic!I.:(uP9'A#(% ZYīT:!!Vi{NX`IxȚpo*,tZ+k im{fB5]-"g"H$Z hSfF,U)k >jryJ#HpfQ|&Im’YV-'ֆX潔nJjn-\l~G.Ŭh}"|F^(_#D"nE((1+چsV+$ΊNRN\..nm_ee.Edl-J^Knl8/nؐ.+.D:^o^Re_r.Y͢W&eB+%o/9 VY&vЦ&m^~Pr삸[qjA6? 6.֐ixVl*b"`n* GkpFJ2w$:9i~0Xkޫ*%5Nh˶){d)짎dlEэouZ'k[ k.gjiRja*)l9%/0gznُ :b2kv! ('ک>#"vq+iϘbN&o$/]V򢾱Bזp$጖2!/R W2V32szz"*=r.%!36+sI-rf3++k+o{Q=39rI2^>BgkjI}r {rk/>PG@"%)=䛎J2 q:OF O VnrytP/= gҖTs,W3$&,'2FdG5ӪC'a^QZ -zl7sfRRVN[`uG40]ts2u%6{|P^U+Y4Q.holhRiV6 Iop7qq4t0R 1e6jvYRrԟZWc+a7r7wx5baz{C~'|]F,V&b OlFk]C?oUYvY/0P>8B1k.'0WicӛK%x x*yK"2 WL4 Ǹ0!GRa.qIک5}bn .ӖMB5;_1p(*ʕ{pL!>ßf_ O6#ϱJW;jmL`&#sl/\\S (C`pxdvƳ7zr0)G8F=usk`g<#,&..D 7_isskϕw!3#+X,$R׫;o2Ou"?j[4`JWu hR+0r*=f_c3 sQret;.` G$s[j;lζg N;S.|j*Xz7%28IUDƋQne8yc˖z[7Z_ZҮ%gE(O?OG9f^tSCW!b=lrw(6wۇuRtO仚Ml^C9ګhg7w\PAluj.rv'z/rcWodGHJXk؛|gQ.Ar9p>_RrcrkN8PN3`>Xus~vzgü`ݳm>x~+O)0>3;.<^Օ߃v17y q)Rea:֬Pk uJbeMc,k]_۲+׫bW[LEҕ 0N_.T#ł2t0DrV5َ(ѐ  v֕n߷H5u\%*(ZS>n_ȍC(9z.n]:V'7]?ݲO]g# "N K!*nC 2kLjD2m96ξ+@Q,DҐ<S.[s:>$1!Qd?d*N)R-l(-CLRCy*_,Y͇u>U[Nxߦjc(nRL tjZ@\InQ_<,Xأ6[5P;qIJ뮹ʅ+Wm%'i#Xz6)ϺSgVy o#7360Vyf5o+|0[m=Y[K'?OD,aۖ4#w!a KƦ(n  {ymMQ pC=D!E4D%.MtE).1dQP\P~Ehp{WtV# a9F9/L_araQ4ojUű6r1c#! Gώry0`Yv [d$+8IT#_%/BVKc =21wXSfH;.-wXg m;O Ic&υKKnfO 13*^4M%?X ߸`e aD 쌽VNPn5Hֻp;^ti nѼ)g|hΔj:Uw-z^*d&e0l1, VnVxIDDnt͙ )lB IZ2--KSq̧G4T*Ugh_ BROC? *]))1ЎTGg˗()*<-a+6KZҖj-ؘU;]`E5U_m)שSQ][ch:jYi;&dJ]sk۟.$\I]Ӟyլ~u2XT[Q]ӶY#t*x:T __V'k)ZS YZh=)VлJ]lxWꬥZ5VOGҵ_}ͱ[~~^#mc~ⳡmiOն!VN$5X<ŀBe9 k`3[\f7M9dy$ ˥dae}Eo \ܼ|]+U'8/G9"@7ݣ\Kpnŗ ǜ}UMs|9:+9~27+ܥ3kg|h1md3]4ߊH#d=ooc5[u|QU ێn,%@'։U۱5*]>9lvH,e>CKY<癩RկHfs.->|y~;%ȋ2ʫ}YY)hn}`*g}Unxs=bq̳}p?~s/>Jw6yn ꞊Llz,wV F ˆ9:Lf,$m#亯)j.8C> +mZ,.xp&ޮ)KϢ&pHDnH0TL+dwJ|֩jPZ܅ p.p^̨0e h,ȋo( d |Zp# ZO@lpK/l _D]ʔ/9 PTRpά p^ș [)`mz.Ϙ|lcnF0\rD1BQB N.5c153-ёK,.7g ~hghQ}1k\ٴ-!r!!!!0xm 2\q#u# =RK@c242$P5mQrZrkFcJCloz-G%1%$&2Arcfrm)}kLlD*RwØZNi1vhf(t(+Ny̨.8=&*&xPK(G.JTK`o [)z0.Yo /263&2II1 1O/22b\L\3W>S`2;b)  SL/aS~ثlp%ZTh; +I09rB 4k"5k53Z:/6;9 ӆe=zDD'K+ԒeC9J^њދƏSA?#)KhR48SIO /<뢼ZpSFh+ DqӨ2O>k "i:-TFkbl*~xfTU0'Hӹ>‰ICT 7)F5P/;n>P5t5Fj2 QPM0Q7SGu4oIWF7JrPtB_k.#8t`-N]4A7{CUS1O4?6NT9#eZ$)uJ7X[4ZY2UTu\Bu\\ǵ\M5E+r/]!#^5_u_U_-uEO^TY2\ٕ`OPa V+bbbP]Vc$a%c=6J+rKd,)-'ZQ#TeDdG53jtvM2\I(N$0Kt oTXgpLȳQ/4Mo!jgDt)|VkQ`P<*vM 4S5Q%jKQtBL!dnٸVVr1/'Vo,5tfKUyb aeꔥg?q.r= TH7t3HT.m pm5u`p6Aun+v ͔FPݕhswAW(GnYXKSuxVboS.1Qz33w {RVxSW^YT|!xtQLdvwFVU۲6t 3gO7i,S^||sk| U$97@VTcEwW`WkqoÅA%q_8xu_k?׃quXaxSxYɆuUpx83ȋǸJRf7Ci,_6phBt{b(lIBCŒ4hl}FypvzܬWL(DS˼w?wu ه9I*޶3׎ sz31-pr$8Z/|d\%oyr4mwvӳ%: ysPyNmAi%#\|G:7ڰ3ܞ׼)4<[:3ɛ_k} 1/tLsȼ<!{9=+M|aKa&rX:0cQ7yl3Q~Ʃ"3}'d (DeGXkR|i}]*/[1ݧ3xC{5۱=?gٝ-^c̽wSs}C:b7m WW=-w;m:'X~ܪз)=[2{YGӫo7s:]ڛO{BylVjϞ:w*%tX9=9AS_/9-oVֿY\3?4KwQMs}~O!?x\BsϹ#n0Mеָ5NDDߢyA=ќXw\_}C5"*&Q(JHHc6Ra 7>bBcA{Ic|= eOeeZne^~ fbIfffjfn grO*h~(e~bHe>gihV!*d0YO*JiXzZ#~z>:'{jv)FAB*Hh'iʊixfq &Wlou" ѱG2gt,z)^F9;. hy!uI{`ݵ.۩mUڞ xmg&vxYAj0eq-pÚdZ];-] #<MJi6G9/\1ݰ?r/+Wn3etnMOm@ P\ӭ0|sۆҤb(xl[) !HTT1QLKCS|bVb *ōx !S򬠥UtkWʤ⯮jS]+E:ʼ`.+Cְ{SUWfeC`zU~uTl"JfdcIFOӍmCR[]mI :a{dP٢VfllJ[/Wou*r'G5bz[VWuc F'Uc%z݉fU_w?!צzrʆh{uD_{旡L`#V1^հ\aMk\+Hu1{dcBV)ZH{#;`\I[2=I4e䥳ۚLPkEtZf[<,TŻ);e=WKS$ 7$nUw&pKA;7(K?87]CurWbʜ(+,Zpb36xw``ao8>MWmx6,Vҝs㞜ϰe=WysͻK eex.~O_-îE>U> F:C6%,`8PWV1o7ڳXJ|~3run/ח}{edSI7bD-V42TmUֶdolWRuU.XfweeJ8k7>h,.28v⣂bփq)k?hHXA*CH<#&SHUhWxTjem;Fj^ƅ`v_x3aacjeh]{j0l_njpxrtXE3Ҷ-&%SAVYɶSlmBs&@$a#ijV 'TӀgsB6a%w}ec{ܷoZty5Eo u|TS2{taŋqYQtf8xS6sІkvF^w[B]ANj5~~X1'|2[tŇ؍2vuwciGW[tpprWS^|(9`(d;Sx9Xh*(|H|C]v5F2fw@8rv1z{|EsƑs葩"3|z6Hw y%Rn WWYpvT<ٓDGBZ!(~*yxF\7HSѕܸlvV;o&d6d|T)-R5d0]H3CWywɕPSz46ّi)vx]xxkz(؄]n>H'v))Ii]fq~֛škY)X);ه6 ٜڹ )45VvRdH縉I5kwmvM`z~rewU4Hr7f9nnyH3o^'?i̵r&j.|W+ʒAw(yv7s7OUyŢI_1Z}HᨤCs709~[:&nzz":Jf>"xV{ a WyHG(KZ%钄tԦLqaaIti 8ʖ8$7gyj'׌7ymѕ@)E9RiCRxdU~~!'4J Ep)4ʜ#ym)U(Z.WU× Kٗ8ReI9azbJBdԲj" /\Ѕ"(>TVܩ;:j8ۚ@J+ Q+SKrqVڴ6ҳ[K:(ҵaK`K#2g fdm q iK9wkLoj}kv ;kwYKM|˸_+A`˹빟 +k˺뺯 +KkWY;:UɫW8KŻ Qh׋ً +K{髾˾ +Kk᣽uvh+z:Q[ދ ݻ ܽ盿l̾Ra[9Q!h-/ 2460.L? A,CLI;)Z{, kUlW6VUZY,WElgif +XLĭK0_V1"+Ky'~)5n7n!/2^?-L[AAINCE«Q.S[U.W^QYcN em>g.iGung -(Awy{n}臎+CK#߶;^909p*.~*..Rb#0e`NN].벾T R@9<9rNpꧮ>.YRmӏVR͎n.֎KݾM~j2d0 QJ>~%ie )MIpO\1%/?/Z COEoGH~JG246?80!4cbdϿfOHCRT_tOk%BrL[_$`c_iVIArv/?(xo!vјla؋KGPEOӼϾyǟ[2OλQ_N! X`,M@ͻ+///_]l!A,Q.dBF8"C $Ir$ 96d$YI)UdK1eb$Ღ›Qr܉gΕ@ =IΣ?9%Q"0XƇ P hĎ%[Yiծe[qΥ[.ݰâ+OZXxa)7vrLȑ%O\SLnɹ)Ԣ%AliOj֭U_5mܹu %8+ɭpD 0"vAKEcR,)p4H/5Q?بjItI(6*0 8K01dpgtM8q&֫QsΌ[2?mJB 5PTʒ6 HhbCt#SKnx=SUuU:b*:MFXWx`cCkP$[vec9$z˷+wW}+͗g~W~p,_ xOx`G@FPg/f|`=AXn ` AP0hBڎd"a mxCP;a}C QC$bxD$&QKdbDMz#lxE,fQ[bE0Qc64QkdcF8QscxGFMUl"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ŋ3jQ# CIɓ(Av\ɲ%F.cŒÍ3on̩ϋ<V *фD>LiQ L:SjTXZ5s+Ω@`W*=VeՏKYkλ˗/ކu ajV 1qLXoe{#CޜnнlU̸cΨjhm=6۸'yݿUwcy"?hsʃ3iҫ7np6ܻyWyg~б// S]޼{̤|]y|GpoF[ZS{Rm^1ez( kH5؝xyew٘%a[aȢGZģLHxAZ|ZvXG.)eQwވIk6bRB_9f'z)~)+wO"$Yz@2fhrdi(?RxaY.ddVe2Kؤ7Jwvv]o"soxg z+#zoCŮ WVKj`ab=5mNnN>fS;-F+oVn 7\[vG,1J;_.1,$l(Or(ܑ,i11kn8s<@ͪDGD3Eq5~\N$wC:(PxZkL\7f2ܸ{e.C|3+pe;5΂c Xot`d#n $XC%NXE jC l8dɍ(3\iƒcRdM7q`ȏA?tSQI)B)NZOY3.LTWPYUj۴1g]^ZoU%\[‡/ΚcGG\d˔k귨M7Gw鋣٪~\ϰGldQљvU[iƳgƆRs;%կFo=fgW.h˼{î-TU>ָS׍)zn #?<Qc*B 3pC;B2A@lI|pQEXjaD0 {BLDqkH44%qI!}lG(k1*MJ%r5.{„,K2%3" t+CsNN<379lM,TMC Њ2BFMTE#P;'t?M=t0URPSKUKT@T@LXqVZ QQ\s-rWJ{R`WGtuX5e6kM8-lk7m/;tOtMp9` 7][cEf˳n<ٽW2787S:(fW'1XcoAvH.dem٥}iit޸>T^$|&Pu/&v^Y6[vw]zړ%whiz-Qm$mxӆvmmh;&\˽ >ܪĹ^#%Nj#o]u%V.p0.[[X.avqZ,%t?9'agxg1]IƓ[,h`A 2l!D #R(Dną G,i!F v<bǖ/gҬ1-eڴ'РB-j(ҤJ\)GPR"˪=cjeJbJlզQ%i-\;eKn͹x= wп.l0Ċ3nxq@;PKoae ` PKPFJOEBPS/img/deltdim2.gif7GIF89ar99BBBJccck{{{{{kRB11!)1))!!!BJR!)!9999cc!c!!!!!!!!!!!)R)c)ss)1)))))s1!11111c111cc1c1k11)9999k9999B{B{B1JJJJJJJcRBRRZsccc1cc1cccccccccccck9JkJkkkk{sRsssks{{{{{{ޜccΜƔΜޥ祥ﵭε޵޽޽ƽƵƽΜ1ΜƽΜνsc!,r HAo*\ȰÇ#JHŋ3jȱǏ C1aI1ߘ$ɲ˗0cʜI͛5U|3G @  T2H*]ʴӧPJJիXjʵׯ`b5U%ʣWɊ]˶۷pʝKݹj K߿U&È+^̸ǐ#KL˘3k̹ḡ'5ӨS^ͺװc˞]zqͻ njI߶hУKNyב'3SwO |Sv7)սnЪ_N!85V-RrhG߃`VB"S 2Xވ@0R}|}hc18V~? T# P8aRy5FQ]8KbcD"ySFd`yޔHUI!*e;)E,hOHg28 Bz(Fj*hPVnzk%DI%i#_]9ƩdZ멨+)쮔j鱎K鲨JԧEmNmj>WAZ'C*r:["΂iȦ)p"i͊ÓR-hnoQ'Le>'<) 9|ORK1pڒ  nc|_Z0S(=+5 ּL0a~m55Wi,C %e^}%L%343:5fN;s 8c:n,/7K1 ]9_o,Mb{cc?];X{-3~FNrȡ%wt[ǵqz@xAlZ;^kb 7z;/a~_t =y*5̪` }+[2v*Iq3yqnn&?3`T%5/`4 1,z]otH%"o8 +U=-fVU1c]x)>Ql6E*v[bgd6pH:xFQ ccBL")B.Ƒ@JZ̤&7Nz (GIRL*WV򕰌,gIZR77$%m^ 0IbȌ%nVd:Ќ4IjZb3nz 8iK$ކL:vs<;Iz|9~ @-O~MB}戡D'JQQͨF7Q:T% HGJn^%MJWR^~tP%0T.J4%sI@ )O Qt<*(SjBTRS5<)UKǫ^*N bPZQZg-kMKӬUxM'5׸vUl `ZU~53=lSWڕN)b:Z6nld)ٻu]fG˚]<k;YW-=3&j]ΖXUnqmtM@i/{E[z|.xKjҺMz+E/|KߵoK5&@N;'L [ΰ7{ GL(N1DX'~gc8α;c,\HN22&;<~J&SXI=x`L2hN6plh`Rȳ>πMBЈNF; J[Ҙδ7i?SzxsGMRԨN!-߸ˊf}@ָεaE/x["$QVO:ѲswMj[ڽ0=b;3]65lWt6!d;Mz5mld9wEmme(!'N@ݟ |:h<6dD|Z4*NW(P hs7#nK}ygGX:/@&ЃСՙ,Mt'P7D)gK?SOީ>s~F?xAmU?c'Bzx&|sO?}ozֻuyx|%/QʏjGz;@M_ w7x_>nTO(~h]ЀnrxxRPvxxy*Wg||Iz#JPzKJmڏ;턠Yjʣ9uyihbZmgkUzX*0zgjN 30*sHhikI(89WpZVR79ѰYjMቅtj5Izhʢn㤥JIN:Z7Kj(kr*Nm8Yy ׫no*第m*䔬5ggp ׭YMF*ѠtzZ:D i v&kmۢMZ rpбp~ri6Zd3Dj~nۯ%ZI4zƲ.{Ԫyj)xr;дMwY(@khBT[Z]GV}%SU0{ rr JihW;hY W=EZ`{\aY.{i8Yoۡ9Veu|{U+eۦH{*,h7ȡӇiZZZ4պu[d[h*h6zv넧۷er庲xyƼT۷{Vk[N۴z۪* `+뷓žk[j_aeVb+5ǺjrkػCqj{V |Mk  0ڕL 0\$ A\oCL+ȽƗ gJ;2c*MgO dw{VjL̚IVIa\lJdŌ*Ɵ h=jOcd. L)a|Ȉ,L8LfwⰂpۗsL&| M,q~L+pY|fɫKk\~{Fzf \o,9Ȥ<Ǹ˽@Pyf jQ#;̶|~Fl jͶuΘ|ϷvjINx~jzs:qi}6 6 b^8 @  @ } mNU脆{>o{ճ9̊,~ ^po_>يFEn}  ~@ g߼]l߾U>9ڒj(nNxœ{F ~Zm=Q97ޙ>Kv޵ T~נ>wpE 8P Ԯ_ .1+RZQ޳A^]dMx| W`p9_:' >:MɂO^L$ȮiוYEp ǰ `OFo*>NH_1k6-L` >gBz%L.ϴm}[ӀYO~zbOoϳ~tM/ΰ_'}ַ-=,n/o?Dڟu!?jmPOt;4=hP^>U$N g 7Mp-ψFdL6r式i=0K=䳯-mCDЃ H-1dM& u!<K->G%ԛ0P/3u4VH50e5W )c45XaSǙSe;su2cm"@" $j-=Ԡ Co[mU\n7JA)%SaFT \D)Ja4ZY%m 7ۄVۂ^\=<ԃ7TycX"f 73eX v#V!YfquS<5^&:{CΗOGmyV yqVwݸTd׌۸h dUEo]j VxfꛯJwEjn_D;q:zqL17g:+TguflJ E!N]'mޕyw_]JQ>_`MK}7|;}Wյgx|wJ?=un>t-|C C|p_z/`׫KQ{oCgD 1):rІ^HQ;l1=7DbCЮc$%!J\$v1X9##9ːLi'$F,n4t8G>-1M$oX r206%,ڢa.(ڋ#o"I:f,cGYurSN& F-vPhD%O(J0%E/&*hqưBk4!Icĕ3_d*iBf7j38%~RU["2WHd<YV͹!ʄGlԜӬfLiPrdDPJC#&'f):6@01̟!%")TRfMoMDqЋr&|Z69OY!`CJA~,M)eT iC)T2Ԭa-2d1 h<wk4JȼuΪ'VgjDtզ@ 9ԜհC]lZMuv&-d$CB7K3'^5ˌ#aV"t|f8)Nd-Q%;t"dFQVdxe#K-(#~ykuw\BZ+FĀĕu;{^NEt.x ƫı1 :00vz#eqr1vM}5` 'p#^  Zp4`.9%^K GGTqaz?LxGU5fˍic&DdC2C03(rOPz_ '"Xq#ёҝ岴|kVzwɓe>dBVw'Rjh°Ley3F?B31ouskYAf"&疻ѯ~qexΗ4-= p2گC7~msi;d64GTnך޵1W.cԃY8Ճ/uڲ|vG\g<amugnu{?|>phx42i_w0Y npvnf+Ro8sf2> Sw\ogB.bLQya-kG&9ozDtF|dʦzK^ww]-5;ȿ]=VoyŴ[4tf8S; G1X BaCPB>L;ˆ 2X h0h^Fm/d :C 5~ЃW^"_3tBSA:  Xk Đ=PA@@Fи_}_{Ȁ: l@*0@P~ӯB3#  x|S5-+c2 r?⋄@xGHT4x #@ > 2mT`0hgHZ@$4p qmk3ޱ$;8#0B%LB&BAb7BB+L#c58/tZ<Î+CzrK6cC;+;EȂ/B0\o{L얗 {35\.kD%7<LA$Lt uA'YCR,EdFtD8>O|`ZE:2E; \]Tb,F/BgDƌE)nopq$r4sDtTu8ƠKF6+k\ :zGMrG\tlt1Ȃl =-EdAyC<=CL=QlHȉ@XG:F{ɑL!GDS<>IɈȕFZSxkəJ>2IZBITI8LEЃMpJɨ̃-D;)CBBCȔ JIHHJChhd˵l$$cTK5~KCH C ʱG+g@dwB˦q˶dKJDi} @D D˙̛Z@dMCɤ^7<}DBt/t{M,M$;5T$#5Q VVYWu=YERaTCڤtǦ0 ,FռZduDϫZ]׶XOV-մZZc[MS5ܤ"[ZԀ\-;*M"\?PYLZx\0T<)Pe 8Sɖq4QU&ɴTKTTt5=ؽ۴z]]БeZGlYӕe]]^UAʸKL7I 3ZA &ܝu\M=QRgݗm߁|6U]u\e^-Xy=4pI)[X_ %LUQl`_uDteؠMQ l MM] Mx`৭Z dY6FaV!6`-bZTṤ`n .#fdb^n`4BL7B=SEZ7v LAn4C#9㳵U5Ym*U67d K]eTWv[]ҽc%vTTUe]k _b\[&f\^\%cN`Vfjnopf~jNkV\f&L`;:V qyo&ftl^<hqg-g}F&OV  舖hB.ha^|ddy f}V$&eh^ _օhV]dh逬&jnNNhSϴanjf]鮮jH^j BhWV~憮`yK=kꝮkij.>f#~nEnWjkkǾkj.jkl¾e>;tbbifm׆lʎml k<1k ~jt㩦kjjvDVfvߍ.mm붐Mmx]׆nmޡ.SG.6joFomޓl\hwv땜Z!pnGWgwpVo9?q=hf~]pfM pp,Ko !'roX6qѽnQox/)*'"kl0g1g4Ws,~ƿo˖s)o,G$%'m|'/osȎ4gn!vjJ?n>rb%t:dtkGyy)`&{<_A3HZ7uwuY_]r_}zx?uq}GWp?oW򰷦 _`Uc*'|?+Wut^Ov@nQOlo~{Iӯo>R 8`wqy :hHWx!j!zi&׽Ǘz͝8׃-T(Ї5x#9c%A 90FFW$M:=G"حZYW~]Dz! Py&iXq9la7k'} (oVibgqEvJ:)mؘtƉC5iQ2(yijcPP**:+z+Z*ź+ kIE^ j]vt ~z\hm+*/J4 .;/.1蛈rJ}~ܘT .au$-FY-Z] E*cc:enۮ|2v'n0%s4l*FGQiya|dΐ*'<5s50K.ƴ`l+.m ]qAusѕMӘF2^5& /µ/O*Zv`ɭ,Ϥ<WQs{L.ȋ>+K.]7.gB.i z9AvT73z]]zzwд2h={=.ߢn1KlήlhA CѧX8&?v8 $ (A:eq,З>Ǭof cZ-)xg;P,3- f15,Hq20b>T<˪Nǜ)5fas8#VȀ3b#:s4"o[ĢN~!3 ) ,PR"ZƄL H<4ru!xرcck@UޱAԣF^)d" I)沗kL#KaRԢcpJٜ'$\W1x`SoFwIE,b ?β<&19Z2=y|r;!&㇧h%Mm:f|Sr\g;EJsFHN%-yItN`_ji9MoԴBA*v>|^ +jQ=3`g;CQGdA$O&]:ӱK(XVꫭx+\ U/o+/X׽~]`IYz$|$.{9Ef?R +t1igڪ!=-jSZD*RQ X\ʶX/DzqBu35im{|-̈BԽs*TN꭬:6,2ґ%;%(CĜ3{Y,ʸءO5;S,>pSIf**}BUTpˢUH(BLxwQy$a Oix}i|5"IZֺ%= ~8^XtĢt] ݦr^2ì]x5Nߍ[?I)7 Mns zNDA9R:_8,T1ю~4#-T(4L`_@}3ͧjfS 9KDX ֱ˞g92N*V_f̯eӋI6-mg/Fxjq9WCyԐЃ'w}^W~7+E_ks|n"ަǐrjr1(k xS{ퟅq B.kZݴfq[9oLKKd%/~>y|8^|=hǼN[p%a\!\6ĵmtB-Ӯvϻ_f,6Ts|S~N1{ gy73^[ӆrR0؝x7j-/F}z<=ϼc:Nb^Vsvorw~g?>3>/Sֿ>c>/ү?/ӿ??@ z]6> 6UV^ vv_v~N  z Ơ ֠   !!XmƄ-!6a{9!FN!V^!fn!v~!!!ex!lbEơ!֡!!!~]U "!!f"."#6#>"$F$N"%V%^"&f&n"'v'~"(("&&)^)"++",Ƣ,"-֢-ʢ)jbp`{/"00#11#2&#;PK877PKPFJOEBPS/img/mymeasrs.gifDgGIF89aG1BBccccc!c!!!)c)c)ss1!1111111c111cc1c1c1k9999k9s9B{JJJJ{JRBRRZccc1cccc1ccccccccccck9JkJkkksRsssk{s{{{{ޜcc1c1cΜΜε޽޽޽ƽΜΜ1Μƽ1cΜνs޵kkks19Bss{{99{{΄ք֌֥֜ޥc֌ޥ!,GetH"\ȰÇ#JHŋ3jȱǏ CIɓ(+*(J2^I͛8sɳϟ@1@7H*]4NMJJիXjʵׯ`ÊKٳhӪ]˶۬OU6ۻx˷߿ L]sɸǍ;AL˘3k̹ϠCMӨS^ͺװ=K uqKcͻ NeN\DAKNسk7 =bwv#}ӫ_Ͼ{)XϿ(UV}5\(fXZUWeȡȔ RT 6gA88b񘕏UnX$a@&L6)؋RAU5XWIՒQ]RF9^rliaT}3^Yc~'!ef~蟐FjYFHRvVxa`gcJ" G⇦֊誵.jD **%'xVvZxz6^hjl;najRkk;.D;:zցej`"ulZϻs-v̮Ǫ. lnNԴS Waɪl/Pp2;ꮹ^g}"73lsF%2}JzM߁[*=䚍6˾4wx 7A7[ wĜ.䄇\%kWy3?Nɑ+I,g' zH/Fw5ey'^8g>;2a}P^/cq>u<ǯ7Y-jgk60 pjۯZ6Z,oJϳM"nPgں'@-8z1è |ePmeCpiDG%m+I<;di0EAQ{V2OWxD.ObHEy)FOuZ#c BI >)MLcJ&璘̤&7Nz<%;3JR:%)CV򕰌,gIUrƖAd`^ 0IbL2f:Ќ4IjZ̦6nz '0e KL:v2BІ:DPMͨF7юzmGGJҒ(Mi6CZ%0LgjPچ8ͩNwӞ6ӦPJԢu@QԦ:L*TJժZƔ*VծzuZez FU,Y`p\ieԼ+2*V s `Ѻjmy uf%+dK*֬%f7Y6lb´%-D+v;?WǞldo[ޚ,d] Xȥ&mZ߮5nu\6ͮv\c6׵ku;ݽZ-v^v߭lnAַexm6{us_W[M[E'XS?-{0GLWS&NWLL0.cL_<ȱw@L"HN&;PL*[Xβe,`s{,2YfpsW,:t,<πMBtІN1E; }&MJ[Ҙδ7N{ӠGMRԨNKLհgMZָεw^MbNvm ie;ЎMhZ׮nun{%0;-%}={C MzՔw'aB "wkCzn6WkxoJ8j9辩0lx-Ϧ/Ւ y~!a;}2wkqgH;shё:eobP}QqgCXzĮ]`zNx2D ìj'3`AwǘT߿NkW<`xYCjdxϞi})t{S-y.W~n{a}MO G?.8y Y jm!vx~Gh~{{~XoqGsƷq|Gc7BvW gv֗x@xk~(Ȃ-؀02n8usgcP^}pF7xz嗂.yMXkP8Tm5XwUm8Kօ^`b8dXfxh8iԃ~'Lixdv{xH{{ ȀUVX gq6~Z؈ok|\snXlEkHHxq\ȉXHp&wxux~xowurWVFX H8x/ʸ،V8ĆLk$!Hhou7蘎h7ml`hYT@SϸXшSȈm t{hkK(r')yh)}GUhՆ-ȶGpGPKi(vJʬg+?J~Ȱ هȱZZz;fjEk'蜡(IGzwJ:Z*`ɨ7ZZM;8 )*ȵ3*`v:h†z@{pj 򚴔JL۫k82XVyk k>KAjr~8ʬ֪OxNL RKT[ W+;[l[?8kioE p+%{uA [ʈs:{j yzɔ05ʢ,u9*z+;\kkU) ֯QvhJy "<] lPlK˺ٝVk *6m+xr,@̃4C\mE\I:pZAUƿ[&&`,jkdfnvkLmo TnBxǦ$Vr'Wv*7v|^색 wj+PtGJ{ő L\ɇ|m(lǥ@x+7ȟJmɧ̳l6l"ˬˮ\ wz303üs [lkʌa̜VlfGwUJkL]^}-]z[[]ӒM:O^eըqmfy |{MՊ[9؋=]`]֋ծ ; `-hrjٓͥմm۩_5]ع}ĭ܎-]}U-7kаݜ MUױI?N^PNmRS^V~實[]]>o!-k(r~Nkͻh^ j晍m`| ʖK{9[L+ 䉮Ah*TZ苚痎鲥枹O蕤Nޯel\йAk ke0>vt[ʴ~޶^NpP^V.ێzNJQp>^~ vF~^ .ymN_/qo m_Uky3k מ(o}k>>yLkPv$T(-k .FVNXQZL\o¸df3a0?*Gqks޵P .ߴmaf ȰɃlMc=ԉqF+_yo\ &r,Ok_֮[}ݨ?̍f?QKG -ֆ u]*/f԰,ˍQJ@,xPB2tQD-^hC6mؘi&K*T@Qʕ)U4%Kjޤ @g͕һ,"I*drt3E[4 A)5C-Cܬ \sE;<Ū^\)r.HK*N * 1"b@H1'r,'K1ԅQU<04Fc4ʌLж.7R3W>E6YtPD?AqCWv0 # #2TsIL&3]Tu͖K/]UOk1fs_&x= ٩vBmއRmZa5>K˅wtI(}xTUMV1_wgfFadajT-u:'#@rMVLFuqᄆհ՚w~in`":5N饩jފGa+p%ghS_YY[(>=tG'tOG=uWgu_=vg>zj rdƣ{{?|'|G?qJ'TkNȠ wgv[b5D`(,:~19PbDP,A>/AЄk 3b@`@ ;j)m~NvTC 4o !ΊшG$H -J4щX !p8A%vы$^(DeE6q3JlcJ(NWdN7,DBR nDDhqn$;U$òDVҒ#8GJ@Rg n*DE 9XVpC2gF)Qrkɳe0/nrG)Rqr#WV0ۈ mR2m1$SX$ XN!׌@ 7!>̹% w-zh"MN`M}V3I$#!E) U6 ZFpT)C?.Q N}ŨSG~ʇN$yvY%.=7U:t_jV ]K!svbA3]e=kZַu[wK׿F\,/8̊pgf6' F`7(mP+Om6*z6а i0[9<;8;mf\r缥8zB3Q=g&ہ6>z[a7i-G#᷿3rc0U^K] zүSsfoꋋ3W}xCX[az sxO aoudvN|[Ld:ml[C;^ w_M|ȱk\E y.mg&B  vq}b{o[;?{]OnAc@Է:#UXtĜ}+o_ԩ՞c'bҕnlTу%3V>?<'t;d=((#2Y>"K۠??>r?İ$M"HM+P.  c< B@ ˃= ;<Dx09qAʻmjR8)K C!/; q?$L;>ٿx?  ?{s0!+T[x T1TĊ‡3©&nCG);;< (lsO\T2@T@ZѵUdVtWXl*ttB|oU@(Suug͖ŔƼw=פlײT}J~Ē)]΁uuMՄmWK#WFXr1ӎNmdl= s#=v]9҆֝Lt=imZ ď5{SE5L˓5ډX{@:]KZvWW0;+p%-p2~LG|a}떿7~_ V]F6@g=g}=7c ^X~ZhwRggr?i1TFbҋ 'WH?ҨЏ5ydU"iҍR&!-|rYaW(%i雒kvxԔY$ IҟnZcԙ*("Ap~ӜH'b%z%b~Eq***:+z++>ꩤrY'{V" j4 Ѯ0ħ#&[-k>Yizilz(Mo={/ FIl$ 1ɶB)al&FKmp;e&Z1OoR: Hja -mAqR]Lo Dy%` eVAC[)̨PYrT![ɺnB J`o7G#BVsLt-2ݘEtO/5"_}-6Sd/tcXܹk77+}t>u/Nn'Z'\U=nU^ButEZ@x`=ivN ⫞.R]ɷ_T{W,|5<뗇?‡.-~ u*r:a^q D43Жm~Z7OqX~Y؂G9q;`AY0-%9 DȢNsNDv kHh5QQ>,b( Pn, PX7@Pl,PA(1o1tFbDHG?ܲX.-HIjkz uCJ72))3n[NX>IqA)iH.!2M470lYV$l `'͖A2O ^[@%il5J \l; iNMy5@r ndNdP.=6N=h%I :ϦT 5`΄5Ҍ@vE=T('}!uOo}$ #ϷtI P?b+{122-*E;`M:)xո@5NG}9}%ֱf=+ZӪU=u.♔ԲHUZө Օ,ԥ{+*%.I)>Fjꦀ}@RvIgN@i+:ZW~ԟzP*WVjkL;#[\X6^]RɹU.lR[]vIM8p umhqzW*lx*Unر`3wJ.bEa Xn4U%f{}3 @+ydswlDo~O#evuKW5Fw 2Ҳ췿Ȫ6a/{6p.HhVmvWl;.SA<42nS,L;閇'cS=-_ 2ql̑ܡa++CSKRN~ik6>}uȇ!V93_dŇN;_ăi5p&m}=aAkŰ bXƑQT _Gc+{eb(D]_zEa,c_tdcL^\Z Hcy&[:O^s;cZ0ieT#V(gqn5jچW^RX>'~.nKE}Ln:j.oXK#; A ZQxr%&d^ Snڐ7s)4#LrZ%pBc.+^W"y~>&u|ܮs;~6mNg6hM>vu˼6g_1"/S~O<Þw[#4AA7kfvj~>򸋝ċ]Ydom2!BPoMœuzFyr≮#H{y| Nߑ߽'A0Rw ̾x۳ylFݠYyy!^_ BB UM\W-z 8[_1 J`JеQ |!_A Fퟭ,pMasNr``TEM Oe*aA V R] I"陟tUUa!V(TҡMnˁљsHZ18"\ _ ebvD p "Q* ʠ,r!a-nL!ޥa}kȟXX\\:^--_ ZS::'"V6v qfT!\"%v_N9j1 @HZG"B H5Aљv0U9/:T$KHTRE7j7>c?OZc@A\@ %=R!VU LLdvI8V ʭcF$ hAD%AJ&AH$wd%l%WWֽCJ`8e$&c @)d#AL%4⒪qՍ&iiZ5#O"!5Z21 @cf]voeAcg# Z[f fࢰ؉b%nOYHdJfwff@b+v&Ea*1ket$Y¦YVKwzAAA;b&Igz^{j{F$|n>h<惶f~B>ڍ0tx(<dM8^PfyVցfFk|:i}jnn2ʅ)]aBi`(x8'$B$JgA\vvwz'L)rt MJ+kAie$_YZݨA@ j4(*i*fᛪi=6m >j"UaĴMS=j*VbΒN셢)eiMMRd}f8 H 4 iz")I .Eiݠ"r%NnUbuL˰cjia* V*!:k,Z,zfMdT+M/V$ڨUXO)뒙%Un+&)F+6"lmcN«H)krc ~NJ !6jq!^,m?#qmaqbɪQ[+Ng|ҨieQ&Mf)Q9}SslIFRbIUlb^)P A\f'5*)*eʒʂ^s&,!-Ytl)@35-6Y!1m3ޙV*Ɩ⾀2&%HU5Z.elij..N)b o0-m^e*.Tv˥;,?&N&nu.U|.Z"CmC83=q?hPzSf :nHa:#ΧE&-AA]&^Yڌ&~o&(H4K!Q(+>0D0Kxo , )Ƥvٙ- ok^+dSƕi, Jo-pl`6Oq^{n_gVŚ ҹ.bqRo ױPIXq25_AV(b"r"1pџIre bf20'"3 gj/2id~`0+>bpKj,rz11 ,fB! (!(κS+cqM3j~4A!A'Bұf93erI0?5 #c&/'Ֆ(Jm73K@?AAO3πeJt >A PuۢmT4OO4q/ 9B(s8˭b 3ѡzGUH-Ct3Al`Jh4]@ 4qQjXVH&T]@q׈3g+"wv(G0w/Ÿ0@\ku .ܘ57G7\G7"t+ttg1mSpC$oIii7rN*11'릯N8wT8Gx"slv6!G#֣IPZ0:(89yy%%"&'lx;Ӝ Y5s99#~_ì_GyY-993`ruPB"yri.!tGٱDԹ?:߹/9j7;cg8Z{j^Pv/:Kʆ^zdF 8o9R3v6:Wv(@HOްx9׹-s 7yk A¶{ё;'/{6O;G;C.pb': ;;|{\< <ݖ9?{M{$:jIkD#+ɛC~7KpO=>O:_~xIl@8€[y{<ܟX?{*n5y;ɣVp#ro??:p Y랪p8@T)&D8B!F8bE1fԸc(AȡT6l̤L%*S"44s2:urF8uA(M"C6"S>ZCUWfպkWWvhٙG-U4ZtĹ J o_tR.e#*L@MTQv\!8 N ENJSlS1/ D]ys \Q s9Nɯ&b6=l͹<̴Z(6EzHDq`@^=L>x ~qJ7g.+j (A(Q T'}GqKYlF9igCH~^u5j oDC@v W C,D;V()хWtQuKc8FhO\^1%>㨫|ɣT89EQih92(yE#'?.a-S>*yrF*bol9v6{K ;TN%nKy8A3W"iSJSGkiTS1t̕%3| 9[5MTA8$N3\ !CQO:DwUT9aI(ˤ5hcBZ?*4&)ňy?5 %z{={LCo*t_K sGjʣ~|W7>-$}uĜVl!y/}#Z%E%R:g3"e]B7r)C7IOy|0∰tYC q'zk]A.철,IphoTZ'ab(=qmzk[ h+݊Dr|r}!rH$-gq[ 8qs.o4HwvO[5¥SR׬e&J㘍FMO*4E&g ѹv60Cf4!i(Av[?]4X9YcU!nKGqk]׽(e%W8]H7Y! *l=SZO!. +kj+c k#6`eZ".vwiTu֛GSнq&xo>׼ Sm0\{)K4v}_%>L=}tȣ`/ s(Oȗ2TN?f͗M*x{к9ti<'_camrmO}#FFrk1a)w U\"UvZ?7T:r):f8ٌ kt݋˧_/ 1Ywn}vd=|uyp˳ *ߐ)0q9\O'$/[G.HC 2Q/ s|2%5 ! ܎P oҒz/6?rNbq)rQǗ2)) *Uov_h}X 3Obk6' c2psJ*kQ |m`B0ӛRlRߴe !sk0j)72+3;SSO1O15sӲF888ev!(1я;63-.Pa*q83,3TYJ5 6ss*SA><خ.6mqN E,SLtS*%SP ]> )-Q/pĻ>(zrV4ӜS*K p(G4RoQD7rGoBBBݱGr:[" #ԎOg쯒D{)HutH)T nl1 QSfsA#tn 2LoL%47Y>T:S.YJ/S &z #RHɤS@'TtOCL"y1|)/"RtR㔗,UH(7<$@9g:8I5T2K Rm cM o?DtVmLR2HB_b4 %1)2Qst)UUONGcSpNu%t1}[M3+$ #:5SUVWGYyjm]&6b"vU,X-?#`+82+[R>>/~RF5.5KC5q Rk,PU#TveeefE)D6QQ6!:09j6khTc5CvC u5KMt0h!2#zfvo6nfn7n&/gXA6mDѓookkƓ<߶J AQtxGyGx\sy!z!Wz3kTMT;c)sm(5d,^۔ytE-CWX˄C"Jm}q4y{i7|w"W]{%#1MSq6G-A΁##OxVCǖ.q&jiQu A1\Uv9LG|뷄'"wT2ggiVU7k7a׃"0/tMT6k}OUlW7Vl+Ʀϙ|M0_sKXO_V!"r'ϕij8W"wfw$RaxU ''bOѐoEw>dca9eٓ%_z!8bpvxgGgu 狓YËGQibicQ K9qE}qYlPyYY2LyWyT"lLpaqsNkb(Yha+c/xz`Ϲp͘G76govyvS֙1r+ן3G?VY99xpSWzG8]!I:<1T`(N틨ix { CTح6 ZQd "w84wyҪق4Ozә `:ق:MM'qڛz5o yݺY:zz}WKu[mx^ݴmioUʝN۲Y{x報1WORx;:/\ۘpи;!k[[1pp\e(6?g9{=0w{Su˘${ Òu]ſc̔ _[ek{\o.s()Y"\S;yP*y9EQm{#Ei{2=~a97APmC9['̏=U6X raU6)~f n`)M^ŹIɼXއ5=ꧾ^y|"\g, tJ11) A걾>O[2|a!< _A=IkFV^u:?mq6g[ Wp} 1)ε3=~<ƣ|!߯Wu[_D]~byĉsT)C .!S'7nd(qbE ;6ԡ0ȑ$KDU 4!DPqb# ps,g9tS"+?wzNЬb((J%益Hr>i(()@PP\b mC шJ/(D#vBQ'蹿]О՜OJbC@m&4DoӜ.rjԉGR"gJ dDVM*RĥٜLZStlO{JB,"C}bQ wT%_KeOI>u}![.zK֕9YAOXbg? І=-ֵw%\^{Wçm+CʼvHEU>ͰV*"DVq +up"grKfwEZVQת~fԿBq>A$ Wj$q[W" QJY E7ծ_K]78qeN ! y QC3^jN˿6Nedзm|XbUP{l T`eU؂k` Cx uA敉x4ft?H0ٓ!EW|ϧʚ2LЇG<~_{%DzM,Lo2ȹ:lC!ю_5W9Sz/5T:ݝV5j*ZsI߮*倵V<ּZY.2/Ά6=RX{4붻7jyɹg]ƍ Z]F(Ր!U)<'tVbӭ+,5J'ә~SpqSnޑˡsEjׯ 1D{A}|>F oīA uzQޓwYݓ v4S A Br}7Wl8ikʦmo q*sJujwy{Y3 q^0aJ19Zulꨏ *Jjʩ꩟*~3 *ʪꪯ *Jjʫ꫿ **cJAɪʬ *'6`׊٪ʭ *Jj犮骮ʮ vXj0Z*oKk'ix ˰ G kG+K+˱ !+#K%k')+˲-/ 1+3K5k7kӨ-ȳ=A+CKEkGIK˴MO Q+SKUkWY[˵]+Ok^kgik˶mo q+se bKy{˷yk} +Kk˸븏 +Kk˹ e빥k˺뺯 +KK},+}8˻뻿 +Kkǻ +Kk%P5˽ +Kk鋾뫾˾ +Kk˿ ,Ll ;PK`IgDgPKPFJOEBPS/img/mycubes.gifGpGIF89a9BBJccck{{{{kRB)!)1!!BJR!9999cc!c!!!!!!!!!!!)R)c)ss)1)))))s1!11111c11111cc1k11)999B{B1JJJJJJJcRZZsccccc!c1c11cccc1ccccccccccck!!k9Jkkck{s{{{{{{{{{)))11)ޜ9BBBRJZZcc1c1cΜƔΜ))ޥ祥ﵭ!!RR޵ccss{s{{ƔƜƵƽ!!))!11c1cc{Μ1ΜcΜέƽ1cΜ1!֭֭ZZsތZB甔絵1cc1ccss{sccΜ!,H"\ȰÇ#JHŋ3jȱǏ CII ;Iqɗ0cʜI͛8siҥJՂ JPF*]ʴӧPJJիXjʵׯ`ÊKv*R+f=[۷pʝKݻx~ek5i %`T`Q'z헔F7~A! UV#FUbSFX̀މB4!Q7>c@U2&`PE*UGyCTգSg94QcoU)[ HJ>K UvE txU\ra^YY $0. &E袚"l6z)Q.&1VzinꪕHޞ%taB%+rꨫzjjFNP)R;F "-ՖkwA8~cnk:/l.+,mʬ2Z,* [1?m:%gʜ -/|n2/٩+q;{l,;-LKrg!,/AQM4;1qܢjt:0 ۬*C1A-JY5+NuSzK_/7]{j XVs]b\nGڋme^#}wJ]΢-Sɷ~<ӹ-J^?׽GS͙j6 fw#;gvb|>֫7N} i },Xd۲@wARbH_idcbi"j62턳楺 І/| 7e8tT^G5C5.̓".["$ьb4qFw1Q0LoC:x̣G:12b^'>L"FZe5JZ̤&7Nz (GIRL*WV򕰌,gIZ\wV^ 0IbL2G-Ќ4IjZD&nz 8Irc1:v&:z̧>9O^ @J^s MBІD'JъFͨF7ю HGJR(MJWjΓ@@LSRi&uҞti(yzIҨD(yTPj0 JT9*&TԬ4^iNsՙUhMZYIդnW5%S:t\׵%W0kQjWru5l_ZvmUJ"}lh7KY^Eif;I5,]*[ٚ6ͭFW֒Y سquVsK݁Bw reMq5VMuK=zOz+ڗ~{Nj@N;'L [ΰ7{ GLؿNYm1gLcʸ8αuN1Ldu HNπMBЈNF;ѐ4J[Ҙδ7;v洨GMRԨN 1i&s>t!@k-Bոεw;׿NG%Ł ld_VSZZгyMj[[Ծ:=bu鲙^gum |Mzۛ6}dGv^ơN{d1 1'~|{ww;D7|p<{{Ƈq=Hgh27#{ _aG#\+O1 tC1sM@wNޠ;3$ɓr?XuI?wzw}|Nxlo$躀25s =Z`;=w.ԭ.чG Qgl|^tO!g􂯻ߕ|#?zo7m}3==[Q|^{7}N}|շǯOKWwL}vDgFwr Wtxw7gz~ ~gWhmקss "8$X&x(eIchrchtMw t||zgw/xw8vxj8FGNPz,j}hg hQ؅X`dXfiSl6Kt6xpxm`<5qxxxj}f yXFaSvhӷԂCIMhw \(iDoׁgIFd Р 0 ЋЈYVFg؃ƇU(hmh}bsƌ&Fgw~Ɗ"7ƌCpCPgxDŽH˷򷐁rh={w8>9z: IWB8z+ #wWi~i00xȏɍhȀw|"|R!Ywg~ǕʇU s{X9'`IuYywh |~IF\ xh4A8(igNgRKCEn$&ax \pg:ٸ)ت0t^v~xz|~>^~舞芾}\g`.@`hj~ސ&>6bn阎~< MkN^普%lI@n^M.>y~hZ~LNM.LݑL>Mιʴ:Vݼg ,oNɎi&~암앙XX~F<T ־%_ѥMv(L>2lk4\~!}-4M4-|.%gS|0njEiҠ)l֬O?ĸʗ-;tYdʕ-_ƼQefɍ/iN=96͛iwQEن C+WZv>Zѽ}l0̋/2Yx͟=I AWFG^$@J,49- :0뮽[/EWdEs#y4櫏X;G|6MGD$n !T2K-K/3L1$L3D3M5d6WQ)i -G&3tbϤ 5tO'A0D&RK/4SM7SO?5TQG%TS-SΘO6z-QSCȻ-cW_EjQDttHXeeYg JhZ:UVц}Xm9k&؃j8舫.3nv;Y߶_nі]Q;CTn T=u_wx񕿨|_[}6=HowtA @&-{ 쑿G=sMˇ6}vܞ4~C!'.HfB͔<0*8 T`ː@ EgI`*D1BP#&|C+N [ 8*1Gp D )xQ+bCH>rT' qEww1vRYe7gPp3d[aH'@!{yH͉O IrT$u(qZ'Y1PnK?ONXDa&ԑ41DMp,&!uP¼iӟE :R6˔x7%%Ỷ.ͣ|sST:UVժWjV͔9(Rd;V賃VJ嚿B+PYN&9Ӛ-C)\X1Yw_):$y8*ሳjrkb%Yα΂l6KMaRdPoVۧ>;ͤ&KFф#if6+3(eO9ܔ`,(1}cpˬn,5svNn]\u ^nwY}jre>Zl؛OÖ뤶Mitv^ꦗm/sݫ,>7CoPqבbsI⮷")|*+ia_b/ouatڍ[_8s)P`fco^,!s3TbEk #1Feޮqsx<`.\6e,jns7xtvV(MqWFrW'CF(OTm7"ޱsDɑަAkaʉ&^zkSD7:L$] ,b-Tꗬ,8o d^|h^u;Q^-lz0pz3\^؆V%>qWǸ 㦡+u=]7eI6DqvO\ídL]3տN}ngt\_7꠬{9tg7ft~uf]]]GݾFP;bknwG ,z)I6_/~{w|G/}kc(VE//[xxqyNC~_uȂ{f\ cxv=/PGlШ$6(p?|a>~g:Na=~^Zӯ~|}A>ЭhD&տo38Kr k32##(\S)dK@PJ9 䓶!H@A9;00A#1A2@S4ԕ@0#T&ċ=S@& ͛}HBp.&t14 (#,EB8$ܺKZB,92ä0C9#@ILl{KGllI4 ɰAT=?, T>L̰dƜ4 i"MJH_$@d͹|D`㤄9M;.TF Gی@LA?\M$NҪML;dNE >l([Nd:N#9dIL$O7\-f\tOmϳTOLCݜ߼2G,PuЬEDO>T"=w`C8IMtG|ͳPǣKOE`Qɔ{P%I@ĜɱP#L˝-}Q9ҘLRLK|FzGpT*; ]4"}ɯL' IђRSSJӾ>{s.%!YQ%-$?M06D7EL35T;JN!%$yUeHMBde._eOb=)5PhmNU&Veyq--i]!P}}v0]5י[d( "pSWbէUKм;FWn X{M/+)""VXBă7-݋1{v}xCY~W%k2{ 蓲|~WzYaCWTWBM@K Q'yXeؐ5ڣВ}?*L4 ۟J^%U ٩ڮ4ӣHiV [ 2~0ېUBBCZsJZ3(wX-Z[NYҬ@[2г` $z3QiWWIɕۂT{JU0R6[=M\2P$ڷ=Fؕ]~UѽQ .+ IY\K V# ؇u0p0t4}e_-X̻0\zCT^ZP% Zuݭ٢ެ(Ȁ؁'3U]Md^d;nc]"c2 6P0@ xirdid2( `0@$e]Z>PQVᕾTe t؂mކ-I FhMvbf,5viuT\c%j/6Vff.e=6 /Xjpj F먾>]حF>"h~FN : ]"܅.immbR%ɋhhJk6nlkfkAlЄy씅hZV'V.fdymOjm~m$`7\];Wv2hi7fnggW`vۮo7pg;-t]&w3w/x*}Oџ|n/̗}g}]Ur'77~ܿ zWr /}gȗ27_p~g} O?,},h „ 2lhP Ĉ D#Ȑ"G Y!ʔ*'M4e2͚槊vNU>W-j(ҤJ2m)T@"3FjpԩC*lJNF\1˱%}% [RI|sfM99UȒ'Sl2S^ͺgaylh}nc5 X{߿~ |ia3iĩǩ3o97[1IV{CKSڵlڹk6|&LķtLl1w\~x &DvY'v*YEXhjg^lv'R{-u7aA M5x#1 hmSwg yއz9d|yW"_"v."V\P8&eP Ix&$lLd#J"冥Zbb%p*(Zei щ#h%)~)nW)(qb6*^hvljcDm+^Uiw|ֈ*"jZ{-h&NZ-T-$nY]xo,*f{/"D~osw.%;z &O0İ˕V ep{| g|GfX̔ %43 \qwi~}4I+4M3}KmpΈ|5Y{ hecu˵řm|mY}eM/7Nmoہ wzG_#OK>~e>e{/|h.O~ߕKz9M%nU:2ɘun$>y֑ιy`?NvG~A[Oxo߃<ϗ?<S&سo?w{ >@(.Oxt_6q+ X9Qkc]B@mk>|΃^yd|.=Y9 K!/$J5A2a2tS5CR1F<X>@L6Ezb˄\mcjQ0a$(Hl1wY|xd且HH])4 6=*h16=eIpj_ =)KE2@ܡ"?p$S-Y%ʡ9>xD]r|fY/OY3mNHkez-&:tΜd'3k4 1~S\l4(ҳkyP~&CCJBuZGP2!)r>S Ӝ 8^cNf,5*VTʈӢ9f.:5 !q*9*WlՌD%2)IVr(W5Z|$QأU2]%FsC\5;md3W2VmbC(RYZ7٩~Q2 -l5miT)5zkgju 2w_]l{p:cPo uPymsmV0/ ݕ%8W²PvxGD.e/-F*Z;Vebs l9&՚l0}>yX0s1xŢp&l")rBd.Vc>\ǖ Z؇1e|8<鑑U%WQy CrHR@o+5l -Øb!6䙆h_IyKw3Q%tЄ0m ,!n ]Oͣt%XJPzu$_\صus鐶YAUc0iG}+gi}bz)C J9lu#Sݵb :;6*n;CrVunl@{dnu ]Dv8~+Δ d>%֍kvqH39;Kn /kdrscIwx(^I\y lnBO {0?{Ke׉]eo"pݏOnw}>0nG3^uF]X/':Ǽ,5z P"ɊQ?H޸m}9\tҞ{Vj$">wWd/>?p\ҡ<֘|VB3skdn\^W][њBkOչϯi`TAZUUZ,o[dZM囮`mܶ5fgU`]z^-P> [wiWDԠi m=`Y-rQڜBH ڠiH[XaV!Μv _5~ ɠ RQ#!!HwU]SiXR %XOYؽT"^⦉n៌""ȡ"hbt=X.T-ڢP0͟/#' #%^W*0cݹbİ;l9`Y/nX*R#ᢞA#(;86z,-t9#;86)A5x3Ȃ6X@FF_GbW =>A%07F dęAdTB'́0*FLO 6$bRS_9*9P=ă+l-*Qy"$YZL#@>4B==B(ܥ0hBK嫁!5R B= afϤ%"[NY8:A<7B(&d1z&|YVɔi j ;6.,C(LB+pD0<*gji! grreB 90($l&$Ё!f`  b{ދzɴgT8>0C7-l(P^FB &hX&Y#AW+_M"Eܤ@787X$$T&??|UM*C$A?C?k18k dA+칋ʨ1C~1|k H~h6p*VZNn,v~,ȆȎ,ɖɞ,ʦʮl3Jb~@t,ڡj%X<)f,-&.-6>-Ӻ,y3>l  "XZ]BfZț-"jWb----Jsp Ek?C?B>A "$!T\ Jf.WLlZߎ.閮.,VmBd-C  C>\> CP.`uU†gn݊n>/FNoҮ.̶nX 2`BbW!nZjR/ZoZmA`?k~>.؂-,2"Ej.g"{vK0o .>C==A/  %!-/".l0/:'/1lyY50,==.̰ ֈs051/ _0q ; 3O3O3v?h23B,F;s>O4EW>F?K0CFv>/o UKD@X4LǴ:4O|dt4vNN#4\JUL'u:8`6d5tOAĴUStX4NsGoGOOʲP[`]3!uRRCS?uT#XPuA\^sX`Mou~utWPKq\XJ丵R3SCT ^[o6gwg6g7|_v`vX68t9Gb4=fNq'IL\[]7Ff/g[wg#7h{h_6Xj?FvZ޲v4Mb mK\"o< pe?? h+:q/gS?sCj,NwTW{ vh #rY+6ԙVn:IzTv];p |L[HR#q8~~;uTwtlxx_EWXG^osOh|Ky}8xcË˸G7̏{4suyyy9yk7xI3Yx!d o{˵7PH8NP:W:7T_37-׹98Ş:.qw7% A! # qA/%o7zpƣ'uOODO _zgcyùt㹬vk4VޟfS{{O$;MH?;kzo~S5<_;ޢw;:y;z;ϻCO8ȏ<_Hȗ8ȷ|w20 o>w>~_0~>;j<>h`E3Ծ>>D'Z>KsߣҪ~F/!\J?IK=??}/;?BKN}G>:K??@H8`A&TaC!F(q1ff:A~TdF9+#l/e637qԹ'gÀreQG&UiSGm>:5jɪS.Z1U6,Xdr #}ƕ xwn_}+U6H'MSiǏ!GpNXᅑYE%>X9AYIO8OVnaY-ƆPេqcu?sNgnaAc3Z뭹Dxg{ѾaᆛiΛdon /p&7<o|\)rK]/LaT!.Le.t3MiNS;PK.GGPKPFJOEBPS/img/report_folder.gif1GIF89aw!c10c1ec1ic0ce1cecck8JkMsqkcΜΜõýǽΚ1ǽ˽Ϝqc!,wH*\ȰÇ#JHŋ3jȱǏ C)pɓ(ST`˗0cʜI͛8sɳϟ@ JѣF[-)ҧPJJիXjjҩρ&SKٱLϪ]˶۷pʝKݻx˷߿ 7^K+%̸ǐ#KL˘΋X%$CMӨS^Z#hStݺ۸sͻai/S)ȓ+_μ=~l6Cν+Nևݜ˟O~]pE?\[E tׁ 2Xs1fQ( [_pb$^'ʕ[Z ߊcX8r^\#al=dD"^6UXI)K{GY8z1-eގXփ2"j˜q5yYri|Zz&fl"~ b|H杄'!BPZiOea.Z⢓NIbF詥j~ X9vF&:)[챆*2Zc:촐kJkLrk䥐\rXg`+K貈 ;>,ʖ﵊B;CmjF֎[DKֺ)bܫF˯gYr¢Sb{4W^l}g+dGc o3b7{[=tg+l*}6p]uIk:m+Ը\D,ooۂmv5ù3n]gxuvyQ7D7\i~gf8 6儳βh XRۭ)Jzձ5TjV*r_k^]+V (mo3&AJ` ַM.1:W}tREut x ,|Kͯ~LN\#L sΰ {0GLb^(N+O8,~g<Ч8q+c}L"HN&;PL(G.{`L2hN6p܀ xγ3g}MBЈƳld22j&}$Ҙδ|HH8‹s%JkԨNu9QOnt5D!J(=iK4 W7֣s"!$:_؞3TlcWefG]V`m.3ȶ5guf=n.٥^G K`^e'|Otto|wW߻p+e+@ 'Po.Be>ۜ%-mF'ߊmx\#nrw|9ԝ.W7:+<>w#]P N0Q\x'S+b<=c'~t#\8xӷ,w_oʳ|to|𥎶ӎp-픟;~`|#~yܻʸϽwdDro6Ō&;r{*_>{?gL-^?N?/j777gg^gHV ؀fwHǧlAgXzQpzg48$8hHtlx %[v~2x8H~'XH)~@gCGT6f7hmGXyI<ЃNXo6]hkքbƅViR(n(gMH @lH @bxXh{!X%'}G8ynf.'u+W}X}~ Psxr]zv}NWs}xqfd~G{F@ep7vXwXz8uxUy G爳8fz~zQ7p¸gpoXQ@7t"hxzhu8xzꨌzx'k>x|[ƆYw݈hwvX}8 x pXxr~֏?+x7kl  wIؓ#م37H5kFH8eOiMɎȋ?ƨhuD8'*9,)v뗔1eyHd\MxsَYInjrr){_%iؕhyّHu )X+)xi kn85y:8v)sG}!9xU {Od ׇfɐ}SوCXIvu9} y})ug~Slfnm#p0arIȗ)9iExy/ie'sI#W| 9 89iHZ8Z&jܩeH9ejC)x 8wʹf)''*-I$ -0ʠ9 I:>cjfxy:cuȔLh (]VQIj}wyڈAnZrzIi:h J W6g;fjeIZ:Z e)vg0\ o{rfi*yי4 gU s٪jʭ:1X\身Zڮ+jhM(ingJeje֯ZyЊ|`fkkvg%Qhf&m[mm ڰ8eǯ %([[˛-vq'j7Z9l ׳Nٗ:D[uɴP k*Jڸ\X^ `˳xv'xf階IX¥XTH%UD[\۸Kul*gJ pVUaSV^YWIsҸem鎴Zy{SȋYQ%T%Ve X븱;T k뒕xZS鷯LJ։ëYٻTtuk[弥EU+{Vſ,Hh^He\09Z3[ u V,պ6Z&ܝ'˼9lR%U"kEU?|ğ5×y[6\6l8lK\Y̋" [-I$=|,Nw :X n J|LCsEZ&uwܽ W+t,q7ǜZnk}ʼnlZɶʣ̀lhʇքE[ɬlI{ld \ˠʂƂ3 Y챐xQټ ܕ<!Mz\ϴJLNPR=T]V}XZ\^`bK|vf̤ۊpr=tM|ojK ~t8Mf|}؊en Lɋ]~Iy6Le=Zh8׬oZtپsٳKIdڽOHʬ}g|THLx<,ۼDuٹwÖE,k#ƍKȽ[GdˍؓX@[[ݦ|ݷ*ʲŬZ̢̾歺荽޶ߺڜDܰmI>K+.ɷ2}]t범딻ږ@=^>ynٟN䡞jCj6=>^~\=^ڝy oچu} _=oؖF^Wl׆~/_ &(m_:'s (k;鋭~J<w(HZIA⳷L'OP( 4.~i8JBkDO.l8fߗwXZʜ9 )K^M7 gWjYଣ]vrl&<_ڇ`YHhߍLhpn 4l_6jR cƏj?Jf0eiRߚkNOϦ J Dx0B:tp D%FbF )jRH%MDRF +]3 ,IbΛ9w*KEJH4@(H:xPdž-ZUXdƫZvjT,áAF C9^ k܉sV]Ѯܪo;n]pFXqʖiN1R BmTt_ϥe6$G` yejmr$w\pč\'e>`}\1h꣣v60Uyu}􅴅zݿ?l~͙/ [JPm;b@Ծh<̋0C 7M> ï2C{4 6^CУ,xÐГI- ~2H!$H#D2I%dI'2J)J2)#qG-,tC$DǘԻSO? iHV<M+ ̪VW܋0t5XEu-, wLe2j׷f=5RpA "]ue]w߅7^yMgٴڋVFX5s~O\ \7w] 'b/8c78{GͲծŽ__&~`bwg1x{ ־JPf{od(s=E/s&;Cgm-edoOr,?U?e0@ bsX}>Rs|:v֥^-=twꌟ)V}Co~ۿK! ߈πi}3އ? s<.Atu@|QTYRٜ'h8Äp03D' N )&`mxC bvU{ɰ2zW51xel-ٹOV h_"Smq5kdX@V,׽Ī֢uZQlY^N[׭ u*Qw[.k7ұpDØV$,s 9wuۡQXv%4׼Eoz՛v5 x]w,u+5׿kטBfE Vj/׵̦S'g.h<|MdWEnF~7op&؆}Ũ<-YZkLJmK_1_mӿBǞ`lHFz"H)%;;9}sEeĪyQiS`7`YfJYq7͋VTvQvM7_DW{g<'YD] yvIvYEx/WY>a]hvh6L+zNjՈq5jLh,"^m( }Q'iF5v eŶJm==E-xÄs#){ܿFɼ /?n"x5~Hxaͺw'-\znyO^<#eq_n:g8 b2t^g_]M?rJ踡1\Y׭:x^2*ҞY6:Oرw {f:<]13'I O1mOjm=zAH4FZ O۸[~zP^ڙVY5լKEy;&pEwC{'ۄ~k}q Kws\i8{}B-&NᄟFT>H~$F\}>> CD*[\ @?ؿ , rk1#3}Z; %!;>Am3@DAgOñ˚SӲz?!$J?<",#,[$7#?)*tK&bRðoFŢ?2$4Dϋ(.5/=rBۃBC칻[==| >l'(@Cs3Cּ0lMEF*N+UR? SϒS$S4]ϜFѼӐtSRRY^%= M4Uuҵ7AVU^%U_i_MG%`__iZފSS5 %Њt\g`2lXKCmܟEo|Xuܧ\`~amCݦW.̈m]:K$bh4b/]m^`Nۏ^=*>^ M` N1&nFF)c~97N3nc=>C6c?&5FFMY#WD=\L@aɜPI?CƎ2-tқIإSeU+~_%5 t6O"dtD#Xs\64]v^bq=Yk$eYd^ce_2g\ ]ieVMmY'K_[f)~g3LvՖlȤteVA`c4_N hBj>AVhzgt_-:&Ze~h4L‘&iO1"D锾viDi6i=i ~6!j4>^fjqj6?dӊ&.&6FVfv뷆븖jhhl\]Vfvdž.WA6.ɶʮ6FԖl5leVؖ٦mx~Z%mfmY6FL >lnԾmvdn$_&RofvoA1Uohyov x'7 64.ip|.oF. x p'p'8'7?q#Pq" _p6 GOm׏ TX_ppG"7#?7"p؁ٞrrվrLޏ W1'273Gs%5w(rԞr ό0w&t@OA'AgЁ8:7mH;xgX{kxz )zr|{ghgWqv'|ė 'Wxȗ|ʷV~fxvXq" !y~~~_P|k˿xOkgGWүt|=.!DPb!r|x#F(N ʔ*Wl%̘2gaM91ɣϠ5}$NYTQ,X$EZhAbǒ-k,ڴjײm-ܸrl?~0.l0Êi`b%>i2̚75Ρ+As.Ԫ]WJ5زgӮmn_p2'8e$_|8+T ACeڷs*ЦY>::fxϣzU \ۮo>qՆ 5X  * :t"vYx!eimUK'_UiE~)"+',= 9YdxA}8$yXdK"i"V'"UZye]yJh 0tey&i&uK9gtґv."UVE eVM%"0JgZz)ji "Hȁ4'RZ*K*)'z+sC>+ ;,{&,J;m&,jmx9kJe{Y,.֊./:oW^*p&*0K<1gzpJ 319L1!<2A+(2l21k(#29gyW23C||4c4M;]qD,'}5K?5]44Fc=Z{}6M]tdi=7kcy+̯}7 >8~8+8;8K>9?5,{9衋>:饛~?뭻:>;~;;; ?<|2+_>櫿>{?????(< 2F$ R+ 3 r C(&!(!18$a %2K()RV"-r^"(1f<#ӨF2Bc(9ұv#=|c;PK11PKPFJOEBPS/img/deltcust.gif>GIF89a99BBBJccck{{{{{kRB11!))!!!BJR!)!9999cc!c!!!!!!!!!!!))!)R)c)ss)1)))))s1!11111c111cc1c11)9999k9999BB!BB)BBBBJ!BJ1BJ9B{B{B1JJBJJJJJJR!JZ!JJcRBRRc!RZc)Zsccc1cccccccck9ccccck9JkJkkkk{)k{s{ZsBs{{{{){9{{{c1)9J19ޜccΜ)1ƔΜJ1ޥ1祥ﵭ1޵11B޽1޽ƽƵƽ19Μ1ΜƽΜν19JRccs޵kks19ss{9{΄ք֌֜ޥc֌ޥ!,,H*\ȰÇ#JHŋ3jȱǏ CI$ER\ɲe%.cʜI͛8sɳϟ@ JѣH*]T'LKP شիXjʵׯ`:t:u NȋSz7ևFgb'8zjZ(Ķp5s9M:Z_:_+ldj-v*j ,ۦ;,~۫붋.KjKIwl6 (  1 1*[(|ܱ/ɷ:,F0y(| :08~'>yЂMBjʁ>D'JъӡߴF7юz4%GGJҒ )JWҖT)LgJӚԢ2NwӞ3PPJèReԤOTJUtSiUFU]XJf^5P5*RUSl-[UծG=jX׾UgeZz]+aJU_'K&|R[Էj],bJְMjW6m5iOZ]nw6eS+[ŽVMnmyԷ|ZJZjmj׹ G[RƊ(yX_:|/|W뽯~_^淿W-0`*e, ['+{ G _(֩S?7ug|8V/أ6\ H3&;ٞF~(SX&t .{`L2hN6g* :xγ>πMBЈNF;vfΒEJ:CҘδ7:[tsGMRԨNWmNH:mj-5z `wkP#6vpuf+1O xWt}|{Cp \G==m(C 0_ā-Z|z7? E>]H:%zzcNS5؝<>&A^p=z FGҙ a RwP.TCuN7=8W׿~3qA/cngĝ5SGޥ.z{\>Bշ3^g2u[>唨C~zӋ~~;Y=Qq[絷}qkV ]O;J`_>oz'=W_wc]Ի~uk ptuvħ~~~GzyzmvqFp'f}6~Kt|gw8w-|u|'w)XUwf}WJ,Hvvv@Fk6u9H;ȃ(1FHt'xXjIMՄNxaPcRh'fjXjOІnpuH_Xaad@hTE~HjOhrhTtXvĐ  0DU`{T爐(h`}&v tt F X1׊'ciu X|x8:xhaʘ&(ָy(x|Ċ8`yfpvfԘ3Ȏv9Yy ِ9YySvxhwgN@|FQ'(H*YwHzw4Y6y8:<ٓ>@B9DYFyHyws?֑t~fy+IQǒY9ai|v6IjlٖnpɔЖY!9Y|zz3X{&*H~|~ }cS'uh 9Yyٙ9 s)elW/7kXvLL~| ـ蛺ɘb9(Iʹٜٜd9z'nGLL@dY| Y^ u Yyydٍv() Yg)xw 9] i㩕9yI":$Z&:֔by pP `釛 ⩘'ڛ` JNPRK,x.jhg6ZYf2wfyw,8}k~YES|ڧ~itYnHj)Ti Hjw:yKI6LXjLP /7w0jZʩ)_J:Ce*T WJY{:jt9: zЭ⚜ *pO֬phji*Jj{y:n}8ڙJʯښ9;۱i* ɰ谦Y [1;º,0[-kkxj$Ykr&kh( ?yJ庳 B[\5+- ]۫˱h8{ FH &mO;hQILW;9۳^{d벆 ;;rujnnFm{+h}o{=e;_+˳uoK[k[zG&Ci]kp 'pK K+븼{ 3仱Ⱥ&FɪY9V+;ۻ{ۻkf 劾"ƾƛvZ kط Y{/kk,;, i{)28 M|p|/(sQ[<̳" ^[ۿ޻[Fܶ+¡:Z7<4 ;wPp  >=y}Ooz> . ^hLm㇈iag/N>$8>E:LvPD(T|&v}U^YӁwm殘֩j=.hKn|hs~`x۾X`l> Iʹ[zrW` 难隞 KUdZV5W\9V5_vXXǛp[aK` 0^n> ^VZ5]e\^O`~n޽g{yߟ7ؠ >N^ ]ĥWZ]wUe^F|JtИG s p "?$O> Dڞ~NET6`}}iG~Lv}y\:.%_U)K,]8ێY7O[hEwyixG}m: oX¥\]>cOҕW7/nOj_l@g{C/|x ݄Iݢ/ ~_dPkW V?ŕ/N\./4U7vx.X=|/OOKN#/ [@KYp &/_^Ӆ]ڥU/]K N_im\|@:(Q :\PbĉBTPŊ ڝ;LDRJt;VL-9Hˬt5 6EETRM>cȑ%^ŚUV]UvʳѣzC:p?:QDе ?<$HG1 =Xt56YR}5`ZZUZ͊bA -XP e5pۅ+f!eRRi48|3JZl7[n$kM\'uثw#ةyE7?7NH/6`mE 8*qEIC9v݊gn*eofUvߍZIw෦Dl_vmGbq(Zg8y>9Z;v 1:#j+L{)Wp6bUJ}v"a!jP@02j#*N l ~#Pq!^N6$5P>e =z4U VL^T`HwUH/,ֶr}][ K:) [{i+_;3NV^F]RIL?;ZR*kXl R(}vhn-c{J4-kwzsj_..*,Ў7u,j['6zhsAI I-W=ɶh?r%a p]M#-ܜMat2-҆{0&0@ž "CA7QS(y)+G̘e2M] p3b_ )J&ҕdkӴ_se,1r.,9,K9vtҥ1t}gF?)чvϣŻhBKK_z֨\s)h9U?UvVb/1[ueM,Z=&x 5W,K*׻v6nXڰ{*2ZmKj;q{Y6VI&m-'fͽ';m'U[EeSMi#ud[n{bx 8\8^(~85fw4xs~BvD'1s7yus?;bΒeGS7G9n{2"x×@}!svH7}엎zhIخ֬h[mVA@\/VoOzٛ^S7:‘{l~Gsَ?O'aׄDŽs7?:y$=m$$4ADAmAlh@* \?9@ |飽x"4B$T%l@[#=+d%tBj B  7j#?B/!<$B,B&\@l*9BliR5$D9sCS#()rC,$D#9< @ AtB<7z{AY'6,ChvzhNBԳB9Cr;|[\DO]QDA4SDE<|Z+\k1Eu8Dq)!˰$EePkʸJsHK ˱XO2t'()}ҝtKkohϷ9QQ zP;!"E S%K=SoSo@A%B5TBӪSFHITI5PRTS3%4=8 !0;<<˸V}#:WUUPՃK]1lC,Ⳬ` Ps:8ӹUN]wkl Up/ɨYTT3}V5WYJiS]mnoosEye v6]Db]\QW{fe'|mW# W&5WX+eXDXׄ؃$N} Y^Ȅ"@ @0haٜٟٙٚٛٝٞڠڡ%ڢٌL=XRH#8Tcڬڭڮگ۰۱%۲5۳E۴U۵%ۗXhНyP5KӉ׸/x6؀XV 5EUe=\}N5L\(x0*e0EUeuׅؕ٥ڵܥ֌ܣPڴےպP( X8"Xݥ^[u\˵E ((-_ޕ]|۷ MXV `_l8`Tfa8@5#MV`Kx`&&\YXH$e#,^5҅@H8.jڄkVf "'V:>LA0"/0`&d2Yaa b"6c;{e⤒[6C=&?fjQd.dQe>25fv8dyBJe +?d072U36RjM;5^6nd8IeijLnM~q ^.^=egehc:wF]&_.>eJX0l=3m.dm9f^mi6vkL~n9 ͈nbD2 i!Fp`ڦ6SS->di>>pnm o6 ?Uopq/t{d^VT޼!s 'G_Ź ~7B,"? aCJar*(7sˮq&Y0s3Ns^lvIGoKNJ;6_7OkMAUiPgHg;CnXOqsUOpRu(a'aoY[Wvu'}bVל1 ޝ v%:hdd&g㙞}c?2D4'q9l\&H* A)꺫@șib~I*Z:iV%|Z{-\XYt6e*,E+mޚ-g?H$f4$[|1KR ё[R'Qp"ۛ -F\0SF0ʵ3l& =Jt;ݞ}5֐] gya+ _S{ Q1ԗR=qlns[ހ'+8+kJl+ˆ[~h[גݝָt[9~:3ٓ9C95˾m:;κ ;+E;] vetHo; |§m<݃|r{oiYثv~o~}R͋?ǧp,̛>Q{ V*Xs͆Ld"<F.{=[ch rN|薆ç`ZUXBĥ0Ct x‚p}" h8Z*RlڨL6* p^1^\"+qmryapC!aKH/6LlE~ޒE>v`!iICQ/kd$(ȸTGt˃\%)yQ'4a'>E/(I$Ќ4a, H12,D'})M3QetxJ,KD8Q>r< I)7|g9hRg)ّ$skρ&Nz=j-|Zqb{P*Q\6OB3+ny̡hNԠDFS(BQQ<3TL,Ũc9~#+rִmF2wl.jNR5joTjyMT,J ӃU=+pn:Pզc=iY*!m(Oդ%9XDh \+δP_8x2&1QV5U% cҏիRClIv*VzdB ʒ`~m\˥ךեTEsjOB.<6}VPfmJд-s+.9ȡָMh+ߖה-hJVKP}Rİ!3~0#, S03 s0C,b _kYe*ۉR]al61s>1,!FqL\Cfj+Kx2=2-s^2\UT1(1n~3,0'̏drNߦo#h~;AІ>4\YS[WDSҖ4ټ軶ԣi5gԦ>5S-M/ʨYӺֶ3Ojqz[>6sd1-iO[e4ix{6>[6{ Y~7di7-+zwfv#L vOxB#x>!S83.x O7o ~Sz1yQy6ysNIG{ΜlG\F?:9r(NJ֨˙,ھ"]R*fHkM#nx]%#yσ^|=M/!ٸ{A7ҳ\n(Z c/-.U$?~ ՝6h6`_YU͏Ϝ_ pߪ]m^`< ` 5P48N[ݎ= U -ۮ9E_=SNJ=aWT_̀ v0YQ b a Z6x`E`ءM^)!V1! !""&NJn $L`<F 6ߤA`a`a`(a!D!>6",ޘ,Ab\Ye&@cFcF8lcfff2tf0%[ҚTe,cindQҥ=&IeiBkT_V&K>>C=t:OLjLabvELr.'s6ssFgPg&!ifg;X-"fg>" D= ĝ7&ppByE"~Cg~'~%/u[lnVvg;[͞xKC<0':lh=96$2P7υu,j`Z(ƨ(h0ha'9U`R^(FXI)&>A5؍ W6tZ֨^h0/܂ꨩh2:uD!۬ݓ!,`') qi~)fzJޘbܡ\,*6>*FN*V^*fL ("MN(*(.\٪Ej]_Uƃj*ƄL +3(+ʅ+F+ryj *ø5鈝븒FP +\ثL+3+ҫ+Xp+ bkq~+&l @]L,V^,fNDdžƎ,ɖEXp>l*,l1 lĞ,~AM,M-1Ŧlͺ l4ʬN-lƒldm҆؊قئ-*ej-z-'֭~rCFWNAM.M.1.,۪C-Fl-V.mmd`?܄~.膮.閮nD.ƮnJBnWH.Z.n+Ɇf:cf/&>2M8o.@/*/V/aFd&>ܒ~/s6'L///=Do/ofsBgsv/'R O0˂D[0wp0oC{)L ǰ 0 װ 000 p0. ׊ C*<1GO1W_1go1wG'111DZ1ױ111 o!2"'"/r"C<2$G$O2%W%_2&g&o2'w'2((2))2*G2 ^+x2-ײ-,-2//03132's63?34G4O35W5_36g6o37w73883993::o>D3<3>3??3@@4AA4B'B/4C7C?4D3=tVD4FgFo4GwG4HH4I/EI2KK4LǴL4M״M4NNJ2הrOP5QQ5R'R/5SorPrx3UWU_5VgVo5WwW5XWTDY5ZZ5[[5\Oh@;PKqHl>>PKPFJOEBPS/img/menu.gif y\~g_Oyt`N ” M {v'xfaq>Ӏ1u"5Ey|g!Nm(͑h|9W gcސDy$}&"=Qwc?"D `)UWJhzh.iu62fEJ#s)g{kzPin}B>m9S]a(棐EuIhi'r 禖%9hꦨtGNhjNJga@b[ĖjNcF٢M4fL&Ю8*`i*(' ^YRJT0] ‹J +[ q津Z^z * /|̮"+$:l {벜h*C;<3ɪJϣvJtdM5Ggp͞]qтmb䧭N-1!\5e|LxӤ߄n/78˺Wnqd[5砇.褗nZs~ꬷNBn/o'7G/gw/?F觯қo_ ǿL(2'>R̠7; r (LJ;0 gHP8̡)@ H"Hܡv?tH*Z|I(+z`^0`d!uwSD1wo^wG:&#xG!vo<$"F2$7(HBvyTd&1Br]'IR. %(IPvR%FiZ$"[MޮThybs~ԥ+Oz΄1IM%|e/Kn&R 8wsL'aAꌧ2bUCx\,_LMp \6l-rw+oږnKAvgLr-rZVo7wLm1Lv%_Z,˻`mvL6`ⷶ.t;ڷe{a[6kqk VuY,Oqj+ch-gLdNSkͶx"1qd*븾{e] Y>^E!_9t-6 ~VYfG9,a r'.*c4{7iH[ډ׭]v/@f?QZ>U~yP$5wX+5M@a5=e3s6wuNH?"{H0'pIԧNpfop{`{E_+܀]_%N=o~`wn&}O;U_'Ќ_ϼ%oy b~;?ϋ;%hԻG_}[岇 oރ<DOOpÛ>/}bS>y2O򛿆Go³6kle+8Qyh`U t^u[Fcvv\@eۣ W@b2dp_<ȁ(bNdSVad`s)Xd-dHOFC6_^Uc_?(Lh1G`F:vM;ZxSxB^fy\CexlxumC9rxmdx؇nG8ć~8T~GHy?׈~}Vhji3x8h?HtX?hsiȖVf V`)I= 9ylj Ȝ)d霮I)xi೛=`YyY|㉕T ULTYDuٟ:C=1p &Р:Zzڡ ":$Z&J-,ڢ$02:4Z6z8:<ڣ>@B:DZFzHj>8_5< +P fz[˷wt D~ k@BgI^mn芞Մ>N^ШZX>>;MnA恽LL--IEF<ɹ P`N"=d>]촡>{g߰mk&Wevx`x='YgbzWGznE}ENwߩlXG_MρoH  K m8. Pm $~ ~s/ }+L' ?^eMA$T5oM-KNҀA>юE]J>$n &A(֩;=>r,tЩ-o@KK p7oN~NMFd/ّ)>^C?_lboُ__D&(·-rp/G$۴ڭ=rQï8)m ]Οz/D,{0L@Tԏ}uYgA8 @"B+8bF1BĘ"H%M4RJ-]SL5mtB SPE(AL6)TFJZ?rkԒ ,YQmD|VCmośW^}sgϡA4bI&fժЪT+7&:VdImr$]nv<-.iShWclsY>Mn޽}.O+6jRʑcz璅jgfke%lvS|D碏ڵ׷ǟ_ ?2kLTL+&.@NZ(4<1$C6IͤRK}C@57SO?UɇkK@`PNP7Wm>LG-`=K6X21TcE6d4!AH":DXIKeIܡ)qHP2,ZڲLe25I2jc9Mj`(Knқf#K]~RLWg< Nf8c~=:~ӠzQ:w3%>}sݦ0IP}IBW6ԡhD7^ԨE P&"Pԧ>'#;MCᜩPT{Ӝ6*LpqjVJRѫjX]2U-&jZE)Ve5:(ծ%y+\A%WwlV1c!^`[Ef&b%{>b~d5KZVrfEz6@[Iv7Z=LdUr($Q}-l̞>p޶խdžCZ&WxݩCXQtG[]iH8AWwhk]{ r7or(Tuo#W+nq(Yy >p0 ,ᩁV]ԅ3/c {rlY!QY^{6xW3V1˾|5O+oϩv/`XgeYK/֫/?WQ%tM k4:)G:.MU`]=hOGTe`[U-ӭ) +ķ> qWtZ bt^s:+jWvmnww=nrFw niwny,o~w>pGxep7W!>q?\x~qwE>r 'GyaMr+wye@7[qsL=zs"ѕ$Ogӡ>KWձk_g>g׸ѾoW>;PK H PKPFJOEBPS/title.htm" Oracle OLAP Customizing Analytic Workspace Manager, 11g Release 2 (11.2) PK,KPKPFJOEBPS/cover.htm Cover

Oracle Corporation

PK;PKPFJOEBPS/content.opf- Oracle® OLAP Customizing Analytic Workspace Manager, 11g Release 2 (11.2) en-US E17237-01 Oracle Corporation Oracle Corporation Oracle® OLAP Customizing Analytic Workspace Manager, 11g Release 2 (11.2) 2010-07-29T07:39:26Z Describes the Analytic Workspace Manager XML and Java plug-in interfaces and provides simple examples. PK)sPKPFJOEBPS/index.htm]p Index

Index

A  B  C  D  E  F  G  H  I  J  L  M  N  O  P  R  S  T  U  V  X 

Symbols

$
enclosing expression, 1.2.5.3
{}
enclosing bind variable, 1.1.4, 1.2.5.2
enclosing hypertext parameter, 1.2.5.2

A

Analytic Workspace Manager
configuring for plug-ins, 2.1.1
ways of customizing, Preface
aw parameter
of AWMPlugin methods, 2.2
AWMCalcs element
root of a calculation template, 1.2.5.1
awmcalcs.xml document
example of, 1.2.2, 1.2.3, 1.2.4
in downloadable examples, 3.1
location in database directory, 1.2.1
AWMNode element
of an AWMTree element, 1.1.6.2
AWMPlugin interface
examples of, 3.2.1, 3.2.2
implementations loaded on startup, 2.1.2
specification, 2.2
AWMPlugins element
root of a plug-in description, 2.5.2.1
awmplugin.xml document
description, 2.5
example of, 3.4
AWMTree element
root of a SQL report, 1.1.6.1
AWMTree prefix
for type parameter values, 2.2.1
awmtree.xml document
example of, 1.1.2, 1.1.3, 1.1.4
in downloadable examples, 3.1
location in directory, 1.1.1
location in navigation tree, 1.1.5
aw.xml document
example of, 3.3.3
location in navigation tree, 1.1.5

B

bind variables
enclosed by braces, 1.1.4, 1.2.5.2
for an AWMPlugin, 2.2.2.2
in calculation templates, 1.2.2, 1.2.5.2
in custom reports, 1.1.4
referencing using lower case, 2.2.2.2
replacing values in a WHERE clause, 1.1.1
replacing values in a WHERE clause, example of, 1.1.4
BIND_MAP Map
for an AWMPlugin, 2.2.2.2
keys and values, examples of, 2.2.3
braces
enclosing bind variable, 1.1.4, 1.2.5.2
enclosing hypertext parameters, 1.2.5.2

C

Calc element
of an AWMCalcs element, 1.2.5.2
CalcOptional element
of a Calc or a CalcOptionalDefinitions element, 1.2.5.3
supporting calculation options, 1.2.3
CalcOptionalDefinitions element
applying options to all calculations, 1.2.3
of a AWMCalcs element, 1.2.5.4
calculation templates
adding options, 1.2.3
description, 1.2
example of, 1.2.2
Category element
of an AWMCalcs element, 1.2.5.5
changed method, 2.3.2, 2.4
class attribute
of a Plugin element, 2.5.2.2
cleanup method, 2.3.1, 2.4
configuring Analytic Workspace Manager for plug-ins, 2.1.1
conn parameter
of AWMPlugin methods, 2.2
of ViewerPlugin methods, 2.3.1
Connection object, 2.1.2
CubeViewerPlugin class, 3.3.3
cube.xml document
example of, 3.3.2
location in navigation tree, 1.1.5
custom calculations, 1.2
custom SQL reports
adding to navigation tree, 1.1
example, 1.1.2, 1.1.3, 1.1.3, 1.1.4
customizingAWM_examples11202.zip file
containing example code, 3.1

D

default attribute
of a Param element, 1.2.5.7
DeleteDimPlugin class, 3.2.2
description attribute
of a Calc element, 1.2.5.2
of a Category element, 1.2.5.5
Description element
of an AWMPlugins element, 2.5.2.3
DimEditorPlugin class, 3.3.4
dimension.xml
example of, 3.3.1
location in navigation tree, 1.1.5
dollar sign
enclosing expression, 1.2.5.3

E

EditorPlugin interface
examples of, 3.3.4
specification, 2.3.2
enabling plug-ins, 2.1.1
examples
downloadable, 3.1
of awmcalcs.xml, 1.2.2, 1.2.3, 1.2.4
of AWMPlugin, 3.2.1, 3.2.2
of awmplugin.xml, 3.4
of awmtree.xml, 1.1.2, 1.1.3, 1.1.4
of aw.xml, 3.3.3
of cube.xml document, 3.3.2
of dimension.xml, 3.3.1
of EditorPlugin, 3.3.4
of schema.xml, 1.1.5
of ViewerPlugin, 3.3.1, 3.3.2, 3.3.3
expression attribute
of a Calc element, 1.2.5.2
of a CalcOptional element, 1.2.5.3
of an Item element, 1.2.5.6
expression syntax, 1.2.1

F

folders
creating in navigation tree, 1.1.3

G

getMenu method, 2.1.2.1, 2.2, 2.4
getPanel method, 2.3.1, 2.3.2, 2.4

H

handle method, 2.1.2.1, 2.2, 2.4
headings
for XML documents, 1.1.1, 1.2.1, 2.5.1
hypertext parameters
creating links by using, 1.2.2
enclosed by braces, 1.2.5.2
referencing two or more, 1.2.5.2

I

icon attribute
example of, 1.1.5
of an AWMNode element, 1.1.6.2
icons
in JAR file, 1.1.5
in JAR file, example of, 1.1.5
isSupported method, 2.1.2.1, 2.2, 2.4
isViewerForType method, 2.3.1, 2.3.2, 2.4
Item element
of a Param element, 1.2.5.6

J

JAR files
containing multiple XML documents and plug-ins, 2.4
directory structure of, 1.1.5
files for icons included in, 1.1.5
loaded on startup, 2.4
location for, 2.4
required by plug-ins, 2.4

L

leaf element
defined, 1.1.4
LevelViewerPlugin class, 3.3.1

M

MeasureViewerPlugin class, 3.3.2

N

name attribute
of a Calc element, 1.2.5.2
of a CalcOptional element, 1.2.5.3
of a Category element, 1.2.5.5
of a Param element, 1.2.5.7
of a Plugin element, 2.5.2.2
of an AWMNode element, 1.1.6.2
name parameter
of ViewerPlugin methods, 2.3.1

O

obj parameter
of AWMPlugin methods, 2.2, 2.2.1
OLAP expression syntax, 1.2.1
options
adding to calculation templates, 1.2.3
Oracle Technology Network (OTN), 3.1, 3.1

P

Param element
of a Calc or a Params element, 1.2.5.7
Params element
of an AWMCalcs element, 1.2.5.8
params parameter
keys and values for a ViewerPlugin and EditorPlugin, 2.3.3
keys and values for a ViewerPlugin, examples of, 2.3.4.1
keys and values for an AWMPlugin, 2.2.2
keys and values for an AWMPlugin, examples of, 2.2.3
keys and values for an EditorPlugin, examples of, 2.3.4.2
of AWMPlugin methods, 2.2
of ViewerPlugin methods, 2.3.1
parent parameter
of AWMPlugin methods, 2.2
of EditorPlugin methods, 2.3.2
plug-in descriptions
creating, 2.5.1
example of, 3.4
plug-in directory
specifying, 2.1.1
Plugin element
of an AWMPlugins element, 2.5.2.2
plugin11202 package, 1.1.5
plugin11202.jar file
containing example plug-ins, 3.1
plug-ins
descriptions of, 2.5.1
enabling, 2.1.1
examples of, 3.2.1, 3.2.2, 3.3.1, 3.3.2, 3.3.3, 3.3.4
including package when specifying, 1.1.5
prerequisites for creating, 2.4
providing descriptions of, 2.5

R

refreshing the navigation tree, 2.1.2.1
refreshTree method, 2.1.2.1, 2.2, 2.4
reports
See SQL reports
revert method, 2.3.2, 2.4
root element
of a calculation template, 1.2.5.1
of a plug-in description, 2.5.2.1
of a SQL report, 1.1.6.1
run-time selections
stored by type parameter of AWMNode, 1.1.4

S

save method, 2.3.2, 2.4
schema.xml document
example of, 1.1.5
location in navigation tree, 1.1.5
setValueChanged method, 2.3.2, 2.4
showHelp method, 2.3.2
ShowIfQueryTrue element
of an AWMNode element, 1.1.6.3
sql attribute
of a ShowIfQueryTrue element, 1.1.6.3
of an AWMNode element, 1.1.6.2
SQL reports
adding to navigation tree, 1.1
creating in object folders, 1.1.5, 1.1.5
creating XML documents for, 1.1.1
examples, 1.1.2, 1.1.3, 1.1.3, 1.1.4
XML document structure, 1.1.6
syntax for expressions, 1.2.1

T

text attribute
of a CalcOptional element, 1.2.5.3
of an Item element, 1.2.5.6
type attribute
of a CalcOptional element, 1.2.5.3
of a Param element, 1.2.5.7
of an AWMNode element, 1.1.6.2
type parameter
of an AWMNode, storing run-time selection, 1.1.4
of AWMPlugin methods, 2.2, 2.2.1

U

ui attribute
of a Calc element, 1.2.5.2

V

validate method, 2.3.2, 2.4
version attribute
of a Plugin element, 2.5.2.2
ViewerPlugin interface
examples of, 3.3.1, 3.3.2, 3.3.3
specification, 2.3.1
viewSql attribute
of an AWMNode element, 1.1.6.2
ViewXMLPlugin class, 3.2.1

X

XML documents
for calculations, 1.2.1, 1.2.1
for descriptions of plug-ins, 2.5, 3.4
for SQL reports, 1.1.1
headings, 1.1.1, 1.2.1, 2.5.1
loaded on startup, 2.1.2
XML formats
for calculations, 1.2.5
for descriptions of plug-ins, 2.5.2
for SQL reports, 1.1.6
PKvbp]pPKPFJMETA-INF/container.xml PKYuPK PFJoa,mimetypePKPFJjL G :OEBPS/toc.ncxPKPFJ OEBPS/olawxml.htmPKPFJ[׳ OEBPS/toc.htmPKPFJ) $ OEBPS/loe.htmPKPFJo"nR M WOEBPS/dcommon/doccd_epub.jsPKPFJl-OJOEBPS/dcommon/oracle.gifPKPFJK OEBPS/dcommon/cpyr.htmPKPFJCttk(OEBPS/dcommon/oracle-logo.jpgPKPFJr.hcOEBPS/dcommon/blafdoc.cssPKPFJ `[_OEBPS/pluginpreface.htmPKPFJۃ~ OEBPS/lot.htmPKPFJ0y OEBPS/lof.htmPKPFJz{zOEBPS/pluginintro.htmPKPFJ 1'eOEBPS/pluginexamples.htmPKPFJ>"""# OEBPS/img/gregorian.gifPKPFJ{ AABOEBPS/img/unitscube.gifPKPFJ{['iQdQpOEBPS/img/schema_aw.gifPKPFJlYgYOEBPS/img/awmtools.gifPKPFJ1.<</OEBPS/img/dimeditr.gifPKPFJhKKmOEBPS/img/family.gifPKPFJxv%q%kOEBPS/img/xmlprofit.gifPKPFJN.dHG&OEBPS/img/measview.gifPKPFJ m&OEBPS/img/awmpluginseq.gifPKPFJ_ڲ""f3OEBPS/img/awmplugin.gifPKPFJQȬ_AzA]VOEBPS/img/mydims.gifPKPFJq+G&GOEBPS/img/mydims_mylevels.gifPKPFJ+9OEBPS/img/editseq.gifPKPFJkRAI>m. OEBPS/img/deltcust.gifPKPFJ H m OEBPS/img/menu.gifPKPFJ,K OEBPS/title.htmPKPFJ;ʠ OEBPS/cover.htmPKPFJ)s OEBPS/content.opfPKPFJvbp]p OEBPS/index.htmPKPFJYu* META-INF/container.xmlPK11 +

Oracle® OLAP

Customizing Analytic Workspace Manager

11g Release 2 (11.2)

E17237-01

August 2010


Oracle OLAP Customizing Analytic Workspace Manager, 11g Release 2 (11.2)

E17237-01

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

Primary Author: David McDermid

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.