Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java552
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java1269
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecFailingTest.java8
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java178
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java37
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java475
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java10
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPParameter.java30
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateDefinition.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateInstance.java3
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateParameter.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateSpecialization.java11
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateTemplateParameter.java32
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java28
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java11
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstanceScope.java29
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java29
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplateSpecialization.java58
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java17
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java280
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredFunctionInstance.java247
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldInstance.java5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionInstance.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java82
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java58
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPInstance.java11
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java24
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameterInstance.java14
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java12
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java12
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java211
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java197
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java116
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java14
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java240
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java56
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java837
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java83
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java15
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java16
44 files changed, 4073 insertions, 1273 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java
index 704c035a557..2c6fb3f2dc8 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java
@@ -35,7 +35,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("#define arraycheck(a,b) a[b] || b[a]\n"); //$NON-NLS-1$
try {
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -82,7 +82,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// D()s implicit definition\n"); //$NON-NLS-1$
buffer.append("// violates the ODR\n"); //$NON-NLS-1$
try{
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -131,7 +131,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("typedef I I; // error, even though no reordering involved\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -164,7 +164,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("friend void A::f2(BT); // parameter type is B::BT\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -195,7 +195,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// equivalent to: ::X C::arr[C::number];\n"); //$NON-NLS-1$
buffer.append("// not to: C::X C::arr[C::number];\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -224,7 +224,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -263,7 +263,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("extern int h;\n"); //$NON-NLS-1$
buffer.append("T(g)(h,2); //declaration\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -328,7 +328,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("struct x x1; // x1 has class type B::x\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -357,7 +357,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("new (int(*[x])); // new typeid\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -382,7 +382,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("S<int()> x; // typeid\n"); //$NON-NLS-1$
buffer.append("S<int(1)> y; // expression (illformed)\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -411,7 +411,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("f(g); //OK\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -432,7 +432,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("int b = f(a);\n"); //$NON-NLS-1$
buffer.append("int c(b);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -447,7 +447,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("char msg[] = \"Syntax error on line %s\n\";\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -488,7 +488,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("ra[1] = i; // modifies a[1]\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -517,7 +517,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -546,7 +546,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// no ambiguity because U::i is static\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -575,7 +575,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("return *this;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -622,7 +622,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("{ }\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -655,36 +655,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("(int (*)(int))&f; // cast expression as selector\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.1-8):
- template<int *a> struct R { };
- template<int b[5]> struct S { };
- int *p;
- R<p> w; // OK
- S<p> x; // OK due to parameter adjustment
- int v[5];
- R<v> y; // OK due to implicit argument conversion
- S<v> z; // OK due to both adjustment and conversion
- --End Example]
- */
- public void test14_1s8() { // TODO raised bug 90668
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<int *a> struct R { };\n"); //$NON-NLS-1$
- buffer.append("template<int b[5]> struct S { };\n"); //$NON-NLS-1$
- buffer.append("int *p;\n"); //$NON-NLS-1$
- buffer.append("R<p> w; // OK\n"); //$NON-NLS-1$
- buffer.append("S<p> x; // OK due to parameter adjustment\n"); //$NON-NLS-1$
- buffer.append("int v[5];\n"); //$NON-NLS-1$
- buffer.append("R<v> y; // OK due to implicit argument conversion\n"); //$NON-NLS-1$
- buffer.append("S<v> z; // OK due to both adjustment and conversion\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -701,7 +672,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template<class T, T* p, class U = T> class X { };\n"); //$NON-NLS-1$
buffer.append("template<class T> void f(T* p = new T);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -726,34 +697,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("f<int()>(); // int() is a typeid:call the first f()\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.3-5):
- template<class T> struct A {
- ~A();
- };
- void f(A<int>* p, A<int>* q) {
- p->A<int>::~A(); // OK: destructor call
- q->A<int>::~A<int>(); // OK: destructor call
- }
- --End Example]
- */
- public void test14_3s5() { // TODO raised bug 90672
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
- buffer.append("~A();\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("void f(A<int>* p, A<int>* q) {\n"); //$NON-NLS-1$
- buffer.append("p->A<int>::~A(); // OK: destructor call\n"); //$NON-NLS-1$
- buffer.append("q->A<int>::~A<int>(); // OK: destructor call\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -794,13 +738,48 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template<void (*pf)(int)> struct A { };\n"); //$NON-NLS-1$
buffer.append("A<&f> a; // selects f(int)\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
}
/**
+ [--Start Example(CPP 14.5.2-2):
+ template <class T> struct A {
+ void f(int);
+ template <class T2> void f(T2);
+ };
+ template <> void A<int>::f(int) { } // nontemplate member
+ template <> template <> void A<int>::f<>(int) { } // template member
+ int main()
+ {
+ A<char> ac;
+ ac.f(1); //nontemplate
+ ac.f('c'); //template
+ ac.f<>(1); //template
+ }
+ --End Example]
+ */
+ public void test14_5_2s2() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template <class T> struct A {\n"); //$NON-NLS-1$
+ buffer.append("void f(int);\n"); //$NON-NLS-1$
+ buffer.append("template <class T2> void f(T2);\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("template <> void A<int>::f(int) { } // nontemplate member\n"); //$NON-NLS-1$
+ buffer.append("template <> template <> void A<int>::f<>(int) { } // template member\n"); //$NON-NLS-1$
+ buffer.append("int main()\n"); //$NON-NLS-1$
+ buffer.append("{\n"); //$NON-NLS-1$
+ buffer.append("A<char> ac;\n"); //$NON-NLS-1$
+ buffer.append("ac.f(1); //nontemplate\n"); //$NON-NLS-1$
+ buffer.append("ac.f('c'); //template\n"); //$NON-NLS-1$
+ buffer.append("ac.f<>(1); //template\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+ parse(buffer.toString(), ParserLanguage.CPP, true, 2); //should be 0
+ }
+
+ /**
[--Start Example(CPP 14.5.3-1):
template<class T> class task;
template<class T> task<T>* preempt(task<T>*);
@@ -831,67 +810,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.5.3-6):
- template<class T> struct A {
- struct B { };
- void f();
- };
- class C {
- template<class T> friend struct A<T>::B;
- template<class T> friend void A<T>::f();
- };
- --End Example]
- */
- public void test14_5_3s6() { // TODO raised bug 90678
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
- buffer.append("struct B { };\n"); //$NON-NLS-1$
- buffer.append("void f();\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("class C {\n"); //$NON-NLS-1$
- buffer.append("template<class T> friend struct A<T>::B;\n"); //$NON-NLS-1$
- buffer.append("template<class T> friend void A<T>::f();\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.5.4-6):
- template<class T> struct A {
- class C {
- template<class T2> struct B { };
- };
- };
- // partial specialization of A<T>::C::B<T2>
- template<class T> template<class T2>
- struct A<T>::C::B<T2*> { };
- A<short>::C::B<int*> absip; // uses partial specialization
- --End Example]
- */
- public void test14_5_4s6() { // TODO raised bug 90678
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
- buffer.append("class C {\n"); //$NON-NLS-1$
- buffer.append("template<class T2> struct B { };\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("// partial specialization of A<T>::C::B<T2>\n"); //$NON-NLS-1$
- buffer.append("template<class T> template<class T2>\n"); //$NON-NLS-1$
- buffer.append("struct A<T>::C::B<T2*> { };\n"); //$NON-NLS-1$
- buffer.append("A<short>::C::B<int*> absip; // uses partial specialization\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -922,13 +841,32 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("A<int,int*> a; // uses the partial specialization, which is found through\n"); //$NON-NLS-1$
buffer.append("// the using declaration which refers to the primary template\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
}
/**
+ [--Start Example(CPP 14.5.4.2-2):
+ template<int I, int J, class T> class X { };
+ template<int I, int J> class X<I, J, int> { }; // #1
+ template<int I> class X<I, I, int> { }; // #2
+ template<int I, int J> void f(X<I, J, int>); // #A
+ template<int I> void f(X<I, I, int>); // #B
+ --End Example]
+ */
+ public void test14_5_4_2s2() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<int I, int J, class T> class X { };\n"); //$NON-NLS-1$
+ buffer.append("template<int I, int J> class X<I, J, int> { }; // #1\n"); //$NON-NLS-1$
+ buffer.append("template<int I> class X<I, I, int> { }; // #2\n"); //$NON-NLS-1$
+ buffer.append("template<int I, int J> void f(X<I, J, int>); // #A\n"); //$NON-NLS-1$
+ buffer.append("template<int I> void f(X<I, I, int>); // #B\n"); //$NON-NLS-1$
+ parse(buffer.toString(), ParserLanguage.CPP, true, 2);
+ }
+
+ /**
[--Start Example(CPP 14.5.4.3-2):
template<class T> struct A {
template<class T2> struct B {}; // #1
@@ -951,48 +889,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("A<short>::B<int*> absip; // uses #3\n"); //$NON-NLS-1$
buffer.append("A<char>::B<int> abci; // uses #1\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.5.5.1-1):
- // file1.c
- template<class T>
- void f(T*);
- void g(int* p) {
- f(p); // call
- // f<int>(int*)
- }
- // file2.c
- template<class T>
- void f(T);
- void h(int* p) {
- f(p); // call
- // f<int*>(int*)
- }
- --End Example]
- */
- public void test14_5_5_1s1() { // TODO raised bug 90682
- StringBuffer buffer = new StringBuffer();
- buffer.append("// file1.c \n"); //$NON-NLS-1$
- buffer.append("template<class T>\n"); //$NON-NLS-1$
- buffer.append("void f(T*);\n"); //$NON-NLS-1$
- buffer.append("void g(int* p) { \n"); //$NON-NLS-1$
- buffer.append("f(p); // call \n"); //$NON-NLS-1$
- buffer.append("// f<int>(int*) \n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- buffer.append("// file2.c\n"); //$NON-NLS-1$
- buffer.append("template<class T>\n"); //$NON-NLS-1$
- buffer.append("void f(T);\n"); //$NON-NLS-1$
- buffer.append("void h(int* p) {\n"); //$NON-NLS-1$
- buffer.append("f(p); // call\n"); //$NON-NLS-1$
- buffer.append("// f<int*>(int*)\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1011,7 +908,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template <int K, int L> A<K+L> f(A<K>, A<L>); // same as #1\n"); //$NON-NLS-1$
buffer.append("template <int I, int J> A<IJ> f(A<I>, A<J>); // different from #1\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1028,61 +925,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template <int I, int J> void f(A<I+J>); // #1\n"); //$NON-NLS-1$
buffer.append("template <int K, int L> void f(A<K+L>); // same as #1\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.5.5.2-6):
- template<class T> void f(T); // #1
- template<class T> void f(T*, int=1); // #2
- template<class T> void g(T); // #3
- template<class T> void g(T*, ...); // #4
- int main() {
- int* ip;
- f(ip); //calls #2
- g(ip); //calls #4
- }
- --End Example]
- */
- public void test14_5_5_2s6() { // TODO raised bug 90684
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> void f(T); // #1\n"); //$NON-NLS-1$
- buffer.append("template<class T> void f(T*, int=1); // #2\n"); //$NON-NLS-1$
- buffer.append("template<class T> void g(T); // #3\n"); //$NON-NLS-1$
- buffer.append("template<class T> void g(T*, ...); // #4\n"); //$NON-NLS-1$
- buffer.append("int main() {\n"); //$NON-NLS-1$
- buffer.append("int* ip;\n"); //$NON-NLS-1$
- buffer.append("f(ip); //calls #2\n"); //$NON-NLS-1$
- buffer.append("g(ip); //calls #4\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.6.1-1):
- template<class T> class X {
- X* p; // meaning X<T>
- X<T>* p2;
- X<int>* p3;
- };
- --End Example]
- */
- public void test14_6_1s1() { // TODO can not reproduce IProblemBinding via DOMAST View
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
- buffer.append("X* p; // meaning X<T>\n"); //$NON-NLS-1$
- buffer.append("X<T>* p2;\n"); //$NON-NLS-1$
- buffer.append("X<int>* p3;\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1099,7 +942,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template<class T, T* p, class U = T> class X { };\n"); //$NON-NLS-1$
buffer.append("template<class T> void f(T* p = new T);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1121,7 +964,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
public void test14_6_1s6() { // TODO raised bug 90686
StringBuffer buffer = new StringBuffer();
buffer.append("namespace N {\n"); //$NON-NLS-1$
- buffer.append("class C { };\n"); //$NON-NLS-1$
+ buffer.append("int C;\n"); //$NON-NLS-1$
buffer.append("template<class T> class B {\n"); //$NON-NLS-1$
buffer.append("void f(T);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
@@ -1130,7 +973,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("C b; // C is the template parameter, not N::C\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1157,13 +1000,50 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("A a; // a has type double\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
}
/**
+ [--Start Example(CPP 14.7-3):
+ template<class T = int> struct A {
+ static int x;
+ };
+ template<class U> void g(U) { }
+ template<> struct A<double> { }; // specialize for T == double
+ template<> struct A<> { }; // specialize for T == int
+ template<> void g(char) { } // specialize for U == char
+ // U is deduced from the parameter type
+ template<> void g<int>(int) { } // specialize for U == int
+ template<> int A<char>::x = 0; // specialize for T == char
+ template<class T = int> struct B {
+ static int x;
+ };
+ template<> int B<>::x = 1; // specialize for T == int
+ --End Example]
+ */
+ public void test14_7s3() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T = int> struct A {\n"); //$NON-NLS-1$
+ buffer.append("static int x;\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("template<class U> void g(U) { }\n"); //$NON-NLS-1$
+ buffer.append("template<> struct A<double> { }; // specialize for T == double\n"); //$NON-NLS-1$
+ buffer.append("template<> struct A<> { }; // specialize for T == int\n"); //$NON-NLS-1$
+ buffer.append("template<> void g(char) { } // specialize for U == char\n"); //$NON-NLS-1$
+ buffer.append("// U is deduced from the parameter type\n"); //$NON-NLS-1$
+ buffer.append("template<> void g<int>(int) { } // specialize for U == int\n"); //$NON-NLS-1$
+ buffer.append("template<> int A<char>::x = 0; // specialize for T == char\n"); //$NON-NLS-1$
+ buffer.append("template<class T = int> struct B {\n"); //$NON-NLS-1$
+ buffer.append("static int x;\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("template<> int B<>::x = 1; // specialize for T == int\n"); //$NON-NLS-1$
+ parse(buffer.toString(), ParserLanguage.CPP, true, 2);
+ }
+
+ /**
[--Start Example(CPP 14.7.1-5):
template <class T> struct S {
operator int();
@@ -1190,37 +1070,39 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// instantiation of S<float> allowed but not required\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
}
/**
- [--Start Example(CPP 14.7.1-14):
- template<class T> class X {
- X<T>* p; // OK
- X<T*> a; // implicit generation of X<T> requires
- // the implicit instantiation of X<T*> which requires
- // the implicit instantiation of X<T**> which ...
- };
+ [--Start Example(CPP 14.7.2-2):
+ template<class T> class Array { void mf(); };
+ template class Array<char>;
+ template void Array<int>::mf();
+ template<class T> void sort(Array<T>& v) { }
+ template void sort(Array<char>&); // argument is deduced here
+ namespace N {
+ template<class T> void f(T&) { }
+ }
+ template void N::f<int>(int&);
--End Example]
*/
- public void test14_7_1s14() { // TODO can't reproduce via DOMAST View
+ public void test14_7_2s2() throws Exception {
StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
- buffer.append("X<T>* p; // OK\n"); //$NON-NLS-1$
- buffer.append("X<T*> a; // implicit generation of X<T> requires\n"); //$NON-NLS-1$
- buffer.append("// the implicit instantiation of X<T*> which requires\n"); //$NON-NLS-1$
- buffer.append("// the implicit instantiation of X<T**> which ...\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
+ buffer.append("template<class T> class Array { void mf(); };\n"); //$NON-NLS-1$
+ buffer.append("template class Array<char>;\n"); //$NON-NLS-1$
+ buffer.append("template void Array<int>::mf();\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void sort(Array<T>& v) { }\n"); //$NON-NLS-1$
+ buffer.append("template void sort(Array<char>&); // argument is deduced here\n"); //$NON-NLS-1$
+ buffer.append("namespace N {\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void f(T&) { }\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+ buffer.append("template void N::f<int>(int&);\n"); //$NON-NLS-1$
+ parse(buffer.toString(), ParserLanguage.CPP, true, 2);
}
-
+
/**
[--Start Example(CPP 14.7.2-6):
template<class T> class Array { };
@@ -1236,7 +1118,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// instantiate sort(Array<int>&) - templateargument deduced\n"); //$NON-NLS-1$
buffer.append("template void sort<>(Array<int>&);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1259,33 +1141,32 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template<class T> void sort(Array<T>& v) { }\n"); //$NON-NLS-1$
buffer.append("template<> void sort<char*>(Array<char*>&) ;\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
}
+
/**
- [--Start Example(CPP 14.7.3-14):
- template<class T> void f(T) { }
- template<class T> inline T g(T) { }
- template<> inline void f<>(int) { } // OK: inline
- template<> int g<>(int) { } // OK: not inline
+ [--Start Example(CPP 14.7.3-11):
+ template<class T> class Array { };
+ template<class T> void sort(Array<T>& v);
+ // explicit specialization for sort(Array<int>&)
+ // with deduces templateargument of type int
+ template<> void sort(Array<int>&);
--End Example]
*/
- public void test14_7_3s14() { // TODO similar bug already
+ public void test14_7_3s11() throws Exception {
StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> void f(T) { }\n"); //$NON-NLS-1$
- buffer.append("template<class T> inline T g(T) { }\n"); //$NON-NLS-1$
- buffer.append("template<> inline void f<>(int) { } // OK: inline\n"); //$NON-NLS-1$
- buffer.append("template<> int g<>(int) { } // OK: not inline\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
+ buffer.append("template<class T> class Array { };\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void sort(Array<T>& v);\n"); //$NON-NLS-1$
+ buffer.append("// explicit specialization for sort(Array<int>&)\n"); //$NON-NLS-1$
+ buffer.append("// with deduces templateargument of type int\n"); //$NON-NLS-1$
+ buffer.append("template<> void sort(Array<int>&);\n"); //$NON-NLS-1$
+ parse(buffer.toString(), ParserLanguage.CPP, true, 1);
}
-
+
/**
[--Start Example(CPP 14.7.3-16):
template<class T> struct A {
@@ -1329,7 +1210,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// member specialization even if defined in class definition\n"); //$NON-NLS-1$
buffer.append("template<> void A<int>::h(int) { }\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1356,40 +1237,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template<> template<> A<int>::B<double> { };\n"); //$NON-NLS-1$
buffer.append("template<> template<> void A<char>::B<char>::mf() { };\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.8-2):
- template<class T> void f(T* p)
- {
- static T s;
- // ...
- };
- void g(int a, char* b)
- {
- f(&a); //call f<int>(int*)
- f(&b); //call f<char*>(char**)
- }
- --End Example]
- */
- public void test14_8s2() {
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> void f(T* p)\n"); //$NON-NLS-1$
- buffer.append("{\n"); //$NON-NLS-1$
- buffer.append("static T s;\n"); //$NON-NLS-1$
- buffer.append("// ...\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("void g(int a, char* b)\n"); //$NON-NLS-1$
- buffer.append("{\n"); //$NON-NLS-1$
- buffer.append("f(&a); //call f<int>(int*)\n"); //$NON-NLS-1$
- buffer.append("f(&b); //call f<char*>(char**)\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1406,7 +1254,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template <class T> int f(typename T::B*);\n"); //$NON-NLS-1$
buffer.append("int i = f<int>(0);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1429,7 +1277,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("int i = f<A>(0);\n"); //$NON-NLS-1$
buffer.append("int j = f<C>(0);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1474,7 +1322,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("h<const int>(1,0);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1499,7 +1347,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("f(p); // f(const int *)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1534,7 +1382,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("f(d2); //calls f(B<int>&)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1561,7 +1409,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("f(ab); //calls f(A<B>)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1590,30 +1438,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("f(di); // f( (B<int>&)di )\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- assertTrue(false);
- } catch (Exception e) {
- }
- }
-
- /**
- [--Start Example(CPP 14.8.3-6):
- template<class T> void f(T); // declaration
- void g()
- {
- f("Annemarie"); // call of f<const char*>
- }
- --End Example]
- */
- public void test14_8_3s6() {
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> void f(T); // declaration\n"); //$NON-NLS-1$
- buffer.append("void g()\n"); //$NON-NLS-1$
- buffer.append("{\n"); //$NON-NLS-1$
- buffer.append("f(\"Annemarie\"); // call of f<const char*>\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1638,7 +1463,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template <int I> void f(A<I>, A<I+10>);\n"); //$NON-NLS-1$
buffer.append("template <int I> void f(A<I>, A<I+11>);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1657,13 +1482,40 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("template <int I> void f(A<I>, A<I+10>);\n"); //$NON-NLS-1$
buffer.append("template <int I> void f(A<I>, A<I+1+2+3+4>);\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
assertTrue(false);
} catch (Exception e) {
}
}
/**
+ [--Start Example(CPP 14.8.1-4):
+ template<class T> void f(T);
+ class Complex {
+ // ...
+ Complex(double);
+ };
+ void g()
+ {
+ f<Complex>(1); // OK, means f<Complex>(Complex(1))
+ }
+ --End Example]
+ */
+ public void test14_8_1s4() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T);\n"); //$NON-NLS-1$
+ buffer.append("class Complex {\n"); //$NON-NLS-1$
+ buffer.append("// ...\n"); //$NON-NLS-1$
+ buffer.append("Complex(double);\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("void g()\n"); //$NON-NLS-1$
+ buffer.append("{\n"); //$NON-NLS-1$
+ buffer.append("f<Complex>(1); // OK, means f<Complex>(Complex(1))\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+ parse(buffer.toString(), ParserLanguage.CPP, true, 1);
+ }
+
+ /**
[--Start Example(CPP 14.8.2.4-14):
template<int i, typename T>
T deduce(typename A<T>::X x, // T is not deduced here
@@ -1692,7 +1544,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("// i is explicitly specified to be 77, y.ym must be convertible\n"); //$NON-NLS-1$
buffer.append("// to B<77>::Y\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
@@ -1723,7 +1575,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
buffer.append("f(i,i); //#2: f<int>(i,char(i))\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java
index a0b949d83d9..b95477aa51f 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecTest.java
@@ -11,7 +11,6 @@
package org.eclipse.cdt.core.parser.tests.ast2;
import org.eclipse.cdt.core.parser.ParserLanguage;
-import org.eclipse.cdt.internal.core.parser.ParserException;
/**
* @author dsteffle
@@ -46,7 +45,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test2_4s5() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int x=x+++++y;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -57,7 +56,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test2_13_1s1() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int a=12, b=014, c=0XC;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -110,7 +109,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int Int; // declares Int\n"); //$NON-NLS-1$
buffer.append("extern X anotherX; // declares anotherX\n"); //$NON-NLS-1$
buffer.append("using N::d; // declares N::d\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -137,7 +136,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("C b = a;\n"); //$NON-NLS-1$
buffer.append("b = a;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -161,7 +160,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("~C() { }\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -176,7 +175,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct X; // declare X as a struct type\n"); //$NON-NLS-1$
buffer.append("struct X* x1; // use X in pointer formation\n"); //$NON-NLS-1$
buffer.append("X* x2; // use X in pointer formation\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -197,7 +196,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i = j, j;\n"); //$NON-NLS-1$
buffer.append("j = 42;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -214,7 +213,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int x = 12;\n"); //$NON-NLS-1$
buffer.append("{ int x = x; }\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -231,7 +230,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const int i = 2;\n"); //$NON-NLS-1$
buffer.append("{ int i[i]; }\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -248,7 +247,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const int x = 12;\n"); //$NON-NLS-1$
buffer.append("{ enum { x = x }; }\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -301,7 +300,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("int q(); // error: different return type\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -336,7 +335,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// 3) scope of namespace A\n"); //$NON-NLS-1$
buffer.append("// 4) global scope, before the definition of A::N::f\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -351,7 +350,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("namespace M {\n"); //$NON-NLS-1$
buffer.append("class B { };\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -396,7 +395,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// 4) scope of namespace M::N\n"); //$NON-NLS-1$
buffer.append("// 5) scope of namespace M\n"); //$NON-NLS-1$
buffer.append("// 6) global scope, before the definition of M::N::X::f\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -421,7 +420,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int main() {\n"); //$NON-NLS-1$
buffer.append("f(parm); //OK: calls NS::f\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -440,7 +439,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
*/
public void test3_4_3s1() throws Exception {
StringBuffer buffer = new StringBuffer();
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
@@ -491,7 +490,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("AB *p;\n"); //$NON-NLS-1$
buffer.append("p->AB::~AB(); // explicitly calls the destructor for A\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -598,7 +597,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// S is { Y::h(int), Z::h(double) } and overload\n"); //$NON-NLS-1$
buffer.append("// resolution chooses Z::h(double)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -664,7 +663,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("BD::a++; //OK: S is { A::a, A::a }\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -707,7 +706,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A::b++; //OK: both A and B searched (once), S is { B::b }\n"); //$NON-NLS-1$
buffer.append("B::b++; //OK: b declared directly in B, S is { B::b }\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -744,7 +743,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i = C::x; // OK, A::x (of type int)\n"); //$NON-NLS-1$
buffer.append("int j = C::y; // ambiguous, A::y or B::y\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -769,7 +768,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("void A::f1(int) { } // illformed,\n"); //$NON-NLS-1$
buffer.append("// f1 is not a member of A\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -804,7 +803,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("using namespace A;\n"); //$NON-NLS-1$
buffer.append("using namespace C::D;\n"); //$NON-NLS-1$
buffer.append("void B::f1(int){} // OK, defines A::B::f1(int)\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -870,7 +869,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct Base::Data; // error: cannot introduce a qualified type (7.1.5.3)\n"); //$NON-NLS-1$
buffer.append("struct Base::Datum; // error: Datum undefined\n"); //$NON-NLS-1$
buffer.append("struct Base::Data* pBase; // OK: refers to nested Data\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -899,7 +898,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("extern int i; //3: external linkage\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -938,7 +937,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("void q() { //\n"); //$NON-NLS-1$
buffer.append("} // some other, unrelated q\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -961,7 +960,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef A B;\n"); //$NON-NLS-1$
buffer.append("extern B b; // illformed\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -974,7 +973,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("int main(int argc, char* argv[]) { //\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1023,7 +1022,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void* q = pb; // OK: pb points to valid memory\n"); //$NON-NLS-1$
buffer.append("pb->f(); //undefined behavior, lifetime of *pb has ended\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -1072,7 +1071,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("c1 = c2; // welldefined\n"); //$NON-NLS-1$
buffer.append("c1.f(); //welldefined; c1 refers to a new object of type C\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1097,7 +1096,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B b;\n"); //$NON-NLS-1$
buffer.append("new (&b) T;\n"); //$NON-NLS-1$
buffer.append("} //undefined behavior at block exit\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1124,7 +1123,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("b.~B();\n"); //$NON-NLS-1$
buffer.append("new (&b) const B; // undefined behavior\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1147,7 +1146,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// obj might be modified\n"); //$NON-NLS-1$
buffer.append("memcpy(&obj, buf, N); // at this point, each subobject of obj of scalar type\n"); //$NON-NLS-1$
buffer.append("// holds its original value\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -1166,7 +1165,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// provided that t2p points to an initialized object ...\n"); //$NON-NLS-1$
buffer.append("memcpy(t1p, t2p, sizeof(T)); // at this point, every subobject of POD type in *t1p contains\n"); //$NON-NLS-1$
buffer.append("// the same value as the corresponding subobject in *t2p\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -1219,7 +1218,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("xp++; //OK: X is complete\n"); //$NON-NLS-1$
buffer.append("arrp++; //illformed: UNKA cant be completed\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1230,7 +1229,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test3_10s3() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int& f();\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1251,7 +1250,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("i = ++i + 1; // the behavior is unspecified\n"); //$NON-NLS-1$
buffer.append("i = i + 1; // the value of i is incremented\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -1272,7 +1271,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{\n"); //$NON-NLS-1$
buffer.append("B* bp = dynamic_cast<B*>(dp); // equivalent to B* bp = dp;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1333,7 +1332,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// cast from virtual base\n"); //$NON-NLS-1$
buffer.append("E* ep1 = dynamic_cast<E*>(ap); // succeeds\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1362,7 +1361,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typeid(D) == typeid(d2); // yields true\n"); //$NON-NLS-1$
buffer.append("typeid(D) == typeid(const D&); // yields true\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1385,7 +1384,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int foo() {\n"); //$NON-NLS-1$
buffer.append("static_cast<D&>(br); // produces lvalue to the original d object\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1404,7 +1403,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int foo() {\n"); //$NON-NLS-1$
buffer.append("&B::i; // has type int A::*\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1419,7 +1418,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int n=2;\n"); //$NON-NLS-1$
buffer.append("int x=new float[n][5];\n"); //$NON-NLS-1$
buffer.append("int y=new float[5][n];\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1444,7 +1443,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("return (A*)( p ); // illformed\n"); //$NON-NLS-1$
buffer.append("// static_cast interpretation\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1459,7 +1458,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int foo() {\n"); //$NON-NLS-1$
buffer.append("(ptr_to_obj->*ptr_to_mfct)(10);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -1486,7 +1485,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("p <= q; // Both converted to const void * before comparison\n"); //$NON-NLS-1$
buffer.append("pi <= pci; // Both converted to const int *const * before comparison\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1519,7 +1518,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int (D::*pdl)() = pl;\n"); //$NON-NLS-1$
buffer.append("int (D::*pdr)() = pr;\n"); //$NON-NLS-1$
buffer.append("bool x = (pdl == pdr); // false\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1538,7 +1537,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int a=0, t=1, c=2;\n"); //$NON-NLS-1$
buffer.append("f(a, (t=3, t+2), c);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1565,7 +1564,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1592,7 +1591,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1629,7 +1628,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("i = 0;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1652,7 +1651,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("a[i] = i;\n"); //$NON-NLS-1$
buffer.append("int j = i; // j = 42\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1674,7 +1673,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
*/
public void test6_7s3() throws Exception {
StringBuffer buffer = new StringBuffer();
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1693,7 +1692,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("static int s = foo(2*i); // recursive call undefined\n"); //$NON-NLS-1$
buffer.append("return i+1;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1720,7 +1719,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("T(f) = { 1, 2 }; // declaration\n"); //$NON-NLS-1$
buffer.append("T(*g)(double(3)); // declaration\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -1767,7 +1766,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// properly since it depends\n"); //$NON-NLS-1$
buffer.append("// on T2 being a typename\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1782,7 +1781,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef char* Pc;\n"); //$NON-NLS-1$
buffer.append("void f(const Pc); // void f(char* const) (not const char*)\n"); //$NON-NLS-1$
buffer.append("void g(const int Pc); // void g(const int)\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1795,7 +1794,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("void h(unsigned Pc); // void h(unsigned int)\n"); //$NON-NLS-1$
buffer.append("void k(unsigned int Pc); // void k(unsigned int)\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1852,7 +1851,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("static int c; // error: inconsistent linkage\n"); //$NON-NLS-1$
buffer.append("extern int d; // d has external linkage\n"); //$NON-NLS-1$
buffer.append("static int d; // error: inconsistent linkage\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1879,7 +1878,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("g(a); //error: S is incomplete\n"); //$NON-NLS-1$
buffer.append("f(); //error: S is incomplete\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1896,7 +1895,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("mutable const int* p; // OK\n"); //$NON-NLS-1$
buffer.append("mutable int* const q; // illformed\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1911,7 +1910,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int MILES, *KLICKSP;\n"); //$NON-NLS-1$
buffer.append("MILES distance;\n"); //$NON-NLS-1$
buffer.append("extern KLICKSP metricp;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1931,7 +1930,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int I;\n"); //$NON-NLS-1$
buffer.append("typedef I I;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
@@ -1947,7 +1946,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class complex { // \n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("typedef int complex; // error: redefinition\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1962,7 +1961,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int complex;\n"); //$NON-NLS-1$
buffer.append("class complex { // \n"); //$NON-NLS-1$
buffer.append("}; // error: redefinition\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1985,7 +1984,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef struct S T;\n"); //$NON-NLS-1$
buffer.append("S a = T(); // OK\n"); //$NON-NLS-1$
buffer.append("struct T * p; // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -1996,7 +1995,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test7_1_3s5a() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("typedef struct { } *ps, S; // S is the class name for linkage purposes\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2013,7 +2012,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("S(); //error: requires a return type because S is\n"); //$NON-NLS-1$
buffer.append("// an ordinary member function, not a constructor\n"); //$NON-NLS-1$
buffer.append("} S;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2050,7 +2049,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int* iq = const_cast<int*>(ciq); // cast required\n"); //$NON-NLS-1$
buffer.append("*iq = 4; // undefined: modifies a const object\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2097,7 +2096,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("p->x.i = 99; // wellformed: mutable member can be modified\n"); //$NON-NLS-1$
buffer.append("p->x.j = 99; // undefined: modifies a const member\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2110,7 +2109,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("enum { a, b, c=0 };\n"); //$NON-NLS-1$
buffer.append("enum { d, e, f=e+2 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2127,7 +2126,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const int x = 12;\n"); //$NON-NLS-1$
buffer.append("{ enum { x = x }; }\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2150,7 +2149,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("if (*cp == blue) // ...\n"); //$NON-NLS-1$
buffer.append("return 0;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2193,7 +2192,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(p->left); // OK\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -2218,7 +2217,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void g() { i++; } // Inner::i\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2257,7 +2256,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A::i++; // A::unique::i\n"); //$NON-NLS-1$
buffer.append("j++; // A::unique::j\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -2274,7 +2273,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f() { //\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2309,7 +2308,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("namespace R {\n"); //$NON-NLS-1$
buffer.append("void Q::V::g() { } // error: R doesnt enclose Q\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2368,7 +2367,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A::X::f(x); //error: f is not a member of A::X\n"); //$NON-NLS-1$
buffer.append("A::X::Y::g(); // error: g is not a member of A::X::Y\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2385,7 +2384,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("namespace CWVLN = Company_with_very_long_name;\n"); //$NON-NLS-1$
buffer.append("namespace CWVLN = Company_with_very_long_name; // OK: duplicate\n"); //$NON-NLS-1$
buffer.append("namespace CWVLN = CWVLN;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2416,7 +2415,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f(int) { f('c'); } // calls B::f(char)\n"); //$NON-NLS-1$
buffer.append("void g(int) { g('c'); } // recursively calls D::g(int)\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2443,7 +2442,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("using B::x; // OK: x is a union member of base B\n"); //$NON-NLS-1$
buffer.append("using C::g; // error: C isnt a base of D2\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -2472,7 +2471,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("using A::f<double>; // illformed\n"); //$NON-NLS-1$
buffer.append("using A::X<int>; // illformed\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2503,7 +2502,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("using X::s; // error: X::s is a class member\n"); //$NON-NLS-1$
buffer.append("// and this is not a member declaration.\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2538,7 +2537,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X::f(); //calls ::f\n"); //$NON-NLS-1$
buffer.append("X::g(); //calls A::g\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2587,7 +2586,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("using B::i;\n"); //$NON-NLS-1$
buffer.append("using B::i; // error: double member declaration\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2632,7 +2631,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// that is, for A::f(int) and A::f(char).\n"); //$NON-NLS-1$
buffer.append("f('a'); //calls f(char)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2677,7 +2676,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f(int); // error:\n"); //$NON-NLS-1$
buffer.append("// f(int) conflicts with C::f(int) and B::f(int)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -2728,7 +2727,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("p->g(1); //calls B::g(int)\n"); //$NON-NLS-1$
buffer.append("p->g('a'); //calls D::g(char)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2765,7 +2764,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("return d>\n"); //$NON-NLS-1$
buffer.append("x(); // ambiguous: B::x or C::x\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -2800,7 +2799,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("public:\n"); //$NON-NLS-1$
buffer.append("using A::g; // B::g is a public synonym for A::g\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2859,7 +2858,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f4() {\n"); //$NON-NLS-1$
buffer.append("i = 5; // illformed; neither i is visible\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -2892,7 +2891,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("using namespace N;\n"); //$NON-NLS-1$
buffer.append("i = 7; // error: both M::i and N::i are visible\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -2941,7 +2940,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int n = j; // D::j hides B::j\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3000,7 +2999,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(1); //error: ambiguous: D::f(int) or E::f(int)?\n"); //$NON-NLS-1$
buffer.append("f('a'); //OK: D::f(char)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -3017,7 +3016,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("extern \"C\" {\n"); //$NON-NLS-1$
buffer.append("double sqrt(double); // C linkage\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -3048,7 +3047,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void (*pf2)(FUNC*); // the name of the variable pf2 has C++ linkage and\n"); //$NON-NLS-1$
buffer.append("// the type of pf2 is pointer to C++ function that\n"); //$NON-NLS-1$
buffer.append("// takes one parameter of type pointer to C function\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3097,7 +3096,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// C function\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3144,7 +3143,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// definition for the function h\n"); //$NON-NLS-1$
buffer.append("// with C language linkage\n"); //$NON-NLS-1$
buffer.append("// A::h and ::h refer to the same function\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3157,7 +3156,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("extern \"C\" double f();\n"); //$NON-NLS-1$
buffer.append("static double f(); // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3174,7 +3173,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("extern \"C\" {\n"); //$NON-NLS-1$
buffer.append("int i; // definition\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3185,7 +3184,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test7_5s7c() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("extern \"C\" static void f(); // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3206,7 +3205,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int (*p3i)[3];\n"); //$NON-NLS-1$
buffer.append("int *f();\n"); //$NON-NLS-1$
buffer.append("int (*pf)(double);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3235,7 +3234,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("S y((int)a); // object declaration\n"); //$NON-NLS-1$
buffer.append("S z = int(a); // object declaration\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3254,7 +3253,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("sizeof(int(1)); // expression\n"); //$NON-NLS-1$
buffer.append("// sizeof(int()); // typeid (illformed)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3273,7 +3272,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("(int(1)); //expression\n"); //$NON-NLS-1$
buffer.append("// (int())1; //typeid (illformed)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3288,7 +3287,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class C { };\n"); //$NON-NLS-1$
buffer.append("void h(int *(C[10])); // void h(int *(*_fp)(C _parm[10]));\n"); //$NON-NLS-1$
buffer.append("// not: void h(int *C[10]);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3311,7 +3310,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void A::B::f() { } // illformed: the declarator must not be\n"); //$NON-NLS-1$
buffer.append("// qualified with A::\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3322,7 +3321,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test8_3s4() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int unsigned i;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3353,7 +3352,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("pc = p;\n"); //$NON-NLS-1$
buffer.append("ppc = &pc;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3384,7 +3383,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("p = pc; // error\n"); //$NON-NLS-1$
buffer.append("ppc = &p; // error\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3405,7 +3404,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("*ppc = &ci; // OK, but would make p point to ci ...\n"); //$NON-NLS-1$
buffer.append("*p = 5; // clobber ci\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3420,7 +3419,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int& A;\n"); //$NON-NLS-1$
buffer.append("const A aref = 3; // illformed;\n"); //$NON-NLS-1$
buffer.append("// nonconst reference initialized with rvalue\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3481,7 +3480,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("link* q = new link;\n"); //$NON-NLS-1$
buffer.append("h(q);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3528,7 +3527,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("(obj.*pmf)(7); //call a function member of obj\n"); //$NON-NLS-1$
buffer.append("// with the argument 7\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3543,7 +3542,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int A[5], AA[2][3];\n"); //$NON-NLS-1$
buffer.append("typedef const A CA; // type is array of 5 const int\n"); //$NON-NLS-1$
buffer.append("typedef const AA CAA; // type is array of 2 array of 3 const int\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3556,7 +3555,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("float fa[17], *afp[17];\n"); //$NON-NLS-1$
buffer.append("static int x3d[3][5][7];\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3567,7 +3566,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test8_3_4s8() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int x[3][5];\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3588,7 +3587,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("printf(\"hello world\");\n"); //$NON-NLS-1$
buffer.append("printf(\"a=%d b=%d\", a, b);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3607,7 +3606,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const F f; // illformed:\n"); //$NON-NLS-1$
buffer.append("// not equivalent to: void f() const;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3620,7 +3619,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("#define FILE int\n"); //$NON-NLS-1$
buffer.append("int fseek(FILE*, long, int);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3637,7 +3636,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("F fv; // OK: equivalent to void fv();\n"); //$NON-NLS-1$
buffer.append("// F fv { } // illformed\n"); //$NON-NLS-1$
buffer.append("void fv() { } // OK: definition of fv\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3660,7 +3659,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("FIC f; // OK\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("FIC S::*pm = &S::f; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3681,7 +3680,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("*fpi(int),\n"); //$NON-NLS-1$
buffer.append("(*pif)(const char*, const char*);\n"); //$NON-NLS-1$
buffer.append("(*fpif(int))(int);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3694,7 +3693,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("typedef int IFUNC(int);\n"); //$NON-NLS-1$
buffer.append("IFUNC* fpif(int);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3711,7 +3710,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f() {\n"); //$NON-NLS-1$
buffer.append("point(1,2); point(1); point();\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3762,7 +3761,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{\n"); //$NON-NLS-1$
buffer.append("f(6); //OK, calls f(6, 7)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -3791,7 +3790,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("g(); // g(f(::a))\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3816,7 +3815,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{ } // specified in class scope\n"); //$NON-NLS-1$
buffer.append("void C::g(int i = 88, int j) // in this translation unit,\n"); //$NON-NLS-1$
buffer.append("{ }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3837,7 +3836,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("extern void g(int x = i); // error\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3852,7 +3851,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class A {\n"); //$NON-NLS-1$
buffer.append("void f(A* p = this) { } // error\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3873,7 +3872,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int I;\n"); //$NON-NLS-1$
buffer.append("int g(float I, int b = I(2)); // error: parameter I found\n"); //$NON-NLS-1$
buffer.append("int h(int a, int b = sizeof(a)); // error, parameter a used\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -3898,7 +3897,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int mem2(int i = b); // OK; use X::b\n"); //$NON-NLS-1$
buffer.append("static int b;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3923,7 +3922,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("int (*p1)(int) = &f;\n"); //$NON-NLS-1$
buffer.append("int (*p2)() = &f; // error: type mismatch\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -3958,7 +3957,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("pa->f(); //OK, calls pa->B::f(7)\n"); //$NON-NLS-1$
buffer.append("pb->f(); //error: wrong number of arguments for B::f()\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -3977,7 +3976,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int m = (a > b) ? a : b;\n"); //$NON-NLS-1$
buffer.append("return (m > c) ? m : c;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4000,7 +3999,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("int X::a = 1;\n"); //$NON-NLS-1$
buffer.append("int X::b = a; // X::b = X::a\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4023,7 +4022,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int j;\n"); //$NON-NLS-1$
buffer.append("} b;\n"); //$NON-NLS-1$
buffer.append("} a = { 1, { 2, 3 } };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4034,7 +4033,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test8_5_1s4() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int x[] = { 1, 3, 5 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4053,7 +4052,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("static int s;\n"); //$NON-NLS-1$
buffer.append("int j;\n"); //$NON-NLS-1$
buffer.append("} a = { 1, 2 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4064,7 +4063,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test8_5_1s6() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("char cv[4] = { 'a', 's', 'd', 'f', 0 }; // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4077,7 +4076,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("struct S { int a; char* b; int c; };\n"); //$NON-NLS-1$
buffer.append("S ss = { 1, \"asdf\" };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4096,7 +4095,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("S s;\n"); //$NON-NLS-1$
buffer.append("int i;\n"); //$NON-NLS-1$
buffer.append("} a = { { } , 3 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4113,7 +4112,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("float y[4][3] = {\n"); //$NON-NLS-1$
buffer.append("{ 1 }, { 2 }, { 3 }, { 4 }\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4132,7 +4131,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{ 2, 4, 6 },\n"); //$NON-NLS-1$
buffer.append("{ 3, 5, 7 },\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4147,7 +4146,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("float y[4][3] = {\n"); //$NON-NLS-1$
buffer.append("1, 3, 5, 2, 4, 6, 3, 5, 7\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4176,7 +4175,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("A a;\n"); //$NON-NLS-1$
buffer.append("B b = { 4, a, a };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4197,7 +4196,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("u c = 1; // error\n"); //$NON-NLS-1$
buffer.append("u d = { 0, \"asdf\" }; // error\n"); //$NON-NLS-1$
buffer.append("u e = { \"asdf\" }; // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4208,7 +4207,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test8_5_2s2() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append(" char cv[4] = \"asdf\"; // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4221,7 +4220,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("int& r1; // error: initializer missing\n"); //$NON-NLS-1$
buffer.append("extern int& r2; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4244,7 +4243,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct B : public A { } b;\n"); //$NON-NLS-1$
buffer.append("A& ra = b; // ra refers to A subobject in b\n"); //$NON-NLS-1$
buffer.append("const A& rca = b; // rca refers to A subobject in b\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4259,7 +4258,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("double& rd2 = 2.0; // error: not an lvalue and reference not const\n"); //$NON-NLS-1$
buffer.append("int i = 2;\n"); //$NON-NLS-1$
buffer.append("double& rd3 = i; // error: type mismatch and reference not const\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4280,7 +4279,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const A& rca = f(); // Either bound to the A subobject of the B rvalue,\n"); //$NON-NLS-1$
buffer.append("// or the entire B object is copied and the reference\n"); //$NON-NLS-1$
buffer.append("// is bound to the A subobject of the copy\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4295,7 +4294,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const double& rcd2 = 2; // rcd2 refers to temporary with value 2.0\n"); //$NON-NLS-1$
buffer.append("const volatile int cvi = 1;\n"); //$NON-NLS-1$
buffer.append("const int& r = cvi; // error: type qualifiers dropped\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4326,7 +4325,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int f(Y);\n"); //$NON-NLS-1$
buffer.append("struct S { int a; };\n"); //$NON-NLS-1$
buffer.append("struct S { int a; }; // error, double definition\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -4363,7 +4362,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("stat(ps); //call stat()\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4390,7 +4389,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct s { char* p; }; // define local struct s\n"); //$NON-NLS-1$
buffer.append("struct s; // redeclaration, has no effect\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4417,7 +4416,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("friend Vector operator*(Matrix&, Vector&);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4438,7 +4437,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct s* p = new struct s; // global s\n"); //$NON-NLS-1$
buffer.append("p->a = s; // local s\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4449,7 +4448,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test9_1s4() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("class A * A;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4472,7 +4471,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("tnode *right;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("tnode s, *sp;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4493,7 +4492,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f(T);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("void X::f(T t = count) { }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4522,7 +4521,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("fv S::* pmfv1 = &S::memfunc1;\n"); //$NON-NLS-1$
buffer.append("fv S::* pmfv2 = &S::memfunc2;\n"); //$NON-NLS-1$
buffer.append("fvc S::* pmfv3 = &S::memfunc3;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4573,7 +4572,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("n1.set(\"abc\",&n2,0);\n"); //$NON-NLS-1$
buffer.append("n2.set(\"def\",0,0);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -4590,7 +4589,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void g() const;\n"); //$NON-NLS-1$
buffer.append("void h() const volatile;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4613,7 +4612,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int h() const { return a++; } // error\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("int s::f() const { return a; }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4650,7 +4649,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("y.f();\n"); //$NON-NLS-1$
buffer.append("y.g(); //error\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4679,7 +4678,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("process::reschedule(); // OK: no object necessary\n"); //$NON-NLS-1$
buffer.append("g().reschedule(); // g() is called\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4704,7 +4703,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("static int i;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("int Y::i = g(); // equivalent to Y::g();\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4725,7 +4724,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("process* process::running = get_main();\n"); //$NON-NLS-1$
buffer.append("process* process::run_chain = running;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -4744,7 +4743,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("aa = 1; // error\n"); //$NON-NLS-1$
buffer.append("ptr->aa = 1; // OK\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -4773,7 +4772,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("if (a.b == t) // shall yield true\n"); //$NON-NLS-1$
buffer.append("{ }\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4828,7 +4827,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("inner* p = 0; // error: inner not in scope\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -4855,7 +4854,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("int enclose::inner::x = 1;\n"); //$NON-NLS-1$
buffer.append("void enclose::inner::f(int i) { }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4876,7 +4875,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class I1 {}; // definition of nested class\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("class E::I2 {}; // definition of nested class\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4915,7 +4914,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("local* p = 0; // error: local not in scope\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -4944,7 +4943,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("Y c; // error\n"); //$NON-NLS-1$
buffer.append("X::Y d; // OK\n"); //$NON-NLS-1$
buffer.append("X::I e; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -4977,7 +4976,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("public:\n"); //$NON-NLS-1$
buffer.append("int c;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -4994,7 +4993,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class B { };\n"); //$NON-NLS-1$
buffer.append("class C { };\n"); //$NON-NLS-1$
buffer.append("class D : public A, public B, public C { };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5007,7 +5006,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("class X { };\n"); //$NON-NLS-1$
buffer.append("class Y : public X, public X { }; // illformed\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5027,7 +5026,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class C : public A, public B { void f(); }; // wellformed\n"); //$NON-NLS-1$
buffer.append("class D : public A, public L { void f(); }; // wellformed\n"); //$NON-NLS-1$
buffer.append("\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5094,7 +5093,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("pc->h(); //OK\n"); //$NON-NLS-1$
buffer.append("pc->h(1); //OK\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5125,7 +5124,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class C : public A, public B {\n"); //$NON-NLS-1$
buffer.append("int f() { return A::f() + B::f(); }\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5170,7 +5169,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("e; // OK: only one e (enumerator)\n"); //$NON-NLS-1$
buffer.append("pd->a++; //error, ambiguous: two as in D\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5199,7 +5198,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("class C : public virtual V, public W { };\n"); //$NON-NLS-1$
buffer.append("class D : public B, public C { void glorp(); };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5232,7 +5231,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A* pa = &d; // error, ambiguous: Cs A or Bs A?\n"); //$NON-NLS-1$
buffer.append("V* pv = &d; // OK: only one V subobject\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5269,7 +5268,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("c.f(); //calls B::f, the final overrider\n"); //$NON-NLS-1$
buffer.append("c.C::f(); //calls A::f because of the usingdeclaration\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5352,7 +5351,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// convert the result to B*\n"); //$NON-NLS-1$
buffer.append("dp->vf2(); //illformed: argument mismatch\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5405,7 +5404,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("ap->f(); //calls D::B1::f\n"); //$NON-NLS-1$
buffer.append("dp->f(); //illformed: ambiguous\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5442,7 +5441,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct Okay : VB1, VB2 {\n"); //$NON-NLS-1$
buffer.append("void f();\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5469,7 +5468,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("VB1a* vb1ap = new Da;\n"); //$NON-NLS-1$
buffer.append("vb1ap->f(); //calls VB2::f\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5484,7 +5483,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class B { public: virtual void f(); };\n"); //$NON-NLS-1$
buffer.append("class D : public B { public: void f(); };\n"); //$NON-NLS-1$
buffer.append("void D::f() { B::f(); }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5515,7 +5514,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("virtual void draw() = 0; // pure virtual\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5530,7 +5529,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct C {\n"); //$NON-NLS-1$
buffer.append("virtual void f() { }=0; // illformed\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5549,7 +5548,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("shape f(); // error\n"); //$NON-NLS-1$
buffer.append("void g(shape); // error\n"); //$NON-NLS-1$
buffer.append("shape& h(shape&); // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5570,7 +5569,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void rotate(int) {}\n"); //$NON-NLS-1$
buffer.append("// ab_circle::draw() is a pure virtual\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5591,7 +5590,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void rotate(int) {}\n"); //$NON-NLS-1$
buffer.append("void draw(); // a definition is required somewhere\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -5612,7 +5611,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct S {\n"); //$NON-NLS-1$
buffer.append("int a; // S::a is public by default\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5643,7 +5642,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A::BB x; // OK, typedef name A::BB is public\n"); //$NON-NLS-1$
buffer.append("A::B y; // access error, A::B is private\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5672,7 +5671,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A::I g(A::I p = A::x);\n"); //$NON-NLS-1$
buffer.append("A::I g(A::I p) { return 0; }\n"); //$NON-NLS-1$
buffer.append("A::I A::x = 0;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5693,7 +5692,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("int D::E::m = 1; // OK, no access error on private E\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5714,7 +5713,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int b; // X::b is public\n"); //$NON-NLS-1$
buffer.append("int c; // X::c is public\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5741,7 +5740,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("public:\n"); //$NON-NLS-1$
buffer.append("int d; // S::d is public\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5760,7 +5759,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("private:\n"); //$NON-NLS-1$
buffer.append("class A { }; // error: cannot change access\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5787,7 +5786,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct D6 : B { }; // B public by default\n"); //$NON-NLS-1$
buffer.append("class D7 : protected B { };\n"); //$NON-NLS-1$
buffer.append("struct D8 : protected B { };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5838,7 +5837,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B* bp2 = (B*)this; // OK with cast\n"); //$NON-NLS-1$
buffer.append("bp2->mi = 3; // OK: access through a pointer to B.\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5869,7 +5868,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("p->i = 1; // OK: B* can be implicitly cast to A*,\n"); //$NON-NLS-1$
buffer.append("// and f has access to i in A\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5940,7 +5939,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("int ef(D&);\n"); //$NON-NLS-1$
buffer.append("int ff(X&);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -5977,7 +5976,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("friend_set(&obj,10);\n"); //$NON-NLS-1$
buffer.append("obj.member_set(10);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6012,7 +6011,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// to declare members of nested class of X\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6041,7 +6040,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class Z {\n"); //$NON-NLS-1$
buffer.append("int v[X::a]; // error: X::a is private\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6058,7 +6057,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("friend char* X::foo(int);\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6075,7 +6074,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("friend void f() { } // definition of global f, a friend of M,\n"); //$NON-NLS-1$
buffer.append("// not the definition of a member function\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6126,7 +6125,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// despite being derived from a friend\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6167,7 +6166,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X *px; // OK, but ::X is found\n"); //$NON-NLS-1$
buffer.append("Z *pz; // error, no Z is found\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6256,7 +6255,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("p1->i = 2; // illformed\n"); //$NON-NLS-1$
buffer.append("p2->i = 3; // illformed\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6299,7 +6298,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// D::f() is invoked\n"); //$NON-NLS-1$
buffer.append("pd->f(); //error: D::f() is private\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6320,7 +6319,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("class C : public A, public B {\n"); //$NON-NLS-1$
buffer.append("void f() { W::f(); } // OK\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6361,7 +6360,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("return p->y; // error: I::y is private\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6392,7 +6391,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("C::B *t; // error, C::B is inaccessible\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6411,7 +6410,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("C(); //declares the constructor\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("C::C() { } // defines the constructor\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6446,7 +6445,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("cout << cobj.c * 100 // value of cobj.c is unspecified\n"); //$NON-NLS-1$
buffer.append("<< '\n';\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6485,7 +6484,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X b = f(X(2));\n"); //$NON-NLS-1$
buffer.append("a = f(a);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6516,7 +6515,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("C obj1;\n"); //$NON-NLS-1$
buffer.append("const C& cr = C(16)+C(23);\n"); //$NON-NLS-1$
buffer.append("C obj2;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6554,7 +6553,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// a.operator X().operator int() not tried\n"); //$NON-NLS-1$
buffer.append("int c = X(a); // OK: a.operator X().operator int()\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6597,7 +6596,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6632,7 +6631,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("a = 2; // a = X(2)\n"); //$NON-NLS-1$
buffer.append("f(3); // f(X(3))\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6667,7 +6666,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("Z* p = new Z(1); // OK: direct initialization syntax used\n"); //$NON-NLS-1$
buffer.append("Z a4 = (Z)1; // OK: explicit cast used\n"); //$NON-NLS-1$
buffer.append("Z a5 = static_cast<Z>(1); // OK: explicit cast used\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6698,7 +6697,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("i = (int)a;\n"); //$NON-NLS-1$
buffer.append("i = a;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6721,7 +6720,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("if (a) { // ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6762,7 +6761,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B_ptr->B_alias::~B(); // calls Bs destructor\n"); //$NON-NLS-1$
buffer.append("B_ptr->B_alias::~B_alias(); // error, no B_alias in class B\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6799,7 +6798,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(p);\n"); //$NON-NLS-1$
buffer.append("p->X::~X(); //cleanup\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6834,7 +6833,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("new D1[i]; // calls ::operator new[](size_t)\n"); //$NON-NLS-1$
buffer.append("new D1; // illformed: ::operator new(size_t) hidden\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6863,7 +6862,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void operator delete(void*, size_t);\n"); //$NON-NLS-1$
buffer.append("void operator delete[](void*);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -6922,7 +6921,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// copy it into f\n"); //$NON-NLS-1$
buffer.append("complex g = { 1, 2 }; // error; constructor is required\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6961,7 +6960,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("float f;\n"); //$NON-NLS-1$
buffer.append("complex c;\n"); //$NON-NLS-1$
buffer.append("} x = { 99, 88.8, 77.7 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6980,7 +6979,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct B { };\n"); //$NON-NLS-1$
buffer.append("struct C: public A, public B { C(); };\n"); //$NON-NLS-1$
buffer.append("C::C(): global_A() { } // meminitializer for base A\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -6997,7 +6996,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct B: public virtual A { };\n"); //$NON-NLS-1$
buffer.append("struct C: public A, public B { C(); };\n"); //$NON-NLS-1$
buffer.append("C::C(): A() { } // illformed: which A?\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -7026,7 +7025,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("D::D(int a) : B2(a+1), B1(a+2), c(a+3), b(a+4)\n"); //$NON-NLS-1$
buffer.append("{ }\n"); //$NON-NLS-1$
buffer.append("D d(10);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7097,7 +7096,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A a(2); // use V(int)\n"); //$NON-NLS-1$
buffer.append("B b(3); // use V()\n"); //$NON-NLS-1$
buffer.append("C c(4); // use V()\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7124,7 +7123,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const int& r;\n"); //$NON-NLS-1$
buffer.append("X(int i): r(a), b(i), i(i), j(this->i) {}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7179,7 +7178,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// but base C not yet initialized\n"); //$NON-NLS-1$
buffer.append("i(f()) {} // welldefined: bases are all initialized\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7214,7 +7213,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("extern X xobj;\n"); //$NON-NLS-1$
buffer.append("int* p3 = &xobj.i; // OK, X is a POD class\n"); //$NON-NLS-1$
buffer.append("X xobj;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7240,7 +7239,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{ }\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7301,7 +7300,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("v->g(); // v is base of B, the call is welldefined, calls B::g\n"); //$NON-NLS-1$
buffer.append("a->f(); //undefined behavior, as type not a base of B\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7356,7 +7355,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("dynamic_cast<B*>(a); // undefined behavior,\n"); //$NON-NLS-1$
buffer.append("// a has type A*, A not a base of B\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7383,7 +7382,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X a(1); // calls X(int);\n"); //$NON-NLS-1$
buffer.append("X b(a, 0); // calls X(const X&, int);\n"); //$NON-NLS-1$
buffer.append("X c = b; // calls X(const X&, int);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7404,7 +7403,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X(const X&);\n"); //$NON-NLS-1$
buffer.append("X(X&); //OK\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7425,7 +7424,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("const X cx;\n"); //$NON-NLS-1$
buffer.append("X x = cx; // error - X::X(X&) cannot copy cx into x\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7448,7 +7447,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void g() {\n"); //$NON-NLS-1$
buffer.append("S a( f() ); // does not instantiate member template\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -7459,17 +7458,14 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
void h(int (*x)()) { } // illformed: redefinition of h(int())
--End Example]
*/
- public void test12_8s3d() { // TODO assert redefinition problem
+ public void test12_8s3d() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("void h(int());\n"); //$NON-NLS-1$
buffer.append("void h(int (*)()); // redeclaration of h(int())\n"); //$NON-NLS-1$
buffer.append("void h(int x()) { } // definition of h(int())\n"); //$NON-NLS-1$
buffer.append("void h(int (*x)()) { } // illformed: redefinition of h(int())\n"); //$NON-NLS-1$
- try {
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
- assertTrue(false);
- } catch (Exception e) {
- }
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 1);
}
/**
@@ -7484,7 +7480,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct X {\n"); //$NON-NLS-1$
buffer.append("X(const X&, int);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7501,7 +7497,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X(const X&, int);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("X::X(const X& x, int i =0) { }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7530,7 +7526,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("x = cx; // error:\n"); //$NON-NLS-1$
buffer.append("// X::operator=(X&) cannot assign cx into x\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7547,7 +7543,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct A : virtual V { };\n"); //$NON-NLS-1$
buffer.append("struct B : virtual V { };\n"); //$NON-NLS-1$
buffer.append("struct C : B, A { };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7582,7 +7578,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("return t;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("Thing t2 = f();\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7603,7 +7599,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("abs(1); //call abs(int);\n"); //$NON-NLS-1$
buffer.append("abs(1.0); //call abs(double);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7630,7 +7626,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void g() const; // OK: no static g\n"); //$NON-NLS-1$
buffer.append("void g() const volatile; // OK: no static g\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7642,18 +7638,15 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
void f(Int i) { } // error: redefinition of f(int)
--End Example]
*/
- public void test12_1s3a() throws Exception { //TODO better assert of expected redefinition problem
+ public void test12_1s3a() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("typedef int Int;\n"); //$NON-NLS-1$
buffer.append("void f(int i);\n"); //$NON-NLS-1$
buffer.append("void f(Int i); // OK: redeclaration of f(int)\n"); //$NON-NLS-1$
buffer.append("void f(int i) { }\n"); //$NON-NLS-1$
buffer.append("void f(Int i) { } // error: redefinition of f(int)\n"); //$NON-NLS-1$
- try{
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
- } catch ( ParserException e ){
- assertEquals( e.getMessage(), "found IProblemBinding" ); //$NON-NLS-1$
- }
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 1);
}
/**
@@ -7668,7 +7661,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("enum E { a };\n"); //$NON-NLS-1$
buffer.append("void f(int i) { }\n"); //$NON-NLS-1$
buffer.append("void f(E i) { }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7693,7 +7686,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int g(char[5][10]); // same as g(char(*)[10]);\n"); //$NON-NLS-1$
buffer.append("int g(char[7][10]); // same as g(char(*)[10]);\n"); //$NON-NLS-1$
buffer.append("int g(char(*)[20]); // different from g(char(*)[10]);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7712,7 +7705,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int f (const int); // redeclaration of f(int)\n"); //$NON-NLS-1$
buffer.append("int f (int) { } // definition of f(int)\n"); //$NON-NLS-1$
buffer.append("int f (cInt) { } // error: redefinition of f(int)\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7741,7 +7734,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f (1); // OK: call f(int, int)\n"); //$NON-NLS-1$
buffer.append("f (); // Error: f(int, int) or f()?\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -7766,7 +7759,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("public:\n"); //$NON-NLS-1$
buffer.append("int f(char*);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7805,7 +7798,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("pd->B::f(1); //OK\n"); //$NON-NLS-1$
buffer.append("pd->f(\"Ben\"); //OK, calls D::f\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -7844,7 +7837,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("callee(88, 99); // error: only callee(int) in scope\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -7875,7 +7868,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("buffer(int s) { p = new char[size = s]; }\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7906,7 +7899,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("T a = 1; // illformed: T(C(1)) not tried\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7935,7 +7928,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("} a;\n"); //$NON-NLS-1$
buffer.append("int i = a(1); // Calls f1 via pointer returned from\n"); //$NON-NLS-1$
buffer.append("// conversion function\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7974,7 +7967,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// user defined types exist which\n"); //$NON-NLS-1$
buffer.append("// would perform the operation.\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -7999,7 +7992,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A a, b;\n"); //$NON-NLS-1$
buffer.append("a + b; // operator+(a,b) chosen over int(a) + int(b)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8028,7 +8021,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// a conversion to int\n"); //$NON-NLS-1$
buffer.append("float x = a; // ambiguous: both possibilities require conversions,\n"); //$NON-NLS-1$
buffer.append("// and neither is better than the other\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8067,7 +8060,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// &i int* is better than &i const int*\n"); //$NON-NLS-1$
buffer.append("// and c int is better than c short\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8094,7 +8087,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B b;\n"); //$NON-NLS-1$
buffer.append("f(b); //ambiguous because b > C via constructor and\n"); //$NON-NLS-1$
buffer.append("// b -> A via constructor or conversion function.\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8115,7 +8108,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int f(B&);\n"); //$NON-NLS-1$
buffer.append("int i = f(b); // Calls f(B&), an exact match, rather than\n"); //$NON-NLS-1$
buffer.append("// f(A&), a conversion\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8132,7 +8125,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int f(int *);\n"); //$NON-NLS-1$
buffer.append("int i;\n"); //$NON-NLS-1$
buffer.append("int j = f(&i); // Calls f(int *)\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8175,7 +8168,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("a.f(); //CallsX::f() const\n"); //$NON-NLS-1$
buffer.append("b.f(); //Calls X::f()\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8199,7 +8192,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i = f(a); // Calls f(int), because short -> int is\n"); //$NON-NLS-1$
buffer.append("// better than short -> float.\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8222,7 +8215,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int f(A *);\n"); //$NON-NLS-1$
buffer.append("int f(B *);\n"); //$NON-NLS-1$
buffer.append("int i = f(pc); // Calls f(B *)\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8249,7 +8242,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int (*p3)(long) = &X::f; // OK\n"); //$NON-NLS-1$
buffer.append("int (X::*p4)(long) = &X::f; // error: mismatch\n"); //$NON-NLS-1$
buffer.append("int (*p6)(long) = &(X::f); // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8276,7 +8269,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("complex z = a.operator+(b); // complex z = a+b;\n"); //$NON-NLS-1$
buffer.append("void* p = operator new(sizeof(int)*n);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8323,7 +8316,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("dobj1 = dobj2; // calls implicitlydeclared\n"); //$NON-NLS-1$
buffer.append("// D::operator=(const D&)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8368,7 +8361,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("operator++(b); //explicit call: like ++b;\n"); //$NON-NLS-1$
buffer.append("operator++(b, 0); // explicit call: like b++;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8395,7 +8388,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int& ri = i; // error: nonconst reference bound to temporary\n"); //$NON-NLS-1$
buffer.append("const int& cri = i; // OK: const reference bound to temporary\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8410,7 +8403,33 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<double d> class X; // error\n"); //$NON-NLS-1$
buffer.append("template<double* pd> class Y; // OK\n"); //$NON-NLS-1$
buffer.append("template<double& rd> class Z; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
+ }
+
+ /**
+ [--Start Example(CPP 14.1-8):
+ template<int *a> struct R { };
+ template<int b[5]> struct S { };
+ int *p;
+ R<p> w; // OK
+ S<p> x; // OK due to parameter adjustment
+ int v[5];
+ R<v> y; // OK due to implicit argument conversion
+ S<v> z; // OK due to both adjustment and conversion
+ --End Example]
+ */
+ public void test14_1s8() throws Exception { // TODO raised bug 90668
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<int *a> struct R { };\n"); //$NON-NLS-1$
+ buffer.append("template<int b[5]> struct S { };\n"); //$NON-NLS-1$
+ buffer.append("int *p;\n"); //$NON-NLS-1$
+ buffer.append("R<p> w; // OK\n"); //$NON-NLS-1$
+ buffer.append("S<p> x; // OK due to parameter adjustment\n"); //$NON-NLS-1$
+ buffer.append("int v[5];\n"); //$NON-NLS-1$
+ buffer.append("R<v> y; // OK due to implicit argument conversion\n"); //$NON-NLS-1$
+ buffer.append("S<v> z; // OK due to both adjustment and conversion\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8423,7 +8442,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T1, class T2 = int> class A;\n"); //$NON-NLS-1$
buffer.append("template<class T1 = int, class T2> class A;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8434,7 +8453,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test14_1s10b() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T1 = int, class T2 = int> class A;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8445,7 +8464,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test14_1s11() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T1 = int, class T2> class B; // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8458,7 +8477,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T = int> class X;\n"); //$NON-NLS-1$
buffer.append("template<class T = int> class X { }; // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8471,7 +8490,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template<int i = (3 > 4) > // OK\n"); //$NON-NLS-1$
buffer.append("class Y { };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8490,7 +8509,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<class T> class Y { };\n"); //$NON-NLS-1$
buffer.append("Y< X<1> > x3; // OK\n"); //$NON-NLS-1$
buffer.append("Y<X<6>> 1> > x4; // OK: Y< X< (6>>1) > >\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8531,7 +8550,31 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("T::template adjust<100>();\n"); //$NON-NLS-1$
buffer.append("// OK: < starts explicit qualification\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
+ }
+
+ /**
+ [--Start Example(CPP 14.3-5):
+ template<class T> struct A {
+ ~A();
+ };
+ void f(A<int>* p, A<int>* q) {
+ p->A<int>::~A(); // OK: destructor call
+ q->A<int>::~A<int>(); // OK: destructor call
+ }
+ --End Example]
+ */
+ public void test14_3s5() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
+ buffer.append("~A();\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("void f(A<int>* p, A<int>* q) {\n"); //$NON-NLS-1$
+ buffer.append("p->A<int>::~A(); // OK: destructor call\n"); //$NON-NLS-1$
+ buffer.append("q->A<int>::~A<int>(); // OK: destructor call\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8576,7 +8619,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("v1[3] = 7;\n"); //$NON-NLS-1$
buffer.append("v2[3] = v3.elem(4) = dcomplex(7,8);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8607,7 +8650,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// OK: even though Y::S is private\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("X<Y::S> y; // error: S not accessible\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8630,7 +8673,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X<S> x3; // error: local type used as templateargument\n"); //$NON-NLS-1$
buffer.append("X<S*> x4; // error: pointer to local type used as templateargument\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8651,7 +8694,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int function();\n"); //$NON-NLS-1$
buffer.append("A<function> a; // illformed: would declare A<function>::t\n"); //$NON-NLS-1$
buffer.append("// as a static member function\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8688,7 +8731,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// so c.y.x has type int\n"); //$NON-NLS-1$
buffer.append("// V<int*> within C<A> uses the partial specialization,\n"); //$NON-NLS-1$
buffer.append("// so c.z.x has type long\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8703,7 +8746,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<class E, int size> class buffer { };\n"); //$NON-NLS-1$
buffer.append("buffer<char,2*512> x;\n"); //$NON-NLS-1$
buffer.append("buffer<char,1024> y;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8722,7 +8765,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("list<int,&error_handler2> x2;\n"); //$NON-NLS-1$
buffer.append("list<int,&error_handler2> x3;\n"); //$NON-NLS-1$
buffer.append("list<char,&error_handler2> x4;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8749,7 +8792,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("T& elem(int i) { return v[i]; }\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8768,7 +8811,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f2();\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("template<class T2, class T1> void A<T2,T1>::f1() { } // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8805,7 +8848,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("if (i<0 || sz<=i) error(\"Array: range error\");\n"); //$NON-NLS-1$
buffer.append("return v[i];\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8822,7 +8865,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("Array<dcomplex> v2(30);\n"); //$NON-NLS-1$
buffer.append("v1[3] = 7; // Array<int>::operator[]()\n"); //$NON-NLS-1$
buffer.append("v2[3] = dcomplex(7,8); // Array<dcomplex>::operator[]()\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8843,7 +8886,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A<int>::B* b1; // OK: requires A to be defined but not A::B\n"); //$NON-NLS-1$
buffer.append("template<class T> class A<T>::B { };\n"); //$NON-NLS-1$
buffer.append("A<int>::B b2; // OK: requires A::B to be defined\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8872,43 +8915,10 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
- /**
- [--Start Example(CPP 14.5.2-2):
- template <class T> struct A {
- void f(int);
- template <class T2> void f(T2);
- };
- template <> void A<int>::f(int) { } // nontemplate member
- template <> template <> void A<int>::f<>(int) { } // template member
- int main()
- {
- A<char> ac;
- ac.f(1); //nontemplate
- ac.f('c'); //template
- ac.f<>(1); //template
- }
- --End Example]
- */
- public void test14_5_2s2() throws Exception {
- StringBuffer buffer = new StringBuffer();
- buffer.append("template <class T> struct A {\n"); //$NON-NLS-1$
- buffer.append("void f(int);\n"); //$NON-NLS-1$
- buffer.append("template <class T2> void f(T2);\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("template <> void A<int>::f(int) { } // nontemplate member\n"); //$NON-NLS-1$
- buffer.append("template <> template <> void A<int>::f<>(int) { } // template member\n"); //$NON-NLS-1$
- buffer.append("int main()\n"); //$NON-NLS-1$
- buffer.append("{\n"); //$NON-NLS-1$
- buffer.append("A<char> ac;\n"); //$NON-NLS-1$
- buffer.append("ac.f(1); //nontemplate\n"); //$NON-NLS-1$
- buffer.append("ac.f('c'); //template\n"); //$NON-NLS-1$
- buffer.append("ac.f<>(1); //template\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- }
+
/**
[--Start Example(CPP 14.5.2-4):
@@ -8932,7 +8942,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f(int i) { f<>(i); } // overriding function that calls\n"); //$NON-NLS-1$
buffer.append("// the template instantiation\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -8967,7 +8977,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("ip = a.operator int*(); // explicit call to template operator\n"); //$NON-NLS-1$
buffer.append("// A::operator int*()\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -8985,7 +8995,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("template<class T> T X<T>::s = 0;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9024,7 +9034,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9041,7 +9051,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<class T> friend class B; // OK\n"); //$NON-NLS-1$
buffer.append("template<class T> friend void f(T){ } // OK\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9062,7 +9072,33 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("template<class T> struct A { X::Y ab; }; // OK\n"); //$NON-NLS-1$
buffer.append("template<class T> struct A<T*> { X::Y ab; }; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
+ }
+
+ /**
+ [--Start Example(CPP 14.5.3-6):
+ template<class T> struct A {
+ struct B { };
+ void f();
+ };
+ class C {
+ template<class T> friend struct A<T>::B;
+ template<class T> friend void A<T>::f();
+ };
+ --End Example]
+ */
+ public void test14_5_3s6() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
+ buffer.append("struct B { };\n"); //$NON-NLS-1$
+ buffer.append("void f();\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("class C {\n"); //$NON-NLS-1$
+ buffer.append("template<class T> friend struct A<T>::B;\n"); //$NON-NLS-1$
+ buffer.append("template<class T> friend void A<T>::f();\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9081,7 +9117,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<class T1, class T2, int I> class A<T1*, T2, I> { }; // #3\n"); //$NON-NLS-1$
buffer.append("template<class T> class A<int, T*, 5> { }; // #4\n"); //$NON-NLS-1$
buffer.append("template<class T1, class T2, int I> class A<T1, T2*, I> { }; // #5\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9094,7 +9130,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template <int I, int J> struct B {};\n"); //$NON-NLS-1$
buffer.append("template <int I> struct B<I, I> {}; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9121,7 +9157,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("A<int, int*, 1> a2; // uses #2, T is int, I is 1\n"); //$NON-NLS-1$
buffer.append("A<int, char*, 5> a3; // uses #4, T is char\n"); //$NON-NLS-1$
buffer.append("A<int, char*, 1> a4; // uses #5, T1 is int, T2 is char, I is 1\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9136,32 +9172,13 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
*/
public void test14_5_4_1s2b() throws Exception {
StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T1, class T2, int I> class A { }; // #1\n"); //$NON-NLS-1$
- buffer.append("template<class T, int I> class A<T, T*, I> { }; // #2\n"); //$NON-NLS-1$
+ buffer.append("template<class T1, class T2, int I> class A { }; // #1\n"); //$NON-NLS-1$
+ buffer.append("template<class T, int I> class A<T, T*, I> { }; // #2\n"); //$NON-NLS-1$
buffer.append("template<class T1, class T2, int I> class A<T1*, T2, I> { }; // #3\n"); //$NON-NLS-1$
- buffer.append("template<class T> class A<int, T*, 5> { }; // #4\n"); //$NON-NLS-1$
+ buffer.append("template<class T> class A<int, T*, 5> { }; // #4\n"); //$NON-NLS-1$
buffer.append("template<class T1, class T2, int I> class A<T1, T2*, I> { }; // #5\n"); //$NON-NLS-1$
- buffer.append("A<int*, int*, 2> a5; // ambiguous: matches #3 and #5\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
- }
-
- /**
- [--Start Example(CPP 14.5.4.2-2):
- template<int I, int J, class T> class X { };
- template<int I, int J> class X<I, J, int> { }; // #1
- template<int I> class X<I, I, int> { }; // #2
- template<int I, int J> void f(X<I, J, int>); // #A
- template<int I> void f(X<I, I, int>); // #B
- --End Example]
- */
- public void test14_5_4_2s2() throws Exception {
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<int I, int J, class T> class X { };\n"); //$NON-NLS-1$
- buffer.append("template<int I, int J> class X<I, J, int> { }; // #1\n"); //$NON-NLS-1$
- buffer.append("template<int I> class X<I, I, int> { }; // #2\n"); //$NON-NLS-1$
- buffer.append("template<int I, int J> void f(X<I, J, int>); // #A\n"); //$NON-NLS-1$
- buffer.append("template<int I> void f(X<I, I, int>); // #B\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ buffer.append("A<int*, int*, 2> a5; // ambiguous: matches #3 and #5 : expect problem \n"); //$NON-NLS-1$
+ parse(buffer.toString(), ParserLanguage.CPP, true, 1);
}
/**
@@ -9224,7 +9241,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("a2.f(); //illformed, no definition of f for A<T,2>\n"); //$NON-NLS-1$
buffer.append("// the primary template is not used here\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9237,10 +9254,57 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class Array { };\n"); //$NON-NLS-1$
buffer.append("template<class T> void sort(Array<T>&);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
+ [--Start Example(CPP 14.5.5.1-1a):
+ // file1.c
+ template<class T>
+ void f(T*);
+ void g(int* p) {
+ f(p); // call
+ // f<int>(int*)
+ }
+ }
+ --End Example]
+ */
+ public void test14_5_5_1s1a() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("// file1.c \n"); //$NON-NLS-1$
+ buffer.append("template<class T>\n"); //$NON-NLS-1$
+ buffer.append("void f(T*);\n"); //$NON-NLS-1$
+ buffer.append("void g(int* p) { \n"); //$NON-NLS-1$
+ buffer.append("f(p); // call \n"); //$NON-NLS-1$
+ buffer.append("// f<int>(int*) \n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
+ }
+ /**
+ [--Start Example(CPP 14.5.5.1-1b):
+ // file2.c
+ template<class T>
+ void f(T);
+ void h(int* p) {
+ f(p); // call
+ // f<int*>(int*)
+ }
+ --End Example]
+ */
+ public void test14_5_5_1s1b() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("// file2.c\n"); //$NON-NLS-1$
+ buffer.append("template<class T>\n"); //$NON-NLS-1$
+ buffer.append("void f(T);\n"); //$NON-NLS-1$
+ buffer.append("void h(int* p) {\n"); //$NON-NLS-1$
+ buffer.append("f(p); // call\n"); //$NON-NLS-1$
+ buffer.append("// f<int*>(int*)\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
+ }
+ /**
[--Start Example(CPP 14.5.5.2-5):
template<class T> struct A { A(); };
template<class T> void f(T);
@@ -9282,7 +9346,35 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("const A<int> z2;\n"); //$NON-NLS-1$
buffer.append("h(z2); // h(const T&) is called because h(A<T>&) is not callable\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
+ }
+
+ /**
+ [--Start Example(CPP 14.5.5.2-6):
+ template<class T> void f(T); // #1
+ template<class T> void f(T*, int=1); // #2
+ template<class T> void g(T); // #3
+ template<class T> void g(T*, ...); // #4
+ int main() {
+ int* ip;
+ f(ip); //calls #2
+ g(ip); //calls #4
+ }
+ --End Example]
+ */
+ public void test14_5_5_2s6() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T); // #1\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void f(T*, int=1); // #2\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void g(T); // #3\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void g(T*, ...); // #4\n"); //$NON-NLS-1$
+ buffer.append("int main() {\n"); //$NON-NLS-1$
+ buffer.append("int* ip;\n"); //$NON-NLS-1$
+ buffer.append("f(ip); //calls #2\n"); //$NON-NLS-1$
+ buffer.append("g(ip); //calls #4\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9331,7 +9423,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// no visible declarations of B and a8\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9356,7 +9448,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("typename T::X x; // illformed: finds the data member X\n"); //$NON-NLS-1$
buffer.append("// not the member type X\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9377,7 +9469,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f(A<T>::B); // illformed: typename required before A<T>::B\n"); //$NON-NLS-1$
buffer.append("typename A::B g(); // OK\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9420,7 +9512,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// not instantiated\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9459,7 +9551,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9502,7 +9594,28 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// by two calls of f(int)\n"); //$NON-NLS-1$
buffer.append("g('a'); //will cause three calls of f(char)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
+ }
+
+
+ /**
+ [--Start Example(CPP 14.6.1-1):
+ template<class T> class X {
+ X* p; // meaning X<T>
+ X<T>* p2;
+ X<int>* p3;
+ };
+ --End Example]
+ */
+ public void test14_6_1s1() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
+ buffer.append("X* p; // meaning X<T>\n"); //$NON-NLS-1$
+ buffer.append("X<T>* p2;\n"); //$NON-NLS-1$
+ buffer.append("X<int>* p3;\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9521,7 +9634,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("Y* p; // meaning Y<int>\n"); //$NON-NLS-1$
buffer.append("Y<char>* q; // meaning Y<char>\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9534,7 +9647,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class X : public Array<T> { };\n"); //$NON-NLS-1$
buffer.append("template<class T> class Y : public T { };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9557,7 +9670,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("template<class X> class X; // error: templateparameter redeclared\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9580,7 +9693,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<class B> void A<B>::f() {\n"); //$NON-NLS-1$
buffer.append("B b; // As B, not the template parameter\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9607,7 +9720,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B b; // As B\n"); //$NON-NLS-1$
buffer.append("a b; // error: As a isnt a type name\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9630,7 +9743,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("pb->j++;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9665,7 +9778,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("Y* p; // Y<T>\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("Y<A> ya;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9702,7 +9815,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("void g(int); // not in scope at the point of the template\n"); //$NON-NLS-1$
buffer.append("// definition, not considered for the call g(1)\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9741,44 +9854,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// in its namespace (global scope)\n"); //$NON-NLS-1$
buffer.append("b = gcd(3,4); // illformed; gcd is not visible\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
- }
-
- /**
- [--Start Example(CPP 14.7-3):
- template<class T = int> struct A {
- static int x;
- };
- template<class U> void g(U) { }
- template<> struct A<double> { }; // specialize for T == double
- template<> struct A<> { }; // specialize for T == int
- template<> void g(char) { } // specialize for U == char
- // U is deduced from the parameter type
- template<> void g<int>(int) { } // specialize for U == int
- template<> int A<char>::x = 0; // specialize for T == char
- template<class T = int> struct B {
- static int x;
- };
- template<> int B<>::x = 1; // specialize for T == int
- --End Example]
- */
- public void test14_7s3() throws Exception {
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T = int> struct A {\n"); //$NON-NLS-1$
- buffer.append("static int x;\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("template<class U> void g(U) { }\n"); //$NON-NLS-1$
- buffer.append("template<> struct A<double> { }; // specialize for T == double\n"); //$NON-NLS-1$
- buffer.append("template<> struct A<> { }; // specialize for T == int\n"); //$NON-NLS-1$
- buffer.append("template<> void g(char) { } // specialize for U == char\n"); //$NON-NLS-1$
- buffer.append("// U is deduced from the parameter type\n"); //$NON-NLS-1$
- buffer.append("template<> void g<int>(int) { } // specialize for U == int\n"); //$NON-NLS-1$
- buffer.append("template<> int A<char>::x = 0; // specialize for T == char\n"); //$NON-NLS-1$
- buffer.append("template<class T = int> struct B {\n"); //$NON-NLS-1$
- buffer.append("static int x;\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("template<> int B<>::x = 1; // specialize for T == int\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -9802,7 +9878,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X<int> aa;\n"); //$NON-NLS-1$
buffer.append("X<char*> bb;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9843,7 +9919,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("p->g(); //instantiation of class Z<char> required, and\n"); //$NON-NLS-1$
buffer.append("// instantiation of Z<char>::g() required\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9874,7 +9950,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// convert D<char>* to B<char>*\n"); //$NON-NLS-1$
buffer.append("delete ppp; // instantiation of D<double> required\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9887,7 +9963,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class X;\n"); //$NON-NLS-1$
buffer.append("X<char> ch; // error: definition of X required\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9931,7 +10007,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -9956,34 +10032,29 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(a, b); // default argument z = zdef(T()) instantiated\n"); //$NON-NLS-1$
buffer.append("f(a); //illformed; ydef is not declared\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
- [--Start Example(CPP 14.7.2-2):
- template<class T> class Array { void mf(); };
- template class Array<char>;
- template void Array<int>::mf();
- template<class T> void sort(Array<T>& v) { }
- template void sort(Array<char>&); // argument is deduced here
- namespace N {
- template<class T> void f(T&) { }
- }
- template void N::f<int>(int&);
+ [--Start Example(CPP 14.7.1-14):
+ template<class T> class X {
+ X<T>* p; // OK
+ X<T*> a; // implicit generation of X<T> requires
+ // the implicit instantiation of X<T*> which requires
+ // the implicit instantiation of X<T**> which ...
+ };
--End Example]
*/
- public void test14_7_2s2() throws Exception {
+ public void test14_7_1s14() throws Exception {
StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> class Array { void mf(); };\n"); //$NON-NLS-1$
- buffer.append("template class Array<char>;\n"); //$NON-NLS-1$
- buffer.append("template void Array<int>::mf();\n"); //$NON-NLS-1$
- buffer.append("template<class T> void sort(Array<T>& v) { }\n"); //$NON-NLS-1$
- buffer.append("template void sort(Array<char>&); // argument is deduced here\n"); //$NON-NLS-1$
- buffer.append("namespace N {\n"); //$NON-NLS-1$
- buffer.append("template<class T> void f(T&) { }\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- buffer.append("template void N::f<int>(int&);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
+ buffer.append("X<T>* p; // OK\n"); //$NON-NLS-1$
+ buffer.append("X<T*> a; // implicit generation of X<T> requires\n"); //$NON-NLS-1$
+ buffer.append("// the implicit instantiation of X<T*> which requires\n"); //$NON-NLS-1$
+ buffer.append("// the implicit instantiation of X<T**> which ...\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10012,7 +10083,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template class N::Y<char*>; // OK: explicit instantiation in namespace N\n"); //$NON-NLS-1$
buffer.append("template void N::Y<double>::mf(); // OK: explicit instantiation\n"); //$NON-NLS-1$
buffer.append("// in namespace N\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10027,7 +10098,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("char* p = 0;\n"); //$NON-NLS-1$
buffer.append("template<class T> T g(T = &p);\n"); //$NON-NLS-1$
buffer.append("template int g<int>(int); // OK even though &p isnt an int.\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10042,7 +10113,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<> class X<int> { }; // error: X not a template\n"); //$NON-NLS-1$
buffer.append("template<class T> class X;\n"); //$NON-NLS-1$
buffer.append("template<> class X<char*> { }; // OK: X is a template\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10079,7 +10150,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// explicit specialization syntax not used for a member of\n"); //$NON-NLS-1$
buffer.append("// explicitly specialized class template specialization\n"); //$NON-NLS-1$
buffer.append("void A<int>::f() { }\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10108,7 +10179,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<> void sort<String>(Array<String>& v); // error: specialization\n"); //$NON-NLS-1$
buffer.append("// after use of primary template\n"); //$NON-NLS-1$
buffer.append("template<> void sort<>(Array<char*>& v); // OK: sort<char*> not yet used\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10137,7 +10208,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("template<> class N::Y<double> { }; // OK: specialization\n"); //$NON-NLS-1$
buffer.append("// in same namespace\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10154,26 +10225,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<> class X<int>;\n"); //$NON-NLS-1$
buffer.append("X<int>* p; // OK: pointer to declared class X<int>\n"); //$NON-NLS-1$
buffer.append("X<int> x; // error: object of incomplete class X<int>\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
- }
-
- /**
- [--Start Example(CPP 14.7.3-11):
- template<class T> class Array { };
- template<class T> void sort(Array<T>& v);
- // explicit specialization for sort(Array<int>&)
- // with deduces templateargument of type int
- template<> void sort(Array<int>&);
- --End Example]
- */
- public void test14_7_3s11() throws Exception {
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> class Array { };\n"); //$NON-NLS-1$
- buffer.append("template<class T> void sort(Array<T>& v);\n"); //$NON-NLS-1$
- buffer.append("// explicit specialization for sort(Array<int>&)\n"); //$NON-NLS-1$
- buffer.append("// with deduces templateargument of type int\n"); //$NON-NLS-1$
- buffer.append("template<> void sort(Array<int>&);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10192,7 +10244,25 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template <> void f(int*); // Ambiguous\n"); //$NON-NLS-1$
buffer.append("template <> void f<int>(int*); // OK\n"); //$NON-NLS-1$
buffer.append("template <> void f(int); // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 1);
+ }
+
+ /**
+ [--Start Example(CPP 14.7.3-14):
+ template<class T> void f(T) { }
+ template<class T> inline T g(T) { }
+ template<> inline void f<>(int) { } // OK: inline
+ template<> int g<>(int) { } // OK: not inline
+ --End Example]
+ */
+ public void test14_7_3s14() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T) { }\n"); //$NON-NLS-1$
+ buffer.append("template<class T> inline T g(T) { }\n"); //$NON-NLS-1$
+ buffer.append("template<> inline void f<>(int) { } // OK: inline\n"); //$NON-NLS-1$
+ buffer.append("template<> int g<>(int) { } // OK: not inline\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10227,7 +10297,37 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<class Y> template<>\n"); //$NON-NLS-1$
buffer.append("void A<Y>::B<double>::mf2() { }; // illformed; B<double> is specialized but\n"); //$NON-NLS-1$
buffer.append("// its enclosing class template A is not\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
+ }
+
+ /**
+ [--Start Example(CPP 14.8-2):
+ template<class T> void f(T* p)
+ {
+ static T s;
+ // ...
+ };
+ void g(int a, char* b)
+ {
+ f(&a); //call f<int>(int*)
+ f(&b); //call f<char*>(char**)
+ }
+ --End Example]
+ */
+ public void test14_8s2() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T* p)\n"); //$NON-NLS-1$
+ buffer.append("{\n"); //$NON-NLS-1$
+ buffer.append("static T s;\n"); //$NON-NLS-1$
+ buffer.append("// ...\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("void g(int a, char* b)\n"); //$NON-NLS-1$
+ buffer.append("{\n"); //$NON-NLS-1$
+ buffer.append("f(&a); //call f<int>(int*)\n"); //$NON-NLS-1$
+ buffer.append("f(&b); //call f<char*>(char**)\n"); //$NON-NLS-1$
+ buffer.append("}\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10260,7 +10360,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i = convert<int,double>(d); // int convert(double)\n"); //$NON-NLS-1$
buffer.append("char c = convert<char,double>(d); // char convert(double)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10281,7 +10381,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i = f<int>(5.6); // Y is deduced to be double\n"); //$NON-NLS-1$
buffer.append("int j = f(5.6); // illformed: X cannot be deduced\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10308,7 +10408,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// Z is deduced to be double\n"); //$NON-NLS-1$
buffer.append("f(\"aa\",3.0); //error: X cannot be deduced\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10349,7 +10449,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f<3>(b); //wellformed because C::f is visible; then\n"); //$NON-NLS-1$
buffer.append("// A::f is found by argument dependent lookup\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10378,7 +10478,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int i = convert<int>(d); // call convert<int,double>(double)\n"); //$NON-NLS-1$
buffer.append("int c = convert<char>(d); // call convert<char,double>(double)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10393,7 +10493,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template <class T> int f(T[5]);\n"); //$NON-NLS-1$
buffer.append("int I = f<int>(0);\n"); //$NON-NLS-1$
buffer.append("int j = f<void>(0); // invalid array\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10406,7 +10506,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template <class T> int f(int T::*);\n"); //$NON-NLS-1$
buffer.append("int i = f<int>(0);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 2);
}
/**
@@ -10419,7 +10519,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("template <class T, T*> int f(int);\n"); //$NON-NLS-1$
buffer.append("int i2 = f<int,1>(0); // cant conv 1 to int*\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 1);
}
/**
@@ -10436,7 +10536,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template <signed char> int f(int);\n"); //$NON-NLS-1$
buffer.append("int i1 = f<1>(0); // ambiguous\n"); //$NON-NLS-1$
buffer.append("int i2 = f<1000>(0); // ambiguous\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10465,7 +10565,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(a,a); //OK: T is A\n"); //$NON-NLS-1$
buffer.append("f(b,b); //OK: T is B\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10494,7 +10594,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(g2); //error: T could be char or int\n"); //$NON-NLS-1$
buffer.append("f(g3); //error: U could be char or float\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10515,7 +10615,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(v); //error: argument for templateparameter\n"); //$NON-NLS-1$
buffer.append("//T cannot be deduced\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10548,7 +10648,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f2<10>(v); //OK\n"); //$NON-NLS-1$
buffer.append("f3(v); //OK: i deduced to be 10\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10583,7 +10683,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B<1> b;\n"); //$NON-NLS-1$
buffer.append("g(b); //OK: cvqualifiers are ignored on template parameter types\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10616,7 +10716,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(&h); //OK: void h(char,int) is a unique match\n"); //$NON-NLS-1$
buffer.append("f(&foo); //error: type deduction fails because foo is a template\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10639,7 +10739,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(); //error: cannot deduce T\n"); //$NON-NLS-1$
buffer.append("f<int>(); //OK: call f<int>(5,7)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10662,7 +10762,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("char m2 = max(c,d); // max(char a, char b)\n"); //$NON-NLS-1$
buffer.append("int m3 = max(a,c); // error: cannot generate max(int,char)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -10687,7 +10787,27 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("char m2 = max(c,d); // max(char a, char b)\n"); //$NON-NLS-1$
buffer.append("int m3 = max(a,c); // resolved\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
+ }
+
+
+ /**
+ [--Start Example(CPP 14.8.3-6):
+ template<class T> void f(T); // declaration
+ void g()
+ {
+ f("Annemarie"); // call of f<const char*>
+ }
+ --End Example]
+ */
+ public void test14_8_3s6() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T); // declaration \n"); //$NON-NLS-1$
+ buffer.append("void g() { \n"); //$NON-NLS-1$
+ buffer.append(" f(\"Annemarie\"); // call of f<const char*> \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10720,7 +10840,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("} catch(...) { // handler 1\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10765,7 +10885,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// handles exceptions thrown from the ctorinitializer\n"); //$NON-NLS-1$
buffer.append("// and from the constructor function body\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10814,7 +10934,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// handle exceptions of type Overflow here\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10843,7 +10963,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// other handler\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10882,7 +11002,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10897,7 +11017,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f() throw(int); // OK\n"); //$NON-NLS-1$
buffer.append("void (*fp)() throw (int); // OK\n"); //$NON-NLS-1$
buffer.append("void g(void pfa() throw(int)); // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10908,7 +11028,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test15_4s1b() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("typedef int (*pf)() throw(int); // illformed\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10933,7 +11053,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("void f(); // illformed\n"); //$NON-NLS-1$
buffer.append("void g() throw (int); // OK\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10958,7 +11078,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("pf1 = pf2; // OK: pf1 is less restrictive\n"); //$NON-NLS-1$
buffer.append("pf2 = pf1; // error: pf2 is more restrictive\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -10989,7 +11109,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("if (n) throw Z(); // also OK\n"); //$NON-NLS-1$
buffer.append("throw W(); // will call unexpected()\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11008,7 +11128,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{\n"); //$NON-NLS-1$
buffer.append("// f(); //OK\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -11047,7 +11167,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// Implicit declaration of D::D(const D&) throw();\n"); //$NON-NLS-1$
buffer.append("// Implicit declaration of D::~D() throw (X,Y);\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -11070,7 +11190,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("#else\n"); //$NON-NLS-1$
buffer.append("#define INCFILE \"versN.h\"\n"); //$NON-NLS-1$
buffer.append("#endif\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
// second pass of C++ spec is to get [Note: ]
@@ -11097,7 +11217,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("a = ((a + 32765) + b);\n"); //$NON-NLS-1$
buffer.append("a = (a + (b + 32765));\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11114,7 +11234,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("enum E { z = 16 };\n"); //$NON-NLS-1$
buffer.append("int b[X::z]; // OK\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11139,7 +11259,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("f(a);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11176,7 +11296,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("F f;\n"); //$NON-NLS-1$
buffer.append("f.A::a = 1; // OK, A::a is a member of F\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11197,7 +11317,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("// may be statically initialized to 0.0 or\n"); //$NON-NLS-1$
buffer.append("// dynamically initialized to 1.0\n"); //$NON-NLS-1$
buffer.append("double d1 = fd(); // may be initialized statically to 1.0\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11220,7 +11340,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("*pcc = &c;\n"); //$NON-NLS-1$
buffer.append("*pc = 'C'; //2: modifies a const object\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11245,7 +11365,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int S::* pm = &S::i; // pm refers to mutable member S::i\n"); //$NON-NLS-1$
buffer.append("cs.*pm = 88; // illformed: cs is a const object\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11288,7 +11408,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("g(); //okay: name g refers to the same entity\n"); //$NON-NLS-1$
buffer.append("h(); //error: name h found in two namespaces\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -11305,7 +11425,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("{\n"); //$NON-NLS-1$
buffer.append("//printf(\"a = %d\",a);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11320,7 +11440,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int a;\n"); //$NON-NLS-1$
buffer.append("const int b = a;\n"); //$NON-NLS-1$
buffer.append("int c = b;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11347,7 +11467,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("struct D2 : D {\n"); //$NON-NLS-1$
buffer.append("void f();\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11380,7 +11500,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B* bp = new D;\n"); //$NON-NLS-1$
buffer.append("delete bp; //1: uses D::operator delete(void*)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -11417,7 +11537,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B* bp = new D[i];\n"); //$NON-NLS-1$
buffer.append("delete[] bp; // undefined behavior\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -11448,7 +11568,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("operator+ (a,a); // ERROR - global operator hidden by member\n"); //$NON-NLS-1$
buffer.append("a + a; // OK - calls global operator+\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11471,7 +11591,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("C<V> value;\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11494,7 +11614,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("T t1 = i; // templateparameters T and i\n"); //$NON-NLS-1$
buffer.append("::T t2 = ::i; // global namespace members T and i\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11517,7 +11637,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X<&s.m> x4; // error: address of nonstatic member\n"); //$NON-NLS-1$
buffer.append("X<&s.s> x5; // error: &S::s must be used\n"); //$NON-NLS-1$
buffer.append("X<&S::s> x6; // OK: address of static member\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11542,7 +11662,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("X<int,\"Studebaker\"> x1; // error: string literal as template argument\n"); //$NON-NLS-1$
buffer.append("char p[] = \"Vivisectionist\";\n"); //$NON-NLS-1$
buffer.append("X<int,p> x2; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -11559,7 +11679,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("B<1> b2; // error: temporary would be required for template argument\n"); //$NON-NLS-1$
buffer.append("int c = 1;\n"); //$NON-NLS-1$
buffer.append("B<c> b1; // OK\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
/**
@@ -11570,7 +11690,35 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
public void test14_5_4s5() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T1, class T2, int I> class A<T1, T2, I> { }; // error\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, false, false);
+ parse(buffer.toString(), ParserLanguage.CPP, false, 0);
+ }
+
+ /**
+ [--Start Example(CPP 14.5.4-6):
+ template<class T> struct A {
+ class C {
+ template<class T2> struct B { };
+ };
+ };
+ // partial specialization of A<T>::C::B<T2>
+ template<class T> template<class T2>
+ struct A<T>::C::B<T2*> { };
+ A<short>::C::B<int*> absip; // uses partial specialization
+ --End Example]
+ */
+ public void test14_5_4s6() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
+ buffer.append("class C {\n"); //$NON-NLS-1$
+ buffer.append("template<class T2> struct B { };\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("};\n"); //$NON-NLS-1$
+ buffer.append("// partial specialization of A<T>::C::B<T2>\n"); //$NON-NLS-1$
+ buffer.append("template<class T> template<class T2>\n"); //$NON-NLS-1$
+ buffer.append("struct A<T>::C::B<T2*> { };\n"); //$NON-NLS-1$
+ buffer.append("A<short>::C::B<int*> absip; // uses partial specialization\n"); //$NON-NLS-1$
+
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11585,7 +11733,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("template<class T> void f();\n"); //$NON-NLS-1$
buffer.append("template<int I> void f(); // OK: overloads the first template\n"); //$NON-NLS-1$
buffer.append("// distinguishable with an explicit template argument list\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11602,34 +11750,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
buffer.append("int f(int); // #2\n"); //$NON-NLS-1$
buffer.append("int k = f(1); // uses #2\n"); //$NON-NLS-1$
buffer.append("int l = f<>(1); // uses #1\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
- }
-
- /**
- [--Start Example(CPP 14.8.1-4):
- template<class T> void f(T);
- class Complex {
- // ...
- Complex(double);
- };
- void g()
- {
- f<Complex>(1); // OK, means f<Complex>(Complex(1))
- }
- --End Example]
- */
- public void test14_8_1s4() throws Exception {
- StringBuffer buffer = new StringBuffer();
- buffer.append("template<class T> void f(T);\n"); //$NON-NLS-1$
- buffer.append("class Complex {\n"); //$NON-NLS-1$
- buffer.append("// ...\n"); //$NON-NLS-1$
- buffer.append("Complex(double);\n"); //$NON-NLS-1$
- buffer.append("};\n"); //$NON-NLS-1$
- buffer.append("void g()\n"); //$NON-NLS-1$
- buffer.append("{\n"); //$NON-NLS-1$
- buffer.append("f<Complex>(1); // OK, means f<Complex>(Complex(1))\n"); //$NON-NLS-1$
- buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
@@ -11642,7 +11763,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("#define TABSIZE 100\n"); //$NON-NLS-1$
buffer.append("int table[TABSIZE];\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.CPP, true, true);
+ parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
}
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecFailingTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecFailingTest.java
index 3575ce73155..d4dabaf1efa 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecFailingTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecFailingTest.java
@@ -56,7 +56,7 @@ public class AST2CSpecFailingTest extends AST2SpecBaseTest {
buffer.append("xglue(HIGH, LOW)\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
assertTrue(false);
} catch (Exception e) {}
}
@@ -104,7 +104,7 @@ public class AST2CSpecFailingTest extends AST2SpecBaseTest {
buffer.append("char c[2][6] = { str(hello), str() };\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
assertTrue(false);
} catch (Exception e) {}
}
@@ -122,7 +122,7 @@ public class AST2CSpecFailingTest extends AST2SpecBaseTest {
buffer.append("int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,),\n"); //$NON-NLS-1$
buffer.append("t(10,,), t(,11,), t(,,12), t(,,) };\n"); //$NON-NLS-1$
try {
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
assertTrue(false);
} catch (Exception e) {}
}
@@ -154,7 +154,7 @@ public class AST2CSpecFailingTest extends AST2SpecBaseTest {
buffer.append("report(x>y, \"x is %d but y is %d\", x, y);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
assertTrue(false);
} catch (Exception e) {}
}
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java
index c976d8be32a..c40207f5725 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java
@@ -29,7 +29,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("#ifdef _ _STDC_IEC_559_ _ /* FE_UPWARD defined */\n"); //$NON-NLS-1$
buffer.append("fesetround(FE_UPWARD);\n"); //$NON-NLS-1$
buffer.append("#endif\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -42,7 +42,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("char i;\n"); //$NON-NLS-1$
buffer.append("int i;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -59,7 +59,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("char c1, c2;\n"); //$NON-NLS-1$
buffer.append("c1 = c1 + c2;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -78,7 +78,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("double d;\n"); //$NON-NLS-1$
buffer.append("f1 = f2 * d;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -99,7 +99,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("d1 = f = 1;\n"); //$NON-NLS-1$
buffer.append("d2 = (float) 1;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -122,7 +122,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("z = x + x * y; // not equivalent toz = x * (1.0 + y);\n"); //$NON-NLS-1$
buffer.append("y = x / 5.0; // not equivalent toy = x * 0.2;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -147,7 +147,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("a = ((a + 32765) + b);\n"); //$NON-NLS-1$
buffer.append("a = (a + (b + 32765));\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -168,7 +168,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("char *p;\n"); //$NON-NLS-1$
buffer.append("sum = sum * 10 - '0' + (*p++ = getchar());\n"); //$NON-NLS-1$
buffer.append("sum = (((sum * 10) - '0') + ((*(p++)) = (getchar())));\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -179,7 +179,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_2_5s28() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("struct tag (* a[5])(float);\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -194,7 +194,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int f(int (*)(), double (*)[3]);\n"); //$NON-NLS-1$
buffer.append("int f(int (*)(char *), double (*)[]);\n"); //$NON-NLS-1$
buffer.append("int f(int (*)(char *), double (*)[3]);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -209,7 +209,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("char x='\\023';\n"); //$NON-NLS-1$
buffer.append("char y='\\0';\n"); //$NON-NLS-1$
buffer.append("char z='\\x13';\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -234,7 +234,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int foo() {\n"); //$NON-NLS-1$
buffer.append("int x=(*pf[f1()]) (f2(), f3() + f4());\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -267,7 +267,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("vs.i; // volatile int\n"); //$NON-NLS-1$
buffer.append("vs.ci; // volatile const int\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -318,7 +318,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("if (sin(u.nf.doublenode) == 0.0)\n"); //$NON-NLS-1$
buffer.append("return 0;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -359,7 +359,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("} u;\n"); //$NON-NLS-1$
buffer.append("return f(&u.s1, &u.s2);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -370,7 +370,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_5_2_5s9() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int *p = (int []){2, 4};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -389,7 +389,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int *p;\n"); //$NON-NLS-1$
buffer.append("p = (int [2]){*p};\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -410,7 +410,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("drawline(&(struct point){.x=1, .y=1},\n"); //$NON-NLS-1$
buffer.append("&(struct point){.x=3, .y=4});\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, false, false);
+ parse(buffer.toString(), ParserLanguage.C, false, 0);
}
/**
@@ -425,7 +425,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int f() {\n"); //$NON-NLS-1$
buffer.append("(const float []){1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6};\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -444,7 +444,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("(char []){\"/tmp/fileXXXXXX\"};\n"); //$NON-NLS-1$
buffer.append("(const char []){\"/tmp/fileXXXXXX\"};\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -459,7 +459,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int f() {\n"); //$NON-NLS-1$
buffer.append("(const char []){\"abc\"} == \"abc\";\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -478,7 +478,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("struct int_list endless_zeros = {0, &endless_zeros};\n"); //$NON-NLS-1$
buffer.append("eval(endless_zeros);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -507,7 +507,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("if (j < 2) goto again;\n"); //$NON-NLS-1$
buffer.append("return p == q && q->i == 1;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -520,7 +520,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("extern void *alloc(size_t);\n"); //$NON-NLS-1$
buffer.append("double *dp = alloc(sizeof *dp);\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -537,7 +537,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int array[5];\n"); //$NON-NLS-1$
buffer.append("int x = sizeof array / sizeof array[0];\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -562,7 +562,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("(*p)[2] = 99; // a[1][2] == 99\n"); //$NON-NLS-1$
buffer.append("n = p - a; // n == 1\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -587,7 +587,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int *ip;\n"); //$NON-NLS-1$
buffer.append("const char *c_cp;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -608,7 +608,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("long l;\n"); //$NON-NLS-1$
buffer.append("l = (c = i);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -633,7 +633,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("*cpp = &c; // valid\n"); //$NON-NLS-1$
buffer.append("*p = 0; // valid\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -656,7 +656,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("offsetof(struct s, d);\n"); //$NON-NLS-1$
buffer.append("offsetof(struct ss, d);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -677,7 +677,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("s1 = malloc(sizeof (struct s) + 64);\n"); //$NON-NLS-1$
buffer.append("s2 = malloc(sizeof (struct s) + 46);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -690,7 +690,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("struct { int n; double d[8]; } *s1;\n"); //$NON-NLS-1$
buffer.append("struct { int n; double d[5]; } *s2;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -715,7 +715,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("if (*cp != burgundy)\n"); //$NON-NLS-1$
buffer.append("return 0;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -734,7 +734,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("struct tnode *left, *right;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("struct tnode s, *sp;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -755,7 +755,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("TNODE *left, *right;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("TNODE s, *sp;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -770,7 +770,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("struct s2;\n"); //$NON-NLS-1$
buffer.append("struct s1 { struct s2 *s2p; }; // D1\n"); //$NON-NLS-1$
buffer.append("struct s2 { struct s1 *s1p; }; // D2\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -781,7 +781,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_3s10() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("extern const volatile int real_time_clock;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -818,7 +818,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("pci = &cs.mem; // valid\n"); //$NON-NLS-1$
buffer.append("pi = a[0]; // invalid: a[0] has type const int *\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -833,7 +833,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int * restrict a;\n"); //$NON-NLS-1$
buffer.append("int * restrict b;\n"); //$NON-NLS-1$
buffer.append("extern int c[];\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -852,7 +852,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("while (n-- > 0)\n"); //$NON-NLS-1$
buffer.append("*p++ = *q++;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -883,7 +883,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("f(50, d + 50, d); // valid\n"); //$NON-NLS-1$
buffer.append("f(50, d + 1, d); // undefined behavior\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -904,7 +904,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("for (i = 0; i < n; i++)\n"); //$NON-NLS-1$
buffer.append("p[i] = q[i] + r[i];\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -937,7 +937,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("p2 = q2; // undefined behavior\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -962,7 +962,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("t.v = malloc(n * sizeof (float));\n"); //$NON-NLS-1$
buffer.append("return t;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, false, false);
+ parse(buffer.toString(), ParserLanguage.C, false, 0);
}
/**
@@ -997,7 +997,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("{\n"); //$NON-NLS-1$
buffer.append("return is_fahr ? cels(temp) : fahr(temp);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1014,7 +1014,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int *const constant_ptr1;\n"); //$NON-NLS-1$
buffer.append("typedef int *int_ptr;\n"); //$NON-NLS-1$
buffer.append("const int_ptr constant_ptr2;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1025,7 +1025,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_5_2s7() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("float fa[11], *afp[17];\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1038,7 +1038,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("extern int *x;\n"); //$NON-NLS-1$
buffer.append("extern int y[];\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1071,7 +1071,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("r = c; // compatible, but defined behavior only if\n"); //$NON-NLS-1$
buffer.append("// n == 6 andm == n+1\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, false, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1118,7 +1118,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("extern int (*r)[m]; // invalid: r has linkage and points to VLA\n"); //$NON-NLS-1$
buffer.append("static int (*q)[m] = &B; // valid: q is a static block pointer to VLA\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1129,7 +1129,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_5_3s16() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int f(void), *fip(), (*pfi)();\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1140,7 +1140,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_5_3s18() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int (*apfi[3])(int *x, int *y);\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1151,7 +1151,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_5_3s19() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int (*fpfi(int (*)(long), int))(int, ...);\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1192,7 +1192,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("// a is a pointer to a VLA with n*m+300 elements\n"); //$NON-NLS-1$
buffer.append("a[i][j] += x;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1217,7 +1217,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("void f2(double a[restrict][5]);\n"); //$NON-NLS-1$
buffer.append("void f3(double a[restrict 3][5]);\n"); //$NON-NLS-1$
buffer.append("void f4(double a[restrict static 3][5]);\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1238,7 +1238,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("extern KLICKSP *metricp;\n"); //$NON-NLS-1$
buffer.append("range x;\n"); //$NON-NLS-1$
buffer.append("range z, *zp;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1251,7 +1251,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("typedef struct s1 { int x; } t1, *tp1;\n"); //$NON-NLS-1$
buffer.append("typedef struct s2 { int x; } t2, *tp2;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1278,7 +1278,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("t f(t (t));\n"); //$NON-NLS-1$
buffer.append("long t;\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1295,7 +1295,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("void (*signal(int, void (*)(int)))(int);\n"); //$NON-NLS-1$
buffer.append("fv *signal(int, fv *);\n"); //$NON-NLS-1$
buffer.append("pfv signal(int, pfv);\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1322,7 +1322,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("for (int i = 1; i < n; i++)\n"); //$NON-NLS-1$
buffer.append("a[i-1] = b[i];\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1335,7 +1335,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("int i = 3.5;\n"); //$NON-NLS-1$
buffer.append("complex c = 5 + 3 * I;\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -1346,7 +1346,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_8s25() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("int x[] = { 1, 3, 5 };\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1365,7 +1365,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("{ 2, 4, 6 },\n"); //$NON-NLS-1$
buffer.append("{ 3, 5, 7 },\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1380,7 +1380,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int y[4][3] = {\n"); //$NON-NLS-1$
buffer.append("1, 3, 5, 2, 4, 6, 3, 5, 7\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1395,7 +1395,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int z[4][3] = {\n"); //$NON-NLS-1$
buffer.append("{ 1 }, { 2 }, { 3 }, { 4 }\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1406,7 +1406,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_8s28() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("struct { int a[3], b; } w[] = { { 1 }, 2 };\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1459,7 +1459,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("{ 6 },\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1474,7 +1474,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("typedef int A[]; // OK - declared with block scope\n"); //$NON-NLS-1$
buffer.append("A a1 = { 1, 2 }, b1 = { 3, 4, 5 };\n"); //$NON-NLS-1$
buffer.append("int a2[] = { 1, 2 }, b2[] = { 3, 4, 5 };\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1495,7 +1495,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("t2[] = { 'a', 'b', 'c' };\n"); //$NON-NLS-1$
buffer.append("char *p = \"abc\";\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1514,7 +1514,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("[member_two] = \"member two\",\n"); //$NON-NLS-1$
buffer.append("[member_one] = \"member one\",\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1525,7 +1525,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_8s34() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("div_t answer = { .quot = 2, .rem = -1 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1538,7 +1538,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("struct { int a[3], b; } w[] =\n"); //$NON-NLS-1$
buffer.append("{ [0].a = {1}, [1].a[0] = 2 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1555,7 +1555,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int a[MAX] = {\n"); //$NON-NLS-1$
buffer.append("1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1566,7 +1566,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_7_8s38() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("union { int any_member; } u = { .any_member = 42 };\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1583,7 +1583,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int f() {\n"); //$NON-NLS-1$
buffer.append("(void)p(0);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1602,7 +1602,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("while (*s++ != '\0')\n"); //$NON-NLS-1$
buffer.append(";\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1633,7 +1633,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("end_loop1: ;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1666,7 +1666,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("f(i+1);\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1701,7 +1701,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("// handle other operations\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1738,7 +1738,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("}\n"); //$NON-NLS-1$
buffer.append("goto lab4; // invalid: going INTO scope of VLA.\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), false, false);
+ parseCandCPP(buffer.toString(), false, 0);
}
/**
@@ -1783,7 +1783,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("int foo() {\n"); //$NON-NLS-1$
buffer.append("g.u2.f3 = f();\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parse(buffer.toString(), ParserLanguage.C, true, true);
+ parse(buffer.toString(), ParserLanguage.C, true, 0);
}
/**
@@ -1800,7 +1800,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("{\n"); //$NON-NLS-1$
buffer.append("return a > b ? a : b;\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1819,7 +1819,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("(*funcp)();\n"); //$NON-NLS-1$
buffer.append("funcp();\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1858,7 +1858,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("extern int i3; // refers to pre vious, whose linkage is external\n"); //$NON-NLS-1$
buffer.append("extern int i4; // refers to pre vious, whose linkage is external\n"); //$NON-NLS-1$
buffer.append("extern int i5; // refers to pre vious, whose linkage is internal\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1883,7 +1883,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("if ('z' - 'a' == 25)\n"); //$NON-NLS-1$
buffer.append("g();\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1904,7 +1904,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("#define join(c, d) in_between(c hash_hash d)\n"); //$NON-NLS-1$
buffer.append("char p[] = join(x, y); // equivalent to\n"); //$NON-NLS-1$
buffer.append("// char p[] = \"x ## y\";\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1917,7 +1917,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
StringBuffer buffer = new StringBuffer();
buffer.append("#define TABSIZE 100\n"); //$NON-NLS-1$
buffer.append("int table[TABSIZE];\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1928,7 +1928,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
public void test6_10_3_5s4() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("#define max(a, b) ((a) > (b) ? (a) : (b))\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
/**
@@ -1951,7 +1951,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest {
buffer.append("#define FUNC_LIKE2( a )( \\n"); //$NON-NLS-1$
buffer.append(" a \\n"); //$NON-NLS-1$
buffer.append(" )\n"); //$NON-NLS-1$
- parseCandCPP(buffer.toString(), true, true);
+ parseCandCPP(buffer.toString(), true, 0);
}
} \ No newline at end of file
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java
index 0945ab036fc..951405814f9 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java
@@ -56,26 +56,25 @@ public class AST2SpecBaseTest extends TestCase {
* checkSemantics is used to specify whether the example should have semantics checked
* since several spec examples have syntactically correct code ONLY this flag was added
* so that future tests can ensure that examples are checked against syntax/semantics where necessary
- *
* @param code
- * @param checkSemantics
+ * @param expectedProblemBindings the number of problem bindings you expect to encounter
* @throws ParserException
*/
- protected void parseCandCPP( String code, boolean checkSemantics, boolean checkBindings ) throws ParserException {
- parse( code, ParserLanguage.C, false, true, checkSemantics, checkBindings);
- parse( code, ParserLanguage.CPP, false, true, checkSemantics, checkBindings );
+ protected void parseCandCPP( String code, boolean checkBindings, int expectedProblemBindings ) throws ParserException {
+ parse( code, ParserLanguage.C, false, true, checkBindings, expectedProblemBindings);
+ parse( code, ParserLanguage.CPP, false, true, checkBindings, expectedProblemBindings );
}
- protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean checkSemantics, boolean checkBindings ) throws ParserException {
- return parse(code, lang, false, true, checkSemantics, checkBindings );
+ protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean checkBindings, int expectedProblemBindings ) throws ParserException {
+ return parse(code, lang, false, true, checkBindings, expectedProblemBindings );
}
- private IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, boolean checkSemantics, boolean checkBindings ) throws ParserException {
+ private IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, boolean checkBindings, int expectedProblemBindings ) throws ParserException {
// TODO beef this up with tests... i.e. run once with \n, and then run again with \r\n replacing \n ... etc
// TODO another example might be to replace all characters with corresponding trigraph/digraph tests...
CodeReader codeReader = new CodeReader(code.toCharArray());
- return parse(codeReader, lang, useGNUExtensions, expectNoProblems, checkSemantics, checkBindings);
+ return parse(codeReader, lang, useGNUExtensions, expectNoProblems, checkBindings, expectedProblemBindings);
}
// private IASTTranslationUnit parse( IFile filename, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems ) throws ParserException {
@@ -91,7 +90,7 @@ public class AST2SpecBaseTest extends TestCase {
// return parse(codeReader, lang, useGNUExtensions, expectNoProblems);
// }
- private IASTTranslationUnit parse(CodeReader codeReader, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, boolean checkSemantics, boolean checkBindings) throws ParserException {
+ private IASTTranslationUnit parse(CodeReader codeReader, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, boolean checkBindings, int expectedProblemBindings) throws ParserException {
ScannerInfo scannerInfo = new ScannerInfo();
IScannerExtensionConfiguration configuration = null;
if( lang == ParserLanguage.C )
@@ -132,13 +131,13 @@ public class AST2SpecBaseTest extends TestCase {
if ( lang == ParserLanguage.CPP ) {
CPPNameResolver res = new CPPNameResolver();
tu.accept( res );
- if (res.foundProblemBinding)
- throw new ParserException("found IProblemBinding"); //$NON-NLS-1$
+ if (res.numProblemBindings != expectedProblemBindings )
+ throw new ParserException("Expected " + expectedProblemBindings + " problems, encountered " + res.numProblemBindings ); //$NON-NLS-1$ //$NON-NLS-2$
} else if (lang == ParserLanguage.C ) {
CNameResolver res = new CNameResolver();
tu.accept( res );
- if (res.foundProblemBinding)
- throw new ParserException("found IProblemBinding"); //$NON-NLS-1$
+ if (res.numProblemBindings != expectedProblemBindings )
+ throw new ParserException("Expected " + expectedProblemBindings + " problems, encountered " + res.numProblemBindings ); //$NON-NLS-1$ //$NON-NLS-2$
}
}
@@ -171,12 +170,13 @@ public class AST2SpecBaseTest extends TestCase {
{
shouldVisitNames = true;
}
- public boolean foundProblemBinding=false;
+ public int numProblemBindings=0;
public List nameList = new ArrayList();
public int visit( IASTName name ){
+ nameList.add( name );
IBinding binding = name.resolveBinding();
if (binding instanceof IProblemBinding)
- foundProblemBinding=true;
+ numProblemBindings++;
return PROCESS_CONTINUE;
}
public IASTName getName( int idx ){
@@ -191,12 +191,13 @@ public class AST2SpecBaseTest extends TestCase {
{
shouldVisitNames = true;
}
- public boolean foundProblemBinding=false;
+ public int numProblemBindings=0;
public List nameList = new ArrayList();
public int visit( IASTName name ){
+ nameList.add( name );
IBinding binding = name.resolveBinding();
if (binding instanceof IProblemBinding)
- foundProblemBinding=true;
+ numProblemBindings++;
return PROCESS_CONTINUE;
}
public IASTName getName( int idx ){
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java
index c7efbf1562b..e4c01f4b16a 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java
@@ -16,9 +16,11 @@ package org.eclipse.cdt.core.parser.tests.ast2;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.IBasicType;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
+import org.eclipse.cdt.core.dom.ast.IFunction;
import org.eclipse.cdt.core.dom.ast.IFunctionType;
import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IPointerType;
+import org.eclipse.cdt.core.dom.ast.IProblemBinding;
import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope;
@@ -29,9 +31,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
import org.eclipse.cdt.core.parser.ParserLanguage;
@@ -277,8 +282,476 @@ public class AST2TemplateTests extends AST2BaseTest {
ICPPMethod f1 = (ICPPMethod) col.getName(2).resolveBinding();
ICPPMethod f2 = (ICPPMethod) col.getName(8).resolveBinding();
- //TODO this isn't right, but its close enough for now
+ assertSame( f2, f1 );
+ }
+
+ public void testTemplateFunctionImplicitInstantiation() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template < class T > void f ( T ); \n"); //$NON-NLS-1$
+ buffer.append("void main() { \n"); //$NON-NLS-1$
+ buffer.append(" f( 1 ); \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f1 = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+ IFunction f2 = (IFunction) col.getName(5).resolveBinding();
+
assertTrue( f2 instanceof ICPPTemplateInstance );
assertSame( ((ICPPTemplateInstance)f2).getOriginalBinding(), f1 );
}
+
+ /**
+ * template< class T > void f( T ); //#1
+ * template< class T > void f( T* ); //#2
+ * template< class T > void f( const T* ); //#3
+ *
+ * const int *p;
+ * f( p ); //calls f( const T * ) , 3 is more specialized than 1 or 2
+ *
+ * @throws Exception
+ *
+ */
+ public void test_14_5_5_2s5_OrderingFunctionTemplates_1() throws Exception{
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( "template < class T > void f( T ); \n"); //$NON-NLS-1$
+ buffer.append( "template < class T > void f( T* ); \n"); //$NON-NLS-1$
+ buffer.append( "template < class T > void f( const T* ); \n"); //$NON-NLS-1$
+ buffer.append( "void main() { \n"); //$NON-NLS-1$
+ buffer.append( " const int *p; \n"); //$NON-NLS-1$
+ buffer.append( " f( p ); \n"); //$NON-NLS-1$
+ buffer.append( "} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f1 = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+ ICPPFunctionTemplate f2 = (ICPPFunctionTemplate) col.getName(5).resolveBinding();
+ ICPPFunctionTemplate f3 = (ICPPFunctionTemplate) col.getName(9).resolveBinding();
+
+ assertNotSame( f1, f2 );
+ assertNotSame( f2, f3 );
+ assertNotSame( f3, f1 );
+
+ IFunction f = (IFunction) col.getName(14).resolveBinding();
+ assertTrue( f instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)f).getOriginalBinding(), f3 );
+ }
+
+ /**
+ * template< class T > void g( T ); //#1
+ * template< class T > void g( T& ); //#2
+
+ * float x;
+ * g( x ); //ambiguous 1 or 2
+ *
+ * @throws Exception
+ */
+ public void test_14_5_5_2s5_OrderingFunctionTemplates_2() throws Exception{
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( "template < class T > void f( T ); \n"); //$NON-NLS-1$
+ buffer.append( "template < class T > void f( T& ); \n"); //$NON-NLS-1$
+ buffer.append( "void main() { \n"); //$NON-NLS-1$
+ buffer.append( " float x; \n"); //$NON-NLS-1$
+ buffer.append( " f( x ); \n"); //$NON-NLS-1$
+ buffer.append( "} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f1 = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+ ICPPFunctionTemplate f2 = (ICPPFunctionTemplate) col.getName(5).resolveBinding();
+
+ assertNotSame( f1, f2 );
+
+ IProblemBinding f = (IProblemBinding) col.getName(10).resolveBinding();
+ assertEquals( f.getID(), IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP );
+ }
+
+ public void testTemplateParameters() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( "template < class T, template < class X > class U, T *pT > class A { \n"); //$NON-NLS-1$
+ buffer.append( "}; \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPTemplateTypeParameter T = (ICPPTemplateTypeParameter) col.getName(0).resolveBinding();
+ ICPPTemplateTemplateParameter U = (ICPPTemplateTemplateParameter) col.getName(2).resolveBinding();
+ ICPPTemplateNonTypeParameter pT = (ICPPTemplateNonTypeParameter) col.getName(4).resolveBinding();
+
+ ICPPTemplateTypeParameter X = (ICPPTemplateTypeParameter) col.getName(1).resolveBinding();
+
+ ICPPTemplateParameter [] ps = U.getTemplateParameters();
+ assertEquals( ps.length, 1 );
+ assertSame( ps[0], X );
+
+ IPointerType ptype = (IPointerType) pT.getType();
+ assertSame( ptype.getType(), T );
+ }
+
+ public void testDeferredInstances() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( "template <class T> class A { \n"); //$NON-NLS-1$
+ buffer.append( " A<T>* a; \n"); //$NON-NLS-1$
+ buffer.append( " A<T>* a2; \n"); //$NON-NLS-1$
+ buffer.append( "}; \n"); //$NON-NLS-1$
+ buffer.append( "void f(){ \n"); //$NON-NLS-1$
+ buffer.append( " A<int> * b; \n"); //$NON-NLS-1$
+ buffer.append( " b->a; \n"); //$NON-NLS-1$
+ buffer.append( "} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPClassTemplate A = (ICPPClassTemplate) col.getName(1).resolveBinding();
+ ICPPTemplateInstance A_T = (ICPPTemplateInstance) col.getName(2).resolveBinding();
+ assertSame( A_T.getOriginalBinding(), A );
+
+ ICPPTemplateInstance A_T2 = (ICPPTemplateInstance) col.getName(6).resolveBinding();
+ assertSame( A_T, A_T2 );
+
+ ICPPVariable a = (ICPPVariable) col.getName(5).resolveBinding();
+ IPointerType pt = (IPointerType) a.getType();
+ assertSame( pt.getType(), A_T );
+
+ ICPPVariable b = (ICPPVariable) col.getName(13).resolveBinding();
+ IType bt = b.getType();
+ assertTrue( bt instanceof IPointerType );
+
+ ICPPVariable a2 = (ICPPVariable) col.getName(15).resolveBinding();
+ assertTrue( a2 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)a2).getOriginalBinding(), a );
+ IType at = a2.getType();
+ assertTrue( at instanceof IPointerType );
+
+ assertSame( ((IPointerType)at).getType(), ((IPointerType)bt).getType() );
+ }
+
+ public void test_14_5_4_1s2_MatchingTemplateSpecializations() throws Exception{
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( "template < class T1, class T2, int I > class A {}; //#1 \n"); //$NON-NLS-1$
+ buffer.append( "template < class T, int I > class A < T, T*, I > {}; //#2 \n"); //$NON-NLS-1$
+ buffer.append( "template < class T1, class T2, int I > class A < T1*, T2, I > {}; //#3 \n"); //$NON-NLS-1$
+ buffer.append( "template < class T > class A < int, T*, 5 > {}; //#4 \n"); //$NON-NLS-1$
+ buffer.append( "template < class T1, class T2, int I > class A < T1, T2*, I > {}; //#5 \n"); //$NON-NLS-1$
+
+ buffer.append( "A <int, int, 1> a1; //uses #1 \n"); //$NON-NLS-1$
+ buffer.append( "A <int, int*, 1> a2; //uses #2, T is int, I is 1 \n"); //$NON-NLS-1$
+ buffer.append( "A <int, char*, 5> a3; //uses #4, T is char \n"); //$NON-NLS-1$
+ buffer.append( "A <int, char*, 1> a4; //uses #5, T is int, T2 is char, I is1 \n"); //$NON-NLS-1$
+ buffer.append( "A <int*, int*, 2> a5; //ambiguous, matches #3 & #5. \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPClassTemplate A1 = (ICPPClassTemplate) col.getName(3).resolveBinding();
+ ICPPClassTemplate A2 = (ICPPClassTemplate) col.getName(6).resolveBinding();
+ ICPPClassTemplate A3 = (ICPPClassTemplate) col.getName(14).resolveBinding();
+ ICPPClassTemplate A4 = (ICPPClassTemplate) col.getName(20).resolveBinding();
+ ICPPClassTemplate A5 = (ICPPClassTemplate) col.getName(26).resolveBinding();
+
+ assertTrue( A3 instanceof ICPPTemplateSpecialization );
+ assertSame( ((ICPPTemplateSpecialization)A3).getPrimaryTemplateDefinition(), A1 );
+
+ ICPPTemplateTypeParameter T1 = (ICPPTemplateTypeParameter) col.getName(11).resolveBinding();
+ ICPPTemplateTypeParameter T2 = (ICPPTemplateTypeParameter) col.getName(12).resolveBinding();
+ ICPPTemplateNonTypeParameter I = (ICPPTemplateNonTypeParameter) col.getName(13).resolveBinding();
+
+ ICPPTemplateParameter TR1 = (ICPPTemplateParameter) col.getName(16).resolveBinding();
+ ICPPTemplateParameter TR2 = (ICPPTemplateParameter) col.getName(17).resolveBinding();
+ ICPPTemplateParameter TR3 = (ICPPTemplateParameter) col.getName(18).resolveBinding();
+
+ assertSame( T1, TR1 );
+ assertSame( T2, TR2 );
+ assertSame( I, TR3 );
+
+ ICPPTemplateInstance R1 = (ICPPTemplateInstance) col.getName(31).resolveBinding();
+ ICPPTemplateInstance R2 = (ICPPTemplateInstance) col.getName(34).resolveBinding();
+ ICPPTemplateInstance R3 = (ICPPTemplateInstance) col.getName(37).resolveBinding();
+ ICPPTemplateInstance R4 = (ICPPTemplateInstance) col.getName(40).resolveBinding();
+ IProblemBinding R5 = (IProblemBinding) col.getName(43).resolveBinding();
+ assertEquals( R5.getID(), IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP );
+
+ assertSame( R1.getOriginalBinding(), A1 );
+ assertSame( R2.getOriginalBinding(), A2 );
+ assertSame( R4.getOriginalBinding(), A5 );
+ assertSame( R3.getOriginalBinding(), A4 );
+ }
+
+ public void test14_7_3_FunctionExplicitSpecialization() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template <class T> void f(T); \n"); //$NON-NLS-1$
+ buffer.append("template <class T> void f(T*); \n"); //$NON-NLS-1$
+ buffer.append("template <> void f(int); //ok \n"); //$NON-NLS-1$
+ buffer.append("template <> void f<int>(int*); // OK \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate fT1 = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+ ICPPFunctionTemplate fT2 = (ICPPFunctionTemplate) col.getName(5).resolveBinding();
+
+ ICPPTemplateSpecialization f1 = (ICPPTemplateSpecialization) col.getName(8).resolveBinding();
+ ICPPTemplateSpecialization f2 = (ICPPTemplateSpecialization) col.getName(10).resolveBinding();
+
+ assertFalse( f1.isPartialSpecialization() );
+ assertFalse( f2.isPartialSpecialization() );
+
+ assertSame( f1.getPrimaryTemplateDefinition(), fT1 );
+ assertSame( f2.getPrimaryTemplateDefinition(), fT2 );
+ }
+
+ public void test_14_5_5_1_FunctionTemplates_1() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T*); \n"); //$NON-NLS-1$
+ buffer.append("void g(int* p) { f(p); } \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+
+ ICPPFunction ref = (ICPPFunction) col.getName(6).resolveBinding();
+ assertTrue( ref instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)ref).getOriginalBinding(), f );
+ }
+
+ public void test_14_5_5_1_FunctionTemplates_2() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T); \n"); //$NON-NLS-1$
+ buffer.append("void g(int* p) { f(p); } \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+
+ ICPPFunction ref = (ICPPFunction) col.getName(6).resolveBinding();
+ assertTrue( ref instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)ref).getOriginalBinding(), f );
+ }
+
+ public void test_14_8_1s2_FunctionTemplates() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class X, class Y> X f(Y); \n"); //$NON-NLS-1$
+ buffer.append("void g(){ \n"); //$NON-NLS-1$
+ buffer.append(" int i = f<int>(5); // Y is int \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f = (ICPPFunctionTemplate) col.getName(3).resolveBinding();
+ ICPPFunction ref1 = (ICPPFunction) col.getName(8).resolveBinding();
+
+ assertTrue( ref1 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance) ref1).getOriginalBinding(), f );
+ }
+
+ public void test14_8_3s6_FunctionTemplates() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T); \n"); //$NON-NLS-1$
+ buffer.append("void g(){ \n"); //$NON-NLS-1$
+ buffer.append(" f(\"Annemarie\"); \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+ ICPPFunction ref = (ICPPFunction) col.getName(5).resolveBinding();
+ assertTrue( ref instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)ref).getOriginalBinding(), f );
+ }
+
+ public void test14_5_5_2s6_FunctionTemplates() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T); // #1\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void f(T*, int=1); // #2\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void g(T); // #3\n"); //$NON-NLS-1$
+ buffer.append("template<class T> void g(T*, ...); // #4\n"); //$NON-NLS-1$
+ buffer.append("int main() { \n"); //$NON-NLS-1$
+ buffer.append(" int* ip; \n"); //$NON-NLS-1$
+ buffer.append(" f(ip); //calls #2\n"); //$NON-NLS-1$
+ buffer.append(" g(ip); //calls #4\n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f1 = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+ ICPPFunctionTemplate f2 = (ICPPFunctionTemplate) col.getName(5).resolveBinding();
+ assertNotSame( f1, f2 );
+
+ ICPPFunctionTemplate g1 = (ICPPFunctionTemplate) col.getName(10).resolveBinding();
+ ICPPFunctionTemplate g2 = (ICPPFunctionTemplate) col.getName(14).resolveBinding();
+ assertNotSame( g1, g2 );
+
+ ICPPFunction ref1 = (ICPPFunction) col.getName(19).resolveBinding();
+ ICPPFunction ref2 = (ICPPFunction) col.getName(21).resolveBinding();
+
+ assertTrue( ref1 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance) ref1).getOriginalBinding(), f2 );
+
+ assertTrue( ref2 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance) ref2).getOriginalBinding(), g2 );
+ }
+
+ public void test14_6_1s1_LocalNames() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> class X { \n"); //$NON-NLS-1$
+ buffer.append(" X* p; // meaning X<T>\n"); //$NON-NLS-1$
+ buffer.append(" X<T>* p2; \n"); //$NON-NLS-1$
+ buffer.append("}; \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPClassTemplate X = (ICPPClassTemplate) col.getName(1).resolveBinding();
+ ICPPClassType x1 = (ICPPClassType) col.getName(2).resolveBinding();
+ ICPPClassType x2 = (ICPPClassType) col.getName(4).resolveBinding();
+
+ assertTrue( x1 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)x1).getOriginalBinding(), X );
+
+ assertSame( x1, x2 );
+ }
+
+ public void test14_8s2_() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> T f(T* p){ \n"); //$NON-NLS-1$
+ buffer.append("}; \n"); //$NON-NLS-1$
+ buffer.append("void g(int a, char* b){ \n"); //$NON-NLS-1$
+ buffer.append(" f(&a); //call f<int>(int*) \n"); //$NON-NLS-1$
+ buffer.append(" f(&b); //call f<char*>(char**)\n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f = (ICPPFunctionTemplate) col.getName(2).resolveBinding();
+
+ ICPPFunction f1 = (ICPPFunction) col.getName(8).resolveBinding();
+ ICPPFunction f2 = (ICPPFunction) col.getName(10).resolveBinding();
+
+ assertNotSame( f1, f2 );
+ assertTrue( f1 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)f1).getOriginalBinding(), f );
+ assertTrue( f2 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)f2).getOriginalBinding(), f );
+
+ IType fr1 = f1.getType().getReturnType();
+ IType fr2 = f2.getType().getReturnType();
+
+ assertTrue( fr1 instanceof IBasicType );
+ assertEquals( ((IBasicType)fr1).getType(), IBasicType.t_int );
+
+ assertTrue( fr2 instanceof IPointerType );
+ assertTrue( ((IPointerType)fr2).getType() instanceof IBasicType );
+ assertEquals( ((IBasicType) ((IPointerType)fr2).getType()).getType(), IBasicType.t_char );
+ }
+
+ public void test14_7_3s14() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> void f(T) { } \n"); //$NON-NLS-1$
+ buffer.append("template<class T> inline T g(T) { } \n"); //$NON-NLS-1$
+ buffer.append("template<> inline void f<>(int) { } //OK: inline \n"); //$NON-NLS-1$
+ buffer.append("template<> int g<>(int) { } // OK: not inline\n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPFunctionTemplate f1 = (ICPPFunctionTemplate) col.getName(1).resolveBinding();
+ ICPPFunctionTemplate g1 = (ICPPFunctionTemplate) col.getName(6).resolveBinding();
+
+ ICPPTemplateSpecialization f2 = (ICPPTemplateSpecialization) col.getName(9).resolveBinding();
+ ICPPTemplateSpecialization g2 = (ICPPTemplateSpecialization) col.getName(12).resolveBinding();
+
+ assertFalse( ((ICPPFunction)f1).isInline() );
+ assertTrue( ((ICPPFunction)g1).isInline() );
+ assertTrue( ((ICPPFunction)f2).isInline() );
+ assertFalse( ((ICPPFunction)g2).isInline() );
+ }
+
+ public void test14_7_1s14_InfiniteInstantiation() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> class X { \n"); //$NON-NLS-1$
+ buffer.append(" X<T*> a; // implicit generation of X<T> requires \n"); //$NON-NLS-1$
+ buffer.append(" // the implicit instantiation of X<T*> which requires \n"); //$NON-NLS-1$
+ buffer.append(" // the implicit instantiation of X<T**> which ... \n"); //$NON-NLS-1$
+ buffer.append("}; \n"); //$NON-NLS-1$
+ buffer.append("void f() { \n"); //$NON-NLS-1$
+ buffer.append(" X<int> x; \n"); //$NON-NLS-1$
+ buffer.append(" x.a.a.a.a; \n"); //$NON-NLS-1$
+ buffer.append("} \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPClassTemplate X = (ICPPClassTemplate) col.getName(1).resolveBinding();
+ ICPPVariable x = (ICPPVariable) col.getName(9).resolveBinding();
+ IType t = x.getType();
+ assertTrue( t instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance) t).getOriginalBinding(), X );
+
+ ICPPField a = (ICPPField) col.getName(5).resolveBinding();
+ ICPPField a1 = (ICPPField) col.getName(11).resolveBinding();
+ ICPPField a2 = (ICPPField) col.getName(12).resolveBinding();
+ ICPPField a3 = (ICPPField) col.getName(13).resolveBinding();
+ ICPPField a4 = (ICPPField) col.getName(14).resolveBinding();
+
+ assertTrue( a1 instanceof ICPPTemplateInstance );
+ assertTrue( a2 instanceof ICPPTemplateInstance );
+ assertTrue( a3 instanceof ICPPTemplateInstance );
+ assertTrue( a4 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)a1).getOriginalBinding(), a );
+ assertSame( ((ICPPTemplateInstance)a2).getOriginalBinding(), a );
+ assertSame( ((ICPPTemplateInstance)a3).getOriginalBinding(), a );
+ assertSame( ((ICPPTemplateInstance)a4).getOriginalBinding(), a );
+ }
+
+ public void test14_6_1s2() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template<class T> class Y; \n"); //$NON-NLS-1$
+ buffer.append("template<> class Y<int> { \n"); //$NON-NLS-1$
+ buffer.append(" Y* p; // meaning Y<int> \n"); //$NON-NLS-1$
+ buffer.append(" Y<char>* q; // meaning Y<char> \n"); //$NON-NLS-1$
+ buffer.append("}; \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP );
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ ICPPClassTemplate Y = (ICPPClassTemplate) col.getName(1).resolveBinding();
+ ICPPTemplateSpecialization Yspec = (ICPPTemplateSpecialization) col.getName(2).resolveBinding();
+
+ assertTrue( Yspec instanceof ICPPClassType );
+ assertSame( Yspec.getPrimaryTemplateDefinition(), Y );
+
+ ICPPClassType y1 = (ICPPClassType) col.getName(4).resolveBinding();
+ assertTrue( y1 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)y1).getOriginalBinding(), Yspec );
+
+ ICPPClassType y2 = (ICPPClassType) col.getName(6).resolveBinding();
+ assertTrue( y2 instanceof ICPPTemplateInstance );
+ assertSame( ((ICPPTemplateInstance)y2).getOriginalBinding(), Y );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java
index 22ea7b42331..5c90e69b373 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTNode.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@ package org.eclipse.cdt.core.dom.ast;
* @author Doug Schaefer
*/
public interface IASTNode {
-
+ public static final IASTNode [] EMPTY_NODE_ARRAY = new IASTNode[0];
/**
* Get the translation unit (master) node that is the ancestor of all nodes
* in this AST.
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java
index 85c0d8248d1..5fcee0bed9c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBasicType.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
@@ -28,6 +28,14 @@ public interface IBasicType extends IType {
*/
public int getType() throws DOMException;
+ /**
+ * Returns the IASTExpression for the value of this type. May be null.
+ *
+ * @return IASTExpression or null
+ * @throws DOMException
+ */
+ public IASTExpression getValue() throws DOMException;
+
public static final int t_unspecified = IASTSimpleDeclSpecifier.t_unspecified;
public static final int t_void = IASTSimpleDeclSpecifier.t_void;
public static final int t_char = IASTSimpleDeclSpecifier.t_char;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPParameter.java
new file mode 100644
index 00000000000..a2f81513786
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPParameter.java
@@ -0,0 +1,30 @@
+/**********************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM - Initial API and implementation
+ **********************************************************************/
+/*
+ * Created on Apr 20, 2005
+ */
+package org.eclipse.cdt.core.dom.ast.cpp;
+
+import org.eclipse.cdt.core.dom.ast.IASTInitializer;
+import org.eclipse.cdt.core.dom.ast.IParameter;
+
+/**
+ * @author aniefer
+ *
+ */
+public interface ICPPParameter extends IParameter, ICPPVariable {
+
+ /**
+ * the default value of this parameter or null if there is none.
+ * @return
+ */
+ public IASTInitializer getDefaultValue();
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateDefinition.java
index 53c9885602c..9f09497d19b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateDefinition.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateDefinition.java
@@ -10,6 +10,8 @@
**********************************************************************/
package org.eclipse.cdt.core.dom.ast.cpp;
+import org.eclipse.cdt.core.dom.ast.DOMException;
+
/**
* @author Doug Schaefer
@@ -22,5 +24,7 @@ public interface ICPPTemplateDefinition extends ICPPBinding{
* a partial specialization will have the specialized parameter list
* @return array of ICPPTemplateParameter
*/
- public ICPPTemplateParameter[] getTemplateParameters();
+ public ICPPTemplateParameter[] getTemplateParameters() throws DOMException;
+
+ public ICPPTemplateSpecialization[] getTemplateSpecializations() throws DOMException;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateInstance.java
index f939524a0bc..f13c764486f 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateInstance.java
@@ -14,6 +14,7 @@
package org.eclipse.cdt.core.dom.ast.cpp;
import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.parser.util.ObjectMap;
/**
@@ -34,6 +35,8 @@ public interface ICPPTemplateInstance extends IBinding {
*/
public ObjectMap getArgumentMap();
+ public IType [] getArguments();
+
public ICPPTemplateDefinition getTemplate();
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateParameter.java
index 9670b28f549..eec50e82fbf 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateParameter.java
@@ -15,5 +15,5 @@ package org.eclipse.cdt.core.dom.ast.cpp;
* @author Doug Schaefer
*/
public interface ICPPTemplateParameter extends ICPPBinding {
-
+ public static final ICPPTemplateParameter[] EMPTY_TEMPLATE_PARAMETER_ARRAY = new ICPPTemplateParameter[0];
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateSpecialization.java
index 39e6218a951..9a613556099 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateSpecialization.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateSpecialization.java
@@ -13,28 +13,29 @@
*/
package org.eclipse.cdt.core.dom.ast.cpp;
-import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IType;
/**
* @author aniefer
*/
public interface ICPPTemplateSpecialization extends ICPPTemplateDefinition {
-
+ public static final ICPPTemplateSpecialization[] EMPTY_TEMPLATE_SPECIALIZATION_ARRAY = new ICPPTemplateSpecialization[0];
/**
* get the arguments to this specialization
* @return
*/
- public IASTNode [] getArguments();
+ public IType [] getArguments() throws DOMException;
/**
* is this a partial specialization? if not, this will be an explicit specialization
* @return
*/
- public boolean isPartialSpecialization();
+ public boolean isPartialSpecialization() throws DOMException;
/**
* get the ICPPTemplateDefinition which this is a specialization of
* @return
*/
- public ICPPTemplateDefinition getPrimaryTemplateDefinition();
+ public ICPPTemplateDefinition getPrimaryTemplateDefinition() throws DOMException;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateTemplateParameter.java
new file mode 100644
index 00000000000..47d9648cbb9
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPTemplateTemplateParameter.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 13, 2005
+ */
+package org.eclipse.cdt.core.dom.ast.cpp;
+
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IType;
+
+/**
+ * @author aniefer
+ */
+public interface ICPPTemplateTemplateParameter extends ICPPTemplateParameter, ICPPClassTemplate {
+
+ public ICPPTemplateParameter[] getTemplateParameters() throws DOMException;
+
+ /**
+ * The default type for this parameter. May be null
+ *
+ * @return
+ */
+ public IType getDefault() throws DOMException;
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java
index 9a636dfec85..119516d1ba4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java
@@ -10,6 +10,7 @@
**********************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.c;
+import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier;
@@ -97,4 +98,12 @@ public class CBasicType implements ICBasicType {
}
return t;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBasicType#getValue()
+ */
+ public IASTExpression getValue() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java
index 7a223a88f68..89a2b2e361e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplatedTypeTemplateParameter.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
@@ -102,11 +102,11 @@ public class CPPASTTemplatedTypeTemplateParameter extends CPPASTNode implements
}
}
- if( name != null ) if( !name.accept( action ) ) return false;
ICPPASTTemplateParameter [] ps = getTemplateParameters();
for ( int i = 0; i < ps.length; i++ ) {
if( !ps[i].accept( action ) ) return false;
}
+ if( name != null ) if( !name.accept( action ) ) return false;
if( defaultValue != null ) if( !defaultValue.accept( action ) ) return false;
return true;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java
index 714d4c13a72..01bf70291e8 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java
@@ -13,7 +13,9 @@
*/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
+import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType;
/**
@@ -28,19 +30,32 @@ public class CPPBasicType implements ICPPBasicType {
protected int qualifierBits = 0;
protected int type;
+ protected IASTExpression value = null;
public CPPBasicType( int t, int bits ){
type = t;
qualifierBits = bits;
}
+ public CPPBasicType( int t, int bits, IASTExpression val ){
+ type = t;
+ qualifierBits = bits;
+ value = val;
+ }
+
public boolean isSameType( IType object ) {
- if( object instanceof CPPTypedef )
+ if( object == this )
+ return true;
+
+ if( object instanceof ITypedef )
return object.isSameType( this );
if( !(object instanceof CPPBasicType) )
return false;
+ if( type == -1 )
+ return false;
+
CPPBasicType t = (CPPBasicType) object;
return ( type == t.type && qualifierBits == t.qualifierBits );
}
@@ -88,4 +103,15 @@ public class CPPBasicType implements ICPPBasicType {
}
return t;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBasicType#getValue()
+ */
+ public IASTExpression getValue() {
+ return value;
+ }
+
+ public void setValue( IASTExpression val ){
+ value = val;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java
index 76897e42876..c22231e9ff3 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstance.java
@@ -34,16 +34,15 @@ import org.eclipse.cdt.core.parser.util.ObjectMap;
* @author aniefer
*/
public class CPPClassInstance extends CPPInstance implements ICPPClassType, ICPPInternalBinding {
- private IASTName id;
private CPPClassInstanceScope instanceScope;
/**
* @param decl
+ * @param args
* @param arguments
*/
- public CPPClassInstance( IASTName id, ICPPScope scope, IBinding decl, ObjectMap argMap ) {
- super( scope, decl, argMap );
- this.id = id;
+ public CPPClassInstance( ICPPScope scope, IBinding decl, ObjectMap argMap, IType[] args ) {
+ super( scope, decl, argMap, args );
}
/* (non-Javadoc)
@@ -163,7 +162,7 @@ public class CPPClassInstance extends CPPInstance implements ICPPClassType, ICPP
*/
public Object clone(){
// TODO Auto-generated method stub
- return null;
+ return this;
}
/* (non-Javadoc)
@@ -178,7 +177,7 @@ public class CPPClassInstance extends CPPInstance implements ICPPClassType, ICPP
* @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#getDefinition()
*/
public IASTNode getDefinition() {
- return id;
+ return null;
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstanceScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstanceScope.java
index 155dbfe8ecd..71f1380679e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstanceScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassInstanceScope.java
@@ -83,7 +83,7 @@ public class CPPClassInstanceScope implements ICPPClassScope {
} else {
binding = forceResolve ? n.resolveBinding() : n.getBinding();
if( binding != null ){
- binding = CPPTemplates.createInstance( n, this, binding, instance.getArgumentMap() );
+ binding = CPPTemplates.createInstance( this, binding, instance.getArgumentMap(), instance.getArguments() );
if( instanceMap == ObjectMap.EMPTY_MAP )
instanceMap = new ObjectMap(2);
instanceMap.put( n, binding );
@@ -93,7 +93,7 @@ public class CPPClassInstanceScope implements ICPPClassScope {
if( instanceMap.containsKey( obj ) ){
binding = (IBinding) instanceMap.get( obj );
} else {
- binding = CPPTemplates.createInstance( null, this, (IBinding) obj, instance.getArgumentMap() );
+ binding = CPPTemplates.createInstance( this, (IBinding) obj, instance.getArgumentMap(), instance.getArguments() );
if( instanceMap == ObjectMap.EMPTY_MAP )
instanceMap = new ObjectMap(2);
instanceMap.put( obj, binding );
@@ -175,8 +175,16 @@ public class CPPClassInstanceScope implements ICPPClassScope {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IScope#getParent()
*/
- public IScope getParent() {
- // TODO Auto-generated method stub
+ public IScope getParent() throws DOMException {
+ ICPPClassType cls = getOriginalClass();
+ ICPPClassScope scope = (ICPPClassScope)cls.getCompositeScope();
+ if( scope != null )
+ return scope.getParent();
+ if( cls instanceof ICPPInternalBinding ){
+ IASTNode [] nds = ((ICPPInternalBinding)cls).getDeclarations();
+ if( nds != null && nds.length > 0 )
+ return CPPVisitor.getContainingScope( nds[0] );
+ }
return null;
}
@@ -192,8 +200,17 @@ public class CPPClassInstanceScope implements ICPPClassScope {
* @see org.eclipse.cdt.core.dom.ast.IScope#getPhysicalNode()
*/
public IASTNode getPhysicalNode() throws DOMException {
- ICPPClassScope scope = (ICPPClassScope) getOriginalClass().getCompositeScope();
- return scope.getPhysicalNode();
+ ICPPClassType cls = getOriginalClass();
+ ICPPClassScope scope = (ICPPClassScope)cls.getCompositeScope();
+ if( scope != null )
+ return scope.getPhysicalNode();
+
+ if( cls instanceof ICPPInternalBinding ){
+ IASTNode [] nds = ((ICPPInternalBinding)cls).getDeclarations();
+ if( nds != null && nds.length > 0 )
+ return nds[0];
+ }
+ return null;
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java
index aaa6f0f5861..03b1d0cf61c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java
@@ -23,25 +23,22 @@ import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
-import org.eclipse.cdt.core.parser.util.ObjectMap;
/**
* @author aniefer
*/
public class CPPClassTemplate extends CPPTemplateDefinition implements
ICPPClassTemplate, ICPPClassType, ICPPInternalClassType {
-
+
/**
* @param decl
*/
@@ -49,24 +46,14 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements
super(name);
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplate#instantiate(org.eclipse.cdt.core.dom.ast.IASTNode[])
- */
- public IBinding instantiate(ICPPASTTemplateId templateId ) {//IASTNode[] arguments) {
- ICPPTemplateParameter [] params = getTemplateParameters();
- IASTNode [] arguments = templateId.getTemplateArguments();
-
- ObjectMap map = new ObjectMap(params.length);
- if( arguments.length == params.length ){
- for( int i = 0; i < arguments.length; i++ ){
- IType t = CPPVisitor.createType( arguments[i] );
- map.put( params[i], t );
- }
+ public ICPPTemplateInstance deferredInstance( IType [] arguments ){
+ ICPPTemplateInstance instance = getInstance( arguments );
+ if( instance == null ){
+ instance = new CPPDeferredClassInstance( this, arguments );
+ addInstance( arguments, instance );
}
-
- return CPPTemplates.createInstance( templateId, (ICPPScope) getScope(), this, map );
+ return instance;
}
-
private void checkForDefinition(){
// CPPClassType.FindDefinitionAction action = new FindDefinitionAction();
// IASTNode node = CPPVisitor.getContainingBlockItem( getPhysicalNode() ).getParent();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplateSpecialization.java
index d18d7573a65..73b1a1a5c69 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplateSpecialization.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplateSpecialization.java
@@ -13,10 +13,16 @@
*/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
-import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
+import org.eclipse.cdt.core.parser.util.ObjectMap;
/**
* @author aniefer
@@ -24,19 +30,22 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
public class CPPClassTemplateSpecialization extends CPPClassTemplate implements
ICPPTemplateSpecialization {
- private IASTNode [] arguments;
+ private IType [] arguments;
/**
* @param name
*/
public CPPClassTemplateSpecialization(ICPPASTTemplateId name) {
super(name);
- this.arguments = name.getTemplateArguments();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization#getArguments()
*/
- public IASTNode[] getArguments() {
+ public IType[] getArguments() {
+ if( arguments == null ){
+ ICPPASTTemplateId id = (ICPPASTTemplateId) getTemplateName();
+ arguments = CPPTemplates.createTypeArray( id.getTemplateArguments() );
+ }
return arguments;
}
@@ -55,4 +64,45 @@ public class CPPClassTemplateSpecialization extends CPPClassTemplate implements
return (ICPPTemplateDefinition) id.getTemplateName().resolveBinding();
}
+ public IBinding instantiate( IType [] args ){
+ ICPPTemplateInstance instance = getInstance( args );
+ if( instance != null ){
+ return instance;
+ }
+
+ IType [] specArgs = getArguments();
+ if( specArgs.length != arguments.length ){
+ return null;
+ }
+
+ ObjectMap argMap = new ObjectMap( specArgs.length );
+ int numSpecArgs = specArgs.length;
+ for( int i = 0; i < numSpecArgs; i++ ){
+ IType spec = specArgs[i];
+ IType arg = args[i];
+
+ //If the argument is a template parameter, we can't instantiate yet, defer for later
+ if( arg instanceof ICPPTemplateParameter ){
+ return deferredInstance( args );
+ }
+ try {
+ if( !CPPTemplates.deduceTemplateArgument( argMap, spec, arg ) )
+ return null;
+ } catch (DOMException e) {
+ return null;
+ }
+ }
+
+ ICPPTemplateParameter [] params = getTemplateParameters();
+ int numParams = params.length;
+ for( int i = 0; i < numParams; i++ ){
+ if( params[i] instanceof IType && !argMap.containsKey( params[i] ) )
+ return null;
+ }
+
+ instance = (ICPPTemplateInstance) CPPTemplates.createInstance( (ICPPScope) getScope(), this, argMap, args );
+ addInstance( args, instance );
+
+ return instance;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java
index 7030d2e6c5c..9615798cbf8 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java
@@ -36,6 +36,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope;
@@ -634,10 +635,14 @@ public class CPPClassType implements ICPPClassType, ICPPInternalClassType {
ObjectSet resultSet = new ObjectSet(2);
IASTDeclaration [] members = getCompositeTypeSpecifier().getMembers();
for( int i = 0; i < members.length; i++ ){
- if( members[i] instanceof IASTSimpleDeclaration ){
- ICPPASTDeclSpecifier declSpec = (ICPPASTDeclSpecifier) ((IASTSimpleDeclaration)members[i]).getDeclSpecifier();
+ IASTDeclaration decl = members[i];
+ while( decl instanceof ICPPASTTemplateDeclaration )
+ decl = ((ICPPASTTemplateDeclaration)decl).getDeclaration();
+
+ if( decl instanceof IASTSimpleDeclaration ){
+ ICPPASTDeclSpecifier declSpec = (ICPPASTDeclSpecifier) ((IASTSimpleDeclaration)decl).getDeclSpecifier();
if( declSpec.isFriend() ){
- IASTDeclarator [] dtors = ((IASTSimpleDeclaration)members[i]).getDeclarators();
+ IASTDeclarator [] dtors = ((IASTSimpleDeclaration)decl).getDeclarators();
if( declSpec instanceof ICPPASTElaboratedTypeSpecifier && dtors.length == 0 ){
resultSet.put( ((ICPPASTElaboratedTypeSpecifier)declSpec).getName().resolveBinding() );
} else {
@@ -647,10 +652,10 @@ public class CPPClassType implements ICPPClassType, ICPPInternalClassType {
}
}
}
- } else if( members[i] instanceof IASTFunctionDefinition ){
- ICPPASTDeclSpecifier declSpec = (ICPPASTDeclSpecifier) ((IASTFunctionDefinition)members[i]).getDeclSpecifier();
+ } else if( decl instanceof IASTFunctionDefinition ){
+ ICPPASTDeclSpecifier declSpec = (ICPPASTDeclSpecifier) ((IASTFunctionDefinition)decl).getDeclSpecifier();
if( declSpec.isFriend() ){
- IASTDeclarator dtor = ((IASTFunctionDefinition)members[i]).getDeclarator();
+ IASTDeclarator dtor = ((IASTFunctionDefinition)decl).getDeclarator();
resultSet.put( dtor.getName().resolveBinding() );
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java
new file mode 100644
index 00000000000..e24faa84b98
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java
@@ -0,0 +1,280 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 14, 2005
+ */
+package org.eclipse.cdt.internal.core.dom.parser.cpp;
+
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IField;
+import org.eclipse.cdt.core.dom.ast.IScope;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.parser.util.ObjectMap;
+
+/**
+ * @author aniefer
+ */
+public class CPPDeferredClassInstance /*extends CPPInstance*/ implements
+ ICPPTemplateInstance, ICPPClassType, ICPPInternalBinding {
+
+ public IType [] arguments = null;
+ public ICPPClassTemplate classTemplate = null;
+
+ public CPPDeferredClassInstance(ICPPClassTemplate orig, IType [] arguments ) {
+ this.arguments = arguments;
+ this.classTemplate = orig;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getArguments()
+ */
+ public IType[] getArguments() {
+ return arguments;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getBases()
+ */
+ public ICPPBase[] getBases() throws DOMException {
+ return ICPPBase.EMPTY_BASE_ARRAY;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getFields()
+ */
+ public IField[] getFields() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.ICompositeType#findField(java.lang.String)
+ */
+ public IField findField(String name) throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredFields()
+ */
+ public ICPPField[] getDeclaredFields() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getMethods()
+ */
+ public ICPPMethod[] getMethods() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getAllDeclaredMethods()
+ */
+ public ICPPMethod[] getAllDeclaredMethods() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredMethods()
+ */
+ public ICPPMethod[] getDeclaredMethods() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getConstructors()
+ */
+ public ICPPConstructor[] getConstructors() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getFriends()
+ */
+ public IBinding[] getFriends() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#getDeclarations()
+ */
+ public IASTNode[] getDeclarations() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#getDefinition()
+ */
+ public IASTNode getDefinition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#createDelegate(org.eclipse.cdt.core.dom.ast.IASTName)
+ */
+ public ICPPDelegate createDelegate(IASTName name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getKey()
+ */
+ public int getKey() throws DOMException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getCompositeScope()
+ */
+ public IScope getCompositeScope() throws DOMException {
+ return ((ICPPClassType)classTemplate).getCompositeScope();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#getQualifiedName()
+ */
+ public String[] getQualifiedName() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#getQualifiedNameCharArray()
+ */
+ public char[][] getQualifiedNameCharArray() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#isGloballyQualified()
+ */
+ public boolean isGloballyQualified() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ public Object clone(){
+ return this;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
+ */
+ public String getName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
+ */
+ public char[] getNameCharArray() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBinding#getScope()
+ */
+ public IScope getScope() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDefinition(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDefinition(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDeclaration(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getOriginalBinding()
+ */
+ public IBinding getOriginalBinding() {
+ return classTemplate;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getArgumentMap()
+ */
+ public ObjectMap getArgumentMap() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getTemplate()
+ */
+ public ICPPTemplateDefinition getTemplate() {
+ return classTemplate;
+ }
+
+ /**
+ * @param argMap
+ * @return
+ */
+ public IType instantiate(ObjectMap argMap) {
+
+ IType [] newArgs = new IType[ arguments.length ];
+ int size = arguments.length;
+ for( int i = 0; i < size; i++ ){
+ newArgs[i] = CPPTemplates.instantiateType( arguments[i], argMap );
+ }
+
+ return (IType) ((CPPTemplateDefinition)classTemplate).instantiate( newArgs );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IType#isSameType(org.eclipse.cdt.core.dom.ast.IType)
+ */
+ public boolean isSameType(IType type) {
+ // TODO Auto-generated method stub
+ return type == this;
+ }
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredFunctionInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredFunctionInstance.java
new file mode 100644
index 00000000000..39148a3073b
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredFunctionInstance.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 14, 2005
+ */
+package org.eclipse.cdt.internal.core.dom.parser.cpp;
+
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IFunctionType;
+import org.eclipse.cdt.core.dom.ast.IParameter;
+import org.eclipse.cdt.core.dom.ast.IScope;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.parser.util.ObjectMap;
+
+/**
+ * @author aniefer
+ */
+public class CPPDeferredFunctionInstance /*extends CPPInstance*/ implements
+ ICPPFunction, ICPPTemplateInstance, ICPPInternalBinding {
+
+ private IType[] arguments;
+ private ICPPFunctionTemplate functionTemplate;
+
+ /**
+ * @param scope
+ * @param orig
+ * @param argMap
+ */
+ public CPPDeferredFunctionInstance( ICPPFunctionTemplate template, IType[] arguments ) {
+ this.functionTemplate = template;
+ this.arguments = arguments;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getArguments()
+ */
+ public IType[] getArguments() {
+ return arguments;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#getParameters()
+ */
+ public IParameter[] getParameters() throws DOMException {
+ return ((ICPPFunction)functionTemplate).getParameters();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#getFunctionScope()
+ */
+ public IScope getFunctionScope() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#getType()
+ */
+ public IFunctionType getType() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#isStatic()
+ */
+ public boolean isStatic() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#getQualifiedName()
+ */
+ public String[] getQualifiedName() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#getQualifiedNameCharArray()
+ */
+ public char[][] getQualifiedNameCharArray() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding#isGloballyQualified()
+ */
+ public boolean isGloballyQualified() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
+ */
+ public String getName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
+ */
+ public char[] getNameCharArray() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IBinding#getScope()
+ */
+ public IScope getScope() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getOriginalBinding()
+ */
+ public IBinding getOriginalBinding() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getArgumentMap()
+ */
+ public ObjectMap getArgumentMap() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getTemplate()
+ */
+ public ICPPTemplateDefinition getTemplate() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction#isMutable()
+ */
+ public boolean isMutable() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction#isInline()
+ */
+ public boolean isInline() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#isExtern()
+ */
+ public boolean isExtern() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#isAuto()
+ */
+ public boolean isAuto() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#isRegister()
+ */
+ public boolean isRegister() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IFunction#takesVarArgs()
+ */
+ public boolean takesVarArgs() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#getDeclarations()
+ */
+ public IASTNode[] getDeclarations() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#getDefinition()
+ */
+ public IASTNode getDefinition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#createDelegate(org.eclipse.cdt.core.dom.ast.IASTName)
+ */
+ public ICPPDelegate createDelegate(IASTName name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDefinition(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDefinition(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDeclaration(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldInstance.java
index 02fb9e06759..5c5b482ef72 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldInstance.java
@@ -30,9 +30,10 @@ public class CPPFieldInstance extends CPPInstance implements ICPPField {
/**
* @param orig
* @param args
+ * @param args
*/
- public CPPFieldInstance(ICPPScope scope, IBinding orig, ObjectMap argMap ) {
- super(scope, orig, argMap);
+ public CPPFieldInstance(ICPPScope scope, IBinding orig, ObjectMap argMap, IType[] args ) {
+ super(scope, orig, argMap, args);
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionInstance.java
index ba19fceda15..f89aa9b7c55 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionInstance.java
@@ -20,6 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IFunctionType;
import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IScope;
+import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
@@ -35,9 +36,10 @@ public class CPPFunctionInstance extends CPPInstance implements ICPPFunction, IC
* @param scope
* @param orig
* @param argMap
+ * @param args
*/
- public CPPFunctionInstance(ICPPScope scope, IBinding orig, ObjectMap argMap) {
- super(scope, orig, argMap);
+ public CPPFunctionInstance(ICPPScope scope, IBinding orig, ObjectMap argMap, IType[] args) {
+ super(scope, orig, argMap, args);
// TODO Auto-generated constructor stub
}
@@ -72,7 +74,7 @@ public class CPPFunctionInstance extends CPPInstance implements ICPPFunction, IC
IParameter [] params = ((ICPPFunction)getOriginalBinding()).getParameters();
parameters = new IParameter[ params.length ];
for (int i = 0; i < params.length; i++) {
- parameters[i] = new CPPParameterInstance( null, params[i], getArgumentMap() );
+ parameters[i] = new CPPParameterInstance( null, params[i], getArgumentMap(), getArguments() );
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java
index c66672da902..275ed7174b4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java
@@ -31,18 +31,68 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
-import org.eclipse.cdt.core.parser.util.ObjectMap;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
+import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
/**
* @author aniefer
*/
public class CPPFunctionTemplate extends CPPTemplateDefinition implements ICPPFunctionTemplate, ICPPFunction {
- IFunctionType type = null;
+ public static final class CPPFunctionTemplateProblem extends ProblemBinding implements ICPPFunctionTemplate, ICPPFunction {
+ public CPPFunctionTemplateProblem(IASTNode node, int id, char[] arg) {
+ super(node, id, arg);
+ }
+ public ICPPTemplateParameter[] getTemplateParameters() throws DOMException {
+ throw new DOMException( this );
+ }
+ public ICPPTemplateSpecialization[] getTemplateSpecializations() throws DOMException {
+ throw new DOMException( this );
+ }
+ public String[] getQualifiedName() throws DOMException {
+ throw new DOMException( this );
+ }
+ public char[][] getQualifiedNameCharArray() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isGloballyQualified() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isMutable() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isInline() throws DOMException {
+ throw new DOMException( this );
+ }
+ public IParameter[] getParameters() throws DOMException {
+ throw new DOMException( this );
+ }
+ public IScope getFunctionScope() throws DOMException {
+ throw new DOMException( this );
+ }
+ public IFunctionType getType() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isStatic() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isExtern() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isAuto() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isRegister() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean takesVarArgs() throws DOMException {
+ throw new DOMException( this );
+ }
+ }
+ protected IFunctionType type = null;
/**
* @param decl
*/
@@ -85,24 +135,6 @@ public class CPPFunctionTemplate extends CPPTemplateDefinition implements ICPPFu
}
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplate#instantiate(org.eclipse.cdt.core.dom.ast.IASTNode[])
- */
- public IBinding instantiate(ICPPASTTemplateId templateId ) {//IASTNode[] arguments) {
- ICPPTemplateParameter [] params = getTemplateParameters();
- IASTNode [] arguments = templateId.getTemplateArguments();
-
- ObjectMap map = new ObjectMap(params.length);
- if( arguments.length == params.length ){
- for( int i = 0; i < arguments.length; i++ ){
- IType t = CPPVisitor.createType( arguments[i] );
- map.put( params[i], t );
- }
- }
-
- return CPPTemplates.createInstance( templateId, (ICPPScope) getScope(), this, map );
- }
-
/**
* @param templateParameter
* @return
@@ -233,6 +265,12 @@ public class CPPFunctionTemplate extends CPPTemplateDefinition implements ICPPFu
}
/* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateDefinition#deferredInstance(org.eclipse.cdt.core.dom.ast.IType[])
+ */
+ public ICPPTemplateInstance deferredInstance(IType[] arguments) {
+ return new CPPDeferredFunctionInstance( this, arguments );
+ }
+ /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IFunction#isStatic()
*/
public boolean isStatic() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java
new file mode 100644
index 00000000000..4ce07b742a7
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java
@@ -0,0 +1,58 @@
+package org.eclipse.cdt.internal.core.dom.parser.cpp;
+
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
+
+public class CPPFunctionTemplateSpecialization extends CPPFunction implements
+ ICPPTemplateSpecialization {
+
+ private IASTName name = null;
+ private IType [] argumentTypes = null;
+ private ICPPFunctionTemplate primaryTemplate = null;
+
+ public CPPFunctionTemplateSpecialization(ICPPASTFunctionDeclarator declarator, ICPPFunctionTemplate primaryTemplate ) {
+ super(declarator);
+ this.primaryTemplate = primaryTemplate;
+ IASTName n = declarator.getName();
+ if( n instanceof ICPPASTQualifiedName ){
+ IASTName [] ns = ((ICPPASTQualifiedName)n).getNames();
+ n = ns[ ns.length - 1 ];
+ }
+ this.name = n;
+ }
+
+ public IType [] getArguments() throws DOMException{
+ if( argumentTypes == null ){
+ IASTNode [] specArgs = ( name instanceof ICPPASTTemplateId ) ? ((ICPPASTTemplateId)name).getTemplateArguments()
+ : IASTNode.EMPTY_NODE_ARRAY;
+ argumentTypes = CPPTemplates.deduceTemplateFunctionArguments( this, specArgs );
+ }
+ return argumentTypes;
+ }
+
+ public boolean isPartialSpecialization() {
+ return false;
+ }
+
+ public ICPPTemplateDefinition getPrimaryTemplateDefinition() {
+ return primaryTemplate;
+ }
+
+ public ICPPTemplateParameter[] getTemplateParameters() {
+ return ICPPTemplateParameter.EMPTY_TEMPLATE_PARAMETER_ARRAY;
+ }
+
+ public ICPPTemplateSpecialization[] getTemplateSpecializations() {
+ return ICPPTemplateSpecialization.EMPTY_TEMPLATE_SPECIALIZATION_ARRAY;
+ }
+
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPInstance.java
index 8f49206e267..0d7a06fbfb4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPInstance.java
@@ -16,6 +16,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IScope;
+import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
@@ -26,13 +27,15 @@ import org.eclipse.cdt.core.parser.util.ObjectMap;
*/
public class CPPInstance implements ICPPTemplateInstance {
private IBinding binding;
+ private IType [] arguments;
private ObjectMap argMap;
private ICPPScope scope;
- public CPPInstance( ICPPScope scope, IBinding orig, ObjectMap argMap ){
+ public CPPInstance( ICPPScope scope, IBinding orig, ObjectMap argMap, IType [] arguments ){
this.binding = orig;
this.argMap = argMap;
this.scope = scope;
+ this.arguments = arguments;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPInstance#getOriginalBinding()
@@ -91,4 +94,10 @@ public class CPPInstance implements ICPPTemplateInstance {
// TODO Auto-generated method stub
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance#getArguments()
+ */
+ public IType[] getArguments() {
+ return arguments;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java
index 171cc070ef8..4d16cb71d3d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java
@@ -15,6 +15,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.parser.util.ObjectMap;
@@ -29,9 +30,10 @@ public class CPPMethodInstance extends CPPFunctionInstance implements
* @param scope
* @param orig
* @param argMap
+ * @param args
*/
- public CPPMethodInstance(ICPPScope scope, IBinding orig, ObjectMap argMap) {
- super(scope, orig, argMap);
+ public CPPMethodInstance(ICPPScope scope, IBinding orig, ObjectMap argMap, IType[] args) {
+ super(scope, orig, argMap, args);
// TODO Auto-generated constructor stub
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java
index afcd4f1cee0..f01e7976727 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
+import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
@@ -25,14 +26,14 @@ import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/**
* @author aniefer
*/
-public class CPPParameter implements IParameter, ICPPInternalBinding, ICPPVariable {
- public static class CPPParameterDelegate extends CPPDelegate implements IParameter, ICPPVariable {
+public class CPPParameter implements ICPPParameter, ICPPInternalBinding {
+ public static class CPPParameterDelegate extends CPPDelegate implements ICPPParameter {
public CPPParameterDelegate( IASTName name, IParameter binding ) {
super( name, binding );
}
@@ -54,6 +55,9 @@ public class CPPParameter implements IParameter, ICPPInternalBinding, ICPPVariab
public boolean isMutable() {
return false;
}
+ public IASTInitializer getDefaultValue() {
+ return ((ICPPParameter)getBinding()).getDefaultValue();
+ }
}
private IType type = null;
@@ -244,4 +248,18 @@ public class CPPParameter implements IParameter, ICPPInternalBinding, ICPPVariab
}
return false;
}
+
+ public IASTInitializer getDefaultValue() {
+ if( declarations == null )
+ return null;
+ for (int i = 0; i < declarations.length && declarations[i] != null; i++) {
+ IASTNode parent = declarations[i].getParent();
+ while( parent.getPropertyInParent() == IASTDeclarator.NESTED_DECLARATOR )
+ parent = parent.getParent();
+ IASTInitializer init = ((IASTDeclarator)parent).getInitializer();
+ if( init != null )
+ return init;
+ }
+ return null;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameterInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameterInstance.java
index 0e014036916..dde664b4475 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameterInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameterInstance.java
@@ -14,21 +14,21 @@
package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
import org.eclipse.cdt.core.parser.util.ObjectMap;
/**
* @author aniefer
*/
-public class CPPParameterInstance extends CPPInstance implements IParameter,
- ICPPVariable, ICPPInternalBinding {
+public class CPPParameterInstance extends CPPInstance implements ICPPParameter, ICPPInternalBinding {
private IType type = null;
@@ -37,8 +37,8 @@ public class CPPParameterInstance extends CPPInstance implements IParameter,
* @param orig
* @param argMap
*/
- public CPPParameterInstance(ICPPScope scope, IBinding orig, ObjectMap argMap) {
- super(scope, orig, argMap);
+ public CPPParameterInstance(ICPPScope scope, IBinding orig, ObjectMap argMap, IType [] args ) {
+ super(scope, orig, argMap, args);
}
/* (non-Javadoc)
@@ -131,4 +131,8 @@ public class CPPParameterInstance extends CPPInstance implements IParameter,
return false;
}
+ public IASTInitializer getDefaultValue() {
+ return ((ICPPParameter)getOriginalBinding()).getDefaultValue();
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java
index ad5c97511e9..a4168614b4e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
@@ -49,6 +49,16 @@ public class CPPPointerType implements IPointerType, ITypeContainer {
this.type = type;
}
+ public IType stripQualifiers(){
+ CPPPointerType result = this;
+ if( isConst || isVolatile ){
+ result = (CPPPointerType) clone();
+ result.isConst = false;
+ result.isVolatile = false;
+ }
+ return result;
+ }
+
public boolean isSameType( IType o ){
if( o == this )
return true;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java
index 00a8e449393..34f967a5660 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java
@@ -25,7 +25,6 @@ import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer;
public class CPPQualifierType implements IQualifierType, ITypeContainer {
private boolean isConst = false;
private boolean isVolatile = false;
- private boolean fromStringLiteral = false;
private IType type = null;
public CPPQualifierType( IType type, boolean isConst, boolean isVolatile ){
@@ -80,15 +79,4 @@ public class CPPQualifierType implements IQualifierType, ITypeContainer {
}
return t;
}
-
- /**
- * @return
- */
- public boolean fromStringLiteral() {
- return fromStringLiteral;
- }
-
- public void setFromStringLiteral( boolean fromString ){
- fromStringLiteral = fromString;
- }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java
index 1abf0786a3d..f36abcd4485 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java
@@ -35,6 +35,7 @@ import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression;
+import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTNode;
@@ -75,11 +76,13 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
@@ -88,11 +91,13 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPPointerToMemberType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
@@ -136,7 +141,7 @@ public class CPPSemantics {
public boolean considerConstructors = false;
public Object foundItems = null;
public Object [] functionParameters;
- public IASTNode [] templateParameters;
+ public IASTNode [] templateArguments;
public ProblemBinding problem;
@@ -155,7 +160,8 @@ public class CPPSemantics {
if( astName.getPropertyInParent() == STRING_LOOKUP_PROPERTY ) return true;
if( ( astName != null && astName.getParent() instanceof IASTIdExpression ) ||
item instanceof IASTNamespaceDefinition ||
- (item instanceof IASTSimpleDeclaration && ((IASTSimpleDeclaration)item).getDeclSpecifier() instanceof IASTCompositeTypeSpecifier ) )
+ (item instanceof IASTSimpleDeclaration && ((IASTSimpleDeclaration)item).getDeclSpecifier() instanceof IASTCompositeTypeSpecifier ) ||
+ item instanceof ICPPASTTemplateDeclaration )
{
return true;
}
@@ -463,6 +469,18 @@ public class CPPSemantics {
binding = e.getProblem();
}
}
+ if( binding instanceof ICPPClassTemplate ){
+ ASTNodeProperty prop = data.astName.getPropertyInParent();
+ if( prop != ICPPASTQualifiedName.SEGMENT_NAME && prop != ICPPASTTemplateId.TEMPLATE_NAME ){
+ try {
+ IScope scope = ((ICPPClassType)binding).getCompositeScope();
+ if( CPPVisitor.getContainingScope( data.astName ) == scope ){
+ binding = CPPTemplates.instantiateWithinClassTemplate( (ICPPClassTemplate) binding );
+ }
+ } catch( DOMException e ) {
+ }
+ }
+ }
if( binding instanceof ICPPClassType && data.considerConstructors ){
ICPPClassType cls = (ICPPClassType) binding;
try {
@@ -479,7 +497,12 @@ public class CPPSemantics {
}
if( binding != null ) {
if( data.astName.getPropertyInParent() == IASTNamedTypeSpecifier.NAME && !( binding instanceof IType || binding instanceof ICPPConstructor) ){
- binding = new ProblemBinding( data.astName, IProblemBinding.SEMANTIC_INVALID_TYPE, data.name );
+ IASTNode parent = data.astName.getParent().getParent();
+ if( parent instanceof IASTTypeId && parent.getPropertyInParent() == ICPPASTTemplateId.TEMPLATE_ID_ARGUMENT ){
+ //don't do a problem here
+ } else {
+ binding = new ProblemBinding( data.astName, IProblemBinding.SEMANTIC_INVALID_TYPE, data.name );
+ }
}
}
@@ -497,13 +520,14 @@ public class CPPSemantics {
CPPSemantics.LookupData data = new CPPSemantics.LookupData( name );
IASTNode parent = name.getParent();
- if( parent instanceof ICPPASTTemplateId ){
- data.templateParameters = ((ICPPASTTemplateId)parent).getTemplateArguments();
- parent = parent.getParent();
+ if( name instanceof ICPPASTTemplateId ){
+ data.templateArguments = ((ICPPASTTemplateId)name).getTemplateArguments();
}
- if( parent instanceof ICPPASTQualifiedName ){
+
+ if( parent instanceof ICPPASTTemplateId )
+ parent = parent.getParent();
+ if( parent instanceof ICPPASTQualifiedName )
parent = parent.getParent();
- }
if( parent instanceof IASTDeclarator && parent.getPropertyInParent() == IASTSimpleDeclaration.DECLARATOR ){
IASTSimpleDeclaration simple = (IASTSimpleDeclaration) parent.getParent();
@@ -583,7 +607,9 @@ public class CPPSemantics {
if( t instanceof ICPPClassType ){
if( !classes.containsKey( t ) ){
classes.put( t );
- namespaces.put( getContainingNamespaceScope( (IBinding) t ) );
+ IScope scope = getContainingNamespaceScope( (IBinding) t );
+ if( scope != null )
+ namespaces.put( scope );
ICPPClassType cls = (ICPPClassType) t;
ICPPBase[] bases = cls.getBases();
@@ -694,7 +720,7 @@ public class CPPSemantics {
return resultMap;
}
- static private void lookup( CPPSemantics.LookupData data, Object start ) throws DOMException{
+ static protected void lookup( CPPSemantics.LookupData data, Object start ) throws DOMException{
IASTNode node = data.astName;
ICPPScope scope = null;
@@ -780,7 +806,11 @@ public class CPPSemantics {
}
private static Object lookupInParents( CPPSemantics.LookupData data, ICPPClassScope lookIn ) throws DOMException{
- ICPPASTCompositeTypeSpecifier compositeTypeSpec = (ICPPASTCompositeTypeSpecifier) lookIn.getPhysicalNode();
+ IASTNode node = lookIn.getPhysicalNode();
+ if( node == null || !(node instanceof ICPPASTCompositeTypeSpecifier) )
+ return null;
+
+ ICPPASTCompositeTypeSpecifier compositeTypeSpec = (ICPPASTCompositeTypeSpecifier) node;
ICPPASTBaseSpecifier [] bases = compositeTypeSpec.getBaseSpecifiers();
Object inherited = null;
@@ -854,13 +884,13 @@ public class CPPSemantics {
if( result instanceof Object [] ){
Object [] r = (Object[]) result;
for( int j = 0; j < r.length && r[j] != null; j++ ) {
- if( checkForAmbiguity( r[j], inherited ) ){
+ if( checkForAmbiguity( data, r[j], inherited ) ){
data.problem = new ProblemBinding( data.astName, IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, data.name );
return null;
}
}
} else {
- if( checkForAmbiguity( result, inherited ) ){
+ if( checkForAmbiguity( data, result, inherited ) ){
data.problem = new ProblemBinding( data.astName, IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, data.name );
return null;
}
@@ -908,14 +938,13 @@ public class CPPSemantics {
}
}
}
- private static boolean checkForAmbiguity( Object n, Object names ) throws DOMException{
+ private static boolean checkForAmbiguity( LookupData data, Object n, Object names ) throws DOMException{
if( names instanceof Object[] ) {
names = ArrayUtil.trim( Object.class, (Object[]) names );
if( ((Object[])names).length == 0 )
return false;
}
- //it is not ambiguous if they are the same thing and it is static or an enumerator
IBinding binding = ( n instanceof IBinding) ? (IBinding)n : ((IASTName)n).resolveBinding();
Object [] objs = ( names instanceof Object[] ) ? (Object[])names : null;
int idx = ( objs != null && objs.length > 0 ) ? 0 : -1;
@@ -925,13 +954,29 @@ public class CPPSemantics {
if( binding != b )
return true;
- if( !(binding instanceof IEnumerator) &&
- !( (binding instanceof IFunction && ((IFunction)binding).isStatic()) ||
- (binding instanceof IVariable && ((IVariable)binding).isStatic()) ) )
+
+ boolean ok = false;
+ //3.4.5-4 if the id-expression in a class member access is a qualified id... the result
+ //is not required to be a unique base class...
+ if( binding instanceof ICPPClassType ){
+ IASTNode parent = data.astName.getParent();
+ if( parent instanceof ICPPASTQualifiedName &&
+ parent.getPropertyInParent() == IASTFieldReference.FIELD_NAME )
+ {
+ ok = true;
+ }
+ }
+ //it is not ambiguous if they are the same thing and it is static or an enumerator
+ if( binding instanceof IEnumerator ||
+ (binding instanceof IFunction && ((IFunction)binding).isStatic()) ||
+ (binding instanceof IVariable && ((IVariable)binding).isStatic()) )
{
- return true;
+ ok = true;
}
-
+ if( !ok )
+ return true;
+
+ next:
if( idx > -1 && idx < objs.length )
o = objs[idx++];
else
@@ -1028,6 +1073,12 @@ public class CPPSemantics {
} else if ( parent instanceof ICPPASTCompositeTypeSpecifier ){
ICPPASTCompositeTypeSpecifier comp = (ICPPASTCompositeTypeSpecifier) parent;
nodes = comp.getMembers();
+
+ //9-2 a class name is also inserted into the scope of the class itself
+ IASTName n = comp.getName();
+ if( nameMatches( data, n ) ) {
+ found = (IASTName[]) ArrayUtil.append( IASTName.class, found, n );
+ }
} else if ( parent instanceof ICPPASTNamespaceDefinition ){
//need binding because namespaces can be split
CPPNamespace namespace = (CPPNamespace) ((ICPPASTNamespaceDefinition)parent).getName().resolveBinding();
@@ -1123,6 +1174,8 @@ public class CPPSemantics {
}
}
}
+
+
scope.setFullyCached( true );
return found;
@@ -1453,7 +1506,11 @@ public class CPPSemantics {
(type instanceof ICPPDelegate && ((ICPPDelegate)type).getBinding() == temp) )
{
//ok, delegates are synonyms
- } else if( type != temp ) {
+ } else if( type instanceof ICPPClassTemplate && temp instanceof ICPPTemplateSpecialization &&
+ ((ICPPTemplateSpecialization)temp).getPrimaryTemplateDefinition() == type )
+ {
+ //ok, stay with the template, the specialization, if applicable, will come out during instantiation
+ } else if( type != temp ) {
return new ProblemBinding( data.astName, IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, data.name );
}
} else if( temp instanceof IFunction ){
@@ -1497,7 +1554,7 @@ public class CPPSemantics {
int numTemplateFns = templateFns.size();
if( numTemplateFns > 0 ){
- if( data.functionParameters != null && ( !data.forDefinition() || data.templateParameters != null ) ){
+ if( data.functionParameters != null && !data.forDefinition() ){
IFunction [] fs = CPPTemplates.selectTemplateFunctions( templateFns, data.functionParameters, data.astName );
if( fs != null && fs.length > 0){
if( fns == ObjectSet.EMPTY_SET )
@@ -1584,31 +1641,36 @@ public class CPPSemantics {
//if there are m arguments in the list, all candidate functions having m parameters
//are viable
if( num == numParameters ){
- if( data.forDefinition() && !functionHasParameters( fName, (IASTParameterDeclaration[]) data.functionParameters ) ){
+ if( data.forDefinition() && !isMatchingFunctionDeclaration( fName, data ) ){
functions[i] = null;
}
continue;
- } else if( function == null ){
- functions[i] = null;
- continue;
}
//check for void
else if( numParameters == 0 && num == 1 ){
- IASTParameterDeclaration param = function.getParameters()[0];
- IASTDeclSpecifier declSpec = param.getDeclSpecifier();
- if( declSpec instanceof IASTSimpleDeclSpecifier ){
- if( ((IASTSimpleDeclSpecifier)declSpec).getType() == IASTSimpleDeclSpecifier.t_void &&
- param.getDeclarator().getPointerOperators().length == 0 )
- {
- continue;
+ if( function != null ){
+ IASTParameterDeclaration param = function.getParameters()[0];
+ IASTDeclSpecifier declSpec = param.getDeclSpecifier();
+ if( declSpec instanceof IASTSimpleDeclSpecifier ){
+ if( ((IASTSimpleDeclSpecifier)declSpec).getType() == IASTSimpleDeclSpecifier.t_void &&
+ param.getDeclarator().getPointerOperators().length == 0 )
+ {
+ continue;
+ }
}
+ } else {
+ IParameter p = fName.getParameters()[0];
+ IType t = p.getType();
+ if( t instanceof IBasicType && ((IBasicType)t).getType() == IBasicType.t_void )
+ continue;
+
}
}
//A candidate function having fewer than m parameters is viable only if it has an
//ellipsis in its parameter list.
if( num < numParameters ){
- if( function.takesVarArgs() ) {
+ if( (function != null && function.takesVarArgs()) || fName.takesVarArgs() ) {
continue;
}
//not enough parameters, remove it
@@ -1617,18 +1679,43 @@ public class CPPSemantics {
//a candidate function having more than m parameters is viable only if the (m+1)-st
//parameter has a default argument
else {
- IASTParameterDeclaration [] params = function.getParameters();
- for( int j = num - 1; j >= numParameters; j-- ){
- if( params[j].getDeclarator().getInitializer() == null ){
- functions[i] = null;
- size--;
- break;
+ if( function != null ) {
+ IASTParameterDeclaration [] params = function.getParameters();
+ for( int j = num - 1; j >= numParameters; j-- ){
+ if( params[j].getDeclarator().getInitializer() == null ){
+ functions[i] = null;
+ size--;
+ break;
+ }
+ }
+ } else {
+ IParameter [] params = fName.getParameters();
+ for( int j = num - 1; j >= numParameters; j-- ){
+ if( ((ICPPParameter)params[j]).getDefaultValue() == null ){
+ functions[i] = null;
+ size--;
+ break;
+ }
}
}
}
}
}
+ static private boolean isMatchingFunctionDeclaration( IFunction candidate, LookupData data ){
+ IASTName name = data.astName;
+ ICPPASTTemplateDeclaration decl = CPPTemplates.getTemplateDeclaration( name );
+ if( candidate instanceof ICPPTemplateDefinition && decl instanceof ICPPASTTemplateSpecialization ){
+ ICPPFunctionTemplate fn = CPPTemplates.resolveTemplateFunctions( new Object [] { candidate }, data.astName );
+ return ( fn != null && !(fn instanceof IProblemBinding ) );
+ }
+ try {
+ return functionHasParameters( candidate, (IASTParameterDeclaration[]) data.functionParameters );
+ } catch (DOMException e) {
+ }
+ return false;
+ }
+
static private IType getSourceParameterType( Object [] params, int idx ){
if( params instanceof IType[] ){
IType [] types = (IType[]) params;
@@ -1815,6 +1902,34 @@ public class CPPSemantics {
ambiguous |= ( hasWorse && hasBetter ) || ( !hasWorse && !hasBetter );
if( !hasWorse ){
+ //if they are both template functions, we can order them that way
+ boolean bestIsTemplate = (bestFn instanceof ICPPTemplateInstance &&
+ ((ICPPTemplateInstance)bestFn).getOriginalBinding() instanceof ICPPFunctionTemplate);
+ boolean currIsTemplate = (currFn instanceof ICPPTemplateInstance &&
+ ((ICPPTemplateInstance)currFn).getOriginalBinding() instanceof ICPPFunctionTemplate);
+ if( bestIsTemplate && currIsTemplate )
+ {
+ ICPPFunctionTemplate t1 = (ICPPFunctionTemplate) ((ICPPTemplateInstance)bestFn).getOriginalBinding();
+ ICPPFunctionTemplate t2 = (ICPPFunctionTemplate) ((ICPPTemplateInstance)currFn).getOriginalBinding();
+ int order = CPPTemplates.orderTemplateFunctions( t1, t2);
+ if ( order < 0 ){
+ hasBetter = true;
+ } else if( order > 0 ){
+ ambiguous = false;
+ }
+ }
+ //we prefer normal functions over template functions, unless we specified template arguments
+ else if( bestIsTemplate && !currIsTemplate ){
+ if( data.templateArguments == null )
+ hasBetter = true;
+ else
+ ambiguous = false;
+ } else if( !bestIsTemplate && currIsTemplate ){
+ if( data.templateArguments == null )
+ ambiguous = false;
+ else
+ hasBetter = true;
+ }
if( hasBetter ){
//the new best function.
ambiguous = false;
@@ -2049,7 +2164,7 @@ public class CPPSemantics {
return result;
}
- static private Cost checkStandardConversionSequence( IType source, IType target ) throws DOMException {
+ static protected Cost checkStandardConversionSequence( IType source, IType target ) throws DOMException {
Cost cost = lvalue_to_rvalue( source, target );
if( cost.source == null || cost.target == null ){
@@ -2288,8 +2403,18 @@ public class CPPSemantics {
else {
//4.2-2 a string literal can be converted to pointer to char
if( t instanceof IBasicType && ((IBasicType)t).getType() == IBasicType.t_char &&
- s instanceof CPPQualifierType && ((CPPQualifierType)s).fromStringLiteral() )
- canConvert = true;
+ s instanceof IQualifierType )
+ {
+ IType qt = ((IQualifierType)s).getType();
+ if( qt instanceof IBasicType ){
+ IASTExpression val = ((IBasicType)qt).getValue();
+ canConvert = (val != null &&
+ val instanceof IASTLiteralExpression &&
+ ((IASTLiteralExpression)val).getKind() == IASTLiteralExpression.lk_string_literal );
+ } else {
+ canConvert = false;
+ }
+ }
else
canConvert = false;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java
index 2e34b133702..df72b382dcf 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java
@@ -14,6 +14,7 @@
package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
+import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
@@ -22,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IScope;
+import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
@@ -29,59 +31,210 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
+import org.eclipse.cdt.core.parser.util.ObjectMap;
+import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
/**
* @author aniefer
*/
public abstract class CPPTemplateDefinition implements ICPPTemplateDefinition, ICPPInternalBinding {
+ public static final class CPPTemplateProblem extends ProblemBinding implements ICPPTemplateDefinition {
+ public CPPTemplateProblem(IASTNode node, int id, char[] arg) {
+ super(node, id, arg);
+ }
+ public ICPPTemplateParameter[] getTemplateParameters() throws DOMException {
+ throw new DOMException( this );
+ }
+ public ICPPTemplateSpecialization[] getTemplateSpecializations() throws DOMException {
+ throw new DOMException( this );
+ }
+ public String[] getQualifiedName() throws DOMException {
+ throw new DOMException( this );
+ }
+ public char[][] getQualifiedNameCharArray() throws DOMException {
+ throw new DOMException( this );
+ }
+ public boolean isGloballyQualified() throws DOMException {
+ throw new DOMException( this );
+ }
+ }
//private IASTName templateName;
protected IASTName [] declarations = null;
protected IASTName definition = null;
private ICPPTemplateParameter [] templateParameters = null;
private ICPPTemplateSpecialization [] specializations = null;
+ private ObjectMap instances = null;
public CPPTemplateDefinition( IASTName name ) {
- ASTNodeProperty prop = name.getPropertyInParent();
- if( prop == IASTCompositeTypeSpecifier.TYPE_NAME ){
- definition = name;
- } else if( prop == IASTElaboratedTypeSpecifier.TYPE_NAME ) {
- declarations = new IASTName [] { name };
- } else {
- IASTNode parent = name.getParent();
- while( !(parent instanceof IASTDeclaration) )
- parent = parent.getParent();
- if( parent instanceof IASTFunctionDefinition )
+ if( name != null ){
+ ASTNodeProperty prop = name.getPropertyInParent();
+ if( prop == IASTCompositeTypeSpecifier.TYPE_NAME ){
definition = name;
- else
+ } else if( prop == IASTElaboratedTypeSpecifier.TYPE_NAME ) {
declarations = new IASTName [] { name };
+ } else {
+ IASTNode parent = name.getParent();
+ while( !(parent instanceof IASTDeclaration) )
+ parent = parent.getParent();
+ if( parent instanceof IASTFunctionDefinition )
+ definition = name;
+ else
+ declarations = new IASTName [] { name };
+ }
}
}
- public abstract IBinding instantiate( ICPPASTTemplateId templateId );
+ public abstract ICPPTemplateInstance deferredInstance( IType [] arguments );
+
+ public IBinding instantiate(ICPPASTTemplateId templateId ) {//IASTNode[] arguments) {
+ IASTNode [] args = templateId.getTemplateArguments();
+ IType [] types = CPPTemplates.createTypeArray( args );
+ return instantiate( types );
+ }
- public ICPPTemplateSpecialization [] getSpecializations() {
+ public IBinding instantiate( IType [] arguments ){
+ ICPPTemplateDefinition template;
+ try {
+ template = CPPTemplates.matchTemplatePartialSpecialization( this, arguments );
+ } catch (DOMException e) {
+ return e.getProblem();
+ }
+
+ if( template != null && template instanceof ICPPTemplateSpecialization ){
+ return ((CPPTemplateDefinition)template).instantiate( arguments );
+ }
+
+ if( template == null ){
+ template = this;
+ }
+
+ ICPPTemplateParameter[] parameters = null;
+ try {
+ parameters = template.getTemplateParameters();
+ } catch (DOMException e1) {
+ return e1.getProblem();
+ }
+
+ int numParams = ( parameters != null ) ? parameters.length : 0;
+ int numArgs = arguments.length;
+
+ if( numParams == 0 ){
+ return null;
+ }
+
+ ObjectMap map = new ObjectMap( numParams );
+ ICPPTemplateParameter param = null;
+ IType arg = null;
+ IType[] actualArgs = new IType[ numParams ];
+
+ for( int i = 0; i < numParams; i++ ){
+
+ param = parameters[i];
+
+ if( i < numArgs ){
+ arg = arguments[i];
+ //If the argument is a template parameter, we can't instantiate yet, defer for later
+ if( arg instanceof ICPPTemplateParameter ){
+ return deferredInstance( arguments );
+ }
+ } else {
+ IType defaultType = null;
+ try {
+ if( param instanceof ICPPTemplateTypeParameter )
+ defaultType = ((ICPPTemplateTypeParameter)param).getDefault();
+ else if( param instanceof ICPPTemplateTemplateParameter )
+ defaultType = ((ICPPTemplateTemplateParameter)param).getDefault();
+ else if( param instanceof ICPPTemplateNonTypeParameter )
+ defaultType = CPPVisitor.getExpressionType( ((ICPPTemplateNonTypeParameter)param).getDefault() );
+ } catch (DOMException e) {
+ defaultType = e.getProblem();
+ }
+ if( defaultType != null ){
+ if( defaultType instanceof ICPPTemplateParameter ){
+ if( map.containsKey( defaultType ) ){
+ arg = (IType) map.get( defaultType );
+ }
+ }
+ } else {
+ //TODO problem
+ return null;
+ }
+ }
+
+ if( CPPTemplates.matchTemplateParameterAndArgument( param, arg ) ){
+ map.put( param, arg );
+ actualArgs[i] = arg;
+ } else {
+ //TODO problem
+ return null;
+ }
+ }
+
+ ICPPTemplateInstance instance = getInstance( actualArgs );
+ if( instance != null ){
+ return instance;
+ }
+
+ instance = (ICPPTemplateInstance) CPPTemplates.createInstance( (ICPPScope) getScope(), this, map, arguments );
+ addInstance( arguments, instance );
+
+ return instance;
+ }
+
+ public ICPPTemplateSpecialization [] getTemplateSpecializations() {
return (ICPPTemplateSpecialization[]) ArrayUtil.trim( ICPPTemplateSpecialization.class, specializations );
}
public void addSpecialization( ICPPTemplateSpecialization spec ){
specializations = (ICPPTemplateSpecialization[]) ArrayUtil.append( ICPPTemplateSpecialization.class, specializations, spec );
}
+ public ICPPTemplateInstance getInstance( IType [] arguments ) {
+ if( instances == null )
+ return null;
+
+ int found = -1;
+ for( int i = 0; i < instances.size(); i++ ){
+ IType [] args = (IType[]) instances.keyAt( i );
+ if( args.length == arguments.length ){
+ int j = 0;
+ for(; j < args.length; j++) {
+ if( !( args[j].equals( arguments[j] ) ) )
+ break;
+ }
+ if( j == args.length ){
+ found = i;
+ break;
+ }
+ }
+ }
+ if( found != -1 ){
+ return (ICPPTemplateInstance) instances.getAt(found);
+ }
+ return null;
+ }
+
+ public void addInstance( IType [] types, ICPPTemplateInstance instance ){
+ if( instances == null )
+ instances = new ObjectMap( 2 );
+ instances.put( types, instance );
+ }
public IBinding resolveTemplateParameter(ICPPASTTemplateParameter templateParameter) {
IASTName name = CPPTemplates.getTemplateParameterName( templateParameter );
IBinding binding = name.getBinding();
if( binding != null )
return binding;
-
- if( templateParameter.getParent() instanceof ICPPASTTemplatedTypeTemplateParameter ){
-
- }
-
+
ICPPASTTemplateDeclaration templateDecl = (ICPPASTTemplateDeclaration) templateParameter.getParent();
ICPPASTTemplateParameter [] ps = templateDecl.getTemplateParameters();
@@ -92,7 +245,13 @@ public abstract class CPPTemplateDefinition implements ICPPTemplateDefinition, I
}
//create a new binding and set it for the corresponding parameter in all known decls
- binding = new CPPTemplateParameter( name );
+ if( templateParameter instanceof ICPPASTSimpleTypeTemplateParameter )
+ binding = new CPPTemplateTypeParameter( name );
+ else if( templateParameter instanceof ICPPASTParameterDeclaration )
+ binding = new CPPTemplateNonTypeParameter( name );
+ else
+ binding = new CPPTemplateTemplateParameter( name );
+
ICPPASTTemplateParameter temp = null;
ICPPASTTemplateDeclaration template = null;
int length = ( declarations != null ) ? declarations.length : 0;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java
new file mode 100644
index 00000000000..2f8d72f0317
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateNonTypeParameter.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 13, 2005
+ */
+package org.eclipse.cdt.internal.core.dom.parser.cpp;
+
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
+import org.eclipse.cdt.core.dom.ast.IASTExpression;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
+
+/**
+ * @author aniefer
+ */
+public class CPPTemplateNonTypeParameter extends CPPTemplateParameter implements
+ ICPPTemplateNonTypeParameter {
+
+ private IType type = null;
+
+ /**
+ * @param name
+ */
+ public CPPTemplateNonTypeParameter(IASTName name) {
+ super(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter#getDefault()
+ */
+ public IASTExpression getDefault() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IVariable#getType()
+ */
+ public IType getType() {
+ if( type == null ){
+ IASTName name = getPrimaryDeclaration();
+ IASTDeclarator dtor = (IASTDeclarator) name.getParent();
+ type = CPPVisitor.createType( dtor );
+ }
+ return type;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IVariable#isStatic()
+ */
+ public boolean isStatic() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IVariable#isExtern()
+ */
+ public boolean isExtern() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IVariable#isAuto()
+ */
+ public boolean isAuto() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IVariable#isRegister()
+ */
+ public boolean isRegister() throws DOMException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#createDelegate(org.eclipse.cdt.core.dom.ast.IASTName)
+ */
+ public ICPPDelegate createDelegate(IASTName name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDefinition(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDefinition(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDeclaration(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java
index dd4f2dd8eef..3f8b1067f68 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java
@@ -17,7 +17,6 @@ import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.IType;
-import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
@@ -25,7 +24,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
/**
* @author aniefer
*/
-public class CPPTemplateParameter implements ICPPTemplateParameter, IType, ICPPInternalBinding {
+public class CPPTemplateParameter implements ICPPTemplateParameter, ICPPInternalBinding {
private IASTName [] declarations;
public CPPTemplateParameter( IASTName name ){
@@ -141,15 +140,4 @@ public class CPPTemplateParameter implements ICPPTemplateParameter, IType, ICPPI
// TODO Auto-generated method stub
}
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.dom.ast.IType#isSameType(org.eclipse.cdt.core.dom.ast.IType)
- */
- public boolean isSameType( IType type ) {
- if( type == this )
- return true;
- if( type instanceof ITypedef )
- return ((ITypedef)type).isSameType( this );
- return false;
- }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java
new file mode 100644
index 00000000000..de0e4256944
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 13, 2005
+ */
+package org.eclipse.cdt.internal.core.dom.parser.cpp;
+
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IField;
+import org.eclipse.cdt.core.dom.ast.IScope;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.ITypedef;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
+import org.eclipse.cdt.core.parser.util.ArrayUtil;
+
+/**
+ * @author aniefer
+ */
+public class CPPTemplateTemplateParameter extends CPPTemplateParameter implements
+ ICPPTemplateTemplateParameter, ICPPClassType {
+
+ private ICPPTemplateParameter [] templateParameters = null;
+
+ /**
+ * @param name
+ */
+ public CPPTemplateTemplateParameter(IASTName name) {
+ super(name);
+ // TODO Auto-generated constructor stub
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter#getTemplateParameters()
+ */
+ public ICPPTemplateParameter[] getTemplateParameters() {
+ if( templateParameters == null ){
+ ICPPASTTemplatedTypeTemplateParameter template = (ICPPASTTemplatedTypeTemplateParameter) getPrimaryDeclaration().getParent();
+ ICPPASTTemplateParameter [] params = template.getTemplateParameters();
+ ICPPTemplateParameter p = null;
+ ICPPTemplateParameter [] result = null;
+ for (int i = 0; i < params.length; i++) {
+ if( params[i] instanceof ICPPASTSimpleTypeTemplateParameter ){
+ p = (ICPPTemplateParameter) ((ICPPASTSimpleTypeTemplateParameter)params[i]).getName().resolveBinding();
+ } else if( params[i] instanceof ICPPASTParameterDeclaration ) {
+ p = (ICPPTemplateParameter) ((ICPPASTParameterDeclaration)params[i]).getDeclarator().getName().resolveBinding();
+ } else if( params[i] instanceof ICPPASTTemplatedTypeTemplateParameter ){
+ p = (ICPPTemplateParameter) ((ICPPASTTemplatedTypeTemplateParameter)params[i]).getName().resolveBinding();
+ }
+
+ if( p != null ){
+ result = (ICPPTemplateParameter[]) ArrayUtil.append( ICPPTemplateParameter.class, result, p );
+ }
+ }
+ templateParameters = (ICPPTemplateParameter[]) ArrayUtil.trim( ICPPTemplateParameter.class, result );
+ }
+ return templateParameters;
+ }
+
+ /**
+ * @param templateParameter
+ * @return
+ */
+ public IBinding resolveTemplateParameter(ICPPASTTemplateParameter templateParameter) {
+ IASTName name = CPPTemplates.getTemplateParameterName( templateParameter );
+
+ IBinding binding = name.getBinding();
+ if( binding == null ){
+ //create a new binding and set it for the corresponding parameter in all known decls
+ if( templateParameter instanceof ICPPASTSimpleTypeTemplateParameter )
+ binding = new CPPTemplateTypeParameter( name );
+ else if( templateParameter instanceof ICPPASTParameterDeclaration )
+ binding = new CPPTemplateNonTypeParameter( name );
+ else
+ binding = new CPPTemplateTemplateParameter( name );
+ name.setBinding( binding );
+ }
+ return binding;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition#getTemplateSpecializations()
+ */
+ public ICPPTemplateSpecialization[] getTemplateSpecializations() throws DOMException {
+ return ICPPTemplateSpecialization.EMPTY_TEMPLATE_SPECIALIZATION_ARRAY;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter#getDefault()
+ */
+ public IType getDefault() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getBases()
+ */
+ public ICPPBase[] getBases() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getFields()
+ */
+ public IField[] getFields() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#findField(java.lang.String)
+ */
+ public IField findField(String name) throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredFields()
+ */
+ public ICPPField[] getDeclaredFields() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getMethods()
+ */
+ public ICPPMethod[] getMethods() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getAllDeclaredMethods()
+ */
+ public ICPPMethod[] getAllDeclaredMethods() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredMethods()
+ */
+ public ICPPMethod[] getDeclaredMethods() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getConstructors()
+ */
+ public ICPPConstructor[] getConstructors() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getFriends()
+ */
+ public IBinding[] getFriends() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getKey()
+ */
+ public int getKey() throws DOMException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getCompositeScope()
+ */
+ public IScope getCompositeScope() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#createDelegate(org.eclipse.cdt.core.dom.ast.IASTName)
+ */
+ public ICPPDelegate createDelegate(IASTName name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDefinition(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDefinition(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTNode)
+ */
+ public void addDeclaration(IASTNode node) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IType#isSameType(org.eclipse.cdt.core.dom.ast.IType)
+ */
+ public boolean isSameType( IType type ) {
+ if( type == this )
+ return true;
+ if( type instanceof ITypedef )
+ return ((ITypedef)type).isSameType( this );
+ return false;
+ }
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java
new file mode 100644
index 00000000000..ad3ae769b5a
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 13, 2005
+ */
+package org.eclipse.cdt.internal.core.dom.parser.cpp;
+
+import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.ITypedef;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
+
+/**
+ * @author aniefer
+ */
+public class CPPTemplateTypeParameter extends CPPTemplateParameter implements
+ ICPPTemplateTypeParameter, IType {
+
+ /**
+ * @param name
+ */
+ public CPPTemplateTypeParameter(IASTName name) {
+ super(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter#getDefault()
+ */
+ public IType getDefault() throws DOMException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IType#isSameType(org.eclipse.cdt.core.dom.ast.IType)
+ */
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IType#isSameType(org.eclipse.cdt.core.dom.ast.IType)
+ */
+ public boolean isSameType( IType type ) {
+ if( type == this )
+ return true;
+ if( type instanceof ITypedef )
+ return ((ITypedef)type).isSameType( this );
+ return false;
+ }
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java
index da33d8a878d..33017d876d5 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java
@@ -17,18 +17,30 @@ import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
+import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
+import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTStatement;
+import org.eclipse.cdt.core.dom.ast.IArrayType;
+import org.eclipse.cdt.core.dom.ast.IBasicType;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IFunction;
import org.eclipse.cdt.core.dom.ast.IFunctionType;
+import org.eclipse.cdt.core.dom.ast.IParameter;
+import org.eclipse.cdt.core.dom.ast.IPointerType;
+import org.eclipse.cdt.core.dom.ast.IProblemBinding;
+import org.eclipse.cdt.core.dom.ast.IQualifierType;
+import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeTemplateParameter;
@@ -40,18 +52,26 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPPointerToMemberType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateSpecialization;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.core.parser.util.ObjectMap;
import org.eclipse.cdt.core.parser.util.ObjectSet;
import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer;
+import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics.Cost;
/**
* @author aniefer
@@ -90,8 +110,11 @@ public class CPPTemplates {
IASTSimpleDeclaration simpleDecl = (IASTSimpleDeclaration) decl;
IASTDeclarator [] dtors = ((IASTSimpleDeclaration)decl).getDeclarators();
if( dtors.length == 0 ){
- if( simpleDecl.getDeclSpecifier() instanceof ICPPASTCompositeTypeSpecifier ){
- name = ((ICPPASTCompositeTypeSpecifier)simpleDecl.getDeclSpecifier()).getName();
+ IASTDeclSpecifier spec = simpleDecl.getDeclSpecifier();
+ if( spec instanceof ICPPASTCompositeTypeSpecifier ){
+ name = ((ICPPASTCompositeTypeSpecifier)spec).getName();
+ } else if( spec instanceof ICPPASTElaboratedTypeSpecifier ){
+ name = ((ICPPASTElaboratedTypeSpecifier)spec).getName();
}
} else {
IASTDeclarator dtor = dtors[0];
@@ -126,6 +149,9 @@ public class CPPTemplates {
} else {
binding = name.resolveBinding();
}
+ } else if( parent instanceof ICPPASTTemplatedTypeTemplateParameter ){
+ ICPPASTTemplatedTypeTemplateParameter templatedParam = (ICPPASTTemplatedTypeTemplateParameter) parent;
+ binding = templatedParam.getName().resolveBinding();
}
return (binding instanceof ICPPTemplateDefinition) ? (ICPPTemplateDefinition) binding : null;
}
@@ -135,6 +161,8 @@ public class CPPTemplates {
IBinding binding = null;
if( template instanceof CPPTemplateDefinition ){
binding = ((CPPTemplateDefinition)template).resolveTemplateParameter( templateParameter );
+ } else if( template instanceof CPPTemplateTemplateParameter ){
+ binding = ((CPPTemplateTemplateParameter)template).resolveTemplateParameter( templateParameter );
}
return binding;
@@ -159,26 +187,67 @@ public class CPPTemplates {
*/
public static IBinding createBinding(ICPPASTTemplateId id) {
IASTNode parent = id.getParent();
- if( parent instanceof ICPPASTCompositeTypeSpecifier ){
+ int segment = -1;
+ if( parent instanceof ICPPASTQualifiedName ){
+ IASTName [] ns = ((ICPPASTQualifiedName)parent).getNames();
+ segment = ( ns[ ns.length - 1 ] == id ) ? 1 : 0;
+ parent = parent.getParent();
+ }
+
+ if( parent instanceof ICPPASTCompositeTypeSpecifier && segment == 1 ){
return createClassPartialSpecialization( (ICPPASTCompositeTypeSpecifier) parent );
+ } else if( parent instanceof ICPPASTFunctionDeclarator && segment == 1 ){
+ return createFunctionSpecialization( id );
}
- IASTName templateName = id.getTemplateName();
- IBinding template = templateName.resolveBinding();
- if( template != null && template instanceof ICPPTemplateDefinition ){
- return ((CPPTemplateDefinition)template).instantiate( id );
+
+ //a reference: class or function template?
+ IBinding template = null;
+ if( parent instanceof ICPPASTNamedTypeSpecifier || segment == 0 ){
+ //class template
+ IASTName templateName = id.getTemplateName();
+ template = templateName.resolveBinding();
+ if( template instanceof ICPPTemplateSpecialization ){
+ //specializations are selected during the instantiation, start with the primary template
+ try {
+ template = ((ICPPTemplateSpecialization)template).getPrimaryTemplateDefinition();
+ } catch (DOMException e) {
+ return e.getProblem();
+ }
+ }
+
+ if( template != null && template instanceof ICPPTemplateDefinition ){
+ if( template instanceof CPPTemplateDefinition )
+ if( template instanceof ICPPTemplateTemplateParameter ){
+ return template;//todo
+ } else if( template instanceof CPPTemplateDefinition )
+ return ((CPPTemplateDefinition)template).instantiate( id );
+ }
+ } else {
+ //functions are instatiated as part of the resolution process
+ template = CPPVisitor.createBinding( id );
+ if( template instanceof ICPPTemplateInstance ){
+ IASTName templateName = id.getTemplateName();
+ templateName.setBinding( ((ICPPTemplateInstance)template).getOriginalBinding() );
+ }
}
+
return template;
}
protected static IBinding createClassPartialSpecialization( ICPPASTCompositeTypeSpecifier compSpec ){
- ICPPASTTemplateId id = (ICPPASTTemplateId) compSpec.getName();
+ IASTName name = compSpec.getName();
+ if( name instanceof ICPPASTQualifiedName ){
+ IASTName [] ns = ((ICPPASTQualifiedName)name).getNames();
+ name = ns[ ns.length - 1 ];
+ }
+ ICPPASTTemplateId id = (ICPPASTTemplateId) name;
IBinding binding = id.getTemplateName().resolveBinding();
if( !(binding instanceof ICPPClassTemplate) )
return null; //TODO: problem?
CPPClassTemplate template = (CPPClassTemplate) binding;
- ICPPTemplateSpecialization [] specializations = template.getSpecializations();
+ ICPPTemplateSpecialization [] specializations = template.getTemplateSpecializations();
ICPPTemplateSpecialization spec = null;
for (int i = 0; i < specializations.length; i++) {
if( isSameTemplate( specializations[i], id ) ){
@@ -196,6 +265,165 @@ public class CPPTemplates {
template.addSpecialization( spec );
return spec;
}
+
+ protected static IBinding createFunctionSpecialization( IASTName name ){
+ CPPSemantics.LookupData data = new CPPSemantics.LookupData( name );
+ data.forceQualified = true;
+ IScope scope = CPPVisitor.getContainingScope( name );
+ if( name.getPropertyInParent() != ICPPASTQualifiedName.SEGMENT_NAME ){
+ try {
+ scope = scope.getParent();
+ } catch (DOMException e) {
+ }
+ }
+ try {
+ CPPSemantics.lookup( data, scope );
+ } catch (DOMException e) {
+ return e.getProblem();
+ }
+
+ ICPPFunctionTemplate function = resolveTemplateFunctions( (Object[]) data.foundItems, name );
+ if( function == null )
+ return new ProblemBinding( name, IProblemBinding.SEMANTIC_NAME_NOT_FOUND, name.toCharArray() );
+ if( function instanceof IProblemBinding )
+ return function;
+
+ if( name instanceof ICPPASTTemplateId ){
+ ((ICPPASTTemplateId)name).getTemplateName().setBinding( function );
+ }
+ IASTNode parent = name.getParent();
+ while( parent instanceof IASTName )
+ parent = parent.getParent();
+
+ ICPPTemplateSpecialization spec = new CPPFunctionTemplateSpecialization( (ICPPASTFunctionDeclarator)parent, function );
+ ((CPPTemplateDefinition)function).addSpecialization( spec );
+ return spec;
+ }
+
+ static protected ICPPFunctionTemplate resolveTemplateFunctions( Object [] items, IASTName name ) {
+ if( items == null )
+ return null;
+ ICPPFunctionTemplate [] templates = null;
+ IBinding temp = null;
+ for( int i = 0; i < items.length; i++ ){
+ Object o = items[i];
+
+ if( o instanceof IASTName ){
+ temp = ((IASTName) o).resolveBinding();
+ if( temp == null )
+ continue;
+ } else if( o instanceof IBinding ){
+ temp = (IBinding) o;
+ } else
+ continue;
+
+ if( temp instanceof ICPPTemplateInstance )
+ temp = ((ICPPTemplateInstance)temp).getOriginalBinding();
+ if( temp instanceof ICPPFunctionTemplate )
+ templates = (ICPPFunctionTemplate[]) ArrayUtil.append( ICPPFunctionTemplate.class, templates, temp );
+ }
+
+ if( templates == null )
+ return null;
+
+ IType [] templateArguments = null;
+
+ if( name instanceof ICPPASTTemplateId ){
+ templateArguments = createTypeArray( ((ICPPASTTemplateId)name).getTemplateArguments() );
+ }
+ int numArgs = ( templateArguments != null ) ? templateArguments.length : 0;
+
+
+ if( name.getParent() instanceof IASTName )
+ name = (IASTName) name.getParent();
+ ICPPASTFunctionDeclarator fdtor = (ICPPASTFunctionDeclarator) name.getParent();
+ IType [] functionParameters = createTypeArray( fdtor.getParameters() );
+
+ ICPPFunctionTemplate result = null;
+ outer: for( int i = 0; i < templates.length && templates[i] != null; i++ ){
+ ICPPFunctionTemplate tmpl = templates[i];
+
+ ObjectMap map = ObjectMap.EMPTY_MAP;
+ try {
+ map = deduceTemplateArguments( tmpl, functionParameters );
+ } catch (DOMException e) {
+ }
+
+ if( map == null )
+ continue;
+ ICPPTemplateParameter [] params = null;
+ try {
+ params = tmpl.getTemplateParameters();
+ } catch (DOMException e) {
+ continue;
+ }
+
+ int numParams = params.length;
+ IType arg = null;
+ for( int j = 0; j < numParams; j++ ){
+ ICPPTemplateParameter param = params[j];
+ if( j < numArgs ){
+ arg = templateArguments[j];
+ }
+ if( map.containsKey( param ) ) {
+ IType t = (IType) map.get( param );
+ if( arg == null )
+ arg = t;
+ else if( !t.isSameType( arg ) ){
+ continue outer;
+ }
+ } else if( arg == null || !matchTemplateParameterAndArgument( param, arg )){
+ continue outer;
+ }
+ }
+ //made it this far, its a match
+ if( result != null ){
+ return new CPPFunctionTemplate.CPPFunctionTemplateProblem(name, IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, name.toCharArray() );
+ }
+ result = tmpl;
+ }
+
+ return result;
+ }
+
+ static protected IType[] deduceTemplateFunctionArguments( ICPPTemplateSpecialization specialization, IASTNode [] specArgs ) throws DOMException
+ {
+ if( !(specialization instanceof ICPPFunction ) )
+ return null;
+
+ ICPPFunctionTemplate primaryTemplate = (ICPPFunctionTemplate) specialization.getPrimaryTemplateDefinition();
+ ICPPTemplateParameter [] templateParameters = primaryTemplate.getTemplateParameters();
+ IType [] arguments = createTypeArray( specArgs );
+
+ IType [] result = new IType[ templateParameters.length ];
+ ObjectMap map = null;
+
+ for( int i = 0; i < templateParameters.length; i++ ){
+ ICPPTemplateParameter param = templateParameters[i];
+ IType arg = null;
+ if( i < arguments.length ){
+ arg = arguments[i];
+ } else {
+ if( map == null ){
+ IParameter [] functionParameters = ((ICPPFunction)specialization).getParameters();
+ IType [] paramTypes = createTypeArray( functionParameters );
+ map = deduceTemplateArguments( primaryTemplate, paramTypes );
+ if(map == null )
+ return null;
+ }
+ if( map.containsKey( param ) ){
+ arg = (IType) map.get( param );
+ }
+ }
+
+ if( arg == null || !matchTemplateParameterAndArgument( param, arg ) )
+ return null;
+
+ result[i] = arg;
+ }
+
+ return result;
+ }
/**
* @param scope
* @return
@@ -210,16 +438,16 @@ public class CPPTemplates {
* @param arguments
* @return
*/
- public static IBinding createInstance( IASTName id, ICPPScope scope, IBinding decl, ObjectMap argMap) {
+ public static IBinding createInstance( ICPPScope scope, IBinding decl, ObjectMap argMap, IType [] args ) {
ICPPTemplateInstance instance = null;
if( decl instanceof ICPPClassType ){
- instance = new CPPClassInstance( id, scope, decl, argMap );
+ instance = new CPPClassInstance( scope, decl, argMap, args );
} else if( decl instanceof ICPPField ){
- instance = new CPPFieldInstance( scope, decl, argMap );
+ instance = new CPPFieldInstance( scope, decl, argMap, args );
} else if( decl instanceof ICPPMethod ) {
- instance = new CPPMethodInstance( scope, decl, argMap );
+ instance = new CPPMethodInstance( scope, decl, argMap, args );
} else if( decl instanceof ICPPFunction ) {
- instance = new CPPFunctionInstance( scope, decl, argMap );
+ instance = new CPPFunctionInstance( scope, decl, argMap, args );
}
return instance;
}
@@ -260,9 +488,13 @@ public class CPPTemplates {
temp = (IType) type.clone();
((ITypeContainer)temp).setType( newType );
newType = temp;
+ } else {
+ newType = type;
}
} else if( type instanceof ICPPTemplateParameter && argMap.containsKey( type ) ){
newType = (IType) argMap.get( type );
+ } else if( type instanceof CPPDeferredClassInstance ){
+ newType = ((CPPDeferredClassInstance)type).instantiate( argMap );
}
return newType;
@@ -272,8 +504,11 @@ public class CPPTemplates {
if( name == null ) return null;
IASTNode parent = name.getParent();
- while( !(parent instanceof ICPPASTTemplateDeclaration) )
+ while( parent != null && !(parent instanceof ICPPASTTemplateDeclaration) &&
+ !(parent instanceof ICPPASTTemplatedTypeTemplateParameter) )
+ {
parent = parent.getParent();
+ }
if( parent == null ) return null;
@@ -298,14 +533,16 @@ public class CPPTemplates {
++i;
}
if( ns[j] == name ){
- if( i <= idx )
- return templates[ i - 1 ];
- break;
+ if( i < idx )
+ return templates[ i ];
+ return null;
}
}
} else {
return templates[0];
}
+ } else if( parent instanceof ICPPASTTemplatedTypeTemplateParameter ){
+
}
return null;
@@ -333,7 +570,12 @@ public class CPPTemplates {
* @return
*/
public static boolean isSameTemplate(ICPPTemplateDefinition definition, IASTName name) {
- ICPPTemplateParameter [] defParams = definition.getTemplateParameters();
+ ICPPTemplateParameter [] defParams = null;
+ try {
+ defParams = definition.getTemplateParameters();
+ } catch (DOMException e1) {
+ return false;
+ }
ICPPASTTemplateDeclaration templateDecl = getTemplateDeclaration( name );
ICPPASTTemplateParameter [] templateParams = templateDecl.getTemplateParameters();
if( defParams.length != templateParams.length )
@@ -353,11 +595,21 @@ public class CPPTemplates {
boolean result = false;
IASTNode parent = name.getParent();
if( parent instanceof ICPPASTFunctionDeclarator ){
- IType type = CPPVisitor.createType( (IASTDeclarator) parent );
try {
- IType ftype = ((ICPPFunction)definition).getType();
- if( ftype.isSameType( type ) )
- result = true;
+ IASTParameterDeclaration [] params = ((ICPPASTFunctionDeclarator)parent).getParameters();
+ IParameter [] ps = ((ICPPFunction)definition).getParameters();
+ if( ps.length == params.length ) {
+ int i = 0;
+ for(; i < ps.length; i++) {
+ IType t1 = CPPVisitor.createType( params[i].getDeclarator() );
+ IType t2 = ps[0].getType();
+ if( ! t1.isSameType( t2 ) ){
+ break;
+ }
+ }
+ if( i == ps.length )
+ result = true;
+ }
} catch (DOMException e) {
}
} else if( parent instanceof IASTDeclSpecifier ){
@@ -365,10 +617,16 @@ public class CPPTemplates {
if( definition instanceof ICPPTemplateSpecialization ){
ICPPTemplateSpecialization spec = (ICPPTemplateSpecialization) definition;
IASTNode [] args = ((ICPPASTTemplateId)name).getTemplateArguments();
- if( args.length == spec.getArguments().length ){
+ IType [] specArgs = null;
+ try {
+ specArgs = spec.getArguments();
+ } catch (DOMException e) {
+ result = false;
+ }
+ if( specArgs != null && args.length == specArgs.length ){
int i = 0;
for (; i < args.length; i++) {
- IType t1 = CPPVisitor.createType( spec.getArguments()[i] );
+ IType t1 = specArgs[i];
IType t2 = CPPVisitor.createType( args[i] );
if( t1 != null && t2 != null && t1.isSameType( t2 ) )
continue;
@@ -390,20 +648,527 @@ public class CPPTemplates {
return result;
}
+ static public IType [] createTypeArray( Object [] params ){
+ if( params instanceof IType[] )
+ return (IType[]) params;
+
+ IType [] result = new IType[ params.length ];
+ for( int i = 0; i < params.length; i++ ) {
+ if( params[i] instanceof IASTNode ){
+ result[i] = CPPVisitor.createType( (IASTNode) params[ i ] );
+ }
+ }
+ return result;
+ }
+
static protected IFunction[] selectTemplateFunctions( ObjectSet templates, Object[] functionArguments, IASTName name ) {//IASTNode[] templateArguments ){
+ if( templates == null || templates.size() == 0 )
+ return null;
+
IFunction [] instances = null;
- if( name.getParent() instanceof ICPPASTTemplateId )
- name = (IASTName) name.getParent();
- if( name instanceof ICPPASTTemplateId ){
- Object [] keys = templates.keyArray();
- for (int i = 0; i < keys.length; i++) {
- CPPTemplateDefinition templateDef = (CPPTemplateDefinition) keys[i];
- ICPPTemplateInstance temp = (ICPPTemplateInstance) templateDef.instantiate( (ICPPASTTemplateId) name );
- if( temp != null )
- instances = (IFunction[]) ArrayUtil.append( IFunction.class, instances, temp );
+
+ int size = templates.size();
+
+ int numTemplateArgs = 0;
+ IASTNode [] templateArguments = null;
+ if( name instanceof ICPPASTTemplateId ) {
+ templateArguments = ((ICPPASTTemplateId)name).getTemplateArguments();
+ numTemplateArgs = templateArguments.length;
+ }
+
+ IType [] fnArgs = createTypeArray( functionArguments );
+
+ outer: for( int idx = 0; idx < size; idx++ ){
+ CPPFunctionTemplate template = (CPPFunctionTemplate) templates.keyAt( idx );
+
+ ObjectMap map = null;
+ try {
+ map = deduceTemplateArguments( template, fnArgs );
+ } catch (DOMException e) {
+ continue;
}
+ if( map == null )
+ continue;
+
+ ICPPTemplateParameter [] templateParams = template.getTemplateParameters();
+ int numTemplateParams = templateParams.length;
+
+ IType [] instanceArgs = null;
+ for( int i = 0; i < numTemplateParams; i++ ){
+ IType arg = ( i < numTemplateArgs ) ? CPPVisitor.createType( templateArguments[i] ) : null;
+ IType mapped = (IType) map.get( templateParams[i] );
+
+ if( arg != null && mapped != null )
+ if( arg.isSameType( mapped ) )
+ instanceArgs = (IType[]) ArrayUtil.append( IType.class, instanceArgs, arg );
+ else
+ continue outer;
+ else if( arg == null && mapped == null )
+ continue outer;
+ else
+ instanceArgs = (IType[]) ArrayUtil.append( IType.class, instanceArgs, (arg != null) ? arg : mapped );
+ }
+ instanceArgs = (IType[]) ArrayUtil.trim( IType.class, instanceArgs );
+ ICPPTemplateInstance temp = (ICPPTemplateInstance) template.instantiate( instanceArgs );
+ if( temp != null )
+ instances = (IFunction[]) ArrayUtil.append( IFunction.class, instances, temp );
}
- return instances;
- //TODO, instead of the above, do proper argument checking, deduction
+
+ return (IFunction[]) ArrayUtil.trim( IFunction.class, instances );
+ }
+
+ /**
+ *
+ * @param template
+ * @param args
+ * @return
+ *
+ * A type that is specified in terms of template parameters (P) is compared with an actual
+ * type (A), and an attempt is made to find template argument vaules that will make P,
+ * after substitution of the deduced values, compatible with A.
+ * @throws DOMException
+ */
+ static private ObjectMap deduceTemplateArguments( ICPPFunctionTemplate template, IType[] arguments ) throws DOMException{
+ ICPPFunction function = (ICPPFunction) template;
+ IParameter [] functionParameters = null;
+ try {
+ functionParameters = function.getParameters();
+ } catch (DOMException e) {
+ return null;
+ }
+ if( arguments == null /*|| functionParameters.length != arguments.length*/ ){
+ return null;
+ }
+
+ int numParams = functionParameters.length;
+ int numArgs = arguments.length;
+ ObjectMap map = new ObjectMap(numParams);
+ for( int i = 0; i < numArgs && i < numParams; i++ ){
+ if( !deduceTemplateArgument( map, functionParameters[i].getType(), arguments[i] ) ){
+ return null;
+ }
+ }
+
+ return map;
+ }
+
+ /**
+ * 14.8.2.1-2 If P is a cv-qualified type, the top level cv-qualifiers of P's type are ignored for type
+ * deduction. If P is a reference type, the type referred to by P is used for Type deduction.
+ * @param pSymbol
+ * @return
+ */
+ static private IType getParameterTypeForDeduction( IType pType ){
+ IType result = pType;
+ try {
+ if( pType instanceof IQualifierType ){
+ result = ((IQualifierType)pType).getType();
+ } else if( pType instanceof ICPPReferenceType ){
+ result = ((ICPPReferenceType)pType).getType();
+ } else if( pType instanceof CPPPointerType ){
+ result = ((CPPPointerType)pType).stripQualifiers();
+ }
+ } catch ( DOMException e ){
+ result = e.getProblem();
+ }
+ return result;
+ }
+
+ /**
+ * 14.8.2.1-2
+ * if P is not a reference type
+ * - If A is an array type, the pointer type produced by the array-to-pointer conversion is used instead
+ * - If A is a function type, the pointer type produced by the function-to-pointer conversion is used instead
+ * - If A is a cv-qualified type, the top level cv-qualifiers are ignored for type deduction
+ * @param aInfo
+ * @return
+ */
+ static private IType getArgumentTypeForDeduction( IType aType, boolean pIsAReferenceType ) {
+ IType result = aType;
+ if( !pIsAReferenceType ){
+ try {
+ if( aType instanceof IArrayType ){
+ result = new CPPPointerType( ((IArrayType)aType).getType() );
+ } else if( aType instanceof IFunctionType ){
+ result = new CPPPointerType( aType );
+ } else if( aType instanceof IQualifierType ){
+ result = ((IQualifierType)aType).getType();
+ } else if( aType instanceof CPPPointerType ){
+ result = ((CPPPointerType)aType).stripQualifiers();
+ }
+ } catch( DOMException e ){
+ result = e.getProblem();
+ }
+ }
+
+ return result;
+ }
+
+ static private boolean expressionsEquivalent( IASTExpression p, IASTExpression a ){
+ if( p == null )
+ return true;
+
+ if( p instanceof IASTLiteralExpression && a instanceof IASTLiteralExpression ){
+ return p.toString().equals( a.toString () );
+ }
+ return false;
+ }
+ static protected boolean deduceTemplateArgument( ObjectMap map, IType p, IType a ) throws DOMException {
+ boolean pIsAReferenceType = ( p instanceof ICPPReferenceType );
+ p = getParameterTypeForDeduction( p );
+ a = getArgumentTypeForDeduction( a, pIsAReferenceType );
+
+ if( p instanceof IBasicType ) {
+ if( p.isSameType( a ) && a instanceof IBasicType ) {
+ return expressionsEquivalent( ((IBasicType)p).getValue(), ((IBasicType)a).getValue() );
+ }
+ } else {
+ while( p != null ){
+ if( p instanceof IBasicType ){
+ return p.isSameType( a );
+ } else if( p instanceof ICPPPointerToMemberType ){
+ if( !(a instanceof ICPPPointerToMemberType ) )
+ return false;
+
+ if( !deduceTemplateArgument( map, ((ICPPPointerToMemberType)p).getMemberOfClass(), ((ICPPPointerToMemberType)a).getMemberOfClass() ) )
+ return false;
+
+ p = ((ICPPPointerToMemberType)p).getType();
+ p = ((ICPPPointerToMemberType)a).getType();
+ } else if( p instanceof IPointerType ){
+ if( !(a instanceof IPointerType) ){
+ return false;
+ }
+ p = ((IPointerType) p).getType();
+ a = ((IPointerType) a).getType();
+ } else if ( p instanceof IQualifierType ){
+ if( !(a instanceof IQualifierType) )
+ return false;
+ a = ((IQualifierType)a).getType(); //TODO a = strip qualifiers from p out of a
+ p = ((IQualifierType)p).getType();
+ } else if( p instanceof IFunctionType ){
+ if( !(a instanceof IFunctionType ) )
+ return false;
+ if( !deduceTemplateArgument( map, ((IFunctionType)p).getReturnType(), ((IFunctionType)a).getReturnType() ) )
+ return false;
+ IType [] pParams = ((IFunctionType)p).getParameterTypes();
+ IType [] aParams = ((IFunctionType)a).getParameterTypes();
+ if( pParams.length != aParams.length )
+ return false;
+ for (int i = 0; i < pParams.length; i++) {
+ if( !deduceTemplateArgument( map, pParams[i], aParams[i] ) )
+ return false;
+ }
+ } else if( p instanceof ICPPTemplateParameter ){
+ if( map.containsKey( p ) ){
+ IType current = (IType)map.get( p );
+ return current.isSameType( a );
+ }
+ if( a == null )
+ return false;
+ map.put( p, a );
+ return true;
+ } else if( p instanceof ICPPTemplateInstance ){
+ if( !(a instanceof ICPPTemplateInstance ) )
+ return false;
+ ICPPTemplateInstance pInst = (ICPPTemplateInstance) p;
+ ICPPTemplateInstance aInst = (ICPPTemplateInstance) a;
+
+ IType [] pArgs = createTypeArray( pInst.getArguments() );
+ IType [] aArgs = createTypeArray( aInst.getArguments() );
+ if( pArgs.length != aArgs.length )
+ return false;
+ for (int i = 0; i < pArgs.length; i++) {
+ if( !deduceTemplateArgument( map, pArgs[i], aArgs[i] ) )
+ return false;
+ }
+ return true;
+ } else {
+ return p.isSameType( a );
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * transform a function template for use in partial ordering, as described in the
+ * spec 14.5.5.2-3
+ * @param template
+ * @return
+ * -for each type template parameter, synthesize a unique type and substitute that for each
+ * occurence of that parameter in the function parameter list
+ * -for each non-type template parameter, synthesize a unique value of the appropriate type and
+ * susbstitute that for each occurence of that parameter in the function parameter list
+ * for each template template parameter, synthesize a unique class template and substitute that
+ * for each occurence of that parameter in the function parameter list
+ * @throws DOMException
+ */
+
+ static private IType [] createArgsForFunctionTemplateOrdering( ICPPFunctionTemplate template ) throws DOMException{
+ ICPPTemplateParameter [] paramList = template.getTemplateParameters();
+ int size = paramList.length;
+ IType [] args = new IType [ size ];
+ for( int i = 0; i < size; i++ ){
+ ICPPTemplateParameter param = paramList[i];
+ if( param instanceof ICPPTemplateNonTypeParameter ){
+ IType t = ((ICPPTemplateNonTypeParameter)param).getType();
+ if( t instanceof CPPBasicType ){
+ CPPASTLiteralExpression exp = new CPPASTLiteralExpression();
+ exp.setValue( String.valueOf( i ) );
+ CPPBasicType temp = (CPPBasicType) t.clone();
+ temp.setValue( exp );
+ args[i] = temp;
+ }
+ } else {
+ args[i] = new CPPBasicType( -1, 0 );
+ }
+ }
+ return args;
+ }
+
+ static protected int orderTemplateFunctions( ICPPFunctionTemplate f1, ICPPFunctionTemplate f2 ) throws DOMException {
+ //Using the transformed parameter list, perform argument deduction against the other
+ //function template
+ IType [] args = createArgsForFunctionTemplateOrdering( f1 );
+ ICPPFunction function = (ICPPFunction) ((CPPTemplateDefinition)f1).instantiate( args );
+
+ ObjectMap m1 = deduceTemplateArguments( f2, function.getType().getParameterTypes() );
+
+ args = createArgsForFunctionTemplateOrdering( f2 );
+ function = (ICPPFunction) ((CPPTemplateDefinition)f2).instantiate( args );
+
+ ObjectMap m2 = deduceTemplateArguments( f1, function.getType().getParameterTypes() );
+
+ //The transformed template is at least as specialized as the other iff the deduction
+ //succeeds and the deduced parameter types are an exact match
+ //A template is more specialized than another iff it is at least as specialized as the
+ //other template and that template is not at least as specialized as the first.
+ boolean d1 = ( m1 != null );
+ boolean d2 = ( m2 != null );
+
+ if( d1 && d2 || !d1 && !d2 )
+ return 0;
+ else if( d1 && !d2 )
+ return 1;
+ else
+ return -1;
+ }
+
+ static protected ICPPTemplateDefinition matchTemplatePartialSpecialization( ICPPTemplateDefinition template, IType[] args ) throws DOMException{
+ if( template == null ){
+ return null;
+ }
+
+ ICPPTemplateSpecialization[] specializations = template.getTemplateSpecializations();
+ int size = ( specializations != null ) ? specializations.length : 0;
+ if( size == 0 ){
+ return template;
+ }
+
+ ICPPTemplateSpecialization bestMatch = null, spec = null;
+ boolean bestMatchIsBest = true;
+ IType[] specArgs = null;
+ for( int i = 0; i < size; i++ ){
+ spec = specializations[i];
+ specArgs = spec.getArguments();
+ if( specArgs == null || specArgs.length != args.length ){
+ continue;
+ }
+
+ int specArgsSize = specArgs.length;
+ ObjectMap map = new ObjectMap(specArgsSize);
+ IType t1 = null, t2 = null;
+
+ boolean match = true;
+ for( int j = 0; j < specArgsSize; j++ ){
+ t1 = specArgs[j];
+ t2 = args[j];
+
+ if( !deduceTemplateArgument( map, t1, t2 ) ){
+ match = false;
+ break;
+ }
+ }
+ if( match ){
+ int compare = orderSpecializations( bestMatch, spec );
+ if( compare == 0 ){
+ bestMatchIsBest = false;
+ } else if( compare < 0 ) {
+ bestMatch = spec;
+ bestMatchIsBest = true;
+ }
+ }
+ }
+
+ //14.5.4.1 If none of the specializations is more specialized than all the other matchnig
+ //specializations, then the use of the class template is ambiguous and the program is ill-formed.
+ if( !bestMatchIsBest ){
+ //TODO problem
+ return new CPPTemplateDefinition.CPPTemplateProblem( null, IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, null);
+ }
+
+ return bestMatch;
+ }
+
+ /**
+ * Compare spec1 to spec2. Return > 0 if spec1 is more specialized, < 0 if spec2
+ * is more specialized, = 0 otherwise.
+ * @param spec1
+ * @param spec2
+ * @return
+ * @throws DOMException
+ */
+ static private int orderSpecializations( ICPPTemplateSpecialization spec1, ICPPTemplateSpecialization spec2 ) throws DOMException {
+ if( spec1 == null ){
+ return -1;
+ }
+
+ //to order class template specializations, we need to transform them into function templates
+ ICPPFunctionTemplate template1 = null, template2 = null;
+
+ if( spec1 instanceof ICPPClassType ) {
+ template1 = classTemplateSpecializationToFunctionTemplate( spec1 );
+ template2 = classTemplateSpecializationToFunctionTemplate( spec2 );
+ } else if( spec1 instanceof ICPPFunction ) {
+ template1 = (ICPPFunctionTemplate) spec1;
+ template2 = (ICPPFunctionTemplate) spec2;
+ }
+
+ return orderTemplateFunctions( template1, template2);
+ }
+
+ public static final class CPPImplicitFunctionTemplate extends CPPFunctionTemplate {
+ IParameter [] functionParameters = null;
+ ICPPTemplateParameter [] templateParameters = null;
+ /**
+ * @param name
+ */
+ public CPPImplicitFunctionTemplate( ICPPTemplateParameter [] templateParameters, IParameter [] functionParameters) {
+ super( null );
+ this.functionParameters = functionParameters;
+ this.templateParameters = templateParameters;
+ }
+ public IParameter[] getParameters() {
+ return functionParameters;
+ }
+ public ICPPTemplateParameter[] getTemplateParameters() {
+ return templateParameters;
+ }
+ public IScope getScope() {
+ return null;
+ }
+ public IFunctionType getType() {
+ if( type == null ){
+ type = CPPVisitor.createImplicitFunctionType( new CPPBasicType(IBasicType.t_void, 0 ), functionParameters );
+ }
+ return type;
+ }
+ }
+ /**
+ * transform the class template to a function template as described in the spec
+ * 14.5.4.2-1
+ * @param template
+ * @return IParameterizedSymbol
+ * the function template has the same template parameters as the partial specialization and
+ * has a single function parameter whose type is a class template specialization with the template
+ * arguments of the partial specialization
+ */
+ static private ICPPFunctionTemplate classTemplateSpecializationToFunctionTemplate( ICPPTemplateSpecialization specialization ) {
+ if( !(specialization instanceof ICPPClassType) )
+ return null;
+
+ ICPPTemplateDefinition template = specialization;
+ IType [] args = null;
+ try {
+ args = specialization.getArguments();
+ } catch (DOMException e1) {
+ return null;
+ }
+
+ IType paramType = (IType) ((CPPTemplateDefinition)template).instantiate( args );
+ IParameter [] functionParameters = new IParameter[] { new CPPParameter( paramType ) };
+
+ try {
+ return new CPPImplicitFunctionTemplate( specialization.getTemplateParameters(), functionParameters );
+ } catch (DOMException e) {
+ return null;
+ }
+ }
+
+ static private boolean isValidArgument(ICPPTemplateParameter param, IType argument) {
+ //TODO
+ return true;
+ }
+ static protected boolean matchTemplateParameterAndArgument( ICPPTemplateParameter param, IType argument ){
+ if( !isValidArgument(param, argument) ){
+ return false;
+ }
+ if( param instanceof ICPPTemplateTypeParameter )
+ return true;
+ else if( param instanceof ICPPTemplateTemplateParameter ){
+ if( !( argument instanceof ICPPTemplateDefinition ) )
+ return false;
+
+ ICPPTemplateParameter [] pParams = null, aParams = null;
+ try {
+ pParams = ((ICPPTemplateTemplateParameter)param).getTemplateParameters();
+ aParams = ((ICPPTemplateDefinition)argument).getTemplateParameters();
+ } catch ( DOMException e ) {
+ return false;
+ }
+
+
+ int size = pParams.length;
+ if( aParams.length != size){
+ return false;
+ }
+
+ for( int i = 0; i < size; i++){
+ if( (pParams[i] instanceof ICPPTemplateTypeParameter && !(aParams[i] instanceof ICPPTemplateTypeParameter)) ||
+ (pParams[i] instanceof ICPPTemplateTemplateParameter && !(aParams[i] instanceof ICPPTemplateTemplateParameter)) ||
+ (pParams[i] instanceof ICPPTemplateNonTypeParameter && !(aParams[i] instanceof ICPPTemplateNonTypeParameter)) )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ } else {
+ try {
+ IType pType = ((ICPPTemplateNonTypeParameter)param).getType();
+ Cost cost = CPPSemantics.checkStandardConversionSequence( argument, pType );
+
+ if( cost == null || cost.rank == Cost.NO_MATCH_RANK ){
+ return false;
+ }
+ } catch( DOMException e ){
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static IBinding instantiateWithinClassTemplate( ICPPClassTemplate template ) throws DOMException {
+ IType [] args = null;
+ if( template instanceof ICPPTemplateSpecialization ){
+ args = ((ICPPTemplateSpecialization)template).getArguments();
+ } else {
+ ICPPTemplateParameter [] templateParameters = template.getTemplateParameters();
+ args = new IType [ templateParameters.length ];
+ for (int i = 0; i < templateParameters.length; i++) {
+ if( templateParameters[i] instanceof IType ){
+ args[i] = (IType) templateParameters[i];
+ } else if( templateParameters[i] instanceof ICPPTemplateNonTypeParameter ){
+ args[i] = ((ICPPTemplateNonTypeParameter)templateParameters[i]).getType();
+ }
+ }
+ }
+
+ if( template instanceof CPPClassTemplate ){
+ return ((CPPClassTemplate)template).instantiate( args );
+ }
+ return template;
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java
index 573a9c67c32..e86cceb3125 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java
@@ -94,6 +94,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective;
@@ -110,6 +111,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPPointerToMemberType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
@@ -286,7 +288,17 @@ public class CPPVisitor {
if( mustBeSimple && elabType.getName() instanceof ICPPASTQualifiedName )
return binding;
+ boolean template = false;
ICPPScope scope = (ICPPScope) getContainingScope( name );
+ if( scope instanceof ICPPTemplateScope ){
+ ICPPScope parentScope = null;
+ try {
+ template = true;
+ parentScope = (ICPPScope) scope.getParent();
+ } catch (DOMException e1) {
+ }
+ scope = parentScope;
+ }
if( mustBeSimple ){
//3.3.1-5 ... the identifier is declared in the smallest non-class non-function-prototype scope that contains
@@ -309,11 +321,14 @@ public class CPPVisitor {
binding = scope.getBinding( elabType.getName(), false );
if( binding == null || !(binding instanceof ICPPClassType) ){
if( elabType.getKind() != IASTElaboratedTypeSpecifier.k_enum ){
- binding = new CPPClassType( elabType.getName() );
+ if( template )
+ binding = new CPPClassTemplate( name );
+ else
+ binding = new CPPClassType( name );
scope.addName( elabType.getName() );
}
- } else if( binding instanceof ICPPClassType ){
- ((CPPClassType)binding).addDeclaration( elabType );
+ } else if( binding instanceof ICPPInternalBinding ){
+ ((ICPPInternalBinding)binding).addDeclaration( elabType );
}
} catch ( DOMException e ) {
binding = e.getProblem();
@@ -343,13 +358,14 @@ public class CPPVisitor {
return CPPTemplates.createClassPartialSpecialization( compType );
}
try {
- binding = scope.getBinding( name, false );
+ binding = (scope != null ) ? scope.getBinding( name, false ) : null;
if( binding == null || !(binding instanceof ICPPClassType) ){
if( template )
binding = new CPPClassTemplate( name );
else
binding = new CPPClassType( name );
- scope.addName( compType.getName() );
+ if( scope != null )
+ scope.addName( compType.getName() );
} else {
if( binding instanceof ICPPInternalBinding ){
ICPPInternalBinding internal = (ICPPInternalBinding) binding;
@@ -409,10 +425,10 @@ public class CPPVisitor {
}
private static IBinding createBinding( IASTDeclarator declarator ){
IASTNode parent = declarator.getParent();
+ while( parent instanceof IASTDeclarator ){
+ parent = parent.getParent();
+ }
- if( parent instanceof IASTTypeId )
- return CPPSemantics.resolveBinding( declarator.getName() );
-
while( declarator.getNestedDeclarator() != null )
declarator = declarator.getNestedDeclarator();
@@ -422,8 +438,10 @@ public class CPPVisitor {
name = ns[ ns.length - 1 ];
}
- while( parent instanceof IASTDeclarator ){
- parent = parent.getParent();
+ if( parent instanceof IASTTypeId )
+ return CPPSemantics.resolveBinding( name );
+ else if( parent.getPropertyInParent() == ICPPASTTemplateSpecialization.OWNED_DECLARATION ){
+ return CPPTemplates.createFunctionSpecialization( name );
}
boolean template = false;
@@ -629,7 +647,9 @@ public class CPPVisitor {
return dtor.getFunctionScope();
else if( prop == IASTFunctionDefinition.DECLARATOR )
return ((IASTCompoundStatement)((IASTFunctionDefinition)dtor.getParent()).getBody()).getScope();
- } //else if( node instanceof ICPPASTTemplateDeclaration )
+ } else if( parent instanceof ICPPASTTemplateDeclaration ){
+ return CPPTemplates.getContainingScope( node );
+ }
} else if( node instanceof IASTInitializerExpression ){
IASTNode parent = node.getParent();
while( !(parent instanceof IASTDeclarator) )
@@ -1350,6 +1370,8 @@ public class CPPVisitor {
return getExpressionType( (IASTExpression) node );
if( node instanceof IASTTypeId )
return createType( ((IASTTypeId) node).getAbstractDeclarator() );
+ if( node instanceof IASTParameterDeclaration )
+ return createType( ((IASTParameterDeclaration)node).getDeclarator() );
return null;
}
/**
@@ -1420,6 +1442,14 @@ public class CPPVisitor {
IBinding binding = name.resolveBinding();
if( binding instanceof IType )
type = (IType) binding;
+ else if( binding instanceof ICPPTemplateNonTypeParameter ){
+ //TODO workaround... is there anything better?
+ try {
+ type = ((ICPPTemplateNonTypeParameter)binding).getType();
+ } catch (DOMException e) {
+ type = e.getProblem();
+ }
+ }
}
return type;
}
@@ -1442,6 +1472,8 @@ public class CPPVisitor {
return (IType) binding;
} else if( binding instanceof IFunction ){
return ((IFunction)binding).getType();
+ } else if( binding instanceof ICPPTemplateNonTypeParameter ){
+ return ((ICPPTemplateNonTypeParameter)binding).getType();
}
} catch ( DOMException e ){
return e.getProblem();
@@ -1490,17 +1522,16 @@ public class CPPVisitor {
}
case ICPPASTLiteralExpression.lk_true :
case ICPPASTLiteralExpression.lk_false:
- return new CPPBasicType( ICPPBasicType.t_bool, 0 );
+ return new CPPBasicType( ICPPBasicType.t_bool, 0, expression );
case IASTLiteralExpression.lk_char_constant:
- return new CPPBasicType( IBasicType.t_char, 0 );
+ return new CPPBasicType( IBasicType.t_char, 0, expression );
case IASTLiteralExpression.lk_float_constant:
- return new CPPBasicType( IBasicType.t_float, 0 );
+ return new CPPBasicType( IBasicType.t_float, 0, expression );
case IASTLiteralExpression.lk_integer_constant:
- return new CPPBasicType( IBasicType.t_int, 0 );
+ return new CPPBasicType( IBasicType.t_int, 0, expression );
case IASTLiteralExpression.lk_string_literal:
- IType type = new CPPBasicType( IBasicType.t_char, 0 );
+ IType type = new CPPBasicType( IBasicType.t_char, 0, expression );
type = new CPPQualifierType( type, true, false );
- ((CPPQualifierType)type).setFromStringLiteral( true );
return new CPPPointerType( type );
}
@@ -1526,6 +1557,20 @@ public class CPPVisitor {
} catch( DOMException e ){
return e.getProblem();
}
+ } else if( binding instanceof ITypedef ){
+ try {
+ IType type = ((ITypedef)binding).getType();
+ while( type instanceof ITypedef )
+ type = ((ITypedef)type).getType();
+ if( type instanceof IFunctionType ){
+ return ((IFunctionType)type).getReturnType();
+ }
+ return type;
+ } catch (DOMException e) {
+ return e.getProblem();
+ }
+ } else if( binding instanceof IProblemBinding ){
+ return (IType) binding;
}
} else if( expression instanceof IASTBinaryExpression ){
IASTBinaryExpression binary = (IASTBinaryExpression) expression;
@@ -1541,6 +1586,8 @@ public class CPPVisitor {
}
}
return new ProblemBinding( binary, IProblemBinding.SEMANTIC_INVALID_TYPE, new char[0] );
+ } else if( type instanceof CPPBasicType ){
+ ((CPPBasicType)type).setValue( expression );
}
return type;
}
@@ -1556,6 +1603,8 @@ public class CPPVisitor {
}
} else if( op == IASTUnaryExpression.op_amper ){
return new CPPPointerType( type );
+ } else if ( type instanceof CPPBasicType ){
+ ((CPPBasicType)type).setValue( expression );
}
return type;
} else if( expression instanceof ICPPASTFieldReference ){
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java
index f62b8559a23..f9418ba204d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
@@ -34,6 +34,19 @@ public class GPPPointerToMemberType extends CPPPointerToMemberType implements
this.isRestrict = operator.isRestrict();
}
+ public IType stripQualifiers(){
+ GPPPointerToMemberType result = (GPPPointerToMemberType) super.stripQualifiers();
+
+ if( isRestrict ){
+ if( result == this ){
+ result = (GPPPointerToMemberType) clone();
+ result.isRestrict = false;
+ } else {
+ result.isRestrict = false;
+ }
+ }
+ return result;
+ }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPPointerType#isRestrict()
*/
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java
index 66c78bae217..0f9f233afd3 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
@@ -43,6 +43,20 @@ public class GPPPointerType extends CPPPointerType implements IGPPPointerType {
super( type, isConst, isVolatile );
this.isRestrict = isRestrict;
}
+
+ public IType stripQualifiers(){
+ GPPPointerType result = (GPPPointerType) super.stripQualifiers();
+
+ if( isRestrict ){
+ if( result == this ){
+ result = (GPPPointerType) clone();
+ result.isRestrict = false;
+ } else {
+ result.isRestrict = false;
+ }
+ }
+ return result;
+ }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer#isRestrict()

Back to the top

Z>?q*_FWTnuy9y}̨EDIyv$`gA5o]t +nG{W6PL&>Ky!oEYh9Ы~q:KtpɬP ,t/+(k:rejzC&$j` أ ϘjZKWfD(q[ U8oCg1mݘx3Ÿ#,~76q%cQUƞ7k˻m;I^2`>P]D@<':e\1޺?M*6 'LFVkr"͞* b!</Cpw˫ݔ5|we72`~ uOww_m K{OҚohޗ!,K^/t`DzKV^^a+tdv|~X;_X"B' Z' UF4'Xz-qFw4ekEuBTRFES A`-h Q /'Ձ` >~\&Gh DޏahrO2|c&5ﰬ|r^ }3K٪fn h7/Wqg4;iB]xq>!Qkd-| ;YM} pn-5'΁&?^ML\ v]5Nm|sfi}]tgLQo3k <y, gh֖L,vlL[[Jy"9"7eC c&}w6431 yG!,m{GiUrg#iz-ʮw+BЌU&dci:ϡ6{9fϗY!L7B"+6 LEkSVݝNvZ_hS"ľn I&*2||&XA*vZ} OƊ^U)˄T&Ps}-ОI&ՉoKkĊEa99E&F)f"?9peI";5,`}&{VNrL^᧘sS! b!({%)KK.' VU0幡-&K NMnkrSs |ݲJzmC wW]MN(vbo>dҙIA^o]藍%WN{GJI} hߔ.34 gg2qxeZQ1e`E%y[hY%*p]L#A6]ء%֣EE(Vh(p`e-UE8`cAbG| Wa}<7q.)Ĺ4p=b1۶ 8F<$[#EZV~QxQ@9e7I' XhM@(v-#ۈw 'ϻ3aT&Ï>'9\,5" +q A#zo;,6Fe_^BcU7lk̍n.|>ୡkuo?nAng=ܞ1Ixsk,?N'i3r4Cgx|:ZL,О=Y(N8vR_T'65<. 0H[Mu=ch >crO2zZK.@U8|Az֩a$wb?slHQ#] n9Ďm8[4P5t#z "Yù[Pe3N}qiY+gwlÊG~lnœ g= wT]ZW؜0,c 3,`ك JKǷh=蓭lܐR50\*-v%bVx]mnxtR$2'WԠgoT4xC9wJZm#7VpUloFg0ȃ<)3fSƒl!MKa$ lZ'XIN(Gg7@RQr^PS)khڊ*/JHLq>cwB8LܾeO;u`$jv/љ0fM ce3i!h"Τ5XȠ/ma J­A@OLAp]^msxmeTFjdHRβpj> f77&rM)*eEi[dycivR3:|Pz{hKrХ"rB+ $PB*(/Mv*WS`D-t!.1j3Aב5;i1N8&~hPe!gSr4(Qր#BBO<~lc WRMKHG>նDYUE}K T8OXK]mmHeuPtTr`qׇtȮX.{`2F|:2>y$Oӏso+APBB(QdtMʫ]ft|K:B:X㈴!5nh|nJ+FșR/QA} tI7jιp"^}u).`_;wYn-p\qw,t$(*n˟浄@oXnTqD;6ci-o_^uF!K2}X;^Fjg䑛 !i+p1cիdc_A피:Y|8jWG1gtrH='SR y?uxE>l>J3L 6^K,zQr4K19IQp^Տ?uH2ϳX(8yE4Y301OI3u5>.0@8' H h[beފ*Sc"ӏP QZ?.@JCNUH/) !r$QREux DdY׉Qty}@kh@eHUlZ<*.'ѯ#sd7mFgJoH+eg窵Eã0pclhU| B/АQY:>X:2ߵdY.]d;X7&1[4n!n2*JEu0ۊjg>*N~&ƪ^Rk#xL^GL'l~@2fO}ϻ:M⾸w \"fN̷̰(O͌OnUAFd|.vcƺi, Ke$;p9>cԚ{q?&|鱱|. FS~.0Kl'j(Rm3NUBV\_fSHt7U0 !jMztE+ҼNx8-1"}HF3+RZʉ.A͊/ʖT1b1XܽI<#xG>¥9N1-̌|1c|_3u\6mS3l#hṖ(bT ny'[Ûxɺ;$Կt'BQh]]=s aQPDzK66tk_Fӆhf mYP]{tw8󶪕s]gd{ϯ!ѝbYWz=<SyʤLieNNZ'm)~^CjX TJ|X1fj>ʵƌl,4Ku[ au9c)fS$jUq^XU|K/ğrJJGHDK WKRe 1L2BFR~  5ӫ@^ oZz^ܷZtd/?tyq&MNXnS9s.gK .yjI0eSΘ-ݡ@"V2Dk9*ldXt-=uT]*_Ê<͏x(F,WRi51")<^esoTEtgDx5:`dgi+j6߻;8me*>1(ќ1V ftm vG<9^X3Źmv$ {%5!/t`)L^CI;"`!bu~nrm2Y߄E#L\.V ՉQBIg8 5YMGqgk`kK[  8q34_UFL1[">, Dx#,1R)0<*@T3R2WZ3bDrw@/] )/'e .y>ľei t"֯ ʃn.ȡ4HW mݔjcjI@'p6Hn ]WHG@(%#ᮚ$92s 0*ۢ?/r+E\L"GtXa봎/T=lrZ#{- cĺ~o[L͒ Xw0`Av=k.{]&M>4E'XIb0;J8mS*;<\Mqljlڎv_+?ըrI&q)ѭ"=Rer*Pc,g$X@}68_#;}$SnRQwx:̶&mڻAB7-evt*^J ; ?whf{r>Lm {ru)MHJn[ET?Jr?eLDX#Y;DzkynOn ՚ ]WRq~uy=" YCgyu|Gz*ArTu}>z%8]]XvT(B (- ۥ~mV9NdV`"~ލpba@HK5\8HR>/1QhѰ_Sy|Av8DL؂Sa*lW;-ApqI$D&2 r,l;]5QFT*0eko:.:li!ZFPIf]o6Wiw[u%<%EM&ſwm ;.oZ,g1PoI#-V{ U/va0UqGks&/*#Qk(^e,j1OG$n(Da;GɎ2KO**&؂Q|b ij lzGȃ&`J2*/fYkAhOi<Px~xŲ:T ޻k=LVSx, /wJItVx~Ȇ-S ױC@j QՔыfѼodeɑVn{Un8%34[竵ZQj.GkoaK̘`3RW+p`7 3r̈6&^L@%UHl-nۦK@UycYZ}բP璍WS!43\;R?j㍚3dUPϵ6l3ҩ$=捫 nN8GU҉#D&6yᶌO4*5TNzWO2v_Ǔ4BAO Xd:Oxfe֭ɇ00i̓#F`8jFcl5u#9 ]zjM׏ͪ!S:-<rX epBνU4?Ƿ3ٳ/Wc aUЙ"swYCHEk#b'O 3e#.ڛ0zNNG2,эmv(!P#|ho (rqZl=<~zYOWJ2Յ]*\r&11tX&|{]LRUfL {F\M"mXCR=2F^-v A-T[ ãC;c>!m2OQQw$Kу: F3`O$>&Ϸ_㒰{T`3mlt9n ,ZBM9)fpUMoˊ ר|W'q1^!جA7%lu_7m wbdF#zV$Lm*BunAOx6SGOB\ˍr6C 6E-oZa{M|VA*RKׄǮ@K.t׉5hQUM9 zi^1ڊG:Y u="];pec41@e{U4['hh^s&;fY"l.Ms &>dWCUEc>hGuK ;: A*ETCa)OXH0)BA{WIh'*RCӭyV t:)/˗VRS̘N9+!.ճtoTv]R@}="%;T6__Fq=a0s,.MlNj3!ݛ'DL[igqz(첌R)n'4,)bB04.+׊*ECrߖOPu7& Ud`h+= a_J".;0w6}|r"E-9w$ckceg kC1>l,^nPwp&Q' H-.P>9T U۟1Y+ktw3[]$ r[HnV0aE%>h?u횠@Ϝ:.O76l3ߕm)DkNZ0pv{㗽^zա^^ '5Qr0jtDӷM"I(%{TJVh^e8aΏZ1quܟУ 7-]*rjTvh^:p-Հ+S1og*[_F \&38+N]%8?SϮtߠg%zqK](6\26`v "sţQZp+nZsύV4~\ |JZCGX*6ٖ-F+n@ *C &aX~5gŏ # \${qʬbyiI` XFU6 ,SFg{P7P!e~;ohai[v#v6V߃,;+b%c o9$ B^)3n\mB;/yՍqf Ĕuѹg a bX GY&3G- ,@^t,b4"5~&(COvM޹/uM{ V$\T' _nM/=,fhF>d'd-1J%`d %!Am>8 %X [w׹AG#!͌7v-TPk3MQ0Q]8q0@LFPTQDwxj 1AL=uR:r `o䞊nN#Flۦ|jHQE^${[e.-(Cy#ppudgB*aK|Vr*s+|]z4(8vH-CMlq5FÈ3ftNN b6*Igg7Wyk he*Y-KkQs4z>t m>  ]K8I/c_S2sk* 2OVԣ0ļƽiylTcvVƛYe5g w-(7 ϲa#R Ѐ)F".x~A8bL+2-U+DS3 RCkq/$G ".}8WuJ+o:#IfLg)c٨ }^%1ny,Y~{ zGp,V2x=o=+[G6=c1O¤ U6' BϏakv2R׆b0򲧂N~&JW΄Ii%|fxTytW#x܈4uMvnUiP9;kp0]ND>~ZL"lԵJЭz*1}35"Gp>i#>cRnvN `Jdfd#j%zȜ-d9qIjMa %'A `B?߀tV|4 wBo{ov{o5KAi^;Mp&Ȗmd$i`BTW4DfT/ I:P^sWBy4S%|r3' eO_ ,Е>H|<ܸmPHSqT T«4sYWAT>glQp zUv FFa[^?CFg|=}J Zr}A#ƫų7E'=0"FVcCvQ#e~&;6ɦ퇫XϪRdp>o101Ä"5[9o_LAd*IM܌w8I+K+˹*lh+|COF 8:lf_Mt2td6nAkPmy)6{7O#?ͨ{VqԒ"LFvB1e<"]/Mjj^콃ӚtVCHØIq/rc'9.Q?. Z1]x+;,ZЉHBphE1YX bu-v߫o;hnuʽFpxǧPR}~d_kq{g,Xe 6fILiA?7$S4=Q}e#=ͪIB=̟ڐj~$ }.>搢SŽp5k,'"QQ0[e.V>& m>)=5Sݗ+r+Z8[~C-BrϡRs_$9YqS_I~dE  w"K;{ l7WJģp͜ Q"E9[qѿd䫏+g2S\Ip3U-{ٚZxG?Vو"?wi8@ U\/ӳV 8YJ=Aj5&oUo0bm}(ȟS\ZS3Yçqݘ3E9GT>Ya'o"{*2e~Z=n9+:{S=C`/Fj57X59%GXOcRu>ZtRY#~@ \þ+w%WtV=;!OvȌTz/y&nM9U"yM̝mg/XS9}nFn9 C@f%H!H\9 R^QYV3ꖬWPxZEe<(Im_{RŪ؈--紼EF}:~GfY?pDS''!QgwM}+8!z@Mb3oQh >'pp-:Xª+!Dma__f١ώ;E]'M@`hNJ@mWf#-ʡ}yD@~}3كC/B=S+AAF(s!D'0@n{%|uE:"qˡ5kP:3Q2.Ә&3 Uug[4' ,ͩ Nf5$)|R1 BЄ[}zՎ=8k\IDGnDK㯉kWBncoXqy6Bhnpd^?)0FK:Q^#c\5G$'8c;[6loBƍBÄȸuCYUܲ5o2!yC@-VSnNwW wo*GY0\^yѫs6(nY,7ӹ'ђ L:a ~+x'/FLrܑXIRq$ N#NYżNMpQzc>Zv4F^q%cQ̤&Ţ +)@3[yxrЧDĴ QQHȯtng pWs)p!\ N@}VlL WÂOEEx?1tx\F@0aAZ%+ȰlWjaLƳ =0~;CJi$XY3:e#p:r`QCx6ZA.ȽV:Q4S+$qi% kx){pIY26zFu1,*Fzb]#R+,ZAˆ_{{ HQ@}ϥwXf@RHx~)ΐxOE@V>M=3rXt Ȇx>V.D=jiP^ld51mEEZ h<= ~VLLΖdU{kn&<#;?Wޓ}'5έ-" (?KϷ-rt?_VS,B4l&)nf0>ĤEeS dj/7- *S81")9u}?uBl*e@Dt3m 6I,=J-} .1ۡA(eFJ3/}QQ#@O5mZn~^<3e\MK_ٻ'9Bgh;$ cN&'Jl<뀎V*8o6[!Uj ΋5`!b.*<2әeqxw?i3m>{S.'݌=Yn!4 lgros+e 3M5J 1+Bj%E~Am4ǧ6/IV3'+ _+#n.^'LeSD]ưC֙\>c,<˫K_-(RlîuhLs&ړYh#3|MV!Lbt83!}MsN o;LA6P9ns@{Cə(D]_h$9(I2N^݇05>53ev)~WwXM=8sڲC5gmö=NbW{A:ex vn`;F]v*K5P̚\c ;痻AK<2!6 ߼{}>jufs%2iFbqm@V+򸻕ޏ?FW~xO׬+u l0/B;ݯ 0R˫۸uRX w0Ѯ&hu(~h͛aq^O1J.u?X=B [s.AK,H\N,q<"5L9=䀹C3rBć,q0&}_CT=GmU ظqp{EeBc(ACaE0:J/%y1ݝZa1?MlQ~"eHM&OGyӮһlK͡w~45]QsH o“L r5zvz!^F(aP'Jg]TF(Z+ *st QR"c[uVf;5wrQr3H⽽=_{O EW[nm|hX?2mAR0ckVf醻Oyż󠚳UW ;) ג.P"͠`m`>ܠ^{s5)B?B6q%w%UT/m*QD.W5|e}FnWi]RGAOx^PA,*\s)Y4(<wa|L.PXmS, !8& *;dg ^זkrf[{r1HI;Q8uֻ;h9|YuX?EW /_ T{DPI ԧ aܮ`qmb[L5 C!>$R|͓d`1SR=8+k÷sZ,d IhNv׸<TF!O/`cxKxZm#ab ^r>YWY~"0mG̡ca&7T=,iO~5G`HOTQpQe` 6 \/dp0╠p\2.DS7`k %8p;0m)S M71| YvBR%,BF$˂Sx`gi=2̎N4J&@o&RJV"^LΪLl+ C{K$4I49I@wЧCi;$pyߵFIL.}#,*΄ XΗqK0vs#P ]FB~B)aWxVTo[;zʄ9ﭮnN#yrQZ@qa}ssFx'9KHpb62L&`^7]C?+\Iۯ3¾ xʂZB#2>tq@t0K4<ԺF 9)a}4~ya:W:Dݨ1 w S *v؞ Xgu5[@]P>ʀ)Ӡ:9y ۱RF :(i%_׬lOc7&;a'le* ޶6+Ҹ.^g5"1JZ&qmY!'yBQsB}lvKK3Ww'NXN- ;qLz}u>B(ۥ'afRjĥۡ?טdHokEMgfbu4Mm3eВR|TPV:^=jc!|(W!m!JSZΊcKv3P@5D!/+?V5~6ȭHc`:*O{HeMiDJElБѨ+E-Sm7Wgypu`"EuV=%Dgga'~ʊoQCƺC`yޤ" (/ +<_Oş_diTmD nyĞ+7gJ,5Ap[_ƴp:*y-x-6er9jVgC#{-8yL5Uf7Aᥢߛ5//dK߳*Z͓pkj: $Y4܁c:v,w $CMo='G&Q3ڈ_`뉶0@ˆĆ┞t-pfh5ѓfIƋKث :xJ~W*v?% . XU 0䝍-|{cWJ~Ӄ3$RN)t*5Fn7w7,Vh_\Д-3k}X5$OYI4?Ǒq>[s:unpWXq >N nT֡yrR\a7 xL͛7DmɓW$PHZ@(4S2 ᥺Q8r9wZ{_rV~.̇͝# *>p/Mܷ ]7Ҍ}~VcCߧS\urO'sr.vo퉼s\1^ewpG'JQ:Fv5ј\~xEz#4QYIGj\a`oWgRye]%Txd{6D4C˹~Yh T{u#n]hb|`]3& ĚtkQgjED+-r#b$rq`x#Ptxdx,|H7a'60eRP|"&?P=/wCCyHCr1'bMy(Kհ{0a_[{%/,fRUM" jP4kP-cԢQIn| D(Fŏ<1l%ٔ4VND]iOOBq`a+@\"IrEPhCry>r~,}?&\I% ֚9N*Q)}1 ~U\Q8mhpg"Li !z7Cؚ[%|NxpyCWa(+3U?{(92H )t7.`^$mul:;q'J9w. [YSČ.z6MbU G_^g_ վUB ^ (CT#VQű6蜉EGVڦ(&nj]suUa l3K9c3o/%҈MA2 _Șs-rsko9 JP~+M1>T?P )*#yLچRNN%y]1Mgk(0fL?]X==Dz:`&;4Am[EBUga~\zDŽK;OOkɇn١T(3fƗF̭YAyu%eJw|,L.{4Sі:ʿIWmC7znJǂe_R#j^z"Dv_cLbF>!D?UvE4USNJ-]%{9d!p;w{5DI% iDa_l# Aua>X9W?lX~H2b \4"ruX#;lF%op@=1]RYW(0S#d֑/ cFU_stJc-zΛ)7b0-0eg߻`T;$a5c3 D<`hRȦl_;DEޗ:o[I{=A ջE}vVYL:KXg~y'x5W̜0Js>» x}k40\HBcRԚ =9c&v,^eEȤZ2Y| :sTNւ(t p!`c|_Ž9O3JҖ|B8d\f|Lq h3jW'VJ)} t%4qHO^w.Xݯ. xa^8Ӯ|>ߍB,j7E'QJ̜rY> e{bYu1"jX[!Pn({=s>\o0xn10+q3Âzկu;eบ N4%bP+ڨ#z\v鿢ka2CѼBr6nQ, s |_dã}c+j'Q68͊I6 eC|{KF˭qJ27Q.DZ-pwKכnF6̵rTW*'7{ܰVsu3i>\ 90=Rm졞F&ƾn!/]t@l3;|Bcfvvj -Są.?ؕUb Oq@2mD7Bpzl q+c/uN.AiyO)wBҽmעl /I8m‚wM 04|URʠ*xج/Ւ۞YW47qM!FM} DS>Ar[R\(5O\kܘ/¼Gq'bk'@*0AXTkWP=nӿEn4",L(DxqX~P߄RX4 qTs2f%cL_25 & J9Ƥ ``FlKMݐvU" {CyJ+o2˸HE#9MW0Kɽ3fSYkًkgpn; {h ۡ>PB;d˦&C]uZG+' :#7U4\ZyE1CR^Vwז; W%T;t^"P77K~\{Zf+ϲ¼]*P 7vR1)>yV2sDu1]>S5iZY?x“.8, "i캐>Qڇ|GNv(Y&%\&jˎwo)Ik$t[vC닢;^#V>#uS4D0PR?6_@yŪVJ{A Tn$na20owi =sBkW7?+Lu,<RGΌB^hY!XA1_ p]ݜ/J}$fMt6JqY}P*8w4yO~釕hIHEbE=C8oK}OAC?Vf`<;a9vsEfo |lufnn{@ lA8oډ, + fhѡP~WDS#")zDmTAoysm5c˥sf%Y(ZXʀvb4t?J{oDb3 ^9XDj|}%7m!=wM<Z. i}HXRR=a\~2*w?]TfL@ z鉞UPJ8x%yeG> }O8p=##ӚXz\qOHanj?>;| @@D'wXۜz0:D|&; )U{84$F巋B[ 'sT$cƣ  8^i'- T=w{ȠTų"X-NׯQz6ghj/ϥner>\+L;+]?綦slP"T}Ah ?A=$ŒH᫠篚_>đC_ ܫ.qt\h^0P> [rnxe\>}.NoYߝ{8桑,)(L ~1 g['4N*|TE|x`ذT*m{;|LHS$pHA:UkS߿={l 0tQ Z˒LVgfJgEv:Ti8;^=xX+ܠw3_0s󴉆a!>Ab~RZ^2ב%"I`sma1aҿbt+|QG#A{wKZb%w2´1=+@";rR#R(VmU]&Ji T Ʈt+C,?L+(z7Vi/".4 F{mG+ڪeW鬾,1w2,GO:UH"|Ό)ZQ@ M} HA"G/UG&Bel,N\]?|xyQYG?Z-|+0({lG E_Viv~>0KFvZ?U{.d%]6ha( Ek2c@oksa_U=|F]_<˂C8ϙt>yI06#?IU{x_OkXIotvx{$ ct&b|rn|:XoF!Z}=2~{Sr-{ll[ 3,rOW&vgxEuxK`@ cLJ0dĀʵeh*(l oӻ|d_ 7G%Ҳ|l"'^^_`0gX[~u,CԢ}K/&ǣs9a$"-jVHd9Xs j|.A.(L<3I\FJܜBzD}W[h0|gX: B:Nm_VvCT#TW\9MUI;@f[.VPwBRctks]`Kul֯AFtMPdz~e;ʁgim~b@ fFM+t1?MmWk.< ;@PCMDm'"ϹV4|yn&A[޾ňzEu,=V =̾*KTәz@0[-T4ws2@tjY-;깆%ˍPhfr&C+q͎J ʆ)dS (:0›6p+ Hh(_8ɴh7ǰ?o^ŪM}9HO헫TΔEz"$CG׵W+#tcjBЂaLpN<eaG=;9X66Hz)x]kk¨]%u[,00:N|Cޗ_Y~UFYn@9PߥJ:Ě  O?]GPms5 @!|Ub/k]S \؞g@Z0tkT\܅^m͍wSh'QoӃ1Ivl:qb' I,Eq0lhu̜o /k$bB#Sy> t`JX.P6WǻDO"6Ʋ?O@a\]c{V(FΠؓ4X`d-x.Gq)A Ia`/fD hlM_|HMq9y+\]䫩ʤO-Y=reKr.Ct`]=3Am%r|&BvCHZ-X \%Q ~"(qz$ @33vyuEP8N"FUUJ4b(DXu EMK; Mj7E12b67+b>ԗkeC)W-",Jo34"WNUA iZW4{lT!uBO4Xv)z;a oS4AXwTj_'ʽ}R"r!I؏?v&7Bt^ qeM&,1).T ]rS.[:^wͪ,Ijꑳ'> ߱bR¹ f{F^\((Gr"ܠQtse1Ñf}ѭ,cK>:*pL tA;ԫ0II@_i &vc #VeMm|;Z\]N_xXzB{sw{zdfW@E͂HFF^E蜱ဣt2M~md̞ ٲYbD%Nh*C +guJ B% ~eaVJ}SmU[O9qQB}5w;ށxfjMo 0낝2muwy0J*o,OtvM~SC$Da-NJPcXa5L#Pi#TBK zΘ%ޱ+U82 &ugn3aYCkb* rV`D:yȖBn\GдiџU:rǟp]P`Wd lYMB4obTr"_u%-Ykl-+ٯRlqJ^̓HHg'L:T-V籔q9uRgzȀATg7YYZK O:UhWXqW(= wfBx*HL~cg5ы԰vO {}N_V&B ('v.-֎ ΋]wVO'> ǟYi 'xoaTQ\tSK+<̧ɸgd5.aIYfZHSr7mjz 3@lvz>])=(x< Ajo~Dfd'A?utiR8(w"Ȼ%tKg.n5 D)!ۢ\h@xJ?DІG͡Qq5 [> }cvԱsxxk1@Jէ:wZߒ)m߳|Չe9 Ŭ\;ˈZ*$ʥM%뉻Iɇ!Qb٠4`'82'1** o7TΏڑ:Vk&am'Z -| MV ƯϤ.ѩMNw0OYԸ%'mZ#ҭcӚyro1qZfoٰ8BP;F0N(kYV'ٓ H"[T1,JB5W(A4[K@83=5}Oo)g\Y&v1k\%*{c:ݿx:l!6VEnp1!S]N-ɤ R +ɏ@+͂. y=y<=n݂tL٫}6a.4R{)yX+eeH5 %/|#gIXr-ېyg [\ "z_  ><^Ci<a[1P6ts˧DffUΥ]čM'Ҁxj6cWqWzLQrhc0$,O+zuPa+pG\5Mip>S"g6g!PXxAWuz]6/E#IgW?W;^K5^Fx㥹uLV8M,R0"{idd>KZmSاa;@3 Pž[ui_;̸/w<BWI W~ n ][oǙ`ZbbsOtlA^>2L ZeHjN͊_ |Ʃm:CЉ&|bzj >FXO YJ<$qJ3%e007jO46>mcG.,夂AR;Q凞`c(a5cqՑݨL-KLޮH7D_RiiͥPbltsAt!OyU"P8b&*poXϑwDqp@Cvs8B8|ZJ7AjQ,dԂwP('ѝrN 4]< FNզk%x܈y-s+# @vH[3{6FJ00Vɯ|VIe_$#DWR_JD1NUw ԲЍI}e!t/pskb JGx)HF:Rfv[st.ym|W)YoʷƝ_AQUWls,dBr|ןRjuT[%/D_R-CBVtEK/O- m9JLy/:,\S?ERH\m Yؙ\қJlh T3[,.pbҤ.G~jR~GNvhytڋ_(/R\5<6EuD Z5EnHHQ-fnVy $D1@ (JEf=X#i3eU]݋We(mENTj(-, *}~3lNU `ӟ即+3;3z,i0Qdl iriX>JǴv=F// ZQ=Lg..sI`^0V۴oDCנ]m̵# $72/R,ޱ>f) beOϹ&$%w}> lճCcȆrM;ߴRn'~qm,>4P.}0l~_PWv7s͑Cv4h\ @mL/lo2tsL)@) zob.^\ lLn3<#VI5|%y&պD6 G%Hwtb]#EhT]kT$BNuKxB;M0~6>s⊯<՝7-x %tE>Ѧ d^;Z3]<|T^oaOǏTMnn9R +L6P AB2NZKTI:#0}ڲ%K;SIz0PGM`[8sLK0n|_yFZﺠLRX= Gy㭍< ]Hq:Dr/Xi)Oї;I5MJʒ$'nx5W f`s=NփA:ribbR zSM׹xugu\xH7(7ҙ4YbţHYH??.]_& G= 9; зL9~R^zЛa~!ك[?_JqFܗ9G4InQĠÕ *lYYV<[== y)2|6fz:nC|J'\p!sV+.5 E4ZsS`XR-V'cj NYsS=bE*rr>A#᪶[θT^kW; .hU2dg>NbQC-8T/\n!}rNi@=t97|yj`U#~)n  =k_A@>l"=m$-U(*?ʼ W_?B .:ukk6&,BU$ 1:,dr~J_ӛ'3f!sY̱mφZUvCz<7/Pl [߼›?\ F0S""3DLewTJۅGXC-a΃'y=DH}nkI[Ƈ?{[ :(KZXv}iU\g}e:KOLyIz?B݅$ޑܝgd,)GʢS 1hC8 ih' |3.ѨpgíC,vjr1-͐9O-R`3|jc"E`a0biJA &@8ΌI* ~4ٵZmsmJEH+Ja-P'0@6< +U𓇊E%p$r5b,I=/=2|Hs )L؁Kt^lb=8DWk֦ Au!S: P8,X)yI"ʞ~1st#߸ T,RP3@#5tx Q{y`/g=JJ~D%|'V5n@ DqO $(-۸WwFuEnBks-R*,C=#OܗjY,rj@vD.x*NI3]{!؋w|;8_b.Y{gkנ[ :Et9MegfU?B5ИEyE}4vG_xB 4^T ?9QDep`Ҁ*:yn#wDMgV?FNCgeA Y*k>o&4̱ABj]|;>hRD=a'1޳7IgfZNɕ5ۑs}:mSmc=6#Q֯-(t:价^W F[ ^.3_qP\6 \?z:}afAQR\7wMi2ס0g8(W3~ ^tJ̭C7[Xry}X/ -W5q;q 3.r^Ug8,eB}Xb݆arU2jψwC;gL1=a e>>-5deа.'g nGpp @28+ޘHr#t~n6I^=OhYA_]A|KG JNA$ǂ` xirן)'yҠ( ,oR63UdMaĺZt5~w^xL?[u( - @Ii1jN aOJ5IUoRUG*x'i3ojKzuw)kpAR({r ;2`S<C$E᡺DǨ,hrʌZ_R yRڶNmP4 "[L>`4w[fiu-oM7- Tj'viG|qY-ng#Cuxots,1h_P hΕȚk@-YVEmAh $bzŜrs,H<^E`_/5U+C£#%i/;.:u[#1ջUF'!+ {)5˅ajFΧuoǫBrWD2xRuD" 9RLh ξSyHM|Jr;#bjwIMr-pge"bGﲴR*_ص[RK>4#GSx O!]`iã^ m /R-Xb9͛)5"t~U~])^+!e̡187ym݌8~@%#Fsa- e?U tt3:(eLx8 S*.,nHI@B}PpկM?j:S830}1}6;zW\B=>0A#33rPPF놤9njqv]z7<0n}mq&k7,R̂eZ,ݍ n|%j[_.f+Oq2ǽb 1oY ϣy|=iH3;۳ĸR Wp& Kn0 ko"+f/z-P˭ ꕭ.[Wԑ+eDP+Y]aAgs` p`]R~B Pڷ\cƹɝZ`S]UX8&#jilV/aIHĐJ\Eɫq'5%=x@#;eBD4]=%b'j;ra/.[!kkQ1r-*E%-~|"~@]zݮh~)\ ]&YlI2Ҟ7oˮ-D0dKX mvP|r{9čv `[O[cbENH˗^WRЈb U'}`' "@bswXKzMs"mkhg&ܣx)$qec.3I)O g3l/oI1r;~Y|0K5Fxqn5?؊[-Eq@n(ѐXtlM,cP`Lt,ybޖd ?lzbPD dVW@$\9fCU J7;y.6YQ*.9kK[Xk&97W|`2ؐ'_ǭ P8s]6@EB]zڸ4A ͐@W||pw`|w| ':/sqWd`e>O H yog~du\<_hd~"Æ@D~o H~Rq7 uŵOqYC"|q"Y]ҦYShׁ*(C)~~BaY*=,t8 [&GzLJ} VM;=VBKaw{)N.3(Ic%I:^8/mt^o K؁tBR!˦[fe"32.6T3ͭS)OCτs\_hG͌&ZV7m/ĖK[m„'Aw(IlI6@\^9zz.I,yc:Q'5A, T k;r nyP݆KLyaмy\I|F~iץ \naU򝴪̥͎,BoN0.NMD%Wi{XjcUe @|+7E!NulEBS+:@Vfa.r/ }~vT rѽEg31e.uӱ!A!7F9F! /fY^MZy:乍b>1sXUΥ FO\34gRI#@Tp9L<8{I_ܫz;kM^_{%´&jBþŌ |DOf L]@7p}x (07H XBe[J~[l=To&('dξ %[kYdg(_N71{$Xz%Y4Pt\ ;%Lv癠6K.:+qK kX [E7jzl UtV6YW}مo?+ 7ڙ[˰lt2 rX >>;&+핟SrW+KYKg҆= = S s/M-thם L' 3!-w7Օ^NhSZ Cxc dx&:1B*O@s3/)`l ye_/%N~^6~Oǫ'4Ō?xtyz'"Kɼ=%h)2-mwm (U $HyӼքa,aAh[;q3b%iぃ.|l֖aA+f,:̚],A:]z/17N틥̼UQ\}w:B=H+@31º5vRekBջq'}\SFxIvGBUYF޳0!LN3Q\H6MWA.4$k0H @l+ƒsGLY'/LwÊ2Y%NߍXA ^Q(/-f8X- U&j?xZ(1m&>?Fs^ݬAm‚ЍG_[.aaq`2.}JXOf)S/B ?oX¶1_g( 䗎}b CYڊ 聺[(xS&?+ 5M2\B+s(HkbI U  tx7 EslVLgNZvzܝFx~"qWt ɹ?2ɋ+h.h,|K$ǫhazo8G.I %QRHЃ,SER XWtu^ci.ҫ'H\R*'mNhh2 rv3vL<ө2JZW~ isT ^UWG]ʧşCq+/ckZXq.֛FqY=_gܴEAv 3-BtoM9Dz]0=w?Bn ܯWu!PGl #DxGx 7k]mkq>+ B:BF|CF\q;C@j1Ol 3HDҗh )'4yY!vDJs, ^Y+fK0h{VJk@wA|d+TCt-URHc#W%Fvg\/`΅XE&A&M.v`sP{l/YAuaoUSXPc~B&*\uq0*[TJmIZ#$HL{"xnuZ$NgŨ܃ fN/1'DeyH ւQS;vPB(yƈcK;@[@`c67@#tkrnN"7ޖſP ')͍z05~`!_[^m[4T:m (fI0`H(6_X(04ȟI"9<癎c܌[a_&T@#ޤTx֓ڃ'L)`ZJBd8}g6obAYѶ}>kۃ|ȋ<+.8U%ӼeXGZ, \9Ň v-WT!1@G΀"-twU](鯄Bo,!_IFE?7 y.[`+`1&\F[2-]tj T7$Q`-ze)8'$)D-`iBN[Anpq3y0wMdS#algK +|#4HE.pվD^dnTe94iUGAhc[ޠoKbw 9 \|yaBȫ!Jz\Z`( ]Js*ƀ d8t_ՠݪ˞ _)dZ_[:y d |6)= 0{P g5e:Ic Xnk.Q2-QzJD(ǽ:\Д!/Z@&~ qA@`MIyUHbMmV_a..A7nO;m^̆#~e[|~&e>(7L73Wrzw⥵eh3E@xHi_YhrotO̝=kAEqB8vnJbɥA6!eI3!1ZNX:LnaxUBN劻0ǪV)8F!<,]ރb\ 7%`z/pEc0sU\h0;kH~rDEKc,֘OFʃt^3.x-0&`D[|(.MDz ̻<gCWl>|!Eq BVYIoc3# ݤo iKSpXvI<:0μ)LZNǣB jYQR:Rg8KaXl<qE9$xhJ.,ʣ8\RsJ,6ۖ^Rwiv)~c =}twc- 3:"]Pcp Xuy6Ը 5 yhs|^.M;'pCz.-| x:Z]|{8|/ji~թr#  w])+`V7[|>seЦˍلBױ`,Ѝ +Q~~|1&]m]p @y/{n\35;p)c4RP忘[D/6 E0[k[MED _(МHIMk݅(ÒO:PM7lZ쏝/ހWD9>#(*G%$А5*FTІg[E[xo(cQ\qi?ܾ7vHymHv-K뿵D[ MzcJa)Ov YԎ*]W/$htǘTCcs3޵0j݉]Bgᑛ-0k衞1I/@"]g*:9 MR-jP/O9}F\Ê\ke|o% V[kcU2+58l6@] ͠'j3 /@\2;J&dt\Mq-h=zsγfƂ|鿻/sjjԬnk\PNHbS~L6EjTǢ Xٲ7x[ cbR P7 ݊7afN X)FW?ޔx9uHy>pSkTc Sal:|;v^5\mb~eJi~gv 򈾻K3a7V2YԂ'= H~":~MnO":T&æ(z6\gI5zO=AXWiXrKEp U}35׉ojb V}']DJԝ@4 yK*" QwhcUxNI|pL@!?Qo"<OҪH}`']??HBk  n kɿfǒ549 ^nݵPUke~SV2)_:?[ej-ީkUy"`gDF乜Ǡ~dKD}tǓ`%t5PlBP>A I7fĊqNj1Z 2עD:qNӐ*p5>+Eщþ,}]vgR``&w-FrT3)F?V5ɮuHŜNp4ӼQ$p{64|Ij <>^AsS( +D|= ~Ox1dlG 2m~\vS7'w\o;8幱A8ڨRcwm !#*~ e@B;Bd7!J.w&d]<ذ^bmZO)WWSLcD YuRH{G0{cD{="-mZ UwhU~:WеG"m5N|/5=ƴ j!-#V*p54 ܳF1I gpV:ӵV$I&ԣq t3KW&AYA;x2"b+ÙU4|n%@OI ѵ )KO5`UIrQ| YxTaTxU@AsBrh)*Қmb׍*^kMY7.Y#xӽa?<5 q.WpkWTf< N#ŵ,8B6&BUzvw{ #L&pt=78uk v3̦Gc,c4?X6{VucK$o!́1j u X==̟h.!Vȥ+:驌HefEʐYG"j%yIIRq"QN#~/A4xk{G.pdbk(sʝ!L| >4pG,  ˺۔&6ҭfa\б}q w*:JT=)qdejzk"L0c^ pNc,v5}+EXQRޕ,kӤ1 |/@LS0tS .eIgWUڵr4 0ˍh:}/GTVx!@}rT=)TE/lrՃ*>ᗩŃV3M}{S|h@Nݝ-Jҝ_u 8һ^0G۔]B$[~řrD_<7=oy _p2v O7e&%B gk!-^[ Q!%R3?ǰ"0 p`NϳܡnAf.2ژ&&*" hlW|wm >0k+ʅ_1V&h>~=[I""zxoq $U3;Xxc'3a ܵf.t \' Km-ZfdldY?,-M 0ߟМ4'jeѳܦ*ej0b4Bljk^6j{+Z%ilj/ _jׂsH nvO8]V(Ja1"qH= 6Q& bX߅qT8ؓKOW_WSxn@'wP%$WIusnR.+t$ p0:wtV-ঃ$_WL 2Rg߄d =dbYU'(v$ϾdAR촥1Z9omBO;~ H Ա&]_>gfDLlQD|\:x1 k'E!nhK:׷/t<;%x~B0>nP )9*4@rW.h}I|v[/sAge:sx ]ɶWIB RX1jS"A>ׯźdT!@kGS4:QWZ-SVbR  zu+W$c=2UVxW< ǶV Jw} 8h$':^h.cD_ ɦ="ipl^Wsyd|mlZnמ)I 9( bc u]r-ގI7J+N"" l/mƿg䃗`6u'a$Ăֽ_ '7wDkhR6K(XPl6Y`(&ѿ ]ZR08*6ƕܟB!x=o]z->Pֈ&ajE*Wڦ"?;NoؔxJ(e>ju}# A֫8\p^7*<Ϻv(ޱϏ⥪!ق9A#.}JxhlDE31Ǵ8Y^hkxȴ9d ]ׅ(%.f! F-j^DjW%ji$3A@+ z 䙷%EE\g\'z5ٰìW͌vkGL8d.ߔjD%n 8?N7~.I޻ـw'5 T&=c/w}vf'W,axGCNgs/DU,Zyz9vjGb+O`R!ǿ~";tzW /"Ѓ伫aTO?oFBig14taaMoҬ@^͗:c; ~։9*,ʪj?y6LavmJ B5Ek,?[eJia! 79Ԧhv밴ijxTmq٩7P[& 3(*ٽU0c-`|>F"4I6#YQ=7~%J3D.vzM dیȿR6B&931Z:ӅLͱGo402s]Sڹ-vn$LhfpsϓŻ='B7XhVrsȕ#^чaY4IW)ywSO+X'8jRVEưbmؠڍ`1񧌟QϭR&jNE#ϲG}TgK΀H1%,0q6dKMasb, ֕!Kzt&35ۯ,R; &3R<wRc%4M$74n;TBG3z<6GuEn`v3?+7"P/B%y=Dl (# uSR}wy.EU~(EV>LG5$d;i2:炏|2N SĬMyD?F}8b>4snipV;$ʋ*C=#rcC u[E f5 REhMڒd(m]m}bLnt&*BNĮ- G ]Oҳ&W7{JtbZON!@ PYa2{\HRd Ydj~XY<^qQz9dYSlYv.! BW{Rn%{uDZȑOtC':SNkl#JN ΧLR4]U6viRhfPfu<]ϊɁdsnȏS Gl#b"ll)!L,-D?m#&ǢԼy [~f XlE\hg)P]8 bV}=.M3/|(CHlMmOIa7V=ϩo/ԬMȷl|IRoPI\h (i&3Bb ]7ҧWDck)~m2@ip7(BX~o2ӌ+YVS.x:+CJAޮdH055f!qS'cj]7,^?2D2i uMm.HcR1pҢM~YV@ĭ§*{vW#r3];$ZѯL& d2/̚Ej]-=:_XeY9ܮZY&^RR7k )oYWM I>xm~ORjJ6 bq;׎S 8& YGdX:5 "d`3V(r/=F)ٳ:Sƶv-Ӿw],GCʷ)n~e*VM4s>V7*ܟFCo/w#:up s]hS*Qʘɣ}-]̪)?a %Ğ^>.0E"-\#y2̝r!ު9Yi pGR=xtq.XPk67M9AIJ 獓ģ a0e2_J+G{߁mu"ۅrTf%iq3(Kk6Mtmںr(*.o~r^m/UMZq_pPJE8N njN'@48ID;Б 'Ƭ̘wrsyu8w',_5 $7rnYӗ 0EfgcteOj OȰJ"Gg2@lGYHF-'6)}E~-k~Ac65%ZMqgVoʕסNoP{+C{57%Cw} #>|!o粪6ur]7;ΛjmVS#3"W␤B2^y1U}q/g@xBG}j :DgZpuVnz٧vߌxuh5ir #f"mj 9ZÒ@AҶ]aoНTx绵~y|_faB[тvYSm]aǻSP4 T gqev/}P >9%+xьkz/`T Z~+qT)K)m-w6ZnIzC&N_Tzۯ01z6EhUuɪܠYb9atSD[J $ÛiJKOE3QI#̥ZMj?N"%6lpU8>0 հxc?jE8ep8}SwD3 K-[kY7Mr?e+} 7x)sc;^^gw)4K@K1p} 2GBY!R)jB(B rBrLQ刐#IMb[qM<^4uq*lh6Mg~` h-9Ӡj\c2 +3FmLMř"bn`صnu3A@_NۮŵG|0U^KuzGtX32nNsVKϝK;FH-o3Fq$]z8JۃH2MѓI^LU&{p7FdޔUnux!tASL8G8v|YONGihfհj @M0_Xd>qf3`T`#L\#x~t@eXX@tY2ݍ:wm}mG!:shظE[ 72=7Y{`tܳGD0wL\\hp\gDs&tjxLtm8)q\jY{F[G !h/a&4" δ6k3WkO-Mk>O&h-r!N+$Gf#ҜDv嘄J9&<](ؤFB7V+gAs^rȈC:~am% rosFqDݨ j0s݁ƮjE)+q4eumD-5oXgύ~m4!8i4N؎Ox!91aL+#ɱ=tUD1t{|d 8*)IN\5'|C\ 뜔XܟptPDq8]ၫqTPxUo9ժ ӡPoI|/SmeNҾA9إ*E3O3Y1,~KPΞ;(Š&)I'ַ?k=y5$&sXDiG %gqą_TranR ļk@.YdU5lx[ ى5U)(iکՎs"Zt`!< s)gSG~oz:,VWJ+ۧ'PuLw|n?ԌCKxu@hhf$Sk"Gn?9AM1̈́sZ8G ^zOlJa_`p3zЧAR8:cK:͓#P!UUv@~ݟպ(\Q:$oШIlzsww|v(mX%B(zR"P$YUzg!le,RdmߕӭpuE}7gĦ.SʻAV9 jF/l Vi7v-s0" OsIxn'1@]%}65O#O۷裸V,OcG:L,sFGR.0U۹h꫒!#[3㚳nLv=NL˚-p81$H .Rz2f saK>Jc^b :(t'1t}7`,-br 4(lEff <|>ka"jw&Ir)O0J2Ŏs?Nع8x!1IA+BU *R]NDg"imwN@91ڇXWue) tHYJ̄;.&e;[txq43~&@Fg&)LA2|0]cX ~A{CcqwladÆMw{(+H/I *{# mmG8޲^w9w(S~94ԯ&yFHFh ګU8k4C}İhd ;ra \SN%"TS_Ҟ۽~f(fg-(%8o)`|QI!v_$ٰTXdcPJWrO: 1 bzrZ ]+".$*8Q;dU v /x 6J|m/~T~wew75a_uͪ(5!0=/M}Jvf\lYd**b 3-c۫5'AXpJƒ5)tOto3@T]dKD\i PwGyt:i?ԤYq3m,*tx $<;9Bqzr{BʾS.2@l춹}1)c6ƏM-փ=$JkIjhTrD"02BdenG?)ncP!#9)vho`PHXSGQ9RJdz[X^ ^yU}W64.%}&q4w0AXTl9ϳU=wtiqMhį ۣ ⃑/0hg%|-djӏݰ-TTGp1VcavtŊh)FlA[*DjE64,e:ٓg_>cQ$af~*}O6C;姙3'o& ݕNndikϲzвϧ}3mz8Ü>6]ьy VY`@cֵgYDʼ(Cmt, :Z̨Bb/DʚcQewK5vMgZ#H @>Yr5yS!aZ'`I D1޸;?ynO4.pޝ/)<wEԏP 09i[3шU6dϥrMC|pJF;"EZJJO*_`b7Wlcqe%*|M Q C.fn7w1S8h Z':WI<~YD[>My ~*+ OQD=SI ̼F\r5;osGg<3>ܧwQњh}BIm,#/:,&t83'qI: KF _QV6JNZe?jsy}1+d65sf۾^x H@9))%%)fnGZY>gI#RC#FY*Nߒb~w3ų H`xEj'sL}rvGg!1f K\Yw?lAd0&C.Y} tTmpd芼DB; %2 oAkV}L#^ 5 ajn~g_ׄ2;aW f4~@`6W:d6:DFK 7cm%o,LiA} =-swQФ`hqhY65ɾMM0RGi%M3 x yx3䛙'XJn1нC2d˴w=%ZNYfA!XRy@;60~զhL ?Tݗՠ8xJy:m /'Rd푋Wu#]UcoZ;Lym &?da*1MyV5  dRυ& ׼ ˢ;o&+'C;+T\T^ L&sw=>9zbclmϔz@ή%\fXᯅ6˼HrŸ!tdB5?d-G&t~{},q?]⋮? rz+-i)yf2r>C i\.lL ezկ vƌfݘ-). 5Am!ne$0JR$xf6 w#+.~9CǻhM2 Z5Qi{ lÛIIsXѣw@gJlinhn\x=ZC{ծŶL}+]_ij eEbCF _?^cBJStJY7acbS5!ZfƪgNM/yd0G!a[Ӽ%ޱ+3Ü1؉NmH5S@f-dչ ?i|L2w(фE7b [nʢ#:*YM$Dӹ.=?S4v[D : QXv{캑{Bl 5`0m3'k|-jw ۨhlqzXBFOh:ו~ȑ.w9̱[Sa?ߡ(h %U_J@D B0:rQ7dVG[puVڵ wx[6_P]INױJRLUsVς1Ǩnyev~\Pr2ӎb`$e?2^ _6 AQrɦ"z|Du=mƯe2 ]Hi/w#JA\9p',[(E #j޵nT/<ƫ:ңR^I5 fzا+Ye8cfJ[nR.dpndi[fwM-nˮ7HѱJ.dTvqvKQBؤ4|ډ¨ݲ +QQe;~|9cUp3zhm&T(7^TCFrs?pH]%O0IWYETx 1m}Hrc0Uf_ q͕ 0hppqnS'ԑA#vk ~1je܅R*'}!E%-i+~@Q7hN0BGƞO2̆ T\lzb=pXŖ&j:04#&)m[]0'u|*M di6]I;PkL8評jJGՊz)q)zk; Lj7,hjh9=C/u+px V WQħᅮL s_jTʎLX)88}@]? YdsYb<׵aj6^Ļ[r+Y (L1" }!A冋=/G[$VRBN/> PXMWi|K KU~.a2-]|bpdpy gLFNl 3bVN\Jq2?Ь/F j)D<%X ӵN\Ws}QH4u lb `O1{ׄ&cgu/\6Q5.2eF>0twO2`Gև$|~-Dj`igZ1u)Q>OwCV/኿d ]JB YNOMTV,B3 m\>.{л୍ :f>,"1R4,tFi?D:{G@-?eQdnJ*t)ޑ%dސ%c% 9,$Tяx1jo 4PaCvrE.#.8Vq'#ghq4*C+8|(,pwR%u kN1t l>CB4rV|$+aaҤab:hy۱KOi~Is}txfy@l5tE),ˡ5vrv Ro?ٙ%X깔 RܦF^'XFW0e{\iVD%Ǿ%WhMTV- 1@]O>[jƊœBacUMz.嗅2QTV :+צIsmː|p͆&q"& |<ن7'MY Iɖ g '*OzjP)R &h26Qe;}:d|a6/PU׉$QMHCܝ1@^Rg}E vVN'LƇG⪐X颼:s^E> 4;'ԭIA3*ȟ&`]S'ۮiP6GeKzWbnѫm[nG{ߐJcZt8% Ho#UrL~3BAj>H=VП}.뙓 IŐ o?$]vA$>C 5fc\l8Z),E|gtVws'I ڒ{PVC#NK. ] ֠,9: :Pdp2HJu3hc=מXݝg? Fi2߽G^v&+Af:M&׍i )A%pڤ *g@Ā*pxS5ݿBN:S*q_ qHb8ɦGPh0u _E8Oqb;Xr?E`X)  cG@£6;Oߡ< ,rF*[BXt<&⋋e#UYOn;;[g(0ԁg\U1:7)?rHD_F OH?̡"ޒs{*ily| $E__:ʵigoCJר ܞ)bfg dNw wXZ2YjFm1<QobH۩OPnvb QMؾ=32\t(g=19@[ s^!M?gŪo P'i0%i9C2 D͵e}}I\98͎mm8gฃ˹mJ&`y/WH5C"Cgyi2yl!a̼a!Pdq$v him9:*gw|V2%uTqj!5Ru81<}ivn/Y, ͢yCYV5 ;A9qDN|Kc@=غN1i k]0Ľ]WK˲6bƉ0MN:CԹ>49d*t-)@[I_OʯP59^_PE7!KpƔȏ/f+RI.ߣOLbf`}׵2E;Ou:3‰qidհht(LZ)SQCT±l]g+؛1fn&)Kp_O sI#'1}Q("SpN ;DŻ)G/B%2Bn˞/.هl;~z'-1:<{y_Z\)R8ƼAUz.EMLk3m>N^`ֳwJD!N4phIΝ:ig"$jp(@ HLY7-w4d x=_SDf)}܄۱G776?e}{DMoZ~Hw-0(sHmdq{:4(x*G؞Zyןp1| ƭ%a{KEK :`E S⻹ ;zp,y ŝH0p .mĵ( K=/T.WvӖmC:<2+WII$BXs(lUK,,/>>G'w/&*~jqݲ8+yծEn4\9Q%pe>CRՖṷ>F̹0}29Q{aIb{DA4WCh`q|nЯm'ǜ~< 2B<"8]py^i5B2۫!݁YX;Oli2 Y&lU2]1T6t^|H0Ɏ(5Yf?U>mi\9{"`ηBo:65o|JߌYI=kC80D:t(7Ŀ@Xیvw\ټ[JGHу& c|x ~IO I]i bNR|H㹥rFa/A^q2^T?jwD=Pi?+V ]F}{(ԀCgcȽ.*B=.$eX0:-K)wɠG+wүL4eGdVu\m:t%8j7%/bς5jj6N#) qPmEj U;9Ɛ L7k ŖK wD/I,lf7ׅ8e0_HWRw ޿u]~j{4%Huܥ~ ܫ35Y2~tLd ^^ՙh@U`-c?J+}Ց(k܋Q;] p xnX|b=&ʳ̉ w;ŬiBW©w_*W6v<5rTwNp=ikJnlpP@?,gV]Fd^4OiMtE5“ 9ntG?/C\8wI#rQŁck}<-`>(qĉ(g1:2<6sB>oZ#X+q5-3a }B6\oi}l8̂,9shI 下TEmZLm6o:2QXj) jNZ5([ȥyjP/*2AV?&ŝ^KWdo(:~Nx`E¶i,;lxhU6hTPLXrӋ˰6Or_s܊HG%WkWfEoTs4%sGp%R%0!9&4M ҋwh!1 hGJe,8%^گGXZ+L31jD'}nq[Xm 6j I9swV9'ݾ\W l^z^vYO 'nhV$16/i.;J -3x3hJ<<؎L̟H '1'E͂Ldbh%a@ lx C_l(PX|26ϿA@6mH߰w}0 .Hk:l{ׅw$yczBVvN眰쯃tE}ςy~$e>BqDve <؎ 1l6`"` FXaq;6Z15%fJc왂212[RH^3Js7ɫ@ 1>]XcbdN$<~i "5s7WV}#"PQ\#Ds6?vđGDt";^ng>_@7c^ۢ;c"؝ c=\=Rg~4~G-A7i6a:kSs@vȿ4Nxu{N7~[Vp;\^Hԧ1]z 07eFf>'iXP%5| !ڬv٭WrU=[׆՛{z-Ͳ"I{_Yߝ൘>$=I.L=п1f Zp7AwR6L`O"6՚mDZnyy vPbC`hi<^k|֤EIhV%y4&A*8qXe1 =v#B70v"P'wB氉I6s8>R+*ǘZ47_/ w7ndcy;;t ^zm6{֎=s+4|{}WߛQߪ8_Xc$xg(r T{G0h6قmͰ0{ھv&r 󐂚6r`D. zKס{w&1P}8* ~>XĝNA{k3ܺ2=pph@hN'A~; ѝx68%Aq?DY4*541T#)\9'; 1kCqkwN)kR[u&!cW/ 3:@_bgGUZW\XY`'TC ODD`))0U#ٿdž-{ZJ:I/¥yKË9!L[s8'x'ӷ,i n۷ejwF`Qq=l28M/ FLO^s[.C(_![\W)='#b-/S'}\|w*ֶQ5Hѓ&D/[i 69WZ $8sm:?9K5>5T b\fC [?_:]nqC1hq#V2G+3+LOpfwG$TH#)! m& {MoD =z Qbܱ4 C AqbVml6AD0Vܗ:Y1C8tAD"VrsE\kG}"GS̃Z&X0aR@.8óZˁ %r"`}da#҃%UGRC6j;%H?ٚ: ݕzA n 9哰>p)LdN:ǫ1OPЗ%ҋ}"R9E$R̸//H=SW >_g$ 2Eּ'ڪQo6`&@<SKWsh1x[mjlyʧ.Ce&t7 2 "yL9j*qZ胜 Fcjn^5`pM8m|er{M91xlRӉ9j[I6@mV?l\] &e.Jȃv 3o[5UAX ض;;%uc<8({c(iɆY|>#$(qf5g8| !\~]-]~xp3y& }bB>E.53c}]a) D)OF>xlVWtL%BM nHz)[{Ȭ|BaQ`3a16KAɫAWLn 6;y;sNG]޷n ]4Z(6ZE,2 Οܫ.CB#Wx犐,G.)''׺bP?&m !J)jqgS q&ܷON3P% i$8c&ɕd؏sN\/%\32+ d?(um3 G_Z+G`6a|jX3o1F%|c Z@Ge)ҩ H,g^Of\Ę,EnA8+IAVҺdOv"mO@v69]D;HQyg-GFA z#6Xu?ޠ dS~fw YK)$(0si+H5a1_FŲsM!,2fZ1; ɑFy7uJl Y PP~]|%YrVFo$HdJЍ\]Ȁ;GQ.ÙHVx݆uj?=d^M7|YjuLA5~$Yp 0âEW Z;E"T=8.%tky rWѰibRQԣSp3?G(+C2H׫ k!E7Q/hj ɻ_QDJ2i]3`+N+ "%L|{,ٹ4{)&e520oY/!4y(_N8-JsnJH%-BKGb:=_zjdK-`vQݵ ";qΌ")aڔ§0iby|,dm-Y{ DW%C Ӗ.Xly;#t gq[i!\JE){C +Jpa(iH3Q BYvAYeR G!XG⸱J 1F`#\3EfJw'sC7+Fp#\@ijEߪVh)]Å;P3^ uV_#Pc4ٚҾl150 (^N~\B1}d]È0.7ȦF6cms({Đ:e$gL!gdB}=?A'whAic,򾑌k"gǒxY5"~3SeY58GB….XE#N%+5Tc+?9 v ;ec1 ̌NdlQlC$[D0 xv©7$ޕ,*Xh;:L]f6P)ЕgAӖhל_כCڮ"Elaen{#z,&1pH~t\'f@!+ŧg0(:j7ű@msu"u[32Veg%{ NdY)wLmwq}"zt̹AT({TzSe1s^КЃ 'AP,BSH:vdu=@~G,nguê"D[d*X4 0l ѶFI.;ʥ0H1vl'0GL-S{xeÊs!\;^?avb͉ɌJcCf}]iʕ2 ~C~@48N%z[Lqн^lɀ\C>`'S4s}ocYEOg'CT+Z۶7|Y,UBoQ#`mv$+4^א;z.:FH/쥗NQzyLx~ Tξ8նeۍ,%0W~aCZX{'z3)&2OΛm]\9H3Hh?w8E $z 7?DPYn#G)2# =$(IEWԍҾƀcvJIm3A]= 8% gU@f_ p/ua{hm6DsB7s%.,YΨڄg)YDP(%?jv_y\#ʓ?t{uu4mh䘍sBoF>[1TATBd69X Lj RK\e#ƛn~gɊVrTΞI=a}C<%N~,N>4‚&l"3oн {}msHF$YLXBLO.h5O yȊ6x&)~4cŹk{(_y+&@jM 2%*)ۆxt^Mwj}sdqn t.@\,Oy:.IQe8 UڤxqƏӘt9rx>jӬbd]]{JMwHg+Pvv̀wjfL%LRv$nӠX lql'<`Рo!mt$ղ BK5ԭNc*c\!9 yf${>.w5-*o\Yr྅ޙ"K{>9&e^ BcXԥ?:e#0QxeJ"0lT|[⨵8}[T4Ry橥Cl f0Jf =O"tWvvhLlu◌D'bݸc}qCŭLnB:B]xZ|.6լfIn0/.4QaJyD!]<LK:Ї8clϤ^i]:iiI9 :VEiQ{݁Iڞk03J}+v31Z}}%嵳 %`)W `s*H |e&rel~skfpjŕ|wx8z&MѦ۶{'ڳNMEҗ,ö@,-f*ռ xL1SFsNYPd'j;+Oٿi9- ^tu+D3i 5- r5]m7q+/CC 9g㵦a%lM?=dII5͌y0 Gd&yN> C/ !Ἅ*?UE!0vlo,kCea?l ,OQM_Ɍt4FdQϿI4*{(-s^f]F%4$h+:i Rk8Ikʓ0Msed@,X $1Aْ_CЍt.hF  "%m鮏{ѓ \乏>;{J5rw^'H?m3\~JRoӘV"$ȼ% `^EG [m-XKm6| SMw%>+7,p ;[~1ˋ͘؆! a^LbE"I>q5@ôbQ0M:^C5LCq'P!>2<)7hELR]WzܔJxבP &(I Da(]kcԉ] !mUW)L$z#+dq{{& -"rcIZju,R?bܳmk=b7Mi?#C`FVX&48ŧɷHj<5( TDK_L`SF=:xY1Z,OggV#}FWw(⬬yW1ӼmdXAUjھ`(5{*00GHC,Gۢ# .˴1 %خZA͖q_T> V5~twui^#N=vm9ۿ)dx9L "HEu4ÎȂ;2Eֲ'ebǿ5pJ޹>ZgG!pHlA?oڨ=2]E/\C9~nsh,F VЅS㾹1{(BiWVt^0{m:qX.P(}H u{dpN}$GW[C4vԫ:QPWy!B@bH0W߸^/zelgQ~ۖ*'1ue#H7;19ޔ\HԊ0+@$]㿧Jj?HvFAF%&eɯ{,0j7JyRpHW^X-i[qsjJdto"vcnL$-ϰh+cN9qLxtgMZmGh5v?&ذ,YO"'FB+!{.Mta*+ʀ3r"7yIM4ʛW>L#6?iQ [˫tt˭jrl*':i T%>1N Ђ(:6Ic#<LBiI E%_Ƅ7!sLꕞs$Gt;<;%Y(Y5t?#R/$ []UqO+v;#dy,:(mA߾B ~N02Xě>E,udV-tr+#Q[Y&}9v+6Ĥyc>"ş|s6F.`w6D ;A!Jޔe:dJZi-1o'k%aeQ]60O:LyG]]^Vanx QTy1 ,먠XI%9mҼ婛i@M+ yJ2a<1ڈ4VPxЄ٘P}tD M(/3yK/ A2.Np X8JBp>sp*Pl(ǾH#8;.LLwDsh> ւxdWF͖n&uE?#˙Jb;a74rbut_;3 ܷ܊]-e$nI@|* HK6gqپ;S?!nЃ>GNJ,=pay(V1螀  $1߯WG-sp a q‚➗MYdL&uzi6E*hz4~PTC+9n>OmJ "X;fEYfjz,=P m▌ӗ~DxMLAx eIɘ]v+znIKϷgMG"Xqg$S7^31"TjM ˭fZd{w74EY]2iک;U, w8}UC>1 Kx%/ h*"XPHV#I7OQtMz\+^wW{@k3 wȁb+Tt{u)HL).OPHQ 0QuQ[EL=A&EO&O+PLF|ݷ6 [ky㟎)ڸ^k\˖ d!ºQoGR QF`ɵDbe-9݂+:DA(]y9SJMMA ^7e˛I< .2c]?S~:e{h(h^ͧ& u0 qo؟,·w4*GtUU,A:%dέF:+)3Z86&oG:7NC9݇ϝظ)&&է{Țp:EV!ǻp 4̊w= ˬLS&p$A؂&=aT KnS_bz1rpʅL&cdwH:|Ň+1~;VC. ɪyeع,]EOߦo2VWgͰ8kb#;zǷ*msq %U]?lγzS4|6d ; % z)D0VZc@;۝F`fp{DJuE# Q6!_fSݝv*ij.}QӇ9= /|cjF0wupk |NL( /K`5>$~NHy}c^'8Ymb9뒥&VܬI`DZOm,u,845֗}beX6{nٙqSVb&~o|PڒW p$l|>q·nYOVeb( H/+/껊I5gkb;aCoYX`;.}v>[a~8rvQ&r?ǟw3! &1CL@_O)yI^.BtMLUs xBڋjkQ2dW(9ZYh[~V8?>w=)\ ec; qfai269ܺ_SaWtoPc͂[YR:ӆnz\p1am-' Iw if3#5#=i?v#\0nYvRUة=#-DU^dyy]MivEd K|E 7+*;fc]ο#@Br MC O|_GUF͊L[ޗS\\PX0p,%bș 4PڠWCkT9`YpGBS%+um^mz%2'C+>-|H76,&X2>-1\Cb߀7]0߱dt\qv"FE&)nIW}f^r wR@ir(nY,o)8[`;c*3؎e@KgjJT5yB#^1aʭKDdM"q]cI q?Zmr88oN#ry`E GF!w[S`l{Me:&Z`βu[]v=B9]>:nEr:JCI,F>NR*ƕ ̧+ZFo[- aSgE϶epzm@lL.0/Nִz`7:3AT@ƣ?#%:sy0)&K0;Mk9$KK{sƤPS_}{8=!H\ rg$΀ګ-OHfm%4P`SjS6Ag۪Ejbq$_OĢ 3FkLP_F3ԡTk͘'|K37+WM\{G&_@VLMcAHvo F5&a-jo3f2ރ +tJȾ`??p_z})lurPQuuP@B9zG>GFjg7n1 mж̩lFЈɓ/q9W!k9ˏ_xU. CMl =7~S` ?' ݎfXlr$y^j ʧHXn/řU2BD̑fOYT񦅞O#H);M fK/LO4/q3jp;:F*TM/8-`K Y N]b!ȍqXbYS'd[RWҎ]2%*]R\ƅ,Re͝gDߚS ,ddjv~4,|7RUy@qZ5w^i: ʵ.R9Q $2[d]ތ8N@B>>e;4FfG@F("+f U7o_5Pȱmx>"!Hy[-lqjܪ̀\fdi {,./"d- tu.ҿ~ nTO/dX_QW{nXtK Qz*TlQߏ%P'FO:PıC^#Dyk 3iR[boUHW Ā dvC o[˭I8邊^G V .M.}!xi@b#,[֪)jQqd6r.: &&z2 !0_0lWl |G`31GdQV]y3,OwNp$!%!ہ9Ş*D#Qr5C6) 8D@zQiۦiH :R{-%^'p~Zi~[08o?݋k{X]-6@fϐ͋ϥS׈@]Z[dH4s9saK̯n،mZχ%a3y,c_M.I!Uv?Zv9\}fO|" %1?;\tx/k\o_oNdoRm{E`;Lm6aмͱ@{P(Ѕ~}UJ!LG"eƿQq>\iC_L|Ң\ok&sv#eْzX߶ed-Ӄ4^pܟ(JZ>DBC$A7*"{uQttZeLaE'o&=yX3К6봖hPQ.l̆F;_]Y2 K_\{LR)I|BpOP}r!4&2a<0 W ÛO~6%^ܒ2~NkrQ[SHlIPW$ҽk PfS؟y`^>6}$fVuL A!DNu/֚uktF`JoA8'bk&wh|s_|q n{oa)&t`j{7MO zhў#0F%0}:N_c@h4CͰnso"T"7**f_^>2I sj<ciQ%ws[HEkTϤ4B13*iH9b b=̈́[N/J?xefޫN#\xR#&x"oYp-=iC2}t(P&9qֈOM}cd `ξ8Iƴ"_י>lneL3ڳKkcKOF'ƥV(Ynը2}ѺNT9y۬3+E 8!Is[YMT]*!ҘFuyw:DjE' +gvOmK28>UATTMuWP0KQ=pҰ0]*.A#*RN6hd d)vg'*v x2,qR(;܋% Jc 54Pklj/=-p|#G tK {NebZdׅ,5^>6/fK(BQGȍI?/Imc5~lE0r҈3QR2뼚[?ZJ=h_|dۆdo"} ˴ygXҔ3js͏P1,ME{4o KەN  +A[U$Gz߉Jkk.X&xy!ޗ9͞ö `r_:^2׎s*u'E)c {|W+쥹ֈCPXb@#rURCa=x/Z.i8 _$9,$Rqr4%݄97I Fm`ɹ`{*+ gT{w(E܇|BMV^Ǒ6|d@BXUr0sRBluNw<n`~ 2hl;2lsѹ8b/?3^7K "L yaoqo/lٿ_Dk#/+zqXp])si3vi(W^#9w: 21uZmcjלaܦ-.,ћp[o>v{qpkn"jkEW\ͺl4y=&rVTb=v ښ)Zq:+05cl@Iryql9^)^Rg諫.\ ҸDCAMgǑfIUO sSoq"5[<n)o2'7;3%P1 ||3ys^!;h.H#o'2ao|I @QCy4;LJiyjĦ8 !`-BqX8ѡU /uw:Uj oY>Vۇӕðܯ'\7M4}UX{.wRx0?[|X%AI1XLߜm?1ج1)TYm0r̥i>gcB!g9Ŧu`2ǩ&Bg.cP5 tONgV p୅e}0.=|."KSgǍI˝TRƅԒLtb*܇zy{i&6-g2GܼS8G{E50nB+Cp$;Z (àΈ3ti~Xr;u*>Dk7n2ʸ/-~3B(tGpUipG*_2*~d9f9QHL&?8{%jLi@Q='HGa[гBb^1i܋^w9wݨQ v9#\][+^X;krPX"{f㥵bK ҡu}}fruТ&5X}}vKoL{=Vچ_id*Hep64Ү N? 0 9|way;+$ȅw^hI|( (&DJf9̀qz0QtgA(8/=|ZءRV\a #<yRPf+/Q{Oi\02W澍|B⸨xc|tRIû꧑AeY:C.> 4.!Gtn=?ʆh ,Ʉ4 w\B gtA- ;وokH>&FDpGeH5) C+.rpOz2!z2j ȆRFVW:cM/VZ4-[) :!/_`@S{'uGoҼYeLS-{@4(ꫮ λ\T+~ AB'`d@ITˬ=ޏ_E׸F?Z[нflQELY'd"T XX҆ _ĉYz=ܳJvYK{Js>Pϱ/Ք#w1;X *$=.&N.rj!N: λ8*Tqon8PۼVbJI q<*y;D̹oj)۰֙"SCk. P/ܓuڶ;d>˞M!n;1fLK͟zA,-*WB&l$܇cl CρˇUSsiz//z<-Jfc-dzWQ$$>@} 0&j#hx4lאfP\/hLwn2;Dk޺L?L +-k#40#0%54l<A#UA`gKn;E0,;]gwwgʽ*ꙡ6_ b~v~DWr i@[C\ bE7 7ÖN|yw~_yQ"b|3#fIx]`/V3f7[\3M5E7$43rʓPϻ2'> tڦ SgH_l>rm57lh (|YOEéMm;X7Oq-u-K 9qI\2dQTa`&W} '@)I6ځ70X-66y G]S^s**>GZ8y9 }gnQ=:lL{pBrbaT)+`%_7;0ġ;&+5ë bwHUy5= O#N𝪃<piCoj"FK(*n)zÙ9_V$Hh7!us5E ᖬ0f>^WUTҶr2bN n3g'ȁ7Līd1}x ƺb 3%Y/0]Z2}IQ| ,\Ѩ(WmM/$AknE9* ݻe:BɖzHA_ɲVTv`Uʉ_ͪºF֍]4 U͟}#?RP`X|2ׁ`FڼD8,Y*z;c^|j8 % яۅF{/+ j<{]X!'ɧ$K(z6>~j švd襡ਵh+2 5ApvTdc46a~85d30|؃wKiֈ2Xt0v$La:>eY?} vWw{MbmBitA<_{,][o}ISJPhC]T#\dCo*sjM8*. AꎎĐeI(&#FJ'8+RwHj}L`ikj<&ɕsb2qMR)5ҥYU e=P;* NP(k&0@/b꾌9p'ǴkW{ 54K6=&\Al3CE9Ht}E4HNzk>Q>w3'=͊wi\o_;:ٕOxKhl1BTnȏeY(V|NrY`[?Tu->m CA7^* V4l%+W7/$<un,!LDbKE`T*hV`rNաÎw?'%RykK LܿpYf9GvN}k 6LS U` "r3GZkSCчims,˝CS76( vH(پZba$o_\iI[e 18?кLv7 9T^7Z }U!NDRI5|/yH :AQ.=$e[#6Kq;>}+-u#+|/ϥ bTd"TcO;q%Jڋ r0fzlG(,"۴ _J~=-QsE?dkk)xXO^% yV|Dz &Q8:'=*Cwrd*VƱܡK&Ӡ^2sQPay1ێ,U" bxLZ ͯ3ޮܼz w \K//̠cI&@ݓ[K y~H?# PN;xgOIF ӵTUPXbPVߵXQCjhg͟O!T,6oiked3C&48rF$Wi,DwF]@8ZD|b(iah⊔?|^yq'_ѹw2]K>,Mt\r+6Vz*@z?X)&تG^@B;6B颡z[i: hOJv@œD߮ΰҍ;8ڢuI̘G }XD|tipzrc7Hyj\ &G"֤"2I",*FJr{5@?\#Rly } $#dau L'Dרs^*x:nw}_7ǒsHprרMT¶h/$|rKJvcAӥK!> q":3b Y퉽>TpvCmѻzWG; #koS}t%iVw͢.NJbZ#yՕyMU"bBSzh4$^h?_`z/WuoP#Drq6{ "8Ay 2HV$蹚_랮M5ЁWIѡ0ny.ۉ4Pe<[%L\cL|>lXL}IJspn=+1"ѧBSkq~rEPuS(Ϸw&_9T4)5s)`H;MuGc"m1(O1Mƶ6=(X@()$K]Ak*Ș6.gq끷Rel l @yt@ofhg(l0iLf#Ps ̃xiNrD* n}6` r_f% 4`ju&" :IFA`PR}LvCЃEդ̕Ύ\*bx\ p,`&,1\ڬBƅ1O^$!Ca_5WWŭIl,F[WhR?hL5H/d̅FwUHLW_Q>Ja{}hԐVhtO3,(V:( 獡I6<$ Ako-tiߥ˃0ќ ?plpT}Lvm*RhirF^[]}ǒ{Bs'| J ^譿ܘ:\f ̍y뾃%g`c9+a*oCl_kC~9Gڠ*M˨ ^9h-m4H;M3ުO*#Ջ(+wߨ}n9U:0-ó w /MgQހ}0JW zV뤝X7z7alǻ6!`]B 4;~A$RIȷ9ATMNiW% pWQ-@Gu0$A/b­ZLp@)1qD+-2p}o^hqs}1`oڃƼ6gιWjh#?=;#g}6Q`G)jK9}*S= 6K% FX*ݠ `yQemokFW>$`;Jg Mˁ8S pA۫ƻnl=(OzZɄ Y} .?v6VgyS#C<48 sOMgq+XN" _ ~$qOlZ򂔌QOTVft+UM~pUs^T<qӊ.)^ՁiMQe{t[*mBx͞(xHxsP#P- +(t#igP;U%^ۯF?w] `ARՏ+9k2!AhɅDZu?26IR2?w#*/(@R=@cSzZٺk/e`ɤgh8K0-+RυTn+-duБz 2pkXjs4 M / /5e@6Jvf'Wd#uxuL-Fh?ĆACHVǂtYXmo)o,]Jo{ddks8;AͤKhKa. %<`rM.uD5dtWx.ĕ(&VEweu @{-/;֍E),$^xC~QH&H4N4s|>gxL#t)6ԟթljB;ILiT :dc%h&ӟb= ro似'|+XS7G$ ʊaT'n\Ń ,OQ9R{Tp-^Z&tKvfN_bj 0Κ/:%U@'!x= g6/gˉx-E{Lg/>sՊ:E!sT,7ªa +;]D(M3v;[+-#<)_58=^zݬ2{ xwA5j?˟uqSuw~ϰ93= Ll{uGlZqǿ=sNom,)6ĤW ueepn6TE؂t(_н{#0+*>Teh54i1_kRo 7Cj&ZHgkZ揪_`(_(.iI O}ЏJ*טyڑ9N߮xwaʚNߖ?UcK8 z oA,)7z'Z$_g9 3^m;>_ YӴp?^_7Bwup=.,$%߅'Ϧw ~PVt"8RP^mh-+ޖRrlG$?ݥ$Qw:;==IS4J/Qq;yƁqN[}a2FC"ddC_j[_ .\mWo_*Ab5~/f`D@5s uf+wT%S&|vȪ6bŷ7؃IY_|lk  BWyheJ;5h?",H i,R#;Ȉ,G#a!ӓ )Lf[>3I E\!6ǻXjl8+r\؁P00H6=%;0͛󴆁 Μ[糲S&+4dw0.ᔥ~aSM\:訊hybm1#բ02R==0Ɖ/>c*KGΤrU*Ջ!Ρ]I:\ S2s+2 . 7rbO='lS˷ՙuG3aUQ_T~ӽt7R/Gpa/N>m{nNEK~az:4Ê6__\RȆ5T Xj$I]NҒ?JMPѢ6C-7k91F-UeZ()OLpzRzZK5+\$k'@S?yQr6'f+Df,q\hyRMK(dcSbq*y7A] y<Az}٩[ĉb>Ÿn谄 p*2gYYV˘ v!rͯc \LFI6p`F; :o-I+)e4eJwcI{MZt-_UQP|\գ=|ױ0Rr|5]urYĝwwK 5kH=?u?ɞWLƦ [Θ] ȅ%~jִ x?ݗ0'o'P{^YqRRWodlФ,TiǬ`ycۻLGjIq9R07z-˨_stEGȤ;~04yػ^{P%1{..ev`ɣ -AFԂ$sytKJhba3;/< aWRuD}rkG R$s*SWC/A&瘧 Sxfm#QRjxW=AOD}0qԡ ޒ.m0Cگm 2C+La찚J6No&H\sMDkqT!t w}xT`& 6I3 Qշw?lk+N@tś\3K: 8a~6\coe!p1Hba. le+N@$v]`Yw3|dRiޟ`(AЫɸz}};L0SXzoU刟\P!b!ܿPj0=6w\4"-=T. @%Lc[TxBpU(ܜbrجr>9PoEq^Ն ,,Մ,Զk #孛)&dIM:s%tm?y4+" (FvEj1yp{ڂ>k#CplmznNJ޳;Xߑ;͠aNE 5&yJח˴BdyY/>'QO[՛4T-㩾Ųn4M.^Ic D^xIvH:3 Q͵Tm'/ƬdvX%,-9|Vh,bpb19u#54h",gl?ek[V~ 2cqtg=(5ŀ Yk#=D &>HҚߛl2Ƶltۢ$ryQñYŕ읶sn?[>01a7Q8KO^6H:/]ȟi2qKbMpʿiIK9o}ƨG7ϲ.ネҷEKH+zNr0sG"Fp3,KEqǗ)ѸVz8bSLqs8.|3ٓBBcOpLBnzW}\JNq}i_tK)^eW|Tn4xWPtILG g0:&UًR>ž /=UI3Z$>OC1(?>_qV;7$T>\`}^3d54 j,i\AkMwI ։5lؘ"LFq:F}.?5,N)*=%!gfUR0Btk[#Ow0$ߋ(KM8 юjree$G\9ݥ ]P-Mx$4U&v ?G-6$C@.+'dk^-u2ltc!QG@~@t+AY)M^ydK"Y# UlK[ʘjU=0٢.k w5M%tzbcQS߆:彰@jAO 8؈3: *9^30‡i_`"6>iI.t*n7`R}YLOa(\ + 扂w,E=my&",I{Q Ej2BiaP.7?)vTJ%d_<梞4P|Ǡ 61fBJBP}EOk G ʊO=E!Yԙ>lA+ J7*5A@VGyoB] "ٚ+h .U&P.֦Z"D_ZP.c &zO-U l6|.ϧPU:̇D#(h봅$U[6͊kɤ.;%wiM'V)+9}H%4kj*uT%~aZɖJ}WKm uuyy\~FѴl_ƯU"ۡ5q0@'43-tqb_pt܁Ux딴XU%aJ7Ev#6xʫ~@=JB9S#9[t3tS5NgܙbiF4վj!:0>{iF9V&> idL{L_$?.E&9cgMʒ([|$=>BbÕe绽@ nݻPE)̥ u.Μ wuj= L:DVI=FX$CYwqx[CC2U(qJ0%#xcz\?sa؋hDq:ɝ*<%q6Cu0Dͬ7%!DB~J U٭~A(Jv") y#I\ѝ lJ%upeeQdxZ.!d, ͨPޔ^_y ooD[Ռm,n .LصqpCuVmwО>炎?y?cu R7ErteӤbUXO.ʡ Ϩn{}]5jbN%ƌ{dSRܾoJHۮI-Ou}js0( YtI41EؗwLבWio 5ւ;DPz]% _NTD,uE̳^DH˶ԡK4˲V3eu݂h0,[ Ɨq۽e0juZ,b=z\a1@|zFdN);񂙾;ٌMiuB z#e2b2'} RD.I`{ 9a[Px%NV@Z;D8s\`:ClX]YOHcI5HdqNEw}s1A968EIK. bLD0ǫQ9}Σ("0 ŲclzL 2 Z"1mPå[N¯+@1%FSV=UKᄊY`[ƌYV/CZֻZM1ڝ-0 U1ApheTw/9]s;d5x?!6VyIZKX)Ra(G0#beBOԪakKLO6gÇ#UȚ/@B(`<>\5Y$+89T$ ]QcLg2DY#! λ+6읗J8u?].I7z$̈`T=Jn̅ iKʏoVc#jU:щRX%S a${گh!@5|z z]6F+ 06#:JXk% X`]#x:k>I.+3rLw9i6J a5@dUT[eעn2V_}X/6e|H^6.P: |FdR2o3I_vm5c1tT\M(,fՠ3aեMI23gȢ)F)`&'4|?8D >s"3mv=& sV2~<㡹NッdXwGpP8*o5־L nlqPJDr_]Rc?v$|B# 4TS2$D iynjip^ ;WA!eKDHK%,%@eimw+ -shUrsR3˥tc!hbqENݬ~1q΃TFԍ")dž/;vwt )1WmsЏb_E廖ݣ}+'4c%T;8ғ(BcnT}1! chpcm*mh0 1ח8󋢲zA^n|S)/? 6MƢڷ ݑ>o+0 Y{f坬E֋\A^mca:WoD\#8*sIC(2cj|(jǣ. l:4իdWF8%l@J_HY1YDx"*-=-kā͈gE-x=@二l>zU[IZ<]ߒw/  TTiǛ4,<^jLHm=iƁ'Z;j)cщcZa~e<`y4&< ׉wN9G:G\πP I[o_.XJ?q;"L>\W+@*7l?W=/#&hnk:ӱ7 SHyoz\8CdL2YS\{X v?^gJ|'#[N㺎t.aS'MC. 7T *"Td)W%&rhSdaKBR'j\ӔkeьwK㧠YDhUDkQXk Kia28؍nz[I]Lb4VYM,g|@9݆>{?B`m(`oSK`*!W/Ʋb%4P8Ȋa?SݡK:|])3 JV94 4nӉ.۩rüpK(\'WHavVZq([f z/4K`&B6 ;*xAЦJO|>`Z-F\=muкcEVzN;gn hɖBIXm-IʥH}EDtS@¹/wD ~lx`NYӒ%ωWވHq.zp( .wR}ţERwK^M lH,袄 }k,1~_Βμs3g`)v)sW-U=wKgW,>;Ҽkq:Dz^G\ X'kE,b k'O OTXgc剾%QfPyj1SeUs1Hn=PPns2ק5j =aA(cAIw_y1L!E:[d[q TS7)af5Eݓׂ t tMs">7LMwzXVgȈJs-y_MbDu0BaR8k>{նtו0- @/8fX mo*q܂i@K }_ Q>q?(Ed.Kmn( ]4b_k_I 0vrXҨ79ܼ%Kp\k[/:N\Y`'·* ~E68U."?B-b O}g0 %oql:P{$̡ܷ6 5J c(xܞC.7NoĠCYmҴ*e(sМ2"L׼/X + k(1Yv= ! `+ӝ;K6 xNOHo~;Fa_J1/t3nEO+޾+2N#h<ڗuC7:t;[%=B@>_%j1o.ԆGE*"d|u?WL3`n3^x _"AAIdKn8F0k\<'a2ro"7pշtvș_ΈޅOO|X+L}sja) :cIPaX~zK =bQwTj8w=Ϫx.E˶>.sӰE %p2Ҧl ~(^4gb ,m rE;4*(N苔x՘,^ڎ:QlY`*석a)/,/\?6Q'/#Ҋ%JJ˘Wv^/Ւ"Zh[ p,C:CgSmtqV[h wӓ Nx cTT^zo Tj]#װFn+:^Ġeϙc1-uR>nͣId[@6vM ,ˆ_p5q;ܒMfP`Q6ba!4u5DAv ^쉢gq*>Иն7`axdvw0JyC(_Y(b񏕿Fd2|i +c+ib|B#Wɝ@t*;9bs4}޲ 9S3>xVBO߶|vrpQz>0MVU#p ϧ6<;&2 L^[4AG_ \ec[8^" }ɑ@K)Y^/e"4d@q`ϋ")=3X]SU`L;Px/6dDEY KEbvzk5b:.Ci[}$:B) 3յ@c:f?3Зdwyq.[< .9g 6/%:=oidAÎapn&\϶^~`>+PC<>1h*3Q*$Pp%H}4r8gnt r:z|H]S`,iw/ҡ7;-)Im$nL\̯9[e?6FA$NN_jZ6b2~k[j5}~zPMKVAݍmes+z9BQ nBa9=ĵ2m鏫9r%&z[Xe&1 "BܹпӄRk4B} y8e'/^"rS*-u;Mb=y+EXϠ93;6:$z@p<2u~7h$rjإyC>G2vS=:Ȁ8s[jA3[Ȋ #xXo%~%_ 52[T,F:Ԝ=czgylԹv &~xf'.ڶU-iUkB|z^ֻ"\b[+t#IJ0zd#u |Hʶ:LGbVZ#7͖ yni)纍1"Ouӂ2W9{Cc* !G3vԟ:*3I:9HcI 8i\^8e.I#߾©?rZc+1?ߝRau=:oT-}.Ӏ8PN8F7/uuH|U⻒?56h wvu[;'8Mc "נS=#C(PR;ljWN@J?K*fд1H3B[@n=  ě:oӾH/+HkAϸNF-܍ %p+{4pL< X;}~;z]2NZZf˒:}5U_+0Ite, :&ږqjBsn~}jÆV@.) Fx>55"?HHB5քi"| oz;$%{F_*4ę5Sͭ*H7'c5F>2nqn&aGw4!u=m*7[ȍ\I"iG$<2RysAT?m^'V8ax1t|f5#-&0jJk\KK9%%YYzFKAdKkD!|I ucH6pBCLfx{rn܊S Ut!0桔*U(k*P{>z̅i?E9{E&BYzsI1+eB\=KWJ!씝rͦZ{#dmSn:?J]ˆ \xj[pu-Ozz`ajy9\?s{6I@B%نklLk!BgN'Z2eTs&_K!y*^f~hK775~5<'"~\Qbſ&]4 9u)A1K 5`vʋ(k5<ȋw2b9c`8OIӞ#-dM ɾC~^ Is00y$`2ߚ] v[+j`Ciܒh>Mzl)B!QpN* O22-_($(Xt8{7ԪIkѽZ*j 1dlu$'񟒎>^C/:҇]JHkbh{wGw$#*QFT ^=LqU#tC^|Cn AB xCq2r]8SP^!*liS̒QSИeǼIݝKvCbMK^װrdEt@~jojb–8k$|OIiTTlMoD^ :CzHy!ۤGqEZ?PьX?^鯌h-ݤhz>ޱ4}!Lȥwyϻei~RoN_.AW>an<~O,YLI>rAC3C,5JF|?=J+{鏲)N.gq 9ddjn Nr[kh ;27ltrE"V}jP|s <H=`L*hbI|)G~@J Ho&Ɂ~gexFA!zMNH]|@(hk&XJöT.g"6m`S~:ye&d+c*6z\z+:X[ ,}5[K8i}r$M0Mj融G#uY3{͖TѴ}<T|*]guWEhv {VG<Ҳ:ͪ-bU#jm96/QLh=oL#UfucҎQtj8_k‚ζ A E;H5 M)d(f056e| <`dG'O}=Z͑QfM!J&CFʫcd|EW'x/:6;Uw(| M_, ʜ+[uH}VkűV +aS=ˁFC xBӫV̗L,V%v?_uӅPֽ{8oy7@99_! tfV׷<и%$7yN ȸ?>Co}eu[g8lc~M7fJsW&?JGfz{ón&`XJzwxՂf03TDquf8~ n`,d{LUa'Pfw1'ϲOO}]"t;sg߳#(Za ]0>[%t}OO:yN0 t;U QRۢP@ Z,Í6˾fLtNIhȑ3*X>yCX_|æH. wqJ^Wl)~ԍh3EN6s[[(Q"3YNB ƨUʻdU4`f:s~4DPQZO_ 疗 MI}<[Z\5fEGC-[7)a/v7$/vi%iop]D+\*LC]o jp+8 nQP ETccE7kKӱ[HzHLԙ7|q& T9p ͵)9%P5r?Յ6&y3nO0`jaoB\rL\|C 9ou:SDY1T U\&CgvO-"-R(B>c'vEfbHD63t/~[/~)+JyCg Qm4i*$9iB$O+]#a^rρ@T_ ڨ?| \bCGu)æ̍ku-[3D.3fN$SR , k E7m@ yu}Pr^vΛΨ`08ڴ<MJ'vY)dԼ1Ԙ3X9 ]צHaU~ 7EުZ!E[+SJ챂ĔU&h)?|nPg» $\J%EiLKRf[qL3HAIuW#}iOQTr񅐾,| =n hwzhY++aX)2$b.[[J͂񞅂jc~A]pԌhQ6K~{s7QÆ LTWGGhq kj*__03 ܋eک& ʆ4D\fPpK+&GbГK۳Oխ6ȽeEYҔ1AFEm @ˎ,`7P'v:uF=sIB6~Ps'\QH"Yj`S\,:ϫ3ϳ6?R)=fiq5fwօPz"̾hev9֏ x)ٿ?'(v9ߚ̢ ћw;jn63?UHPxp}hWgptG31.O PDjש0*#D;"׫Tsb1`eЃܻ~:7rx ,ΠKAɡJ>4XvQ>.^Hҵ6T װS *oA|O#r˗zUrګ}Q2qMk!yV-;S>E?AqinCpuFQEn7č=چzN o1sE$?x6M?'{ [Sw]I yAiKCؙ&r=v>'aLivyc!! ƒ;0C~i)>hnsy,Wό^ƌh>v/\kKͿ;2ӆb .Х2`#F푂Z),4lads8,i)*RV16@՝l7xj~}f7>Ubr]c* t /+ghH&^gf#pL18}c54)rF/|Ga_ ni]Hw1?.+*IeٿQ;Fi aׄutCЍ h ٰUwmOK;:fN?g6H3uD@?U\(dZ&g(B&k Rp7+I+=&n()fI #~X z$0{(ZMW>$&EcX,pStyf:P5: F*jh6cYkwg9@&qm?tL /yث&YV%JS}`p %c֘è:s8?^R|-6%7e,(B 69 18,ER3p6Q-d)y-0 GLMh ?Șl4:cg7 %I,.3u*#Ľ(sD- 5;!L%Mw(ee>KcfNNWT؜8!!?@Qk7naRwqw\'06eU)?Ll.u jS=b%F5x!W/1oSq^:),| ~lf ~o>s'2S"YI+lbUDkUvGPȿCNc&CQI_ej7͡b{=#?pMWl!IQڌ <5׍K7irLSh S3P!GE7$ :jQzݬOlw fG@^=sc'o_.>֍ڶVil8[)%!% 9});_ge |^gczb~$Oϊ<&Xد*8rg7ea^  ΍p1o*55 Ѳ‚jf%W$%^̏ΚC(u+qݜj Q 5W_ ){瑪E>AW[@DiN'r$,ul̩TvnHuH}oCda j!g=V)t:J*tV;ytg^݄g9t+a<pNer 4xDݣƠ>/5 @ n"I{ |8]]l[7cD({W}/\ij;ӾyI~-sO98, 4ngX̱5Ԗ3oڟKoANs]j)W [s"񖗴&`՞֞'KhՈ!b(˖7>G}cBF~–XIȲ)ڋao5dX4"F> SMb8p2+0BJ%~U0R_P^tQ|眫Gcz$[T8c>={Ҧc)ԙE J]Ղ I,ax7"0dZ+?<XJ0_r8.P2V҉bJ>23MpP+S+AK6bGHT)o[f کaI,xM{Ht 4+ȕщVjӒEM4 G44JTYm毽ACҸT;v]'.c}â@gE C!E%=1x]&J,aX(7ij\dNR"6w:!/u%WEpϗ @I;=%u #r]&m˂>b{#R paqqKXm4MAPQ8U֥T[ rg9ek,itXDC2kۚ?)r|cw @n7}B-N4%U&JB sJF?F!;9Z2{;XdҕgjE4$m,fEkq ! Ǵ[w];w)148̒C{rK^$([G(a;]? ߀!m3= ^8{)w@`HG Lmq/},.ftN\wGZ@ĠCJ 5Z?/2EAm3 4࿈ 4] Y=R%Y+`3*sSwbڎm8͞#cr ڰjzL2_)=ڎFPkz԰_K(9D{le\.3K/vUYs,r7IֹIz#IΙeiYb!fZNyQc=h zi [A2=^$8IQ~?lh|N3eBԃ'U% 3ExCM:7v-!aj7n^/;tڦfg ?s󊩒 _y9FJQ3u -:D] fL7d$$T8n88D3a`WK6ZG,4@Fxb• ˛㼤&3q"iI-6D)d8zxyxr:mozV+_4cߐkN.^K4q`쯇UbOŽo`Ë6PL{t_D7+U(2.9`v:#]\9L}s4hkމP2^5`hӵ> oDpNa y l|'J? ۡE4mh`V?_|Y'p魓Yoi[.IWGC57}cΘɘIy_QhUB t  p#J?gR')ct&qYřq$Xb90i=mhAê@\\4$R#b!/?\eSێBب[s2Q|\ҭ~dÖ,jЕ*e+`y, •hŠ8J\ڵڮzF^?6} (nǧ .UZ.DXx ]ݯ1ĕ`" 9]vxžVÆh;T N)WR|` q*a6"g:2?ԅ`f1RI۱j 7M8Y8LQ#){6>ߤ÷w;W2IfW}9_2G˳[rj!djmMg +$P7Bw J&e},(?81 B}i7}RYoW&hJܰ{<&߸9Kϼt"N>Gg 2MEᄆT 7 K,i -9J灤nGIsFi9۲|Wr1'._,mqr4rh]{F;j Rqm@ߛdOOY]"U+)٘6mE.+XEu/"\AGu4p"0IH$)FL0{omF޴*L-$Cd/GRNe! G 1M\CZXbʧ^qUHEX ?(c[|@lQe4Aq⳩-vfѱLo/׫ɲPSCD>/vEm-`Ybc҂t=#KkjK뿖< ^ 1vs&e+$r-`Yt{;7w'^Ft1 l?U"&#>_lXOS3dhKT{HUs TP:׎JpFdK[ vBڄ$#HKexPV[u U☨7yAV(\u~UנbFcTL1NO?*5c#kFïd]~K>Вea(_^z;4y-5mLeI_FMgge^F;&q|$ǿMwJ~(A(on$<оdδӿ7`%t2 ! ϠoARKVZ~aw N-Ӥ%-merLq92y'RRQ "]Ւ:&]}P2HY>h%ꋻA=njwvXn*Ёyx|Gɤ. ߁tEx=*{=p0 [ 6+H$~}YF?VJ rEMb$p q3 fY 14{M~),P=lmRM|~b͇wmĸڋ) rs-4xɲ/ fzuX%fzR~)B]Eq?E ^ROՒRf6xkDw&w9:*ݬȇ^@8}P1Y‚%b=Mks%. N~8u7c]^I$vW'3IA38Iswp6$TN7GH&ua j2#/gO-wZ^Uʰu˸En/sع'S骚ŏ>ң)!vTæšVFj vu*J=ӢWQqTN7lҘX>]tup]_$pE[vƸ[ԕ{@֐8V|r)3Pn} >},+du,\'jG 2s8Y8 S,όL[5.S;M2[T 22A2蠧~Ŧ( Qst_\?g c)od/{jbOVaKc>`*էI#0'\wR o OvP) CS>A҄"Ծ3U`^&QZtު#({Cn" XD>ŦH !I@VhAFeeJ40+T3zbf`^5~ =Yv*)d&^ws_:y %v/.j(Śt>Kak mPkD`'[wJ G` 5d9p mYyVGMiKPQ ܱp͓]P {2棻N rX4xUձ"w46,W9vl _fL P&TI0&I+ӴfJ~K6OwBZ>k{|G4lkYōs7 vGHc:7':NN g B(t1^S^Gc}Wk -Ӿ9 c>&~{qfި|4I)Ua@#WXf$oVRvdcbJ?Wi"{FM<+8vn>E~U Pz}!l߀@py_30B2mþȻ9:ߩ +nz.0Bg$))Jit׫]6B0U%] 'J6Yaec^X*"SUth.wR{\1bP^y.0c6*91jI1R'nŀگhi]صZUXS =Z@W117r23;Nxw\WE w{¼ewD8!iur0H XsXx,6-=wg8C}#㾓4Һs^!S,&Zf :Ɵ ѣ*Hy+LN(qHM./4Wqk샵NWΟ0|=!Tg,NK`{~ͬ^P0w_KqN%Wpٕ' DWFM5gRKs?7 X-pf$`Lfi&:^wZ'LhY$w\gwX!?Xl~Q&5O*|7"~6;P;],j-t0#1g ߠvσT|k55E6{h5P2$էqh>: n!7]YsP^$&Ͼ<>1m(CuErdV/p"S!4Kj:Nf~]EJڒjcD\9*qe"b+[(^(HL->91ȳq rU3?*fKej2_h 'WG7϶c d,JXp;q8A(4kC;FN=JZW9wwe-tq mf0SU~_QB }Xg#3B6qۘyrA>o>_T5 b˝tPb<ջʬ6MfKH'$IhDa ? S]S,:@`"}*"(:f/(E{,b!@c Fr^s]6Bd6ԇ/?kҮaU(]tp]C5XKPl ^32"d2og,]X|-?Q\`;'[>˛pfBS+l*K\]Jxv"74S`|G0XW}IYTG1 $5mE5lT#cX|WBM}$Mo dq_Dudi\̹`B%=}L?W+E5L @sn z@,uI^2T+!e!I% 91)UKX(iA"kJ=Uuu(@) [AT1aM@ #}ǐAJ/N  9t8ۙ MՍ8ށٳdb_K4H묰U?m9mϻ=e40`?OY>uC=Îa'Nɨ4{K3&7=|"Ϟhsv'2_P荕] o Om=%'n(_UZ8{#0KX׽mHq}RBLx>bx/f6ԽIxf.@@};S>w6 z0l+ Л5kS. AS_-۶nRt%_Tfo47G$!B D*ކNͻ&ڔ&tOnF59c4 -@1OJl_ymB)s^1ts4^^W7ߓLԷRBYȃ1jyfrQH/j> z *Yi#bguxK;P  h]3M)R6^¯V+2KZqVYsys,6ƨحnI؍ȗ@&-4fi6 P1ٹ^־10Ub])4p& M#=𐸢zzT@YkckgbP.}`+F&<1:KoXG2.P4d+t2?7݆8՗""!z,s>:@WA:ڵZ#o=hֿcV^7mچ0'l”UA/5P|Zhy\Ҭz7F1՗A>k^_4LPX6 [HTpjy>q 6؈adciTB;qT1ukfwOhxml%QO+ `|c*Sa-➙{Cc`?Y"qu[4**زߚ;qiUyR0'Qm "+M*JmgC#i b,]<i HB]P;1ʘK\Rܐ.,ybN5S/ ^LS.]OO9,bKėU3'75gqۑM*PJlh 8>_ wԎv[Q%"ka*06[<&[)UmE£5#+4Ί=6%d$to H ޤ;o,4UfX &lw)BMm>&< 'VʞÆOݧc[znMkyk^^KJ#ym;jv#tzC3H"X1누4k>USj`to={ ^`u/e-9YvaIo&m4}c`p_aLGU? :IO4/,h.V;ќ!R_#cTᗓ|t}D;o*X"}锦9]@WفL'Uu k=OD6ޛtKcɚhe,&'YsSa-ޅYLԋX5c҆3 {cx%G1;ɐoĒjބSrS;T8ެpc 4!0L !O:4"V77 ++H[,#;,99Bsܼ=Әk^%*F]$ j,e#R]}*܌{8x;+  @p<9J0{ܾ , ݻ[-ԚN\VBSC|h/ MYFY\`cNݽW&9PZ͐쮕LqԾJmʦ@Ŏmp{*{3EN"" fNF&7+ޭ}̏u*>PXNQQ*0;Ϲoފ%4 T% |Jb<LQJyi0qwewo/X|(i%px8J#͖']q.nmsoJvʺEd/(rG<&Wҕ~rɽߚʢ*&eڢe 1[ ~Ȟ1 U=+FFPRN5hkN7M6 NZ 5zM~hG/X[$ƌchh*O0jJ!О~(7TR> <0J<^)SDyfY\*͓SL|qډi3‚vp%% Z/ҏZYjTDoġj;]Z6`Ke3)5[܏G;{fkQ# 0Z<а6*v$h\8 ~Q; \mO9c?Jz[UǾ8w@A@Ǔj$Ԥ(%{Q܇$VʖGcaEN4-W=5kϝbl0YŒڣ ¹xz y&5aϽEcB6'^4e7_|e,T<=U洃oŤjhfMF.LM(a{ՔɉGw[>uLø nuUbG 0JtԏKh86̋mX_kMv; L̄aNeZj6[%:if埡T/bM+hʼ9Yi*tӧ㩠tIT=$~$D )Ko(="%BSpb.>w,;4dvCI=rA33]68F(Cxgnjw?,. `xt\  n ^ P$x𐨗.EN~lqөܞ-xPWFٯ@I/R/lEϰƷ8Aܝ>aiQsVoC@" bA^(N ,Z_4ՍH[j:*FTl9|9+NſfX49 4,&̭ќjm';?$9\z=f\x fJJ 3GxɄݚnXYe '%@&85|ܯVtE6nH wAH¸&_D3smjW?4=DW.])|0e\y#)c65f=nK)5&}qRmo;763[YDݭo6g KLVJ)v mT^ Z7;ISH#tډ?6 QJulFh$HŌ"T)0;v\'WEzT.Wzf2A/79_J+fHZC/_^S3> h`FEW)Y$Ϧ1zbn@b}~ԁN+9u5ڪ$Ig iK/< h@dJ^g&T-`kKtXNZ;8ͺޫ.o.;!Paȓq4T 4gL&ű9fH>ub{⁝{FS qM^MJsfs&7;\ X>-/ľ$5:_zĚpEfE?rsn4ZCV#^7A3/ %WhPn.kg # E-ĤPﳙu]a-Z׶qHv֔{[L]oO+Irϩ \7(]%-LE9r{I},l_ YBF~4H_t q?%nK2JEl-vB8zubFz#CO`n 1RFPgփ.#L?')(rUn[,ru^\@PIL3oE&4u,o ,s ;%08&5=r ~ S1]T1 IT /_:Njh 5y!gJSIV,`Wjya<`Ծ8~" "oQCͺԺYZr;lT˳|Z7umB ػ5$E+ ?~B*^<Zx͓"G.VBq*`5΍?SNدg8ԨPhDXT.R%k!a!GVEpPu4TbIX)O;%a3l镩?g6'S7c3yۦp+C&lu yt, =jUĘ0(p驾~aeٻ&RyAj7F9hgj,!)n!0<և cxIiˆXYn޾sZ`?Q (9]]`Qs Ԉ>Ժn_}"[F쏺etgQ71g;䎽wm&g.,R%ENՖbOWƤd]6ƳǶҲ!6y/(#vA|ys Qi~KKԊa#_f(O7&>@$V۴93s]zH&Vi i<6شtKӹER}H=4 2:Iʜ!;|>*Gՠ4m5:"6aLmkc|![^ [ !cxXa0J˘Ls|MG Ǔ8uYJCe>UT^6IAy~ )o8f[*N"Z:' `oؗB8+j2MMհ,,Velcy8fequi4~#ܭJ"nM3vSBQeφuAH>P rUGQh`vTc+ra4x ;Wةk3~@>qKGmnʫ`^*WBB:P !Q5Qo"yA0]+&ҡǽO5kK$/臗xjv_+:;8I|V7ʌ8۪[%.XJER25jkT7k`p^+he4#~w^\:F01l { 5xL]n1 [~>EE{xJ'@>XZti~y$q 9%Ī qvȤ'2Oi$m W$ޚg$tl>w8+owjE5DhП&q1mu@;"u7S{g6E-UVR6NfhN?ZIky4)zV4 dO[h f`\oFE%fNgFg[,S#(-"֠j]8S4IJjMyxEI]-f|ԑ3/UqR M𵦝Rl u|K_GuUFKkqפ\n^9?spw;edg]:nvF=C)|0Ȳl3-8V pk- 2̩uĉ03-oA Dk- 2{!ʹs8&Ex!pgxO"?zL?Vˢs)J\X xpp '7 ɏ3Y2 `l-~(0!䮡]Êk$AZwwM5;@&ddKf6'vpVd SdfCmMk \][HX#' W5=p wrdEa~&a! PCR-uen+ =_A~F`n5u>3%KgT_E"o1vDpl$x[@ߛde-1|ʖHg;Ckpu;Sk" BrSi#_ey xQ̩mLE!gA ҇@B]2^J?@;3eKjBTsiWZ1FMɹ! nYN- "O㨌xfvݨtmۅ atgJ%k--%)2Dʷ>W9])!o5-OT^S)zGOgZsKj:@/t>F>Eq0F5 _y1aW&w?8kf\H#k'v~j}WO0k m.F_B6+a:vD(ѝbxfT}N BZ31tauVR.BP4@@Ѳ~Zn!.3,O幯z$6ŅO 9 ʅuFʖ,}G:_g k)4by":7ai>S%ݐΌfG$6&$ 3 D]H/:H!U[|%;oPrP>EWK\+3z+xvCeXSZo%! [~8}$ͻk˩X wxdG3ȍ"F{c : PY{.梸Bfۼ|z&Ѳ$%4BrCվP;/>`$qn\zAIo! p 1YRҨ &D+uX~';Vaz$\ϼe(e[+eY@h1ݱh-LBd$Fۼo.ёhx@N8XҗK0S_)J1DHW;ah`90-%&" XŨޮv6O2Tp>*kWԵ 64 $+DIE 4A e0J0qO̒s M&U9DS/pA{ƓT#UۍJ W0(奿0}!OC-"X;*3e;)#3GhQAe#Jɨ0uh7G8$qק)Zk]ԛ;uƢH3jqV1gQ>F)sMYVzet.j#%M/\{ugm* ɲu2 gH׻yYkzÓԓZȐϙYJnsw6B R X,_U{ /}ٔc>$e ۩`س^㢌Qʕ=6v=Æ,笿YQKo$ ]4`rKz:d*8ncvZW񅕍U4'cž-ġ U2N`ϑKhklUz|t_^]y$*RuEǾ^!#4T9E0)@MqeI[{w 65EKKj] (o]ܘ(/U~5gEܧ yN=,v3.Y##B׆[9K}w>Ks߷]+ng"~}7*%x9FdO+J~WXSoL`/LA?AQ(Ӏ@b.e qk j lgoMFxZ-QC GKE$t>Bl}{/&~*ZetkVޢiɒGq#!-mDM1h̸( |dfi=0g_NLpRM$?m}8>3A*pVKY8sO.n猗ЉVh6?oNu;u+C`CopQi)| j_5!kq{Cc[Z8skoB"FJ)$<\q ;芊D&&X,|/O|S*yM -_5P\12v1bv 9z !z> n.ɀ皌X @k#/r%<3Q(TSQbcV=W(׶Vu&J-p^ D%2BWex-oZc,;Vu0Y … 56 !fw7=b%A)6M@7_ix.&ʟ'|.z\m0'!PT/%cMX?kF@YѿpV[uir8&8*_:ЦGcOzO過V˖voh11i;6|>,s΀StџPp jvAЁ?R]UnMobWX HPMy#Qb &&|3̤.  B󦜻YkK$WSjQE`ucLsLM ֗3RB9KĆw^>a$=txXC`R_Oc4!и0Pgv2-vk0"nU 5\i-DGfQ xj's܅axn=wŮuTW\h`㾕gS[{a<{_mQzCa_+"J궏@8" m.yg탵#e $- A޵ \Y͜_7K.s[aWZAL燧x~[*2LT1\//m827]Yߚ?zM 3΋/9ޮs RxW:T~[Is b40L \[ffz{]Ƥzz냦" SS'_k]"1UvbҬ~ʡf+=[>⼘/aQ,Nb$( 1 WX?6(̜iLܯgҵMrk#mtKOɚ]C7v7՜ñ "nm|G:Ж!Hv$<[*,~USVٴATe0RBdw,O]& rZ,^L % z58،Q{Vp9hMC?T#k%ӸIZp{}~ ѻ܄Rl`.5IϢ$ 4sZӆLO9hy˷ay뒦Y=zΓ ]R}pZTT)Fv$VjZ[H!m1 cS 1#^9yl.xR) Lqe.1hɻ#e*U_Z|#An8GF߃=*N[t1~׿^}Ts'n>2)S'*XJd뼫S@2v{9Bkۿ0 jHon:A~N]f,z1`y/oM:)OqAxN3X#e`mS6TZๅNi*ϛik3)䣗MBl.^ۮ'kW䐞1@p:nG_`rlhiIlGTUa%yڡ(?{kkG 6JI5PXH>jCOb||(8v8|p˳aRCȇ j5G]8YBqʧ˳"kB?W¦Aa@LQx0G<6]ߡov3Le3]iBB?Ha-dD/ɌR|qh- 'fNԶ4߆Ys6%VerBז=wf X]b\D 7`G˙oRic'Fn+$"&^&诡d hũNvЫ]+@fkf+\Ӳ3n`F=xvL?><J|#g[  A$bZfN5@/@%a[Ġos[<"q|X9dK =| E 2Cս.Dԝj}7R+~[/1lnB4Aؚe iC {0#<W %mUKMtU \ZNxa+\nPN#.s U3]?yY-~Ly6r>>u-(WX/f \?9\@a>Izq.$u/*¸hapք5+峇;z稙mjs5aZ.' L6 Ú/Q3\]cKpgsD  `Y,tURu@nkC9C1bYE?o7 f,d<3 ,b+Wt`O#FhV,g<,>+`"O 27:K[)$K ܔ@[ 1)w uҪ+%u #b c0cFA- tIե10e&RRE{a8h Ā13B!rBB-Rdڈ$j$@P6A  ˃tv,{ZtKL{XG7/N)|"ApLP,|8npϮ1ɩ5# oPˀBn]N,Ѷ~0R$(bs}bh$mȒ}A2Yl=J}zRZSvDH#1'2>NM2cv5MǢ9 py@fРGvG3ؽ2bcd(9۱Z-ĩ$Pܬ9᜛RnE%|]ƻGlfz~nXdɳ}hn> x%ґ ޏ K;pm ܊𰟉flKoGT!V+m1l\lV)k.o8~k<TEϳzT4V3,~؄6sW|2^elA7-= ;B/Zs'Bm OV?*2Fkf:#_j^M9N;h! Eou4kg$Ɗ:Aߪe,UL_|P * ϭZ|y^.r dlk1SJ7svpkK]*FRQf" 0%\4 )>ᭂz.;V?dy)-ߋȱʧB~ff`XdkF Vzo&-DEI[/[HYμ7qJ=&ͅμK{("zJfCA_MqJ5*42pW w\5棡U$)-o)i837$A_e.ڗ4Eʍϯ,s O)l IR&#En΂i퇟 =_ jc@B\/V/ÚWcH0"hK(/9)unּ|c &tbe- CIhWA$-H-^J¹:݁,Y Ţh@*S=hMRf] +||GlVd:rh~ 2|B aXTveH>O]lձRcm'c:Y `*YlPs쑊s_Pea!q yQ)NnxO@(NLeqzDb6b\ .;pۗ%-&K'^ wǺIp ڏԅsZyѦ%P\_5qv)H^++0 pfr{>2$YV%Z9aq^`!z?eYUO89iČs"1hico f {%^n5Sh&S9o`韋YZ/|ABMzf>AG"KͤWO۾s/Z_x!#n+q@.=˖QmX6"f)I`MEVe}Iq,N2#dXNqd|Chj`dnrn&0Gi%1n Sj!M#_XO&Nx <9?11 `i^dG! 0_P%vג#َvErU1TrN yǽ+ק.pY71.Hd"׼^oߔQ]e~ŀ l7,w&*~ymCafg1e ;kƒVFj` ؁@V繭NMH.MyŸmF.T3䧸D|<+tg*v\2MOtOY%-1YLF+ǡT`0h*L(b8$RG|!Ր{ѩ(5]ޛ ;cK5ki> ($x3Ք99v|A> @_Ov58e%;=-.nŰY}"BӶW+ \(MJ"N&6e{^l҄s (]Ҝ<*`:ɚའivIJ)wPdl,NJ1@bQRH?J[߉+~*.!1a,tӂ_6):O;lPE]B-3pH K0ֵ C%]R`}B$4óhf!X9 N2m5“S]i|euo`޵o4i. ݶlJؔa uK;7:!{TrRG,:) *"D.FRZDbZU}{#ݏLa_i #&t6 R40pC8-_FGL}0xR/1gjI}Ex(7X=9`);|ʴE՚|1s\4K/an8q]fw5`ie-cv)!Ț)Avar=TEAq-ǚ^j( EW H4=E]\%gE7\[cI~D &0h_5*V#NՆXȘ('h?>kQm5ST5_&PJB,F w>̺cJ SlI i;|KTCLY'މ. R!.'.3ӏ5־$- j@,@/DԻ{~,.#K2a989[AԿ]Z`ۣ!vÌ~c5>_֗Umä XRWAJ nPuM~S/ ⷾO% g 6Wsd?9q 3AF6l=wڴ/̣8&2>, 5D y0w[LpoMSjȠ}j~%pwn5dt~̃3q=IM` *A玧Q+YGTp-ÎATw8DķW5^S61/>UcK1!Զ 5f)s ]]YG@mXxfpS/FTaMmI|/AM]WD튻hpL'it3I8p 鹵-< Mj6<5/=aձYlwq)F4fXh%5yUN0X_}PO N8)^\䏭dDk/EQ8=Oil"4voXqC2g%¿MwYdzcvTZrՠNic}ɡ9džyjH]_5XNH;67:32L "G{霤?|y]><}^" P@Q+}*[sW9V|daqDm4gV}NVԭ>!^8טu N,m^5Ĝ a.?"՘18 g)n[]s DHV szx츽ƈ۱%m&)uF,Z6KTO<#!NovDiX/\-U125&Q/@iR:kz\DKqgPУE{'IalbFk5?0 i&s<XL[9ΛCͼǹ@x3Oi5#)DUʽ)12 f]}5Fɤvb">)|k0oks!\.sHn%(›՛ EظrK{)+c%Nb ^(rƹ/rѣQsݖ ?gvP#',(mNȺr(]dd#K**qoݬjFB7kC.xmIIV ї _6ukq>l}9_|Or|y*?Ut^ f\]IGbY*2D|}ݘd ׭Ge/:lCaY-1gD=B_sp7d1dQgI ~ o+}DUwlՆEzv{Zԡ{Bk9ަ,Ih;M}(לHBffh.N'K6S?SQI;iFr/ }_0+iPk1 DtFuçOH䇾% '0m&Q3WbÔAg-;.k$(?`DgL!_j b;"YT1@be84|;{$c?;j Ĺ//G"§᫑z^򇸾%g][Zc+dV{}W뗰Ws5&֐ g1ݸkdz,S-QU"cV!?zW|g,o4؜ `RSac&>biDtrdDitT#d\zf>{cR~pfr0 жPXy(oI?8d'J\q*Rُʜ/ /Uo]z1iB&mw=qnyHÅ6ld+7rl*Uy7y8 فQ6=tK„s}qX; Wvn p<ݦ0ak#U?טp[}sx|o[ IxV3?Hc :p 0XԈIhg|tjlmӨqB.eY<4GiHZ?2=36"0;Ka?}y1b ;Y:Wm|^!D vp9U2|^QȒ-xehgg.'ZGU5`sԷZ%܂;3#N6MihΌQ)  z.9:ڧ< ׊(thY]"z*_4Yִ;'_P+3%T P~isGh5I8L9RjDpe4EsDS "835|QU>W&5`l?7OXЮeUkzW36'=xg9=8=GL&3w̞xdcXIzv1A+EK\ڋ҈P|(}۠U(i/Y PDQZXY7@$Hhê>c҇\U|YQ9t~Ed Aڇ‘r jC\i : O _ dȡeg_M7\BWCm$o!dT%/eHS Zl}I1ٺWB5f[)jDԄu`..TPQHPzմth5P< ]DO5,YíBJA7/ /<UOY0FiIEsFQ[2 M$xOn2t9O$eÃ! Ӷ lz8K!qI*F9ةK *pImm)?|4i՝V63(@;017EwqyyA<`D^ &g9>5Trhjky X CVVv]S{~[g dʼ8ȓ n[xEJSsVPZXnjT8Oe rB{j?ul2 KjiD0M/ꌦHբ},DLsT%JDW[ fiW)H>Q/|O/bK|XDX q[зqǸDSA]2"KP󼕸 - u tÎ[$ؤ%gX2{?3ks12Pژ1Ѣ3up&YwkXc/:xIdg:ol,bB;Yc!"}`ya4Kum[Mh70Z.\]}y_}D*n%:@R &S:XvJj"* d̲WTtAr-nc +>OO}*&uV`ϧYjPKL3A¨j5a[ڲԼ+Y]k'e4JlI8P 9V>Z;&6Z7U~Z.ͤCu:Ծ'Î$*n(Jx^ †*cCF^Lc] (꜓ʶBp!,~`Faj߽HISrQ@DSEȭ:븴U;FMY~·-(^> o x_/<@؉lW,Cɖ># J|%.-P* !\و倰uaߊ<@;-`-x}x=6y yB}cOi/@S$ۖ7i^'46)tӫ>AרWP'l܎ݝ)HQG]R-'V[o}84\_￙P]\}xOM/ "zȪZ6J`"vǚC%{q# T/R:1:r0q Zy뜆% -Z`&&̚%FBګcRFZEMZ|ьkuƲ?{x-"cbݫb& c<0e A4}I6u  y959ȝU2,EkכMȗ6^}>UyBJC1w n"QRD'7mRYz~dJSe%qg)<ΆUn=@iQP83Z|.O25\Ƃ^Eh3vk4{HB84D;ǸdyvU3@ߠ! 0wINք>zmؚ"ojvVw`_ 31ybQ\R! QoX1QV(EKa1 sJLp``‘چܵ*h ϙLki׻SYN~̸RӨX JM5 iJ|^>vN]@\l*W,~ɖA?]LI]#Wwz$;0aBge$c4XK`u5K[>rx涸9c8+˧Iq_JCIDgm~|/U5|;v%u-uvo?a $(TĒ#oƵ6=3fUUUoEeHcpՙhN2lOhea?j[I׈atpGzbD(F0a$ϟ`=;2$OMc&/َv-ވ7,H>bw,m&V҂#W& ,ȏcZ`ŃM zJX:ºYk,Q!eB?~=}LҸj̐ O3!Q~Yp뎪N$Ujѐ=mguSn>4@#&nrq55\.7Q bpd$!,<Gm@g jbnn~:Mk"SfͥSrr'C߅6ޱrPμL+B\&YU%2JCBǮo\{$?H"H:XQLǹE6dC *qsfu 6F2c^2~q)2>z6ݭ.k,{~F>;d([w\R'F54(6jrJ1\칲v7w}f 1W,N)'e͔^V:,tAQ"0έWRWf玜ϪԩOVC6.~O"C;S#q O6,yx-bM.΂$mKT :Gјo@+ W@ [- y0L8CR EЩy(&=1& $>DYϺFDq؜ gZF`\Dv-ƕlBәz踧~:͞OpZul*\Ub@Y_ IuxR:+pD=X.Rmn/{>\X.6vV]p=͟XƝ :}칛b\iL)tʚ<75:Sӊ/I *#=խ0CCjObw“-\ooEܿa(\yiGFpJ㰀W*8y#h獽6@%uPm%+&Z/1nv"Y!tr#]Lۥ^Ec8'xBMwr`u^˫Q*~Zp1JqCDzQ~/R/}תlGdnly D{_ <ОptvzLc}'7 l館Ӽsn5Cfw"iZ}~΋- plSvy#軿x6J,xz r7I (\J7#w~բ zG6D c|sS.r鷚Y/Wy*QQnX'/~Q:m+j7*h\TBOrM>/=57AGe|vCķVGhdd8e, *䣚sCmlq=wƀmZY 5N•ܷ _1YUXB[.BaȮ0rqLr9=>0|mT+e&xfR\OLg00uT K[oiܴE2?c&BAtmb*-D|Gػ'z!q`?ѱ!#IR4XH| xRVy*j- nA8mwl\ qϢJ_r`r5̝z<(2YMo}^Q-7A Zq,Fsҡ,8eR,QOB#k쓙0t'>{4AڔdP eVNX9m^Qgꁫ/P2!:5kJaox؄Ө-\3h;Y9z F\eDaIsB}1AQbuXQzc,[R)o5@10$Ukt.%(׭瑙:Gʊ"g2 ̡ޗaXux>49&^Di4-nAƎHk:p]|ZcmEvwˀPDPzQ S?K6*!g֓\x[K\7g 1@:;{  l3_ 2JwkbB`GSh+\^11U'S1Fbϼ0dȸƘGӉm]ĩJ::,p&tߜjxpdC4q蕓hi)먋,sqw|Hk SPڒq7Tz{؈-Aˮ5e[X(k#7в[L rS\LV[~N:e`+8n|y=|u }%m\,j?U7 _eZffAw @Кcf'r4zJaS88\/#_J:|-O-\# asTa޲%Yx`_R_G9X:ehޤY*f9u?L CN1bF:;V`>&};>` OUVE6%ТGN;Ed@^lKSzmocXzd_NPO9 GXfyٴ1A[I 1X NؗwPhٍrTwI' \ hmF8`~h V 4"\\|*!6pW?#$x|٥Nz ^дZ,j`ԩC4EKqBJj|OU'~B\DK*;=7ˮVoZ<*b oeݐx,54,Mm({zY>4rs>C"i5Yܟ!A)+.]6N`3Fc/5EɋcVu.x^q Ⱦwu$`d,E<!J5&ޜ2t6tC°|s O%iKSXaGfp}=g(auCP䑘{_YOM3?<&A{xD|Qaļzn oK΅r>6&fas=ЬyM{)V+_P%iu#Vv^ SSOy5A͉[ijȩ$O~*/CvY^왌~S϶S7G7X9]o7 D$!&#db~31>#@+~Bu >]TN}m'1Y 1*~ /'Y jX+Ԃ+@ ^Ӓw" ^-KE͕|%-xu[m ^́%lRX|z_&hA & L\N;bkH]=e8QU֊o8QkfB9$^QbQ?3<#.!Zv{pSyޡ$t0<@dڠpׁ($ԏ $&ٷTA*y&ҐKֶ;܋// Y3gUt\e\f\yq~w[P[ʝlƚ~=J[GnZ:yKSo!n^:`;[km4eiA#Y)gSV)/;֞n~1F|5At ҍiJRJ,C;c*ф314R U m $Ab&Y10axul7kvEQ܂.#z0̓s]>ǻjRY[Ӆ4p$`urF+H['/V*r:Q90J{C4dت>>՘ )zrQ^\ӶȁfAwjK& Rܕ9@EmR* ^JBZ|xa"ҽy&`Ja3 L%7TV%M^jO֌fdޟi" 3 mCܘʿbvHTI [Yex㱢|'PG=#$20]TӹSg=3T 0<">y.p5XX)ONa"7׭ `P %~< Ѧ=;m(bڶ`8 &]E)ra$n=廥l =!`?HzآW|iUn[ mH;3^S8m( k9wf0 sǁ"ES IEmn%wȅJ L6MCfNOcbn6lF!IHIV^82<@#Qf^*N}fr@ep0IW`*zl#Km ϟ"gJ=RZ|?)yiwRJgq+ DéZ(#K0qco Q@:8^5b$CSwpe>4^Y?8hOG}I,磩Lz|! k8_!SBl@YrcjHN4\wY2߳'o:H `˫d_~p;RA'Q<т=0=ii&kJmX|07Nt_=j0^Nt/wnU1h ~(D 0f)n5'x7~;{i\?@AZRaf \cL C.+G=ʅY0WkŽr<۝tE0.^ 8ܟc>] iqP(9iaEvmd߯%RӆYGfP€ A/?0u Q|<Iri. (H'j 54V`/wErS(LUR 5gP_ Ljr+7lJ \Oru0 \w>1ր KRI[}喐y>#whRͤ&YDLCgF Pvz]t&;^925 hm?gR/۟pR?pt_ Wʅ!aYdvFm0l5xiӊ[h- Gst1> B7ÍeMZ }b)"|!Tlͥ4ea_4%#G7?.SFVj^a }èSun'dȿLJ]×ߢڅn9jK~|v1b^WxQ5Uq(wPa^d{7鲞C6$ G>;1Jq49lF Z[/<§9c4ů۵t |D)^1I;B 4nsjh D~yFJ0c}뽁'U&8J[[6I, 0 YaQuIUhNZz:/-47=4:ҋo7k8J3am#Všm9B> %/~-MO]lE-8b'B v_h|n3{ 5#a6q7A56κ̛Үar0#8٬V*K啿">]I>qmᩝ"5+>V~-~`ӷqdGa?+N a<<4gV&lG#`Fne 6UflYGWP~O.YHϺ0 ٤ $A#BM(+Sǟe&RBUUS|#o9̼2@wbfZ8 =6E OCۘgϲb6zVc̾aO dW9ڒ=HN![x+ /_$V5 H?9y,%,p#ٜq4>R~okcƘvX)Ar+A &}Put1*em5CrJ"{/|{| r83\ S qd,ѣ6LP{~|'2̕G5=5vMP<툼ۊm vPW6'61w3M= j/OgtK"D 4dS~R:)>Ad\7>4wxhdLTxj4I}RXtqfKI&sPGM;b@j\vg;6*o0G\.-[%F`/_ ߕz)`ZS( BuKߝ] j`f3O/!%EVi zq9PF"9%X?iDn9\BaQlwf#jշ0P ^jg,|mF}UtN[ kfo$ XPTQ\-!!c"BWBA?mZMNudmk&kDu72FO8یxO 1j4~ #$ߚ% (B;ӅZ]Ea^H-qc84@ 5r%`ϣ2H{a5F%.ɎȄ5*!Ѝ1X&ӟ0-q$m)$p Q%T!{}ˏʘb" fMUJM$h|v`ä(-gб g9]е28L"iA0aW̪2 m[v)dR?[U1e `,Ԏv,4 ĵ6t&YZvZJU vfPƤ$a©r;|5[>.^u?zY,W,.Vh9-% /d1 +ѺϦsK i?iymx~Շ4M4y4 XS4'eXV 1toʧGa 3բz'rV?-l SC*J6˪V.*F?BPX1{F@R( ;w/ՁqOZƧ22G@k ;8+6$é"$aH!,BJ5ރơTSRzQ±' T e9|4:@v@st5a1W%$I gzKDZ1I ]ELxz5b)ߎ/w5ɣ^K^zŲw3:ϓէ_o_C°,Iy6,B}MO=a~Ur5h2MUo; dFMb:MÂXe.L41RTV6hje2I5_r|QGaKԅ#v*wfpX0kԜp(>~bkWUrg? rJƸPQ%z,3ϩ Va!*g7], Z[XfE|yՑuʷd3x] FseYI$pP[Rl/&0߮(A)A0ZDػ>`Y%[P+őj4pVɧHg~:v5/?@uA5Ht2&`Gi<̳vaNGuu L$>&>җk&r-#)gֶ{%$׍ryx)^zKQ)\=M2wZ,ŵ|{@N_i CAX32%fʠc1IY ǀѹl pf91|So]N}P&La$UgvTΖNI`wZ &cm?o8nǼ;q0!K&<Ӡ CSZ4C}N]g6]'H\"zFPW7/EQߢ\몾qH>غ::jBҮ AOط5 ė0l@6d ?Qt=MU&4wPre[-PB9 OWD3C4SU(c \-VaY(D]Kms~l󺁬s]<3;S,`+[> -j e#qzk%MpÉgPO1\{ܬƆƐ(}k)MΩz\3_NZbڨ; wIV?[&*`hoD {& ^?R牢tFE!OCMF9#lSPߨ a _ >$2OF4 +y`Nwq%r{oA\Ou2{ zyx|g55r8E{r7įxt`@#^]\ ;IGQn8ET~LǪ%X<4p3\i:3- ^o1~ko iK^Sn/Uj]3bEͭP SAl-"x46")~"4V•vjG=iL̃w&BIt&B_N# }-* =?"'LGSW" ޏBjyc%/q%?LEr; L{V]W5̶Db;0xV3 =WZ\оU-Y(^ڠQr!gQEݴ]t6[\6(9sk 3GJ,,! naPA,&O8YheW%- d,F6GVy)ژPpBUIS[+ﵓ_uL|AP\ĐֳɧzitE)M[hP`CFyD9xy%/z۽,)bK<1 ,tYLQ,ݔx]{o+)Vbˌ#ݸ ^&R{,rGPU%KDxO;vb~,؃a U IImd8Frޠ23徶4,JPg8@;f.ZJ8n99DN~>}$zԍ $.n ̙/ńj0T&t|(u "jh9yå/XCUpRt鶅eqHOEQ~PZ@saBNdN+pe׳dG^ i8e{vާb/{^b6,3|OGlUhŐGϱ8 ]f6tdt,Fp0&( ⲥ 026blqo({:;D'Fdž}8K".a4X#ۍ/o1RNi]UO?AlL8Z$ܕM_pԲ=3z`3O.fn]ew &歧\~ѩrH-E¨GY eTqe̦n 9(UWUIiEPk)귅w+V!qOWx}tj <:nhtHsOQțhAO ڍĸ\j YZ#1 /c#[GƖI 睂SSz:;TiM!x =^i\ЍjIxt aE!ab4',wu|G`ἇlEK"'gg1_H(##EOj B+wϓ`lh{op#$K\=o3u,T|~B8JڪFSEhpʾi('d9 ,Vܑܬ]n3Lr6O1]K+Y;fn(O8rDZzW]I7<7ێ*l3'B 3b5pq ϊ˭y~wD4鋤wzstchB)ՠf@WMҞ[ ;f"Z'ߥ9~e:m Q/o2. woc>%kͯ=R=hll6N]xe$2xk{N"zNU a`ސΦZEoYd.lw.*~'T 'rЉ*1l+K[gjVf~&ǣU4jG#):Є/Uӱ{F] Q/^]Viǹ k);!+Ig?t+fO̊$U)KWp&R8xKzlm&=ڳxY+ex. "ߨP.b5ne9\617vJ x1G8 rUWf4LC -sC tV_)(@yJT2'r$"ʤ!HFSNo=ewn[n3ME5-[%F3glA[(nJ;Zt jBYY;y"Ui^Q_Jyt.}y=K=؞CbqrbhKi2DptX( (اPpm7.go؊)"i)qKH5qfV֞mĹ?}uK)N#`4w2lla5t:A#Nd.caiP~fTAVW-ueh+RSZF}a 0fOk)0g4ԃQ m=ǒw`@XeA~u4l4s-KV5<.*mo'gN%T:u'2;yl`m5"us7\%Sȼgh6Y Y=GPӽ'sTKv,pf'i&##,#,Ž%}Aw؟bg,zQA+m%v6`g-Vjʇ+ԥeqߛ~Og_Wsl8tOVtN #]=c*'<$}pgvhl|f72,@eD AʧwsjREeВ7ͱAk X~LGͮSBW9*"3g ufI84>[>r?8Z/#<]ms)qQ`QC]!QO@dg;y2Dg%Zjixsɝ3^aSJy~.sE{Ngbߪ8Pw y}A=GqƄ~h (Cvї M`ޝΊc kV8+_Y= ܑ6_8IT"5˄82PfEISu񦛅#wcٖ*gsE)#p,PpEKZ=q*OtRTOB{5` v"9mj mCUըYnMtC|W}{ 3/<̓MC 7N,Z}o,4OO(?gYv#wWuQ&f;p[[u6B^L 4S8)//kl~|b6_O+xWMZ(_(3,|-^&ӂ\hGDUGSШ^AbPڪbЁ:yzhJ8ė eAq"mñ/?L(%>l-y_42_:(JdxSKXwiZLnT跷^:yJԐyzca2a sI`9.\79Y:|x^zehgL{aň:{Z_7@,84IdƱp&3ůXL\F.(5/za,v$ >=Yz9ZC`"`2'pu olfOPdA CLdij7uEh`R]gGb#KC.c ba kÿ;=Ie&<ûyӸApz r@p̩ !Wje`MKft'K]]hAHӴtuW$ڹ~h)aس˶063;.!Ƞ54fpȀdm6_bL6K`VDZKηX]^U`-?4 :=6d횸Hم|] _CE^5{[7R#zg2 ; *vI<8J4 @h_="'TXjZF%Lu*zdWz]ٮs=8CT_F5հu UKG5{pk4=h$q 3՚d/LלyP:hfљP5xAP. >Iu(GETmxC .*MؕX_Z+g̞ȒEw\=P%t|㧕 jyTZd{υJZx0sWxxhd:SG:%Kݹ%?ƺ]`~u. RD:$Nkyu$E{`H%wY\WFӌ^#T>hW!pK`X9H`iDgŎcJ_/jNhuBϩb*߂"\-bj`^䐉skVƷ Q:^gspI=:ELTOxxsrjZb=yHugpM)s>PG(u2b+)s*U0Amv&8Sߗf/$k>bwJ!D'ÖѳB}/0~9| Vz"q D$3hh I2daN߀RRد6٫SL%nq^FJ>*#JL=zKN>G%bid7 ȓva L'WE;lnH1 e=m$=S ]秀,::5CG\ۨTn8J(h@o ub=J쇰=KE#C8cG]X)I/KQM|_|U7'e %> 4 dAPv&:z}Ř"_1t/W 5Bn R2sETXZ%֪vq Òe~`9)1y´"ÝGm } $80^}z}UޱO6 z(~U1 m=ظiX*=?uuwh氘˧"&ۼf]PYbPjeV s 5,<ko_lp R%ϗz#JFƅ4 A z4'p\U|ފ&_ř8Ӓ/|o/:ա_o3{]2.~1y&%!A<9B-q`hN%R5IDo6ƨ5䈃0h{/?mɶT ZwN8U?sY{^]e' Vc(>eh F\aRMhG)_ 0^Q̝Ӫ+H%/ڜ+htN'v5w>qbQM<9QB&2~`&`' ji=40|O,kZxEF@O?z?7]S8Ϭ̡,Ct#Gy+]!(z#Čn"tI1E T M0J,gėT 3nМc/6[|z51Qn}ز329 3Ӟ]o 7=Z >*. FoSJd͏bt(kɈ񞼈a8\C5=ԺyTA}< 312_Ci]=-*BbN:n{rT"F"2`S,OSX~n*"}^'14^!`/H8Q؞W!dg; lZ̺ uK`p ;"Z7L-g֍_X-! ަ^<;Ro'$Q[7ZwG~aȔtޚodfD.V"!JX8m@06:}tIlçGi,w몝}L3+BQ]WuboYX ivA6N5I"h` SU,0v+C4:%V[хed̤CSa'9Q5t|d~}!PGv91- @-c÷$>_+ Tj8YP`mR=vߧɡaG6Y0`?ʲՙߜfÀʚC9# xp-ro+ϲB+XÞ3O~,q(pmNTX`t57} /+*|& D$lg/RYˤ;P4x=u63 F /*vY 35Kua/tP%"Ÿ|j9ُl7U8!Ķ9c!*ﳨ;;Bk]F?0q1:LQzNŮ7}7urtY<"EǮa806?Mi"=>y@굅_7hR9i:V\ft!:f[2:!YK5T]N/:ҫܣWտ#=)Ulepҗ붙Q^_W$`r@9nhw>cas2Iƕwh)y{A9ߖIxۉ&E/-40wFV׎9:K6fx_P1z;fm$D)zCiľRZEKqu>$"O5G L/zhn Ԙ8R$,A ct2y VVݝ|8bȭ|(q7g#g1ĵ娪f9X*G>EؖYw܎el^R wO0<"1&8sֺi~.0:n$ݣs{`{XԜ]be5;[g(@~Z矰JiAݟ.=RW oOKphɕ=xk\T:b;קgH{&mdwzU@9V|XzPf |%|!hØ:p`V9kbYOE#T}PhS5rgjĦZ~02{9DTڋ8te1=PuQu퓐1n)-f(g2!d*)uc05baՃ.1uX% upAi{sO;Ks f{C)aj(onۿkGE)c>IBc}"h ZJUKQ:C5̈O$\s [;%u!FuN2ZE-Q "tr&*>Ssf ,L|csڨIM̶p(Ơ\ ly@rby r[{p9qyoeayO*kt-,^=p*B {%F8]&޻ގT,zn烦nv6p+x,3Gs%4$q;uoȢYm"{yo.2P* WU"dnZ)ǡf0y1j>S%WڬaU`!كdnyBoתي&\tK\|ȳs&RA7l.?A/nb+r3=* 0h1 T#;%}b 2'\Cv[Y˜MR0)Ӛ=i3FG~s;Dpqi!*#٢&^즟hy8Jjϴ#9]@tUr_Vd$w&uE`]|Х,[QOG'@H>\oi26$mߍ_E?Nzl*h0HD(`g?aT~6V8p8z. Fٰ&4DXm@,3iDѨ jYe0հw-W6 {q>F!`NwEĈ:`طB`[LXe$YoDG RVzkR;X>LYЊ4AʲBV.7Ai@Z7551Q-pR}3Z|`4OK\e%k63mDBɳva$e0hYGlcц2pGgO ~䫫N%piZ̀ZPx~ K*]}d!lqH/B|S8lX M<]微buDYCai; aBTP`T1}^ iǐ6FRriOfRKkN ,C}79+*oEK2TkVw8˵sV`y8'"B 2UHLb`ey.Csu?|{Kat1OFRt˒2 ;xNe鲮P=˟Z vRϐ@LA|ܘڜl`]b|g~ Do zXG}y%+nVG̃%YڷLwp =Yp x)?*dzh\g}N(U" ?-SE( 7O >O.,~/sHirl?ayb8oytY !AI."q︱i4 ɸ|^L{ 3tq"$ExIN5&GDA1 =vޞ4-_C ܭ_8So }sS)7 3vFi&Jx8 ,c}]0=Ng7J|3کHGR΀-^wXR)-ya|~|m`qL.~ă66KA4m Rd5ƝE0SxI#8]e3!]LHwu6IIʳf2?YSPoy,OdO/+l74aK!M3u/w ċDաj$ 0d,nM8zS gtjFUS߀ ǖi`ך#+V}wrr{C<1HGe َJv*]ցlcm:`1Djn< mnLJfנ9 I?"<߀:/ I 'HbD׸= <*E nq R ;i >,";F}s =ACsՎcTz-n,a`X[g*7~ۡQh;5I6EjNO9#D=K8N6 oB}X!2r~$8a ~'+qNTW=фdFp'vSp\TEK7sUI,_&-4pz,S; #ZT2WD\btmD a&S<E.S\ kPkԐ1!>; SV-)JNq&tPv7$e t5m@q=gF:0 =Ee]ucEaJ),чEGMZ>HOj'rs!@$@Ϊ(̤[Ybqyiw$LeV4'YuZyS^ϰӎgaOxzR`(,kFcDvY̫M E͸+ǿ>EtAYf\M sF;neԥtEVphhX3㯘f:ZJڅW>Eԡ"}OxytKe4D䙨֯cxdw:.1^Cb}h׍ Y?eUUb=^4?4ZrpI#U^' ta -xѱO]2Pπ[^(bU*UߝRM1'=*7e_#ҙw>.D5C>8ӯĄ3`V o-3wgl]j5ޱ|Q%8nCd 9ln>eXi.tK"7W`',)84YbB@ʁPɹ (E/!xt*i ~ ,OF 屖_Em"dK} H)SDUVm-$hy|: r `+^~q29Q8!|c4Aͺ{Eԕh_+!׋C-b-Ȍ>g" h{ "g\ws΃* a/hLgWʽԐ8g΍W`9lqZ+h!rcTi4[|}i,`r rh},tbJ{ę1V`ϰ,҆ eQ-6F\һlGP-:p ?*GVlW7F+>E޵.j5~t瞍 86j󲢮租Iloqq`&n0PB ^| _G|ged?Ry? _Zs@ɠ4(͎~u4\:n0(ۻv/l }W폨MKVѥTjƳ{M/'d5Qz}@٨~'ο~5ot<iY n_SHl5x-Q6-؈ ƅ6s-C4څ[Zvr [ō<_( 3*ciRe ! =6(uvXx; Luɪ*Ql''ۋSv`ՓwN]hl^2pݾ#p @H> ES{vE[\}st>}anw8|8M8){sl%骆XjN f[Uؖ ނ~BW0G/jJ}{Q PvJF6h*rTUA~O5 2pL&=yDby݁<NfO7hy6rg^ahYqm.F g@>aBV<+vЯsSnaPE 9:="7k=m_m€&E#viDzg²|OcIwFxlZis4 (e=PgF{ȧkB0O2-RGg ֐ T4ng2;D+<ʴ`$ú NaJ&5G6K_iZϑ Zg[DZNmfœ[%jh yp4%/g< mWgzNPJV:L""矡 C>yB,/U 4B7[`8~4iL8,ޯbif/Onw-p a;l $URt\kFM/ªk0gx06vAߙ}4!ˊ^aF@lw{ɤl-Rݰ Psnsc𭱒$pj6jufJvûM[Ͼٟt9~+Hm U-EE0ݣ0T+AUqOK dhgĤ- yRdW$ncr`]+"#"W&b$?^ZKnwt] PrF7UY(<y&$B.,r2٪fYcAZ԰IJ| 2(1ak_8·Dɋ6A̲809AsMs(B0#<sD.=> b(Y!ϳh u54X4ϊR 蜏?UIc ܴ(ΖM{ Rqu q.f9ʇTA=GtX0{qy"Q ̝ AZpN:Q cO#_R:}Ư>u/"4~52=(+(/lL87L[Rޝ.BsP 8Ԃdo^&eذEK;I*`э*X{ f-)H5Q+=ũ*=MGA#\}3u]n;Ҷq#E*-3,i=jI"e3'Ɋ |ؑA3#+%qǨ,G?c:Fv8x9nl9Qs&;ǟb <5 ж^Cx5 fBM3V,ТQ@ω& r|Ϭ$ BH %Gfaf 5A-B{JH՚An!N4{4Me v-.ajQY*pjStKxWn6"Lx5_jY|ן!$M$W!G_b~wt@\w|-͗nO4 arL`Ak]h$sSПqX<5fIGD^."q>%y/,08A@TdiPMܙAC 5!IۀaUSU]{&THm{sZ\HMP2)\8E ,Qʺ lrӜq =TF% ӏ7aFj `` ׬;aPӴԈJG!H)!sx((p:2ZuNTw^=}c97,`ٜjj* [BVnsQq {Ӳ?7z9;8ez2"Xt:mL'ǕSͤ5$#yUH;pkܗ2p?v.ŵ3ORy㊾b!LDO R͠VlKF, "PPk( GNib gƽGt>[L#`k[k;c fn K0[g4p:}اe~ac!N|Ԃy *:ʗGDpkA,H[5ˡT:tڌ9*%m;;h:x-"5`L͟v#l]!}V_e-ѯxO:!QxVŭ_U\7ÄA3:x !OyI{oPbBQ7K0m T6ܻoZԿXrb,ĸlIe!(Rp'C,DaP-j+O씒rox/Z90d7 r,ݻSտ;sB.ߞJ5{cV+&{TY)bǢBgMǘZc!:ٯ5l5R$O=JHŭ'lZ Cg"?1.ڙiABɚ%AsXQ)l9@ 8wo4#q[{` J&&^]yU8ˣWS|f:k|| #8bu Fˎ`b-Iz\^_#zm3w^dPS'#Io)Rt92iw_?`]lAh>,5H$a,ԩ M%>.jJl4:X{[1&Ȳ+G+~z)>0EXn"ey&P8=F{av#0W-)QiUީkg`w) .˿L]#1a!j04Gͻ@b M!ٻ]EDX׾+˙TL; SZ'afQnX. )sy T8sՍ8HJ  7كYu2@OMzҠ©iH= !(LL! PF2c_ !D[4bJgbT~@QpTEV/LLQE;(e"|k H 06ZSNN@kv/\35=KMuP'jǢNf0.pFJߎ?o8Wtq_"zl*<WKe:}l[i3&"ϫ]r}$l(/K=>dt`fy!rdGRCy?S]=Ro݄nJ}X]s;a$L )dzHt?g1d,m h#Cv.\,G$i#٭eBUopéM*csc I6X @64%5,Wؿ?QV+ 2;a (b4@cuX==Ol[@9X 5r|.^ e$.H-eB]#y r\/q#_JY:Gb|rIjL>pL~-v]ǵwЛ/i 1kEm =dwx'9H+I$*xB#/쥨¶F hf8v:! ,,T 6 a0'e\凫-!08#v*~.=~[Ʃ^qИtg}4Xnh>W8 pu ccS.wYzG;HNti%f9:wIrn0-ItЉP/;(^φHqW.p +DSVaje>8};s4*Hetî1Q"/3mbhvF_{"\?wa|ž#y%g |7 >"{igNAiw=\d~ܷϯNsKf|Wa&; ecR%:CT^)so{g[ї2 !=D8Pm* }l˿M$C Gx-Vw˫8wˡ G Ojwm99'Ɂ+$8g|ao:Dzj m2J Ѽ෵ox{{]o_dхG79}XI9_CWIPy" e(W .OZIӞ>!ea̦ mPmV-e rd/ 7{Ґ#_9-zII5֣[t: 'P)ᤴFoϚ E 3)-xpOF&tՎ6S~PQ$jt!s\Gƫ*[1~O4tSߺb1MO B>gdvz7Hp_X^CYdiL; }t`l\,zJp۷6fFAif?D@\[ .IewMez0uow+}QN,S‹,@NpYagk 5\OPCPn%/Y$+3J JUs5mx."mŖ|`]q l狊6;O Qt7Ѩ$ LϪamYw7a10|AF۱PкΖ\vIp=Mho!B̖ŀj6vǦʂ\ޱ()L}T.&3[Μ(?Oذ$>6yEp.vkᗢ"0U!6r7;q׆!*;1g:W[{6}]kk'*22QmEb]LvZeЎEʒX%u]UPL"h]^dD' !p'zkjoM= a)RyH$,yH5~Ԝ+~vvaWOWDzA4(C'sڝK#~>!JԬs1ݩsԶh1 B-(}+`$z|-eDJ x刘~W" vy(\ 5^ӳ/'!1QWiɇ[Rd0ކ"YG< tm})߸C:/!јB |_r1Ta>Erf}hq$ۧf3\"9u?֤$"J㧽xCd`m}Ck5/[}"еQ;h)6)D5&^,OMz8WN\;Kʝ9 )7w%*J5F6G;7$N߃~6mr4P*Wbd? ]Ue;3`\kiC @i#5S})"&s@R#uo},?̤W.AzԈQU[:#gqTmα@_\Q N@zႎ5#_ V(D l>%W0oPzyý{~n]v WUMwI#Hf`+CIMӪ~YaKC[TԶSJ7c2x.b] ;O  4[Y"s=Yw\ ΗVZL%{#"ʡ q'"np-&|6}"&DY&7UM ׭lhW֢ 9OrD -gS Bv8^"F=V{D˙K;"/ ]((2ad$201q/ [BEF-kaDAXM ܑ[X(P`3EP= Qcm hO}Q|C`γ)鷝jR!ig0I֮TrA[ ,$) ȪKܵF}:$CB8}nj=ѩv~p[ ޘ󭸘׊#dW:'gBGKO#ɞx9\GA#$I+wDzҴ1|D*z _<1r>ɯ`VNJy=e"LrU |L=sV ]OK%Xo&gpSnK0CM'fQ=eM$Z*wNjX"X#nHkSu_kf{%?!?QXf @Dv)N?9T'6Wq͵Sv]i œT'mN}֝3,o4B|5wee] 7bn:a"rJ+[f,YH;;hH/`OHJ@@=U]&'eŇQ μxpqT*^Nx r)JENi@hbH^-h=޶jEɈxxnF_4͗KO>_W( -Iyl΁ ۥkSITY{4w#sʀ\p V0ac#3'z+"K 9 QHz?g 䩃"ɱI }FhO^UKL+?s'MQbéV}_N]sG)AJ3t7 pZ:`/wmjcJ={zl9/dZtIS}tFockqfkGP\_4}NMpURj$!$wtycB'?- 09YzRJ!#Mƴ"0{Tk9ƓeK^VH?}gԘ_Fo`%uآ̥n!l8*=:&$0 Հ>`m@IZM(x@ZB bsnew3w5C`Si\P22"ǚly֠7s"Dq0ox2OF$x>7KD"RJØc'pNY|}x <;U?jDIL80H~Eʘ`AA_lD3.gyp3@s%n``\ jE-FJTi|\>b]P wq;ls }{=8,AI|*8޾ݩp<:Y9!O`&Da6S_aG,$Ɉ$H1[_mľc-t62e2wwSͥȝC봰 ᇥ?UۦYY-Q|A #zMm 5Y.H%& f#n:D3;sJ s33eg%)$w*Ej0n6&hr^dlE>tQƹ8Eg ֭8`! ڳ19b[eL5DXe p]2Z (څꉐCj +P(!5Slg5 ??ӅQj[sbrL  ;@YkIM1vpOt;bIмR L*1$єCNW"oK>wOV2pڸ3_M^+ ɥ|@-6<#v͏Tpv}ytDnP9la=O5L #.n}rJDyXw+tCZE,~qd,_U\텘1w,Ѫ_PjϷt# pe/dQh:O,TnG`aM޼v8v,T̫̐%ӸѨeOדPRҤRf`5ӽҡ$X"s/wo8]LAn\}3Bs,{gp|VWqneLR- $*\((+`N)nrp`Kj*OXdVȌؗ"Ȃtµ sWnأ[mE-)sTy3ϖ_Jj5UqzƦl`]I}ۜew%UΉ]Mxyh&7 a9أbڅvzN.22 Rzˁ%Em XBȇv+OE~|hu6 +zMg?o+"rEi}`.1KְгY{ªl;MkdeIs[C}Ð ,~sV,A"v2tGBkVq9v$E7`|>ĕ@Œ3E6йg~hgo{ն8ݧ}ȸ~Y{~7wcmgR/`F\7 ]>*efSm+%6\HY]h@u0I#{fHh\kڤnپ -4ܰ !ʉ4&lYmۘɋymƷ6%c7.pJ[<= y(lHb uh!\>=0V0=Pe)}5w TJKptgb;Z:`^^_ߏG,W@i nc,#y^4/vlJ6f7 R~[ő џ?e˫^ZՎzY&J>ۖߍ `o1׆z`5 &j^!coAswm_='11V2rg|0lWJ J˘ ( ,%`UɯDAG]8򔡒Å'ߣPi(/;̊.XPCi;C~#}݈n**X (. O3#:q*.^zc:v!WՂCDO s[V6a2^C9 9uziWC!M4kfOkq{Upm!MM(fSi:eL쾛b׿Ƃޢ"A>{DImg{iqx4x$^(Z=E[6H jO 6jeϨ5;Qnq{bF!ѻVkν2y{qNxnV R4mO"Lyf.j6r, /#F"4jn-j|hKKc@=;wT\6K"rjxLR?lUdp̔m }]kډ,+ GSOƐ,No v4Sɕ\d4gf5Y@C\#pk@YG3*EKsI:f5AB̤R.g)s/Vt7t<t|/mʙpq@Fq|C),҃xG3ۿ9O93 =䃼L/ Nu̠EFOVJU Xly.TjX3Ff<+F`Bŕcjם.H3׸?<RN1v| %>GؽJ- O36ڧl,I>_glx4SqYF`B%}q {&Ŧ?}H%sJ9͔HRǾ5EUt.pbWT i#7]{}+(]+rnwA'{U| s[Nm֧gx!dcXT`zK1֬C>rwjZC[ȋ LjS~y/VusmHQ7ߛg6^$f7@oz!%OV\AύЇ=h)EP^ѬEY9yXwEYQl!:d$#a;.ݘNʋX>UGwv"!֒rK@2-މVeKc+މ؟dťB] _lzO,o<>@k7һGY?a{ٴ gx! HΰokuC<P3ss6CRQf稰4dh:򖷅Muo dnN)^o. h\kْxU>Ex鴆/t"΁b2$iƤ}mr/( Ig nMMA@;}Y8{CH֧Ǖ f->]d 4|ѐ̢,n1ot8/ ȃ\5zbL4%sUI&eixHHKM7źXaRj29"DҺ :n6DCBtaDNL1}!M0v-;6cWePvzub<>0(>/FQ[x]V)MB =}ujlU)Ed>GqgI?['5P;jgs\A?$0Rԓ?8Ye>[80@o0 -TSFN +BI0izsb$pyA~wp[%(a7p$9 $R 1J-mv3F2V7(Jhҍ>G!7i!1s I=r~"=А:6 cVp6{2:׼P ~ H0J^;Uu^S]hΪ62UOZ |o 5: n,Kw ѱ2XQM]'dCweمg>0s%B o[JMGV\YWfo" vki]e;J22+hKm BiY_jX ,ҕ9 Ÿ]=Zm^TA&rιlLK_!qȷ|E bڨכXYNVQ=#qeXu IHڒ L;a GhߙV90d bDFv3sNAOsj@Hp'y6ŠA<ٴṮN=Z_ ^&22B-s#R ?D8R^΋ڎ&%!İ5]9H'1qG;;cx*cHV1DTO^K c' UrκaST9G^d0mP3ǧ?Ut ]0~&KM_ q{kOۈC| ]%Si=X ߊ%A3I'Gw'/(fw` #Fسl)/d_RťJ|DrɷKx=}EX8Q,d0:r]ٻTN}Cfcʀf*55h *&SbRyݦ|<|x*Z#i.e9,tS=3~CãUTU>> U1u=Ƥ#"s1n4tkNAw3U -! Vo{J;1fWxҦKǚ)oÿkNJ:=EewO#7ȟwDH@s,@AEgC"eY! ax7IB 3MvLU&%: N͆ͣ4qv)tqa}y|yBl<~J/_M-UadSoaNXw%vRzt %-~klzs go_YƔuS]p[#횢B*9k2.-%->h@خʴ뒨e¿=[^zKɲ#n+fo tF׵NkfJunF[qIt5l)Vj3"NL  "'$س\6uL*0 '- ~z7ׂUkx񥒡؉bt/LȺr/K S Bx^;,7$cz0;vk2ӭۖٱ]X^ԗ#rlw:hw./]B̾P (Xj_lȷ&r1CzdőG/GMowYڎ%, t:w}p^+38N޻b ^O)K~CMrbkVGDbi[ASahb]HUgx|sĮʖiƪưB=w"&X? l^ N&j}{ҡD75?ތkـ s»:K/ {[Rb#o䮑דyZ& nD|.,%Y̾q8;([5?;K|ٷ(g3R[  %\?]%E%"}HŨdȷB5j%H.j3Ec.}ǞFeFgTM 2>e0B+DJe% N#yJ47 ߌ}@!͛i|BsԢmjf;!9wvK#Fmk'fMUr@TO t#nmG]ȚkmD43Z Mpυ$]4&$#V>LkCL-ějhFiO9Gw&uّ:T!-P w֦&A 玖nnT%f0Aez4+U 6u͜([W'^"k]"8O/seAc2|X`O EKtzR}վOr^_;9$0R:"nی|4t3##e!S$̔vDu '尀O2)Yݾ}Ww8EюxO҄eCz*H^,Dq݋42&ƣHkt<}\!sEòQBIAU9?Ȯ^E&0KɵL E8u7&>% hn"F^~,5DVOY 8>MTKNHqNTp>TS[7,/k1m!S/'^6`/-l@@_fgkB)c}{p̽G$\W3,M NIf޶Pr\tU'R/٫-GWjz;6yxFH9tȃjDqGm{'98Rw -AL6vq_5bL=T[ vM;#і,te7#)l[j##*ԯX dwK5|=h=t@_7CfPoZy,Gȕ/TzW?5@h٥3Uт563%_bStK_`U -seR|( d򍁵=%vPJc.5c eck}ѣx('!0. )mI=䆎45)kVAڕ8cfUI!(z7oEg<%T&j,;%abm+(e5Wsx=p)E i35N'Z";.ST?[ɉCA0Ys3 î3>h뜪P%9p[ɦ9`E@vCA7氽VeYt]Fڢa &\d C E0ZFخ:N =}|(ٯiMIm?I?vHPGVk 9@#z&DC b_NyusW|% *Cэr 4p41!HT[;kёH{8@Jح#0]̄(@[5D} (tM=$4 &L+9ǜtlXV6r u9_C'["iwѤ,~0?'mgWԍta1i4SfPzġů9rˏ3JlTP:x48`@+C1=nΪ5VY|G0wZhSe yt@F*H#K2N.0h[TM <7_PR|߃?4 !2H -yV!&;^yj70@;Z$v}i` 9/`eRوLz>ʍ5cGh%jWTr&>HUp5yv :7*^4<")bGsR=6%TTM.-d!Qfa=BQe\E-0t:G-AZȸyH-v DyL8%d:>h.R0# z_MlIoi=Z4gT|6D:_QO<(Ҳ %!qJsy{CI;'Q*8>G&k2>(R.m;cup$rt|gڕxX8HaA%^x r{-|P^tArX2/pi,2ߐKOoQLOhŽ_8ם Yᆴ;X ^}H yNA-Uc0_?n`[=m!AuؗHo;7>i\ԭRI̕ه {u퍖'|u+H7\`[IjL:PbnրgE?Gw υ&@.DVY1:ʍOe4~l^s6w6 n60zah&ӛ?U0R^T/vւ 0l#=uWȯ|c2|C S/{F5D1j!)ET5GȌ#S *$iCd 9mnF6oƁ 6Ln֨Acʆ_tI#l SD¨%tf0B>CC(b4h2!0Kl&unu(-M8|wpnQi| }bDl^ų̕GGͶ̸4Έ0԰F-sdm'$ԛϯPOont_r-wZHxjHȝpAnPz\5C %7]-ĴHzyOgS`/, :䟧nW>25K0p2 /WrI̕T7 xz"̏Oos[w qήez*{WQQUH bj|Lj19ٛ^Yd GZ M8gwՅne0I.37ϓ91E  xhS{B ԊV . w&aRیv«)#Ge'Xg$CV;j[f6)݉U<ᥪD{C7`v;)}x&8}StK&_[S ApZ1Ͼo]v6MBR[`lff韱sX7ȵbc1+c1oÀ|Jw}'1- @Bp6+o"o2+W}99 H^ip0йߐPv5Paf:_`7쓟ԭ樠ٰDh ĭV54Nu ,$!ɚؘUSǂOxWLi#FLH|dU#aR'Y20KG[r@++*3\ccV{Hx:jA45HC!f_6^$X߷A ):o p$v.˫9oĶakwtoց:0U3Cɍ.oҪ^Efz@d@v:1T~] dnS*`vkaKBzG04X-d9%,͠9WǨMZW,CpALv_pE7P87CEMB o嶿U_у"K^;EY;xWO}W2`@b-AM(-@vݾ;"L `CT4]&;CCxQ6Yd֞Ź V#3==KMΝYfl))<%T4b[eI13?" `RP47z>j@BIav3|WRdD躵 uz$燩Di+1(:9F[<)|GѢev=D|.O߼֨'vH},.<x;C P,8j rQ?#;cY52(op^'8~4\z- ͛YjXʲJ0F̴'Kˆо EAMg=@np`<]: 41yp|[+hOʣaS:c{0+]?.9AwkByDeĿXO&8 ~(a،aZe+SxD:ߵ1Zh5\*#'k`*cKFmzF ]*殬J<5] ӣ_9]lJSОdHqT hXۥbBBi ݮgT;jƂObr 9ntkԱ:PAK8gvy`gqe|od7gJ/w q3 Sxg3{ٵd{x?i3|8c-" B٣C2|w{eO5Kl:+#=أV8/Fn KDRkfv Fa{GIg p:x]c5]cΩ PA,'mL4@k(P0 /rHcOE)|4%gq?V\c^ ʀy8UWnYBloW%m~_h|;a Tay*th:S.Wg2Hs7 0M2H\:aއ`3c$~M?U_3ZA\g_@ k!( X~\_{ zVLT Q!6yvƴ7 * H LP MZLN8 o..9C pg.[id`ۘ0̛CBߕc~n*'R<}&mtj{SKnS!Ǧ+]u 3b%$>l0$s?#WT8(6ƬBfkwf'77utoDP/j5~ )'"9Ge}Q5C+{1HYMu-ʷiM+DrܔP6O[~ €s3E}Ŀ3UըSj<Ղ:/#Z{~:DxxG0K;Qfb!QyAl)LjӤ} ݪJ6V I>ęZEUNS?ߏ5k%gS#$~ ^v]@&XM8o W1R,q\C@ܔ'5< w`T71K:N+wFd#>Wb0$F\jW$_"W9u5LsH+Se/ݬ 6 ͘,!.0ڿ6-^w uj*&nS)ag*̈́O#?zi>0SRr,zԔ~Bo#%lqʊ$6u wj<-U`hCD$,S1ڐ .ediV  Sڢ:YInɢB>>+>qMμ:*#1P1-jФ8HcG:%|:~jxV \)f![*`Xf}#F&Zh0mBAqys42*NzT& >Dpq3\8 ?jQAFR?KJ(ϭvPỳ-nGN$ڌw^$? Z dTS:F_RgWw0O=a/wধ|2hMU/<8DE3JL;Q)^U 7Ѻ_% _re͌%ZT'Oy>qn+kAa7{A/枖MQߓ aX{0c)iޕ -#(yHY0e}FYz_/}džr `7ڈ饌t|-09p":q:[iӾ,Y5PÔ}jR"?fS'E&￞{ $:SK#Nϲ\Sm,Ax] 3Ϩ,8\ZL=k@ξTkDst ء<[R~R؄<o}]KXHZU2x`5ut_~*\5-FNcv@[a"R\1) \KjqDavYT <:ں@ЛZl1֓~\#98M;1qh<'nu*z[ۧ| T awbkVz5Y%(|1:]Uz˦zX`?(u} soP}m*SY`3۹,y\[uʲ?49"ybjYYX B ~unS'"mX3yHn'=/*eFcx|a٫;y(bBCLT0/˃ֳaPS2Mn&)alVϱbx(jFÎݦfpbϭ;k-ݟ].O 2-U⎃г:yU9i{/f۰ɷu]^{)qЬFb>3GefҴ>csWN`&#&w.}aztcVy=S є>A-^/uo*P@!&%*=~N֭642q{ =B3,?v6V8g 5ʡ0%wQT_ԕ`ɛݧ2]auz&1䴣1j,lsNJc^PfdLQH C ذꂯs~Fv_\gNJTlqQvY"!Lu6BFCP?k1PWc~89яs_; %+Y{y^ 1geMOTuld P}Rx7(SYkCy65Yj@=]" Ԩ4ҶSw/\J#6o19R&ގFVNBsCM}XN$2[ FRMn?bŦ6zKnHb]L:n+X]aE+SwuLq.d==Xߤ{TlZ:֔cHZapIuɃdK7U.^fCpX8ahv`Ѱ`\^ 'k@y`92'2"̋QgltW D}3 'b7H$~DyR:pl &9""]mdDQN>6 b_w*0#DzpW+HJfOJk Pq5Ԉnv.URGqOSp#~l7ْ,|ĤK>"Q4s%Yzqgn `L.*IV#2MTRBp`,] @[ҏ||oVhsiDoǞvIQ v+酸9KްXV]Ȓ}S.!u3W,C8 *dr)^W&~9 ”p,Ψi8x7ND@҄B@Nq ႋz6D tnW9Mt=Z1Ց>u}xBT\lIF7څبo,Ճ.j>lrorxqdډ`+ xpSP1'iv%.V}d&S._pco/YLїdZt.i% 6͚a "[zpbxzHLk?.Hv?7ִQmyk_(G]=KPte)\OpXWJBN8v5=h?v`ݙ;[7{˪{ H$c?kМj+!2QeOPJ3D*D̺-: J5( :Ni$ Թw5lڲ6M PD> z66[xwVA'ݏ8K!)w}ыMto9T YסvBL+o(qq cpKo޿i!h-k2d;}Hw-.V к”<1Z hZ72w3/?;d)v .M /s ~["#o^V<nQ9g6G ͸1eM/jT 8JWWmiqP! cl ; 9(w$ʵk)N;nc fd,=Pc ͳ.,;Thj c)TỎu2ぁTJEȣɝsD39U`8TYVd _Gq2e͟nL 9AȊKǡ>qWKqx pӦ? hgpv?o3uVDJ',&*3GێABc#,HsfIrRpN.aJo;:Q^Ȗ5s;{eXP%x^zD\'"L~C@LdI@]6E] 6ߣb'VZQ֤|NRi7j Ár JvI! ߭\rGaޑ& Gh{YP'$bǹϠ" B*tUPNpV b!/5aKxeIk4q@^&?DyhAo.Wv`4i1# ixo<wTs5 ]HkATWN}$`KSH*:a Ej(Jv\D$eWU(㙭aFJ4ҫOIIDK!+=FqEck"oXboh`۬$h3[ o-1 I]kn;WCT;  1瓱ǖ5-y8T8ǁV+~KYY@sh]'V%=eed,)잝j{T}%Snb%@S2V2@*uA",Ԡ/{ 0'!˺ QYܟ\)h$LtWxAH} 3VZA#lO>W wLR- k7=kJ>(Fx 0GƯ0*V&lich^8{1[ =uƘdbYR_r>a3ّGbv?jTd, 1d$fC. ݭuP :"Kр{kPZh{xϧ`ɛ~6uqJ6l2602=fy6\\Q1ϵ`ޕ&~2R,R O<+Dջ=Sб}rxڞ^Q@D;6RXO r̍'z]H7hg@ ۮ684BޮupCJH_.c," OH›yZVZ˶"e$QC&QAq9"΂b@! 5vw3M\䨠Gzp\P]C\2wդL8r=AdI%W+ȗ]P9ѳg|0&2B[n4:.ﲿr#:$($޹d3#9$@8\>9 ՆqGI_lͯT#4@};xޛ ҝl;;"i43K5vۿ&/N!jˎa~QSk3Yq̯Nr_Y^S6AMij/[F5k2]~ѱ@-2Á~Jlj:]MW/Qdz%N2sGwo")k0g]Yƴ]/ 8J{#P W9#Cih0kd, ɲ-#⫣a*=w.Ig~a/pC^wOU=u/WKMaCz[Ha[p& SfQM2LJFcITl66@-\MfX=3֋"W#xdx.ќ |vT}ҍ(PZLLvb|)Y'h/x˘d%0鴸x cۈA55)YTX$ ,p!?@8:/Ȃ\+ eFdڍΧ€J€86{<đ 64a$q D&@k1u.Fa,'֘˔:QT KH vSP,cI |MSa6Ž Q#zF,ׇ*LT#U<, \O@ ųMwyty? :K:"Nw)}&S /^=i,v'8ZF^r+eW3QCN8&3"W.m\U[Fq% 1Z-elxR2M]gJGo;!RWRVB{Z1;W-*-<3fz( lf-P(Ųyٶ.uq#y̼OBl&ePʸ@F:I({qGtJ-r81-\SDѢ@:E@nҮ^ޯhOa90'#Y+K}_E 찮.L.LEgGKB9ȰJx=P HDYz38v{V[nֵrƀ,\ןF>% 7R8lijf|M!&XͤSZ ~⅙ OURi% q΂?quMg. }rZxU3M5BF#{~!: 'e5 pCr|&֑a| }E6`(51S7JXdWU>/z+ٶ7٢ji h ӊ?%- 6s8x[Zj66 fp뱯ZTBD+uEh\)7zTdqKL5K:7&Th# >a4ig&}nA(t7y(:B*c^hdP&D[og.z86U8<3G@n,*kNQ 0 $WzTψ)ld тI9W%T{qM&#mEDg:YG?},DPU۞!Y,` oHf(,-Ɓ,.pM)z}+Mˁ9]O `kpѹbůِXB#nw^Ϡ-]7)kژ7r<&=*w$,aeubY7#`VQRmMe,j%_QK,5g XV Q w 3ԚN k͎5n$,x-%ImMJD\.BŤ)zZ3k)9PX!G*0SznùrJ.y̹pj S'Zh oyyR}jP ·=- hn'XaqaKսƪi߻h?2uj jvuY2U]m }`B繾 X)hyaP _kiS5*z~i3Qm莫 uj`<=2"y@qIl҄,c` pc=+r^? <0E/=S{O%ex^3MI#3uOr{Z0 8ؽ{b^=v6]P{Z:+.S.0+Ưrp^% ڧ.MtmCE"/:[s(@ŽztQA@{.#>zwNbַvg"G4ۨH-×Kef]G6 i֥=]WXtXx  < гhR$e=-9Ɏ*oW, ҭ;;L!wqP|d>.^wfjPL_~Gx7@Ꙥ*xۧ#f>rAI0f^ߍGA'wE))+B:)j2߻]kZz$GJHϑi}?Ikynl[O##{R`ChUUߡHDuL#Em7qѻ|S!OZD߫wVV BS9Vt.@,$yn8]0#((ANRFࠦ7N"郓9|\hY-gYhV B(!$\Ԡ*JF<+ :VmH eS`UdO<{#uF/}߽ c1:.jE#7#FWuN iW}嵐CM8jz[6#XURbz#hIٗ6*:IQHh>6:G ^i=24ݷhZPGw-#M^iV5}]x* x9"]%E>iv\f#7lRX6 ݸ cvVqFsϨGn'fH-c_ٔ/ݾT$g[c{wYDC]ifYa *:;pWT(L9zv#W¡O{v5Zp"|mݤOUW㠬j=cfxmrj=Ծm1c&O? Ox!c&)d|<ǨI[ӗDUDmA-:9)Nc'}cPnk.EV_wq^61+`gU:R+lki=k4+/[7p)HϘN{wv׈/*Q8fC"29&V$}TɆ/!0N}e;Mh?p ֋/? o\E?%lu fM#i퐧s?uڪ<JoT.Q.#+1MBJ/m"}zN.!kGNY 2  G(8P=asZkB>L1*5ټ Dy| []ۥ5W&x)_7հ@ݔy-P _.k~jj .]Pj٘GҋUi3.>:y~̉ݢKHPç8/ӾJ: )ȴAtBU~%ؽ1"QDlc9mMs%n$pVTgi傪@oMfly۪Ԯ u]S\H0e0r$ O)TF~VV/8LR^4}Aqvyϴlz7Xh$,941ky=JwgΥaPQK vbE{\Mso:d mM pi.`ƐPH!Y4\n1rVia)̜XpN/qw'[` ɛQ/(LOޒf4PH5@ iEA~2QS]EM;!Z%7yEppz+~zx2- wpFI !ߋ0Bb_d9cv7P{HLɻmQgg>Y\4J%V" lt> O[ WBsŶ2Oyݺ#CHa$wwmDi-tw4`2z S+kFĘ Mo$PBcb1Ӑ0OS ``!C77R70u/s8,FN֝4Aȅh (lЋ'Cjԙפ4Tݙ Yu\9y. na*|mћdC Ql-:BFF{-qfĀqӌd(\kNFjmϳެD?p3!Bbja |aybTWdLvW3h6GW;8 )u Fr@(i*$T^ wuYCc B}'q0l@*Y?9he$ D2DnV, {S(^|+`vG8D`zƽ?W|퇫ږyy[k ,,[8~z {B?;8XdC ;5L4kT ~OZ=iV`}!t5,{?o>?z4qpG4bi9R=οMq'땜$ )iK.``RhLte}US}[db?:{+OXУjj'QsdITdb7㷉ȃܙS{S0necf}v;EPGMX֝u&0O^S,}C.qЩ똡%{TH+}~Rxd+5%3;c},2 Wthloo2P?$ws,ib㛲la|i`Sg[3Id1TC1rń!g`.δft`Ɨ>3ORx9Z(l)ؘ)BN/t^0(c6Pn%?[\ID=L˦;o$gO0 @_[&w_[@"ee E:s|hZDٱ w2UQ{^O8];NMR!~O:LP&2rڅV65:лCl"\ _bo-ܐ6/HJ]VpqV9^S^wcpbט]79TFu`zȌV5tX/xBZW!҄5{Jj(ƃi(HVr_?g#챥|OO,+?ez@=1Fv@fq`16-%4kuxu>K! !׎z2P~r|$!߇'FFuL:]qHcCYgSy3TxJHU5ݠ==–% # 6`#n a(,v'f]߲W\Cϓ-ޫra*:9)}"@?J,4\'?.hth, J ٜe﹧գwPAᲲUh6-)մm~c^Oފ/cS2zU[pM iizxǃPj޳V~YQbȵk!67d{V (>6 ) ݢ%az?5ZD ږ@xf{=UR3NI'O3oOQ@[zO(5d{8`OtQ?MaU;_1@JAE Fk7lj^Wњ2nӮ ,[J.P݈P&`A3B@?0`#i$֐rY<^<-x%B9Ǫhj $Tx1<&6'#*ÌU՘. 8iF#m!X4DĒ-B9NO?{M5"~J*`ŎaB-??V|+^\ UQԚIH|Lu r4S%!` 8d6D/(C՟J[An$)Z_kM` _ոX P$p<+3¶kgX(+s QϔQ*x89OMV3޵XM؆2ߟ2 qt-TT vCIs0{`n+}xv1;V(YAc %$rn4yNn>+D)o\Ԑ,(A9==ʁغ(柗a6nY'( GaۭK.I6lIp(&">ɒK;n#GテS=XMHD}OnG0|CrJ.% 2(TM ķ87k Uzt1?ª3D2(%`IF"`V}eB⫃hpJm]c?\7S>d֔.`9QB+/f dKtd:3p}|+18LnyTD9KPIɹe%C7{̭ݤ棬;+t+zB]^j\B9!r`/uk#*bІVV[p\b>1>Ԣbፖ1ƾ;9a+75oSa҅DC8 Mh܃#g9&"l ;,MN AqœO @ ^sVcVhqdsX'NOs|79A%M5Wuu闝F[ɟs[8,j{e/yJޗ4>3>p!Pg 5b3ـ`RĤ+d Cd^A(JJ1S7[9|?!B$ .Sc^ztH~L?kM@JWc<1zt}} qJP1zZNq~aRLX:ރ ݂J,()oV|pe^BO13u t)v*j%CA8߸<0Gc(?-JBFN*E bۡQMN$KTѧ} \&F1ܒ$CgaN&suve eZgLcғ_tBP#! nì:~)*bYY|qbċSFtR"J=enAGKZ򒻓e4/u_z 5@xS{g;f0|-9KifIv䉂ʒ{mgpR+K}ٗޑ* ^VƝ2NhBx2ҙ""7fje2CPܸ(?ةuYj"Ăf|#=xʐr `QV3'Ia(s˷F8g쩞"EOCbVS͎Y,HΙ?.L$=rsjEbO:&AL*,zxZ-OR!3R|, 8LAoe(*NXP{[{GoI{:nk)#|}~ȾL/K"Ǒ[qק؀Q8* &}@77T5zR,tgQuo_|@fU;>S_>Fӯ4bNԕa;Jn@067զq\anUx:u˅&m B-&tl~QSUMkcÆBʇY6s,8&ETJ*>|Z6BLFl&ޒ㠣K]$RBtF4y=1Z탩@5~ʿ 8|1w696[}rpPPŬ:.,O Ac(ͣ&ߏxU]kw?$Ztmd^^Di0|Bo!pUp nw4T}ߖ_G^5=Է7_2b[CwT[-hP kH: |pt3Kl>Q(,,@pk5'lB8_ṪE[&^PƢ=A̯F@mθ)g]84\!]ݱ _+2bYU=պofdGì ^ےn27YLn駇>A'xHqğE}58܈H;!j(ln qduc/9Zj\y/Y<%ѻ&Qi` ~ xEҰz!_S*W!&Ưf3>\A'q4I9HW",R=ldR94&Bj63TSFv» '1j=Gtt #lƳ 1If}?4D OU}wH_x^Zy;xn&n£LrDz+n R tAOXS+Ra;ɀwCVE03F,٣{'Xh$N~2xKhS˕Wi6kIUЁiS+U :jE0DlCs)kxJ.+%ٔݩ|_n򙭫q;' ŊPءY#@:[sL]Fϰ,s 2Ns76?= !?Ħٯ7ORYZ+' XNYƉG8_:wddTR}1L XK3!g"̰f؀t8GD)hOUeg<ٱbO\QY^G=d~`'a*"O4Y_m[NoԀ !ʚ,jc.My%PMGm. N?!;*~4)>T<{{sn.r=*,:uoɌ=K ?97OAŏa#KC~/{ wW.SS? eMt%jLz25-wbU؃|s`M6—m>eER?!2ԑwT>73\v\_ |҅+-nWn/ƅO)~~( _.bSZ|r|&oE/oF[A}o{:LkZ_sFL&SVI Y(Zt0une ` ?-)r. Q9Qt0cK/2{iPܮM?A,<]7d5YiD˕* g#*uQ'":/6}N_KX+:";]GK\暏PíL1rA_o=^ƣ-}m7Z:>?-w1VVs%lYV:cu*&tɭYڄ\FRc-HZ?+Q=t]jVOn /֗z 27.[0vi@X[ó8ؗ6_Yf[PIIǴ4Jwe1DX?W+csŔy,5:bOHзQY)7V"OӅU-Bܗ?JAA=oƨK!ջrOل)8"$Px?^ ]`8Gc3 E&-ąMzJV~H+oxƟ):IP6t[(@THcc&@5l۹7B[G ˼K_C6g '^Dpf (ˇO)fomy)H/TgXf;FoNi ?G8qCp{LT%t2!@\fRj6nBp8x4VB0FHqqz ,W\ ԎJreiޗ? oTxqσD 1BP+@{-&bTS7[aO&#p`WO ?kqNC~ Om*]4A|`I\4/!qjsmlv(.sM3Z ֗h5'|e}@R&jc)iY5rqO, sX"+4՝~X٬O 8Ta7b7r zjVE:r6T&6dq`n/MC q4 owH\u W7Bā n*,R{},,4N]m0U]3R7p#ƗeEAJ*>>p}ݞV{6F*'9ʹ-~sV% ˅20˩)/5HTD 4&"V<=H)B&Z 2%>BˈaѤkRUvy'ZяtO ť \XwHufH/[Q0bVi oLgO&pu$x+u^ fGRv~1OEŪ}u AP&̢"ݽ8 GSVTL mU/ZSm;=k(:"jl}H#S(ңФ4N {jXuq{a/a[òl#ZT[nHH0źs_TIrEnoDZɓ1wJDHsi pF8ft9MY1e[1d/Ϗ[c|-;(}5.'C։sB@";Д GډtUU^Lq_-=.p%Fr)Pq10_"(p8J Oߥo! iɷUIsIf0Av46WY7977? o =LjFYcK=G|Cа ᆸ%"cF%Ã%j),킵J)DOMlwU ^ ̕ʆ} % 8p-OzBr4d~^Y!!"4_a_ ²)q4%#FTr7’QI bI-@Ń0GI5Qa侰@סb͠VU q3%e n.|Z4[қpmL+e.9ee&rUS7,|gTЮ<6^N.36R -)^uwe@_%ә$;3(Xu`$w|s`7]֛EĂΌ>iZ̭u!-{gol*Ho'ViΓYO l_ߙ-$BASi@~("vZK9)QgݞtΟyG,+Eꫨ̼Twqvl',g!|P#M׿G~(0_ek_Ҫ%{FN6pi-a`xhP>LK8 xP~z.|1GJ;yAl' ¸U`JtiVJ8kgkI;e>x(12Dz- R1,9MBXRMkA"[%xslv)HfTW;|t'c 43bÝ-DPP=}'B=5^ʜiŇkԼ SbW".K"uਐ :)+e'qx8v&0eDFd>}zj#mB?A 6qv@K_M}?ZBf%l,eXe*Z(9\-h.-o3 XSy=<$VOҐTF g6O Ij~iCsyDI`dĒg),~}͗]UCAxkӭ~֘ߐ}R ɾ CF+oDqB'7ݨoYތo  , .j=R 0͹pnK!=VPMY%is8 !Ag' FYʘjӤ}M6P:jUc 42OdH,GՑdu] <^e78AJWI~>[:'Tw38e[kݛ6vroA= bro;hNP}>v;;J2zh!D^OF>.GFMkN;oǫZ|$l_0|/t(kWo筱emniOBn:LSjp߽Qrq7;rT386L&h݁h{Yؠ2zB O?"/Q%N'޿܈s'>oXN{Cڊ*{.qE;fS)+tNIspz3Z39b*a$ ӚIROV:%XS#ou?)4LдgAh-@ה8@M2xWRds1N8Vgј}V-[ʑGSÌT_jVm*qcH'wڷZ>8г1K\?RYmT\60!.cى yϰMq صg}GX!6Bb`l. ָ|ĝc*Z ހ}3y0IG>'z^X0n`P5I[o~zT<r-3wx!Hd"D8Z*uCY޲}`:VRma>txt٥ >0(1/w*FW_GlX(Nrtł̷Y{h26 h!DTR3`)3)75%Z^soa"Fd`q䱪мPysH'ŋ"YWf`B՚-{I]/F8.ڍpM1~AeCzsoP-ý'hs_EN 7U{ӷUrXÄcOzD.?IdkIS;fll@3;wsa6Z8u2s!Iz8ʄXBdɦw)@LT$94ja7'H("1RKsC{L߮Hra/-hfio@8f҇^=4MHr7ÉTtH$e#+9-t!oo{3@|x5x0w Q uaLWᆳ2ܿrQS5IϨH|o-3;*,J&>iհq^2 #v$O36^3t3O'I;i,,;FWqnʲZ<> \j r]G O-TmzSU7R#̯DUY||tbdhOU"x&dQ]2[ycX(/bL'Rë ./t ~-3]; {(5\Z(Ǝy۔0-m56K9 r4;>Tk2,sZ(8T.Ly`S ի?fUϺN!W6Na2 ]%C[D*[z.U,kS7 9nǫ֓S6 Ljs'x!_!_{GL?4p|os(g ɽIJl&y@T|T +UZ@Qg2`ȽTVwQSLOaTW!TܵKDœEh C{zJ3xWE =W/t?eȚSŠ%6mcX)v&#Qo\yA6KK*yQ"'/skm^ʑ='^:L<?dbiuD,"Ѓ1P${=܏hlt3@\:eHxJM7Y1sxXW InCvmW#z k`n.AVg2)/;m3śes00%CZ_ؔimq ZdHà"cAw54c>Ͻ]30lx"8p+{r' BtQxbֵe4hg,$$E}1QVId&:BfH\)@lD2lr~4ݼg.+?ǼjAepV { 8Q5 ~ #mޢΞbAQ@}ė!'5-7ƞnATתP R2KHq8'.H@RuAAF.a ncs`{̃w퓊7\K@c?MlՂR v}XX>?&VQĕaQٮm]S\>cZ0b -gx3:χ AzDsψ^؆`(36q毷JsJ [u譵6-1Wz5qFjx-j42uS_*!8|[ftGqV6We6J +DCqş,HgűvʥczGcئ!}ܕyKP*-\{5DߩL];(sy'H{het|^pnnz dF<IM= L6P a+@~N|QtYNFlCaB%uLEU KD.KLk,|J#Q/k2kC{JfcRC8;VށPWX* '#r)ß҉R\Jt/.SԘ=lYdrPͺo0*7O>ɪ?bNW91ьERV U緌w0fǓOv[yg@PQS~)T@̦ƿm'Iqg3αWA&Q:ݙn )?N3ټA+ NbRW~j{97-JBx,#MJ-=i=&L3m/w4ss9 .vib\!ou+ˈ=p#б}},P1/__A*LqJ]9;7 28Z):;_b2D5zYV S뒨Y 75vS6@CrsʘOO9 RTrs&&Yjv&qR_$BqSYHMhf >/FQ=u`SÝm2/gZRjT[S"~oE &5.2Ž\ c)!2:nWnyMPI?[j!dm(|r8lM;wR#a6bB:F2'ka4Ag!/Z n՛z:׮U+Ϫ. \B`\)dv-30.^R .!}ve !̶S2dqթnN8x}?Z$Bf~:TК}ݯ{kv˅(nA>zZGim?謲c>ǀUV}E@}Sn 9^Mx,K^fhp#r _5JV"߸bϒɒ% ";üaE:Xs(j~!nWYiBaar|lzڿݧ8-K&RP,p3I;r%U~ѱ١0kZI7[v}o'232j?R4p (a!>,\b\M:YYxcӹjv'aH#T8f#zcNqȬ+&ƒU(W=:+7W q7TCӮ+QUDxOnZ-,Djjw?4ە|ɕ¦ hi cbwM[HقE{e'L J Q %q>4|j@)v='EU;Z+bx[ VKbLQًje~eFBp%ކ&%aAtK8FA\$'蝝W@g HOe!˓OE{hSz4Y'W+v`Ln=@2k$QzqbIkClz_V$ҩ7=nԕ⻴/w.zu#dX"n528ŭBy.n"08OҶ<&;L!J0pV^ 6{nA T%׮Dl='vT\iw$Vʝ:m y4vZ9?MæTz%/qg1q^qi( QEX .#geyL m e\ȖlAb{Q) 7=ڿ~es*~ffe)1t>#ܗ]9]̗-OF t5*7(ǃcܨ]5l\u9ؾ44X b͟L>IUOv`-M/]TJe%(\9#݁\woC M+ǏSbM6C]c]]V0y<iF**⽯Cj}_p )lZFeH5zׇqt,W|kmP~XR&BΠ˚%B8,5~E =P0p2)#Ю;2Z#51Ã輄;; ~0}bwY$ܸsbķg9xTnO_AA0;*}oTd(GxC.8Vbׅ)!UrE,a+C@mk\hI/Jۼߛ"vAaSAtDOag6:P.4l0-;1*M a8 jn[iiæ|F9d{D"QE8y\;_BccOSqLTbsSq hiI^O*-' ۞ ȍ#*jyܼ@j?j >(ڇ9Լ`*4yrcs=!1G?Y/E~pπUd1m'&xm>=Z POw/9=n91M''sr̥DwI^K$lw } ,Ib5۫-sF+ 8 cr,=.hcAXOlSg*zGy'qS~r ߚ}J4Ր7=نutfB*OXӨ:F|-Ҁ<v8.Eaq$5ԗ椉3x@3,BѦo divf-+}tΜ~K@ /z*_;] RPY"o?Kjh2BΤ HF 's28jḲ T~QxꘞMpU=LB2./e8\.s$D ewb!v%ĽHq-pU-C&ͺ[*2uQ2 |nQƎ8ӣ6r Jj#yK-Qc`O2p<b'G6b_"g70tlWL`ࣱ(g>_)d}\ޜ! 3wgLfF*@MРmLq❴ïgS,1C1k roZ*- 4&w;00a( 'mݩ:@, L[_;b>3}l= FI#TeG׋,}jrA )U[ܴoY,a`!5R6q.:MyNc[^nLYpiͯ[3bZ¼{gд(6rԫj2j얾%E ǡaD6f[Ug],a.?2ۦ;yӝs%O~:S>& ![T/ r|kxgXރ %>(hzM/(U+űCl!\h駽z0nz/E;>hwjj4",oB/܌\1bJCWN!  <'HgouW%6dXF[sOA/$̈-ޱ˨i5KexP$S"Sđ#!5H| [@M3"mArroJX8EQ(WN!:.X.dyd]\͋HaEL#=K޷ ֛z"kJU]K8@Ӣ$alls $jρ .OLS.O";E߯ dS+Wzfy TUDd f}[A]G y3rxg;] 4\Fgk2A •sct|[fn+SP S{n}hsʾ4hg|Ԅ.{D =2:q{.Fh R G4n6@΂edc*au>}O ZYLPHdf0Hwo:=M=^B')oR'0HOkXR.*,-9VgF~K}n_?xH .w@{}E8j{@W|\6Hl_[nzW wԍPIS- Rujfo)ɛOf{bj?kK2iFIE= ^ ʰ㑃ѹó!fAIoԎ ڬ2I)xTIAA%kZdj3-[_,=dqtJ?:~+GYU{)otO NcL av1W+uu*EP:q$;XU3+X<Kl7Ǻv{Uȱ*hƠٙ ,/kW4`fq&!STemբ[qnֲҊ":CwY)7c.ިUY2xʺk]A$FYOԲ.ETV+^ֻ~*9!%mC5ꎭ6k[LApL&ȷ]+Z-Z#?#B {Xn:ʟm_ufڃAG3{*ϼ~Yh6d0m[nslK9|?z5ۗK,߃kC BNryBj!F|YEX)WEgl]X#JdsVIҎ~ψ?56G!3O(\K )gR-KfjJ/QXj(8}Zx}#-<:7ſM x<`CW'xtKȺ5W~\}!11żl'=nvU5K@Ջ侶BX_'BWwfS'o.d$C'4R6UZMNo]PVw` JXT IzʹMF0]ga2BwL,P.@@+)ߏYINV_?\Z5X{4ɋBʼj5)en*hQDqL <8J,RtA972RxK`&xKrGj!y\v,33{عY(1u[ũf]5"]rp]Wnk KU'H_ONynr $2ʖ@!fu4.+ p<-eӪ_x orG8*D +|\DA#t͟Jo9^z#YAPB?&1НwOA&KM5sK0ю8^)x'Nۦͷ$G\ n5?C\IIiʳ@5;J.Fy/Uסt+@'7g=cw0 6,A\4$&IIP+Byaxbr4/Vb- Z 9XҎ@SނOJƨ=(Q8%>]n_SU( cHE0B*GddbM q~ñr|s5 %aUb(x6񨻩TI9[?Me>F*UTU\KG0a`C͒$&=Ӵ*l]}oRPn R\غ?慴Jo:׻|v">I-*.06^ Ta6!p'nߢ5hiBe|˙%B+n8oKsC&8&M H7SV#~a}l (X:Ta*B&ӮU)Oi}22=)!? gj ΐNiqOK w#cC,\gZ>M'bS* ݗ_pi{+;?,h!l(-XFb%3Ko!go,Z΃ )xVH\7A9G\bWQ͍iz. Bi8wmN?1MYv~/qq%KSf/Ak,u|ȋ0a(}VHxv]Ե+ 47>GMY8ʋMR0R;?ެ XF޹eK!;v }=rsZuH<Ѥ='hMˤKo~늘ߤ9ٽ&8z5C9x=7s,ӥj>e(wޮxQ.HT  J6cf(2nI^kK?,HxCg=an+K8W\ i)XR`AV4r|$0D*X#>pc -EGbI}vf^')p:j/Hwdš4vEh잨WP3Lױdn-//cLRoo>_۸`{Q#ݚi 1{X7>IK[]q5:|My0B02)tYn bWQc' 4cBxD0;W e궅n@]6|Cx"L6OT[PoV㑙79'UM9(KIٍOSPI{*mZ+(,Er%=#b(zP4>GŽjs#6-9lzL(ez$~D@/ηc% nxE4/7" }ʥOY#9J/iVҕ Vj[<+q0z☜WsZ9TB2.Pzg&~ѯԊOs\D%F 1Rռ1"ÃQȐ:a~>x;ǷFEEG&B{mWw“պHn *ƄL;$ [gS^[r 9Ru|.?|nڏ7JD/ۿMp_,Z]®%3 UD~+^$2c?"z ‹:_f,f̟p{ӮTC)]T+tv[-4cì0{ ec_F qoB;L!1>}5. /qAENw1q1M{ʡ(.?kB}h}Eh*I,%]>%p0J(C`˲[4I@|f0,ȰMR!葴|,;tZ[ h?5-y> z숦uc\Mu/oEYz>0ᢎiF4tuKO+uH] ;Ik3䆞zS;F{>$/O_$HYp`kϵ.s7U"Po:5Qd7kپ?h(F5-oKv|.cd ,Pe7_49BD\³l*[M \}~'@bWWI :<ž/qk7!-o-HN{Q2 +1DJ" - ew4vmڸ#Æ9 F7DH_q̊GMT`d•2پW~&:Lp>f)v;w,tZqz*Gww`qg}+r㼅g (1.Ah*r ]CRwzTua'JScf1IaV f}FzoxA5wˀZ뗰 g:+|z4{;Us)E!ӁNH0o37 Nm(ٝ.G@9~y!]~^ꔶ4z+7j…aJߣvr፩X [v~"^:c^Q`MpH"ktL̔@qh0`Kυ2߀JAB/ar. Kڔs/~&TSKO'g 7ZMӢo'ClFUQ܄]:z;0Q>`?$nWN<!p ?G`mփn8f7Ix$XN:8f:[ 7I.ZAzl__H`!D`ܷm]y5P錐r(Sߨ`67$1XfuW6+pg2I."mr _a#9_=2V!Ii_k<V!g{- |dwLga 1,UFi9 _\n'H&p ƸI8ah6P#WiC]-em}+\"*G#Q|u$B3;r#Z( [/zj V\I'T!?5G.woqRz u@70[zU%t| Qs)>lKx ;Jf|Fn n'.[q#Ɗ¥[B:{GtDM%˻BRHVwBtaZzVy1j|slS\tmy8BM;H+'YuVÊJqr"Y%ZY͐Q4VfMb {qFvr X͠`{P0oEB<_'%^Z꼶gR//& bd1_q~I3 Q3 ;P  PZ(Q yM xO?NH LR5z(l24GE< =URA>D7)ڔ$?1f_!@TaP@̎n)+ r!10F1, ?S$p}uUkw R5r >:Dz4^9:ppx3><7E|EZbӪڊ1 ,ˌ2Ob,`=k㤅wՁ۞2lrim#0HᰵGȏg5a)h}8A1 wB<ϋqNg\iIwp`Uԇ.{" S`AU ʈZeł BN6euU#]:Gc$VFACBM2DjVX|L{bʂ-`3Njl pZ+.pOWĔ7 ڋqP 5Hr7J Du~b+u;HeDYAU6A%B4LjPp^zJJBz ǾL ͊MDrh dBKd5PauqWK(>y\`VQ# 'Dv4:FR<.7k$"\h8HH!M;u5Ajxap0qx (:_֥R9<[|zW|-e_4`D6h-eƍnGφM;{~;A~V89c0C&!f\C҇ ӌ1ݥa'A`}?x (Gz~{(8| }_#Yw%c՟g1(R?rUwľL0^IIN6?)_8TПԈh}td:BH=}9&Z1Q2r@N.姤7]Q#GkDԼ+fn&N}Fbc-ҴGF#b ¦/Z[yc?x(膖C^Z `iɄcx@}ƍ(%а{&FG<[4ktOW.]^(@\ӵ>ڥ0իąކ|O jz&Z(!qƍHPҝk{Fw(%YkS~4pac2GthDOZvP18*>@ft DŰGbE\PMEFXkLRF&ӻ˕@|LOyZW[ɝUwE)E[̤HޑC3壟iC3azo/ t9r@[2ܯjz{黭~YI9uxA"K+r6܈4ݝ XȥhZ.y Ehj:$B}fh?~uqBl'^`m{[@i5݌[)S@V;7"Z^EyOb^ @ޫ%XV \6mV+%0,*KcMPQ-)>`m;ڶ&fPF'$p\N . .[3(Ql?P6w7!(DzvC=t( /Kq"To: 鉌ID| MDKGD(v@8I\%}HɊ@ ӑnow.r0Z[e-Cut!.޽YgO2T!##;<1lbpQFFlw&-|U+tx4t"} nѶRh*!cv)ʡ u~+dcf##f+'PGpaM!У UJAesLHMb!+Hf'6E*QPj; p47Orw ]/ѩʯ .U*~|iFIbecrNSդr pYQPbʦ܂Sm$0ރK8R 7ep9,czr(qٸBv3T"/&&߿„(NrjF4mUU~ay2:YG8 m{_"Rzdld5U Vߋj¼I(ԖrtV ПÛU="JO)JHĴX-E?L-m3`rWZ^gֲ -‰W%M}@}(`欝,ǟkQp1/d:, Ƨ1VD W5RCR2V_*4#&NQdZӕqTW}'߰č=/QQHK#hD :G[PY5IXg?7;R]K 6`.HW\Lc|RTo xT0Lܶ2!$N&Ths _kԶ9 ̇>/2=23ym)lMj _իwd`XCǧWvBʃWOb"CĚ\$,IX kb5ax9!?y9 ^G}{`@bOD'F\'oc'%fz^b@TD)p=<w:AS^s ]3W ۰kHqȟ`'̈cȵ@9ARV;?/I`+\+OhTT )Q!؀$Cw$̈+ȿ zwr'Akv{ˎՖ?IK}NjH^2M/G{u;ZnrPs]eEmz+-eJ@.(=FՆH%P1Nd#o󑹅9砉twϋUsYӉ:!As LN ~?^@٤'ጎfHr+W:Џ1p\wP>ס\$BNLyc4H=cFҸ7aGK89uMrF_t.a ,K:MtV'p\`vg/r4`4trfn۸ Z8'Oycg\4!cdkKAx_B>~i$Y+Yt%Z3a٣{T%qطEѤMRFn=P4`584U M!Ke]! [CfcrcO5E7?~tGr<7-J@$_F%K{+i &> Re/ "@EoW.@ecOC;}K7<IEC5=}0nuvzx^}'鲲AYTs_9hɳklz E1}Q=BsS:j +Wgkbr/>SJB]G8LjTWD0X #1e,{)Dd ^Q.ݹ\((b2k/B~&?zbHr8#SW{FsšTjR_ZȦAR+(7Ⓠ%1B|A A;W-)3mah|4H(}#m<- ߵLaMg泥"-=洘b/b\hϱe>: Ҳ)/* o'sUa/&8q.]ScdtoFn>B2yK*VY';#aq JpPFVFTs=#BiV.XS GgD ٻQc`oe&~h} #U!rP#/"@p`Xd QâsyH/4V!9{v2BL/ 1O4Bx7$j(TJ@0~̖`{Apj8~e12qG "3hqR@Wn}:օmPxH0ԳkbRg ֑U KeZ[P~piWeR~Ç}ȪȦ"cBo|Y^~aX:@\M-np o^ 6/{Z` %`2 [ef|u7)lj9B#&pco.̌:nbUJ{D~ PcP4ewL:}t;E[Jk(R.s. p6l9D!K鋪s%+{aF]tNha@Ƅ1N/ @@kS@rq/kl,B.Cϣ-5LS W]lOd%̻m.(htu.QDm)]Q?KYc3màVp5 Ie0Ml?>)#{զo~GiD&0U8EmރkVEI \7:Y5w~zBSomi'jě{@3guܤ#Q 59i$0e5?[ O,3nb>MaCjLfs }X7A;EI ,\4@/Q:͉hZ Sa2~<|ڞ Bn% U>k)% j$U]w24bڏ>M&+\lcv#/*7HVՆ=T:gvoR=w%^lonvivVMH1ĽU3L_UeŤ0_eS %MHӪ$2Y%4UgcxY)Y|N:գ"J\TT~F8Qgyx ֆZjMURcit7M{ͭ@_SCÕYڝ_Hgb,ʬQ<_u(0+ib`,)X/t?UR#U0\!mP:1f ¤:[\Yw`w;Hb" UZ}Q:3Y ݟf1䫸F~"a/B8،=e9z`LiDuypS5 < _h^Z1۴E 2yD+%*ݩB :3{ߛa/=8FX'7@]Jolqzv8l []AGPYN\y-=sGkizZ(g,γ; v_k0SxKI>O=Aw;Zági6c1Xs~f#x@#ǽI1h"~u `9>Kx𥉧c}@cG碚M re17EK0;OI1ksa|VmWY]Qw˄AځWTݙ1+`AU]Odh%L^G'G^$]Vp-CS^e y&M04ȣHT Ip9>J6')dI%>jzƃ} g5CXL&-(\MмP͊յQvp(`Pl6J_5.q'UX %ҍ ) XXmU#oFRoݟݞ]j2$]'9Wr7;XWO=aTx/> OTDYGć0eMSB-K-Wlo]7=a+VU&Zf dXmå(T[Y5rA>uDT2]1R/g! 34[@ S؈hxH$+qinIV]:Jb}>ř"`*^v\QR[=BF0y=1M% /.&T)$Nǐױɇy]k`S+k@53afo/K2ZʈAI;LgazZ .90bJvt{_{Ġ|99#fuj}Q֜K9}t6H/S: EVZ=>c ];XLuH1GfdtiES=(sK__,dz1*jۂh2# ]7^K3>71[SΙlf<׻+.vOVw;n=اw(:\}lUyN_xNPJDK`$[q1RVbPəY$7{W# IQگx+,<AJ,P̳ o-fg~&zm h =/ib+XR(rN3^c34gUۡګp9qpp 𲙙yG9y.-\Nﰨ#k!.pfk{߿ݤyYxnNBhHm|U]ع3kyg^}7d"П1\Xgh›-wԨOA>-!^prN9$kYT,Κ[nt0 1 t0MӉةWUWpN04vk`jǾY? v/b)'>ybzScxmiTV1ʎ6RLKΤHi&.X3\.\c-Vq5n_+:9]0mIifg4.{\EolW/ɔ|* \qL r>I^=rfH,Iso8Aԇe.|@y~i5{D[ACNk pdEgürDpJan^,1{Zђ+Y2kPG'k/ bjAblQsz2['3M`DYO|T:\4rckslkp: ;ֱu_ɔD￸@mѲ4 cג}v/KFy-Ԯ$DT&K])W aNx":?). HQ)\iN{i<0@&aґ^J(x}/@ ę83l^.m_=\ƋŽh+xTW9D5߀PҶuZ1fAE8e#vT En <痆PzsGi}1kZ}$%&4ޤMlE'?C 'aغ: >"TL#6L3$Q 6&'+(,ܣRc kax5?J 9RobO.[3RnzmcwG e#`TDhу1X)q&mD2FȌ( Vav~AZ5%'jYrS''5ܱ۱o{5ad?C1RBףQ}>IΆP2.=/zZL2uyf $]:X̘݉޽O;Ǿsllj':3[:W9(\ dfiZ Q;kiv3%b̔:bh"+>ImKMJsvgغSINإVe#vZzʙHJ )'|>C=Cst3gGיB$6r馉> |~ƴОV=Im145R'`'@SCyA2+nd=>{" ~#>[xb` X:T#Q'dYe8~mX7UЫiT9l8tr3)="1n+} ݒcO)ж*W(Ϝ.VCIPSxe}e0rHgāݞ~/ yRNZFf2(R-!kx8T+^2H N\\ 1UNCbDtI-|B"pю}rs-o2B&m( A}Ě:Pkq ~&3 (hg\O'Y9ÂAX Nrw2/{fR#贰cL[Dr oEFTڨsڂ̱,<LjA9_T|֜6ixG{<ΏA3/ sp!2Rp$|CO ,S`3]D'gJ~RX%z HR.KZ9v9U; ;R&Q|Tp '׳3r A@}w\QhQl+g/3?fϣT+\B-ÌѦgzj0Ț5ђЃ={4ASQW{ڞ[H8+CYlgxX?x+ggٯ|zZA*JӘOispQfAaY#8Pj{B711A08OKqPͻ^zeI%xMK5$EHsSCEmj&3l7r@c憻p5 ՝2Xi 0""H}U~' [HFQ.]V:C F>Fϴ6ښD揱/}1=+t6AzFXQO#E~!# ӊ2ga|I;)gh$q  V  Ź޿`n}nYyTN,~?۵UsS@j)e%\֧+yȲ0GOH% ~Mnw{r|΁[NZEZv}+Ψ"ꅸ"_l(8o@ݘ,ِm*C~ ,寊CpUF$QeL=r&` 5 542$I]"5~MbS`HGY@9c5Άե[F-.8 lޓl.c= 4(5KyxMB0)8^LW |u.jkdJrX !SkxSٌ5Տҡc@8*QN,X[ i:!9ǟZOh0ӬcW[ֆtm%D9lMn>Vm9,:qr@]s4lދcll[Kg.E'Ybqhe2~V1u lvJ_K,ldˆ6A:ʂx 0藶m;Pau@Y> 9wSpoժx(oz}~+mZ܃I2tԻ$}&Uo( `_n_U ,*7RV+bb!2;6'(niMP9 r\g=cUSx_Fn[zԦi%~U?587-jO7x̤b쪍l9BtP6p.p)Rn2J :JZQOQUsyaeJҘ!-SdFK9Tl.fh}a@WrI4CH58yh 2Y$ohH.?40ذ?aWd5oW٦ U@1tE J EH̹v >5xx2>N=PEbކ^ٓ9ðu 8y 9qCadAj &RA?۽+|}S{c mT0'AI,"jy;܎2}Ud%iuAC¤Z{)e艖"xQXB%Dz$<@,mlbW`=GA/M=IfKLor?7! @ vlU0q8v7W?@W$r_uvi>.g,&ps%`vН^f%;Fǡ%tE: - ̱ր,fIPwe4iqUzAE"9Lh%:څ˧:rh{ V* CgTQEn oTtOC1oL ~ `,"G<ƾppf.z#FlVAZn΋ȿ]S0Й0&TT˪Cջ,sT@ã{KT.rugrQ$VVb #"㫸B]qrdaЋ/TV[9 )ۄ i֤oeN#C,{ l4 )Z(qCDg[WG|CfPpRPcm 85De:H-8GQor s2М&)|;YջArU\- H8^5E/'a`\k4ۚ zfQdHhpXPMx 01Fa?h{,lW(  [cxvIޔ}6͋diLk2؍aSs߰=eF㾅)LMu"fYd|ut5Ug=4sQT1⤒oa'n>\C>\[u| ~\; sjd e1MXMb6LŽ~,,#Zǫs5s|Z&{UB%&Ct͋~OFdRNU4 oرoy.G:vڋ%>0Sg%Uein`ϑL=E6|igVm,yImmbڶKGj1#x }l(QEfP"rm a(lwO^~gv {hAN5C@Bcq-Pu2>ȱCJ/Cuй ܘ70rp1$3dɥbRQ9of*[lQK>"4ɑ⾦+}Q~6A/ܒ+upmh@kCaؔxҰR:zp 5Vu›ߘr$i@&ֱEw:'$ /Il%5þn], j?]R/@j nPh q؏y;K;8$5rxs6iyvƗPL $K0V`zDH$)+Ž?*q!IޱZnh0!Iv?zxf -Q7H3t)3 #5V%0־ZNJ8lK1噦dBLa-}j*mΐe|E.g("6Ue_4]I?!} k|(ĕd]8Ig+-jD`cJw|:è|=QlJX1tq~|;7Ltbpqԝ̰!< b`5|t =:PC W91ʸ&)Q'ЊkqQO5$o>K 4*曎I$#pZ{҃~3Ai)vVƯtkbFKU臲G󫁽K+/G&e ]0W O z F`S*Fj0";9VmxEALr2 t*g46)/8JRx}T ڌid!Hk,DO'&svJZʁiZ"E:8]8hZS A qǠTqvD:~`"jmSY%Ts[UONݢ&^ +^YiVH eĈ/bYS*-lE S |,oϒvH{wPATͫ%:S/&?b8|2:Ci0jpL73LUdo $lb}o 8TI_!u3]5PcRO Y=cwW_&1(̽C考FMsf+D4llk޹"AQ9֗{ b:›Ì-BBp]/W;q߭c=Ɋ;0'@^~j fc %Pg,/1 {@MPa!j0䜣:wec|hTt?=yۨXfWJޜ2O_E6r) -2O灚RXU+Jy #^`%w2D芓IIWkZ)#bYFaJ6yF~di}6`aYzAN-kGXmz [jEHY GݺRQ0}. 6V=\?^֬ ԦeHӯscWO5OE!osR{(鿼:IzRS8b>qOQ In%F/b5Tl~LG=MOGu~C kasy(RJZ,eF"6E%2>Bu:a"mo)IR;So [=%!'| v"[my^Yx?P[Wi]x8 f1oFeq#g?<%z* ȔloԸB0@(kM'Ꚇb_mC!Sf.,2lV:wዺ. fpVlƧ\x fZ/ca֊z/,KY@3qPrn1 e1޿~a]-{ ]}Phjd`+%rTrb~HӂF+ t V S^*Qr FF*_kɣu X]|WvAdFw,g폵 ȹ_s@Pܳ@x'`5huٶӓU/Nj3va`qzhę>&כtsR@O92xn1XsF[$9]Snp7ET!VQMXuZ5s܏,Po=SbAxD)Dej@\"ϧi[goŒ["WD$gKշWӸ4E&Cʀ>G-3]q)g7"UG#lI`n>9Hl>\oCdIaIːu`v Uˊ/;vH`$NHc4q?˓X%Ga;8mP~%kg9 p?2?묧Xuh$g.ŴWV= ,*.0wXlIB ftz#䢪ʧ}kcfsyt WZIKJt!i".4^r[ƜT&VYhE:`?RXh5kHJ% v(^c!~ܯ覵_"<ϻ*rv7whg[ծ;@L,K3x$2ST!P?Ͽ#?:A3B|G)S vatmKsQ}Ŧ;F[„]pJXRZ~ ^"']A00?RJU)?~A_i`^b5ׄ;篼m^ DdjyWo'$=:1/~t7OE{EWg<wnDFZVR^gdnk0?MW7!EkR%R?nuDֿ]N. ;f}|G &| ]!' nt[_}Je9\d^>E @-8[`L_P唨R^)W\!E/Ҵ2=ɕB*]pl]WLv#o|+ku֍3-ʤbwi{yV`5:6Qk_aKIډ#87%qG*(CryP!?ꋝ1[f pց@1 ,,X瓖yNQ{@j̫]#i .ګ\[CBS!9kcyۍJug&Eq-MGS r$d̒2toN #Ohƃ̔H>FZHzv5¡lC$'n˕Z "[ffI\E8>}fǸ."֘6cHĬAئv!ǭŶֳV;m&#D~rM!z~Jsf} %ysBp)ee)F땊(4E!R+X$d]3ssBMZy/ڄ কHD0 쭇P3kZM'сc/}ԶA5&lW Ƶ۔phő2W,2,nKl6t>TX~ gh2b7UP"H:"' ~ʼb[%͉z"=AU1g'K.M:4\SkdfR)7E/Zѐj{e nkO`Fw_Z*s`ݣ۹\|M6nꢬk,*|cϱG.8IbGy$V6Aժd!oE.MMjrV7N>`|=(:K-PXRlYoE&rE߼ٳCyZ+$sa#c־Ʌ;Y1/EpϷyێJCר o|?|xFȆQ#7IUC$3Zq%tgFJ:PwYys~Q|VSH{@ެy?pZMe*Mnʧ߉e+Bc_HJƁZX 7#B6lJ&E SVZdw#׻(ʃkl`g8'݁A_)EE~N}$n3Y*ӕ ^`鎗m2s,;/Xd9$2!5#. x_Yq,ǁKŎw+,:HgDR 16ʸ-C5aZSmAh'lc`9DJoU?qk:OZiPho fF‰dQboOT^ a"Az#b[!̽ȖZs̸"irHi^\ՐvӖz%lR n~ t ;kDHgf7ܘwϝd,bb8Fl|mU>[k;rUt5&Օ `AQw6 ؈CK8e^CAfҬxȥb yo[3>_|1{-r%|c،םq3{6~(gDH-/#%Sʯ*x{[g<Ή*gڲÎ}hp6~#+Z>d?9+ *bYZubGumQuv mM3x:Hқr47аz ( u~*/E?pVnmA|.A[9eo)- ."ڮ]ZV~)/6r^GY9л~u7!\ym`Kz"&nޖSᬤM0Pp}YB*,R0],}FO>=kXj` U~\Rn!#ԡi/NqðB IJNpչk/oYkKSM~ఎv&3bn|g1$qvF𮳞_5Q#66@jIt1O5CzBc2'2P8Jv/5xh+v_2N8%3s4/w4O^78fw 7[[7cB"eQ>lRbzK I CwjK*]?"; MN,P _zr&G^p>_ϕV(~zC1~3,?w4pu5E xQvɐ)fb*#}ue̢yK-r9 ,>EՅS" >Ѿ{AZ-hYws&#y^ ;]|Y)KsKbEh8a=!!K/E 5I|w-У]pJ:r`>d:4L=l에z1>1+ԵRLVVJ^k"4Yf7䖏n 6N;;d>蜙S>]ƣI.~9V{`ҞWom\X<,fSW?DovkT'Nּ5?H5XU=3 8(.JJnfO~frǝ&~bDn1ޢfFJ#g*FÜk6 4: 6yUya%˰+BoEڵ(Q4! /gީ:y^Hr)W9]c T"@Ӆ#>i.#_4y̘zUH@Q4A [w[wqέ)Gs( -;3rx";~i.6iEΘ14qD2?,䏽05o[;g`^-P)4dѢϓUQxKK |rj7|"6&jQ] >?ՓcpLMNalWiWS5nK[ĭ 0$4SJE+˭F{̩*}_.v|rUh׾eezlw\MP"OR,"Emcvis7$byG, sB[˖M`qXU0=_ژ]*PB7LpI[2pFJ)10Dqe/[#R۬/[d9+/ ;X3B(ʴ*A}~E :4mdy>#jr/PE\'lCuMo<++ !r^U I[=/Srނܢx}]& W3/F׵"pj$qpZ,y!J\fdGfז9HBFLZ=W\rz̴8並OD]ގ[Y^0X"pQ) ASäh7z!SX 2o}d>nL|]Q8(/ɒ683zLjq\oX_[Vس!W6-чkmحZНM(/W,oD)G6p8(vSpC~C5).lR5U,^"ðpLu=Sl(즵BYEP %:ڼ\[6AYy%8ΝyWÌmVJ4[tV"l`-^?sGƹ \J܆(FgmlOe7 ZW8raY7AnTl-M}6WnY,LRts_]̖\ Qy@="vZSnc:5BNImwgT`jlrygMwLk7h6K Ů 0q?mb1GZp솿-jR&Dؠx'>BߕcUo ?@2s Lg3̝yYrX-O.KqfAFv#hG3G.Mi?T{^P"F;NaG%[Ò9bݵQ@ʡfi~6uL} TZdv)V7o@;VO|5FCB:a7 +bԕ2n6sF1M܋נtE^ Ȣh  c-gnա|ׁQbL, jrP[.|I\<`v #3U)ؖ[n޶ZB/6w;S١I|Zԩ^!v犃5+bЭ>RX4UŒTW?VNQ֮ q$pyFM=ȓA؝vJ}dEPC)n@\;pF*ޢ|r;(FV4s ~Q:NPx;HI1"Ra9r ceC,O=xZ24Eur? I'Hl0'du>WI!M>$j&ڈl3u:_}i>ÀLJ#,df & #Ȓʀ^V$Μju?Nlnj?N%L:4O~b',b]>Mϗ=#^ hH[d w?C5& DOS[G{4(' ::`M*_'_m7IZrUs.8csF,5!̴7}Ξ^f:LD((GdSSFJٻ_j#$Pjm&;J :~=ǴaH,]i11 wtH(dp]\6w/Nne Oj:t~!R ۝LJXfH/$#Ƶ$*E3;D50ɦ!w))@fb(mȏqwdwsM*{] ߼ Fxj_]-VGSJ*(|1./1M}X4L`c|}mlO|rxա`,zVh6qV_ \rWRXJiRE9~lIu'#xc|瑮(V4ڷzcWcjׅ6$TO#J謶24!9A~@rsAds[9У 38&K/Dh1*O%§-{|e#T3(.Jc z j{lvcva- WdXqj b˝Zvg5ߛe'b2C7g8 XxgcPWc`v,LLeuVy/a4ED#Og Cb5JŕCcŗKNnѩ/h3&__ąLz9V=Hß~f7T"\6AX>/XއQ}6OXP -\pZp8`v3K T5rM@4+>g-". ,U+Ktln(hÕbKd- r_y$+iHu\TL8@co$L¬t"'!< ͔]\P#H ȜO?_b4'eD򷕦[NZ9]b23C[:/F&+8-1.Dv*f<ɐȮ# Ukln{@!PXIkI88G#|Fhk]\( ~'1IM{ c "7#WUIs?6$QVDx+7̫M[)mtQܸS)*[S+tL2 5ϠJX/66~ۡ\@Rna|+Axm De5Tv35!9@hpquC(xgy?-[V6_Oq(]/ q?1dF &s |uw $ ؜}39m$#,cGL(iSW0j-<~)̙Hvѳ|С2{(҇\wG #6Aӑ| G.E'~sY'H ƙzDdb >Bqp:Tdp5QTK2ԔQeW@+b8иT_Ц ©PϣlVv%wXA#.I@)K,Tt]`pBsQؐɯҲ_75Z.ײI>xx.^GDQR+XEX:nh=G 6Y1ɼ+U_/rQN zwv[WmsiD(24AMwUWf[G围@gk-(&(bn!׌j|DRz^@o7Qi*ԛnTe( 34e,nšŒ%f͹Rz+!W@Wg-_&yHX{&6' ~x, e\~[ɮm7/ \~*].A'.~)`#!P픵LVxN딑"8x+ dS?1un0~t'Xjϋߕ9[p/[֠i]dx@{f\E2/IXzb9_{Mݐi'~__9 ={b_Vnʷ0KA]yN_LT+Nb/%) $U穦7y;FeV0ź]F*{ BdTȷXY} !Lk}W3gȱכG=@B9'}NXBt>RZFTewA!eM8_xHffJ >`a$|YD0W`s"))kFRt6/wn?@V7ΏKϯ&}@ Ulx!kێOi ^ _OSz%z#oG1F|Z Bׄ#ðP3Ga%L^ݛzS7o]ULֵwM%\sʝ!PK)։tW鴦pqd1#VduӠ %%^T"6M!ҽT~ZsAB|t$a@N/ɬn\Ux幊042G񁙞Z( ^W/Š) jrҗ:@X7M\S+4wgwa03V~GTfp]yQHh(xhm3$Gpʤw,iң> dsQo/KNm,)/x~jj8TF7 EȗLҎcݩ b,8xl`’ܲ 0 t)i=DE<+Dd,"Y՗}Ϭ:mGJIaݎȃ[ <'N"Rb֗gId*yobНr(v(gOIylhMyq %gu[ێ|`b!`¶ )rakѮNCIAWӀ2^G5S@A G/MϠkuԾmfW}-WdFZĪVuZkFYyaְ#U&9uIкk=)B 8`ЬҵGb>QdW_"Vv_Pn Ҧ8v=R$* =ؼѲٟdE6?ض̃ŗ $q9.X_/9N*x5FTq.#Nt{z{tO;4`ե$$%͋=,2*a;-yg#:x~m0[B~62/M$&`lLIet3-CvWJ q.Ġ2n~ VG[ʲM^BE7ҺUFn^)޺29V=9 "Lأ9-9PB5Mx2;'~a;s=돆unñP! 1׹S)Vtgh ^û!|W͏| :H>{wWUeɡ Dnj۵ 6-X7e&NEL$p /s".0؏#>V|Mn(ւn2kH/"#N؍wݔхH|  ݍb(YD! p48oe2+ܪKV3T:qON+ #QO -ۙF06/5seu䕘-6P,)mxefR<KĨn) ?C FfPuaSz*(..dK_z}eЅ E'P*{J ݩ5)Y;_6!G'+R?U+Wd_vSƛPn4"*{5b뵚!PȻ;D2vx\Wԁ>TDZ~_~9%t[!p '~?e>]Ao)&o]o*Oz& ~LsJe>$Hѡ]i__S?^)5lƪ;?%3POΐg8wVB|pqo,Rv2V*e7e nE/xFZ{~pdtxs#T1&6$*XU. :㾓cyHsW:Ѽ"E+A& ӺGpwڼpb&ރ K25\~,[[+ 6@3h#YshP~y9ܖotmHqջ_TH={c:1^NN^mt6HJr46h0U@KMvY먒 ^ͮtDcRB M$y<b9ly#2sW+!)a+ɍuG3:ߝ@D&|N}2үȹlB q;ūn|%.APW !Ւ/"# w{KSO%S/۫3!7a8&75'3K.qd .Cu>ހs-{E$,:|?nUo!YaqR&x`VeT#.$\HXF#ץoknSK[$~&<9+8+s19Bɬg/?o6ȌS$˸TjJ KfR<)ǓN܌ k0! 'E⠈;P8ڼN&p)%JRjzHwzU{BsVip;UϪuP]/@?(D#/egJOp05ZGRѿTPM[8. ZNZxIklVb64^k6QEП;jͪVmh#qlg^}PHbw&x1 l1ua>s&lzhn?G LzøKdMΥh?*1tmor ERӀ&xkRD6u,^:P˜{b_B[Ӛ׹4]OEs>I!!L 85ޣg&s(sc.W@[_#mV6]07RzJuC`t{;v#pzvbq.4,7K)8Ou,kǙ a𴷳d7sR6倘9JS_p\酱QM> !V}J̛s.eeJL}1tX`L;Y6se\{1\_ q5Tx (CPMgp&t`/æfr_p{"u1"[|B{ͨu,e_bWhp4/!mGƛF`xI#Y#y?CT4$^7fB9!ikI1J=.!9>Q!C/& *Ïm /<%,R1j[f5m`i0j(T,TWt&8HF~9;A,LG30 ] .slq'bTwzZ?\ %3\?QÊzqlωkxЇ#rwͨ65np _bws;KBTcpƥV"ډ(#2i8܂/D7 |qPnؕ piMj \Tԣ٫7vP޵x@pfw EZIKxI1y-c T&NE\U9\[z4#%b+bn%sA]0daEl ЊFWIq\b|>6}ګCj"hP !'8LmzQoF]L@sTeRp/_ q\9 O?Wڈqw, 0i:M. ~71"HrN9?Գ 7 WˈBVsm,^\O ud8Z UokrB|蓗 6ffq(:XE"W fxES#dnx 7{$K֛0~ABIrNZ DG3h_(v'NoeVNmh@8)47vf X|D哈ֱ[O<[.\Q}5n`uCɸSs;.ާm^љzpOT#42Iiw[JikrLs2#(J1O]ɀƅjpS<>J~a6I—&G$hHopAUD0.HRHwp$F<XTB3~M;~c Jvb^ddjrAÎ&vrʎA !& 2:*XUx?4A}k88FՐ$Ȧrg^،ƻ\e\y%ye)PX{#c壚*#Sk7rUIQ0Ϝ'}YO!ee+~0Khf3wI]Rwf; VfѾRפ[`ZoƤ3cν΀/W 6dO:^1BQE.I4YVn4B7.J@n\\"h4PWVxCNKsRTlؠwW_$p]rp̞K>sTkD2t[{N AYT^W)cN Zl5*0d)[,?cYa`'R!#](֢qE e_EĞ^ϫF^bA#PL2Xv8*n0o皁Ƀh 9[ 9!:% ΐ6#X: *O:woy5GAUx*Ͷ˼A XJ0hpA?se3-pH% j\5r6'׀]ByB{m)N#֮$[WϷ1v6ݖT^otLp&yt`:Y}KYv1Uە(K>\Ǭ% `|J)B BҘ_-9k:\l.3HxpZ" QDѮ1u2%ՔS@&>EǸӣ׎=DA+nH>:ߊܢCeMzg."=␡_Qw,zvN9GMz|+{% ގO >u;q{:A'Yu셑.(ec3u39l8XBW`0 yc_xA{,qY?gX6:YzGh*8_^!6%VkBH+1~ӮNMP\v\s@F8%& ]j" 23H b[, 3z^#0,s3]/BaLyɐKX'- nJ>} +;u1YiZp=,D]iq*yOL<պxީvWC}*gN[vd3ޖ0mc/@QA0@Lk'Ŀ7#l&y"G==U x%e FӫY}Gy@Eu=^/4T{I8oS6[~ѕgR߁2/qV/= 2u g)]Z[,-j&ؐ9۔d̠I[È9?|" nή`9Z (4sAJ2?!\%Sm_uC֖FӔ́?) Fӵ9ٷ GN/?o}5!*=$dh; MOuSS(`F97?o8]d ndGɀϞƩN~@}ˁ cŔ+J1lo$8OpYOHwt8XXf"Irh &89H$:0CmNbk  { 45Vo)D}D|Zi25!"Ռ5s k`[{yxua<`/D~fX]S &1ϜBq! t'1Ϫ{?B-,3IV1eI4:W7CYozg[Q+[vg') WdCY)XE.eݒ?Nr6]ެ}lhgdh?O[աQ 30q=rH{V}s NK2?RJǫufIɧ'"OP{e•,L-`2 dzuH+JĦ0o'ԋO+QK"KkKCQr0^ge+\>]Yǂ {:77Ho <4 .$UG4cZ /!{d`y/% N3ܕ  'el)"6vɅw=!LRW!η9M%ˇ T;oy_vJCҮA%y4-o;FlX8 A֘-#Fd=M?[ gkŞkG#lBg+ Y^Q ,Z%&0# 7oǠژ o"m&Rn H*ʛi,MH, yNj5e `fptSOJI,&ٜh:řii'$zMQYjsPԿlq@;qٗT`E?|3t}pUP3DF>>Ҥ0~"B| ȤcS<%)&"^ytޕ#-w~fNN\͸͍O]:sXQH𸣸`ܙ8Dp^d6``zZ0U_TosɌtĈ 9y)G_b vDbp'^. 1HX@ Om U$~ ~EYaZc R!J/ pwS)߬5G&OIJ[m`90I%\QZN0f`tǓibͥ"6)Y']Doszj7fy3Ҁ/s)(?T)C%Y2g/N驁SBjYK![0" &6l/֮ O5f$?Vu@+vݴAH!;]}j,@dg Ihػ‡UsV+z*Y'NF5_!{Oe;fVVDHԾrNzF5IZx[ . oivDLU Kǒ>:kߙVpF@IŞ VzIl-QY)lQeqze]j c3%&|?f!DD>,5pN:*0+K~x,V*H&W^/.|SNF̓sxr꤇nG.)zbba[mnRڶ3f1fuzHA0Iiu:A]K\́QZF$ӇLĝq^P'2~?KK#T$R gK\V΁!M|QhnktIqI7tR3y1ƀY `}S݄(%x#HHkqi֬rY;„]Yw(sI ]s]T%ր Π"uX瓡[WJ%߬W?x+I&tZAp9Fφt*n&"= ؋J3߈jJiK ,$ˤSNS z$qJ8ut%a(H2hp\qERKNK_R"F LV|], RN'!.tK`Z7|zz{C еOy97t\۩p儣 ѷSe65$0V+Φ R7". e;VW=TYJpS94 @Ӯi ~Ǡ>|I1v!$V"r#jGBCyxIKLN:U@3IV4Ke8)M6 Cӛ:Ϝo]$Jrx-{`= jp `\[K\u$yQ5Ar0&w|nmPECYWdBA ?oO0+)d}:Q6-icPŅH^ Ͽ͟gB^ ԅHی"d>QbyNE{`eC?u&U!@z%+' g+`b(DY,W V = 6A;]-AKț=  2 cYњM #| OT  *2gUgi@0O¹jAk٤'L1WzY#m%!lsƍ/Bü<>n_,S 6S%QGVѪfGYB %-V<؀R p|.6Lj F#M*V1\үÿXT"~9OMhd5GV;Va>x6Od޵I (sE)DzZuV?hwe|jhP'ǥ0(A-T9q݃fĵQSVW`1`cCW#rlI2;nv@ MYl&*1=W #h \BA~휀vf(pWXA %:5d sܚ>YЦn\k)L!/sGb->wOpaJȁ' ܽI 09jw0O=k$Bv2ì7] gK^:ry y<Ә#<~'Lk)3"dˊܕYuu>Ox lfk94PB$ȗW h,e[ 9t~<-0Ȍgn/IOb}X Va0=93˃R٨k;#b0B#l3MGex-36NVd!{^I 9'l<y˛Y3 "M HWMA#a>Z oY%Bءf@LcM)(YLaDG+A~]tEw5<)9Z6s1b= 1~ipG<" )qI–٠= s,rV uU^dRgqUc{ȄI"_g/~ʅkC!YbJ{O;i9<`b2#x7{>8JPV-BW M:HyjY/pU]Gi0$5pZCX[i4XSЏGĩ_rH(.ڣAOxkhʨ!` !SjN=6-vaG%y{GnmUhIjEChxg9ቓ<1ˮ- #倜fXXr gO exvUp3b/Rjyv}r-%80|w{[凇f^dtKc\rrN;g.I2UOX+1l;phIuagKM2gxl0xaA;Pp6'^Ǧ9MuhT=*,<(ѭ<aA庝GAI!P s}\un4ku"ֲMx3;wΪ#ja2VpyWkKp(N* `R_6jx.˵a׸9pc90yuBV kăCĮVo} abL_ecգe?[6چ̼[S+bZiB??(gıadfΰ_fkd|ނeTH T™نjUEhtqP0AJ غG?h?NXx *z u~e$i+4db/5GLPVZoФgo`J)Ӱ/8,sblҍ /=H [/qrhݑwU[389<ٕmJWXK\CB X[Piȡu._6fiFyq띩\(ESi:Fe x$wy4T`Ui|R2̞e* $.J3_'7S;"[smi4OO[-hmf]-X ތOݚ] p7ngWh'r.<~ p#Kud/Ԣ?UWyվX'[..?KgM+st,aRh<>Wk4?[ѡxoP)z{WzyU!t*f= zy{Ol"³޴w[pMkkz쒆i3v&[U f~K3p)-:*d!F&z⺸wZ3r`,:i-_ؕRGJI]/ P vsOٻ.-{(,mp fQUK&宙Ao 9oRKn+^o[mo0ʙ?FjA zpKP1Q2ɝm'_-־xkqbc<:Z~Z7aב8QGlTk1c-N5#jVrjj-z/lkVB/8ߤ B^k4Da̸SziwClUeM{D#`T$b`O24>+[&\xz:E1!؟b緯h} P@; m&1DM}S{[Dj\>8rsCz1,/#}ztE?h×tn3Tq R>*18<ҔQIjk XXxML6DP 2vw{>sW,;Sm"A.nd—)aքZZJbB:f0rV:l҇1!&v˹UG%),nQzJl|%KpM5Ķ᎔p\b‏B4frdɆS`ǝ'); y=}^rAc"V~jD Iԑ 5X|F 46p)'Z=#`u!Mr:jro/ ~DH (4#zG!v 'd씲݊#D X}g {NVxcsg5ּXɦ1\w(<4@H%HT"BGL"l>,k \d4qAiE$Xѵ!P"ܠ7bِOƋ42Șo{#)e <+??Db`gJP#qݵ0$ ^@m3+0,ilb!_;vA} [=kpgGȡ?sI^(;1m$$ڇ9>m2B5u ұuH]tNlMd0 ;jH\sa7*FɭZIkq6Z[$zqTçS'Q:%ϏbD~43A4[P4"xe6 (>kЄ\"=WgBXy1 >D6Ļt'2ИbPx|b )L}g+An;Pb o6#-]Z6WO*Fhh0hXIHOPKI%gp}1{A]Gz8受}G$ljCg8jI/ 7VC]1%[ FrLkIedC/+yf$=5;IR:gGn<@0J_$ 0#dtl"?6xCOr4qxkcRU=%~wL X5xqю8 He㏦HrB O+CN )i~q\?f{_;VqOWIF3HMtQ|Nx. 5JezAT h6;[ɭ)lʨ0( qII)J(yN }b8V i *ה&~:k`@-?h6 ̐I:4V 8k:XLʝE5q9V05暀oN2HH-Ю %7pX5ƛŽHF*xmOQjc+;+H:N(hc2$xɩfhwqR\HъJ~#W<3 UНc"Rb N`P ZD5-;YUlݳbkG3ַ'L6SFYⵌ`5ض%va!s7{HeDz*GElX'~ _E^&Z(.=O'teuviyeHTk Y$yXl'TN a()'4dm ?^VPK=[LT]&UxCHk ٣((3/U1j%NtAŅ OOU!偞rܒg  yΕhFȊ:E=uwF}*5CǓ9lՙEg<:ۣui [,Z ~]νL;6Il(·I|.D'[5F|QlrK+bm͠+{ɨq_46s~E/HĦ[=>Ve }EYg5TY3er[6CuR$8#/Nzs?>` 0VΖ/1TiFv.|f V^z;h%b^0&*f|%~`OR@(no/q׃T"%|e]flr1>"y֤NJ]& 7%fw+a {D,8MA|a,pnWؑ,7A 5$8}E54#4Ř1@mB!ʻW8ŲN_1x1<_]BEGnGsoX ǏwtTxBJ9AQ-\b^ehN)?B>SpxVnC'!T:#B3Cr z q>Iv0h]ê8h+1!#8eQ^?IkNK)q^bØNFbIYZFΕnJM5W=7r*aAMpq/~Ph:u2;$3EcQ%xn=-}H4dQ;f̫RmEᄚDE{?, ow/7RNc.I g %Ie/ftwxW:ipyѪ)9 > d#&/_e\I,afG?e̓HI]6 ,jgC)oRxR2=9uΓqH^v gW] w1T\{^@v7JmpWt R'"o䋤N] @;KuĦ#5ł=Ҷ^(OSˉcZq,D+g8P(NMuF{+VVl%ݶX}Y)V4c) 6$W""qi {|q A *^J_|ɠJSi(t기1lJX,Yu}A`96MV d2B\wbz< -q@0`MxMfdC*c;8#ÑQҍ3-yJ~ NJ̆3p67'fQafD(&(~r-[&<[]e^~1ksS_t̆Zvoʪ䓁j3G~{̱M[O7iI~N:_"DM )o;n]jIrѹBq=FhȐXas_QG9Ehj%򞸛5 FJFq/͚!喪c]j[wYC׏أYP  a!ol!5,4쁹X3|ZfI!A%"ΐy*g4W v>klrl^=Nn άn;Lu_߾oh*23\ջĘ+5P|PDp* =ךGz\:k 1El}aU(ք+(tum+ 0$~2`ķL4bYDMEqJ|8;v_1q]k}%_!p$ 9%[~ ZIuySv,@q˞.oi5'V|]Bc@6$O6n -v ZgCS7b>3<A226{&?mavz=(_eG)< 0:Oǜh)$g\W}me6 qr(#I( @Ь ]h'cH85-f#g Lp "k< iBK2"q$C͕KZMn>N m}BJ/Räaċ22Ly劁 ąb,x7  Jzfj}@: GIOb-7 ]:@JȆB~[(82IE0{1g E{q'NUKlgҟ_5N'U9`m}2LETuj(k[fŞhn2ΝëWp|P &ew>Kz!!V> j ją?edggAEԝΆ)j|2r_v0 *RL `r0kjOҧK!LZ58hGmAsM(i->Ba^60>t3̣S-od*%dM"x7^&-67[7)Y}ͅ+_}7Wi4gG}d( ` sD)w+x4[O.fdqעr/2яͬ5T%ǽkN߾>}=~\T5D^:; 87腺DcOU%SMH؊-BťjL=~ٞA Pg.p3 kD_R?߇iiB-gk)g1וf:Spf*IO9&>{%,yI4s.-Ȁ9m7 '0Tt:[ۧN~ x"CC8. mU Hx~V.R2MUokQD90/¡_LNnmeMBz(,c /smF*!Td8.&p-:|oу 푃!} iví b|DMFQ4߄b8c!wU= G^Q,̎c*~?U)pKcؘ<1\"xMs؉TB,>~u&+,P4w* .d"u@E!^c7?DMn}|:oZ:$pf1]k[Ϛd֥'5 r HY<>1+1cEhU9KcKCr>ц!A~=gw{T'>ۑ=kv*NG셅5} 6ddK{-Cq1ڔ,-9( l4 [],j.ze~.]nsHA[ћ,TP@*-_.T:M$.g04v9Wۉ!J)Cw [5a [ խS\_?>ODZ=U 'f_tVrbݓ~߇7PFWF,`²0(ܩKw9&[Nn}gTwرO 8`6QM5þ4WR{BnGl_K=+J&dž@ocZJ(IW Xb g}hG)*Xg0 \rsa3F~)b{ ՞ /#c Y9ͅAHʼnv&:̮44DzdgB /i<_O |umOo)V6K4 g hQ:3PҀ&˫QȾcvW㋱pEu7;Viߞ4{LC%bSb2{}ą2=!_9 1ޠ25K\fn5أ֢", W<㖄>7Ky}R*:@75eҭ^X*1K:48BE5sfװj6t~ٝ 3]݋|ַşID!Bg `$2^TytnEds=yd ImoJTcZ.MAfc}̜YDPU,tc;ʟ*4r #ւz;LwQנ"6bW< @VCwk=uUgR7r)]1v$&0'aS+[d>KZW":_L/8L`:f EVyI`@o)J`fG {lؼ``Z@lė%)m!A8UqCc3/]^xSv GS5hݓ*ƀ%[m@ZH{ՋO[׏<9+ty?$CpOH{j OsJtuָ)]ASL<ccbL2n&s|r$Ë)0 YdRbfC/`mtbc8K:\{0v_&h|ރ{b00O_xDR*8սe=jY%%^amNN+RT$ؼ #:9UnĠ- c$dVgX?Lq[|Rs")+&y-#btSsx8T rPHUN9Jx&#,.aR'ր_qIb_ %:ua.(/BNŜP@I;#Bc!h' i{5x!lsӑS.ԊW1:vAaQ¤Gc8Y롢{z~Swnv#[#Hʀ %!h%C擓p `GsA(gTl0O,q4 1Duw9:.O@؜k@;8`*6ZeY/iV(.MIP@Xv,>ꕏM6 >`cv䅝)71*@] )Qnr'8^¿h P2S5&Yn1fφя..u<%`iKaxXHc0v|tq~Z! k!Įv-`Er"]SCV=Tc&+`I8ȥoJy&={ DxdZKP+~ݾ/ӣ1 LDͰعa{ѐ6AftE<^A-yW^ħ0ekifg̭&p^{n/}=by?E_=C|M؈-%61=ySv%A=BkW;w soJn7_st~s/vȖ9R10b8z eW8 끷 JJ Iro{i/ e}%?|Àx輘UQFa[\m}>1)02TH&IB!᧊`~E4 ̃ʒ93ڞUgT.H$+嚰I6y^H˖ 7%aTL3Hշ ݗ5*ηqI&8}K3/46uPxh =UX po1, _Wo_*Wܣ.%H`er&*ֱv"y X62,.Ox 1;yA@iD F2>_FرGbze:wk郃Q>b#Q? [/}}]BvH6`q]|a[ kӦ{_ߢO_]) G(%ů$h` - PL\DU>Z[XW\Y!㍶^ϣdZEXכ>"@NJ\ֶWBV^w[hx,5纶s5,̓rے\~`"vunG) -Xk"#붧pVZ9R%P+(B)#0L ,}DWcpBxuaP'{D{vx§XC\f<Z84ZL?Xj9$1pYj 8^vED"s?SJQoG>FZ6{>şup).'Z0gt |>p8`F5daBM.ڤlō/ iGS q`SMYsaλUM+Lۈe+HE؟9}NCA G,'#3XUK "VtY<6E\U.B-YYtN59]sm2 &]<ɓ>V0C˰8 ctQg?9kDS-x@㷌GM~36b/I!+Ie2+mdFRz }83Ds:Ld&8(qyTW1zm*wuJY5%`vjM_>x9 ALXJ KA}`jI eGߌ,jp2e-BR{ox;̑hl+ C҈9ve,u/{k=hSߕ&#ٞ yGӍ^̇مa욌*j%!bSvq_9RÒr眥+P^с7DZ  {'~IW!䃐JBh|RTA4}^ !5hVB'j/Zre n"Һ݇aFt)--lmGqǴ9l2ݛql IHpܡ^G"a`w|jȂbȅf `)' #΋OG2~B}>K}/T@ގ: a aSy3C m/'Ibi}iY!q|K;bu:}r{TZAtCa'ZMx7f_ ѐbI pu ѱ8b(j{zфGAј.lLq*Nם.N `pޥG*-/x>ۈy04#- 8b[G#FiD K/ȵ[0tUCQ"uy!3;ECo ˜?7n YG5E/QDKR>i_)^ó״mP,c &j +> QOȄ+ Ac֝bwA $cdֲR&6UAeD@^l[U1b-&ݐU2g&\( ̡;C>@f@ `2 Q'GrFc$;sDٔRFRޜgPvLQ8KSyv徘y&@PH*egk'OY0I8(?2ށx\4Y.UТqf ΊoZ{eIʟKkKt\rvܻcYMU7cC4mA14աR#IԲQxRl9HjK'L*Rۿp{b}| ;|h.Kwْ!8q|2~}2EkF ySą*Q2zb8o :Msoq,j-'U.3ZgLҋVEH㗺&ՕG%)k)\\+~\!t0i&$%ӂ<5@l&hQQF7_/њ?1R^bF]yA';w1:rIPdpmnW JPtXqf &JX8sO,z?֩kUvLI[oVnq='gg]ڧ:a%3D:k`$ݝA`Myٶ'1{'Э=M{H8E"̫hV~wBCS+է`LvO:xKݡ\T#z_ cJ4]~R#sR`invڗe(Vmʄ$;IR:6OQb֢W7F-HHK5ҹUU򼵝G]9J~O&0QJ4,b ,3 >O`Cz1:P&dn)gJ!ēX!pS9*t'F,lJRa <1Y?6:Gy }P5+oɐCOw%y=Dq!{c%T1d1vƻzt]`vhg:<5Pf=zP hVWT ]ٝpw=%;D2FbmɗH@$#WAj :5@5/ H9=ó*xv`WQ3@*F~S{g3DS~`{q\z!w6|$$ńء7鿩pL9!h_%,3͇xAG <'rOvd-r1P<$MuP({  uBr[UK<3ΒexGjK4i[:J׊)*T!h49!DmJ] \C"J>7v'lRxٓK9ؙ{)"Zƽt2p$Ǿ0Gb(2T]~&W@jAZ)ySGv*/~M2J; tQ ]@o۪}Mv{"EebK=ۧsm){6b;gPZxJq8i"ܵ9Ҹ%Q[QusX (畟7½+g>JǮH' '9KFg|we>լq7 7Sz\⦤SHF.|haInvL͞rdZ l;Xz S)ع{o`Z]zIV=Ѫo*uL q j})+mqg 8[>,xEfuֽo4/JIoZ0N zI Mʢe&PR]p1*ʿjFɆϼV㛤s2ЍS$k< HQ\ !oZՏzu1s< %KI$Ľ~pZc~ZV|wJñhV=& vrV foBTeM^%ρ`hT !ϿRCG1 0j꡿L sD{$ơdžAGe9$}*:խ$+ |B~](܇5pU%ᗵ ?L$ VMZKUFܫ-3#.҄~xQӣ>x.es#)kALC7q7☶?dKfv4G$mA\)Ĭ 0??e@GYhHP#2;lrsF 5zhMBCjyjH&s&"%=v%E|"!>(FW2w4ܚĚf[`O_.iv}|ՠX1w l +^¼+C#?[."o^1!VHDC~Nk&s$^t97QX@EFq t{U_$>p2XtYRE3PH Jw.φR¼~ &P [\炰W8ǚ GfŶv%w{:s3XKiEq t{Y6MPJ'n o%h& oW߂3V3eEޡi[6]lgНm|X̌^[ G yj7˿zlGTlr1{\P%,vˠ:B4nR烌.RYAQ8.Ʋ6vO/ӷVF5MmyS…lRL|1 '#8T l]0yHdu"{AB`΄~Enzoq?ۢVa LJbK̉aM'"Hl۽a;l2} QNZeh<:Ɯd,U+Tu㽻 7ͨA>bx~ɣ FIY}䤌!&>ur>2oA`_{tl=%c,n^+4y >JM̗XZﲶ96)זQ*"0 g^˖e {XA5,NcMU 4XKB$t<P[0C}徏lvߍb˝(P5=d]\eQT_Pw:^abDŽem-SjdBF=sÑ<Ā# @}@V HȷO#JWY KڳGGbë =ac -6 =N>ʄG\q{9I,ebE u*/ru֭G *r;$L1N+?-;ȿ^uZvGy[ٞ;u*kC$Fo-ЋExǩJA{weHߪPY~uiRceLKvWqѮ.~;oZA+%H$h_fv @{(略L֒E;TQL/ aPQו>'K uɏ/AWSuy/FYᛰpcQvv`j]0W hdi^deۥ[:jXSƯB| >Y[;uq7[`n!A9kDI9zMg_./ih@ݘ= C'#"UH&d)`A|lĕk7Obe-:9HS#$eO@!DR143w>'!_{_ҩmA.ܺ8"m`j1P=ma,^Դl(4bcJ~ 僄k޸u%lCbx32*]޽t&=2)缪ڒ8cmv/x+\*J/*2zqSth#Zd+%%Tk,YK%zSLM5.ɍ,G&/]bOVz |Xnr)2$?fBC*T{1IU7+vu\L.r{Htb9R(VݐqkŎv]a*zan~Jz-Jð\Ÿ@5N9l !Jiצfu`G" Ɯ*-v AT*T g)*z$$6#LL (@Z,7'R/]Ny@E~<<=_pݧK)UIEYQrcv:30Cqso' 1,,Zr;khF~"*tuy(FvRp)4dǤ^[7">ۉ WDc.zZ<`OM#Q D&c6{CDO ozu _m'C,ku>ܐ8A5C#+ZqOȳ?AX D ?ު/ N3eʚo)ަʇI Cݓ~8d\e?eL_~qt,iWgkG$3D7fyUb(=]bCgS:*,evL _\2(TM{i dcDrAʧ:X;{9m5@ ̞juHt$,b_y`4"Ϯͱo:jiVw,%٫sIcىOUQ[RA.a{[z>8"7VDa٫t9rCYdr b0CHōKH3v0t^GuypX`(.Zcp(R3K=/T7c ݦF*UsOQ0ޮ t|=o؎{؎K-ŵkUmM _4!(kC'Ĝ22 Ӥ݃XgKF1a֧`Bt G!E4@j̜iR3|_ECNue$C{)tØ)+cַKzWᄪ/m97r"n.F{|$u'I,XʍQޅ]RYIZ4r4{uO<[<_6M,l{ ^iuY|v35'V49\&! :FF+<ozK=/%w[ ZT>bًOi>łT~|2܍XT> 2l3q4E,"g}͘k(7﹣;ämh) +o`pщ>sD&wWw3̴Ps' ti" \-X5l;vӻn-/Ԁ +iTEQc6ߩ h.*]^s߃MIxƇ4![!(t;u`ʄz:3$f4-7XՆ99E2^5!rDؗ$ݻ;䀱xNLm<|QP8귅cHJU s%ɻ6T$ d/%^=J7-7jNt^>c7I>B+ mk8ʅY)ZRl|%da9HUR |C 8 7f}CY!i e|_XL@t?Y*@ci_mic'RHOdҽܾ>eQ 4<^N(uʮmP45T.6-;'L`T"A'-$̇rΝP w{Tr>i^--=kL @gDͣBg΃Hѧ|-7h07dw>bA()1}=2v"nrS☓*_{3NѰV Yr~,Ե $YTB.7aNܼeɏ=#@E+Ķw8WN{ώJ`> qOߴ6<"C>ǏAMk`aG] Dt)v>ƣ91|F©(?28 ң&\k>/ Q& 99\*d 3q OY[sˡI2˴[mB޹|jTՙQiccb8Ahl}iHr xȤO`6h%gN?%\lJyǏEv$m[{hWyhDY}ݿQ&5|s)sejynn5k\ .5m#hA=Lt €F8H6*2>lmJ 4AaU ЅzTiO%l"a(wN{V;^%g&Ms'BQ0UڪJoѫ V s/Qd&EAE4tŗ?K9hԈ]ԀfF+n*unR0],/cקxl=~f bY4 VћR/V݋WJAh8E9dfPbg5+v7k4{yuv1Eqdj?RG=qUb@ Hqmǧ[4zAlVj CozF-@d\BwĔA yQ.IS_[TauIY8~Zk#s܋}j̉HJ]5^`KtW|4qr@:`_R [gM Vytb̽lT} ҄Hŝ0zZ$4]`JT#]D́=o^E:uQw+*Z9 6Yg=e%N.HiLW2xN6}4 gkT$X„mT _x( a}6{՝| O-\V/.N=dmm )T[`"I|j5U\MRQi|C_o WsøDm0M!zv a*~uƇC9o$Lu}Gp PuL-Um>k`6#/|詾F$gMqBdL"u{`EuCFՒ.eL.&g>+Zk'^Lӹ >FةҼ ry3Ne>~P5#j{kg''qHީ:euP9d*,CM߂Yc .fۨrp,:MBNx(B 'qJ]b3g8HLSI3k 8 ෂ4uJz?.IwAt1LT.DYvrZ~ju;ߖDIL3$k]|8@ً\!K,K*TrӼ+1q2^g%QAIGo=)"/r3fw40=`Bsa!w|HKSS&!XK?tY ZBB[V pSq/<:k@E_nJkNIuZIB/b 7byu.hB+#h>F{"Ap t&l0emo 6*(^wy\$nvEڱ={N<ˍ{e6%+Sz`jhy; J7.}Vqf.»R3Yb?ְx8ԱnQR[Rmߗ.ϡ6\ a"'|#K=vSu.^lD yaMrk&={3ay?Ĺ8 Ă(x]A8CI,9쏞i Ja7,CN ; ·7٭a)>8W;:+'YG4ӟXΎ 4!+Zyte.(ވy.}yTV ξu)/e(|ϬƘ0w -H"D}l ANLEvF'S;J>J=|فo{9k# 8yYoⲶS:gB˨_  {2PnkI&LӼѷ*I?CXd!fU7g'|C|,l%A8@uʄyQfJ[i NZ~jPB1Ly5hsiM dT@aHӇLA/x>q!1?Zc3xAk *-oG[_jc/ v6"i.ar$G(M\@0/#ƓŤT"g\NLB>Q@Mnmsv, ϕIu o9iU;<eVg>uycsٸx&zȎv7b &exdwBvtB?:OwIkۨ[aI(3g+jmbܞ#VVc;nzMr~9oƳ{Hfe<='q+vl嗿q+ wK#m}vR59^ E4/ܩ}j?2Kpb3Qe[lRp3 e$&,\="/zm 61*0$ hXzͬr,(zX|ph%Mef)2B3`hgd lJ~ Gk XrCv sMSR Yd߅{Ђ6!bHξYd9z671W؏9UN+f&.xFH!9":h֕tvG t{z,ʊՓSERpKG ]6i`46@ỵtr%v\Yj. ?5Nئ3@DAb9siRa,v ûEkO k6fK]7f+sGog@P!MCe˼~dLH|ƛW7zwP$k~|fX؎;Et"lf[CR*lft8Ocj) %_׫T c1Qz8kMaE~2)mk Ԟm"8嚥L Eɤ;0􆼅X"CnpxSJDC\VQ3 w]X(8ubN)4qNZa"egI8\Ɇr8p!DK#H`EP.M}@1Whm.6%vVH5r[ +H"ڎ_ˤZKJg迅bleEY%qfE~J`yTpNRbc(q 85#K),+*r5IAD{+.=spma.~P U|R Q2.(mȢ2fs1ֹ^ء "<ވ޿ ;%? GzK$lUa3ku1ġ+&`o*}٘Ǵ9(+yq{{a}pU\df#$d݁A{f"irt8^:;QJ*9NjGmV 90oʾB9o'̖߂7P_^POrmZ C%I4f+(%D:UP1<4;4gn#Ҽeb CcsA:\bqgI"wmyΘbt;oMUn]pogŕ] z #=?x/ÊLobǍ["LReR9n%+L 2j&!x"ZvTisڊѐiohܢpʖG^ۋmxW'5el.3&ܬk=MP&=U{~#ćw])G٣^avئfȡXqC,%K"f-{yaľG϶osH1q)}wnSޝ|o_'L9ԛJuz?d)­*Kb흢s&Ě rpVdn,VfrNߣ .67_hQY"rXT)dmGI5с 89fms_;*#6wg|bt7/ j0Q`0Jc^96ד|y_ _&)ȣFZuV{Em١q+sh V&Xm=5Cy. GdTwl ?:#8 =( ?ͬ)]  Zހr w''TζPm5c HfTg=9N0ȎJ[h 1˾v}l@V2VPhۦťqFGEWLQ''ÏfQ0E!j Q"D˿5ꘅZm j}k"߆ވKnp> bUCp 5]g-J5tm7naC/5Em5h֍7;1MȏZ}nGY.CADM V$/\1AڿP_GL?U!lx2띦ْۚDZ'AF39SWAOJZ^Aޞmk! B4a v?\kɝqP4)r]m V/an4'N+|SĒ|m$i!4LbM6VzXHlL \9yQZъ}BЉ4LL^MOw)fNU6?9r_ p:'h&W]ӹE6)1o } 2אU!6g<_'l wZ˰wzn Xga$]giBڛ5佌S%Y)ǰyۆӊʃojPo~Z[rQN~ oԡAέCˊ5>p |7g>E`]vx-{%"WH?Ȇ^vVpVYFAé72{<y`s^OtZ-Ĥkg@n[L̚2 {|wMqâ0`>A^yC_ mwǾI VueeP&to$$U_d (_<01Ú4`ܭG )8 iX%@ 6:,ϭk[Pv+11Yy( W mLjRWy)VRw7V#4ckp9Q^@ ClKץ]/5#;g/l]TzmuBƃ1)\GL1G鬒U>ah~9i (08gxUMwúХIeTt pLa.+ 'cfi gGZYW ^F@\Ck0֍Y5B$/cŊJDq0E1_539: nkTqJJnTO#c-grr=R=-헁NH]/`Nvk7<]n]r Q. O2,Sm&#^UȄU ?ǘc vƬ9 V?n);D,m{|oH>6gp (<~~y 6JX{z.Sm<#`$ cz'D(݃pxXPWr׬Z >ʯ4qYC3YH[yH޶(h^p+1{ڤ-Z ^+o V4`ּE~wef*:lvc&Lϭ-XR[WB{<9s^\'^)dJ#N<)@Zd%J2F.}`=Fځ ;L (oTDNGyBx|!ctױjs`;f\Vt 4謅UpBpvP*0 x7"':N;J" 9Ĵxi,V\e]1@kܹ-ْG h)7I qOTKw&߰8EK(u` rJӻ\ k~ ˜ܼ:2 R 1El6[z @ uh4*=yQML5]k$lBex>JO>Ri6/q[G8܅2P@ߓYHcdֻи.DlHnTY^m/~ZcUZ?H f@μTӑ.MA+_SZBCF ,g3ߧhIN!H4U܀0p} <F>+ dؗg5JkgPrd8R__sT$@ZФERdЦq%[kdr7Q}-:TŹ9;ySi,ہFePCȀ7/Bs8Hڋ'XjylYS[_c]*$\e7 9)`T{ Fn6~N Wc<Q H!q9E$5%>DL2y>~AaQ4§cr\n摖c-Ik'\!ix{(L v,p_,{_o$yWӣ#^hF@cbuHn64@;A(%dUC~TeЖ{FZ q@$8x$MA&PH(LE(_"2HFԞw4;2%pLLQ!u6|֢ Mmsf&MMxǜKpZ>ge[居SkaHX[^SD*LfloIzM[6.KU%blL`-ѩ ZRx翓A=l[HQۙjC5fF3~Ä4u8V\-T}<}Z8/.G}x(9FI z^Ym_1%LdpW%_9њI^]f.-6,lB2N-okM%+?.e48"b\dğ D۶2\嫇΋dԀկZD? LcSU~-+V~{YwSM#6 4Ӕf;R b}Z@}PTZl rjzԡ6G[dOy>vvl (Ӿ-V]4fnوd)k2K۱ c-֔!jGǏ73$CRҥ>I)ud頵iEu,7Naa;ȟ_oBPgu>=NV-;Zg+H]/jcAIX)c 8(Sg͑,&!`vD8zez-s *CpHS3W4XnSc5i5by&Pj=`\B I亭w}3*/gVz%(;cyºb;\DMos#oJ)]%,Q#?ؗ0m>nIfO+O A)ZYoz>ꍋ]b-̅uz( 9QQrh`r8EH9Apۢ3{$uë#K:t CLKU\!9OڊM:*c}Ӥ|*xAe*sF{8]~=˺:pk7xzDd3Lo?wXVXLGb)9"$}i]FOXBMŴ@BZ'LΌ_dvxYz:je/:s??e˶x$4 %ܘʱ{g%e 4ԙ=~FJzf+5lqQZ2yN-Sϰ!'ָInSJH͖uU< ~{&`A+4{DBv^1&![bo5q*T.?|[3 qCFEU=Ρ P0Ⱦ'0"2[⊱1G=g~y5hQe%8SJi !VJՓ%w*tXxYq #ȭZmWh$Re u/c P!mr8aRB p}I_Ҏb,v2=3ǰM,`~80Q޾t!Vk3&ȼ?ҴibB@q|4z}L! "ؖZV=r#F܀#3BY"N -ұb]S ҃ 1JJŷ(Gq\%i "g[Fdf+1lR$a(t? ։oM)q W0w$E$.Mdnn<܆P)GjcS }vܽ d2^v>Rz3cFBU_lLȝTiLQxTe:,**I3`0}asbn,TY*N">|ӾБr)u8 P.Ԅ4i!AԦ]ˢD@Z5eVPS(g-7xUx˘/=w x#?ix{ȎJk"zXd rpdpL'aV@%dc;nIc EYyIm'-1$ ݞ+e tggL+20/^&#oJ< By;H6YhV,5Ս#c0?f޷*I 0o {H~LOrvk;E@>؈߇JO8 >˚j~a ]ZXsY/ oIcbp;bW3ryP6p-jjyJ}j rXКU|{yQX?0X;a!Zw!E쮃dfñw@M|Vl;L?·789wl8MNx\Z^hrc.cU@/ēXm7.\|~?;!C<=.ĉ6s BD3u2{ emKCd~\ېwpWj͡)%HBLc)ZNtۄX$n5K =! /#khrexrYeb,tW&%g9r'ھMh-hX$C?m{e] hGz&)WcY)B7IdG_'ڤ3B[j$ ԴQ@fV甯BG+F5NpP|?%c\Yai h8e Q_Wech8&DQjJj^f Z`\>4hMW\t?Sy‹S+59ThjA b]Y|Y@g"ݞic5H]"gsHi:}Kk3q&x%Ĵ @FQ72Xcq%GBd ?0k?_?]bty9v?:Y~@x(;B (vm紣wdĊ(I! wdkF7eDR2ʐ:Ƅi4uXXM075)$-k{M<Ӥ@y;yd|uiXyyԇ3 Y,!~}Yx;i]vcI}=?}T76d|?bn ;(H .Fk0`V-ʒPɍߦIKz*]K*wKM'N6x3w Mx]Eq[ߋ K,k#SD. };n~ycL9f;Ө"; L6qD*"uF AMԔpS8z"7=\uɜ{io89ckd{#S|SIHU NDgY4p.a h.F U: ~GP#ҾnLeΟH 3k(^+W3C  fF!B%1م6v02,:֛׽&RM0\f֋(^ěo5kELth)}dw1tÓ.ǭn3}ר\rI^f U\bhrXퟔIc3T}k 9il :-g*m[ۇMYg-Ϡe盱O_@M oRAM|Ls;XfiRqn٥ՌE.n8b ȎFVP2b$}0eTBʍ4ޕšcu)%."_BroSe J:aa2&KO\Z 42|g=E;̮OT9"͠=&*_^s z1v+(-}wɽgyihD_8NC914rpctayE [OMNiO):*0yR;uit=an[~c@9_Sr ?~ϡ;cB4_⓲QՃD=]cvkUEN8.j)"Eǽ!%"Wzg.J.wgY 0e 9'6M.t W DGY#OgLX ]V6T /9BlW uZTguu'n;N_QSA$ FeV-#y0s P`gr4v k<{Uty[lGN yLAl~1Nv[J#!T8$\͗"^ C(W[ L^6_A-|!)ݧAy>mJ=L,f^$KzHXA}?ԆPyuA#+Xpld)a:5܌7z_*b4-g7<)+P8_H`^ÞE G=3㹊Qygmۧ E#,mˠJzB9*8ٝ7pN Am2H} tihvcAc;ke^4oFh#$g֥Wh+lPx;]SR˺Vep҅D6>'Z=raJZ bbE\$B6%O TFQ13Grws?Tv´<%7}m^ v\q3W/~yMu_il׼H17\#d%QL2F[ DtXz&t ol;1;^U98ݨV,Nb<)ѩqEl 땐6< ;xY|L|dbZ?1jmٛϾ"KixS?|{toϺ;d.*c$$q7-HEvVg/{ZM@9f>VOK*gc$%cMbIpe՜w{O֫ޟyP4qI.!Ӱ uWO_̗ff8};iJ)tg36k7 0zޜ FыOg n'd8owKL 0XNt&J걐TfV%r/.&M]ȟ#n%ކP<6j8[VeAw3?3R.1jCa!$&umB4((d]~nʂԵShc"׉Y%-XL9EmB=g61՗7lSfo.h}&`&8/d#V[\:]c Eu lPe %Iy[3q<buJUqsye0o%,wgQ!K1bߔʕO  t.,}͚cL]2=nAL:ЋzJ+J/頞rS^p1K\ٱ(7 :rv"bޢaՍ.=w#!Qo?#Zuߎ`uwsM/gR.1PL$8q@C9LD#YZR66#p.f$)5s &}E:BڭEp/ lD\I|2CwkM ME rJCKAZ x:YcQ?ehS]vm+qؓ;s$6ʫ:BcJv) -_ Y/5^{E+lҬ\6f5ivjQHFœ5=^d'dBhPKDOԄRV/n#ϕ{.x4f{F ȝw[όk3zeiWDZ Z R-0K$;"uZ=>M(ڥB}ɇV.wG ) _ѷyME(Suҩr>og9:U?+<8Q] 2+@usTf8fj!se0=`4Q+9M_Rf0>@Ķ{ʱ/MA]ĻL `tŧ`ԉ6U»erc&T A@L?0)\]@rfk<Gs[Yt<{A[oFv7BU,rF x_B؜W%5^N8y':(7='?O[kB?)j;C@<ك>+K7̩@ " l%>ܞٷIR]'RдFnYx4f vf_s?,0t P d$ESעo>r[}Rtz"$ +NF >.#*%Luz㬛K"XCl^]5\foب|IïkfB/z#"r:,!@|@NbW%C1"3,k_k`Ct2+B|9n%iQB125DŹ` C/];IyLwfɖc9)B;*ϋV|c-[Um]tp-{7۾arJcV:ȉD֌MdpZNs7}_وWX*txTW} ǗiiM=|t(ҖWmJ3`=xǑ]pVh2B)=$(-;pݗ&JxK䅅~p:?CtrQ׀Ďʣ{s~=Y\;?Ya -x Eͳ[ #tʑEcH(:!Mbcl%F܅~Grcc,6 ;aޘ۲몴_w4t8DBʾ伻g2tS kh?xb+WgO52YWwnPÄFlT`x<-\K6Fޕ.9c7&"tUDB ']̜6ۆ-#+x$!v2et#Y_:M/\~ޙV FGǢ:?n45OiT'O٫hEЩ;0s~^`R NTu4wXEQsP_(Thm9gB ~h%KYMsOvD~f|X$1wѽ^W4a)׭jNŚ6L6/mX=6"2x8U_ 實 綩Oފ5,2<8p?`FՉg]wWo];P_g{9'9OM6W(_"L-6TQLBe LN"r`4?K] &51)h{̦aG9Ni*gn|P.gON.:D= j=!Vd|%]]2"+`c s0dzMoYİpZUYBLhwl[rDһX`݂d2SwbA6L)5"'I; r=iDh &6Ե0']}^6cZܮch3iASaf0ՙ0dU(ūj.~b<:{pA4[#TOSSl_i:YU/iz+-Jz`?#}bLHg@19B+-p3^ԞpS&h FXPkj 靶08}햧#A{^Vk혿edq`&>8#򚧂} M=YH0G3\AvyK<}2 D$/ [+(It* }U=.$HHa laj.v5ܠzxFd5/**KvO/ymP#6VӒ>8"p.ouy-ۃWC95LfyE &DCl؅e.6Pb[JʵƖ)0kɷJuCvAjf8+;i{3^P=3?PJ^+n<چh_UiNZPuZ1aAKs9奸"1ŔIЩ!ij;4kN߬|8mI9O[]ck36s╺_(Q:(A|Rc}:d6DB=$_lfQKLØm4ׁ`_V8%V60bj,N2ն42Y Z8a{]Km/ETX7?k2 &`BN!MwW| .`kOd^>T4Lyރ'(h+ 1+h]0O(/*;ܟݖ#5o$9{!VW("]`!i&d7"mC9h@hl^Jo ]"Db)QTXށcO 4=C=p;Z pzM{ %D|@ʜXɓ|__ultaDR:/M#s Ӎ/8~6m @6L,7r l!!Htᎂ c7oGlvmʍ3д+ڡ`W'㱱rnqae;*N^֐* -Wo\эb%)(J Yla;dKѾ; zB_,uխۇ{\c QjSƒ*ע0X!isEXS,EiWHkrп|צ$!:fWbPn$V@L0Y cSg=a.t=0~e3eY%*Gͅ#wZ4k}ɗaE,KnY#Y%lz ;Ғl 9瞖' ]:W)iB#^O A>[iR@Z|`3_hv֜؄.n.:?՝hkg&xԉU*v ]i1wv,U]ʗǒoygx,|;ODό*ktO5`✏=w"#3${)}Xa.yÕڎH/˘S$sSA<`B -}1fXG9oD|c)bw͹ӣ*NL{h^NHN/+DBi]KGEk]뤟x^X8t.l8XZu1WVeq`|r|:lmQnNxx7܌C !J$3+(N37nWTq/}2q5eSpU-0mFL)mh :,gWQ0EQf4]4js2D7BGʮqa@KI:Ѷ̪x]\ 'Cc/'9pŤ#Khp./ a/0+sNo r$nkǿ? 1()iC$'N҃o%axzwp2z AdN)p-t9H9X¨/gyy4h$嘂Gzmqn L)gge0&p4:` uN/R'yjiIy57|ڷPܔR U} _=?؉q cTem |7)K綈hwXA-#%9}nw$jMU$_ VBYnP6'x$=thQf憑L: 4WiwEO"__=0tի'x(&<# $b.V414/[E@^llyIr K uM,7(F3 zJXCe#ח,UVZeڄPq*7+ъkycuL%qtq8; "?9}@Cd+o[!Rq䅫 ѾA{3 EK۰⚲f{ϔ^߭A/)OFn<#Օ}ᠨ k_B|Iv`'1|dCʝ]?T>|wgME4犘a9xˁ[JZNFɻw}~lbyi#XQ~zۍLJ׸ob|)b)a M1eCAy-;фw6K8cM"p3&ZOZ \%,]}2Ve L5 fēἱ@'NѺcJ…+/+uc74#v;,vJVHёŒ0=9lB**{F[Ԫx+?˫LS]kuuRM|eS$h:.SG~~#8am-.(N,Jǿ @31k.䞵6M&*Tf0Ϭurb_N%N,S WrRt--QsM=$/-6o4kRȜ uq|V/I]Pl+ |پ5r_HnPLK~ /  eLk!m&Bwb>gfWlK!fxw@$}+!aX|$G&6Z 3vaA5@hFe0Uǥ<\D Ё f} A[~4%svIz%B Z9_w¥)ֹԷf5"|;jٰj~vF<*1 (pDY~tχ0Q?L.Kx]s[ N\0+cװOzDCO#f[Y.K֛*"4]ޏlTuov Tmb̧H_ bC1X~ oXt{ƮZ5}zV>^i\>A1][v`fh|arg-S1ZY5/;h3/`3 w qqh{t2aؒt`E)3z+⺲9<#A-,.}Ȁi <%n㍲!#5Q^W۴'C]fN*M ;8i]$b 0njYoɑS0KK:}S2Z9oQ#jW (ct;MW+NBOCˉӹ$Wy.48 ~9XM]kVosl].yG0} ]xvƶ??@>:`PaFhS LEԇYkjWPY5s|zʇ0RKJ_Da\JJ+M "4X}ZC$fYgڬ=F~vOWJPGw|^}w'TdԓGDmmPe*ސ ÷-y p1Rn%p AYE_ ^#Cxe_}[OU;9jL9XԢkVBL/ n<*Rқf+s$N@@u\zkYf U 8당-c7_:F$؀-%* T _}|E y~e0ԺDe 'kezK;T;;`@K*20tg>Zdǡ8MyHZ"^Xs[jJO{ [oh6̟H4o Gz!fBdVmCGz;=# v19V1·lICqg3hVNh} yXiY<87c>vĢƩfN&,Q4U&]-0>lTeb1``8 s_?_kݚ7cQ\CN-TlCsͭM ЮʯVӚ)jkS )d$<ד/_<X8}i])}!QyGzuUR:t3="NEhPԏrGi^=-v:4}|P|mۢ[P%}Jwृ^ߐN^#OgT1iTsqYH8klKNz7nig6& tf& 9i{-DGBԫ\&ك [>oH4sVDM ',ǃ= $@-#UF0/௜0dh۾mNaV/sҡI^YhE(¹KnI뭐JMIWsQƑsL6}TJ2z4|mh/;Zk?L`i |FP? ]:JcaH$-L/e<$8=3z+Ժ]8E >R6§[*MZNiþuċɉ-6b#!ߒqj*oV}D ɫd“ְ}Tܶ7. Q#]%;%z)/V^L)&褿Ԓ|T+cv15nLz:os+iլ\8Ci4daԳ >-= "Kc05E~>,,Tq{ f"D=ց3R٪'i$A[\aCvdeia>1.U}`E 7 xZ|m/*IJ;-H X+ %+AbLpg(I%e9v5`wKvF*+ȟȄj\eLi1Sm;"b|0Jm>nw"sǦÏ%x31{7{`w g~<1*WdZ{̷zf\zBT] 27ua,vqG8(-N]2f4n vU0;DYbN@#WQX>rC;^T+''j 3A\yIPr 7N?$S,1HkoR%*v Fa)xLfYM!M<㟡M]CnĘ]0P-` G@c},'L&7 [.պ@M"&nŚN st;DQ~(PI(5?R \6M0ݧ1qfY:i8R+ Tk'`rsi jcIYH GSr !K1 2e,&2sUQL0,Vf2u|[p~Ƿr6\tbq] D#FsHv؉]Tr O%iVx{ n-|sDDB._A;,￾ K aXo*Pe -%s0oTluD#_*&Ia&т")\yy>0٩ 1rt-/0; .39Jn<`$HYy3{H:/= }7{ $@kw#Fi~bhZ)`:BRrDK3DɊ~nUgכڶdQMbdwQSla(.׮ x~#fBR> H4U+O‡`Bk,٬!- 3VS yċh?bet:w#M yF5NBsѳKFnjJf.eBQoF/d' Bk,a͚# out9Z*5U*?^plj1AW.)Rp8,{!Y<{F~" G?N%{$pĆUO4cr)KJ LV}`/aG2=rgn?q*LUC|[KBwV4^)閑;sG; erJ+Z#5f;%\&' fJvU .­efrjڌ_:nRl :&;eh;Tr/Q]]"U.!xԷ{0_A2zã \18(uZB?S.E/ם4:g2[8oەѕk XѨlq+e{R ¡dpq.,CGʠ{q_ߴKSh˒A0nULU:4Ku֓Hxc!`̳foユNdp=WAw٣ v{ky-b[*^0O &߯VnssZ<*&~[Xc3Fih Ī# 3Ur9jbndFCKQn^~ފ2MFN`ҋ],x8`LhP{јZ|@6S!> N+PQaKFvg:k_E^ahEFB ش};| "A4bb8Izk30FVoTCP|tX-Sk$u_}t2JOst|/>wKx`Ahnmot$  sPwe4㖚#LX=:iY""y vfGYy;{?T+~[Qt_4W2<}T;Hc-m`LZs4J>֟z{5/]D|.$ݹ8.Vt $j-6#*ϋmLj'ݨSO O04򻲹!-(McՆoLʴ.>]LJ瓁.GQùb2y=$d*/5uɲ˖to,^D91lf]w*J{ALΐ l ds}4N$dFçOy;ϵ6Y.!whG6v{9tG\KDבE^*Vkߡ9xFPnh'qglUSbG1OHy`u8is-. k]֒K/λ]&K9V'BغɦQ#h q!|}"Ey5B\hp 5sȪI0@>{VVOͷH>;JɳgiPPLͬ} "/q=Hrk8@Ft[hK)6 eF @3"֋ќık f;g=zAʺ*SͫB+?UVo=3:*TD77}B7!D-`RrEsϏYx+_Z_!wfD g uF)l գlLN^ZKAc䎌4"J"9KT-oJâB*9F&}fl$ԧۢc6Pq:h=7E\q}L4(է=᜷ޡ['wRK g +!I4cN&XN?b,z܄"Y X)%uyE=^.{2X#SV<}1a/7߯_:a&I*q;?FX/9ՐM%b?,a)˂yoF^2"ЋL^P+f[/G=% !Vu4Żzo!*:6ZWrR gXp,|'ǜTv)8~vHvn^{Pշ D-To+ڃezZ*}bz!R*M4`{*_ _'yH'*&vsr 7QЉ\ҭLue&xG$82uyajWsHz/#NvtZW)tΦ:I sRp:Ο2VT$/&uƇu*8Ok}Vy*z+vȞ.ɰr8VAij պލO%un|ֹ⎗HIF *xB'x|=4݌̧y'H  7~/'cF$$G'cDjpd *Mk w@9Tb}aS M?.pvWvGmD]*<j mZ>CxyauSNKcW;\ٶ- v6V!$Uig-CݱZ ]n2 3ӗLΥ{KˊJ)#C57&Ř1y&D qIrg vkA5:CÉ!Lj)-.z&TN#s``~7C%PnLw^3޹pm nLJ=\8ݩ-V"aouOhz踪ṯep%3o1#2)t KܫBnxѭ:(g\A}V^B>{#`H"d9)p:j9QBsc+2W)LE}LN^K 3N!F+8a )Ow9~}:5D'\Re!hڲl Swp(コxYkUʵ̐wdHދ"L/+7O+DhuI[h 蚐8 d*Y/ @a8]H̢h5Sq2Mn$ziټ$6^gَ`R0e%*iZ>c/4lY/@ D߈[Iu@xt< dDX10F -en[A~PմﲁEY~ƍz6eWkj{"Q@QL_9N&v:Z |ޏ3C̽4`r2=xao̞#5դWG3;f3 iص:Y޽M.j$x8& ӀQ$Ձh.dDQ=`F0'HծC|4\ ur!e×(rO4|?d0YiM(koZö.Z-[ Z xI_ H˃~IDH[c=JyCR A4VBm2?NՈhz y1 A89Z0Kڻ7nM=+:a֕ m.Mc :9=ڷ^ӈe`~jMh1|Wya1S?\R۷unNJ"L0c GЪ0 ԲfBFSnh%Elw8F)uhdAo Rf ,\ Qz}]Yu: 55zvV;r"sE" hRWL 2<1aȖ{WA:NreFC+TOlK>torghN6xl{ Zb'7^A;JsCs%"M'5@Sv\ H)풩 ݑpkM*RsAܛdaD1 j\chS;7m2Y3 b gBsb1oA$#JSo&}M`B;!5D:ćl\"F㚻VU u1 |)_4QɳOҜ妦wD:pL${vT#֊ -ۉg'{_j 0هgMiYڈS; 2*t*@;fb:ps]VOI(~?>-C8*AH.TzDZV.HpN v{~EݱJ=<.@)>}~~>ʴ>".H#oq+<Η5cGhYfbTv戉tU#]W2$&F>ѩ6bf,  U.[Pvq|,@ ,%SG+5N+ !Sm?9]@4z⧙l4M+Я$rn(d]^%ϊϞVR$F1MIИ˛2VQr1M SU`J㱝&(܋`C, ̟:O~}T+G(*iQuN:=)vm"Kvۮ`kQKG- \Կɣ ل j[\hop/K3'1D6c3tn{)PWS˕b"'m|o>Rm@TV#>n]ڀT5'7լXS\xn1뿟ZY13,iBV2ơu:׵cӪ"2_Ϫ+4ث1kssG9>ؤ{ R JQ*L.q'/tu«w_L؆?:1I湶葟 _q~X}X\]d"%%]!S(Q۟QS>.%É\3%g :GAkj+DDNZ. -@p4FK.,ϋt41QPѭVk_OiD% hZ$[uEz )uUTq '*ֽ|uݒ_K!%ѕbE[FWmw颗>ľ%zb.ڄXdg}zdy:ӆJX1)Nt[jy>4| -9U6Qbp 6ptr\Np$ M1!V~7؏K׹'mG^zR E~/̒*fs.h35x Iڥ8Q-S(i4VM tGsͼ"+gpζm:Ok5_xӱ3$&E6 6Of#~HXGy?8A';3.H/Ea{'\އ_mTf9nmuk@p)m*c[PLTZhp5Ggϳcᴒ6c[=jv=^o2g/ W~Cذ݈ǰAP: $H;SȰ1f~2|LTD}a_4Q3 ߬$1@#aIo^ !!C6pU-9*r#[D(QTW1/$ؔ˧e2ʻJ.~&1>.Y3?I'm~iq>q?.V*E*F ˺By{4l8AIx2 rd`?\%Gk0~ׅ_"P萦Eb}VQs^ Bd|=0gD9fTi,jHhtqFpg1m(m,oˢX@U -9kP@H@.f>u3'eܢ0CSyM3XݯGN 4[HIt1 s ٣욜RQ%?BNm,I .p?!ı#XB7nG34/iF$υ@MyL/qLmS g<ˊp<9^vuѠ%Rݐ]D u]Sg}OK|w*u1m]۹wM Goq:[p|)K%A]ӂh%d(^TQ Gmv:9 #2Jr(GoCG=h@\]G?xTv B3ÕÝŸ'0I$f+, QL,y^ثJ{?O;3Y'gfUBhi&6:qI<*hr镟a3GZD;2o5*Oا ).Sz Nڴ.R'ڡVU+<&?Hjwn220#r NJxuɸI C0m&|D>a/kv$ƃofb;"ho7s.\~缃}fN6a/A9rkq}(y` &Ģ-w *Ғ/LT%+69U]SȪUtZ* mE34;׷*xU3!alm7k 7[4w?Z6 p,'z8 bf8Tm{?hfiC7Y{:kaM3)_Lq7/^+T6(=á!) "ɚBƿ T|0!{> rw!86BBQX`K!d9473-ULP+nL=|VPqEvI2I[O~M1YiVK-GIwXnDq|i6^@pK& (4pbQ E -ie@GvБ n+v ӵma_W$@%Kޣńd#pu*2kIVఫf$e=t_4e{'~h ,~Y~ -4>EFMyD"H1IsV߳dsM%gp  1`R2AM\n}I42k/߫d!:VJ|%3﷩fV`*GXFV >u S>O 8,uZL! BlDt=91ъhA\=$V=6Bm&bnC 0閮'/1>dVCnGz +'7hKT çM5OY!&Li]oc3 1cHн}+Qx",uQlx,:誏w4[b(m:gPet+5PL_YrdRZLdDwnPԜˢ ka jОz"A$I v$kxM))9Yo&A/3<9pV?Y\r0dy<#{eRNn) 'WxţY .4P5DILZ\(gЁOl`@퇻m Fq;?:}yo!M51F4TJd)4^x[>WfCRJd'M-'WߚVß8lɘ r5ȔW"ob8=,O+[1RGMGol7;*~U`&Ֆp>d++L!P-(j$3gȊt,X%(HYmQz4d.uАLPRq|-p7.ٲDadwyo>\ xNGٹ4 Km9;ST$_177l)XwUÖKWy4}ݣ{(:_ E4 퀄lߊR.1u+nOvF&x__ x"br#47Gt~C恕a(Ooh ]aHpo=2~~&,)Tl}d B ~U Yvj|4AyecyE>9@q9K,'/ Buy& bIwIγ]LMww+38s}Iį*dg>5Ĺbzŏn)ۃ%j͆Q,5*l [QN$0XcySX;_Îd l+6Y AIX@SY闯ծ"(3pd~2Ʃ( -n+fi$t.#L ^ir 6<8=Ag@V1lB7AvhLtNO:~]sJ%ZE g(:.Nx]qSIh?Ig̱j QS=jE ôo֚mĜd,FmqI6;e0? Plkwɴh xҞvvfdfF^,{ޕ{ BZX1k(duSXEghowLK(z;廌] %~I l'F~ÉA0;1x|6@hC@ l2  _lq7ӷYo./, SN3 u?+a?C.maoTs`S,pųӍ孊%j l~㭭 pw}Y$|BE(]'YGuS)A6fݓʩՙLԔ9jj/r^jP iE:\Xq;2ov4<`7'iu! :ppV3:a\;T7hW*@8 \KusA"hs c(j\=ݿY7p,j4?Oĕٜ1Kim0ܽ9\v)\V`:('0 RRs%}'QQiYX ^I_y?0H Ud)jtfϤW˂2/UDz;V͔ tm3zRt}1_-,_p;?!qʤiIw(ciA3x!P"D>\;MCDߢ4"A:OE&FٶjoYeBa #z,ildvGrV/(p43هMf9:&ޅTV;+L:0̔9G-U^Ƣ?ÕO*vB+&ۤ0m- -ޔYt s> V)\ fP%X ƮY훵\ lA`;ڱ~ҽwݧ%a/vB?=[ix-%&LM{1%Fu1_{~_SʙN9u&l_+nԆ&OS!x䄯4Jrꆹe^,@R cy,}tP̘ޢyvcTRP?N @]>CӍG;U:&sM}|lqZI`WYZ6v ;9p2QE}sn D8V1Cpk7\=XlKEZɨij&m(4!so7HϊkeՄyFyA+;/sQؐϠ"5ם 1_f \e߈l'3.Y\S8W.IS|g.2c:76aMZi$5l%xr2rb9IOTDZ2?IŭPwe$b±\ !df7tCKk[ZI_[Yirv%\̷6`;T{{[=wiM cPl>(Χ}jZ4@rO-g}g"!C9brWJ%mg1js)/->)}PƟ&6l埿ĺƷUt; HJO O!cOj=艇>E8LEj5kD [7iKu9(D2 ݢY{31 g߀7py}^iK?};k!Y/879Ow[~\͸Z= <42eh P$FxqFi/9 bfȆ|[,;ڡHD1J7kS8v& q 4nfoR?SP RS.K$ۮѝ[N Vz"`5im4` 0]8CW%Գjj[6.822,݃&R]ɷ3HDt4O)0EW(E4QOǓm}?:|bCpA CK՝LYj ]\y M>?>L$uJ͆4ո,F52kYAqxui+,n8v?z) S8j۲XRse~J}h2 NOG.4~?nT{+;5lsf借AS? FV'“:W):ˌ{vp^ݏmNGm0)5!v*_IE0f;Z0EF~ù9KB{?1kj,٘v@*]a) bl+p  b`(Ts(OS0<Ê?Rs(*LRO6L]ͳf(p(ݴ8Ĥm ?S)Inm"<)/朻W;A"暚l.r D zKݷs:0mޔ5Sx-D 0"MSh<0I5֚]%žFp3 ;uF.y`-֚pGR\v]֑r/-SOOR3;gA`߸ n zټ<֚ n(nۭHS@%SéWUT[tatiK%6>b@Tcj!aڱ(" ( =%˃L絰ѫ~ O,rӋa}K%!?`^#%hK @e[忧X#tr"e9ldhF֖N(+'}nWxO*=t7%x$('}432M2rnW(iEyA8t%+O3McAfR(uU>ҵlݜ([WDG iQ©*6̒ 5̀(a7mbbs‚cD4 !S wn&sMC|ڹʸuתL7s"[Q8^NN/gz]CbIж!ǩ;\w98R!ӧ6Ji##uكL纲Y'}bM(~RvٓO4$K"z@L7Ou]BC"S XֆB 1,c֚e%K"kurrVxfNaX\>wU,BB+@I|kSWSٴw3rي zvI=O.vN@랮Y)]rq/%wEX"w>Mvk}3e2i۾Sx6 Vػwvd땲|^inJH)2&}͋+\P+1Y˜fS'mS~l5UKh8B?D>[׻vXCύe 8mRI${/^HR(|&U^7I̟GjBLmKQH '2 ՛p.9·ܡݒb7/'wPD6\.6.QA(O!s"X_3l7#@S`" 10 ՠvffsR8h e0~ W O:{nҒVڞ1a;*aOmD' U wUqir,GaEw1гFAv%] EzVW<p` xdyr( L@SaaHB<pE!V b( 8G\nEb.NalD`iIf"<HHnr@&#F|b$߳.2WRM )̭ZESfu.5%^NBF|Mn_u_A©ZĖ~Gqs.*pq!CٟJӡK sxg-hA618z@eZ@6C3Q1E8&Rf9tІiH{| 7@Acj3Yq6F<ݤVEeqm(Q1yinN!nZص/~[)Ŷ}nSl1$fԤ^ʴ4 cbc,tR9_J@oBmkeS͖o `6[ o\j$fXSd8T4tp>.%gELI $~upq0"NR[0 pxI݂i ;dp8ढ़3fOrbcI&Wˁ.ԡ/ 'T6 {ꁢi;܅-Kw@islwZy Uiџ b{.J}y3崙 NHi!qc&!G 5m,lYM&c~Vpdɐ٩fɂ)օ0T+[-+ y= =T3z _@rfwtknHu'W|Nρ%ȝ(ԸM28dҵyFL <7B) (D˞,bنCPۯ (r$1R#A;4ݰL"ǿrbB6]AZyrzS)]۳!} Yq%KV%:6FZ9ˉP#%9ԼXudFYR9 r3TAT@GTL$6?)´6} Q+@C%f<Ң"5{& -a`3HT (`&huUr&HS*D{,E{e y! fY%xmeɾ-<{fAM| 㜆yZ|D<+EPZ'm.j ^* 968%_ɔO *'!hAc5\RYAJy40v@Gqw¾ ];VZIW,smLuV>"ܴ G ՖhՊi K RK*s؞~٭"" 21{7~fd4Q):}aiQ"M\Y]&} 7_aZj -5C1VWfl{{{ON0Zmď /&H*Yb֨hy74vTYxOkUaA?UW1U`;f;y4:͔.m3V.8r=} H(]yd샇 Q-|ИYjd?B m*iTBV!|]6ݶZfK)5ngQMchU'EP6L/:cH9X-lm\3G4a\"2N?ᰙ̾yl53~Y NSvƕ]]饺ء¢'mT2l?6AieFmQ 0Ukv q_igW! iaox4D3̹͌$ihj+Gum%Ǚ ^ԡC"$*@bnCyN26Y<[ J[I@R%[.jB=tPV.enobe~ ;j,/Tal5nЀ)Nk'=@~WbF>i;G>7@-O0N#R[]]*H#wx}px0z߹Ӕ!8ЍԄ~eCMKSftb@%wbazfK" 54"VpHZ`ņs1ū$l5i6=c~,^vdP<52,MO466UZ~f6;Szߴ^l8"@r6'$o)> xlrxLhVC)FJ~mh<QIx+AN يnPNu*7Ȟ% [BwiNTxVz̀1x,D 3$20 9,0VD4٥V?u "yb*˒ĻJLw ~ .Gw_8Kp4I5?+6#-逬K'0KX[MySL?D}[JO詮0;뽙fCvW?ָeOcsUYd7U4IsXȎL*[V w3lBtW6'5? Pl0+;rC7*5kt=R#gPk]`:=snD3͙Kʀ *d%cc.1) `P?nRfϷn#Ae1 gܣ~@6@ߝ 1@>; sƮ_}xEsn'=> ؁nk(9]͠.Ҳ7^^5%#?r~?Lg멠 {^-=} i6Rl:|Wt8gBo)&3*tja%LsLM̏#qh= 8,j7.T^X?H8-H j`cdP:u#tM%rD?o(+\;BC5IqZ; €1YJ 4D=EwXaFtқP0فu'cq p_2K"].X= i)k{!nР_^Q}X}c;&N=`Ǹ8vu=|-Z 8!ws? pAwVւb2%=ڲ[.w5qAj{;ڕ5s<(,s wT@2 dq$ڶ&,8.?9?&ƕuZE҈9 -:N/1ƠeaUNnDu~YD=0x@ekBքʾхq}`T]D誮VpQ _VqhK\QXx0|MIwy?ΓeOhRXTjNš=rV:Y XFc} T~SGbmR@QA[N+t֡ubL瓓nnMݽ0HpUQK?bt|JHT}M@w;.\wuF[$=RBe7D)DjEMcTB|Lb;m>Պtn, >o㲗:v}& ;̾S~SBq>78 b 6_ϋhW+[zRf^`*ctqB W{,[JP?5 &ky`$ʜP8ѽk ʫp{p5:Dul[B8sC) S=U bÂdqkH'qI e[(zcXU@z̭{j_*(݄VE'fRᠻ)yC8"Kցi>ɞ{V$CsqZ>1EG2 ڛOs8RRUpTJGVV^ߐ'ݔW&I^1gCJ#O.Fb+VSTZOP.h9f 'ڒ' )%pCg$[6.P$ʓxl;U}yV (ѡy"^u|(fkɏ_a4X萤w jA1w -j'< J2(T%Px|-}A D4!]'i?R| $rumJJ'u ##CAܻ;˨|^T6M&l+wS@|eL`_Ysn:O!S^D y[5[J 4YZ\Mbgw Ƣ zM(=/ȂAMHOHK0jc]ˈ=b҄,V WPr͌?= ''6J7=DKe&X{/6PX  6'eBk%Ħ.\@8eI JW&-bXB>װWLtе8ZrV*DCꑁ]{pz屪ki3:l2rk6.x:!͒aH(?nqϜU]T6-D)D_>^ke9f7v0QjDyN u3QY\O6N~gԋ’8^bƐrAj G .7yAxԾD+Ash~uZ~ŷqOހGo5~u8!&>Ws֞|ZqUip' ی7@y݊٩j֙]?Xe4% nO ]8\hJ0IU)Cw5~Qz]=x+s?sjeCs5BI^]M, d=g3ߝOwVh̜֨\S-J'a@rÀ)  j A]y/E &*JJ; s)hxa[j 4<}|eTXD_E֥^o5wba&)N $# ].w_VvCiX 6a\[b}&8OюB(ݚ =7<8BG 2nѲѠU O W'i̙à;UҶg&~(L'r.>еu]0&A2Mx{ 2:N>L"`ڡˁ̊}P5:b젪sp ,)|f뢿Ի+xXӃZ4MƆ|Cfa g`k1!b8l*u]#ô.WGR禄 2lu{h{:p CIӉ\ |t+]v>溚_\SI8@bZ҄>d !NBd|H\/z9WrM螓ЦF?ʗpjaĐ5 Xӄ~4:!]nɂ6&uY-c dE.*Pj (A.pPWe U]9Ǡ+6)ᐐݥUyek)_]F?Ga;Tj[fQ|A-HhL ϯT3׼#bI7;O4H"24h$~;?K&pWNi ;H>Q/ƭPvً |GI8JBՂ6G?cp„x\q%# 3}"*%ey_GӟM{A,qSh{i0<ڞJ6Pki)VSyVq!H6Vu'WwJw@Tk;VoKJPbɺGsנ8ͯWIĉHb5}q/Lr5iPG 'Sy|TkL~nbݡ1kwOE˘¬ĈUvò+Rµ-7M,H&7qG.k {HJ6@th?+^Q.wPTTm.3GZ?E ԁi`"". *|'s*|eFgz4|apԬ7~xI~M]3 "J93Eڂ2;/ ]ZIJXq6gM Œ4.Ln Jo {oc uuزFg;WgWC39pEb_TpfCWi*T_NK^44+*Ou7 ?L.TN@tюtau(iyrV63#c}/p}%M<}ș2 Β&aEbO?^;7DtV-rCV?#̔"ej4 ㆥ TjGd)6J*WP3SER /?Om| S!@`upe>\yK#=ecUՃ}`dlsQ4&s!Ew!IЪMH@6v,CE=N]MG~Og玕LM/ڴ(Ҙ5 KƾV[$oxp!-#LpzÜ |p1߀t>5wU#O>4 !ѡZtN鲟M0BM#qHS--K-aU@0J$2+ðv`lr{uy5ʹS4:$Cq 0ҖA ICf >hY{W#uh8$ >6:I`-1Y/R`ĹNh$0_1!&N#\u\m9&Y^/Y  =pUS#/1-૶F!|C>T흑\^]-2P^JX4ǽxUŌg71wn p8x"W15ܱLW-KNcZjez' vn GQ'N}%-JJE~0<91:TŃﮄ0;Ey4\=49QR |5i이DMָ92H9^\(1U9գz5)JC xˑS aZp=څm+%;Qsb:_8i(8Pd'.x"j}W$6UN 2H[Ƀk-z Tpԁ,Jgby!*,-8J 5GBeHd.:~ۘ>דZb n&~@bANJ{NT2"9*+o5YO󂄖&跚K̜v%I ߩVUP"a5p% 囅im*r]?Qz(Kݙksi:5?$wZ iL]wӴO8r{Z.V[A:! 9hrNP\I!/Kmb"2'o֢ү>7>bb5N  nSlv+F±W1~*iG˟Rnx` o5Tw].7n xjHTHY 'Ol Jx_G65,%zj cwyR]|^xum `rKl!GB*&J7=z`i ,usF#tPG7xX F'CPa9!2=x 'gɞ)e/oV gUGރ2f wZ Y@ ݄cYF Z;$t. i|Z(/Stmlz6&"͕k7;e#@+b-f}vng(\EDY,`4,d^틳=S)4V;VO9m5Űp GkZp˱2PU0kUx䩑q p602aQ,~&fs@5@ayBG):#Z'Dgt8E2=G#sQNUqm@:nM#D.6T!ZQ< :d=۬Ar>lur((G <*BeF4=q"r&CwChV poݪ Vv%#攸'hcI3OxĠRåU~t]uXة[ϿF)cYA\L3>%Gfk|23q1Qr"6.9A]gտge3ma- sT.L ]AᓞC7nUta ])aO2mT,7ʢ-BE+!zߙZP)Ѱ1=l% `o^\xʫ_cH5a$PY!ߵnii^T:6a+Y;dK;X }fih;u5D{:%yp-ez kot"L\)O[g,<}a,e^dޞ#)7  @#]/dojHw1;zzҬfɐxtōFmJ&>43lM38ϟ`iy vx[GL08r.o' z{.{d!O*I&j"԰bo>ݜn|IuAaܿɍ37SbB3)"tϜ;}`qzv u*Iv(˰NPU{Ϥʜ>RH2D&kW&)g]f?)ׇ Z $nȈp25"L6ՉOofOo֟eJBqePׇ 74hZu =N& Yx hm%zj`G*ܽ@e-6LoDxxب[6S .ArU|'%o,&z0}TF wA1W^- (TaV: VٯTH,HRZkoM _CF`T}Ʌ32sXN+BH$gngIbQ]ZĚtH:!jӶWubgq19 +<8#Rt]&\QVQ& BSp^vނ ƌԏ¢,RD0 y|qs< ;Ŝ|38b?z_rдwCz_Dd]g"Q!fk<evLMo<6Bũ++OAZ踨W˸{d 7*z00kd^̼D9"=VqxLM{<=| 9bx{1}ǃ#8v{`:vn-[OԇzBh%/3UbtG *+_0kYȦ /%47dR't=&jU]7Huu•N%@~qv`WUAv`xc66{G:PF: C-G8Y?vCݛss^밌geIUGٌCȲӭXnQ#of,Ed~[#:g{!TjMbE9bbCB?ݙ*񆣉py(h7Vء'#3ti_H]J5SKVL Zp/D) Ӫ:Y?iEgxR{k5ׁ N_nv3beFT/aT.쪒 etMŸ=#͟M|#s  rFׂD$j5NU0$iSR,&6Vd`6$ ӖZF1Pζ?RDc{?J Nvތ#z܈VKRZѝXgX> f/U{ ;%yXW0)^|D->{`YSDІ N=]Dnuӛwvy?<^,)i~eM_331qdײZfͺg :l\I7<4T$ n4+AhP>ۢ3jX LѴb= S)X'w+W P! lhm~@^pJ+TtrDT,O*و,A($ފ І "=3I3hǽNoF[p3˴LE.JţDp/Tдbt)Scez}'뇹K3ۯ8(vN9wԒsmq5|z(,E`q^r}!Cwi{ З}y!c':)8ӱ b$xژ-lW3:X@4|]>XkwR3 4Y{) @aU3:D eB|SG$& ZՉ^vQVnF]U wx]VvvEKfroACN9K "ΨiK 2d?xT0KCOdΎSۮSD#g+_u6TzCJB8]& -;:NA|'h*$) UWc\Z9Ȫ,F5%,L8 y=qz ?U+=#0ЬZ BnYRC.p\܄E z&+.U!j-vK[}4?s'akU$^M'Ҟ¾[z&W ìߞ g/-H*2d4>AZ=-M%wL\X,Dsa)Iwji_ yc'Ph;\eʲc ;!{.DʕU1ޝWOV?_o lJږGLEb5 Wg{[i-a/WzeL^˾R/X_0B)E _^tbO1c9  &.҅ (E<ʙlhd6IUx7QC 8"r)jvmw>9$;l[I0ͪcRa8 X^_CƂdZ ;&6L00 WxX/Pia,j2):tI mWQpmHV2s/7Sd$¬}gfLh{(IDC<2ȐD@GttJ3891!G=5rbjHw2ժ9Б(Ul~bt4rĉbl|28w :O](^Bi,|{s[*>WBJYZg|h0Oh:_WKK-2j<qi>yi?jW Hi{0kb/^[+oB:=M^3hDwYBlE5q.sd!|YIh9Zx*Ov? G^J(2`^Y JI*dS.O;F𬻘Im'C5c ?(&U U .^%f-Jv$T>M&L'm1[Cx8&n,ԅJ#dC%Lb̞گ6X[6XFr:l"q b3" !ȇM[%'0l-P6Ye|^k$߽)uS"F%֫{ch?u&8/Ԫl TqPd։(rP9k(F㳹Uϖ6qx kii5x4-Qq ^%(Ka vhQ> Cxe/3_({ce<)j@ Ÿ&+OT}'C4F5<=~p%Xabh:,k^ME>ۋe8ϼCb@`HQ ƳˆUO V{HW.>2+sZNKp~J[lNyF.$<V oT޺z1Ŭ=NRq&A4ۙF~(ex*cE@4_Fmķ]!88;O*hԲSIȜ/Q(%S2Z* ` ;Euf5qd{c 1%m6KZk1 3/`ϚwΟ[yL|gBxf buoYPB(TUyEjN[%F=l'?0~)/VѤB:4 i]pǓ !aSڷ2>i{: Ԧ8_t(#q24jpZ[*e"`WAnN)4"W'2{&8EbK}3Ho"҅חJN]+ 8k=H{:n=hO:=k1!`f3gBǏDv 1_'"̒>>;?j'R%x g8!wVr^纅:t q_N:~0mcBORI2U=#1=eYh:'ʼnOp#&?^۵k/.hQYgI/{[0u_$4;N!ڕ7@car :[δt[HB HAdAе1Ft' ]J רbT6)ϋP z`}x}^QhNmFyG SHinkFKŧ%b9>0rE&,[.uPZt=fcX'{s6TQgoah̘Ÿ=ZrepnV*` e]7'6;Z/,o>ژV3ñ JZ7Ǜs0 J:MO^^j+p~TVѰ&@,<=gGRa aG1G4[s|UC,p,8+G0d4+W\xdk-ÑYx^N 9o&.b]"/*~N̹sש 48Dg89./qYO}a"[w-)Nz߲ogjΘgS0_~wD* 54S4a0C?3,$/f'?|eu!PT<|t9_hA1{ƍNDv M#\eP`~PYL_T5_cY^19xyyL\(MپQHd6&T/zLs8'K[Tm4fSDZ}LR`.vm{~=†bϡ|fVx]C]ż[hARQ(jPJj&z7ԉ ~c6?H%Xe1; :g[;{]cF"81ɒRpCM qȸ̃b0U  bV/%πyF Q?vX=&Z`JzfSQ |,W$YӃ+|M+bxCNOƩSISq7aIu"0b);Ջ3T)/$I)D>7~*{n /G gF՛jk"n9O|ނ)"e|m␄X\2?OK.ʓ4mE+b`)QԅL>4fzKwLíG)i0s d3N±3r$qZ`qEScYqp9S^(}8]s>>|scG#6;kp.>~׳czĊMލq 0k sTJZAGϘ8Ao"de3V7Ah9,`zgZV4e[&u<R[k q\ `rK EzͥvY?E"$b;&C*ΠeJYG@N:Qs 3)^mMh= 8 y2qM<\\4SnAjA:]4 :/0hC1SeZ((@|CE1HSͩ/_MqŅ+$S46h!D[nZk QRAKW5a熛CȟN!ƚvF0ģq-AIgy7K+"Sf)mY,3[Z>^ ~ j}uQ"%ȧ,"(~aS!7 _DqI6.y5TڢU.Xq3!n|%e` t$z6mfz'ReTP0rMM|¯n*U;6U3J~ }DUO?Faf׆̟sH1 %^@fBC"09%0z;I$J0fu̞.QtIy**k0C70Ov[E៘ZV[ 0$$сruWЍ zʎ,)O^ ݴ_*I#1@A`|J9kZ8{:!GCQ9ѥȶJ)EZ # l9WbK̛GEɰ BGb5W~O[XB#QOݯ۝e9?2 9"f6&sҝq?Rr3^z <5ʊ?g&. *߸ȷQ+1Y>PYO%4fy>D)V º{ʐEZ4A,zŁ{t#@#`vu_o?u})pmx}w!i4ސ\@]8^s ߵ$ MҰu@! ,Gw;C-9lvV/Ѷ -j3m(8oWn"b_5pS+wlo{>2%h WXF܅dnN@c{&䆥_)Sc+x~ F&PЫFk u4GIs)tOń!)T!+@essɛWL|hAKzΈo%oܽ2,^,tbYe{3]_p*9Kt0W/p:.lNQ B?9(zl𿻜$Mp*et[ xn}wBﲒEWBS|J$ } [6p`t%x7B$6g ms_39{zdbFS-9[,4R˾x^Х~j袥!~9e(U噎RN]t&Ep ʹ*GoH{v%Lq;!)">aD)+afgf%aߥw'[bQLĞa. i O$"|?U~-!(j! -gJ#k x& ~6aFV'l_qCz4ޔ.}G7oh/{SSa:luetM52vd6^aEUMB}jIF 34%nuvOΨ?v-<Gr"KN#f3)#;ĭb-@^jc0<@Ь]TdJAJ(*oHO95_fGc"^%M{$S^JL[rx]CF,t Lz[h$UKF_^I@}h')|bsqGRffNՊ |y=LF>NYрr+`Fƚ3IBu&M(.>%sn8'cm:g\ Q6ִ)wT !y1?RaOsE-{[:V>t3:)kmoXs \N^:I>uSMw,!ׇ8z6&bT#Sfy&7s:G\vݲc?PpMfj^ܶ,\%޺#o$( n飼o\(螝eR/Ycyw^❳cwb}oVx[mءn'?<AiQ*Kg~Bgh4Ѽ ud7Ho+&겸03E+\B_ïH6IѢɖ1a<*;[s^K䣝o`QlLU-'`7麌;d[Y8Aaqb ψ-|Mr zx`)RSCߙ+& <bfuLViZUϰ ZÃRى]DX Mv~#SjSo> mlJ]jlMhYF ^rES._=C$wzG^g쩦N߃H^B0@^a{]=;{zVS̪U0 L|6J[ld4tePv6R5- '> !>@DĂK @{MW.rEQy VZ.e"YrCWǂ|%>ʶuA{L)^dv:fԄa~/ANP4L "g9&3d9f ;p CNj?m z|ⱘb6Yjl {M- J~wK vbxbb#e5e3tu!AU,>="4h<w.)dnO^dw=72`CI6!\tuZfWaPNNL47np;& dg&3*.Y!F}!vYC?81$;@\ΟLR~ 0Q1&DF)1 ,m#V~zgQuw)#Rͻ,|/eyqp~5yݣ=z4MWq3vUF Gz1ayѤ9JIM)x&>79b;0w? B߱QQtw/[3c?߸-rcDT~b >{nJF? ^=,;qYB^登!Yhl3S%3pDw Yewu&\'dj8.yΨՂЎќ2(Y%fQ1t7gTQ#Av݁WEރ~.,wQ'ZlzQ\ /r\@;5tdpkYZp* / }af'-C#tËAVjX+D`RxLFzQǫJOW"CD7w2X 7b#.JwAiP ѿ^]IEǀx =*E)jExB 8cmUR ps&t*Vg2'e) gފU2U":ڨp1MtkVkmuԾ/]׿?6~[5{24' 8t@`W vR`3@|LF+gC u7GMBk '`cchS0rw&+J j~M~0=" >Qmh|-lqw64@HHGw>6f8ģ ?{ @[OʷS zWxid YSЉpnԴBYE?rD+yj!RCp.ȕ,]*т_\EE73:sɭr xӔS`QOzr[p@+3'O:\'ä7=ϡ@Q*\jN|̰E`8$"FV"!CMo3Y,7>u#-N @tŎިs+^`\׭/4kaJ@3' ~amFX>}N )Xj+a&|,iODG.P:vljm̖& r8n@/fZUZ}?UGTW{`=ҡsA!r}|Lq65V?q|rI0Exc۪h*wI޵*5ϚPHujs}QNRz@--mOjA3Xb<gC4<(OSԓGGQH nHdL+pdNVGkWlj1$j k36icKd_cZ]h#wy~6a ^N3e | AJ#@Y%pVR7 ҕ~jqhRטBJ sa[lB :6M1n2Eֺ9ܶ b5Ύ<;A$CQhI% $mB:R\"5PrnA nJ pD#wžZ Z=փr2Ġme:]*  h9\?ѽNg!bVAa(2Vl~ckFgP<6xxf|W1&k}aɍfB#3e}K5(iۻ ?T?kXmj|juq1 fvv{iHVG\3 ́>qb`ERXcN饡 ,+|7kqK]YƂ *yq ^3BXyUy%olWp* |MnadBlѝ1uoXBII1 O'YF>zA- e(vo+!A6|fF%%R$ƌP δll;;\ޅ)~:7x|M)MFġ!)GNY FD1syOHO;M(W>'ΐI.nFDzC]i&%?D&ҔqzLY5N@t2/-O2^ֱ-b,r+'yRd|HUtM$ 6ٽмb^@>7` 2j8m=&&:2Gmn+.Yw~c531: P5x)PM̺Q*w^ ^ nS')L̒MF؊4+BeXtcҲkN%7X Vܵ w TعmuT[ gbހ%zm7s5h>yX=r#ql;6SI$KORǹe2J+[#ͿA>h"'ӽ!mpܲn h]{zO z(Eϰ~KLCX:}'Cܜ%XݨD766, f:~Gv[4[oA4WēD jz:3,{BzJY#7=ThF荤M)Յ.ű%y ]f3.[i>&C0R]iw K*Fn z g*-/ݯ^ F`)$]maL zC~`8I8dW B1U &149@=QГ mʬ75>*H۱T%J> O&+MccP]֙92E^!}Z{WjI\[FWbHƌD]7*Dt]Iv@U͞ W]yBtmilB7x7LL^y;b'%qA].nɖk2+,.J g%W&1͓x 5lK8·jGe,i"t>>)zVWH(ߧ Z>6xV&Ha+^ۇK#0hi}rDqv``&? dMz0xͭN@f9JMj?%]ֺ+r` $ԛ`T\ X|ñfahʨi YxCE2"'xwqF3L~G36gt,άi& Y!l.$>Ҩ~ʀ A2`L.yjzdz:rmH{?*k8Zձ dvoSu>$zfyV³h:i"]ArMʛ $%~ 79 g {xN64@#\vg<~uXnJzM!JA:5|0hOnfVIX_Du/(1xqYϬ6NaA8W8uz)Exz-rUPdk2"RJZm&Xe=O/w`.:p*n ME1~7sS5 no:>syW`Jt<8n 6r[e\\q܇ Ms:%}:^I)s@A\Ľ)g9!tyZr>eJ/k ΁c" G2cAHILZ]IZ?BmtG A 8ẊU$WW9FdO;Gٕ\҉LOwz@tbg ^:;ƹ{ސj/[l+d_-sӤy& C]Y?A CvZ (x*pNQT1!S}D-)[vUy&^oȺ}D 7zj5fZ,9hPJZh|{Æ{~`X?1k ǗD(ץ!dps"_Iqvt޷v!IOD3 ѼqOkXaMrc\Z LfA>vVmSei EO]bVr?xi5[pFȰB~]Yy ڦiݣ# tޒheD}b{W> \!8\ WT)Zn*h|'XDI۸q|A‚DN߭TQPUo6VQp|T6H4XAHUej ]0׾i64# ˊ+o- FK\?/{L `ծ7Joq?C))"ݬX,2mv̺WdSKI1Cv*ٶƲwb d{cV"2$Olt; /k8FNCNЖnӚ} o[J7jE̋oc jY豌{jxͪ9br7Xho*zU|mNSRCm%qfB,SPjBJhR*SAB+HTVGŤ&%5K쉚n3Vv3%tX(B< M[5 0ݣ[pҰF:RyvSKm'#^;݌7)[&tCoX&?ZK&3z XK(~) 8tn|cWƊW5_*4Ydjg Pqq?&Tݖ脥t[:j!߯EXI+L,y]  0S층=mDoİYWEtj҆^/1W<î Z*( ~dp/݄Eu2DȆձ<خ6{: ߕwؕ|)X _h' M7oș_ ЬagH[v'{-6IMLU9*`hgHe ݂x3C\Ӝ3q*=;T_y_Kk4QJJ<>TL#H<$63d*¾%7&uer<$0C1iԿ JGn_77♃6dqwp2{J r$X) q"*l77IW^ b)D2aڊTQ)FfKgi~B%5"~#3@ac}f٭;|z% e&OƱPz,E%=eVҵ(\QȐ.JBE}@05r3 :fu[Ok<%LG\u)48nlG/A<˽QXe$$/So!{$ו>hbC -:Z7cD# njSt)x& z'?1uNj7_dJB@TL>.Ս`ncJ.GSIgɭ>8#rg3*'R7v)gxնzCK266p$ljbԿxVPYcVIy$O#lB1 , Cn[P$٤!~[жS(͑اLzG }\S:7j?|g{a^syfT7Bfض;pnV=@BBN@r%sב;c}$ӶJQ_}Sg3x`}3.s?nT0_e r3 .Mwg:Ú%J10[FV!Do lMo .n~#[3vngWVѥȷˮh! E6X+_򭮛<8:xn~tK6 EE4gM0B+[ttl'ZikD 1' ʥxJ Oʼr (~  A;Dc'E$t[G4:b~}j; RUl*!#wD 6P[g+/dr1A5ppjB,vb_Scr}EZ,3&5I[m wĿJ>*vOpcKX. [<.P ձ+.J_{ 2nUq\3 SӾjSme|sgJ @0g)np떄a-+jvU ݰ8_Re<]2x75e)QǪd_=@[ JoT:%\שDGQq_xX~Һh9>[>!쥇TҍB~mC[ö́"d.YGL׼TU*q+r[K|Dr吷E'Q]uq h;hHs ڢ1rH섛NV}T%C+ -4Hs(LX(dkcϥR#&++KQ^S\fEW&w djR2FwcqH)>Ž`什-݇* !=w*˴@v&bGž>Te@ߧRb&9P;~8!1~o 7sZ%{j&WrF>ߐ&ExshVh8Zi"QDx)/uDbt^O2'FXRn(a;1d#Xޣ80l#d~PxnyZ`ٱ!t*,N4PR[+,p%?ZfzSՌqͫS`Q%K-51ʾJiȲ%h$!No;[̥`6FOern/V$6B~Qu\tU@/*ywfɶTҎ>6xV͡M|vgrmczPy^rK)^h%RXZ$,q )!f٘9p '{bYߝ4THhh'e\CjK ق CtQ+sq1/qcD 6jɻ1.PNabҷFެ Wˋkh=?M) wBjfd&ǵ>1rF@8E c@jur;),g|B$zVRf{Eu+2OQ r6QHW"r`&i<tFt3<*)OG-ͧ9Rd?҄T}f'e5*iANҞh-MN{e7ՠ*kG?#rWPzIva}b(3b]mDw=5M).]O}aFzZ36qg#]DkTn- R4V Zh^B[5r|k:OӕYq$kI~1L(j)_$`<+W6?coW~!D}:Y $xqZg@TЂ:& Z laͻL*m.>)v_(VV=Q=4K[ < Um7kn9NWAM[,0][=6sRQZ2}\p,E-׍2UO"ئ8C4T*JlW|+AVo\1nݽVsՈkD !eD?当aF,2wxLy{{P<ΝmRH/ޏ-?oGOPq'n*:hiSo3 C$eIt ɂU[6%fB}WTЊ Q8 ؃rݿy,Ďյ"l{C45 b?lUPtuwȐ 6oBȍ'̴YA0)pO.zupqz  PbU,ghɶ‡7z,%G+nGϒ+&aKӹj yk$~VGI%nZʲ#BF}YgiDl4*b$-^v6Q*Xߙ V݁c4땮f7A(k. uGIܵ`ۋ[ HBQ8Y[xOF +`/&{SHHDxw%} [ZÄRDGPlgF+,v s)=&xbi9 .|3Kzt A+z%!?j(%k)^E8 =1Ŝ*[K  .qe s.$];9eA NPNzwDZd-srw2'׀ttmڒEB Hp*iQ7w9PW#KT28~ԢSf:;3 wj=:І/Ƭi$bS)<@PC8̦< HUzf*$9]X*ulZ:;/%6l);r@nVsI[H\Eו1|";َqQɵ!5 &ىrڴmqd^\~;;,Fi@ p Fm3٠2رQ,ӓx*Nk,9.k_Yg~X\/Чn:(gsI,NEWzvmwe@k0sVXJOyll9be =wi0i!Xue1}@@b$9 ; ѱ,8jQi#xQ7&͌}f̜` o!hQdiCPW$2YLHdIs3=DtI.B[u!uߏĎ~ g>a(RBAېUX'NiȽVP,C?[Կ tʮ] y'{D yދUB|7.3,Z}EsFў n^bxq*CпޑSwg%slś˥  _\t" /*RLJS&9ez!:_.H4D rV;8.uNIԀP-mR]5--fڕWYg٥`\_34=ւ1+>j爧Gx5~6֧0ɴ%Jn/-x?PibccS8 do꿉ՏvUu!]? .ywOl O>v@n1_+.Wi&.JPur8* Dy)tM=$v`NB^B YWfw秬N6Uǥ8 ": {t)Ӧ fUʊ[(sܧVꏤueziC7( dwc74~v ƺ dt>[*Ot[Gg#ac6|᣽ Ad>#ABҚk"?w'oC5;;'ei'OtD[$J `WӮxMyJJ/⩒@_ea VӃ;q(?M{(y:=Fcm%xRX,ӞԬnµ^ BM%W$h* pp׉IN(m MC\1ÇWMPB9iބ_f%p r'["j5yE_* v va h@~#ծ_iMPQ%A@=wgc@<,lLܮ,v!4.]Xk5w\wBղ]~xmyeh,p$\[ð(Y+S͵X)%˟Jf%NVA'GKTx NM,a4Y鐐zO`1מÇbvdТ2pzBf@IA$eX/dTlC+IgPύƤeO@Vp$0헻(0;yi5:+`#2Yd\82Z3KL!>ut$%'ދTT.#+2?l-Z.\-U~bI%W_+}Xd{Jg«ĨԈӌ| ]V$:|!#ou'xlZs>, ^,5_tM{ r,D:u Phχ:'AnCrdyvhyw2G5;=R MSB[Hg׌Yi6hW֦TOmh"5H։&Uu$e16}- [5uzI\/ U}P:/!w?H̿eQD*vx˲y7I.7uz䭡D@Ͼ xVMKl&jm; ӍvNDJ~{!ʢ}h͒ReFT|&^b2] h͂ jS(]0'Hjt dw$؈JO^c& ok &&a>e0tYұ5#3RD  h}M[ebL#㥾N2}pK0m"YI#9 # tD]utSLy/~=Q;!/V!c@DglFu LkGZ~u_EKG8%"{mD:<Ē5{9v$Hٓq-upqq{)I,}N;3".{CQc)FaK(0=rx WD\;,G R$q"_Xne*ZsS-e{)LAkV{rQ"9-lGhW hE;=9?\[!h 0P1}5r !|ȋ)Iݡ\P[NIɤ OL_Q^u,%1\>WQ@9:1f9U#Ql?Sϳ^+{?x7O dD0.x6G/QL s$( ue5PىBlr Htlu#ϔܦ\ꉟ@ xR :!o`N68%75 ;ժx3Y7N<]nDbi=-n WՑwuVѰЦU ڞzY:_YΘ K&qDB6fk&q'hd˺|FTԿ'22qY)C^2 Oft#緂4:t(7.wy>\(;}J bon+4ԕJ=KY 5mTa&cn<Df}zyqdJKEG\4Jb 7 ֤3Q{Ew*4~?`-t-a5Rg.f A9R-Y;-foϥ#Thnd(Ft@iZğ.'rX-G{;quJ+e+'Yj zZSW+g!d7r[T55saxNXq1rOOEow0 IŒUsZUr8M]?D9{JJ4o~2FU\Fv`Q gpvEM+$2`eS ^*]օyBS).l%ynhy 'I[=ϔytwTZY1c6ɻnݸA<h (;jcz@5mZθL9G]9?}Wpt9ucI\J2MSA^7ERhY>US k(uƧ%\ {{.&h`ܱȐni%Fj͋UhZ4Ye(SK+v{#ʅ&wB3Ye.;?E ~+n6N`:9;b3qk0Lvydwy\#6ANt0*a!ң G_jk yOT>L:_W@[ByJ!,A 0[O/yL?wbWܡp&O4C%5ՄcBe4u|H_tNLdoi s4\,Sjw%Tn{\4/9M3`yF0"#[np,\_wZ.ĎIRX~~8KG(@` Z;z o&vJT (6'\?mܜB~/5ˈ:%?cQ6[ت GQK^ۼk6ѪSxڟ$}0g[O ྕpPѯ()`/@Js9%QVֿHG\z+KۑȐ".Cc6eaɌ1>L-Y/GU,_vcN@k<]MF,5rk /!Q}zns7rSG= 8p |O}A3Z fzW}0.ZȄ&S 촸j\>n(O <ɡV $/Ǔ 5EV)j.5=mQ.6[ bkL@w+~A*ъY?}) -w5ßFRH:K:dl;;34{i`-Wq T׺K\ Y v_V5\qbSsNaV7æ*TnaVPcbrJTo@MƏ. (y?fs~\II`SbWVBX=ͰE7>6JnЫ˪#L4k/ȵk2jk/MDWzAqH>l&VL䒶^;&Bow17܄uw__Op2RRVOz#.t 0RT.rp;./VXe wkG$Xfv'!y8ScI %d Ss~{Ȍjw>%r5LSEhApK XlAOiNO_&&t=` D_ܠViO #0(ݪVaHQ8dICI^WS[QTMPzSIyk{9J˚T^-3uhHjX<7!Lw+D0Zz1U|XuVy5Hp̀~YoaG ~tYd1*^@2UV5/ތI}iʉ0y}wD _m'1:DmCwsmȰ̲?5졮8)q^d3+Z zޒ@"&6=mlcp@WCafBN~̍Vm#BBS,59$MXmx!ppO3:eܲx6(l<ܾ#@8C @JLYDb,x"9n>$F0!p}$>whJmh%I}K\qoaֻm[9L>~6 [YZ4 F\~ĖJ4'Q0”FA,_Jp*~a3`KonP=Kɻ S$S?t@JiF4I]T 7}\ _` )nݚ%tӤLۣqGa,j&ʘVo(PD`ƍ.㫺4OI3Qq2u-O2p\6-k\=ΉG՟+RoI?,3 .b`zWA6<:,5Gl$C=>[0UkV L^CVʿ@wV4=6P %* SQ{ጸxv+k.L޺6R{]|@`nj~Rq-8lL-~ "@s8@X]j|ٜ,>fUHEuX^LYU=LIy#bWȈ=f+-t `It(qdKR:xlOhӔs 4cA($s#.YïzM3СmΏ܊t^F^ Gp8~|Lbٚ74|8IT<>N״!UwG7l]9v`'8WM*pp}L~D!' ]a03E8?k0%cn*ۢe |:륵VFW"/HN]w]av?캵|O>wN .Aǥp.Q d ~o][eE!j Z lm g2&8Fg0^D<ۯ\N./h%Sr_\q@ $Ĉ{?e}Kca=oA1/" ;2p9UN]d+i٭u1)~̊Exf4O\y*2`d1ydCDHaJ6 Y4ɂ@f&-E^b$f!&[/Xlg>nXV' [0x9F@C%>ƀfmujP<לXgȏBr@1!!L4sQ/"w cmhVbSu [, {j9={0I;f#9Gtá; l,.}?å:~ / 5Wۮw;;XJVɥGU?^i2KL4ǀCTԍ[(N{e.Ο4\BqF7pF:cB ^__OE|$Ac9``]p?g0q뜧Vy|w>!fWat |qÏ</%{Վ@Wmug| =0ǖ15/׹TBav#zt~0SZM ~;V)m(UzԖk7H1g}\jmƇfk>PR{mTZ`1/qb LIm14k:$h0qfs `ex(ۖF#1\ !E>W_Jn!%x?ٳ麥6*YH̄<{㯜q˞jIn-T'$TnnD\" ˕ d{va\N8ǭ| 5̷>f2ݔ B|vL0,Ҟd5Tbj-BG^eգ!_(\&b.CX𴁇0{ =l ^~y?&[G?,gЄP7@eq rə3N=7`0\_]]_'z-l.r༴ -G &6͋2rx\9ȈGE\{WthXq%Wg:=B>mBS0pݙc灉x[5#?Z6 cmL>6|%po$e@FK% %&Icwۖjy99nu)xBbF".ʹMGTqk9 {t6x;9-8L6%*"kiVo< gֆNbmh57 qVb,y%XO6=ʣzޜdT+adg>ҝe[:g v>pzu>\WxFj &Ln{A'pB;WR_eZSUWBۑY@wje|ui ; 'w_V.1׃4WM8(s?mIυ.!Ѣ[H[+Ѿn,&kE:󊆠8oˑE a]'gr"Kh!jHzd-r0An=vKLNXR%Du˾,p驰2NڊaO򠁽*Mz:8/ 4Ճ6TInCa~qw?<ێUaN`ď;mEŠu>(8:av F[xBu1mWM+5s11ujK`t~Œpkf,E#4Yr5aGb`x |\MQ ~ d*_flJSї$ D'yEU؃vzM"Ώsٍ#YFĹyY,>j>H8^+,)pO5Hx~t0޾d\uMƁߥ4jmS 7L{tLQ_Zu\/_ Q^:Q~xqSbxznE*@+HO BxEUV(4S)BtԣUtq1}XdJ)K~?Nhr!Squl\%?[s5Ђg>OC͞aVLޯis[sf}-PzECMeZ;%.a$;1pOHZ޷t23~^V8`*if"vn:XC{H.&Jee9`p5ȳk`AuQGWDNgE^nszo:_TzT7b: UTBE$v=~%d^}49ePkK'r0hD8sq^C+.Y)B"W8Q" 뤠Mc~q%qSjTVE:)}g[;VKZ$[T~%= ;'h/<*G&Pj6] 3mtU~*b@'~I#8ɶ^FH~N}a_yT!&^ݫnlVh- A"#u, sLh*뢕oov=dueVvc]i&5(Dȫ䋷`q]-Cz7k\G뮰{+ā@= \<ÐtܡD Fa8]5 dRO?=@B]A̓&*G -P{iڍtxt5r"zG!BO~K9I]lDnTܽ/~ ƿ&opF[>J*^T\(N|CS꺫-`$n'̰b1K8 M$hLg4Vc¹R4Q›@MGV`1g-tmLAMGP@ ulGC1'fuP3D1@{VBR Ř3Puu9{tFW{ caU Wk @2ǎU@ǧӘ{~H7R*(f7:*NlVE '*OB'@g>ןj)ŋ[C9Vbu竎[ȊS\S]!.r_4WTzkO}(%^6L9SЊBw9d"/ݑe R1":jķP]ϬG}.#4&ﳄSr*)/pESd6&9O^N,>B~4b jsrq8rσ:c6; QvSjwDrD[d1=*T:cC5&\T soJ1JF[ Dut)Oz46+*I2r+uTY0qxG.gǶȽ?eO=L حߧyO h,LKFy@H}H;ORrïVW ~; Cwx}-=r:sfss|2^.?(Irqyn'Ьw`bW zwpg1PueWQEn| ;$VWogd={]Mhd.LyF& .o(/"6A*ƨ%|:XvwDC73t$ۘ :%*'' jJ |d~DӼ-SLD.bӶb Hz]i6xmͯt8gIi?uB֧/deJJB>~ X,SQuvu O9 gZ:v[S F7~ Ϛj oTb2ʆ` U}[+6>o 7{ FbȜ*TEfчX^8Azsf2YΆ<@8_IC (+]D[6@f+&RrfK^WTԮ͆sHOf?."G\6+6XO;~ue81F8X5^V9ϒw0ƦfÂ☛鈫N=?890@c7W_WB9@Iwݖ,V|j%6PY)t$Z*g`h>6ӬА`b<>DE  ԝ:$uey/5MoA0j:1 $٬C>JT쯿p=3`'1a)m?+? 0]]e_om,ZrGDt?0KZSG○D.g 4nlo2B;d?ap%[sfzٔu$W@~]ݧ@gQ(Ml@cZyو|xVf-}= (E[O7baTX쳺}GkWrZ2r~y:J88,ݻ: #4]q)C9)v!+ČR'T7!p l#ȹ p"5ni@9Օ($Q LG1ц5Z'F=&-T"M^G JMj}eȸȩ*% e.|jЀuT#נR(qg. +7pY`曵BЅW7oDe`[ێ@fH!?Qf Xne~.x@ﺮ=H9 -c_-+/3t&NXcn83/" Eo=hD1ݦm\TpT1V&_*@ZN@ƭ!\^;~wxk81(t*/Hv`oҷLGH)0\Nw <g2R WƗHK`%.o2Ӵ@[eޘcI`#qDg"%W[lϮZ/Z&9T @s)tqN 1[W aQ,0r?x7CGό|fqLt޽בZ7Y~_шgDeJ(Vwx=L+:i@os)|Gy0~!dzrqq };bN6w22IbTgwHE- !il~k6f,_4e>-PV[\䖎<>RSB4:.l%P&1hWK~6q9+dqɺnW[QCAQ'W][ڡ,A471(9[L4f:C7@ uް~}/*ob* 찒Hgvnvy40qTWTSok"2ո Z)?HT BjuA y[C1^#4c:<dWsU:S:hMCs"G'J8q,.*ZRU6)&MA[( _+SL. J 3gK{BXGRU] N~W;F[^GU0LdV&d%iaU[]Y1;)ZJUٵbsؙ/4l͚9y3[Io&J4v66XQ:lJv;2̔\04`6í3r f}Ar]H -^BLFX0"nsM|Z4Ԕq%A HgMRV"<7yQ^o8‰~6<#b$?5}t-MmLJVtW%Pt~aU/YlG\%̥O}\!nN̅ܢ?~04GORli,hSO\@خ}~D'sa,HA]u4:aW9:'6Oܢǂq|m5U1,ጆƀ,l)(n?A!`˟5|uTED~W't|lpFDr"9z3W_ga /ޯ"GI gӺ*z2ӦFh)Mk^o5_zzŷs渗t 9ҰbJ>EN￶=4|I.v~=A ImNt;Ek+c'*ƫ*4@b{&JOuImH-e IDomTH~W,6ړ]j>u0A$Y6Lu O4\ӰH=_8Qq[5ėCycrh7^{# yLߑA/K%b:N0ؼ#w4}$*;Jtge`6qj} vԢkb9j 裱ͺu8Eg[lYi^9@E} d?8M/{_dhVT/Mw@<NZ-lAcm‚p-BN>d zrJbY<)51$%LIH㓾6Gڳ !n7d4rCOACYI!W)VtO*^앶 ̗cP4m]=B);CuX}-k"AcJDWuM !=S]*l x{I vS X__BirY@ᶁ_97-ށ54ǡQ h1sՍv7!' '+ˡ} ?˫|3/iBfHJ^Tic:\(`c #u]ۈAr(zL֍|$ ֮K)StcP5E;&;_=i2wedRĕ[ꕦ;ē2Jptɞ8*3l7s&Sx" j(ܖq%tL[Gn'$PAiFSQ4R62/c.3R!/@Dlu)$o4.'u3ըإV/B=]k]d(@ 8>er*%UZ=T0o8,3ecJ-(*Ȍϩ$4)'F-"3ڬ:\qeNո)3#ŠŏGx$y"M9hgFLbqdRhTM~i1u8_I"OdE*j߭04#UbW{駛83TX94>& >Tpn?GRa,JU )6dl[p} TBE̜  MQ)ysF6R1/U6I~xdXEW9GLQi|Bizz)m yuL xT(@ %h!qsSg,+ͣ' zb3Tيg*i] 85_oN˟ )P'I7eX?$(1 FFZX\ 1+?<N-y#aD6*w d#`:[]ք)Kn s9zUbBЈ xu:9a].ɠxS~ΓZP7wxJNxSnf3.vNF@~s03s;$^WT0 vĜmu%$ c oRv2~VhZIŠ?衝O s Y⚩,èYA #}:U-**˴" < &ӭN΄+%)lb u:P$^T^2[%ШF >vRQТk5dblpztچԍjěCqB  ؽDLש=K;\pj 0S8M]rG[7l*ʺAIL.Bܪr~%5Pt,[;] *4&{j ,e^a[V8VWjj޵}k )A0H-q`>=[9>.c4 mI]\&*LK($4ì.LHd$J>0$/] ޱjmZHqb#7F+ wI;J +(Nz;6g 6$#С2Svաղ)UvXYeIqdQꜱԨNnȠ"s ?:\!UItSmx(@v]ti zHq񲴈XnGF#o1Oz_Tf@|$ǒf̯ʏm6+g1M0-n#!qC𷓠$t&=j: dzǞyϪR 롰ƸqSL׎iG>(+ˇ]gɖ,^ vф[#/6P`+J g2v u صSRy`(0&Hlis"=)y/8!P!{ <-x4K5/wRA?N=\,& ٕQKT"L5<8SXLE^p/qT;Y4d;,)Nrpjg~tnJcurPd{4~U5a>I `Сcސ ʕ|À !}oqJc&CG|S)GiQ_@Gp 7U>[r !Hϯ/<4tKqs hdiٱD>f QNǐ8'X_L53fg?NU˭+|pixеQp^>`mI=v6/#ަEE=.E8zPʉ@3Xpg~j7q`]/{ғxM@7 LCkFk*|OjkfΪ"IZ 2U֫tyM8vhk;ӀLG10`8u_$ݣBr u5łf&ſVeZX: !nl^l Ӛ,ef'l|\{TREhknbZ$QӮNo雀~u΃S'Ո1,o=C'ÉڧNx#1丂"4vr̨p yID]3qzG fxA:ǙEHQy̹Ys8), 3zJ[X) Z 7FB:q8.J]~'Z79>hGQvw=ӝY~!=UXr_@=bPۭsXdEZxA(;dW]mK:}1*7mR'yahkHlo42SI51"#-9\&T\$5F"Q+Xx/cU f.%}̽ Sޅb?D48|^|c8̆ܭ:^%dB ߄ez`a)a\ j|X Ra,ޥy $`(ܿ&3ޝÊmBm~UO߸RKXBhEHDב 3^S(KM޻ Q 5'v!|vPGFϬE"kG.m:bw?*;n/#X0h L2hH9{ fO?8a\Ձa'7-ygķ YGQk٠|x}x>n6s 摙fB%`:TYM}#} bNi[cWv 3G9=13A'^fI]z`9pI4B+,uD noip3 ~vNTH|VwXy 1"Zo GUI6;ʙD "PࡁZ ش8Fc/vwg܋2L_FWβP-ƋFH B F0'' g<i;>ƴczp7L&M)"}ա S# 9i[ƆV7? in?ӪA SЇR1Q>=-p%I/44t?}BF!T窌㳣:u4=5#=㽽j$$Mf@)YuL* F#s:Ʈrmy WKHٟpۺUkȯ VʑiP%6 ˸OS}<ׇ!iPʖVuơlВ݊-?Ysr~8Aq/q}"·LN1V.g(0'K/|8v{Qi`Mƛ٠l`@54Kah 1=vOC9;G_&$; t;+E~l%46!jCrNyaT=jgFOABT„Gx$dgj|INnnVbr[N D:VVLB)PGIjs%gԐG w!(?_.cPut6d)as:hOˑ^p^6vζ葮1)"H!yOXt¦PcaJHYZgQ;I*HorjVTW^yWӓEȽxibwm;JƜ~(U< STu+HC9VoEՈ4g]Gx7]_,2r g?wX>µDf`-mV&* rBR~ӗUJeM;;`Gʠ=;b^yO3,ظx b8 wpkPqXj\!,8{;k|COlΥIRZe3soO]+lUu>y,돕 ڌ%kHE]#-}P\=٬Ľn'ߓ`?S7켟ցy.O rYp!zO@k;E԰ 'oIe0mqq(sXd5iޝ*~?WÑ_H% J}|QNޡjL?2lu!?f)`@F4( ,czCIY cEGe)"SfeIgm"=[gcHU~>ld 8+7yDVL+K*)Vx m;4K>/GHGJ7g';*l4e( KƢjy!;#7*(OupHT"FIY D3R̒\{ "T\3:D}}9c2ld}ӰmZ|T'K\Jed٥K /RPl!vW`Pu䷬rrn6ѷ˛v?KI|!ef={J1hEq~ |X\ ī1 Tb=Y"F%lYYˎE == &r:CG }NHQ%XMxğ2-Jȸx4-铘PQ6(TsbLĸ:?u9ܞGR* 6wؖH9Pnq?ZvAJ Y z?y:oG2 ^Bey OkhGꊧzߴᷡ5Ys5̳}"y*}WG~a xXإT\'ǯ.ۨGmF1TG(G/&b~  S(*蛻5Q1w^'r6wߢ|i_tDlU 'sGu8t xFnw~N֤RJ $od GQ9װBve r-B|v" GҫEw Jew(r<ȉ/_>ݲ -CN-xA~_`Xc,bp,Sˤi4@ܥ]M}WuC-nE*}@~nb =@83\]q&Eb+!8eUH/VKPh9k3?Vq3WRpK󭪤sΠ.۳o~f! `3uk2|#`6˘>)[!$َXlFʢJ %@W|n*a((v(`8 L?X#00UXn$ٌ9jRQƑnw IV-ttqIaTdZtdud8 y;gFyƠ*5 [EOV1Se$.'6SG9 Q;1^w[1N.5Ǡ;(c P[ADeė:3`.>KQ8PNFezsVz u0;WJ݁or_C=Cpxq\6ڣXu*d$0DfG4AgDCeo=hyCFϭK%B-KN>Hk~5 $Q RNF;±}ASE`jY|8ҽ?, fV 6//bϞ)َ&bGv ya}¶w>M/r~/#ЈFJ#XSzM/[b/lB,T / DVjqK3ew*SbzseGD'M \s3'j MHX+Nٮ)ǬvxaT\H\?({=c†䁶'|{zc`z,C6ĤĔȌ|\_^fUS(G@+U>J؏ЁAV/ylZTG E˗s.5cҲcϳh0[.w{"Xn͜`a;dң oU5/@+c*2`yXrOB(@ v%ř臲IҠ+]V('I됱%BvWxu:넖j4^Wj쩾)kSgY<ʂPEe*҈ \*4`fAi\r%r;i~Vfj[) 1sw&`(_&]1 WCc "Kű=!UcDHI_ %K6z[{KD ^jXte@ :QԴ J#{H͊}cN5}/Ƹ)pL en00 W̟[mmd`KݘFqNNԧPghxCVvo'&Ll:S~wJȾg>MuoeԶ{^LQpr攌wJ3RQDE_ztnUOC^ULr(0m͏[7Q6F…4.̈́7mB{ş@x}&Ta8 GTr1 C ႘zbG~GgҌ1!m ̇Jru(V-=&OR42 0 * ,ETԱAa@͆j3ĆI~ 5XQ)tAM|k1 mg,z^ Wp:0NG5RDgĄr "(OV;ЋLm tŌ#Cgp<]0ǙgNʆ]%,< 68",U''&#d R ߶kf֘L|'>oU~Q^]'Wi>_Kqx`z!?(OB]KѩC+OE'l(@>:m,!L ;pr*f=C4V<.K0ۇכkXņP3o/<}(Oqwn fP }x.7W0vnyqf|Պ:'DY/8G5ѻj3srpF~Qp_mkNZM>h<%G=oC pC}چ|zeu|?-4ae?zeHȷX<(SǐѱU5; )3sQ'y)}9(TKK!R8BɊI$!#LclU.oDܕ4:ek%,АʑL-vc$"9P'ShDFo0i y|/%ҵLfɒ8y! (*uƮS#wﯠzYԲo[ E|P؛ƬT MK] cب>Ce\q2$ B9YbGR:;#>:RSb`d7!'̅\"yr}ޞ@ʯĺ;0aGӁAҍҪQlF42UxWe?X/* =yٮ `'_7eglVAvTS,PAÛ%߳1Wh]tcZioncU`܁A|j`5j{YbIׂ ]kvSy}XB{~]$whxv^M  ?Laet\3L'}pb'K&>U2q?rqL3yo~Fx,)ˢm peӋ%D sS`CzgZ%tKG(,%Op]'e ;B#P3`GLtoJ|ko5F$ w\= )䭫=}ʗZ0 >^"j<',.#kD<KNz*lӗF)LvTv`gtAP:bC 72@NwZH]w#pM/%8 #Z؞."5(6ԉ,BVÄn9KaaB!.mJ~ 1નQz ;ItGs_)bn ;9JfTz$kEeЁMR9^piL3 +a與rٳymNҌ@S^;yK_G}0DESw[Irz%XC&Wp\yDk7vHb Kbcݭ_9'Āe(=,g*2et;,ds߬6X;>E j!wP>A kd"IlV$СTz -PwӡHtRCdRQd'%l'}{àp헞yZ._EBwMs~lsRW>6P"2?.Jֽ X!nD P3 %A ,Tn??P3Z40d=Iw~E#wYc%C%EN3O>}ǃfpDNjM-Fc9_Mj[9~wΐqyY& "8fiuEԐ, ?iWɇkcfh؛5+*ohr. fIX/ 8ͤ9`ͪ 8kU$3p/+byɳb4p#6l4W& J]g17,$•`:11NiẈ>y'8xI.=eqOy!mOWuRl[9Xy iړ=;["6Jg u&^TkqF XˉO.AvM .xnpFe(@R Xٳ)T$ˑ. .y$m8ͮll17v]~{\n(hpB50u]hgyz# ڠGl[.u0/Li \:/]>k(kL;&pcceL*(}{.GGO atRCjkE헂Lly[e p&0a\c7e]6 eMuk~7V`ܦ@#|gN}s뒵Ȧ*XvO˒1G>2|7|eN\V(p{dg]1 F`cX6~dW*ka KrryyEz`40ý2Dvmk7:OI(`0P{eKUAJ1fF13 _F/J3F%SV}"SƱ.b?j}޲tW"M/ULhH~(` @=0fF.o~̲FV10ٍC]ł[jncj" zQA-Qm֗^ pnۣAtb͝kčtЌr0r-7nQ?,E)#$ʍJ,"_f׿tMx n" -%vq*_`Uh-o}h^22X#3H_n|1S/s.qWB;\Qdv0nwA0"l lJQ'x~`[G\HSlc8jVOLڶ9]8){,N\OwE^.Efx_Q~[Fa"\&5!hmYθ̈a5X EiuQܻy=Xl }y"h8"Ndؿ`!3"D^|m`ok&#j"ʌ~z~Žv߬OĿ9o}[";{0F3#IU)$pcE`6l̓oB/+Tӱʮ0j v(!(n|5P^sg0Jrp᥆ vz4DV t J 9m,DQM5Kxެ9/(!Z)g̯7m~IN@`HUo}1{Icsr@KQoEvعkD >]sR6 / ¨K(0.sl˴CZ[3S0ӥMz#utVѳ*Dp4ׂȚ#շ<|NL;DhI誡D>m|jl/!-0ud4@3,.&WuFV墩g0ȃ^|VprtKC JlUKܖ+nTY8LRw~D "ScU4~{X\vn+9Dt>rQָVj3|ӄ6 @ï7wjj4کgE yH浠ݟ0%ԱU ~vk}d7IC(K9xȁ Ce/Au1) ;|Tng"¢ [Z[ Y;tyal ̿v?=VR99;禭UOѓ>ۂBXS)r N*^D>Yb2 p Xs3$[3tI1-`sx§#:J6fGeG7{hʸ1HT6ΉT|+.V#9-L;Jz#h/sHsH?nQd_ A. >>GB^^uβO.r0;rZYWs;i42C6>_0֖Ga/k:PvuV:6l9C-d%ԊU 44ڄ&‡x'Eljbm\eשdC| 0Fђ#1!Ef&b I}nFd]ZEHA)׆ 4G0t1J2de:%O5;i,d*JPf*]9]}:,ݚ~?nYVn#<˓xuKy\(9Njᔪ̲+@64|f)i>+s\W}oP{ JT^L'F9pz5n]ô}9&m-VΎ7 kVҳ(TGLG\KWT!(3E*j{ B);x axB+*Z4'ئ!ZwiYcC>`^ty" sT2NsMȃy'MXҲּp~NdZ}:9iPxg'D7/0 BBW+&OTΜr`ܧpo~NmWtl-ѩ;t,qt &cYՎҵ%ASApߝٰ͓{ߜOk:.8Nz[}G(MցxْwՏ\s+̴,29gF%+2#G*좙QUP_0V2F*6up^ՊLL2*:bˉ*ÇH`XpPc}6A1] )đ~xLPVJ }=\KaR͐r`f3|\F5aM7~pw^{ۆ-oy:|Р*51.㧑O#׬i'jwMZPLtUDrGXR/#ŖEW0>@dxs#Iz^Xaxdd{'I sAbφ&;,z=(14RCopaDc˃gTԴh 1NNreW v XS:&"(* 3^#~fd'MAMrc-y_f ͖SahQWhj# uPfv6a0~c<+8Yо$A}OfEȥwmCrPݠ]`M#P0+Вr+v{峜{ٲĺ5:z 1arja @Ji%$ %2vphn[5rJ_h3t4axkE'4cFBXUR{Ab~wsPBwm~&نA'=phLXIN"vܣghFb:sӊsr=[|k_qi MkM@8|a%|b'h-w->p!HɃV]x% b">8YޚÄ&NK g9"< EU mY%w?#N5rq:/ץƵ/;@…_Q%walľA(r!9TD^Lh8VD<c;J#r}dkT4?R#G0X@R0 %ުD3 Dv-$B:k#j 1깧 p9Vus/+O|%F:*o!F:BEX>b\9B%d[Pr] v5aBxFa:>*uVKmU5 %eZc:}hlvK+W(aqP5 "=M{'q yDc4 |'QԫI6]ꐯ@ڈ$٩`=ˆ{`ځ PWݓa=K`ЭD=ZW9=%;g\w+[{kڌ9BŸLI6i1)PWuDiY@fQIYrr]&O.W84Qu߳bH ]caRy3 \WJR{6[Ӫ9iK@ڈP~*-K}nO"&#(T^l}:?-tKۨDEȔ#Uv$^edH?>c9~Tytf ?Բ!c=1 TCY|%g{JN{h +Y ,o!pUE*֟3Cg(7`݀1o0;z"Ӛ@ &ө[M'.CmqCMhI/4Taٌڡh'sZl_-Om$KaT%3) ԫY)psᗥs*H Y*Kz4ۢY/+@"uj˔^X%r-no)K[ ߡ9N;ğATr,ԟԟk=$.~}06K[s,\,Hlehe E;r]f=8{eegztGhvn㺥?3Cc_WP{%Z׶"t/aX].]vIg2ct4 @]iV/xPcz+]k}T)ʶ ︇PUj΋؉xBSMA'FЩoe?pr =HBu "lL F0kjM<vB-C:Z^0aht*898s$cuۯťH2H耣O){NA G~/P_($(OʟiSߐ`Űpik eP3u(fM- 9,[R POKEiVU循n뇲솯6NFKK $«yܤ).@긯{w:v29qLMy.YAUxL}fZ*[G4⧵H9D|q`N4]Iɧs L+*}~ ;;mFHZ*_ rv15k^LSz Eh9m'HUC\z 2U$( igO=/gm?F"y/j@4}_WПJސ|g9JQMU7)rp>l3ަr{@=M^ͺp()V}\9r((\p/-?,q< BާlB3z^F8'qnjaSA Ղ J5HC(UDOR,`Kɐ/F j,_v:]7'gu֣Ps*E8*>IS.|6Lv dvE%դ@u笀!Qȫpsey"OѤ7IMo{+<&  OOT"PҀ]Zǵ@G>8;\֎nx FPVS[D/ւؠ2Hۆ?9 pX?XF T]K4W\ަT;=? 0(|ܰ NU .hR'sjr|V[uL'Gz)Ab,?g9ˏE(qEK$U_);etH%pT:mC@,Jk:E]/8Ip]NjF #Lo+!&͛t OikY!z7ϜE)Xm!+xѩW:1&3CjcSA݀k"A#1@[POBe)Ol]I)F L*j*'P}zY2j*?]wnQ(DxnC8rr@7;fJcܿ5y D{Oe&'DjM5Rw[!NiXG s4Ӊ|MSl/gßFc}Q'@p pܡ^n,K(2(NDey^#P^ijW A+Ph+^,5;8I]uqu!Tz$=멜_#pb| xf*-(]mT_r77_dأ<>' i^5k A E] bc CKm}|9r^݌Z=#q$?&zv/t  pw3~%}~̩ܖqڳސo$ĵʦLsS7dgׂ/__*tcM%(}G|Jںr:{-1أo28RG#@B$&BS_uWl+9Lkhey[mGF~QOq|T߈X"'s+.V86v f>䳳բGJ@-@ӝp}-;|y>B.јRd{ 'q`v "]c|v %n[czxF^vlm"ht dv<ʐ3_ڶGiv]1nT8bkQժڗĒk6WW 6 ^ "ҌInF??qdV@hO1k?)e(ͤp;1 McmGHJ+Jrlr=\ I]CοjŲ'K ."Nb}3O5'C46|,瘐~Q(Ǧ5N,0U] =E;R߭%npad!A!kDNTf6k|#|CqFcu닣$۵="Ke ~b>;)#WvnM W45fhKi/o9׷_qD[Jeo^F+>dRְ>7^K\dLsTsРE&1sq|O(Ǯ&,zc${B=YN,EşT;ֲ;~?Xh } :z:z-<$^K0& :w)S#Iܠ >Z7sKBP$b.ض*`p[~; /3w8LX ȿ H谵T]J&|\]u) YÈ* SEAx8GZPY@c)YvK/5 dԣ& TnHFr槃vxSq4’vk/|@ZxÄ1ϊm=My`P߉.'bQضzm0l2?D0]=U)BntQIr3jwWP< [ #ڭkd@gBZcz2xcv>1˄ 2芻=D[E_Ҥ)C٤$Gbu=Ff^藗Cz&5sGi"*`˟oQ f|zN;'x,l~t `GFȋ[V!Q:;k#)O+(2BǖCB2=H -1Z۶R N@w-'OqJNaV(#K‡]3jmկ*Yj[r׆~ԢAlFO" -I 7WI7û X{9_\ƶ*q hΐ@oEoQ=n0&3|o*!2j0\.mFZa`To=-W}0 dD4xԫȏQtE{ZXSmhQWS9sE(鄻eHKa賠ݗ^ً =t3DEcT[.X$gҝ_4XEW2q9Qdb ,1 `驩2ˬK< OzZC2 4xd|-@ l#"!˙>8-\*<o~%0 o2x#@Rr*2 [t PbN"7X|u4.K2CXhqf!*a z 8KYKK@K#{? i'h}OyE«9S RoCt-k]jEjVbKFέ-WdyzCO&BOyQ*F4zik0^־ʋ#ς5fYByBޏ}D32j??x[^-^^yR>O {gF&M&)$tF BS@@+7~Im~sKQ̢InnO4=cAEcYIЭ(Q dҘB=,|"HDoQV EB* Dp0Y|<6'MvO VzL1wcʀOb@e\bh5 _G4SMꢭ}s}EN0Hj4t )˸vd1av]$BW&~¦#Ƽ}Wt45<&P<aoU.l*:} ׯ8fV0$|7fC<'SY(جk2G}A-Af8,tHЃۺd,ZM6cp[˺*׼qrԔȴbT~KǺh+Ҁ'D# T7ݐ})1oQY(8Qs;AV͈:c:4R? &MT˼}ns&;fs誅6ұ@:עD] o5hxm`ɟ_好 F=+d2(Td- d1v쀔7+7 #و}跂Ks{aBXq|T D;S2jb xq9,|>* ˥a^#ۓnc p*2CMo!XXHt+8עVyP$OwsDq FXʝQ1d,-,:K!lC:w誌c>8;nQ7/pv]ʲoY6;_ޙ|L):|ҝdd)Ti)SnH wSi 0/ԆEQrBmܱ>D<u3,Jfh9'/,09P+*ZIdw#%Qc}z?z3Miq,M}@gB-P|R;M%s[xK<(|AWp.`2͌=0=NQr̃)re`{\;+5>!#'X9gR234׊V*5jخ4k}qWElQrգK 5]R)'gH#l4}6*@siQ`ⓘȍ5|r4ύ#9d(]mmAQ?m6'qēZ䭦R&KնT5q)~٤l_&rZML͚m UHBMT`.6V/ܿ69J)^0H6ȚKC`#).q{Oѕ@Kyw~;?mYJ[6|͘(w$OV-lq,F&@I"Ќnq_loF^gKz 9|woH޲SDyAކFmV%:k1`/-0q98O%E9Ll@PGkk几LWRLߋ7Ț?Kجpb-3;/4Jl3$e7\]>\ʴBKt^,q? ?҅U5 x^;FZ 럲M,*-ޟ /͙7H:)^pgZz  /-1~qS 3Սt]Zo&FZD 5p Xs}a pߜ< k;ҥcJNp>k9l!Ŕ/Z |]c{9#\S=) >YsWN%R7 Wo|Ag: wXF"ˌCλ'6.M_$nd_Um| >u-~l}vɊh;/Ԑ֒3݈*ւ;0[vJ֭) c<[Z8O\;P8dUW|kV O9K+r4]G`پh 4serM%,-C;?e|i'8.\`Hj2=BK>"J)`-SX+;$*O<`r N]vru3/=xE*MG?zþțQ 0A# gf d~|cj,ƻ=NQ쎂nrC +_Iumbyyo<@tZ3v \c2l`(Jg) UVl-C ћM!- ?h/ʉLČHvS4G{W;c"iG&OS) 98 CE OE]XS|Lvl 7 YJ;-$(E&RӼ.ɧhϡ2xqݖ} o my}}l 3rb%#H.y {'buol3Qj|[)Bܡr0A%)8pb:Fc"'%΃Zu# r. C%{m.Qe>D3 넄vX<q,^60:%6'Yh:# l%>sI\o}Y:+r߯aK\ v:n#_w`n% v]ص`ń1e9uV*eLnyiA}5OPo>FCxQ3|2虋,l.>2*/%cԄ_9Ht"E6c͇Voϡ]VW(FnL φ_KX˂+rmoYUm>^B#v:~#5B=n`g0p!95X%~1 w=jr$ЧA 1z>4HRTc:,8_*sH w7й-+Mdff~j] IIvlrxq`MXL?rhx<,J@)F{~JSxg<õcM\%2{05ҀR^`;1(mӻ('<WU/}r9۾lIdk&k`xBJF:ٚyͭ050t!ipW}*k82e,& (l9RxPNNw_[ 'qO]dObcb㸏 c8"l,B-bXBX!& J8׵[ׄm¼'_x/Wa%\^]<0RI1GOw:ӇM;F~V<QIwf14K/v8QcqL:q?C/z&];Y r,J F&YVyk)92nC+$\>K*Pq[PuU #WTL`n&@It?&\K趜hSjf #?g).ܱWts ږ: 79Rx*B] &ityX8-MB04ngbq\%ѓ[=9{%TǓS4Nn H''iH&JH5nv'(mJL)}`B*Z:ŘƤôjzW?HGOPiMnZ/D#/*@ۍ %dw"a . /*:CV]o}8 ?ơF"fI+A1 7V`]4Ac0KBr7 !?|j@;?cS<]@iK.Z.W0/=4hezżϱѧ{N<"IZ@XdsW{'@6q=r{|Of!lXrUPw$\#ʁ(1pK(==YGVq j_F6M 9#/^N2e9CwV.7vh3[]DZkYfLx^@:7v-EO?|]eW۰Gtj VBi+.C)\w_-O#^A4J>pĸ1NGa5M|)CH&ru(2N<9ǖ#$] JOQcР7 l90lbӱVӜbNHj{l.ZåɃ'b?*T1KvKNgh=Bh3w|k-c\1lK(0'x8& y>P{)W( \<؄O̖*7yϦwgEǤkz VVƧ@Eh7?bk T6MX&%VvXʰFXv/puPTvO-c(l R|G-iv; ̜ o4R]Yt#O&%0}̳FVz( ɥi0`XRQ04wPyL %8ܡtExBPMW\,IWk8h g g Qh hkоif'=rFGsJ"CN(@O6gGvaAWg/G{K>B@ [9SVzn%; gC) tBT ;Y֏ykaӑ=nba3T`WXұDrqyF,.+Z#2{W \РeY'}І! m:.=I'A} ,דWD0Fؔ.Kk@N~wHc:M"# +K7 JJNJzvy4*.f`}UHa{"Xf rh}QS+))]Q=!qz ~ a%Q\Xʼnzw4)AQB~k(J:Oejr$d܇^KXT%z bxivU*W9~#.[v^z,77=*̆Z -@# ¯8F IAr\XB%y/#֤d)Sb'eW!Z6'|(?뾯}f9C4 !#t yc vkYv!];j=yfHU2f6WzXu)fSw!D`MYnSwX5?@&!*,/X}(l_pUPRLqi!@27$_8yyagB-8^EW*Ȳq^G "O}&q{ez,a8ΪKݔtgUG$Ѻi($@ރY|DCߗy"JRl7GT~65ndr]uE+c)۶t B'#'-vCFD١x<]H9עʬ$\.\7bDvc +{ ?NnKGWX"Z9m*=plԱ̯_w%+} %.XYwΈo[Γ/z5#PgX`Ӿf6ų(fݸj"s4E{cV`D DHo67 J+tJ|QI٤x|o *;/Ͽ`?\>; KG? 9]:6(p#[hG flWUbNGS#76?4Ԗj+{tJ MGl| ؐ'GK#qhV!'9g} >o2rVFg wHj):x@D}VMaߥ"_bv 'O<<\1speRK*\1M[NIK|#ϮRw$/*UP%dq\04N=_kWN$GTk .ljT=wN,FN,a $yyui~ ѣ9Nِ&[nեs$t: _PRc:h69hXmLR,h}JޏeTSkPqC\T;5b2^u?Cc[ &vUd5d1:Q^iQbs-dMFZEEs$bf$YqC1¬f @܋Sh ~3u,pmLO|uwg5o _Zر6S=swG)Y! YS̕缄̀2ӿ49aĿPHx*PTE6~]pUjҘ}j)os?KԔla^TRVJ+<9]OEL`;%VʵUN]> yHyzhkl$s=C 1!k.qh(> fbǬ809PdMB?w`) PQRwiOeq !;l~E>ς(6B+wIe!s񗪭S24V) M)Z@z3 ]MzGެ'V}M @ vk"LR(F?)cj^טH(|H7`/Xؚ^) nʒTpR\48+]d8 Jcw{)qg!!swlu>}x0TlIeͨ6of?(3MX?MF3{%A FYȏX^NU2!;Qh 6c譡Tl}ts2 N#%]U%zAYPWɃ`V;GT䮰z{v`{mX^Kʠ5Kx L.9+;|tC'?Iϧ()"MւgK0ߓ\WɐQ"\پm&.q r]})]͢O-(32jrk|Ir +=]=GtG5={daCK;T۠E)oAĄD7!L4 hY9lj"ݤPPy{taGeWAiʐ(UE zoۅ~!Z.@@c/88{M]SvCԹY+g! Ϟb-zb"yLQ i}Q0@KG&)HBx"/S-\wN9t`zci `uB>֧$ 8< 9R.O^ڝI*ȷa}v{_< 64l[chIL:g|Xz40 \? R5w8yD?QOos󛠭(4$9?dEP؈P3y:lf8C]'Q BRay,M{ky@OYtMq3Ʉu: S;QOA[6 X|xhh 9&3'vQn8ς@v o-wڨ7󀘫Tf^@湼]I$mɏ:$6!˨] my qꪻVEb!z=)B=\qH9\xk@Hqyӹt,(o]AgEB5 ̴ vKA#1]O )?efl(WFiWB:@#%C`a#`%m ǒ)R]>.4ع``{W7/;BY>z5 D_+G9ghAԺ",u5\3WL/G'ō:@4B>o GQm<>ypSGM6"N^.2;At >a2۪7Hvr+Qϡha;{Rt90dVG?>-̖ By7#ox`~>\}ϭHo]TB;2җu@}&Wg|<l(J V>?:t͞ى:?z!~oi=(ۍGnHl?`4B(xw૒6+E jjaT^q!W1e5j?zL7ئFK98y`ߪ1a#t&<}.afW(yjwK G*xPlj [S3Y¤nULmC~U s!N@}M(\Rՠ_=7Ec&CB:lmj FMJƑ=wXBZVrPyQ4uhn#[zQ!VXRza*p"7M6w Hب4UJİfUS7;{VL_և9Fb{0eo0p$+#osP-Fm}}W9T1v<].?4˩ .Ѭ6=0TmWB7U,xﯸ!0ZyCxrn&A @?;m[J4L6dp($/x*a7)202u]:qCۧbD&S<Ŗc2rn1' a:%{ɨ>6M݅beKއi#Vs …Xfe,˦w?_.б]eD2FlVIo:K1"Z;N I`Lq`.ήB Lՙ x)lεGtVQ Tmc*Tcد9P[L/Weck;$ 9g𬮒l$S!+Ŧ?䩵`5E;SoVOե ]jN0Wt 62mS I>]N+`ƏKcpb̈́x:4t k*\ښ[ HP%e=,Aa2_iR 0jsVq?rk ll9}n-PUl` <( M^;-zlCЂ5ѮՏH{l9'e|i}ӷ9HZS0VUeAQO#\#%gFR>Sݩ.և $SkA3fOϷ>vc!UG>!{<<7}KJ1< %R1#Rr50rcq͋qp1luZgK"SC@|d9%]: * &R\>:uxY-Wl3Q͒7V0z%`,Yv#4V[DBkh32pg9n],g(in`NC:[HdcqZy %B !D Öq(/_+䇺9{F&_~1e! i!+&T0v 5Q7;YkB2$ I5Hv96Q~,.((a˿Of)+f[ªH^H6%i{yA!v$l/]yC.b7[ \I>dI<& Dj:7D'jiaB%[z#}tmhP 1Zx߲Z*T|.Q.Oh[ />ebYT.rг M\,H3] 0py1̯^,AmRz"_cmВ~%F:7nZ998 w:Х4 ,;dro=?C6(dg:.Yxj^O`w yO<=m|fYlu -, )I;F,yj3sgoI4zV&=՞5R^{Bݼ/\!R-*щs X;gǰR?s٤쿏ii#)@$BhFT96(Wtv#e}XWg̻=Qw'KY')!evۡR{R>}&n=nWl<g.*H2J`p$6$)>at<]( _`.,= YY  qLFBV[VROxK.>j/w+@t7[5MHQ6GC&OGP %cE1cUty6N3M!QyԺrR3ш)j55 햳]iQw]<x,eeC:K\&HKLCbe+.dG[.{O@'b7Pލ3qP;jZfc  q3`U9tdv16|rV$wx\x'HPܝIt/  :L3Dpmd|2Gs ?j}d-t1񚮮TSŬݽx;R/zbQmIpK3k~8[$d>ejͿ7Wk"i\Q% ١e6dD, yGkiw55ͬɥKS+AF;m2t-~ C%ϯ!U!MYw)?؃+gPi$qL?mz 1aV K0lN_5Ť^7lGK)&]r2 <`:Ơ s^ʃt)oj>1(hrau; H)G]P7H"c\`t<I9hQe_5YM)lL0?K+Z3hIMV ~~Wf#cReYR;(NpW:{X6Љu9>]j? P"i:^Zoxɜ`^~m%C1rݹ*lt1Ǎ t0پ]O?(Z{(u_$8 v}Ҥtj'<8jSHItUf/&Gۣ@&6)2SJފFZw,e9^}:Ro̳PVj],IO89tYnS6^p'<7yuLp*Cҏq|"k;Wxd˥0)?HjG]H%VAq UlQlu@2v>gV}SޑkE$b$j$4>`" NIXIb֥y(cGLr2Kq 1cB=ij. (b&SkHQ46˔Zi&|,Eoqrc혘ihےiW>OPmiDHvŽ]I7f¦rN>Hb.f+-¢>_UfTNUaB|w>:ihvU_ca-䠙̷ͳ"LSđ*ɂA4ΟUY@KKS;X%1/H1UePWyt F{rWիJ: јin{,fy&!R~թoa7B_1( dHu7]Ғ`Rr!,ObDӬ1QSx<)]&`@妱S٫OI|m:nF]qQ!0h%@Ʌp3Ւ dt$#le"*` oǢ ~ "Ȫ3j!yAxx'? |r unPݬYW^o.ј]N;4,F`{u˼Q]l:a<."q `,&vzJ817 TwQw5^W*eOXcPfj~d-iۦ4.#.ijӆ KB@U)ψ0G"y[,E*FqPJϨ=RӰK쎢t&&D^뭬/ I/%Lq'.`:Q?MsT-ci/, \k)]l 9*tOY+pcWHxg-?aVu7 MP $ٞZHǍUаlHa.kb,\ڦll0ii”/wIS3b~p!?0] P'| OL^L@^LHw1R>]O=BwY6B%R7Zj~cw1K Ô+A9!(m/9puY/7g:zaCcj1t z8&R0|gO2Tχ2v^}8@c }vW h"ZR[+v)Q;%o&9^3J>ޔ .9Q(.C~M@iS? d[Tןx%`w .:%4MCVm [hR ^y!`:gWQD˞ A &#~_m?Ym+f S婒UK\>@vK{hso*y-HN?nj'TG5'z5E b? m HnMK﮳ƿ  Lĭ.o]TN2ao%I`ըtingS)oG!@ MHe~ FD в/'Z|חli }jPk5E7mt6 $Rޕ `QDɟܵuBŀF? aGZ E͟Oꤎ۽}c`3'CϢ0.tj&z`o7KM5QS\ #:.0`ՊiilYڑiȾE7}]r^TVv"F&kJ;͟I_V{sN:XS~thL:a*05JOUE#%23!cT]*sVHa^5C<>,j@,t~)JkVe z;Axejm3uuQYOw$U$OrjFRۓsZvx |@nL)Qn'DC8`^ni^;о2*3Ք:!u R͐!rK8)˅B?c-K2UgxȚ{.Z]>9? h NqŒ%8T6rbGh~% ;!vk} |-6(!FlW|]R[fu-zۈEy>隖g/= g.f 'z*`ApMfqh6ζyLKӴ@>6w_& *"B۵1hI:}4ܩE^n$ʺ+3]9lm++ lD1SW*&Ε9^! )7up3 1vI_ XU( (z>/ o/rnKu#b!-C^oglH% 咎ol~DL:Df `hIczW%G&& \|7?1 K8 ^-E[&VWms{dVRL0Zz&ʇ qM ]-3fIh8g8ocgndV1c`昶ېKj|9]г .'czJ 0. í#ޯ0&p?YU:Y''bd\=q$ + &2ꗻ7n?2yYd9k"Ag>QL^Qk ;c f'36l0=>*ΨN%{,7@$2*cd:?J9/@}cf ^Psmysz6= IM9Y҃^xϨܙ4u.p*$oB&N7;'A#G+mb+ $d6K;n.=|4]4 0Z;q/ @:X]bKN tH_SSf`XۥA v G:k7OӷynIt.\'A;ha#]H[c+n 3 E<Nf-9-t;2H>~-.Dw-~3Bv}cW_jyO87?Q1+_~ \#hN.O^D1g#SF+&+ Iܥ9*[@nU5[6"dBAys,ٞR~JlȺE=Vơv&gC)A~Sw0"Ԩ&q7C7\[;qMJU@4]}xSC$Éڒ6J?/+.P V&P0{FL1gt|v$+"#N9{(KEƠ/PGӖBdM7~[ jD27[Q|=hvꨡ* )'\BÁ2qS 2k@/G*H\o ]2F ?3cWimR6ꀑZ&N `# 0RikG+Me6xQG]dbnٕ PfI,De%¢y&S:%~aӁ=@<!;v|EFq-͇-0gwH4\EPE^ʋ.vȯ\+^l;S@\M,vR~.T=\~&4L՛3O1/ I6fIj߮}d~Ezڇ-֙2q#Q -y7g7qGUiҗ]# c؞uG.FH4alӅZ?}=y~2 ~B=q|[6'[.#jH9`,گ /দ&Ց_SKN׻}9ξT>㋭8rPψH=6O̜}N]/I @Mt2N*(\Ü<\~xO)n a'5 389uC5QVLK^5EPs._z}y0ܱ|ʖ90ӍOױ*P.1[^@&j90Vef9͆s&nw{IÖԣ'7Y$p|R =Ss3Lk& *%G&f.Qr0O=1^t^kbp(. 8\@I)yKa ʅϣ@tDzGZġwVdqm!AhSף-V+ Qfa<;W% ?E!R)Wi0z"HTS{a}@s;.<v=@3ˁ"N TS\-@_7VcXm'bzS)PHy7)Špk@[PlA츞q>~̾v~5yT`7`(ytE7xkkP^a<`!zwa?X ؕ~CEuJkEȘma@Ty  m,+1k6^*@_AfBw}v ^yӄuD/nꣿXm9_s@ׯRPk*IY qi߱nDȡ'IkLx%*r*bvbϨl8,#d` B+Wp !|g^hui?׮}&vO%Kƣw\`V]yWP%sYm(>9e6N|O =i])A0 Ç䲟ocN`՞"@'{s|srFl,TT gk=:bWsG[5w rl_%=T#_QW 2>#uTcM\xa5%ޗܢ("hrtRŐMYoX?. bH|x+O-4C /I<ٗOU)'( Ŝ9MC Ƕ}B4:UZ7G9"QWA`y,D/E74@'.[1 k{:/@0^{;&C%.ig6 k $4z"8eIp &bî.Z7 }tߝ.IpL@[3 $ 5ODL(XZ{{C#r3O?լ{~`[`zh̪s7YYM 6(o a_L5:J[ALы*Lkz|la/i"MX`-6,ᚅa~V{Y7="!&oБlXt/vo/LKgcY;{~Qzz8ŦcE5UOhX 􂹉ǖnR/#Ls.d+ӨHT\ j-C!uEG*"JVŰ'`5MP&iOۑӟ88EO|2P婆 #MOD0ԫoJoųw`v.Nq޶hd[tAjTW1oy=Op^e߸C0$ M=4OJ2/c'lHkM 5N%?)\ |aT _g,9}s9A6qV7ԏnDjDc튳 ^rl[=yēC%ңMQA= =Pa@wCW$ғ3b W"r?#@6[͊:n?zk,Z^ jkcLd=&uToqՄhDA+m,.0Sa3h:eY7E2f9̬LLf/ڜվC'R㋋"[c kњUܗ ,#p{P 8.5yvF40 (Iw c缲 =3ryAC/F!,٨Z<]#VjX/C)MKl \S|J@!l y(X8 LG0˰rS%/᷽.*\~Mr:`4=@ >nv7.ZQς^q"uzp` :7B) :3ߦBwnD%/xXصJW,Cq !,]TPfɄM7"pҗvYb̆OΡrOI }6҂ NRWh]FI|.$vWf X (m9,J. @cz>,%[>h)?l! T{bw؞!# D|&~"][`' wG)W\ 1/!-"1ˁA-\4! pKjp8'4WؓgEo\kA*qgp+2HT< źAoh SE`3~ܖ+9uxU|U&g _ aEXG !ʐzr菲y-W&3C"3Bc*KXS^uwLyr  vL'd=uD}!(4Z$c>:UqanWz,8ZVE+6Ϡ;~XI9ۥw6~ %)>kc{CmN_͐i<LVK/ߣj,xFѷ*ޫ=joz>:}WLȻMEXH\wn%R<ǰV @`LsN^T+1LkEGA}N1&ۥ냅#0 3OsʬE"@Z[DKRulBv޴BI+Uf=YCW}א놠vq5TWhZߗ) [ +cW)F0EONXS+|QtcŎT C?Fȱ5u* :&iOx,٤Q H&h]CƷD-H K c"βJ*7=+@GZg!ѿ>(t7$C]'XPgQhF*]%髖|E8^2g>6aͳ#r ׋¯$qƞI@Ox"vUzZ䦆Өb?OJx~dzC!&7D'굔7+ )D0n`Gky{C lRe8IqER= 'R@1[eVC*bnuI, LYI6ᓓgdCREȦ<%չb^\Yh>Xr0a)KwoJZ.p(ڈKASwy8ՐHⴌ7ng=3UoVF&m R\k1wGƯ&/`QM ǯtI%fBz[{LCGC#O|EP@{!ľz炏vsAPeO&n|( wAB`Z n.cnTwOKj|uI41ilL }Ivx.{/ .fd=" ZRY?`2OP] '!4O(.;l JIa);hF2@N'i}ML_.n*"ʹPGZ5_!LO8t ex6ko.Yc%$Ȕ-ʃRG餍-Vd dkG^I\c̔_g QSފ4qK8%-4/h@n ,cvXEdq^;gKGyw ثujvm%'eZ33Vxve):v/Ӡer<0q[95qV,` 32+OM̾f[ՇhqiX&mos~R}GzDVC,f[Pl\ν0`,/>HsVZ'P^p; sl.0SՉ!Q\G;`/%ay -jW4[qG1S3 RZjz./rSH)׌*L[?U5~ o/*(;4˒~s~= u8rm݆Ewf$Bn*@wx ӐAY,X`htsh15DNG?-'-7 c]E€N9,`i<}Qp;(sm*_i@0G8*v֩#|0@;ܒ@EJN/>|y֏v@8wSyN9}95FIZ郀V E:QlRO}xVՄ9rt'ZNzO0e,y:4F 4v]1{`g JoXvYm UͯQ0Ռ_V79鍏7J@Yo#4`^@ Ak 7|g8b(Kw%R #6A8\؜8,GeyNIE~ P%NO[t$3P_Z,sӪp5J +f@cҫWȈ:A0(32Qd~5o4Dov.jr8B M:61m>G}6_ҥ:\ù2*xיIƵb8@BXXcb[9#EP|he~qS_?(V_Q&pd߰n Η'ƃ@[a揮BQ7O#f$Ĥ;FۨcZ)G7^g3R&̨W"ߊ ƌ9~8/Tw`XG ^fN7ߵjNY]d5hߐ(װv`ȞOJP"QYUE|P O?mݻX;炒1]-KO]Hޅ^NqC4Ԃ+|"eU-$Anڃ=꘮m iܵ؟ϟo Fm<ιoU)^ 2]șKW;1'z=ac|x92mgpMŞ7Lpsߘjfʤ!)PD,FZaWr=xJaN?[Wb&Pyj ^,*c9<{a>=Hts%K{P1D2FĤaCZ;==lԨ9"~'^Rm7ÕNɝ jK^7}0-"0Ĵ./ajB$c{M.`<_G.,J) ji03:8p;hz"$u˸ KHy|>t޴utVwz&`@^P9$9:1o,Y6j WR|QCbͺ^vHzTJtAGz$e!G Q4nE(f as>ο\``(Jiʮu9+d: hi=vZȱ,79QSܬjꆸ_(cYwmTT2 nvF0/$zj67BEdz1XXeuF`}@ѳ$S=tZJuUN $j݃dYj*r{Y0|֍نm'K0h_|v}Y #ZsZZ"WHAԜ,X@20_|w{Wa"eTY[sfk6R"@_!g_@9Z^ph)B`BQİϢV2Tp\ QѪWJcX`5;[qe{FW凫BXMٷk[q/l& ba \5biDϗ(=]').iϷ#]+F~6M^\0p+38^+PA6s;nZ.4w)x}И'εT~ZdLYW'Vk.VǵR$/$EނYңiPIn6. 6 x.os[ xS]pUM^̊q˸bmG'K"M[),Si=O* 3f ]$}ϐ& (4I*2)bɅ8D WMxdKi) q>( ;hSnki A#)%KigCL_{2E~}8Mﷂ;op6g#[8͹Ӄiy4kt-?0F9mE_;Q}f]c2A>7IQk .wŧ͈P)դf_X݌e BQB#qi7s,(+ 2 A/v8xz+!QDhlRցv#SJI=tFR8ZX,*pvN@.5ݛ 8 a}FIȜ($Q0ʷPAqoH'I}LYx^*VmX_6]κe[(|jdm}ci볠Ŕ^7ޜ/%"XNJ,ZrsME n`ӣC|ΫQ0W ȅ4rT< ^[.)4H X_ZF/q"Xq[KՏt:4w@>3d(K?\kԳ]]#PRKp ̧,Rgѵ}_WŸ(*/Y= 9vH[ TFhH A i~+2衵NNgV}uEf]=aތJ(nbt 20nnάA%vוazZ>[KXbrc:Tig3j#zEZj8JL""-~@RhJLڕL*8Ik+{]$'۪bMO0" DC _r9a8i < u݉A rpld>sL<̪ӧ QX4(h Z-E4m>>Dch/6r37EQ^((.2J`v̘ }I=F|!b2/nڽZ?`.~ްAS"T/dE$βSLѥR& 5,nd]4e/e_scAee?.pb8ʬXx(V<i-kˮb2{M5 e^8D+L;M.*Ɍ먿#Ff]}] yq=\(۽siZ=S҉ڪx ^heȋ}*p8G|C.=ŋcEF>kn:J1: +pCI}I+@ &h/ : P)U^f""%&N)8?bpڴZYVwI*a9 wdHAZ(0in,DP5Ïz{zf2ޤ{ۮ_GUu4k<#>>6Op$~k3̍K=*|^̒=AzK;H3 *LpF"Zգ:+^lz/{[yrw\z'n/&E9 G%^C+Ҹp*y"MhmBNA' zx8`XʙY&bw+u`n8yqjAEA=pIWZ42yl-ET C\O ;d.UH @"#0fѬ&:ߖ;or gcޜ?-#\Ys w(7[FP:d7ثz&lDZ>3}&A nL,ك#> =} h}EcL52E,V$e(c3կ*4TGi$"ebHLjQ翙^LM \ ؛ D5%.C=WU}I~mY}ui/8I~-0b0ˁL`c#pb@Ս/??B1a771r7Nff٪L;_7O?~y\=ȅڵ-ɧLːX{PBpz5Q3Z\h~$Rq#.Q8Ai>phk@Yq>L_aq|,S8ہP}"9w9lXu d:ݭokD$?@~z@LF'gj&Un&Zz$kP͑T&Cs޻=rE.1lUgVɸR ƀ핃t@jڽ4W\JvjJ}o h4xSәx oT&mC>X66 >b XuaIJJM)1/Ԡ/sOXd\ZÓ#s>s;ҚBoz&(Ȕ吻w7d<=:4yl$X2%1b (In-o*+0~ 4+jTz=N^A*Yמ_s㓟!GX&i( WrO"Z. egImեBjI3 whh4}%)`k֖.L| L9)a6FTͩV)C VTڛo >ٔ,Ogz`C C[$o)W-IЦ z-<} 2YAU ,cCMu)=;"+ i Ӫ2eZ`X.R)n&j Ibxԙ[qǽM*7=0!)k Kw6gcaWv'ܥhh QF;0VOzM) ;ń W/A \=~0XՓ[ ]9yh\ EV{BE}Ha$ #񾰲)E6xdyo?O'Tů4(.Ptࡧ&sl臨9H*[SG)WD.iW{={!l2}c &̇r0"* &z!x;Qm%"amtRQwu +CsH[!TDܓm`toιXm e>7efrf "%e:j|H04P=kBTn}U+s;uc2W/J*(؍)MˇҎN X״)YƟ(S].lVl U$"M14N!0t)W|"E3Yk P%Pדi 1CZoԫ&2Sodjy[B.}Ț^TtnԚev ;Q;\Xи$L6#)vP:AY|P*(J4IR.96<-`,wH;W 9駓fqϦ*| 6j*:=5JIԛǡIAh_8#Mb0wHS J9w@iѢCY^X -y; Q'\*_ep g9Tg8#l4Ko Ifp(01;2>GcƮ0CI=9[^l[!?q$<1]r[^`\C?jd0xGBf!$-P u_u8U@}O\vOMzLd k-/5bٸKV IHtnŗQ  Q ,\WCP5)(1w"޹0W擛*3wE]itkf3 ]pIA}0e6K2PAwCH."CPG]54pe.IT92d^B={Z^b?;) "$Mj\ /I$ow?h{#l[d~]x;:T%ٙr%;W[Hi7G8׭{:Y08w[J-;TW/IO7Wje^5/d< Ž<] 'd{C&w4;|~@lR!X@O=$ *cݦZ'CӸj9`CB^sds(_[gNIl .;G0Mr%1:v%$_{YVM<'ÚCQBZ _pL\Za" [9|Aou>ule8$wBىR|ܬgI  ӈ8 (l & f՗62Q}%$R@_dU$wEG:RS\`_DL,OLXծW-iFx Y11}{:du9 lNG0y>ދeЛ@ kp~0~ Ƭ Eht[%e TwQ @7Y}ѣ=-Z|BѨ9bg0ׁJ9QS/N 'ɈJxg=*`A u o 9+^t(<sVS0' %ʌAzO 2n)m;D;@W]Ț-$B@Bi\P 荏]=;ޮ`xppA\RŽw\_%اggޓrGϵr9#5!44}叢b]Ke1Y?Gp|PE:HcӐ._۸O%R`Ukà+NCkOn㐩~˙T4k4"%ƚMm4\pq0p6*l~=%5D.l1ȏKPUŸ£62I%(1LihCǪS^Z噹%/=7@euKrQRZO{µ۠ L\vELLE;2[9W0G4GQ֟(Qy2LʜŰjrʣ19`S̄uaqTKD2t/_W $JkHg B^ce =ʏS[2T]_XsIV+͡|ϝ뗿%}%Q rVVao-SGZ4:@<%q]-Dwc‡I=0mv~:St&l~ $;m[i>w5WѦ~O 8-#<:ݢG9b"&-+cƃcg$9ޱ͗]^$\\/!hME*>cT)Zh9NѯYY*/}feZu`MJuA gw9 @5Ç`<Ү'!9M8(_{嶲]Yo qv1!ĩu*ZvsF ј$ ghEZ<EwQ'CC?$ 9l8 n٬bS=*ಐH)UHGtb1S ̇pgp'% _wh(oV 6dUK%62#Q/"DS+<,z _2AR%|ޓ K>؃&s7{g#r>(D?aA kgVh(u̓N/im}gFƳJ`bٚgF]&7X1yLgU=HFSnj(V`|Rq؝Y|j+(M>R+))d"3YԖN|,E+rv*K4v_EJirmx6ӝ'.)^Ru!k6dk5k=!PĿωTtn Spef?yk(^AJ?FVп4޴ ^=Xܵ5S #͵P31xadY!͞) , #pTyV`?'iwbϢ_)4n_Up-Yk{yP=װ2|m%WM!5W# h赋HXWIΑT2\3ŷ%%:oYvQiAŜo%̡'m(J\orR%$=Ry~Y9* %F~*%k |QGOD-~WZyJ*D :&='! 0Qff38EyM)/ wYA:TT Pd]-X4':ʷѠGT9EћxkAVi ^A &.FJuM:Wi KA5o>K`ju`O?[WNG]NI1_Н志q#d@ u"e`{ i> y熧"fkzȢ &OazlUpN8/vcH}CInv^D^s\ktzCD9QydQ$si;D Dn8o\Z|Ķ84%L߻U!FG/> XT^͓\V!)&0}g~l4DqqWKU4 o%q˜]# / ͬ^c^d##=fY1O *)K*@-]^S9Z]𝬕hٟFܨZI00, V"д_ F e_W}ugS)5(;J3W'QBVWf۱" Vb\)jĀI^u E[¤3Muz<Nɪ+Y,(zrt|di ׮qUꉪ-̝n^hzdqϟ3Ҝ ݝ`7F]5C|viZչ0'Ʊ@KP(s3 fAmKjv4RyԴ7q嫜?˯(/U^(݈_h6<diƭē-ckRKm1ta*lGAIo>: Ix%]$ rڅ`7g&seOK^75 S;ʷb/xj),ح؛ HYy5+N?zU06 @m؆xjZn~j<6-O`7t,+ X76p6s:\U ͳLYq.^2k:OFzB{-I#W Qs4-9JjdvY4+)b/-N6U9HHxi&X[\xZj /[44طX X`!GL/ߎ1du $ 0>h teJ%.!61,ޘTbp`Mu{֞ԤոCTxm6$ldY1`}|~·Wg8iP3rנOskU+{H%'uRз5K--̋f!eӺ^:Hd|8d*! ߦԐ̚C$ 'ΰ'.x{A  H+Wo vW"8X(%+Qn ?`c~PJy%$bPtZ$ԶѐG R1Ԟ;Gey;ZBz`u& ү[%AQ`^@׸; ؊~Rd ff>.)X=Vs-'zř)<'0 HSD(MXP{;Ld[r$Qpԃ%tW.hDER[^(.wP_oYZW¥d;EזCVh󇢧/ºLL7Yc.8G_U^JPJ3Kʥ$4/xV\I-IFl|4rm[%y@rT0i}x;!F^ J6v)7emݛxC ^e&vGBd2JVY>#1\GsRT`)goP6%bط-w)}Qx6r߆ҞjN^?㡄 1i¢g>йz';6wL0: J: T?K~ҪxԨOwvPVKX*K)2Eξ̉7Q9r m ]?X_;eWP\|+w2][J8Zs 1ߟ-}' PaG2JBOXߡ7HU' X$l RA0<]k~r6m~k 1+x[9{4 F\uW:\yD\Ȥf =ypXFr *z.ؑl%21Cd!նx6OD ki.a^F%Z n±29_J8NQ3IMhiJǵgIs{x K14=ں]m,`G+9' U =G ԛzOZgzD&g,vZ%| G 4n_eI rDA:6~,u%=U2A(73[NUBjbs5y!=W#S]Blo[8(jkMbVա)D.Q J.0& R2u º{IE5L _Bhٔ.l ܛЄ Qg{B=Ts*U/Ud+L}: }MCYLDU85arL( ^'!Ne_8 ZbXted½Y ݴȭ+╆wbMeǜ;rD #"i͹ڃ&-Tpn,#8`Т"nfV! TU;CE%|u'[ ԰c\~d'm;##JrQkK"H^t)O`aa?cCw O@ti)`4!Pj`+*X.q'ĻKړxA!'KK?L ((|ڽ Y}Bh>?+XL:^HdaIjvpx QaO\ؔJVÄ"`WqJݽwaY;E> F԰*dZsHߴ"*֑d-:\[yYK ։yũ0Ko*[1s*QWHs 4۪6|Gdx2}-h2'ﮕLߏsz64~rqT-Ƴ0*-PmAL,8e~ڀ%IF;L.-4G*}n (yH,5>M7&$0yB&XCE%D9MEz~лWW*$ZyXlg'X tTqU en%׸<'q߽t)O :٫Ouu0EG`5$bƏ vIKG>gـ:,yk^l6Q2vm+mG _r.)4Y+i̬2y?7x=T؆Q aՅw!{`vIY+iPb9 $gUVIF!/9ҍ؞IT oaPo@)q9QJU >@2ذti &|kYei= TZ y^.Y|a sJ+ 4ٙN_m.һx6ǠR ؞jג `reז ɯ+4VL+Mzfc^d'd)'+'Wux p 9"87\e&Dɸ^6M JG.%sgdj&P /6*kxccY)`6YBsٽP> s Q!钵lu;)E <7'pYmP=cmK>PaHf^GFV:_{=dJÿ\S> Tkd&5-jB6BkPS _iSv0g.jO9# GB;tۂ)֦7SPܧݛCM_.@Lqyfs=h(Ok™W -H}il*?+nY@xjfrSH~-4ESKedXطOH+|T@:e[V:!&3R!֕ݬ%GCHNM7ְ;Qʚ~qhnN;ٔ0Uܫ(NE>"BƵ/CjH+tggCϞfZ:x!rX#4;dPe:V;=&; тw1bkl'ͱo[`l 0O{BʸZD&H4SXjMhn) v Z@˯*e3gv\#?j^sRA?[¯,LtʗO!pRpHbE.vYKYLŋ8+D셓wIB+l" [. ʞ|\~C}"7nŖj' $A$ad.iX̢`!yZj  _u)|.oZ?v`ŏ y}̎PF H?Y\l?"1`!-\TzIJug9m_ ^ E<8&H]frΤs(?t-oX,ӄU#P  +FYbhv6mXI6`)eΑ'IKEf"ePX%r-eֵQk$c謮G9W6r[>^K,  _aݠ6mL[QR`"nbjvrtxE ^$ J}(nB2mb۰ Ҵ{;/zn9 b=V̰ǵ[@S\Yۘ9(e扬 w vRPO3sR.R4[+jIMz~op9pߵ99<*nb>%y&}h%y0tSu)yc%k<{k&[W\|F}QHsZz}MpleS5@;4t׋WXO<۹}6Pib[)5|rOU{%1 7w@0v3ѳQmrpO~op`ԻQYrv*uq wD?+;YX )'-s~Ciσ+baqFIB/_'^j"1P]% l{`)e*ܸZgY8g O 5jHQw"r$DXZ1߈d tZGFZRŊC?hg/&9T7ņø'ၩW)_zsRj'}scZ`='<VI_ _Pt2gNEM3jdFfeniV2/k"D8`VCxavz> ʓۤ~ID {& w"֢D!Snq8.SS?8OWOs|/$~$ DM!ȢA#[ <%KZ~Azl̊fR. /9)mzU4[FA +s/yܨ=~lʈP D.`멻 jJ>bDt  \&zq|եwJGR+o!Y7Rf 1r)VoU⅟OG@{ zA4e t: /in+Q*N[6du92ؼ;wEȭncpO=h\bot^ AfeyoU73R1Z7`cJ|`6b@R6U=5_睓)Ot5Yh?ŷ߈P9g<.?7ScpGl+꒲rF 3_$$+O-(0[X)VGl5\:{̖)PrRNxPD ] /C+hLk1snioQ,M-fV o%J͂ h2ñ"EjLofrֶ+yv?pⴼ^YՌ?Av"I8\c^`TZ Qי AMpCa4 9cQB\W0}K)}k s!F ͘|v1U4ͤPmCYF{yusrEtl/Pv#Z]mw8J%P@x{GW}"*<)pb t; y<^̢JAJئ O "E $NY .]g!KVVp`)3y @G@j|* (0z!p.d^`3]Ls}ޞ'%YՋWQuv&8=K͏ ;TvZa'1`_H~W)Щ#Ɲ9vJoli E4UkkFَZ](my}{vMr/᱉+f2»UixQ rQ\f<-3\u 6o>A5,'䮃[ǽ% kha'\:Y&x>=p4/@|'_&!;J _7,{ց~6K֢dms%OB͎HT# wTa iyβɥp5kbqsg"U`SN)TЀ&kjp#z))k4ENչ,Eq*qZa*nHī:rϏV*U6pi~A)Ci$ &{uB2R9T!}tGH=j޵`ps܃ASuHqFvǏGrkK<iD_۪氀vdxǍGeZUӜ֙_|]pү|Z(KD Yk{,`8^"oߊP(=gb8=9=虾^zQ/5QO!I00VVT8&.ZʁHܳnH8a^LͬqKl6>9_j'Isr(q% өrM}F)X~%b,eR*\7ap0ݘ崙~{Jp ;FŲx5ل^i)yS AO ?cd8ŝ"@xhdjZkY7xݹ$"h"ӥ&/"M8/o6~djꏠMsrzK3 ZO.VVzDVȚFF!]d;"+87_<|k%sJ: *=MhR\ ב$`4nw*QSv/)](ʁ1tu_p&C«+FT_ȕ-R+76 B yG*R Tm&]Y hXPj2ɀ-T?~X`xL:ζd9 ke`D,| ?6OH(hnUե--ޥ64H&zkxW-|LI^(IHqC_b@$y=I"hsd!SJ#n6f*SE?ѶJiS&Ve-xydNQ[ڑ acPUopHXL5Uʕ xܧ!o`z'bC׫ ]*X#}c^ \+G-69) vԭD/5>Ưٙ [p5{]1SZp7ve\I۾*yӗ[WV8Am` {lo{3]1Bԇ|Wtch;F ^Ҳ_POГ4(zt;ZڻN`[MhG>]_@y$yCO&sZwl5@3Ry_Izy%Z|yMeUM HwēihhYLH,`A;:{kr?0D]ˢǂ>(WoQkA\vgO h&ǴU"N$be e2A=M"db昰~b\qc+cR&S?@/4Ov@BJ t 5iZ8RN<E Щو$e2zUw+#GP3J8l*,@ 8kAQxWbѭnpk,HR Sf da%+%R!E_it$I?'0 ]05d(<oWT-USy0 jnnI BRw:o ~$jYY:'tIo!9$M"y*P5ԙm}A 'WN?ذ=UXB9IU:vp~0RL{9g[pk n!4>dSJJ ؃ʘ޹>CYfta3/,VV孏\<{_ﭢ`ȵ"N+fD݌ t&Aؕ™_#T?;$GABr ۦ%qa|PiOu3qrx>δ7dTqG[? 䊜$f.*N96x2렔mSzm)Z\RˣXm05ΫS{cJ'` 6@ka9s=;IBw.Lu(dEt`#qg pTz}ף>Zm$$|ʽ\]w-K9tu ]C?uF^?_YXqZj* p ɭJӟ# yrSNZtbY`qu0e{DKH yrXQgHv*(":\yg./a 0;fj_sjŵ+vY*2ݡ}."[yAqF`b Euc+-5膆qRXE}%vNUF؇d?1hjJT$aKҞ߾Ꜿ-BO&A UNmasU14 mԖ0 @#{!u qFgV78KGzjۭ"/3'9ߟ.1 Eg͹pЦɬrF_/;FxO88lu>Wܫ\J4ͼFH|ӟo2Y*ɖbhHr+0xU0h%~?LD`:X7OmOC-x7u&#(յgFYXt[+\x&2BnI$%i,f>c\M"$eMbLM 3jHB쳾ZX(y'Y2vmӊ#ҿbd{J\H99(4k 7x,/ yЎMR*9=#sp"0|j?JlF0{u-</lWB`'SG;,>T8[mJ# F;ɇ' 1`K lRf'$t2LZ"b-r4Px+ĦMxZ l䌸G9W) S_V{ؗ6&u*[:6KY2{J$X3D2AhڿXHk 1s~mT3URb  q>~tav㴦 {v x)wp.Ffsm~f4L CPFk`Jɞv\UWmsYqm8%FHcyCVdfkk+ ȝHjq[jM*fL~W{7|cQU<4A\RLh/1j +C8  |]-fou8R/ XV0i]lc+Q DB[s|vZ[Өl޴]vK/fi A7 8+p }.\^4_l I<쳀vz;j Xv+RqU0x|*g'tsȢFHC[oD#9 OUY%xu 6U]P*H@FucS]IԎs&/B?N8HD*Ϙ 0Jčuc%$ )5Jp#ì,Q5zB_r{SY|VdB֛oPr4<j!0)%l[AY<7!{oªYz1, J'bb= dWOuOG_ (.zf f\yO-JZIT;d\+3%ؾ-"%G5r*J}+j hA^K[؁ZYظinԯ?i9Λ#0~ήc3w,~8!8Uو6c~ 8,ݦ}WN´Å:ޘ #y.fq@':`p+(PBw4gv&;u䕏l0ht%fom9mpǬ[(Lєp֒LI~׻aTAsqLKnq^W2x+hҔ-GK;9 1`2 FcM65Sm y8̃2fA*o0N?Yiunmbm5D='4El୮FK%o/\ ?yK oW&EǼuG9V<JU^yպvۈWW!Sf % ?5pbWΌ?$-徢TlJmGu;Iu<)K.5P28q0?J8) #4Ea?/vMG*7ZfvJ+zŊ#q?PFG+bٷ^:l!4mU/U + (I]4V%6ǶPDFmָWu` P`.ڑ["Q\-MȘPiԣ֠ˇ PGC @4Lp\fBପ}J5 <@Ќ*!ṕ)iLUpY/6_$ۃ۸Z]$EwU%t3jfgThQ+'A?s{͢Uu'lrsݺ*f5"aWB!/[)iuY5E51F͖xWe n;rۂ ˳xS/^8qx [2 -x -Eiճh8  x${^^q boN ),'JB^mY֢cZE<'oۭWm;Tp8شV$/f5^lA5wh;;'p G`gfgbEm5GoG77 Gٓ&LK W7OCa-\HM (WEK٧rO2;P6\fHE|c9$Y#XY(@eJ L4ABbXVbcQUod}&Kj6,7;RUA烇-߸ܕrNiI[SS )T[B%lE4Ñ- G(˅8Ea{AӇ}cDS2F| raR$.X Wҹ=}@:=HHy-6̛E΃;q\ȭ;;JNԇyn447} wj70B%O4x->~<&p摟'V@@ -vz6n'hޯpzּ[Z'(E lt-^ ɜ鎂9/?)4=k}^>w=PnhU:K]MTI%AWШ'^ h@x]HMeno(b$٪,L\.HOn]B+> W(b'lR@>z :.?O-iTeik|V&lw[ KbF^ؙpXMY^.gw:@ ֛tHfRt=BK32͠N"yZX˴ ujx˟%F=' dc\H!C(rr5|zؼg ?B1H~Qk/A1̌X7a=, jۭ1yZ8XT԰*ik'rRl؜ 'gxڥ$JL!Fϔ^;>yFdU\|kyccΕ|.QU" as|94XlFY.#ؐ=PzGiN yEour cz1 KBBro=.^~hWp"R( m`^p* #3(ra*IK yW>+6g6Bn*A YSX簚bW8z&@W16LM3 -|%ZROHzB,tn| bW~G=?(11XCud,9;en? Ȟ8+O(4 C*~oP@acU ]oEaߕ<1I!uȾ}1l#4UwQ친dE!5:xӡ0^;9+* oI6"]Dӑ tgl@7z TRt~r&&q:]EoGnښFg^ybl_yhh\@ʭgD=}G^"RzӲ0]pz#c.tD >=9kPwMs\ᯏB:07ip-KL)puz2_営WGV&:lJňa`m5O;)5$Q7>kpgsܮűv/&Jw =š] 7vy g-JTkaU˹=v@/qm0xʶ!vhvyo{MHE(/3kXv|lݙ&{)Cݡ_a4}!|J +Pt<^jJd+QVl lz`?.,+\ Зd6ljњTK »~Z'[?AF#\ >7VsbVUTB\å8fk jH2bת {Ĕ뜑HЩ& "wN\f$\F6eBw 1|B7jEOW«-3*ÊB&-}%lJ$r j5]㧥e/ټ7Ł #QZ%۔fd|@"l紵ŸU(l׻(Mg=J5X[FE.g$ߧ$۶-M@A+FX,#A3J*Dm,d";8{RnQNP0Cݧ? ;op =g=_Y9\ y%vK$Z;W!*l%*iƆ)F8cQ( \ZwTD ,}Wo%қLES䄕2xr'[ִ`Jkmٝ $ '稿(E1S#"{o0%dǾS8 6ҳ*LLڦ+@J(ϒL‰%D۹zAV4ƫГTǽIhYP庖!,7a9}ە|>btN(M_#[Bg)!݀.m<3Uh%iDYbJ2¡+;"KI&MVY80O3xД/ lP|:{9Ger5'Cyy&{0Yp˽5OjĨM5-ZAICVqb'WT)m@m&| "or}-dx5WMs%& ǕH>hn9@rP5 aqGkhE7[a`$FT= +Ff#|"2^Q[Yb lx^ m1ò`47 ]^!Vfxza{ˎC=g #mp Af_|#)J$}nЩ#߷q, 2 ԩ2Q:D:R1,GKp.TKBv E/BC SkCYTjVT֭V4\ 7VA.fXb aߞilbсl83&*МJ-] MCMMi^+IW'U3 \;fH2rh?=RN;|,>O2qzIүsX0AEdX(d,pP9aǞ *ؚǘֻ̐р|pBNV@gOX""ьb|^ny {u-ʦbˉq~ FDoYJz5&$+4J6N<0wŻosOt6u[) ڃXfRKpP4Ѧf`g")L"b+a_Q ʿEdTZdr;Múq؃$"NeYʶ(B9}Q1&!6{2ZKD%:FKT;f.%``Wchov+P]^/zk:i/Vb+"`kl_O"KTԦxBVHY )QV׶pTy6 I|Z;caķ&#CM!VtuEo]FkvòqܧH2݆ w Z̴[Y-K;bɸr-n3^=.ej[ފw =6/ 9IymT_ўhPLNQG!q.WcԺ$ G"8 ߮MGXw ^pq}{]gTt)t EKcG4B5sF zg0S:baLv"Q3bUs(/J ;˖)d#T(߲!At!`r`KQ* P)U`BHc9c0$quk+fyM,* fN\`VxY>d&S_G1jCݶ|5a@%+_b 3ָ+=0L)a/F/6gu4)Ebݾ8T><vVd"ryֵvMQ]r7Sj 4nn6uYaDiO(1ͦ "DNNL |%⯴z 3qa]gj/Hݎ5‘'A)8 5c?G*PaUv+7 eML.bð'<(P0d;$y'kz}%&,Bw7)6R!nkѣ@ghf;TinA$B-Ӂ}PN}Z6%G;8e&^чdz1Viq> g> 0bE<ϕX_ĬDzYd^޸A/x5"t8D4DM$Y@/${g< [EcD>N`6e!lSg\ϰ ҮFgP!aT'.$q k71DtnxkV6Xt$BuU4@-=QG_ 8V tWY9%h6pc*ӽ9 ;|nW v[|bh/H\sfPyLrL6xiю.y#kkz 6F?ѸP_Bp CzȔ՝! OTF ^9#cɱgPmcO8'"YSpK%y'(+~5y%36ve0%Gn<[J]F6>Q3>6.39FD*~mȧ6?Ȉp16HP +R\?ͫ_FYZFNdA zƓ zQ1+?[auP>{7cEMfOI|NE~.|]j[17G}[ZV [ Hth*ODB^;D,E 8?fs}{^TO?ҡi ľyE{rDx"c:W^xo:j/\[z|@2qp H ʓHЖX X-܈ .a(эu҇گ:pa=? U(CMaapDY!CH*`Pc}<h{]W!t 4ҴG#{NQf = Ԇc۱ !?mVSqN"N(`WK/ ‚I U7L ks߂ojUɡ.<J20=ZG5aL( TD{|&i mSsՈZ0ne\HUe-j3Gѯδp"lE /p !<C|--^sB4S%L0*0vhgnPR3CX! T7d3cĜQZB-}0Q}L|W+rH_6ﻞ>3޵+tޯW+Jb \M(kҍ;d7Uy?4 x0,.H2-t%2 g# GrTe{ 2ԠASJU gu~fԌfSiy>L#ʼk-"7񯅆6;`M9wOm&/SE t'xc%GBM?TYvD$LwX!r\_T[K|f[Z%KfIϣBP)gLIND# &^c*q2`|\q*A= %l ¿8ԅb6?.,MlLu}# gOGQ#j}HF3q]$ev5g: RUlKOaPČzzz=np}d Iβ>v|4+CmrpNz̄c/â7s"*n U.ڦSsґ՘3T]+yu]tD\f*|>C?S(|ҙL> gGbk9tƓ;A"R;S֣:;4WB//QK2,qp>%O:`Z,M~k T%#fC ' ЯP ڿ 6H!*+kD~JZA"k;>i>+nrPۉٚ8vEVݯ8IQDܻ.}At?"yߨ!TG1*5J[ri^ C.imLŽ}qXp!B&> >6 ($?!æ*[rBHi#RInATEUc|JRڵMC(>Yߙכ..[~aJ~gh6ػ(,z7)Gϑٹ+ΧT:,)&,sI;Xm"_.$)PęC2}٩h?ৡ{$d^ny$,o<sT t s$rpD_Wٶ9-^NNutX@)wa*%?~u=zafyJ甓*X %%ny) ,6ӻ9%zJo)Zc1a!ڒB6)] +eTR3L{^$JXc,njCk2VrûtHBF!;,M`>lvՐ T"u]%CkK?#2!ue0#<)LZ2BEVٍQ]].%kȩ$SY"3q\W\bzNK6 ̏OBP/5rL KWKptS_Kk={0 oB&; Smx)É!KRB} L:XZm4'yE:[8 1%dNZBR)0qNmU/wIJQ><sKu~N:?8}9qO&/XV!Պd={%u6YFROU I6@|۳,^N8w T?t?Z[ kR \,yh"Y!w=uRi,DN{ij/&f#M4V=^6hj#L1 w2Tʅ7=DǤk65qcca8TQw>K,!?RejTxg2,Vrйy&<‚0DLٞ_bPR,)Pvf>F%h\S]_(PK@Aan K +鮄<<{ 8 mFj,X (+MOz:<@EmY(~4Ci~wD\1"!E/;(gN+(\D/t 5LIWt<#`*xQF,~&o Vߪ0dڠK^ YUy!JTpШʦ Zee;*.a)}4LryUW"Ijm8}).恂sc M"tPpC^UD}YpQj7qyyC'pІU<1*L[ITNAl{, ċ99ZJ$/nh$KLYesEx3bIYRTWԂgf=7f%>Pz#Mڅm*s$-En TǣkupNVQB8;7pU;h Z5W,S*;pi^8 &QwR~An楀$~z^S|k sWA[1@:+mOr)BQv+GD}YeaڲV4Q#Z@?E/fo5t~p1xʢOKIRKs5\@;ǔ5 yH|$m333l&FXѻe, Hlv곚 E.1~7ivqDSK'Gwūk섻f ܦ.,P̄VSYlR &jw:+㋅s\x1ڽ[(bњO(ֽCoa}i+2[릞 e$QLE0%&[ % $I﯂@Ĭ8; $K_DD:_}f$=+3ȖʮӾQy|C]c ],{-C(K<퀩}[n{6Zӊ_C])7`@nQיpk];C1DMLtg+r,XƥtCdrYOuF^ 9(0=#$r'֥v2#7)ND4}2-3mEgƢڧbd*qaSL>1s$!XS)koE(+kr3VjjC9rJ@e /rp1Vc5#>/KșɊZҥJP󀖭\" eu`H6tnKѱ=oyRZ{Ǧ^W|zx0z^cLF*IKI 6*˜*׊w84 FDQ)BL: N%Xmf!=3TP7;N#ѕT[ڑFmY$1FI ږ:rXRŔR9傳GHNeyw tu՘Mo ?q߮d!@n ,Q63 , [tNHreք?LLo<T3_[h($ ћݸfu!aⷔ&'eH9BHwj0O1DLس݇VwfL|IE dMaZѾVZyǺU7j+j &%͑08')FZk].#ݿiDS/:-"bl/˄yұ1BY&)_1)Wz.Y9=YwDTC_7ӵ($QnCtj y||9M$m(ES)@dQdz=zor|U E@J~;'Ȇ)tyL?\ȋopwd,dDO/&KDHRsw-!ATP{cy6H)TC͟ EIv8Lwe:bSK79a:B^%*A1cz*/KӢڗ`![)&Sj"RʭeVʳU`V5<$:NBBjj6k'yI ruMVuMo㞽aO~2@t4g\Sʒ8>ʆK7.@#tv]5O/*F Œ cbe`/yXͿ8'<2rQ˷""*IMR%NW$̊( ;JUWG)VN,o"?t20ᲹZ|xaU-L&$8BO?9o i,RW-l;=?fxY d#*hNnBJ-g V 61WFE ^|l4"]<*IvnTP+: Ǘh3{ d 8-{"K;2maLaЩQ*4cBQ(4J=J;0|瓥VF?JWJ dsЀNetṌ^{6Ͳ#R dv^ΤD;)r0:Baj>CLȖopî.SO@$߁AqU%k/ 6h3ܦ'.^4^H@1J\P~= u t?9xS\ȝLFJqh-too8[ $p8Wio|2xYĘ'Q*gCǚ#iUa8 Gߦo^",e-:D:5ոdd1J$M7:Pr+TUմoyH'[`TShg8 u:7)LCl\6]`&~ ޮ2y3*һEKY f孇OE[ߣ>Siz%W e5;äZl 9j{ZwKW>[Ǝ8dJ@E,z&+d8>R{s-t ʕ+wʫ,T*9Z3RA# ߌD$vբyBS,X k~mc"DX^YA F|ebXk6n3dʁ HRoz}HV\s[EO3 9ɬjtHt_mjޑx{;Tn״"uLFP;AɲlY P@+xo5/*= Ū%+'z!9叕d }ne'Q0zZco 'utz}8!LWGJ%YO"/9c{$pZG 3<;/8==̫7 }8P]e1lswPm~L)̶Ԧx*,I0j(^3yt&/qIv ̻R8j|T`+ߙi >#/V2Y\N&;Z""=:b?D?훨M#x*'KU8|76&|sZ$_"gL0gD W{ &Zq=*E…Ȥ,/:NaѮQ%9W@xM!,,CVIr$mOoy^<nXuwUs0C'Xc$׻v0.?sǼBU2nd2p'RJ@i+XԜm<{NRwGU@־4Slk)8.Y~WvWYCCN𲎊JWh}V=b" !"-omYvY7绥j[y5;܄͓eսAC'-[-ՙ iC"t>k_׬|Fo+BcR^ݜf6H}) SyKDMK~vZuКߪoCfb2< ʲ&"D*Cho \N5SڹKɦ' ǾvE E? x5s)|J~.LL_:Es \^`9Ɋ"3?aQ7o5KLþB+uHJP3=|7Tu637cf|+<}H> Sč#)JL r>=Q1g uZ(i}!O'O]Ej S0l4u2,uA H#diu#Rgng8r;5˂xs eRJ}oCKz=abՇMXPD9d#kPD\bdwxIMva[_nNfYj~ঋcrZ.ꑠ$W7/|w)D͛A-4clԠ~ `|' D]HߦExWAX;_J_Wl*'p-Eɶ?|twci2 ,خ/ZB .XA _H8 jLSEA\!L9:XI/_YNJP]S"Y|rR?)|5CPή X|R j`n-}uI4[g[8އ{):;UI1FS}!}Y11K"y"O yaGtO(o*i|Z6Pe109K BΤ/ `zvSR#^U/:cXhfRB[:6٣CP6/A.='àd9O 'FmT=KRsJ|fD}Z8@ҌE-? P/>|痥.Z'Gd8uZfƚ- Ͷy;_Qx**Sh('D< >3vHk<&W=x h~2 Bޱ&d 8JV5ݻ1A} RyfcJ)%S \10 U}*'7'%qdzN3Xy`#_^B.e(Vp.2ݳ0K@ʩ룉LȖv`iBd%Rm^pi%[tXO\"u^E\(hв\U8ézjJ? 0 xͰ"`TE8wY"\Dֿo7{,b<{RQsR*>=W<1:͗Y8|ʌuഉ=#U%( z}m LHpHmqP;rth*S%b 5Ş1rgyUlXNfIcr w!څ-] OQ;jrC( 9D +Oz6Nϴ eE 3* 4IxBߏm?i_.Gjlu\2~ -^\ @T*)#{%70OdΘ:\s,@e4! :D,ػ(zVkv?N),fFHj@wGlHTm m ĝ(NgiݰbBU)1L)} x.41%u4اER:55̨̉TTN\^8h{5C؄T3JݩTW݃qq'nP|Wipn$rZ?p2WͤSPY~쟿2#P>ėiwvV*#DKmB@jԻ&Q3Ӏ69RhΫu6ƱMMsAxRO';7cv \KSDWgl(~䬽lRMف!q3tٷUfd6ٶ3K$ Od%ک{cAqͱlӘ[?\ On [l< 5*Puo/q.  ƒnKY .!iM n x'=2ͬ(z]t"0aִ}f &h41М#Iפz:KM8x-z/6bѐ/9 fבrG~y3]~}7=&%]Ds^G&B8 E #8`\ohIt}?vX*\Y01P~x5;T**B`ɻ-(W bsŊt=EZoǤ[#VsE!G1ΧC]6?6ޢ tl/??eSJLBޕ>tpȊR[(&Zڼt< #AxjՋKJgMH~S +Bw҉|>sEq} ήC5SZH,QPD'vy .I֯4Hd%AA9U [bX#TF xKݩW[p! $Cp|T\9w܅sjH0MPROWI+Q O/rxۜ@B5_ bFr^򑖪@m܍2P aA<=j}?4y]?;{QGiY=$Ъr`(FoiC&8RS`B]Xbh[=jо wBbQAJ63& F my?\oY$$b nRvB4/n+@77}n\(qxALs8'W1X>  iR snA5B+:n;u[ _pqh{|b ͌U{wNJs #r8pOjS|5Vibkt4Fi}{p3˕Jy 4yLrUy3?ć2Qꕗ74{?%KtI\#[Sӷ4uJЍB*6&Np'@φҼ3KM%zICMvjNrlC;X&njcWV-hW׭4fKK' t"-@V7Y#N/ä~n1>.À d$#kXKF˪8:l9/l˛'{Ō17.D8fˆp -]6TңJɒrk=]RҘ@SߪH0oEC0Nm &P "nr(xMht>.\@ R6jLHd5 Pؼb9 Дr)jT kg#APKD#u5ʃh]cn+|'ٞd؍f~Cg9#7 '_F\72C͌Ȅ{B3ecSVW`0UiPHdFSu"rت~اRW}T`41jѭ=є㤽;1 fpJEWu[_Bǰ1}VlŻN+PΕp5:}C]E.M>Aem ͝2NGt4ݟFB99Q8Ǟd i-e$FaO ^Y-}x~#o7'G M9Ȝp6-Q"29B[y+&jڐVɬBg:YLЏc-=FzEꬺYcT\7}dօ 9PxNp`pf{J`OwB ߅tE,C]h`\IO0 'S Wa.ih.I(Zi[Q?2= i" (Bj*,|NPl鎸X,0Z66BP}ʉМI[9.vx=V]2]R߿l/@64ħ=K! vgwXxPdf [@hqFHPFI%ZFw TPh)a럙ȅM7Ch[*/$+bC!hK#*]u 䮱) |Ks1+|CH?e˹ G ɌdnԝKzV`6-k&6 sB@ *VR iïx FLlE1#u'"`n0ܡ yP#_A2O>i#+. 3-8~Ini!fՅ_[m,[eO+VPҙ /ZL#0f $Nl'rEl펾ҁ=hXLi]aD!+U `@DE9>xAqp_m|Db,0z&Z"j~'AW3ikDϻlwmsUqr:e GҧՍs [\aY+Wj'4+`(g4N`! p:_[niـejx@%sLXTW[M#Uc+K%_oD\n4MNXQ t ;mפGoR S6|K\Vщ]Aڎ[Or=ųz'x>j0w (:~NR5Bhv"CDArr)`p^✞k&8U@cz༑8P+S=ol/v=?"ݗ}Gxp 3v$pͤAC{Dz[wQ]{r {™kt<~} Ed%uCtGaf4FW; Q*W+K9ZCuЋG^65DG; s' *`@{?&ieCTUcR$2kgt:+]MilI*#0]5P ͌?(UH7͘gw8i)Կ#c šB|ȂvNY|2SJ(lz<p/wVPڄF r<5ԥߙȾgiϭq8jh@L8ȿG 9lX3:czwŦ̅ `[#jlMHa0`ihZf$AJ,Z"52ߘa;}"enY/[͗_ sRwVȝfWeOnG#!gGO!s.xϒG;|| hY~8?Mϐd޾ šDz*1m ?raNC)Bh}#* YĢdpwRz M5:xt쳕dR9pv(QK Z ϭaˬZyFi|渭[M+*nn`[|QIyE+ ƅ`T81r|  %i_Hy9[f)B5THFE&!^:3_ @OfyHVDxa p.`lp:)9 [0D(XM־|*.i^@i-yXf òF}#l~#LЊYMc8 i=kR[FiAҞ@`;t[OM91o`r9c&(y4pzO&p\(C#˸Z$4& ނ}wq죘f8ȩ`oF2(@d[FT"F}3U.2\gU,`D-H(kP4v>SYӀv[vK{݇l] Fcn&l~v\cU~ƕ8$%p Z 0"kȟփ'b6:FXTPj}Xќ-^M݉rr|U[lb M9q/vu-HJfar1Q,y1D*N+wWvCChy3ӋL {5!ֆ2}IOFva)6־t8ee\1> W63Lp RԻr2q$t >u4y{>uN ĻDF[&m[v[L\X@ʺ}JV` - Q,tLּnZmyT"7ND#o=F U$5opQrM=_9BO%e39uuOвiKYrߩ<[ב RBV?%W|\{I n~|*4U}ǀ-*ks'LQkHMQ|P?@vy_áwF7&2cG&EOUVӣgW+*e)q(@[YPŁz'@X-9iՈ9;*2Шf@K;VSZDx6ywG <]07Q$q",Z"lY#VHOrVB]=TAVNС:!\83ӽm@ft<]\0-0+)iqm8q6i fvv6^ K0eZXe:7^H׆g=ׁIoax|>7<'45hFmJikCl4 šT487S@L/E;|e~;Wޜ/(s;D;QeOrp6wpqTT55V燲 xz Lm+*v:|vE,!L"碨;-]uMDKH"z8Hּ-7\o9?)4/6im3,G"bh켗KO*19›02bIyr(,/M:Ә")O7eCb}ܒ!2>Gt\l\\b1qPb _{yv'Ԍ$-mBbQ1hԙx{5C ѾK{ :Z7jtvHa|%"$)NwK̓9S ڌhB92NY}1v+DX;8$EDоQ1̯/#0LГ/Fz .?ړP[5ozdrKv-gfd&   Oʛ(:edt9M?7Iȷ tW+!Fh. FͫN!:9=?Um1%8ll:rgk!+JYv.]hXKNm\b{NU^ 1!.Ai-6J*i'֘U(XI]n Pb!oZ)SpRgMZV$% [$ʡxYFPzmJiJu%+iwMc]|(&Jl)V}WA2LV˗*MŇx#X\^>).CO :JGɐ9y"3gAAe-#L"Q1&I.|$a5/x!Z0Rn L> ko nIO4ru6Osfӫ_dI"\6KQچ<|Sz"OC+#ȸ\1w2͡:I146)Z@'dsI|.Z+/ݚiՂdƣ5P>ug+.C󰜢S()پkP)cesE^cUf JנOn!&aKwvfޝ&GV%f׼HY:=!6i0Lu;i5@i` Ms6Bp{F@zpo ~/B<iT9e%&ot=:+q*X|M|䔮&ժL2+,1N*ZGU%5Df9"Zi kEߣ:^"]5!`* 1O͠?' R]~&+jP'?@^4up$-MUCv[ Q q${'CM]aGSDeמ~DCd5pRt$~~R,6g|(wT@I Fn,; b?\\}~")'aY/S>oV˩4c9zÁ@DcXT+Q(,螓i!&{ ^k!=Ƨp޹F.BC,v.@ d8wW* '<s͐‘>u%iL/[M9eH4 !HUQ뭰JQڝ5禊|*ƸKBNG@(^LR,nlGf c;iˤ{yb!$vz7O?_С`x˽Ef 9CH %(88*A@0›tPצ"t{;3p{yv͗rug,hǀ]E"a\upH^1lr;"i #@ZF`;IG~}p H.mxYZOmw,r0T.gA[BFcWMqW=!YO̶% NB7f"'9`] ʳU[re58_6:`1 _,LL (Žp<}yJK \ 3RJ [ḙ'ڼvG>Eac}n2"f|n6p"SYyjw 7,6=Ϋ91 \x(egIr#R׏'sEVbȈ3V.S_*G*sr*6U'"/iI9mAeX~+E@\q'0(V}OGb~kYjSc,#XmMKf>mu1!RE]ͨ# QF3MgD3VJTcEѸ, (Qoj:^Q%Z\Oèċ9gBbC/'s(T20yQM.} GE)p*K!`C"lM,^1=E90^ƍS)X Ҏ*K ogQ] (+p: DlU.%MyXXW2[w]eԡG[ ̶]nO /LhD i diޛ<2T&:}\#o4M^_s3Y@L<3n?gvb+[PT۽Ji=U:>g@ًצP6Ûa!j4uWÍ-Ȼ4 j T"Ӭt';kFk5ţmD"[iՖ99G6cZTw%c1;. B @<:rtan.w*v9aJ H؀8+4mǒĦӐsFSHS/Nk o1(o=,]JBpw-!)(V&=>EBb @fd0o<;,iJi; #oV$qfd0AO~O>KzwCa_1 P2(wH$p{`m̍6,ŴE E|`X+#YymьTO+=\ DN]|ZO[ {Q3@z, ] iaѠe% ?Q]=)E(Umu~OQ]>5ƻfb.@15N!;2]n4V^;oN-0ZxWV+ $^log<7 7 aezzC&fe O 3mUTJOIJa Jiwsv>|'ʌ ܆5 CRD4ܫJWzB6@M & qrS ~[2Z7@!V[),v}~ARb>_?HN/V<7 ?WyBVdKU4E/K¢FwzT?SE]Ym LFX3wv+uI61EhO;QKj>Hm *Rʳn ٦hs6ƛuH6ŌBQxۗ =Ҟ]|- \J ZcI4K.'k$G/iZiR /*u AkWq HM+#[!BԴ($ՊŻYƎ[@Xii>Uc+[Glk- "qd3w4(VD5zs^T/ -{UWFW/-\]Q=6 g찿]G>FXlΗ1$5{*o7=92:#ԡGUoz+wt1Wpڡ*Hδ̬e5wޱ6bI+=5OhĉM5XV_0`9y`! C9>SȮ `1; J wє9߳ŸߨR`ܑϝKuyF6|DI4GetzwҮׇ+\xbC\,ӟđ[ (XI+yQt0J#zHptAm?7Ɠ*yl#G>nOj lh_iLe:!iO_B"(p?M:Q{_g%H6p<4HšBMN}P>KJk/ٲgG>mةUAD XN@=kg3L"J@dQ . .0=44vΐ~[tB@}afɌa\ZY 8oō)"@ƑM"F1}=ۓ9[i H3 ߂ƺ:\ Yk↊hL)T:uLh6@5*LnYAZ'{|#$ OcC)9BB́ ^y۪5`w9݄Pڂ$)͚60[Bh(P[y{ֵ9aHXW&EU& 3i6'pwvD@ f1(%bn`1n%7+vV)Ve! m QŮn\^E5QE_ i+n|1_ NCqyp8M`~rxQX%|~l%t+46Gl7ؗ x[78`K|H: 5c w023TKv?RJf80I=z!k,xRćzy:!$Ǭ.=N66*˜DED~cJ=]I Zᥨ Hr-64$_j!gouuwj"ԧn#F ]g!mwիdBj3!Xv֝nn.ٴm lx4#19 (; ny:]PnŠ ˾AaY0߳r|?pV]<c!ڏXa,OWFL0TMkg&*O? A-d5#\i2CO6r" *̣p#4.\di<]]*ʥ"UG @OR,_3artG~ND#4l2(a~#?~]NdƗҘ>>n'&<=s Y{˼ Lf4ʳz:4>l s]ϩ!}>tN(__%/?`͖ja7~=ߝa7޽oA9k+մ-6&G{%k8gB F^pDhl'!EB$) }xm\ iMWelWA6P_7tN*SVb^CDIK[D}%k(bot(0d 7Ad|3f?vUdDyǞ"%O0 WackNUGȍz) Ms{?N Al=BZ2^S,W:wH$=&{Oթ*^ .~{ֈX|: ^R{tt Zm[pGt;K),ܑQ^ <_ݮUM0JD wa G"Z.xp z*ͧ`dv%y{Ny0x4@qjЉ+i,܊;.|Ҭ$g#ћD(J>T5ɨBO+U2!.F ^sd5EH ^~zgRZ+#4ec)vP-UzOVrЙL ܚLbi6>0WlWS $MC: (X1mP@ߊ_M3,8b+s80Rd@R*&A1爼[Y_ }#&,mSl AI\%s#tTdn2vcD8p{W{Y !dpr'T܅YcDD\yQtOIcG J#@Ke-9M Fp>3G D?k&@7hқ&̎xxw=2mz_-ZB"/l/0co)D~g: Iq^ƣ0kX}Eǫ_[^0??ՖWn:I_XanYȗ.[LmKo\WͶdh@HrFX[ΣӐRGD%|]Vo)RD-N֥EŢPuw{{ "k7ks(i\M;9LVOf0|jm81[;h՛d&Pג;i6l =$f~b%1MJ7k&Ѩ}E$`:Ǐ}gq&Ы v;.t8hQGpW|`:v#Bw-״;i+xO͟|tBC5NŽ'DKu6*¥C~'( h~%*/JO%$vcY^  Wn_ q~n0N݀J5~د./P㻝6d_8o3QmlDUX\\f7î!-G䝦z/yDgcO(1]nvmSU2xc$"ODljZKʕ9sDBK/~8B+ؘ6v>E37z' &T,}X'mNpWZ&/Lv0_^TI?Jx 㼘Fkz r`Ab>YȂpJ$"F_ilf,$%? -$ARjjn[*.6da ;Lsݸϻp=_P<{f:œs{*ɧ(G˵K߷\5A$"xfF`I$#{ \+wa*?ckQ#I-Gr9d-> H6TB+>A36[_$)^D9++զ`ZAtFr}bTg6ܷ %nZ5E{s>+:׌E%ʳ2F 5(F~xJVp:5!qY|)  qde0Ol(~3mE=CEzF=ZO}h"d4d-S#rJoax_5'otؠDh4'|pbj!QeQݨ./tdS)^zCp)z2w0k⢵j>؉rg;fR9-2[FVGw_RK K(pyO3Ȁ2+&A-%_up펚4GŌ8q" /&;5]I |dC*C%Y?Oc|:6B6t4Aqika'SQb@imVV6Oiۀ~ґ"YCk^Wx(u(3N0P#0ugjLKVB*'+gG @^1Wo;^yfQBXg*~D M 9  ̓VOViUd +{,ě SXuDJq@v1G:a V]3e#"XFViso1i32SC? ]_ H~319k3*շS<%Q_}w"?->! g)NY#8Z_ϱA)~q0sa7@m`6g2󜅂rLt c.Ы\ɀ޲*2aXRG%: IGܞ#{/E"31Vĝ<-| _i=9 h}AVtR|"h7 zV vme}v"qBKKM-A*u'=AQAåWֈSyMSfxұPI.r; ?R?eEI] Jlcz[4Kv%^9҆ʧfs-))tU0 3sTʖ1U$,n|Q7|O,t5oM' 2n pF?FY l 1, ?tMq`;,Odvϓ~1c(Zvd_P6T>!E-0x#oo'fNKp GX)$FnsilЬR4Ag CVl^J6hbDcMHtx%M>Isj-|Pay⠏] MҦ )E?ӂTZzU%P#WLȕ ;wb!gt9^M&)y,4tZ{,+MDOjTCUӇRS_<_!o>Z&E.ƀZf~`DRxFPZM,[r@x$6u%zWLpF&D6wa؆}B3t t<.epV!SJF7#"= ι@:*}8fU,zKx듡HَQ_A4<*ϱc9'tLT2}=]TceSӁ\?Q-/*dn씊"$/*ӒpX/Eܷw>%C #ga3 ,Ө,mMcH7np^](20cURe׻g .*BgK 7S E=~/v8ӨY>g2r͸m>9"8QXI,C8`)XicQXk)oĠ:l/.*Ę+-3#c] v(o# TS3o2{W~D 'Z7INZO$JG>AIX~Mk X5h(Y'!K+ȐnACOl{fP{(qVeP= 9GR=hZۡR؞ˏ֚41'{X j<ƻg%0Y/{܊vFZjКd:bOj+͂q^[h iG_))t[] bph"]/R2'X_l>T*]m0ؘ 8촞̻2 (p:cOxMX^“sH.qM̻!uMpd@֚Q<x^뾚h]g/<'ND;V'1>\]{j&%}tzmudžA @USonrL&wp,`S#}$MMlxEc S8@ANt[D_&~,v%/ oyVلb6]+mg& j9ON4-q,:0~ȖN/F UEgz' <ݶ(k֣:! >fnnIMc۔wTh0u; Nѭ@+I33e 3Ei0@c|3xvFkT.# ڮ {IJ,EJfe1Jf0E\E˹IqgKxʚ{' o8be,X bk4lla XS!ZgXi1c5߬Ύo+SD`1,M;̃uLvk:&)%WQwR0^m` q|alc $)7h]8hI3iۂbU\ЏLC߬mG- 7^?U=sX mթkX I,$H 9Z+'7@BvφZ"ˑpB1vqfm8#>tϻu8 o,u]x8`hv9p#"Nm͍H?mQgu\tVo`isͅ<nFfR}9]/7b7jI,x<}gh@a+s#Ltf:0p dG|7S. hG $ '[2Z#$JSouMhI7>odKybNSG vq!{j@~rRk7.$d$f=sw38L"Rl n4q+oOU$\NnM[o5K28"GGocP.`T)=F1CL[Ag-Qs Kt}\g9<{#$V-߯ө3-0ܢ`;:iRʯ~rqy&2TjJs[8ocJ۳-b 80jn37^eFCv-Ir- *դb=ʨe+f2Գt?jsqd1LfgRm *&IrOBzct`H$ZtyҞD1+,dɓS$'8Զv48]1JomRvDG/N; 9LCT}uU\=S/86%9$PX BѠKab: n܈t4|I]KJ@QFXS!$OqNw>y)h^Z;cEB=-N+j_,Y۶s\;t\ ZU[eL9j98Iեn׽V:hcq(?oc"yYkS.AF%Awi?{"QWxƧ(1<@rg[vZMʿ:l9N'A}\1,kk$ \eDOWdUR11_ gftj/ە<6 -UY{K1Fh.[Be9jj2g69; (&S5+"(È?Y #bPg#}??O$>A.q#Jg%;']4A@wD`C\MuWɅ )wFwqL+0jvSTcdK܇Pv.:ejpPm>v{\bq(B1?Ի7h@)t3Y.E(2EMUk6 >xK[ X5=`ڛA8L't Ϥ%O2*GSk6?!g&l  \CsuVR|x*) '-).\L ߆$GCmj[ZQgH;U#O _K .8+S}f7"ZEZPqӭT,s%_A*ݖ2׆$$AS)Lv:J?T|#3t6K;1;l@ ֻ`!vAu-i:Ѹq͚w[g]Ы۾)!F:0F2swKui''}.(ڌoHh*ܚꯒLOm +;]+ⸯ(1bZ2VWSJ# 7?lC>_#\ S92T_d g'H$ߍm6eg"ăpx| SNzX Oz<Ӧ?Rҟo8'VI葂]x%xrM{|mr\AiMCP I~=?z7'^{5R~ݔnḧ>Qh˅ e핾$(40D[S}BX@bֺٗhJ%wg]Q4YN!&່ylOrPF|nA˰XvUZdd+#kgq|6pocABOYЕ n!J 52鸙iEsOFpH | 21u)jѬ~!miu 6{@GBPTRa|'cM VjF^{l'11sm豧7 Ъ0}[]2vρM>'LO%} )Lዙ:fWբ_ ~'pDXdQvVtN_>h@.$;95цdr@@u6*KC`њ T?R1Z|gn*\NplSs& }rl(VRLf$usm$j^$)!ZĶ,-PD]2 > JєWg{qoliXb-N8u? /({NoTb}.PdRV)DF`L,yu  4H^DL)br,LWR.X3bXߤ V. bn ͼ1pu(]CS].؀)tF qP"xMSvJz.ho{#:ÀpYQm t;7RG3F7F Q"aA}'sOE>@2s4W40wQA|eQioD!JGh a$Z2)90^Un穬G dss]!.=e^1D`Ql8pJd:o,V2+oaA͇ՑŇXj!ОhA2𪃮a>IF|_.ƘٹDЩ2td3<97;e0[_t t?b*+0^Z_ݔ4,SVaqVb֛[R(fMö"LĐi1[r8P".'gu#?,[;±"}PA`%Iߋ[*#Ey<$~[U~Yd$ԩ ;æqlHq|{yԂYVz@.U|7@?cgWԨF''Z5UWk᯺^Sb/ȊO~ߒ%+mi*\ooÍ4럗&jX:M | Uvtf0raNyQxU26OOPH$|D;w/?\ c"<5$9s5i$xKR9l5)5lY?o_Юa "Y&|4{n}2!KB)Vkodq}YWGTcb,pv!t4D"2bg/žN!hG.ˀ6R\o3&4o y:7%@ZxM%£=Ca(Ob͢5@ 'TFI.a$_j[YF-K)c;;ed9޷HE&YTx`|C q)ӓ7= 3[sr*Rܛ~@ndj^wc{>.ή˒C㫽<>:1tWh!D,<ڨfKv p5:!Kcxv2¤+ V>קO^kr#.۰*C-% }(IB̊g:t()id˟C&'6nlȞ|^uR h[Hk ?Bz #MIn.yw| u/I"\eս~G݆d {ɠKͻ ,h+yt~chy|nXXFISnV)ϪRw0;',N'GH7ۓv(bt-ү!: W|):FNg򔲳iD=gF? Y7+~h3TkG$.롢yD{$b@&xJ@% džg?$}(V}Iڣ!ۛLI7/&i;Qφ<,c7 cwsB^9~؆cfwk'W{AOh#,|D.sb]MIA.ng7WSTۥW\.Y(̰]G$Y}HruX%D,JNIRw{v_6m\Y˛?`nx=\$ 5q*= ̟DmwI.?)q˓+N>]qSmo /M mc:OFG7 ,]>=56Az"yWy q8 пQg7Ԑ g#*]V. M4a>.:WIG[ZհRƇѽP uw%AȬEW8hikѥ,>Ok>J9Ap ؎@lVG$4weUS`F%v x*,0[ :~zʦCXs/j5+9  "Uaެn|(y9G*}F ǭ Wnܢ) hαL'NvSX]n >3f@*а*)#?fX``a6xY%4@Go7N~"S"պl<"uX:1L2s m| [EdSVFFV +2v?NaGx&Yw&UyʔJ⸈) N 1E /.Zu'KS2=C%2/pv;Et0F=tÈ[8=MTTwoSv$c/\ q8䒉bza;y&~3 1.pz=/یJc86\_{XT 90"Yj@E-k|v{d){SݫMj@uOKbrq./W(  tXӥ$FlW=08곕('oGܥ= ?S.-)z髎[^}" 8HcxeO-NBs9:(IJ )\ƿ=p-W!OϊWZ@,)#S!Ic1gE&Ib׮i֭ؖDqD\Ps|JTJPB]vYK(aN:ea ;0sKyivRӵQ&XV LRhF~nV}8nአ^J {*:ihٸdK|3b;:3 g'ͯr(ܑTdDۉZ b#Ɍ"Y r,R-#43Һ|ѩ ̈́KxU$8<0JCzB:ƺ"+eG!g2lL"q2&"VlZa*jDNG`OE2O@d1Gjg[Eĺv5#ZӜ/h's'vOv4%]V͞nM% -bT o7"`wkMJU!M?Zu[Y*IFCğ$턾q4]QL:W܍sl\1?QZ|ίE <y(~EٙHkpUp 5' 2 .ܚKc Y+/x ۞yZJİs]W@9ADQ'\[O/MK>T՚ΩMC~c\7[Ve "/)4eX=O^P+-8{)VaF6+} RV Ye ]Go eݑiRk*Կd]khHD%,1;HWױ䛅ssSEh'5\k*]LL*ZՊ*[ԍvSV/NW($-pS‘fIzxSk)&9UH lsM<[uA$q^yW1![:Ū,˺lbXC*r<{ aoQǰ`\L̸+S=hҖڛ)ܣYq^Ie ɧ- -ЧUh/|^.>]ՑFQ¹DGB̿WOz`B @B|ܓGg fAy`U_:5 W = `Y d0^R¦l oRgzz' dF tZ$`ypK0DYF>f! Eb U|o r'(gAd%7 w`ej}M)S.;8qL=Կ`,Jֆw? 'ٕS󲬗@^+OCGXYvP}qO* ~JlCl?"KñMSXtkewP2\|LQGXLۚqAmкc ?,ɰ ߥ K|0 ۛtO e[ N:bl\]Fm;ʒ#r^d'Ptd0E1*tP V/ɖܑI?HiI9Hz&\s, ~T@e+sg*U$N޼M>Hb&Զ F<<҃yNq-cj~izAJI6U"=  6Z_:iі#؜>.pv"7d5t40_WkB#D`lx' #2{X;$rЀu@2'ǔ׎mGWTc辽MlDD$aha,zƮBL'q\(Ƥ#fi )М\2Nv+ѧbWfH="gﺼ徟Ӊ?*&ledI3N3|gONߜ3/I봏.> VQwQUJ6Ͻ)Dt~^Ospnb?y* ˚szآ IRQ^nQ/5jzy1+ mŗ Hs;Pd+VaPٙyLvuQ| 8d%j)"oSP`VQe >Qy 8vM$43AD`ʆ˞ڂ7G ^ȰkA coLro_MG҉(.dg$L*NzHDB,̬Tϳ&LˬB.F37PӄaL$E*+= ) m?9TL CLB1_kp^mM <=($,'q8C~(r*,O({yԙ̥Q L%dw[*-f2 T}Hd3nHTlz@& fw=|[P֩e ,TMw c<=nRb=p-@"rwLP?&ZkFQdwxelʆCgTQқϤl9ߋx8 |~k#$S[i,Po|eOmgjIeKuy˵Yzix`cbٶ1R GcGn{FǸs*8Y |d.%[xbF6}R1<*agi|3ͧ$Kwߠ>]XNo]ˍ(cD=eTnF$pQ 5[*\z w+X+m9̩ o!튗S&·T5=6>L[8 h)7W膠-"W5 X:s*N] q `k &@?8# <}s@0d;e+TX{E@r$[!>Hǰ `xrL.AH47QQ6팶mo0̺9GcjEߣܻNk= aY0p6К^}>-حھ{ gcf!#/. "W:z}Ec>`[b |]=7b#4_x&p纑nZdh%ð!NJcZ'U_Ƕupé{a Tp^%dVzpt3oC~u~ .hBf.ajVVj=GS @|.}FbvcOxmGu"ɤEUkfˢC3C&Rqs+LFe"n=E-Y0 &S8vIKPv %#rXkR#&\].hq:o]זUR (܄2#04yx[r[]1K)lg=2K76gaU(Jg#KOQ%zwv6|Hʤf`y:|# o,JT-vzˣ_Qt4ol=Dl 4.Oѽ)*K#/W@>S>V.,IN-N.DJAPj ^1St=Ҧ-w# cPcry0`6 2h1dҸ &y5% R5d/T[NUƂC[4hY7g}&l=b]RP`*ˏ&FWB^q4Ӓȡ6rUke%fdy0-',!ߚQTPE_w!hb1+x"7R$0LIT/^lRPD^#Pf[|YC {&uAɊu4Y}#gb'jz WKt7Ԗ[!󁐢V[{)Pv?¾t0ٖg Dn4@m~-reLb#>l0ёzJҟRQ_1\u8/-2J6|,:m-0KjY57f^wN)ss7/*QhZ/L"|},-2a'fMwO#о}ko2uOgS7u:xNWLKєQ.U8_/ r=Ih'P=Eل&JBa^' 6Fhw!\AegЄj1& <}`6իc>˒G|;rb4W㹶Q on邔ǻ7YHN,&IG!6lu<$X^p-':س<~VQǩ[K¶C8͋dy j~nÆrEA7Qfrw=9ÿBV"1w, JEWcx)'`.&Q;t&&< ѝWI|3nȔ~Wگ#AN*0A ߖģ4 f.5yB[T*Tlw{7q^.rV'=:u_<8&^u:YEɪTܣz|+cujXaDn 4,zdJQ`beCud @|füvd<Mm=2:m2UVX`) Y8V˜!kF—/_N3A-p%8#MJ:mPnyB@fFwy|ͪtj]&|_6e˦PZ}?gh7s roe.J0Ymwfe*.TQ*N TvY6Q~=Nu Jں !c5Y) )"$+e7h%R j~ [ +R܋>`J銯ŏI&s,HLUvX][]f(5Z|e0ӵpADA+J2o}psV_NVnA֡T q.,$pVUwRSwdKFfAczVf^D))u%~nTΖ4Ew%m#Il@4kI)]aXX\%IW^ 3$—dtތuuv&_zZs݃5d#Q]哫-Uyj%;)UD6P,D{ բ(uo"HU&0qV)5$a!1XaUq C&-e j)~45# ;~mIM2y,F'  U??[ߢ`r:b\^nQ].k[i>fͤ10-gz}l]`['xH fDǖ}3ގA,^h9@v|#ndfm&?ݷk C@;Lmt*.{],|FoL vE\}_6L1(zx uѮøޞ4đ4TW/v{ND#xo:Z M!<~iO`lG GaQF̾Pk ZTK*+-cHAbCcGQޟ`a*ڿWq.{)ЃMl\=0]^ʛ%aFrj]ӏ H[3ɤayY%TH#sG.JoDC|>蕙㞇32p˿]n &,8#&3iWJY<ۍg7!edB8A%m? zLK]yC,C赳u}Z X y$vnP~ԥ& n=6Lf)d&lv |[{4. ^ː4c a*fX:z\`JHX ̠n7I ˛dWǖ 0)>mh@Y] Tj`4x\b5m9}'Xx@r<:]AY^qۋ;΁*yԟ;Jd4mEi@<Y؜-5޸ؙmh:DDY$).sJDŽƈ'ߒĩ&١ik ]`,0s~U@D:(<B j‰wG[kq)RUC<֕a 9"2|8&y|{RY|B^a/_G QtG {vE_ m6%+0oʻ1dYϭzn j>F6u'O -" p">9¯kǺsc iLKp@k5B";:_Cfvo8nc8eoNBwpTBs6L_ Vp X^k [j+p} B60߀(B{uR'"]ŵ6Gsy˧(@gvq3W;1xDєS.JψXi@\4SIgZ1O O~k_H6!XP_R $6ג. 0\'G H:Z؊N]UAm>Wbdn++cH224းErgP.DaCʖvGʁi 6u6N#noT^0jy"j)Ō̵h yC'9} ΧD,Q.x7977T~!VxܐJ3z[va"&P< - Qp+ulKeT9w6s CȃZdUZƜϊ&.9;LI<N22S/U(uy[I5D)`i".EigZqlMVWMd\llbnEnE@ E= 3;KzwR審-;# 0˟t%H艷ϞPґ|4d ,6 =ʱlds=zg,WiAa 9"3KˠtGZPemF1~跿0$Hx\I;"U4Y1ϜӃ .8إK;Q*1 0/z-6.zx0mTEkη){cA*3&hhցsۍƂW"_B.A\HM 714u'#e.kk/b]+]O<$ "!SNɩ`7`֪i kϟ]4v(z[XjRsk*6.')(IrQƄ|bZ+ԭ!ގ& =ꦉb7l= ]$h콡% @u"CWYjm坜-]ҞNa?ڏse72d1sRO-_/U[uPXm,+׀y^'ILvI+)#ObMљOޟ0mAp֡ 7H:pc={DrR 1RF-odHJ*PSh1qҞX0|PSYR>0eN;AzS^Ipaz0a 4/}4ڍ+cˤOaY뿎jRG͜g;NW7/Ky)qWbW2KH?4i:G?6^%EG#樯z VU"bpvHLV dDVe?f@(|0ξӘ,!Px)Y-S`]5XELֻ|P8d 'F&mܜp9x'~S~+EЧ. ~7"4dM<~e<8TS fFbȧbTT\!'PF+<}ENp%X)jT]D5p0HjV+HCJl0U_ 6!H~q,hrz2w٘iI4Җ]6wg1?"˦k &!`l#mM Udjskʚ0[ܢQ 1 HbP4$#1|D3eu)H)B5ij wYm9qؐ2̋c&ƒWo3NFle6QsAVuM=:G͖y1͈$݂{QUiЉ\yHuP_s?Ӑ=iE' /1H?ggg5f/xքt1NÊ+ ܞVvTkX5/EM9RU.O8=ŧ቞; (qL'+mxDUVݛ4ElSњH;LBv mX"#h GaME\wO KFh Q^I[@;Ȼa01t?;*c1Tmƀ$o]I{W*[ k9TuN4RTVs$ev uzYDpEDL8ƨb7IIZ`I^Bm)+Z9P`(D?jz~ij`đn(4Ϥq58wf9)EW 2†[XlszFVq,:*!6qm,  E5Jv},v7q6i}3!h5t'rIpW=$ ᔘChU/`ú^G{)!~! o{޶k[z֮kXg1Zl#4Sk-,ƣG tOjI_ b4UPJjxb؍7ZgLtW I]eO('p}jVHhr&P(d^Ѵ^5+7VM'Lͥ #!ߵ2M8V]`:)dq.rh;f4'Gbg##Hm3㷰=4|Ppt $VOu"i GbvQ^zgihvA]{TȱpdP_ƒf}2Յ;kQ3MEHYOWN! h)(!~m,f{6bgpjh k CmIlƋ t?_^Fj>UuEy5Rlk +L#&,?Lb 9oMY$:^OZDZ< ZbnVi#2U̓G$4ԅEm֌u@ٟY?^K"ۯ103Y%.^"(Q@p2uj+o']8@ }E<|YExݗ[ZPoҰPZ<(%V&-%k2"yp\ښC9Qd9c=َ J@YK$QJS;X3>ۼ 1O7"Bb?D0j@.MnU=V& bND i%S)p 4%j^8"Ao0OD!!$ԎF, C0QTi $`t.%$O DцBl1F `$<&ۚz6,Rc{Iѵyȇ$ 8%έ _.i8Ƈғy5Z(ZܕڐUXQ&}]DƺOR)I, |M열^gh&ˀ!Ź.%ԽJfk6#Raq6I$"9qXLla.)Ԓ 'QƘĨ dS//dΐ|:Q,0%"*aP./Än?ڐ}mxmfݢoS߃,a_pn; 6;DR_ \ w8CI,Q!{bfj9w‘`؈!Q[O[{6T dOxо/mW*\*SȪV5oͺ~bWRg 0U#S㐑4<5>1ci7Cvm}SEIB8  *S篺b,e=nIE$cBd ? 8 LB3jB\@? qT][3v.><{assHrd65{߅B/'꾩Pw֞婪-@YF,E ;AzDI,˕ssduQBK1{&>®sy~ S{vWy~P)v;:S~BBUc,]@g;͢6) ݳwhI_J?cImbZK ob/SwIL󐁋}ƙw= Weajc[!W9YTXXR^JI Ю s EM3_18 N6RλVPu(Dg_8-Gox_%7@ޓOxy@Rc0#JG:JѬD#q)5$59;rzJ5TobWcDU1di_ԞO]| XR]i9]tEYJ=Ոk1%WdiYIv(-4GW=TPR<|%;Vn*=WkUy>qr `Ty jTDa>[rsNUF^Hĭv ,lE)'[:g$88摴ZjV fOqm1+pۤe5^/ېK~~J!Dw,UiL-Z< -XY 3DȔɠV U!61$Mpb>PO@*fƈ`z8N Z*_JJ, (,$x8N WJ?V1b:m.Є8 k_O#@. D}w߈5~`oq9c^Эپ`(ΜXgR8z~]_X2o} ny뜱de$_Eml#!xm3skyBA?Vo' cgE@:mDn ` =Ђ99~ [T -"B`.|6lD w3Iy~l7 7uhFjVixlV͵#pȆT̂V 4ƋeFj_-\"KcH^xJK-l1AՌ? fn,ۏ*oCm8c?qb&@Ep}v9~u7(lXb.l'ҍߎkc*?ˋ#`Aw*M3ԐZrJ)ZIFٖY~;$S1C>k¹yIN~ *Vq=0#" W}㭜" !Bft8!?Ƽs[5'n 'W x~.,ꗿ;;B6WŲJGaQ YΫKy`ٛ`r.`G*|T3ė؟#p6;c 7Ҧ伵A[-D\~hae7 S :EhD+jNm71^\38yBe\+Z}Per ֿ__nH 0 Kői6"Ŭ K ;y*%!oYXahyh^/npZ\u|[S6-D l[gpOhK)ԜĜ~:XtiД,ȠN*31]rlo9I9L/ ^lUؿ{?ʨ,0OEE|OEҼ g4BMu1+OY۪ZY?UJ{{³8i7Lf;,oإ#RDNrW`I҃ `(h@l{]'&Ɠ sQ?t>n^ |N(4;T1@ǭ4B=-nt=|d NgmvI5Mf<cagzfQK #\"|oMXzdi tCBKG܏|pZg|y "a!Z_~O?[g:"귾 l3#ԫN|-}Gt2{\2 yD?ԙS~4wDz戃80{ U0]j0%5@ڃh^8x; ]~ȞƀJ3KC,[IOa3><'Y'g[*|{ AbiWHc[}/\eupp5DŽn5K^{XYNדDذ8pudK}=Q)h.LrnN|,4DT?!0/= {ӑ6@-  hAv`pюyiqTg2:w 02Fl r#Y)H^>'&3E ޮpYaK$VѲ7{pB]lDz>V.jR?0Hw_߅[kXg`e.OVh!:5_nN^x>Ư$X7SSCNCK;47]6M2[vjR'Rm7yrÈ݅@Wt>meӠ.M=$kru Ἲ.ޥM<߃L{u]N$&tZ "=l"fQ~\ j0!.smkW$yictaLlXNJ[̖{ Uȼ3ĿwߊuIeHV[֥B]ƻHZsq5Zo;VEgHHT(DKϷPco2$@T_߅ > A)nfe=v"aPuy;a8OkDLo``-ҼŪ"x04V Akl3Ui%/(t;N3҃a3}>WT?Ⴑ/.| ^-<pX{G=}T(@wqA3z$iCu4:y[u ӹPoпjpަ; d륿u᥏VDE;] '{2j|> 9ٚfˢhjҐ{R1‚s=f".n&9ڢseԭw;2듔`VӢh4@ц4T pkh yfj.j6>kڪKza*@/5*G"崫Ѱ[Kw[ "|Z(]WP9R씦rH0)qGc^ g/ FS )U Tȥ%?nmjv`ȉUogN0Aw+(qSY&!c/F##^^uec{qҞhl|7Mԅ =Ƴ8]O9 ->3v3a?h6\Z>BOI Rp%pv0`72<IҖbzr? 24A/id|jq|rLV0 k kh-}ڂLT5rV+x C=] >&.G΁Rb=ND$k/Z6~2k5Eˉ5l35G 7O7CO>-78p5ɟndPԇiK,ALƽڈ2цB6=T!N'zob\'9V6P,G1&jr.F-uⶔ_| VQ<< $MѴw<ŋ46g([m',O?eO$5*H (g.3w j8@D+-ˁJ]:2 ͠`4/`W&)LU#KiyC4g#{OrLM@!9{$sH9W-x`V}( r Qd$pB!3EXS'W/#]؂H;f ~IW +Ρ.NQ-1ϳy1Ѽ,[D~l KT;=k!nF=˟\ X[!x-҇$?[ >wWKI7QP`kji)z#bnܯCZd`v.AmbJ}db$+y%:(V9Y2?s\.nb$Af~.n-bNRvi 8$H/)Sc2zw F[KrQKW,fEu[RV<0PЗw:2N-OAu!gC) ڠ8m]f7jSsGŀgdQ.*<rT{a)0'QW1r3W(; a51FJ1e^YG^ s~Fi k>n,hȶ"K .bEFʒ2EW LzjˁlU 1˗*[bg PE%dcYN|X94IOge/spMZv^5FM?gm<;iQfʅӸ|-5[ϛ9N1-8W^y h8+Y@b?ry\r>Q{M_Vg{ ]ٴ#(+9iIR0ipzc~2 zٜ u>ikN׶~Ge3?ۇ>ȥ=U} E!ftq!i.ܑ}27|8"8y2K5xN&&ǥh") =k嬃w%H{QX :`*Z\7${vd'Iߩ EAlu4N]ۚQټI؏ 92`CW:2u{jBHG<t9mAӈ\{ȹBydi˻XI 59Iy&!U+ݎטMb"^.ku,{Unwڐ?ǘHt<6ľ//._AVɮ1|Ah72sXKB_m۹ý,Fǽ&K>i-%xeAXpQ3-"' y}0W æ SuhXI h1SD;3?M?ʓQ;|Q2SZjIL6f_)f40ӨM)ЅܞA2ff ^-Dʤ,Q^A=ZU!k3`Ki,ё~H=qWme<i"\c0*?HIҒ ^,VTӥ,AVK2Ե?b-/ `e@\{='| m}D&55pG:FXY k'"\X3i:N7EkwdamW GImʦ`lMJFdp&p.g 4" zRp'QivL{M60tUb}h4LU1 m~N6A݈#f@Tb Q؛Y+r?i钬XM⼴;Gvi f<|ZxIѭ쐕ÎîC]n#HJ(f/VۿǕ,hjy=G'm1NB]j2AJRP_=e%o0ZGY67-m:ʮVtov<ϵ1I(x!HC9+j&N]v!ilԚ| ~Z1 -n\Bl ? Yazޛ!N<څA ΄SG0P _&lvc>brv\oQq+'X(N˙]Fp~P%ʑ'pZxsvҒV^5˳ <鬜JS~%NkF@xlDןb<>4Tz}x׃qv 5E|hγm;`i#b9 JDCD{JPYF ;H+b {)u/zl3* ͮ'A=^RR`G]y.*svECwo&eЮVI$%ߪ@GM6*+ GJL1q8[U n3dEUk@q>z8!2iqD%8xC!p=*g?A e[MʜxL\_^Gws53}ENjIsb{lBr$IV{] 4^"0YzsҴPL1v C ο8F ?iiG]$z! cIvndi:ʭY{,( /JXIŃ2m سC|g?,%l>- ?+Asݙ] gú:*~L\k]᥂AJeYZ3U\kfjo\[hٺ7۵yȊw5_*a.AHC9 Pm=RtUDZh"a*A#Kw)KOURjR ͩt}FŻu`K0BIkl>[lUK@1YJ#LCz̩WAZyx1ʅYU~'Ӝ ҋb1Lu ^R~['[ RP_̟7i's9bBqGjg&ByS=y 6[T03Gca">@$MR yw?Ȫ!:DxpS2A͹X:X}{(Vј#=Y٦Wq<,<q!9T,(7A)Jh9#C&͑#K:gw?C13~U7csf8Zw[s"m,zVYL-PtplyQ+u^~ω8n|+梞kj9BٽSdd2l/d1. Q(_PHFBp[U<RÐU1{H$|a>2ΕUK(?R'6/Nz'NLwbqXV[n$~C`#慄@#S/ȡ綼azzWϿpMe;I̔ɋogp뫻;vSyfďt_vk Vw҇+<tu5TXYЬ`p)KbECdD6?bd@5 WqL4 ,_ 9jN>l wh$k*c<Ohi ȏcA+hS( ^ڽ0UGLRW*ݮc1Q \Fos?Qp| ø6T㹊q 4' 5Dj]cAi%-3x53!A:`˰k W's=5^XIGɿMj;V?? \ a+cا+8Y?}y| '߉qԪ4oY.|_>i7wW} lQF*X;;̇ UоY̯o@Y.Yo<5\̄;VqQ4Q0ƐR#g3(A;/N"R #`]У%c`CG[7YN07g΂CTL wnd@@!VJSI\nZb+YMg h^>8!0ὊL])?wk Efک=3E@B A(֬Rũ'3"w3rWseqG|/ʄ|=[1SS0F( 7r C"a$p,++aQ H.GbڱJ!##q'誕˜DI-@dȏjcVְmmbIb8E LOX+(ά{u|uVJNC.*%XM&6#w) l=2!7P\TX]QSrc9vG1H$ L B X}J%y=$%c%F53[HΙ[u|0YºRa"Bs%W_Q&y'H,xIĆ%¿ Ww!yHv*'Ti{&$YC( c)ÓT /ˈͥʃ1z&"}o{[7V MD9F$ZjZ.Lzm[>/ lQގ!V?Ft1K!k 2&wr4Br v []/FGGhhBlxiCMwE-}cefj( "\v-<"=LrɭGNw}{y5.' X!dދw}ß&dkfArVc[%f^pmdWnwEl!)gTqcaTySd>}Z-5]C2րZCvq"W!e3UBY%z#m[h2EÕߎcrb`čjDq\31屌o ^Ju M} ٹ iPGo_۬}3{jHuVW5:47FL)6 w ɅEk~,frUndG|>vRG^EK&pX;{`۞\04NۭZK M, V9IEː6~(0iMBY PqP_ʋ)"nj̙\sULk7(4@s5^Ls{"U},'}~aںSU__qwʓ(tߒ}s-ȕ ,xn$*V[ٝ0^RTH.@<W^Ds [[I$2XVLl i#ܽ6ڕlqzɏ6N<6b՘8o&viM 〉2w͐&qn:DdݍMK.6M^z /Hq x S [lXQo;(qm{ j0k-#0 21~W(Dأ[t P) R*ʚ0K eЖ 1O^ըtayb:\x%clA2dGvڲ)ۊ=dIͯ! ~v;@]*S78^v)ЩFGl&b€@;{қ,,}u޿# u. OzlZTm h}&gP0nE?ded .O/t5R4}ZIT7%*M$h,VBBM'媘4kQ5"P[B90m/cf l힡!No^8x9ֳt:w`ΉZ=KΒs8.UC+oC,+T}cꌺ)sU_@D'ER1H*j++rKAN L%ZUk7)4iyY$|4iDž iK''1дNR>IJZ7%N5s3in;V8ɮ!%E`>;9ܺ~ɗzL)F.{w@*|T|'lkpp՛I\@\oc_`⃮7bPZZ^e,8;MR% t ۙ~ȥ?)QsDe2Qk ^㣗FHRzPٯsN9\FRW a [3/A[d 鸶sjv:b_oɼ ?MyQ' k_1e3nW_H%1(_5Do#Aګs{uF;Y.م;–2zx]|ĿpsHLϙAxw@(m`";msdp7THe3*<[t\?lɃUX KϾ[FhKLvO*e `m5n+ꗛ\e`tuMLWIdoIp0M%UaP8('';\,8pnz).gOπ7šǷ k"w=ołES$Q nλ9*^6/3+DNJh5ݒ 6;U-3~33ىZsI]EpFy!8tHfxx`v YzXfW|>L0zK͛x.:7Ul|9-'r3j3{%/~RlDVN$is;NCSepWFu7W=K7g$dVOH& E>Bn:5)C,L߽^|PO{YAȄ];9_\Vuٺ3P>wNw_jdn}( mud| h'MR>^ ڟg2u6d(Vi`Cvl`헛ywpfoҫ)Bh|i(# .s s4=8wϨ{K0@*Z! ؖ/ZXدgq9u°Y +Xl.9nhJ מN]7n3v@S`!xEJ!CZ:z_i&%| O'V8B\ `p͆A?Yǐz "CNUϯs!g|ۛQQilmi}<C.FvQ>kɚ. wLD`(bz $>E8yG^kߡ ԒLRHҦP*9]SP75D+VU7J_o}*$מtIG-)g@<# $,@lDȜX49~ z;ִ#p0]Y09Gؠ(y^WGWsn]!WXK2Q$yZ$x-崚XӅu}X6$"*4|'*Isqn!焫!Ls)Od˗(18-Nh_eSkJALwU*QQ\q?u@,[7@SUI{l,Scݳ,x? -l{Jig6CMPI1µś1\l,[9)59y87ie4r6,Òb/c6pppy-~S]%X2`+](~ϙyN]/a=0lhH7T4&e\^ߟ>bod-hdGflB4?.,A g UٽY?q|:hT\ ']/@л,ڥ9Y1{u5 ȓ6/dde(1|.`f8!?~Fm 2` t,>y]^d{;FnOH-0 b=跻az0.wPȸehµ石hY }I3T֎>8jS.Lw!߶bfjjT|FZ' 3R@g"4?x%x,O ,"p4=`gQ9LHȿ;4Ipjc_'`j0hi=d#T zAW8WvD#C?cÐVY(wъ[ʻK-aѷed"^U^ 8Ն `@΅rZ[^2y[ϚTr;'_-dLߵ8tD)X| XxtGf|S?,,ˠk%(Rd+;e?g ͒'3 }tNdUFξbIu׷qZFZy :NT/oղQݴL0nf̑_ko]ZEb kٗPm( 1U TԞ𗜕W\f&;LeȮgY&r-=2؏{w=5MAd<ɴ_o0' |g=Q"wƞ4w(C)xfU>[  +L}Uv @HQ4"E1m7{d w:NKPwK/tصel5 ~K*A[u:g#D˚7> Ԕo[6ĸU0IyXsUO:%por؎MDEesF7J-aLWy4>'tR 5hg'JA#dR9{AKf&.<!ц'0 0bRs$$ nz56L:FG7.g2;TP>/9BS-0XE{Jv9W0xqF 2Bn:eي: ʁ^H\JJ=:TMY$j{M􃳗?"3'dLyȹpg=}H&SW?\5H68)I5 ҧB%I"eUS;N,zՙv)qV%$tWS"BoyyrM3+{\?񟯚r=Ů t$ߏ|ZQ^_ 1%|VV30Vj$&An -H,@aLU x14U 1oUht|݆nSP#p(GIN1%E[z&m^'s%t̍$99-Jd)?_qyɎB1 1f yud;N˶Bo 25i3:za\H(#pbqM ^ذz9p=~igS_XBpUV\IR/X _6{A%%9>El(2T?w s>Mv5MyK3bւGz+Vfa?ՑxqPE9nayn|2BkqS(?m5?X" ДcLRtC y!!JTctѝQrer1PPp)aW)0OJ[l8Ð@-sVWpS.rK|t(<8 io*Rge@¯^Va˱na(y2YCuVQ]1c-GL2=i?;;QW~W"fRCC p4x3L5t`7eL 4^My^ uRyvWnтr%)eOMW}AT 8kŲ&s"umˆ %6ǪldF) H?gAKj.ɤ[-ps6[Dѭy%dдTHWXi\Jk fRo*$9@%X PسqU!jͣ]G7=LO.bh/siIs#ΚvPJɃ\T9~_lZ\U#[~-`;89 S egAPӲwpDeyO8Y&ƔΨI΂i ׵0)z/ ~o^J=x^D|QC|j}qIWG~o^!- '[=>|- ,*-sMfZT!y!i8!es$'S^X1PDrKrDK}'3}~Qi"Sb)HEhg 3E3nbM0Tד,Os6ysJ\Uv9huTQN4=}ZC!т{-cn4\ V~۹JiJPUD%H)tanc|CO];d*l\9@7{JlOs%o\dV;]p ,9 ZB!V XN $oM q[ lY%EnsjRX8\lPa/`OG l%9ί`e:YoiŐ :&Sj=NJ:s.iVnSsfC)qgp:iNQgȱXzz gb9؞^U}.M8R:53ހiojoA0X7P5HA 3ʯ`cu&Fs!%)I ȼDc$yõyZܕM߬Xz`X]^u#HD@!Bto]K r;>?g;xENgԓ?9I7aI箽PP4#bifaTT.V:r^C:di yNpJW{c9],\hErtpLhLV:aimr^+_GtiM[{pxݛftF;"$KX'^xjQC2-!7XEO/Tr_!sخ*s;iA"'R0z-[cPP{ L?0^ |e[.S<#R%ṩֺhw#$Q av!01hTbuĨ}r}ZUAfv\ݝְ:QP=GgM7`W-Az&vg s>p(촄?=je^dE'R1iL#ϯ0 `#ΑvL%I/0_(s2K$G&1┿N;T띄i4~OI:&wϔ 1&EXt8PӀ~GWAn3^_tQGUs =1IDM( ;˅uqX)"r7HCZ/yIur~Yܮb#!3'm*YEh*Ub{xsUp8,xS>hw\-?H>dʢ3mu4JmS]aMc`;&%VJlfav"Jhx/2xܶ)lW~[w}2DN{$ x;D yv؊.܈Yj״[u+Ҡb{ @6i1X~ > ^3A!s`Iߍ00x O#k*S5[~ t Hl֊s04Dlz/TL΢8?&kno[f%J9*X䖍OCꇶc8vL}"13y7ލzQ0&L  ҷz5~$gS7&/"9dh(3d}?4gLhSjﱝ8^2]wa~Ě]y; #$O%|m9F24–$F#ltġqggӑ[1c6Q-g$O<51uڲw )#n p+^{u&cͺ+ɔee7|}okS rAI^hV|gMrF_xYe]C&6ir4M/uԴ< ! Ij v-Ne4pm`ѡ1٠k\Rٞ|{ɸq NLc+}`߭wۉjƎd *|l=;r(#5mEٸF CK '2|t8r'qLψzڡZ2O;TZ/.綟M*gdcNRZO#KPh~>i9miha XZp"GU6W43݁R?󐇭J֦zy1Zy53{'.ϱǮ0dUr \oA0ցSqyo8Ž~=[OcOT7kE\Yk2 (i= ym bJS4KX<*0,>-nJzy6VOct>+YtWpZ ]3T6PfEHð2hòO]Ut˱ $i/ |Gȟ&_Y@J i.Co &MI& y!X,I_d21Wឺl5L͢] efN7;G ebvu'`h%Dҩjlʛg]X i=` ~8=}nOJa|`G$X#7&\|¥U[T. ίiT =0PYnX:%o21`yU8()%l ~*0kxi7⠊[׊PV<_eOQ#~7GᨊU:6y/wC)o4!* s٦XҴr>x[ɳ9cŞNnԸ o׆5#Y1ɨjVݢY#7_<ps@ ]ϧ-*HBG"Vxo$e oaГs딲[d 0:VZ~*CoISDiƋѺ]L(=\R\~0/"`pdQY/tkLq!0[0Ghd(-yv6+npʴTmïM/USyQg; \K?C;~ԏݑC9sKі`n]@:քeLrؤ+:P8{0}hȣ'%e&{3 ڣTtq3!M%Ia)TȰͫϹw.`n/*.#v>Ȃ FWě(b%1U';\'!\\h'ᔪ `uE^yw>b\|_:Q =iyz+$06XN]|Ȼ`UaQu {}Om|;+>5#sR7ϊ eA swaUɩחR.VFn}5@bV"w(T@zugsQ)':xF&U$g1T3 h$"uOۯUK30~@HO(G=V77gKz/_ѭ3kŊW ?,+oh+X۵!Be. 0Ԏ_N+,74x!kނ\jOԔ'qD?TrBOZdd }')g~dd$&'#L<|}u?ghR=E|k]v/}?%v ĽdGX~UhL aE-$b/ow2^@4Ef=#udk^O_{ߗ^aEJש(=~oX]Ώk_iBc `2;viφ 5vo J{0/ H:h"G>ꆒ]̻мԅY_;'Q^ʵCg|ՔK a@2*F&0crxe) ` tMհt~䘪RWk̟.8+&q&Kzђ[&Xks88 D@fhK`Kj4բM5'Kᐂ}wR N4 .`N0÷ѾIfBl7C.94|ġo:E01~J3C4nQ ˲Un(C*EEij#pIwe vSXÑ֩.aSrM`e~tQ'ѱAdl#E4XLwaRE>Oe6$UO<j )Z "ƍ'V=K~jά$i#yL$xXp@d4&Kq%p̰O%XCunXl~Qꆽ'a?jǜ-31`-4/o[/o6A9SEKeVƼg>ͬ& ^)'T#?EDMA>6k"(`Ƥf4~f>Xl͹`cNv٭~.'.4/C7vIJ3$sZ"iNp]B83QN7u|$Rպ}UHqo25/l5j %Q20!aWS5O5VU 룹If-ClMGH>Q}DֶU2+#66/N/Ո8G諀2|&.OAt\RTjSu'ҝ;>()gCnwnѭہy㗤D1>;[A8ByHђ( G`;8{w?fδ^"(,Sc#AlrFk*ۏ<b5fOU3"lsvLqnFqK_)Tu1tA 0Sv{ynӭ ̭:5ZM4c~@gW8KsGeG`vh&IBLWq By v(GF1v`m`\c0;2ĝzb%=槈rtPB%a3F.X+!X&f悳#V5/uЀyQtHL8C_y3[ܿR`(Ah|pB81`X[6BJl8x#)nV5[MO±ɂB=dJB]oĈ,Z"fIn7 }'Yq씌{Ot\bޒ)>>9U#N$ޮmÚpe&}AUL:J 8h c "钀-6\^j+%o 5)D^JTJ\%zd6Zki B۩Z}93NZ:9*۳m?"/EWŠ%yr5Ki԰:f‹s=Q,\:\ O*0E7wWVbkĸvbn )>go+,k_l7_Nˮ0 _S'XVmF.R:lէ#i4CB_n~t1:uҢ^U]u`v[h/ߺ+*Ξ $b0tw 8ZV+jV]w5d#"Ẏ8fT4U *O'=s CPEv5#S& 'b ʱs($ tI pFdg8hrT-Af3˷hTnUW-ei;#ŦV$ւS'6'Į !:Wy͸^:6>(%;0 $${)e%l,)Gy.48DB2blQ>&Jqi +M+D7UM|`H ]_p׍NܠDWnMe1BىOn0 kiIyJla1uwҗ/x!G;)\X_#; [;7g47ckWF-'"Q 05P '/~u""(FKC0TjT5wjlSՌ`y>iRBڮŬ6|s&,f^ w]A^bziъ 8y tz+/T0aꓱ, q|X kd`mXVb5Iݞg=<2DLyrkaZOlY{S]m{kPMvs*@rn=iv%)j{3ܓ[Qa]J]Y {+0<߁ʼnT4K WM' *۝Po?6;m?$w"#k4LDRr&itg;KZ?>FpWKkShU%>uv/DkDYGq#t ƿ!HWRe# -3:PnR=~J*f ڕM7gEO,EofE@:]R_@X9jJP 70:kK!^F|?!խÇk@loj{ QL^e5b84)ucDCQPoG] DyVfj+x2lU-lr,cT5ӄb""rfҧh$jc].5wS:tñsRR,qUۮ-F=?j|^UtYС"Qe'X0ԐڧڢƷK+oztեSTiP{+e@E*\-^"zA`Ȁ9w_*NEA,*yOhG`ASҔ *hy\ >v1Zӱ#(f2AM3} ӈnCpAhsjEtY@s0 R.XZ#r re6zڷ2NYL/KX rs{_p7}x jR 5&g̟A,牲q/+PHTu;U[ XP2=ވejR"F\j0Dp1}Cl/]k{aEW͂BqekDICF_,w5|&\j h~<$s .X#o$ l ̫hv1pgԄC]WMSY7$yvLp݋S& oBMު1x#)|w]lp+o,RLNP]˰D_Ē9}LUڿum Г6oVQw}cUt,z =JݖHU>DG2.MwI_ijsۗ?8m|:kc!ż&̅s,o^U,fd|^y 5CŅ-o,S3ƀ "( '[ïShظ旎E;NuN@dp6ꋀT@4EW+;R7 n>*i&0m,e?"/>4j7(N=%f!%QiEt"_#-;wܮWQd<XaW`Y>EsYg޹pmq4UY#= 7xCg/qW}=Ǫ00uqνb_JyT!EC]*rӉJc;&!*O/W/,֧;M%ۈ.^uƋ&\S yG\L r@%1o?9c|2-Ujt5o؞5ᙨ}:w˫n46FAc;CEc*l?U4 m_5_ -}Hx2GABN:-e/z2imM9I'|' 64l6nk*2c$[hNrH#?fѲ8hQÌ/p /Men_"Bs݀$ 2 lފ֝a"e|c})E.q~evq`N'fE_Xxܟw̡UL5҆q1~H:r;І3!6BlLhˎnflK ldU^~q'@aO v')C6 ղyq{ԧ -3}‚,״OlHi9[} ,bLauDYȗiH6gّ18'OWkcR%L{*eҮA+'˕ß6^ɁAT w-n 21*̿$fFf*hA%gf !/1v->+<3@'J7$oۛEE?YE@şܻYl7/ޚ~{? m / !D@|le{^Y+ 0R`WhŗPw(>(i>.w / Ė[d5՗! EqlPd9ź:93:1cq p߃},_xƚ#]_2ʠ#;e,j5%[8_>"AOᒝ *ooPB< àҽtЀBQ4WBOv}қ >p7X͖ <y힧2L?Fӹ \?MxyAeE|E낁)"jj\.[y j!WQmy|hJ (ASԎPYl*2)ƴ<)OuX+c+` {eeb#ɋ.LpcIτE<8(e%,r} j>wGFa*F_"l^dKSѾ֡eȗ8+k1e-PhRS}/gH.-tL|>;%吚|Q2YԸlS0}ڷɮߡA2r@w \೹ *w-cֺeY)9K2hG\n#nS`mgux'uІꊧnN^yslTO?-,.ָ∄h0S~XdQg:1t@hpnHYnI&dgX2pΠh`< ׃K S3't] my"<)0qj$LOMtRP'6Ԇ9y4CIg XDއ&Q݃P8,Y=c QNf7-΍ on7E n}heޑgkT+U-B*" 9l|w;Lc!fqoA)Bp+&qgQ"jeT#RSbD\8_pz7bk$i: p4) lܟPM2 ^pF XX`UNK Ax)]v]K/"S}CBArW7pG snPb]DdM 6\{Za<k1eol1#..S;+N2 '6B 1)`=PhGZQ67+f8[û] )^:x~ӷN>bd;FؘW^0Y.- 1-"_Ϣ.'ePbZB5;ۘ[/)ԯClL}iY|N8haFjpbрzi Z`+ 3Ԝh\5_GFl.:djtV鯎bKZƐ:C"<@mn6U?#=NpouqJg$ ~i9 jqI?HsV*]p7c{s})FƅUfO]>PuY5kEh-t@| A(uY:?-jFOkJ: N:S]\YX+;/ XCs֣?Q`n`+ߐ#Qߦ}_"!&Qxe5Y-,~³rJg1- fjkҎ(fO Lby:È#QCwE P m7H٢sYN޼ (v.a$kH܍kc.6| j iϷQNԌpw0)?-v ~;$ j׍* rR0x`H%N:|? Q4F,-Z-T: %p41mi,i _`MlD`E5;(n 7 dN5VIͯq 1TI!8ɐ|Vؠ5 )(NLnKW+׼:7m|zђpl^(}ԄNX+} ⣥W H'ijVrB]% r&&e8XN܌aiYĔ`x?a.fcdkO#ԎK#h3ԟ|2IDSjOqL wuOi(#ӻT</HSl!wgqr6la k3!hfO4zUb5 n$ A$虀V|V50\Uy!*0po%K YƳdD.{MMHYNq-@gV%5)Ni Eq04;ņeZ4}-RtTB)BhoNM td$@6%BLh?@^ ̀.}"tZ~t:A~zYz6_*['* t[#ey Ngĕz;>b%8Sx:"NJTc+*h9t Ûdq|O~1ch&HLs}Uo"ӆسjzA0;CrVՇRJWi'cg?U`Fnp) *wUq^dzCa| LL',CX^T%y#CeC4t@ Zoz:u| MP2p,ș(⬵Ύ-.hD XmBCE]hbB@(c?v{ V@IXERud+%KWmi2kll;׭MBڛeD0Z_~Tkz;KI5t*@|N30+^n 52dy7 ykGn5Jt;ulcnԮBY3,0cTyJɿ%*#DB@a ɫO^SdѩY_ѓ # f|1,5h<ļ%J]O`?NH{EuBD+@c~w˳;e>dF fe7?I͗=ֳ(7Ĩ c6`g ٳ.pP(FsZE52 3T˱zc7 d)@}:m=OGiU}0rJ.uӬN̊{Ph-ܷX՛Zo@{̇x=As`<h+ rc'{Pf7έzX}X%jMyV_K9yѝxԳ s]|jQT'N -}y#VIbM*l`q% r"嘟\AH;6l*,9NdrT (BlCq,LP# A5{G+ו76M`&ĕ4P'OGI5rsS8I,=<RMz:w%Fd.Z{zWw4Uo{OJ9@ ^*U,v܆Qʞ jF#V}އ V8; G'GsMZ] EFtf1$eo8.J< m)r\|p\)eه$_nBZ vYo,ÝlyYwZD+zr*/~w0)wsHk_fB[&-jK &73_`1gOl:ƠRIܣj)ߛX;}ֺب͉7Ƽs^bE9[cYY[_pϛis A= bQ)qp>~H8SVZ(/Q.,_{]]p(9+f/Qi"S!0b[o#퍾༠Ѽ6M|%{DVvw-NmԹY(S:n,;o\/FkZAЩ˖Z ž&~)y&SYe*1;fc:JBR>Z3j ~BM<a0 w-De[]#iWrwt \#t5g:=FLРYV#GVV|g>ﱟ1@BfT۳u$p"oݴo#o2 Smg8q\!g^zhH[\ ( /l0z$Xj".X9JZI d9,moq?ŮRfOI^q7b:@rLR…7x٠LEk'iciȠH1S}d? y껴sYJݶ ^4T3YŦAWC=d-9SIvB?LJS`Ց^Ħ[$ă7/mZ@\R%%t}pCc-MO)LV=jsHĶG) ]e ^}9~#sn8V0+2rA %C 0XwFVFT{UW|SebG-(X`Ss qY=P\}EuW'Mp.e; (~O%i}l q8fo.K )Q ÿkN c1+o8I+ rbtִ 9[{oLVʮb&vY7KS9̸Z͙ #rAG8YӢi:3lwknuk3KCKY< .auӒn? 1~PXZKZLcwxߤ,N ?fq~я}Ƥ(ŸlC pjb/4&pO~׷ -wívR~Βjk|R SuP*dr; "*Z돈yA~-L_8(OUFYR6m?{Iӕ1 (}Myd ) _6'ݞ %~fDÇ_/ s0Ʈ1藒]g5pF3g"Z69262lPm$ 9PF6GKx8p.ܬ1,6+g)u_)Cu2Q*hg {5`6HwLC8j?)#e~pD7~Alo˭簅%akgre b,x-?*M%ޯ̩ipP97!㞋-Vō!o6Bxww?6KuߍkV.5f܍^aYt #v- (&ٚZ+J "m(jL9DX%vG @;)Rv:@f虷״ T~f},R;`6DCR'k(w2#ȉN< Rr J'C$jfȁ@H"N%P<O=@ΩB,x v|pa]֫,h_yaFeΥl>s^v*Zn/8:Ko0 [S c߆d\˦UgTPֺjAnAXQnbx-CWd^2ėx !7F%@nAA%\Z>'q.EwwJRwtnH LogsVlz봼Ӻ2<)樨d!|7)]v<_ -E.Ol؅V=G{qp}ٴJozKS_8eN ͆P\6 bDXk7}ue<Ɯ..sHGsIVK%ȑ9kK& nBpLOq#ߓ38/V!uÿDB0v *-fΉ5q9]O`>ܥLoUXȆ'Z YrS "N_f}qd(IlJZ踄W}̆%T/{mҐ+J4j\B`E b~8dOYR4xC uQ0R0\~Y6ch'_ lqJX.qގm-`%lDRO&@||\;\#&;:0Nx;oP<]ғ| ?Kn C/R"\ cvT,MEl$?IiEk)YR)O>5 XƒmA`6A׿L;mfۀ֯"ڊ'9Ak[uG!Am,C5$aM% d3C!:QYJu׼aY8\.Cyj3>bX%y`vjkO%$RgёNdyz|Sy9mZ^IZ'K+DK}7y;Q吞d- .΀'CXP4ډtD SKH cή/v O/̠Prw /FhR`黮`zRjbZ$6uQмS鍏>z|)b7:F-rzQ$@ן\6"*+(1r=vVr͉.%6(&@RT9e6k19<$<)],CRHj iH-YME9hᒫsISKt`фWM#=kN KL"[Wt{л3}//\T+ R& ";.#+8M2w}9:L!W"go&n _l@$axF>BS750CUz&kР_Q"_򏍜+qZ L".xO8|J){F <;;mK Bm$62űBknN:<>U}ؚKޭq!Vlu=P ͼX̛aڪeW*nI{؆&"mKRw>>:B /OjHWletG4ߡsL!Jӵ,Fr<$dT)45X8Vn듑 t'dږ|׉ 6AohfA$y%"@U `-Y!PD8qqL56֕]0O:kPa11TuM|m>R*O1d-n8 d8C?LȿjeIHzL=h]VN$pEFXNǡad`W?Z2QPb:6]iDaژK#?f[}һ'QpEni[t^_e$(\قtH(oٕ(ݖc;LٟNGsqu0&gX|)0b󁁵z D3v!J4]=ƱRdс%Syʔ +zH LQ$\27a䎱Aw"!WV&=A8پʨ!pon 3"!1.$ty2^f̷-p ytşjes6VpXfUWss3< /q$AJ K%CMXѩ?~R  E8yTG../Ym{(ÖֹUM8ᖣ}I,In!d?Y{AuPWY-1`:NG 7jih?y fƯT69 l~.^oV^)dY/G6,4TSUNQj1bm/*eښCD"Pf6lʾ/Fl]IB ̋NO3x~CJEB=WdIL`'e‶%_jXiPbz<O,U.UD&Cow~%W -G*aE.Q=ĐypC,೔󖍯O/B?".p8ƕ(d ,"*I+<ݱֶh#^ĨC"u:4+@[̜dIR,4 Aft7:k5#S&F~\QDx'Aπ1JCH#dI < $π04, #=}POB3j>fmOg84Lc ^WԂ.08aUSWDpEˬt:\ϐU$ Kv:(}'!0޳o7ԣ]qT̃$WxuKkC'Y"ZGu08e:crr4٢wR&8 gI4TϩA:itZ(iU`\#&Bm{P&ŘqR&|,ܡA NS8>eO笎K5g ~W{Ɛ-Q&x, ҂(g:Rw$ ˣ$l}w+'aD׾l9RʔD'oO~[!{;afQk=>C'ǹ6|ޒm8>:&RNè<Uֶf_3909V_ľtA:a.;]bZ6B`'6\+lc:$e(fAr2Ȅ+C}yD QwNor%hb :D[S*N+,H䶾ǟ)2 )4.IU ml0C |Qrd2q6lTM3i(< p.҇v^{G2;>%KV5+̍%K/QTJ3Kq^Z1 x%.8d8$R(ާ:XSV~4Ȧڗ̏UCۨ;*UYuDut^^6+j]!aas`< ƊcomEYFٷa 4aiUwصAĻBS+z&3E1?}=ֻapűu8w4{fzo-,ØG&9&2CMĢ ?6iJo%V>InK*Šx#߸2SUmftP#T?ڷ$.W^$')|Ju55K12ozFt̵Ofi ],ӦQEۺ cAM5?e:BF/afxIyh ie^_we:H4"( [w-?&. ?ie*1UG~96R(Dב ?2:! *JUx|ÖAm<!uQt%wDZudFrqfҊ82 I)6*[4s,%fWgcuU;aʳ'e= m wC`M?l搹Ъ-1 U+6}YxR}YV'i<&R>h&nKGq Ԏ OzMR k3%"'S w\pb_ LmJ:- CM;l w="bz+mWO/mZOG9[ʂFU Ɔ5 ȝRm&[#D{5k;As:\Ϻ*&sSխ E."`y{*FY湒i }E[(=D)8XOկMcT. q枴TAL\5ta4m}͟Flx}XcXfTaJR!/1z<ۦ4ط@l;H5@Fk-.zb(:oY$ea_bH׼MC<[Q^ބKcHM4ڜk"h_\Xh8aU8K|].A3]Ŝzs䫑MvJ5ϣ 8Ðʡ 9NЂ :Jj*Oן*&ҟ^TO z;=( ƁH'.B4{>K[,AꤶW8zh)EONLFXv]LtDI;!e_v?u hoAe0_[H?[s7HsqDn_ P g_ KKJF43 =":˕5Ie}UZ-]7ڝ{D;YO~ʊ,.yP TJ܅&#x;M7nCyˡYOy. JCk`ԻfRH*[ Jhw9P~mm8Jm{LDI1'\(< Wڏ8i \ϲzbLj^dS]p%V$|Sg"gQXMc&SO3*n٬ W 譭|ћϢ|X c1%E6~mk4+]L Ca<{̓V>[QmLwrAH!GqgݾNۮvZKG{* o$QebV1 E-AL*UVBe1lfIYPJ*bI*.Ӷ~nEXPF^N(LN;uӼ mv>8 Aޢ}S:(YjE u?kGu=tl&/{ wJkAp`Jˮ;v']3HFG1-T=X3bȷ<{<{fpmg5 T؊c_W{T1poRw *ZH/M߱)Q? zq|m;j.FS!U%z8hdU$fw!<ަlfTf[Z>1q So<ݙBbs%gՇ|nCq5[dk5ANqBs=MUtsyN2:S\'u!]mt4FlPVMbieߖlo=cZnSE/{3 HB>G ݐ+叆*5tꖂwdPΓ{jZۂLv|_V>)yƒͯ0ƭ(%j"N/%@>7l p %ѱ=#Vu..'#e[D)?AH㫕EJ;,wt̓ev9>Ef r +[u`]bCʨF)նx*y 1Q1;J)+ܰ=ΰzf4;<7vOɡrܴ&G%I;'*#9!ٝS/듋9j%uCg#ԕv1#ʴ}B€Y[L먚IĸA5hWN-ߒs˩Aӎ7]ǵm,<쀈L=mh$rƼ'wLM˾7Xqu'4&f?' /|Bd\ zn=b}jD-UQ[#>8g]8?CaH ' [ 4"!VeX͐pp׻rn`5$v)zֆ+A+b禈=2/`f UE3zUфu#𑱆v.YPp4\cZ/2v<4/pKKJOK3vM<ֵ!x~/Ɗ 4c41:?ϐ{ U6%VIG5eGb6StGE&.5ևQt;qE:.O(`;Q)S|ڌS@njZ AjOS9:xS:F+QL_-<B W؂fgZwŋ\{@(BB;6m,K&^D˺̀g, Slt$îbbj &0/"rݳmae JCQ2)?ED8}⯏g zb -O  {XB!$ Xؔ:{NHw ި*r3KVzp C5Feyg5/z׼N(qIc-H Q;;(# ND'b>GU~GU֌Pj_'f-(=r- ~z٨(}OH'Ig8ιԲKZs"PhS,!%A|V<-n.Up=f_cxZ`,f"O}^G<êʮwmYs0,Nכ?p{譞sM?WS0}驥Ey*y* (=p#b9q |C)g69žDTDgnM-0E ջxeWZ/XrZ$F٤L6Lp@7Iv;|?ɾ.X%v oguN2>Sa*=t{`AؑNhui: oeQ:}M6GG[LjnŀGEm[F,͊̾G %~hh>N_YH= bx ^ &1'=TI)p͝Wb2y)]w{3&+st#)Ko@5}iY2X8\do"G !eďR /iWݭ"rcD8'#^"~קvH;/bu`~`t.)JG>4GK,fI nid@|g"7%3_Rog v|#\M MˮZIҘVL#7:1Mgk1wZF<&D"eQ4 jXmT`ҢE޿ r@Nʵz]G]}ܜLd`aő,ogd4'zBqЋPX3F v XB@ًTgppdwjX>m ;[!yZ y5R`US˯]qxH\~1x B[+`RbY @?/~b7_PUkzH[Mal!RMzL|^iq `Mkӽaía@t`ڝSw\n:X2!/pΤ J!~0SJ[@>D }L (CԫL`Օpo eSނ׷kjhi^eyKS!e:71Nm(SbLc-EQޱêxy<$2z[^ǡTH[zjRNQ/rG-wI|ĢI[=IX8qةѷnTN:}0}|wMVs1dKZMZ(*tk7V^Mka]nD2W0NVu]<ʶDleO/Q 乥Ku*^wwf[ٌ6,gLCnV;V|ūA5[g#I@ejcaC[}♀;%eg RW ߟבƎ]䘩2{]5WW徊NlXޒ@ Xl*AﵝNwJh>(6~#)bPC0awdf2*駺RX[fEqX 3J'^g3DMo%p.b[X E=܇[݈7[掉Z) GZ]xIקSڋWp0AK,M?)w N@~&\6kRyR\[g`tU܌ *%?i6_U^ ^Ʈ3ծ=nYi7 XӁ/^EHHvxAz^ljN;n|BˆݣDiodG^,ͩ=^_7ͥ칋V!rM^Aֹ+I @I?*,l kEyP)ĝ xGz~W$=>/MJ'ȼl(-+t9J>`uf;l<#1z J,mݬ'!{azGJ4rRj+aK[W׼5: HNa4^f(DEſd3`0k hdaI1N yү:nfuOM |IΎmpe3taP$<>fmf/bz^jlKW>IAM^θ.cr]y$zaUmڪ5=kPۡ@†.hO`{#,Z?7[# >*{V}-; a…pE냱4M8Gb- _xJ1#攆 2tH9< ;8Zq0C ?s~QahrIxlӍZ#:)@=sކ4 x̰PxB0scW|*9jg[쬛֭0_E8i`ӅרJE=,7gABCQ3oLV!%saYʰ@D_vhH7Ůr"s2 Z~y;$tn1gՙ -I -!m%$>'s7[ѹ[RPmjۛ$TVtq\Ex/zzn%a͍{m~ll>oK40+bL$1|ò'he[7ʫS|xLN(}%_P˿4X& ŹrW><;ejmT-Um5 ލ|π^HB ^؎z0&KfcKIsj Es ]L_ @7+sޑvG_0A)?¦h$> >.gebV-;6bRZ ^qc`;$%O4LXAjsUzG&ҐZHYS&ʺ!]&XxJ&B:Gicd AǢB-Q6(Py&,3nh%+ܘg K+*>v\F2s%>ǿAa.5^/YC_!NL]eÓYq_ͬ*EwSۭ 5F=tW> iL o<[5V`erkny58_h[&  Rԭ)˟Ccۄ @zw8`revϘYeM6+zEBA hm +Acv毪(' @:=ȷP&>`g9هުL3u,j)k:k [#=]N,C? LZ/K% I kג]ddqtԫsVyeDWڽh֡<<jq/&ib ="g#U*Żb-ػXiQ-*5ciiK3 o\󏽞ޟJCpcDWg zy.i eV*FZ$9!Vor/RMнBLM17%%ᐏf&fӊ 6O}p1ސjI=CH(} F?s6Z'Q㱘\8܂(vL.P7ۣw+~g)W})čIC7rB1Drmwsu|{ܼGQlwɋ E<2@ ڌK؁7^H =6rﮎB-lrJV:H>ut 7[guy2T] C@2UNJ%Z I@86rD޻ U|j։/M {|z#0)%h,zYɠֱIz d4>Kkn?qhG y$NiX+}}} V<ֱUR_./뭟2@Cz=Ow TѢثuϝuܬ 8`5+*aWM^?mu/""X{3jͩm*utٌG|<d$wtHnޟtP Rs?@L!XQƘ)iYEqT GnXY0cLl5ev7J5n)u $y"S,hB4O$~X`NDby(x2;q6-O!h7ݮ.eHbK'_bhBqn(V )V:q}w5t qa)k<0dM_3eơ]m 3Qu8X,D%G¢Ǔ?ǂUOXd!HSs_o9~Κ4,%߫-mM2BYifd+l4~rV-l%i~|Ҹ[hs-x87%b%i"*iٿ8~S?-mLq _=j›%o.23/`G@AB3\Csat,`)b#5e"5i|mD;β\31+F$\ݻ+ MH̎gwW]凟$}A=4܃I[zHu"dV7vZپfKi`x `\qLMG!s KZY.3f8D[{$Ƶ&\5 sTDF;bh/MNf ƾ?uXIq { l:>e'0GFf B >p33azۺ5"X6Ä < kEHCG^(%b7RZNk/춲fvjũֈcTp54/)1 x hi &?pGvϤqc7G $)|`cZmV(C>#΀9ȋ%./AbiqhJ&k~_OE!N `9z  t#x yLR+2ķ{;a29Uq3ǥlȮ|ʝ }aM~KqUT)Fbe9Ԧ: [P2Te̸+qPO\p~|ψJEbmr$tLգ^Ө!cr mϾZ$Vx_g|[ ^Q 9vΐPZ=Mt@ \i 1'kz>ccX A9NR7'ˮ*Ww(]sOeTĒR&uXo 3fFH$B%ӡO:M02i:M9Bdo{ji^ <~ņBqik̴ Ad}nSOH:QwSGy+(W.:',x(ΚitPx?{ܰ(A<FG,A$48B#ܯ }YSũh#/"aF-*OzS_ʀI fr-5˲I$-+EG5b$w b ی8,s>I`6fz26U3(` :̀=UEYK)+Rrf$!_KrqSz_റsH!F+EYEs=ð ]VGVl9mpS $:I[^v)4}}@tD+eOSj)x}vQ+cbt09GaҢV䯿6A)DLpALbTj/kTzuQVziꀟE>oHFSI60O@xn'=/#RU @:"nFgh Z}W߃fdꎨñ?_MQm0~U8i^X.T䦍-jUeWNKDkړ9֦좊L@R#S\e*UWU{12gS&*B4B МjZIH!#ӌ@ă:ѹ5[`=K;~,@ã,,,~. 2Nfd!EF#F@f]¢C dR4zCPl>InE϶9f_3k{J@ekw,E^ױI|DứŖo՘IͣoEiyc0?tcx˅}6a{jܼr,O̬]J+V)큋>#ebG1;;P蹙nq1Vj2[yZYx09tnh[֖.ȗԔP*9vsJhOA/W BOP!`eL]bf)-;rnd(M?aҦzeiC0́ζ*ėuJ@Nࢗfs>jĦfl\LjqB;JO-"cÎ>=?mA2C-e,; Ԇ;uѡ`֗X"K<{̿ BF-!'=Lzo2N_:b 헭=W!xֿm^&q>"z }ss Ϩ fQ}}YǼ!+ .bАga~vwU+iGʶ]vFA)*+b9OK~߅{@d►L<|bgn=P[ew՚I#MD. ʜ\_lEPogڜ,X'aL^C/@$qv:T+&uecq-`eCF[5+bǘD;/ DHʒIb.'ź Fyo}K,6~)hpM81`*9L: CYm(ZhVƻz Œ|6:( [{ûtDm!l1aY\.Wǝk)鶝_k5alPKͳ`V8Y<.0iU<9 f?̡lB5S~I~HZmoc\/& j&[R߸tZnsP`Yap">SqCɼ·8ķA aQG: kH]ʬ +;Naf_c.u|&9,UJn`KNK _Пo4B i6FIՇֶ! kv BN?%-#%%5<Ę~O麤&ޥbk_$̣#SQ>!P% JC=ԟoWrZ{ 9@"{1jA̘ф̓`n='yӗkZǚ93N u F$d ;)){;jzMr9m@CCTyE/Aꕤ* M }8-v=L5IzE#`d6 "$<I yBm,TYv]Ÿfɉ, oÊ|áuIѿs!/H$gU,җl!/]C/8>q"O?{]fu3]RKUSW53gEr$WotO=+FFR׵It~6[~L="b쒧Ǟr|6iDdk') u9fdwcltR/"b\_A KR)#|@w9_+A$A-?ʻq2cOY'z "gM5cD=y1u`$/HocjÉt4yZw|[L.tMe0ڗ3ytO\o;ӊwZw,*yR1M*wmfB"0@>yK=J}0 k{,CV$Q;Ėo/H 9,i~/鎦*Bi}ɯ n*uv&ܗoXF7?X龛dcX gS#@d/eQurju VId1@DjQ$ħ_Z F{f9 CaP-pCH7;ȱ fܡ`^7Py *>M]q%h&@K ?S6pU-4,a!)82Y?6xb[)WSՔ% K ͨRsLA8}-C}9Q ձ83Vf0cLٶdBN'͠i-Um ۾Oͬ1MNx+:NY,q|̼( ZKXE4Y'i֢/2ɻZAy_r0}^nubZߌ1 7-OHsڝ7<;__RVGeR{=@טҕ)]sǫ8>maG֢. 9c " PPvVY!9Y_; yD\&R8Qb5U!oe6|)7{?/<7:d0*>ScG`H{i٧cF>ơBOE+8&̫G⯣5ϘåL#kKwz7T; H[_:ꛟZ"&E`}[3+y2Bcyuo' ]CP?mw$9'1UQehmkB3j ҅X[XCF(s(Æ"S##D{_ B I_W 2Mn͘8 irCu"Y /4Es~rMlZW^FE$>BKb"<=Sa 3~ &D}Km1^ZOHI K 2YϏ 8Q=OOS6(IV]>ڡ)=3]޷BVl.ܖ͋;\? Zmz >0{t'~D(gqu~)cM~犒s섣 큽_!̬d̻ICe[@aUWA{7((ʜY 4 mO@8!&Kmh /W ̆Ozq;0)dF `g35HdEL]+Aʒ)~գ]"bf%4@!g HX !#/hUx*Sλ4so 'qi03{U *#%XYlc$q忝o?BU+Wa㍯㇅(b9[ESqlKu#ȉThjqR*b3^\FWc܊H?JfR11m,m$}5*Lx>Л̴uV2X6  ?!Āı/ M'L2_  21,+!Cռ!@zMO{jeCIi"&uNE@E& '&8,Hrrj/z<ǡzԘgŘpD TR][p}I}Ky乃>]JJhc=.&?۸fٱ= o}1/&oZ},$I>{n]\b6mTja_N $݃%PKެ~K6L psYLmeE.N!y xڰ)Uqϧ*vcfB\WsIcmz4DvPL/{Z?"4tM*<)_؛gKY`bηoh*pټ]UvF:'ޔ}7Ev̒wrOȖ=E݈zn ߼7`6aMA(G'U.E#]}DkΟ~XgۼtS\A=mEk|>'^b"Շwwf*[/r^-gf}d# ,@gh)dl)]˨~T^['JV|~;wӱxm rGǢ|C`PJ34zY|Y%cI8(iӫ#{)љ0l-J`M3&i~rlAs bG!P(Lp+aˏ\J{]kk^0y9En3{d^ qp2̹IFV1kƢIߚ G(c$B{aKذ&Ƽ"ErOws5&9"l$7XD-\{H<\  \hτ`>C g1 ^)qǁ$үiո^N4(4GVLb‚yck$J:1 S"3t d{zDr굂It.~ePtnMbSfV9 .4krٽ^txX8ud7h?" 8`8,* 5RN~?X1݌%ì%BN!i)8FuhF p '@܎w*9؜E8N$cJJ擧Zm휻ftBz '9&)aӧ#IUT#S?!t/% EZ[ Zz2ڂzuTgJ^tL+0P\gѤ쥶u>hb{"gЀv]N4q3ӌB5pƋ?EZDjh#zX #tkZ6*f`r~n8v=x2"@ݿGq.ĥ3kZ rIQ|$.aN^6cnoj99eE L\d{TXIX:c .+CC959+1sz1p> MsXڲ7tݠsd(p.g9ǃ6?9+΍]Y7TTW6w~=lumdm}?ak6CXZb.Nz6vn懶kzMdS ]S"S{cͿ;ntp sEho  %heA5?_qyt#1⇹6Z?{{8{ uPb8Q,}/nD;1 &͋Õ5owØ:&kNE9[:oxK}r[$}p@=5Z_p=8`f马;īA2 F%^P([ߘgU7i/,>U8TE0%=!>/0~ EM@9X<*=LV G=|I*Qa@JOL <ԁՑ )"uvW*tqa3t* )C%5" ؊l|K&Q,;?nTV;- Nm'ܾ'57 yxr/2!tGf.wJ~9m/Uޞp!;=P}09[ g zZL,k2qp\(i0T1/ڢ>:XQHmF#Mw#۪?KhuPI9\ Z#e $(- xCw 0H᣾>c_{.'i6֛D>e?Cl:tKz7%iԡo.#-t:}!\-?&!y.;@sU+:ZG蓖5 zA/nr}OPriqAxpydJ[V@[_`SMpq͒k"îH! J3b\#l!0b+f')C1ċ5# *+q:Co8}rSXf<ҘIOjռM2 ˼>`gN,ةe̴8u@DŽ?@\l Zـ;}fgٚ3-UN;#q|C~].fG~$ڲ6eJx9~~}ř.58Ɓҧ xk,Ϭ*!­u^J G܆ƚy$"2򢳹.ڧ%ߡ JI_&BQS&6iY ;pm9X6`DԊ 9"2vkj2aF;UC4zpZɀ4[EBB?Ax^tO#uA,3n2ĉ"߹eQgͳZ4xHGد:;le45YrMȡ:U2ך(O)0)y'Q@07M,C/9k;DbW(vfK#HH QHEԻQxŐ$ίzEq^D3MBtrLН6NQ@ٞg-3;dءHcbՄV[Ju?(>3`e՞Knn^Y?9.8Q t~ֺ dqfG t1\g'1+ M`z&Suء'(y>MseP!esĥE'vd,NPvew>nR>~$ < -P@!fsQx+m)v6: ڹ^GQ*/Pꅁ N3O2!8;יFEW9BL 9;`Wv'&?_J{y3iiF Rv6wS/(L Kp|ɗR\h%P>6V84]+Iz?@h2i*qq?BfiWFwdRa} yeC6?-l ~wВ hJ4-g9XGVIdFξI&A\ \mTaS!O9 ya0xTlhEĖf=AKe xD.@TAp.-*Y8Jm6'Iڽ:ݻ[(uq1;/w zٝ&`g8jp$"Y~-;7QlҪԉR- _1a,*a~у'4il@t\=P"4*<_M[z̅? %MoKv^Vs筒!LrjUғiOS>~k.fHsV Z0kgm#+!ޞ<-m_gO=6lzHdM;vT(LۯUyF/ w Jɓ G;t_TD̴&Ɉ#|JֵF+W2aBAgC ɢkJ:wG?faYNf7_4`if%2 ܥ[J5K 6c0hkQNnez==hptrgtX7.H$@"蹛T6cr) hc݊?d<R:1܋)F8D u9IgRZ\8,#M[Zr`l>#Z(X sN IuB#)5ʴbSNq(_Mf7Bb( `ۯlvRV踳/[ VI MMeؚ *jQ9]ϹRn`1o7790Q( j#Ku02zafύ w9j G ƨ4oX~AmC\!͘{y{^a>/ǫ,EK8Gl,VfQW9GWN.W<0=tvV ^ܠjHC}}5(Y#0=_fR˦ m.k2m{ilIsSJ8Ѹxz? իIM?@,[壠wПWv/ZS̾]PDs6$嗁@fѭ,iߑJâ \G$? |z Գ[5Eڛz * s*XKk%!]ZBtqT:R drcrېѳ{\/ov(V"dy;Z0O5vwdE$a: IsJ+n^MFt;jl jjTYDZ2D{4Ziڦ2F3:3NӣI\{9nLzͅ1h7F1pyG J\ٿ.4ZoKW%j*W*aI`}qǩy)5dۼ^00Ӧj6ܝ:A$!GaD;+ε.f4g cY74I D\䘕ↄIƮU0cjjNl vR*r*_h,!J5[SZwjAoW^KpjUǮ<?W)\v)>>j>UeB"X`Ƭvp;e<<B k:nr>IR}0 m@^MLU8۾BM줡 12zU7FP6 "ǂG"5Mtډ{RN5wcwEuЕ]}dlA_= M8O1n'C=̑gԂm੿Q7pL_`fLSiee#qX ki Y|ٛnidvK^ 6GJICکcʄe]mGh`Dܐz- 3o6d=-L-J)F7ÅLaޜw$t &СF_F&IQ(΍ڹfxl !~/ [ƍKfq9DxĢfr;X^6z`Pt!I>~.<#mVH|ſOqBsZ坉O&rNp}"kvQ!(/z)?CFsȬTX ajI̥ S\tpR|[qOQfZQ|"3SbqeRHw@Bvhno>{+8r0>ő,ȳ&bixODsĉm\ g (Q{̶<r5J`usQ_94| \dErV|iLjY{nkYG`os+VgcEPltf!XLá=[5Ň\ 0Zk4_M 6@4:Rtt0d4׽|6|R.`*%Js(_ ;ujF<_-QbvVHd7!}a\(Poܘn'y4 |WտIuPViYB*̐V1IVwa=9mmHԆ`O(EOGې XP6D!håw$h;WUQxu4r.U:< ˕ MqbIuAc:eOhHpf@[_f 0#<&s5hO,Vth2lkxbT6Y ޣbRBЏ-;53{fUݢ~o?7@p㧼Ikq'LCj$044=d~KCr59n[es^/$!@~\SeA5o|=5 6BWR۷c[lfwZ!ÓFs }n4łS=Ԏ6i"šd(;j? 6j+O0Zq8֮AWl ΘDh@麎@ԣ;; ~)>reN9xo ]̞гi6*"٧aYS[|fS7AMΤ@ 4C{OIi%@ qqdm6%8|"VΓ_c2R1_Rjl=! -HV痘>#QkNo.kϝ"?7_1h klbETWޔk fxSO?=Oci]-Kf 43[ж]_/;3Z&R/WWk˗7NE񬷯2Vw0AB^ߤ~i_|Lvj"دǤqe?~2lY=+oJm[fߦ`@<[W|ؑÃ@As>mHԣo.soߥ^^,ɿM?KӧEkؗ+m}3`jcB= d4tC+<Wt[ʖ1)I+ \;fV i)DZb˝R{hCt]K15mA6젥ޣI>)[Sq`,%|OER3'\5sؘCϖP KRP|J΃lSΡTZzNtGZ5{Z}_yO. N ]}ywxnOs~Î[4 NrCA2x2ޏv̚ᢍ(s㛹8Xi[{׌U٥fc>2Z N> _Rӆ]q j2ebDX}< JaE9 DgpYbgOB[IoK dҋs.Oձʎ=A VVtJ鄣Ri!+ SCeT=0A ACoL/h{'Jos[Q kё''-ABm #G@E$]m9*1Dj7dG}î䎒.B\uJM99 `Qħk, Kö S ;9brp?7b%2}A!`FܽSEmC>> 2'JE`"Ͽ8jd\cX:_*uM50~N/oV<e]Šbx4h{֓N!*3!P}׹SS"etSEnԅWF;"&GkB (=X|f=gV;@Ph[OyA9\kjt6s~Խp=-8A{FO<|]cR* YdXkVa?e]P$ #>|KňSAO+~o-|dr(pSΈQFE.Pg|:߉3 t|QunBc-Jq_ٜ7E;5 ?:bZ.rm-dzb$ 6%NY iw$63.zPhRGk-Buaݎ+j; z}Ah!dl{d2SfuG :2n@;8x %(ylpߠ0,7 Reʞc[!$.#* kBwF'6 # S GA 1o&!.SQ:lyFI,1I((T$qL۵,цdGօ4  #FX&` /Ysc瓝tqy{08o칿UrWILk7\驗o4$ ':#mǤaz+~:Z;cE<5B>co'xȴ1fHAَPHT' 90Nm\2ub#s}oT!ޕ@B'YW*cXͥZ׬u ^Ob3kbKS"lKC{LVSV] P_!]k%i[Cӳ:%9™w +^>r?MC *UA8}!rzxeCY>űDtdwuQ5ǡFA ;ٟ~E[YPU[3I}X[*Cvw/dE}i$'PV:p80a.RRѱLRK'P60R4Gj:I3P`; /(5d6g8Q{@,FdyVUԑMAѥ#Nn 3 VU/ Xn;IWH"k<7hd;P4)&ΫܣL#[˗*1c)o0f));/)ERoe58[|4u0+!;nG5$&~YK& d *N?%aҠ)橢Tˉg(XSz5T:-Q.˛:gEBFVtxBw8,~k9r"39Ul wp'n龜A/OQ[W'r;jd//t3z(E`[~ D c"b$L#au$; XP/<()D>RO9mRk28??GR2+|;|?d8a`()Zq+2$^@ePj.(®!PJ:dD=]"pplChC4@3h&gE8{|='/Z==F)Ҷ|La03zh`Ǎ6ڠgV"Uy [ƕ? 91Daǹ#$`^Mɤe#gt1p޽~MC\J0 zlOm5|$?hsdжE/Wп?cؐ~ͷF"=2(v x`F7P?3 /ٜ,-'}S-O406+`aD:Yojw!ߩ~nq%2ІzLu1#hlp ـtKEx=ߏC}Lpp`>Z{) _|S Of_>O{&:(Pd{16EGL?#ٛoJ[@t -`# =矛"^ ĽX$GHJ^.c\͙vE^a=+z^)s@?ob2B.~F0S[5yW0$"o!v`T5pƉ5pףt[dEP @uq28a2ʏi;Z}auMEd9¹s4"RbKD%BV(N_mOkiRqE`}?fatɥZq;JgTVerL@_XݬiPJ97Xa7pODjvW{^fF.K;rܰRGɚEZmٙ0,, ,?tPd}PV{mI)dp9'Zag0]gKpGZFh~|pti܊D͜;j7}e2@B>o0b/bL}9yT˾ H-!mEq+oWWO>Tny#}iO#=D7@<ùB"dd*yi,|cZ3qy*yRr @@ά^BnaZ_oS_sHU 㖮Ĵ<}װ)>olc5Vs-%EC "}{'WMz3uef|8>^,>LyZ{^ 4※{ HlXq%#{ն\Iw :%o{m_UcۜLY_Tf:{mG/[;>V -jvf 8y$LzA /lNgEkB?PU<aeQA-v[Z9&Yco& Vdtj1&ڡx!ʥܬ14}֖rRn\ʡ;f>.y`x_vQ k^iU;xG1 ?,h1;V4R3}?d]YjWr# C,.J*OeZw$<0\G;B}mΘ";<șKSȺ 3 k-o;x?[5*s(rF69G:Q.R8+0;|'qL]&&hhBlļgP'h/&oƿ>%+;JrB;z`sjYS5֊A4e_`8{W؉?]sv\hd'DMi_.eHڣWQ`O^LـF!m\u@٣B,:DVȼ_'{v-WHg!}k{/{69W'd?S$Kg>M=D1׶$Ef@ ҃3ƂIfݤp ʔ pFWH' ٞ7JoH F*̆+3^coBGRFJ)a)i2"KK:~rj((iAJG؞V{>a@D<W4T'"4qWn25Xj:J?l6m qW%MkZ4/A#vV]rOajQDgv!av+H(ۆd5֞gBd`lsM]Pte1aQh@qaXP"eEuxf6K) Vuudq 4LVh< `؂:T|MAbdX !'1q>,qgB$Lb&'X.̺3﫻\5dц+=Lb7\O"?2H]vJ#Ө5 யb~Ԇg% pdž-IGv,aզH/!Cw":ah ']L[hlLzYMU8t<`~C1; 6$v|ŷiHUEiv;VWN6ESeif*&U: 4Ǻr= Q<ߨdWvnSB2}ݩ)/z\[/Kn\HV-L֜$(+2R.b=+-9m 1o4mX#?)O=|JDXVey!,d2+W y=~f$1f!ڕ9t޿ n f[d4"Ϭli5ݤ<SAʐu-uڵҷ'A" , л Ƙ)BOWjqJԼthK`.7@J"(%d}7p Sz䉳UC#NGڔ\ޣĂקBͤV\F_m4D+/%; X^UrR9ՙK멉v \Őz~x\GW}kN nrkFb_"ݵ*NxGO<@J_[Jf>=s g>XtmTaW } Ÿ PM Z2Q9R/U[K[A\`PR@ etGbqPu^$I8xX6D|/eaGg/Ty%ύwQloܷU}^n ]ZGgq1GTw gd LNdq kgw,X&} p9sC0l_lRH3ÜDgd%1[{jI*TqR(hao|GUv"23z] 8BBa}\w3o3\+0 H_{E^(oɁ٨)rG{堗fzkkDb;jR;zYU8i`O`.(a5E]{Y  \UZ6׀.b~jvLx2~fԅ& 4(i 8UX +4c:Ot"$ٚ[M3UG[O0-p<Rj &h9Re]mn^Q*q̆ULjA2YQ*c*@WhR:`hc"eۢnW$7'\ M!;4TNC 9pUy*QSuK{.?dyfMhPʴڦKML(ݶm4U\y8YDdfiϤ!?(m̂bbo3 XnC=QgO#044lұ|*xr@ q [Pi8EUǥޯQHQކ7qPԟdJc<ޔ>/ȃ6/MEl\u> I $C4h ;$'HCN&TF( j&ECTYY-+_a,PSm =n&/5,[XXc O$,J";Qp?=$#9RKd_]ȻK@N@L:SW *wjQhڦQ ?Okz {*OJA:ȽT9I?SP-f1kpNU+%+3#:͉ZtrBw: gEF:b"ͳxiM$H"Rc0A7Isat:Q[&g#իTSS6n21N\Vr,©Ai7}݊<<x8˸ܞO؏|@^R<4a6AY0=i<;>ǹp$IWYSW%W?\]/ J>gOuu]5J5#Q"pߋLfuo5c\Sb" ?Gtn iLcb p>ZIۓPjڂ9wS$GW ƞuu~luqO ѥcXݮ>ݍBX*mWI쫾 )#K9{eFH[Ģ>ZձS" U\4G-CYK zL.//RΦaEW}-AsGVx{ &$FneJ eqΔ' ?{&6Kq3 ~iqUT8N?eZdr޻Y/M^2Ynn78.| }8ʻ)Tl7*>2Ut͙Xji%,uLaF&g̀cd1F/\ dqe0F> PFYE3uQNkK3N2ߤԕV<3=!gCb]ș1|K-?2Pvd3<ە?-D5QH'ԱV?] 4Ge=RfYntT- 9f N*cQJ591;O:8XN;#FY5tuQl}*4/픯G&p\͆1P7YGQ$.h?Џ'b K˥ކQ?FW5Lv1Ө=ьHpu\u)+򲝟S/]>FmxA㕨ՠ2;ߕV<*/P;k 0]!MΙ5I牏Ot`jNUx&o޶v/>MHbIUu)tNG͚y$7DO>ra-[fD~7զ0$녁 hEQv\ۊy+ɾ)>yӋ%}$(\ƣVC:Y3%ߏ|]aV}Ql/p- TmQ[xV?x`* Y ͮ#=n=j|^N\;5> o)$ p1Qp=C"hƓl2Gw%88a,qluԭ׈|ɓD3\ n}9 ZF 1`;3lXCQTaGm4+r" 3dUֽe-,֘YД#FczSUFR+t䗍S W𖼧H;m0:9>"c8j|ުZ؅Zi~piT㯘I֖=@ - ?7Q +zq~|ϰb=v{ѫ 0(X(T ޱuacPҤѾ 1\h#UM6k@C^Ia@V9}.8xkfRMCZi[y!u81ws[%Rvh#w9&F &P4&s6sy?i2 ?y-Υ&8FnM⩹ ]Nɲt.feԠ_:{2 t*S%JNpSiĸUx24l\L _,u%ލuì?'F $YPt*`ý9k&C$vݛ#g1r}Gt ,?NS[Pr?j< GwUR˩LRAXJZS6Fe=W+ԃ h qZp^ _CEԡ 5UȝB/ )T `Elӥ 3Bݰ.]͛6R6:&dvzI̩hz}pf׶?kPzlB_t^iw דSrb:fsT)4mՔl&8e O|mJ G[{30j$ P{5G&sXԁsWiOyD7c-D0 %STz{0.rCJv|Ƕbxt8;1&q_H '.EuT\Un%y!;>M39Z&0Gd)Ebΰrn+^f1iNLp[m};p]뭽[3SL l EaCݣǤ[ 6|<3%@*DBT&qc@˅8qj7sI"V;sUYNe 3NثR__q`/ڇr.j Z(_;CIo{jhunQYQd5si X}piX.wf|EbdeGO{5Dg['n}Fp$R #wNfUJO޷&@-.+E1Т:.af,zlUj9 2Dj~qvW!%b#ݦS%$; P!/U ="$Ff`哕φA|FSv@a,@O52LF$3z4JFCح#C;r[ָ.]B`qXRHɓJz>iQBܸ @ʁX8TX#X6d,ĆeV[ 6_4E;54pBHD !2h/ ( 5q=W(t&rM/tK ;Blw+ۮm[ ^K~dhKqZL0ͯRs>TS-h9l,A̷.7(L<;]v}%=;{YYIظ0 T*F7*m'b2)xt+nEe-吁 -1`.;#lW�Ґ m&LV x.bNt"m[5&k6ho+5F=AHl _tzLe, d}j< bqD~w+t6aZ5:dO\k%:Dukerm8:ZIϠ~s!5>P"ڬhkcyVD`y.Qi_BT jqr #Lg#pL_Yh 5Z TYSc[O,8IĤ';F a?00ȵ}k %[Vkk9l\bOK)u.l. NLFht66`Wv@(Dr).V8*#x> k_DjE`HKpm+Uofڲ RJpo_ܹN*̢5}X%`KxKVp !vMTҿ3hՕ <ç,w2 gT?(RןHy4t8{i0QZmJ!?LAJɯ4F*,WkBL]wk0d2cNbpIzp;*Z0hr m9|eDcA-9v YZ9g|*uP 0sι z.yBF]o-`?볱+z9;Vp:*r[foPw=zƴE_AH?טag(0tu.^BӔ+FhJ\NX)\c>E7#7j~ĨQ#`*Sg">| ?cZ{0ɱ0Tn9YۏRHҬ.,22H$͊Éo2},8º=]ۆ%+x|8N`M GS-zotGSS(*^^BAj3a:n/P%PzxV z"C`P^y}*®dR'G)<~g_ZF2@|!Bܟ0]%|F0~ vTn?*"sܙ4Ei h*-0 wPqOhY g(KՒ_ʰd%hF/!fv-~6ȁ5')295-l%r{m\ WB|ZoI5:̸2pRC|(Tlc:YeEs1 !{^iwրX(tD)mG<\Э K@(,&eۺ YKN^~ 0 X>E-V8qDGGT} /'&n~tMDX=h$=q.If'sNbg~%sdHM GdѶsxl;01qy8%RH{+V]ܱԷA;}gcVBXɬ$v~O!ܫi`s^_?%= F}$7#kVO-_/]N /2xƎ;`qiPDQvs *%48S|=za`OW>P.5rp8ـ 4 ~~ ۊ Mɔ۩]Trb1%AΓ9L^GU]w!6/c]UeQ(cpM AιoSdSZ q~U[̒j!8#E YhD8>v˙na3+5<ǹ؄>8%Y+ðxO K澬Jc [⃜a8 KػcXJExKME<׻pC% ,#3p*o}P=?<~B1ي*ƴvn+#Io wHe3 "/UKx NZDX7ϼ ˸;rtxH)|C\.m`JE~TOV k}>h9G.'oZd3fy hZh#^פj796p56UA*C$rҵш,gJg\ujCPlGBϔjLå; 7Q/Uh߸>eJ .o-lk֛xDGztW6 yu,S@wzaW_]$64.WipQ Ae8j_wia9$ǟ*F4tdqޮj6z[,:0ۼRS4-.WImx>eͿHI\,]NJlq{% ޿x ڕO 4.H,M5A-Uly \ڿWCs' KT(B(tuA/㙴f-H5oLbV`zW?rd;uⅿ5I1aD`+Ng(46B zdJBth)7cɚ$5G[*`No-2;c~LόgN,yӆ6- lqѢIìMvXKwP6dN(ޭAٲ%XIk0])P tFwRg Ki Tk>sw93T7 1ů>ǟ 6hUk̄J#$}O IO)ecrF56d1xÉ l˼V(_m_8a1༡&-7uyEn$oNdmJU3y"B/wqe"@Rc>1ikpR4ݛ8+A\`y:sJ JY9VҐ3]WP6wvS5)T 'al4o3?w]؋޲)g8P=[H E G pfJ*Ii>U1 BUn":a}O)/>1Yyo\\R2n~2X_]{Q+Os<<`$ΝM0ϾXRJ L.}5rČ"]E7^PK BY|M<Ρk4FH #'1IUN션U?#Qk^5KOAbH8U_Pp4T*&[܅&v;Fg%(Z|`;.4)FTi&v)EXw!!bO$H#rg~/"H0;5 c@j@=ȃW@8x_f%%6E~ha`;ݫW'0WԲz<WFft0sVÆR8a@ctHJkZ{Vb'$K4n-Wl+n}mHT޺<8VXZ+LSh tI};RB2̑FGZ0V,^Cx:@eVq? T,+nHcc?)\`o*DWkԹΝ(Fd8=~ć^J=x9J-8>N>QTrRMvۈ<[ b0z45e :t/dCE_C7`cpƙNN7ٚHmG`v<%vq*l60&&do Z˭&8PMCJuD l+,+H#q>jga&z޸+u~|'r.[ @RlGku "/ 0#.;`SWے!i?kL>0b- ͨiy)͇oݙ>/ۂi{8XANy75 (v?ʹ$]dH0WUkPs3)WЋ=tctsB_*Ly w[;AhUIҷ&9?b*[ç -@ieAUe[JDx|l^mkzћ)j܅ø|E3ئz&)%Kd&d`[Qܮyx(qdV̧e}R*C)TQ?=6˂4rE"i#P82b_,&5D5x̀ѫzkb]ytzC3}}46rʌ :zȴ%4VYSBfL;(? x3Bt+cB6RcIGUNHb7WzdcUZ|tS)" `gwr3`G]i"pGsƗprc{&KUT$J%`P)\" rCg qt1J@uגg ^x =s^iL5\)^|'ƂKJ57֊ҟ$87g0D-< <κDH.=Yx/s)_ {9խR+ɞ`n$x8A7!it kK!$e5OVw I3i hZ dvfZΘAǷqlFF[9h =O;`, |N4;3o&|BL~ц̜44&p|?дw 7Z12w'r ٧RS (~vr5S%d[h [ujD"Թ:uǀ~%H%zߥj*Ͳj %XW]Ob`rl J ~r.Zg njFy0өJƚoVMاj[l1mw6z>بT_h\z' #pZ9]6å/pI&C6ad‡g9|͌Rwj/ HY!f\x;zC3р]5v{mmY=Uj-#oSqS;͊ɝ nF`<׶|.ݭQAQ}9M⤕sΪi= W(p!G=A-8[G}4ot9 k⟚IG5xLWD֢ ő'qM4ګ8buhS)[CٟyB]]E/9 N0R-4¯k\+m6׌A+=Tf̍_}wiB|&tGLȜ@t{Μ.ތm[gi ,y5OdgFmf.'-}E(O0aߥٸ6HYu U8ArKB@X6J/>!V;!B-4SIGڧuFks~ᡝG;֦KP+vi; ݞă4M9~EesI2ɖ)$WK0!#МGQDASÞ|fS:e.mQ0b6O닏[HĿ vn..^ Ţ|_pVD!g$R"RU)ADiv{!-5ML! W&'D}ed8._} yJsHB' Z;bWe1@OP|Ph)8C] &Ac[]%ne%D\^[HNߧRyZ j1#q;`[Tj4c50"P0sUqhU#ֵb뉪OJP?a˴FAg'.7w\/ XjG%hu|>csؗ#^ Qmɘir6) ȴIf%LE3jҙ᯵;)O=w@R˚$A \~sBQA:m܌+2[ E/IYrr MNsSX<+E^."E˗O5~b8rm=e) %iü ,B]{g.TTyhgOY#[ZQBET$.F047J NV~9@IeiNypZ)FA"iw@-tE|i)&7[x) 3oYA@Y{_gIF&z=D{+UJ36}ι"o6}QMe]М+i:)T 7rV(5>)%BediSѽm$p_JbAlYnfjr/A*}/ r_.W$6C$ݜ G,-BDB$VGj,GFWHJ>K^f$:7oZZGJ}48~p|DV!*̙dů{,_1Fϥ5d/crź <_0oUglWk+6b{i8,o6]0ki[u 3e]:7 2L2x&s.d$Z<p9gFֲ`; G Rт< KN֍3Ɇpv|N];{2xKn?"@+B^Ȭ2QԲ^&ރPU38c,bax 9 6Ew!C~с#syzT8<({?P~Z?g<Q6kypx9sX v!zV9ly@QzCP*np(U0H!ɯSҏe]ֽ>Ae4EAL/q0i$\X" @s gjM ( Z#\f"Љ'K1Mތ۶*p?E3 _ME]7Y_mk7ԯ ~92y6zBL9;-h,Nt^{52*ؙrwr3T;EYr2F1Ϟ/r-αPښ:"}OKf+-d0kL{%m.oԶI+խinT$׼Y>HaF(H. V0tv+&%d(XkۆJtNiDb(Z/R'(aV=y@W??E3􍅹6$Ak$G2ƖoE|@v4 02se 5<`?2mePbC _]O t|쁱e7P(9[c⩫NE l~zBWHX\])EFs.#J]5>'cAz//~q<:]iQ+/ PPگM,LҜT35 lVh[ ,JϟγUً6ymծjBxh Ķ%(KyL)ϡˀyUݴ^?u%-a,슊3_ QSKngBV(Nk؛M?O 3j4uDd$]RMS-mWi.kdZd- /CVPE: 'B8ⱡCfDAJcJY} |;gDwtҖ.~aoBƢB).Ã<5EfeHPRj'{#FN*0-V8Y|}Ǻ2o)!!''ݼ_I 䲫&:yDG"=5sT\ ϐᤵ 4\WτRѶtI{caA >u^k2ЪhxPvr69rUᨱēl# +gˑlŏC_9T$:Uoi C,qQ)SMѿJ9t917EeafQWٛ>[l5^؛s$Tm>{3Pdı=&6}%XPWNAZ hQ\J͠E_ 5IkA7nza3Po RWj>J+je VӧZn'fC{,oaBFȖ"9`3\k<|d ]U4QX6 )T{q~B8X3X2Blj,${dΨfNJ.oϞ#$F,P=} mo"^ ];.찆Gd1<>,/FE̔ _1 w5ռ:ԏ+8;7P#vVwpFoe /C{XuXD l<ďRc`=8QBODo(z2k ЈZNUjnrRcP<+olMO= 57ξi5#̀U9ùάLfXkߴ}Ĩ_*Vu.>^D+#]VN5J ZlP6nŰ@v2Ul4pXgDܻ2=_:"Rx@M\5AdQ뫑4$Qe*k"~"/*?$F!:łŞ0ts86GyMJ6ܑ1]P)9TC?Ih;DH YS`2r$$"MZ.\]%mkν5=W6嫔a+9L-ibu*OWsH}a&YMfQo pL2YA#dB_"Rm JY/G&k>`§Q BL57x#YT: l}H"\++>#`;QFVHaK%uPL|E8aJѳ ot2 qf/\~tt?խm+Ī׮\!<0Hd6V(eYJ'@z;z>8&[T#QMF)XJ[_HQ %bg,Oab,"m3AqXBf$sA+ΙRkH[>Zڢ4uLebyVbƁJ BЃ٬[3~ը]qvp?&Tpu?K  Zb}D9k7qwB e]1X2cVu01CϼzGƽ c)݂Z ~;{b"R~ X+1:g*eswI+q^g D(ixgπm!f_Bqn.jsg[( F8n[F>+YZNΞXgB#n1I0"Gc!d#Ku)6@'q9aZg\TyD` OEذGgr[v#xy=8\Pvg`ق MEӊ뼦<|-ٔ\/L-Ұp}O%z2…>KG !|{lڞ; Uxi>_olMpuR2 49:Y/yi!vr|׿]r XsW)%þBy}_Z] UH"{7;,n-[W sSLD$D ۔ϡ(~rk̯7xi׎@w>ʎ}]5оðUm6WfǒvG!MꞳg Wm1V̂e9Z*x=TZ/![Ff&qD[%L_Ota!_ZGs̙pԟ;AbCỦ9xs@Ծ)q |x۷ͭÿ03Y2HKl(F;?q`^=yjvYzXa,ulz, &/e~ 9={a>:QtZA I"G<;.ʏ Uj{ inqR@3k/ 0C}Ey4GtdjU:x^UIВPJ"(!c_t$ߵ8^){K0C g9MO?y˅5'tL?S[=texKl{idBQace0~[ SCf =f6?Co˰>l<P/Ӛ),CzN6Z-WsҘը_ZJtf׷F)r2M_#>>Am j&Pg2n0ѐF\6Y,/B_{_z 4sW®|!COIk_7nUrxxGHej,AeBcPksr"iuUE=Qo~F}=UC9Wv\oTpdC+:ޛba]HR$S9qAlͳ2K$6B>Pƒ*;鶬H\]c aA\;UDX)c$*[sYOʋp58/ s"b``y^* tJQ( B?81ptpGf. Nnm 镮qx hЛs<〈.aYP-S;5˶UТ`bwBpAen"o, a{n?WWu*hԒ  5yxldvEu7#䉣p߁XLJAr;6y3FUJ½lgB, s?u1T(eޚВ .F_Z`hcmYV%›W?|O!; e6xЪ o}Tbw3Tʹ>#X+-m&Atd&̸QT*?`y}ŕ yecL/R0K*HصhYtSsre Z5#BԛlCSɨphFi6rk4[Q58'U[&ΟShs=۷J- ۼ-Lҟ螏#;Si݇ncN77U5\oNNuab0WR۝vω԰0xnԔ-,n K#ixzsfZIoݮ '-?닷}߇r-X}6XK᎛%ܚS˲2lW0[)ry_my5Y5E>ox$>ܪjq{ST#R_8'\|ߧ\%pX=s(lPeX״:uj8C?^7iZg#.{ ZXc5 Ծّ6kij7bj HՏ&D@A !E9W2\|/B !#@}FMbýuܣG![@Lr^, tL D:/tdwKF%cv}8Wͭ6t]nNI+X$8tv8`P5ĊFN(Fz> %o@qƣvWafl[0XuՎ&qިM_e,үdr*Jp.%g믎o~ұJ'!6 $c\Q<% DA_ rQ/?mO7g)%DSxͰJde=HBDajt~n'_2|d\˔9%K?-lǑG29 Ԫy8qfiYܺ;B'qšU{AY^8YSHufmB#wsp3N:AW+_KFMpiwS>0JOa (=6'Ojɼ&fߌP 8`KEᩋU2lcvfZx>!n ZVM61LB;]Y׌L&>>lLMw*X7xdi+'0 ;5报vЛi:oCcAP~;:]Uevah~(8~Ħ*Dxy<.O`n <x@-h\-H 2]\C$Х bܲ5,_q:B<4X$%^iA+4Ni*ǽ_v_{E'W=c5l.H? p\%Ega! }F;B* H㊱!Fowդ7t^͓$7uvm˴g߀];N%F[VY&KVb;ӞfD(q|!~Bg3D}ڦ fhfS[m$3 oc6أi0ꃑЍGY#j}5‘/,cw)DcƒƲэ_SN?OV|s`].@~-.v8\{3i 7g qChB,RqqT ÑUۖym vbʼnnƆ`iH%ohZ  릜uƹ[Vy_}Ι+Gc-dtW,,ɤƒb c[%8TZ% ,"˛ )q~E L܉ P!^q<:6m_rVjˍ:G'(H lX-`ѢBï#YVҎP!{`IE9~/tS/c,6X$ 4E-WIAd  36Ng[tݹk&ߘfEߠ6 ܏N!6x֬Q8&n˥}y{2EGXK,=넧5f3>[ Bn@<â×E:'b(qbӍ` &h#qT#QqON*amSrrB꽴ώc Sz ȹqlH›xtwJ^M[_|,ZZPiޥZ{M[QP"~$UTjQ횉se:pJ\ܟz;:nd00X.TqM0"aHz[.q B?UkR?&wDtާR{J:`~x)je4eD"r9rE,7#s&My}PPm9r  ӳٍq6Uʸ%-E=)T7 )"'@X njBGʲO]$07x%*7P@ôc69a5ʢZ eɑ/1ZaxAwJSy L:m5`D%Ƣ,%UXN$'3-0ͬۛ߄>n2,K9=N 9 ƒ5̳q3i;w3eR)Wi!K3WPyn#G&#5ƣ'g\U+mY ?, AF'*!N^|8}k ݆ :]]|c2tDu.ed(d6!2_w|qLܷel$ԱG?"1Ye4b]3q%Id7Sg# Oܳ?$4m0_9|d3XyM7:֪L޿аHZnL^z卹EWQNWn0^ZD3_D!Ůr'-RgKHE,>*^h]l \q0DX_QNHN*._CW"kK‰|_HA31q㞠hzWz 8wu#xo@ n4goN%6'LɍWp@ɇ],o~4;cY8m\)  K4Y/y6\JQς7S:ժBu.!c3@9`s- CY4N?EHmd0:lxJIhf1{^ͱpky.tֱ8C`TfU`>/ wGDX\>Lw,637a&;S.;,2|$P?HP֮z8%[[09 T.v2^4T!$LL.f&`1N8~0w{ypu ,sߑ{99C}lK+Q3uDg? h<=Vɞo( Lr17pq2OytscC]6܄U:;ΦuHz tY#amnRӪX>ȥ!hb]z'&2v(uڷ(eֈ &XnE2uGS)qb$N=|>jFgn^>˞}_e9;\ 萮2PKL#,ob s CB`ٺz&¹U8/OC4%` U}t8љPkˉ0)YÖp W/G7$;:YaTyWV][EdV6c/Cb(UT' nr-'Q"i\ bOnd{J6M AnԾط]0iŹ.dy:xuJ_[tïGkZ+hF(G:b='N7BmBLkU1o(?_V75iҥIY [jyFP(b ܪC Lr;;s$Цt8vp[!>w`y볺@bI/ 1~j'Nsw:h`V&.NvPyJ#Lw?l:6#j\ة4A""uqk[J!p?{z} 5u1Ȯ)oaXn';J/dri4T$vu$jҠ`iЙ$nDa0Lܝ6;kĸXe~ Ք=/61n& caݪ;[3Bl+X7Ru,1FZؽN*KX2{ƦU- nS/JǝPm,nLnȧAΌ= TxpZDI2Fs_B ER#'q!S4RJ,XiYPT#$;lDᥘнsv-q A?y h/vț3/-B[ryJ-JISA/$JNu;/^]r%gU `A&gHh< RMd×Ѣ;B%uj}TNH`^DM T#ӲDp}`e!e+Z "B*)(]ݥe,3<%H6)IxR[ӂ!.\*8:WF/:{!Mj^+tL}nvԹ:Ҙi}Is!nvW#Б[[,Jd~VkJ\*FTD pt%O_$ɒ+vޭ0Ε0B.uKNV{F3݄nL*Y;T|GƬp;Lxz\a0 46.3\DϚ-#{ \w0N v/3 RqtȻFWJַSM<(w{RHv[?ޕ~([ԙ"UD>d}$p6jNH;Sh]S29N?fHtRTΒRͳp LoKIF D(LJ? 6gj :- eT<\LfpZndT$Aw҇ "j㛅U٠ i-~CŶ?Ǧ~]T^vdtO='ke㖘e9>[3_m89 &!kzGsIn~Y(:nIjBꙐbX*x84CC# :ѳ@@iX@]~|JǴNՃd~0 R 4FՈD3ЃUIh8L0cWT۩_IY34@:+ B-S,Xgύ +4دIl"̲`TTמ`ٌUng O 165Bn?)ڐ<L xu`ؒ:g%\]9AO忇*b!7@Z[XDŽ;-{Kl-ʘ)c78cSt2"Y_ ,C/m]Dqz|wM:a\bO/IIZz#xrTL5*>'܃/nJ,|%UI9r{!K?M?i/Z$T/hgn~Y [  BF b]`ggjهL9:5Q!Sb0#[ŵRZ2)cZNWt^9 V D_Ub3;+ &Pp Z\Qbiq1oԇ~ۗ჋0x~$ sRN4vQ 5h#8ld$o V B-bSXzJ1)gbd s8@&0N {EDݞQ%`Ob~u-T$3XH?pwǽG($Ѽ1|P=)lTwumY81VY{+ፌEQ O_U#R]cv;*a;)@Q5GM SKK5c\&x(ԞqO@{av9i 1FOB$֌=ĩ!-l #iGwHr5VR-'ĸN*^(sKF܇@sٽ--,KX&o0y^n+*oR6` m_7WKkމQ3Uc]7+bd2>FBW /%CsŜ8pAQzC55$~)vo'͖> BoEX&q8zޔ2B hGړ|k/nTT~5arCv}`piRIӿqo8t?#؄;P-햢CQxȻFrb( &WsJL~ /Px^{dh^#kbOLb`axGOg¿19l!_,I,$@̺`ѧ uE2 X.J܀y`Cxh`uC%m?z jѱTk,#tanY)h_e-ITsU? q=Ѐ3#:r^i_r"0Rlw@jL# `DK:7ۼ/E#`A!\'D: ;F#X#1x*sBN%D|J,`YUXb7W99B.`<=>ZY^&n ,ɤl( 5!XU?1 Cj?R1^v~}y4 .dsٜtr~:-gv琬?Ifwı->-dȃWRR&=KuFs!aC_% ]>mLM >O9X*3QY,vCFȃEꨔaQ,B'tُu&M,tto1uVj:L?Z+]9<Fe+$V륟 ŷRxXGHxXrĝ9(AҰr-bsDЅr 2}ioŗp8t|[zG_Q q34UAcPƒh{kl89G(^ LV(LWǼ~q[F([c[Ht?`{f?Q~tɞ27m:m2Ȑ2yh=A(C_ް4 ʄ԰DQJSvxf'RvN'FݙgL412KeiLebh &&Qy{Ih^-,}SM5<}h/ɚ) x퇉߀,*o|^&)EҌXrbc%g|اUs2͑5Ha:~j_^?Ŋ'6Cϝhߛ+ϳ/}M ^wH[TG iUl垖wR}"[}EFcx2z+%ס'Ϭ.c5LQB*& ZX~!qg8E;[XљÜ)-&2ՊWS t+7S/jS_)ў}{5#n#.% sa!_GɬGXu=SBܚ:`̕5J%c`-8N̷5՛T/+ʈx~Rs<(fC`+4 1@]9s⩜| foJ unnm^4S+Ocq49Sʡxr2pIoǂܚ09akG3'Zf\ B t%inquq)$)+.6>F;vX 5#sr*kPѦwK. w1`ЩeəzّOS[RfHq,LY# 8,Uv.۰Z82ו9ٸ6;,%3 A}} "P m M9`*O-S/A7ET^˧pKmr=pʫV5K(UV3E.<{KkW k.&@{ǚCL sםb`Է$:T6W'WE"3Qdީ@|Q!r {ת~x;u,*!h`1{X 0"/.5CV>G$?A~Vw/h.;ڋ\uw 2mأ3HۥE H7L8n9WP9—2-0QJ2L%Qi])|=lpgfU[u& e#g &0EibEմ;bew#=VŽJy)T @Q&3p$M[Ԭr}[ 3A[/r'Vn kc/ȫw{f PdziQ@U.{/ Fh2Y9!3(^9tH_l>MIV } 翗~Y;^_'?;/H=ihorgN`Cެ iä眸-3E ,Qp8, ZûȆ˼*;<Yk$Q,#ʄgnt&C{_Ӑ>@>YڏO/uG*D{r8Eq&P/Ć>Z&ȁE]in nApLro/~{G^"[~`{jqgQRJGsn+Z{^&G| hM՚Bov:<5Ɲ}GX iL@{jmO5'a|C|f0{H@C>sUӹ3NHCCb6i$xhA^9ڙĉr/xa |d/^QecEŤd'R'3Y ^ NhuϨ;FN@ϿX3AmWh/) `;!a fZ5 QҮڠsp |RE_gaXŘˈk^,yOAR]Θ݇α'B)!H0-`-$(G^p$t﬷ 9 |CNED} TZ@}gGyi]^4DFv& {V!NMmC58k7[}r7$^{{X^v8R3$߁K0&nM9[S.|HnO7 [ٕW0h_TN.  GP=DZ^S ں`s(_* o,zDHnkq涰nF^8H@\V=";r(1Kum!e?,K8 `7}3_~ T-`e+DFb d=Y[`=WQ=4O#v`щAG%]\}-SX$ WfNvـkm(=o4LV{P7da<>d .E8 H/w>y/ٌn qm=@XRAE`Ә<0;Q@~.a3Dәjr tzP#ƭ5DYhN"`IV qvgl0i]^P'[_Z9<%)m;^DME:r0X~@GRu^9l]A@:třP=HԻ z8u K c"ګM B&AUB$‚<҅ cqS2|UMv*+3b{ #{Zk􎑭9Br;>D׽^+-p0x3z4Zk5cS K@B{cȵU ^C([ԯ戹[IZ 2%m쾁_:q`z LTPX=86D]ߩM2HI.re$i(dy-㗠o @I]MV=0M6U]> }y{БCa'Y'}|FZإ*ԙvAŘ^a?d& Gb^/ iBd{f:VzOǯR^5V0E$PYѶZ;Ձc(o 2Q.},zɰnHOa0Q<%|<ؼ0uK:yi?H+m²rp[hS2/RhmҒ6\%˩7@D3 yEv]ܣrر!(YHI?%@}~g ~_͝4, ,޼>K^U."&a{n.j=K/L |@x^.d;s 6X&R) rJJ- `@7Q㮊]E~+@;:;A~DY:(g([ve"q"E~TjB H>BOjue r$\ Aj] Hէgy|d.RQ"|lfSmlU] \M jZ&)""szӔpP71 &ozHfi@ewi^jc]L]ώP֎BDx9)0q2J8b D& +GEG㾢*W\#6F֛1NA0k+|2?ԂcMR#ώc %i_)v}`S̘*5Q<< æZʕ_9IG# +v\8iȒ"Q x.!oʃ`Rtc˛^`E}?:}EIk\X jdjv((2.ZS+TrfἦBjPfN''L̘7%己]dDcԙ͙QE:Ə]psڂA XM=d۔W\Y];ցu~lQ&ܶ#:v`~rd V4volcߗQw%7Lm:*-0R+UrlhMB_g9xgap̙j'ZS{F4۪k2Mg})t(=g^blc,řpa%sAa`&Y=ZW?传>r[^K]W9:yd)a*Ф_7EKj;YIfL*QBlwPU"ͨu<)$Z&|Xg@ !Hl&j?UbSUCz"_Zk.E(_;Gc+ux|J0^9nmŽEW:$* &;Ӱ"eWum刉Ph>R#YVG?2؄ҟqjE2a"3ږToDEhAzG:VV  lgڳjn8Z6P$N0=r)vFp$.oP+M?Jq$_4?<Q8-LWgFj._P x &}L#L²ib⭊?hAՐvB J .#v t5bUPEQIBn?sB˾f7< EzTK={W!Y-ތ-~srjףX6H"/yթohr%Zy|'q"ɗU~^9Z:䓦ˈ`=s=t8!<=h/ ʀN@ \/2R< ,T0f ސɴ!)/Ǟ U6+;͇Kuzi'tE$xRŋREܨ<Ϣ"!3'.^Dg 7K nIZ^壷lF7/fr2 I= `TȽ>Fr`*1 ccua"+%Q_8XQ6cyu'RΟwX{/䔹_>$PO$@Bx(߬s q~ħbrj5D]v-1$;ɷFcskPM'`Crr)`Czܳc~Kyj1A1/{-؈K4N>Ma\إ|GwU8m2mh!TM\ |R_u'rx`M4ܘg J*B&(NE|ڌ^\sXk.sP=SP=5F; 7 >pޮuz;}y`!ȇJ+B),JP䉇?.U$0"O NI@Cs&Y/\n0< 17?۶ĵy+BƹfE=͸`֪ˊD=UURZm[ HjE`%D]BXDGyճ䠎T+w$n?>!(D]#FS2G-s F]Sk=~zBwfW9xw_r%lɴz+k1FMMa*| {b+lzo,̩ƞ(2GY ]vIhg8KqPK`tp-DXu#u`2[C^Fpi̿n b= f"3AcӤ)`1vcw&cKH0o`ZD!W>&$?{7s:c١O{EП] zBHDR:}+ͻyj7~)[T^FYJz#"%vw3%9qs rDVnbuӕ!x˧)#y4.%70˜mp`k|o clgm|A()/=]EGpgzgv&*DF;80yl.yj36 0~1a[-w{^-Dm`p5n_;Vʶ[GgMpທ9jݕu 8kD?u8@鎷fE1)r(Rh~S# 1_Q 4M;77M{/xV& $\dnYAUPO I6- Zxɤ!~ڭ^桱/:/t y~E,k)\usIۅ8oTSS'r;lFsYJFD6b0hHպiL =7J]S*_ ˖KYx(xx   K(K^^<-:fqv(`_.>RDbs8\u"wuV~RB)b#`B!YCM&VQA:Z$-E2ޞ)УGoZ>dh]H/a"_+G-?)16+yw_!SRK?y,1nR~[=o Ovdb(+{KR;KMr:KksDbrgzEQ;q-v)h#c }]iT% չ{- g-^ɹWl *Զ"@)sQ?_tSj3lsJ;/dt3'uɺϓFЋ܋NH!N eԇTnv-R1elN?y5+7_keL[1Tupkfo[piu|ϓW}A8]goNd7>lrav[Vb+pVzWCgtf<:)w@LG61-sGb_.{L7Hթ'\Me r0oN.A14D'78ҖS_W#'6R8 񷪃ڨ^\ HPiGokJIFA.Ĵ47aO?y%湥lQ3L9W2:q®+Gmi'k7d@A¸`^΍h\`h=%1C.veRYdlmS^{* p#sS"&kr,j-W~ha[ -S q\}oݤS0gtG4\T6K3de9#Cdӎ_"u8>i!/:jɥ~*aa@eM@xuYEWQNl86HokA쎿4VF&?ЇqxP;gDrk*\ łmI"@4m+32'.w@(Pglvl4bʄH Y t,k1߰@#+JA.}('(1g%-V$~/Jvc?0E+=|U2/fZԮ)̏1jUgVw/-ۇ/ƾ(i@ivQX8=Yr/(_+tdp&oAv =[[7P"]<^H)1X]Bg;<)Sp>[M/+:P ,Xsۀooğ7 +?JLq,/ˆjFo^ZT}a`fR:8v6-z7{{O.o\r\>Bccrϕod4Ho/⎑B.؝S'DB!w4ȵLp^0q+ME%_RfکM{rE!bmvn^CPpvp6T.gp3bPކ6dD^nҕ}`]T53¿I @wwSRÛQEemBռ8BgCdhBA/69$ԅu|>L&Ў[t+jamgϥP,.]=s-#qn ]l_]U.Nzvs .Ѹ8'%}kaڿCK73$\H}vʍ1i}M.d `]9~JFOkG 6*8c̕xԌXg6Gv)2rkǩŝ!/-l~&x -Z#L5 GOv ]~YrAe')]x/%5n.;̦^D_&4ŏŞ#iI⻓+V.-RHU3]Ҳ)msi*e^,sz?L6Hy[AX!Fuq w4]`湬q.o\w*[ Ns6ƳBņ6hJҙ'Je~pJyc4$ՏU5 E}lC,?ꎎs} Qv@Jz#f)na{01%7þnT]l1QDu~;c5+|48d#J!%Z=Հ lp뮄G҈32RP3@mrg%FaIN-HyC],JjgxG 7P`*h `Z\~dY'?h60yHVw.(I?_|U\CFg%-GTr{3kJ^ǓuHqrvzeNOvu[\-MR:X8-@gAj!*7^lW* (%NLLBi!CH*kiLx!Z5zy$+B5i<%VJ qae9C{]L!r]@3Q[j+2k5Èdiq4YWƜ*Fy;ؼQ{Cʼ<ص.X ,hzӒ~̭6T'Iz>ffKQ<ݵ#4S`( (ܤe3?n4_ \i9, 212X^|Yj$YVu/yAE"wEؼm_uR~(€*Ihw9vi]có<˱hјN'*|3`鸤m m~%^Ʒᴚlt3(z-w]BС"*ʠ1E<ݮU]1i>Gx9tx Ȳby. 0&flX+ ;~GrDK)pǣS03g㢺όxn!l]@tA8'fBaXR:·Őa_91>}^>\n Y>˧ p ۠Y.iX% j> "?b- N21TZ'ЂEsK+XV{aJvC"wZ51`0"]R llf^RZU$U*e24(dεTPȵNШѲ 2lĠ-ćJ}_O8_1n9)zԥ6h i>u\3ʢĢWdk-Pi"to0SY( ;bM0U2 8=YEEavl2+A;e|:vwD|D[{rKccœBɶHZA[Xq-D7iŀ*̍ EK':w\:9N)~⣪ށnvc#4qPN-_u1"hvw2`0,bCE=:Gc[ܩ9NHK? q$P s+x8ӶqnIFA}`IBYHR?/ D{EmRped#ւH}x(g3$h@+`DkC6HbuCnʎhn0pi:&A ZI&(\u&?(CۢJ(6 gS9"v÷SPԿ\ϯ zTP26%M/|ȠY\8V8~Q/Zk1 A3S85Epb d"t-~~BN >9ڛ78Wɔ&1@=hIf7UM<<)b`Pi%Zdi>ucRuڛ7#mt>66!Tsڗtg A>WT|.VdNYGџk9 tzsBY۩r^"X7Kgp3+BCޯ8 `@{qeN*F6(X{.keNC\hV AV,^H(04XKF|1Rʖ+cyce:(Zؙ+.s(yj,"Mqzrb !saˌEK[w= @< nŚxJgrqgjXS1GQ6I@&CXw"1*Lh-fDJ@LShG;c},D,-=e-[WoRcaJZA'R I>cIɬc ]L0v ; Za:R}< (j ESfgMveOfG=Q[87xj@:[AnV9TƇe0S n%e'tm w &]Ό(E)%tj܇Ӡݭ$p;_@%30&O= =k}O3 L}h)КȏGM$6Ͱ"ނviǣnC1&#cw.Y:W͝#',o ӳ9wEǞ5|Q 5PŦ 9Mz%vgϨPPÌ&=NyL210.МaV<5 X#U ig0e~7*G"T\[I"Y>ԍ v:ރMaW"<<~V5nUTlb CViYPgm)v-הPK Q+<'^AFIzI 8X5Ң^dxNiݼ@cF_C̐|Ut*n7+>M`Q2~WI^ŲJx4MsbR-dwgHahm %cـ6 !;-^a}Wa2TVP^xBrq E T ^L@*sMȇo+Xfhf1WN0[ h͉!g}OͽI=~&'WF;0+Yk{uӋfbLo~N'z֦= v&Iᢹ3,v8ܛa:K5M\ԾPp$؜)VsiԩbH{BehbQ9Ujr[JTQ( Qb4ɦڕ)(gef>8II|YH۞DQI%$/7|KL?cS6%޹%wn"*8Rs5^FkCA5{@nU0-3G1lۤs//J!,?Fa<0%/WU8) YJN;JtkkQm;L4|V'SH,ȞVEv+ ʖ^"N,|i7/J )o\C ȒkA~WE6pB]Uo.,%0֗8(xdόpd ;1g>7dz+ո|^y^d>ƛ}% :h!KVh`9El$ EK0 8ELWdpBO>H1̚i%$ k~ SJG?~ h(ڹ/0杚qV&0abOA֫K0MŤ ڨdzH#BA&vS2ˢg=a랴\MKKX` 7\)o :pǀN<92XH&(+h q ΀q 119mT-WwS=6g8痍;3H/e4 ҚlK ޝb;KvK+@ P%+#B0in N.G)4wXQ%Tq{4?2 +SoüP(c*~+bF Z"'~b|G:G':$"""EBgw Ё̀ZskR|aD VQ%=JS$# 'Y֖ݟKςݥ `|ܳMr.jA exJ}taЉ}XC'r./BAlDD \f[‰ˇQyc6l'p EC4r;y5p9!Qw[yޚpق|D$ʑK#_Dߕ[XIm8ʽHet#Zj>i0Q(#i;J6Pugp #HAћ˙hmh ]mh*Q2ò#{ybHSx1"1lcAaQt1/Я$j-r(kJuiB; [M,tͻ_҂d/4 oX_9y'6H2̝٥' 0LJ99H.k1x`>| Cq7c:y/6AHy}x1%=Հ-ΓbvEz$OWW?Y/I+HE{A#M&)Q-ⵧ !w2x逗1;f$񵛶 8 {5EL5+s0a=&?zSKrVvW<*;p7wIʽAɟ2]mU~G|OqNENa|#/ei͜hXH:^Pj8Qr<'1뉏xg) ӣ90!Os5x9Akjuڒ@U7#[QS2k8>( M,k"KnEc7}7_^'ixj ,݊“~W?ӿFW ;!jQ,/!ر f1S ;И2&_{vj\7>^)?j s\_E<]7vH QhE ګvxR *һ`Iހ p=A6C(^p02 B] qI!"_*^6~(K8&H"$L> za.f0$N^--ftU1dn&zs`Ŏd|t<[] k0T>\5Hl_^m BC1[Pe7? C݌v>ׇ qūj98*hc}מ d60bИ:۠cm}lO<'&DT(oaL/~|攕ʇa3$y3(uցYMW~w  =HǞLitIVisnqӯp)GiZ&[+~ Fkzv#t\;P15)$N d9dqjvaE'֎/2 Lqdt 69}_Q"S-_EtleHYurL6 ZП=e?L~ٚL xxa~rLX.rySurFDFoIM(˴HoؼC_ 2FwI 4HYQ%ftCs;m!ACBa=$ -fb%1q^S!74Mpʕ bd/[Eݖ=>|;sE,V$!7 *dϢ=At*ڽ\&#{ swQ]U6@- T(z?cuvgKxf;ZW8M>j)ԉ6䟚v1wU8>N{ unYtiFY.e쮎 TԎyVL,m]j~6#H6rxSҌlAg3rv˿W 3A0+;pSl7yضKQAmkإXY*X 'z*F"It[ ](JROrgVrYVxUdž|pw<[RtnjLӶU=v{GH}0jX'[\X{b;77IK6mmܶ)JfJ`aN z*@ZG݈\;B`4@1] h+1gn3IzG6*(&'o>̈]lC6/<k63.K#T|O&緐fѕƏecy>'WhWHiv43#dVrʼngVBo[9t84ަ얦:Fx}2`2'wcJJ[ -^ڶWC6启L{꛶8n]mFwtG?۔+t5r5^Z!Dadq b9D$~ k]n <4"9t`,wd@F҇a*8PW-.㓝'psP_Y `V~q0dd{VqS=iI\2 ]~߰Sf^oEqHx aʲ +-F>וvkد| gL )C~Yd&~*r2{< MBLdU<"&QG4g5VFlZ9az}]\ #N„: Dwc%FfŃ1!H5%ӃU ,bm+T {,;|QDW{PmBTX>3^{:8i4޳+URʺpn#Kr" %7̐t$ij(=\M|3ek"gHݑ!S~h4\s뜗9Oľ_sߦ9jGAK-ܜ3 W= 7{C0'P\%^xS/*=uoegx&f2a%?Άq(b qs&]RF,u[_a}~Qt,P1SptO+8 P`Kn}@tO!d *LGz@z5SJQD Gh߀Nh9jŏމ]Ui5Z}W@OjgA 5DJ _@O_j4ϢIŽd@.z=ƚSv4v9lY ś Oc0TLZݔ:[ųxG~ YEB N‹0j?f,b𥏧c.'&(tA3`׾&ˌo}Ƃ2ŵ'=N`Y>;cCQ@0B f%m2O7E㏜Yώ =m@TGoh%TT:mץD4li]QƻK䇎{^ N;pv^Qns1[Z?,ξo8 "_ZPUd#$B> iA nlFLs'Đ<䰇ӽz7#}|g""HOjm4ٓqa8 ށm;WmS94ހh=/D&OvŸKFMV9ZQ`Qla;@A#QYa meǾC #h}lu-]m}O1aꐰ72r.78 M&`.DVK/N[J$bs[Ja+1knxxxɸCuxU/>+LyL&(\F#)n"\p7CY"׿[)8 4a8AY0 $V~XĿ.~05nnhgсM r˵LEQNpX|'`@n^O,cK "[&YGSl&k(#⭚-*{kH6|5xO[{'zquiXm턩|vKGYƋ{w\ƐA68M\&38v29~PUgx Elsdb(U(u8۵!rFm @u #5#Œ; 8VkFS:N7Gp)1  'D^c}7 %\~e[Ţe"9ޔ˔r`mSxvD)Tӂ'uDYG|M o%/U[uA&9B{)iz(ψcOA;JHd24K g8ENح^^n$7MQj!b>ASr}gTbBji"I|-T Ψv *<津 t8+ 8#,qY's1ykH%c/,q7p/ Rjn1n^f[.F[:YԄǶxyATQBọjX P;T<&?F+Dj_r9X8[!ɀG 蚩uz*a*V#ϲ*)kPS@}X-D٬C3^Ӫv)RBir;ǁbݽ(rM1 |'5 U\6:#uƥ>ie5\ЩNN_!*4qi} cJAy@ˉnUV$ӹUҮ7} G' 5LפBkx/=_7 Cْ-mf EYNw_&4ػA27C/GLev)keɬ4}OZ7g~ڈEXv=`/+IU IcLԟs8i) O]6mv b(&QYܼ9NȆ:=EH6>VW$/fG&mVS^jLo2rZQ+n%da Clw&" $|uE#k9LT\}{Ii6 q]zӥQ?Fkgw0xoF:@ @?ؘNzU da>!l<HKC $R9p>>ֻH}lں˙d.ܣhOfd4Vh"bϬaţu O˾πʐFJh(j>KJgWm0 T 7( ;5V)%?T_setEu~-a-b h1%9}.g*X,ҩ#(P>R516(b݊*)#s }EG7[ ,bt]za([ܫ񫻆4.M@:rTMM [|p vf!L[*/=}`.FMлҔ._tQ="N+tn~KM|MO 󝢼YBzu^H]??'Dz6*bwlpHԉ k:aToZ1 jP=b'|ٟ`C+u 9ս:-Ϧ[j[圹b c}J&iyՀ6DZf=yu,]9!hffh ځ̤Pb:"Pמ:6FOY57dZTxΆ7*n%6>gI`慎EQmsĎVTKH3lT}J[#1k@gR Ef~dUuT挊eXN uiy Ťl ۝vlY(\7&X;k mkjayrL{UdG (oQzi(s$s2߫ ;2 (Ƥ:R&d`c|s>SlĞ ut1e% ~&TA#vBQu-Tg4h5ْ2KB6|䝤#gi # o$Uٜ)K{I8|TC0LY3^K,FX&F) 4\.o]PHŜ7B2]}.CּX(L;ʗ19Z`gp7칏>$Gزjv$ly,s"c: .%ܨ)H{  ?`YЙ"~N,/yųbxgJWS+=ۓҞx6_ܒsjS[O fxߩV\TKo$6wR}wؼ _\{ȍKlM,蟠,h^X?~"0n@>(z^~}4@u #,>u4:ƺvc3vU-k [A!0$%LAvra)X7SqG_RˬeZ'X[(HVH#4h HԈ⅀ 3%ZtUަU>{H~pa2a)@-Г>ͩH9;ZsSJRE3Z&pt ߅d}ect2yy?+ApcTM ҔGR.^UM 5dTkIU=HZR z.w/ On˜]=gV:{Byď eN>^t㌝}pogRq;038}pN'TXڽq0Y/AC_| fI2H8V5IsY%u;k !YʏVX`Y=}=.Ͻ.J#MsU-3'>.J1ڍN˩ĸKTC7^!Mt,' T6/T%Ęv1zX-[\˒Sɇv_@ QǷu@ǟ@ʢύexA1(AʱȚLXo"\$9o]gwӀ9p`?.0 GJk7 O{٫1Yp20#zc h*ͮ;¹  ૉ_Kk8"3&ő7Ƅ kRccB *5.&3N0Zs91+#s)4͌Xq6EH>(*èSAyxV ՗yB^ֺv`hGQٺ#R |F)tLW~Q_Yz }ƅK*z^v„vYL̥S_Z@Hd~bQ:[`ZK!㍀ fܖqqHOQDOݿї?6'beAH"B)|KST񼋾b2Deeݒ|#}іW:-Ė-vD078GNNPpa+`#b8.=U4B?Yr'›ԷKm2Psߊ# ׸'lk0'p6y RR3j6 W`$C-~ޝz~ L4ÿ_@y}#Kh(,˫,p~)_$yM t-$ Ő|Y%s H@PNX,/T'$JKKV70sR?Ob'rE*i#,YmKOD*Vpx3!(YyH ~걇G qe-!cr"CKBE\1;]R?& qywƔDcZVE"ʪD&EVr]vfVR>E|$)A+϶nQ(|rOx0TB&ք-'<܉Rē=ZBi!!mU"}./*0^x;)>BW᫶c-| jGA)rcR ?nD팬}ԓ ?&[aºx[vg.F:;A{Vۣ,)Yu$6t.T(6ghV3uy,cͭg̤GK ScJV҆ghX"M(X#o0`JaIcK($g&O={_?5(MGoNj|BZсHLU  ?f3w0GϰΈ}cQQ]SQm.@ +, rtey<@qu6Q/{*6#aZY$۞& (k1 +Z TG:ܧ% V6RB+9R!غ.ts80=gɭ06Ex! ',@719jY3=l9ZS=M0~s.)UVi^⹣?YE-!Q[(JzpR!{x ?\.}w}ZpsO!jr^^Ƭm.+h^9:#Q{] t1X>B?PaDImXzH+XE a3eHFO;D_+\T˴ .һN&JSAkh v9{^1]Lg&sQ|mnu ŖL:el2wkTnQ/W(HӢC1n!ީ[IY51 ֓&Ij%Q & Yjc3`]\s_C{'Pb+܂@9ǜI }tVj]si %s Ožja;C%S텖O:-~W 'ktokq'8NU0 eujwmc& f#ur_@תgɽ;ˣV8:Ō^^)!Ie**I$߶kk*'Z?i 0#^;nT׹Ӝ JH0GMwfOu=&KU(p~qs$d'lʣ4 fX>AALI⽙9+C]ŘFn-=99/2C NNG ^O ]pLRfԞNcypB aip[^njf Mmľy6<d ]ZO{(ChA$&5hVzN`TrY)v[GeΒI1>߾UVФԊd"@/e|Bar/-#wK鸨6{xK{R15x BlG(f.adrZQ$0!zT~MU.TQ.,@R]ŪUòH!2lɬR[ w +<>%L[(I҆uQڠZEMwHBKQ@a7?R#zF xT;뤯9dJZGa-yY;7Sv&/ ]P/+ஙDcA^i= G?}/a O흫ȅU-Un"-ފ]U.nX9EIy6I$b: Z3yJ5ZžVj`:4Kċ~YVʊęMP"dhi]zg u0cCSb}E,uq֒R|7$gƇ vքJ)#%xG 6}_JR5#9 mpy>vFjQ$NYDh(۽ S/chUb 2> }j]܃SAʻ=FKS'в29=2p 钡[/mNaΐm񲖁2n m-_H0+lh Eʼi9Ap]GŀD+MXJ&Xgjb_6!N%xڿX [laε(. HŌjWfH/<ܗfY +(HB 3nڝOLJYxz~MB^ X xs}:bAK>޵f6Jɾ7Ӛ?6~X;[mwLkv#0;Si!GsSYw}`+L3WeT 4KOnşm,/ra+6zŽj8&|Um:Z.YGv\fa0\`'gH" h< H>N&j$V]T.lFP)ŜOQŶipQЫM oH |CIˎh"f֖xZ#:m H'8P?jN.vUJ ,gn..v=To r~"Yލcy2&)rA\+'׷QBEO85@-f@d,%G}ȾR4ޗlh'uE@z ig 葠Wa T5N̉$]9!'6'ԃ$riq bR[y=E&Mÿ\Z1~&buU7OP+)MFQwbOy{Ϫ *soSi(MJ)v?c/2P$giWa :0v6_Jx8ҌKgcƾL+^qi±̛Ǧo Nܙ YG`hsmYU(u߸LTO%41`Y]#*چ[N-.:1{dݾ(/rht^FX-*vpX[%L̛3`tCyE~ С3B&oFc,XѓEKn jMCɗWN0gm')m!@hY8#$^hcwCyV> ^'$_֤wTn!^FlpCr}u!v'ѱi.:@DK(eASƈoB0E.ywMx8KjV聠7^*<qkx-8,jdWք޾" 儸|aD8d2kX}J?:.ajr94x K~^DzƐ61M kf2wOn)Ih-:ܥP;rC_щ04JߧO0Xf~U|2~ yzEM\ix ȼVTKzͿ-A5La/4&ؐ$AH\!ToMϓ7*!ձ>(v@x}]zmxĉ2 +KQD!DA` âGML#-PZ#>ÑvB0dkD|AH2xf/Ʊȡ7cmC^9 )f?h%%몫ʪ_ dvgwO/2AI>\8ޓXWj ɑ`=-n " 'ּEU?̼D w"1BpeŧQ'+hUWo#I)x! hNQs|@v7"S8 QENBDWλr t j08u8hNrVUݱf;7]izG2qe.`3;qZ½RUhY`o턯&%!GW5  Vhsh:E%k{h@3Dǒf'MF_7t7kS=֮E1ˍoҨ8e.lNU[+?\ac<IZ0/5~#<ΌG<_6qg):B ji@QIT"S˯f[Wy@{Yq"0eM. DVn7QU؉#Ablhb*'3ꐁtt܇}ې-V?z̨unW/"H3:N> Xq炱yV&|V(0*ï ,!XߘQVJ y`Nva [jH\|Gb-CHr|9TMPp~_P)巔0[d:oixj3±V |#H.-KK֧p`7XU6l1RX#-8c>6rx[7ۧ6H"RN#8pd5rC*voxc#w ڋ@˚s ?b?zkRJb,BU"[2xMXP| N 9OIUtl@L@<yix栚!ͼ:'BBW/ީ?F(23)(y$eDz,ht,$FP3ԦLH 6=VGZ҃crP} ;eM)FV#Џ):Ytk፟$ZHSnUYN % *邌7Bb׷MzKp#'X&͡^FMo]%]`,cW @l亅*b Tv>U,P|u=ZFaI$0F`<7Cni͢ܖ)JSOq2L'VqM :bM0&.bq./)h +QSf'ݶ=xMcopob0(ncIñ~\But-B݂ *g{F`9nEq{a6,8 koIa0Y? 9?[>/|'N6dDx2y-{-Ҥxt]:VL`72"a!?Ls9p/)kb65u:}pGF+A]Z oJ(h)eLW3q m҆Ń>wjƉv#hOͶ/  oi.j$Z=&K^tLLqgb1ܩs,,3FY H( <֩/'Z4BLBT. L⌵Ϥ..i+{3Uu;Nz( [M.II ;_eomJVWI^v;XO 8$=^Q-wَ( 0eeG*&>Y*NóOh>ꈫ />#8˘f' [ X&o Y( H%ZnWBC˨cxj _uUD/Y1WJdˑΆC#ƌ~U=TӦ$^K> Y`|߲j7Y@g35b)w-ZZJS #x|/3i)(V8v,l8MtP.Ct[Z 4UUZPBp%y7nFۂbx)mCql$˞{zpgPl,PfQ 6?:Au i~ZV4XztݿruLfeYk_4V~͔"*e*l,*A{gv 9 YX,ss98Đ,ULIJ},?ǶRɆ#cTHI[+^9ps%:c|,9$qe~Z#fy$Dk#&qp7e9#ndMNma` Rj1hj5Y!L ),5H1v/$g7zXA۟>;-R~}o얁l]S` dRӠ?h"5}DTWŤ0vDIƨG:hk2"c68J-fN!ZBx߄իxł #zg8Ƣ`l71P-țEC읎 hHZpm FQL pm#-)0wI~ ZzqˁZ/)2=NuByDz4xA{G=cr~cbNTv< vZŜ4]p aԆ1*^ڨV!T?H $.z2nqvt !_@?'I2zJyEN$)Z} a~ngZvRݷ3G"{&G/, )g) J MNt$.j\:# @Na5vkcԒ.テ&!-07W!? +9Kt˺?0hմ)³&}E˰?ۺ۸E /1fDI^-̭i^.WOg 5EH &ۛbXH;>?89oWhdu'䧦]@R&Xem\R,z)&r`V =UE&=G;MF?EJs`&a?]\Y4*>#'\UޝM*La>LJ%4EfD~Of$Fyy%d:s=)m˩Ekuv H hV9QQPRT^vstP/KƇ2Az׬QjOIP` >Ì{oM_TBYDxcw\X3z,gԃRi{w v-mVӨRYd*̧L`q̮euTQv> =" 7TOJ\WW|W bW|éV;w]t o;e'(oZQP15z:b!]=  R a;;BIey;)(ބ2l.4/\x-Oy&k.;jyT J5V`Mwu1Em;xz KpV_12$PSΐ@ym3U;xuZqe6pԕo0ʄ%x_Еd,6N䙒xzrEڢsg~+GX5*, 8G@vQl^LY(c'CYu wI:R$V3m(+O"`:-;Q%Ms*>vj~[Uqvz542*eT@E,]xJZl ϲ6BNmpXc:A$ȋ 1,e7,H<K56qjCE4DnaݯryɊ?ڝ)54lyS`wh{t%=R>mJTw(1j*J^ hxW;*J5&:f B L?E^@ 4fyNHxSDXy0[)کF"&A/ͱ%2qX,$M!J;.O]]ڪ}Mi%ѻh8r::FE@{_Rg+w^0b̡>h1%g4͎kWgp=ݿ*HBqb /Nvi %րaMRHqzaĔmeG- 1 P&_ܕ0 Jm5U 9Y}ۥ ٴI_&4`3Z $Aa22zϣN!TF+VtAZ\0Gp9k 3#yZ_ +Yr|=yh܀j0w|N .,NENHޏOJӃOyCE2j$ܥ4yfc~Wv\J FS+˝g+)3x1|A?<2Wbآҳm8]q/) ȕcUt/ (g:1i]51) Xt쟈;O>~]1^& _e%SZ mq\&$֍.9TP1̨CoCq40C므(˜eTg*I6Ƙɱ˪HG rUVqMNH5%k_/H6LtYs%< {fPB:}Q=x&i~hW.1 d=4z(_uk/ju99Y~v&Is5U8lo7`6!P-sERt=(賢U6WqJp nY8r:Sզ,nJwNEal`ݘQl<,zA3>N&^d 4L[j Qm?xwݚǟQu?E)b|)x p{֙#4TK_4z+-EA]e!hXNWh(vYtQɷq=%9i޹q1aFILk^m%Ɠ k8ӰmfJ|L)Q,"\ĜWv,A&o?u1*&̊d)^2r H\ E5^7l1IOz:>2gNAwEG9$Φ+GWSJ`|;(J"x4ΰ>9$x~Ml5z3F^~ K%H1$#~?UC;:|z.̦]-~-]2NHKw:ՖrRCUuegT1) 4egB%eq?ӎ)""=݆(F'YV#r ˃4:G=? $}0:]R҃1C8hgtm2CmNݱ픉zPHdĶF~RGhmJկ (TDU,k>!m8F-4dq\crt6Kb(es8Wd>2KHzkfLkxJ}י|"ՍG63ՠF5!.=Ly[A7.4:عZ: Z/,`S$xu#a b~ *l65ضu${+}·r.cZҐpy*f-AMy9΅O`T'iWX3H5 QRx07l<)D摎{ DbHbmx%ww 1K+FH cQ_eC?JV*X6Yý׳BŞ`L-1j!*sJzu`Ju lw[\/"QHA^EuTjn]?Pf4}fN {N幒 0dpE$}l 8ulLuT*t6v92r`,Inj*U)7oL1#8it$zRSwL>1K$˾rOMޮY %a=ܵM~:NGYAQfAQڙ"#͵fyn:`@q:ЧKÏGC{ЌhqJ2G*-1Vɬ9i 7$XЬ'^no i 叟}8IE5OӘdNB9]ۺ[Qo3hmIj*A>1n>6kIǀ휹)ÿK@Sr̈SP}[L,MriG:vNֵ*uO@\-`u9(iCarR4<#6jᱜĎn/GSjM߲<]g}*JМ}dfF-A:4O2N#)j ʬTK9&A:g?Y"p9V;^č?in>?v^8cu#rxV"uJ*<#)<Aj!1 Ya'䀧>>7t,A&n41|)]f1d`?`Z# %x.;&XMI^Ser8F*]2inW\cUI{}h5QK^2h2Åoq9$ufvxD__r7`W@i I){|੻Ne\=U;{w9 $尔%2 G}~,+58OxslPD =nl›V=y"{-*\NmyU&/rxRDpm5M͉ۢJNY "{zqad0 _i2$Vlh%߻<߆vٚexrCӒJŠ.`,V֎oBV7M}Ѳ>- ӟ?L.(R;u>sTWDB-{g> xDXk'L\ oQ ;:ojmםMoa ӜC/* T5Y K6}tv J@ $E}N Ww`9mG+nmJg]b'~+%ȹ4IvO;EKq}Qy=tn*@/[,x7;Ŭ'md0uu4RSe,nÁ`'ea IIQaG?O2Oo丣SNSHdϴLE/ Ş+!UEN; o9.|(ΘٛA#L_Lf{jgծ-3Sboߚtlopt0Z(chs#mJ`L xzVC2DA 3NmAm).vZ;g.Br{@kβQaڱsb ^xkWA=2{RYTSQ%K \<}Z Tްl*1eBq+Qmfe/ٮhNBN;oct&>ig 1CD Pp?)'POʞ9םd%楾F%O!g)Ӊc6BX:o23L.#b.1T"4tlBGN m==$Nҹ!7>Gk@UW.3pe&}ec1u՛blv&Ăжy;S~[nr#b` jT?*/>c)Qr/Hrx!´\wR/F\-Mq^`=!t Aڶ KV:7HK uڱ{ZִiyUh+h|GjGDhqx ix~pM.T]*l nL, (`:)fa ʻZ!w#%64K CAE0FQl3I]bv!S0;e) Ak̭b)38+P8UT'PU)ȁCBl-5iVΜztH8fe;c8gfpgM@ڶՊѡi7%&)&p/3 g d>b5~uS[7R"3'Ǎ,9t㉱%Y: ċo1yk Y)iL A0ΤL].F@N1JX> Ex`#*)ꎷ5Φ[I5RWBe٢ Z=OW6k TITMl[xbn6RLW\';ԷﳐJݮw/Δw\@arY.2v5vUbY,%]$AS:RXa$c#ŧX(!HFvXF6Ǘ(LD(OχhsYqG@>ԤWiy8Gu?N87 h,T/w2Tƌ ׇ%ت)M JUTZBS=|tsD?6c{<ïjRz=g74hvH;3MKַVg.N0Sz-Ndm]4sgc,']Dxܝ@Fg>W%3w >rY:yF'YSr]bZT,a.{% &6 {ʦ9*-Cq+=U78xn,;(1Ed ]ûd" Q% [RuLU(vx n4o:n@T4a8| D !m0kdFZ &SPU>+@> ~4± x摼S 1R{uvzl(J]x/$T78+.運/NU9fcNir}uwͷ ;; z#K\)^N[1޻@|I]͸o] bOCM+X |?v;g(6ϻwҢrhuܗ M@(w hki>HVg,րj7B -? %'~C8YCtfd 6Vg9zȑE^`i&W U#E2EߗJؑ_ąeJKOK]g!1)澳 ^|rܾ H+1:τZ2MmЗ%]C"獎0hH/bTYbWʚÌ'C kK}_)?J̱<ӥT{K/7w }\:kCzrt4]Ys?i_2LC*c:$4W=oK+uxhbڏBΩOx!mHM%[bv-vSA'[$#ZKH!~Ҥ߼5Zƃ>m8^hƅa֛ F61Oюhܩ)PU^$M(=c9G@Vy /Z "'後E=zk1M8Ũ>,pB/Ŝj)L-Hъ\obf̾(/Ѫr ^{*yoD̀@@T@lvpk-Gݱ0˔&9ϕ˅FF 6a8]K ,6<4"~|Oo"!B>Zwjs ;>j74]mxtٝ7!dD'vȠt]sfFpfuB݆1oT]65u+K}hwmȱ@S3Y$hJ"$x#UA,#Lh]T'1/4iѶ%WUZ8R"U8)t"e)bðщhT ІjT\eKƒNu~ '1̆YyIibڶU|;H!UOrN*JE:K"I-|&Y=;< Iغо2NV}_ !MsfbB*u(rϞQX˫t+ BGJ"+&XߧUj:eeasbQ:8< yK;?+|HG(ԸJ{', JL,ߜ ZKYZv 3qdj"R밉oC(讑<": >͆tu NȈ#9Gs-jIMF/2H'?-ZlފU\l ;{Qb~jdN:g//H19 :&3Y_-3˦F`  3Mg K4e4l9$Ů (`xu*2(v=KAę{=IB&Mf2E{u)\8x _4o "d?1ߞGҊl-dJk<7Q˭-w:|2~Bή&aKik wy$Y2iG4i7x%Y+ P]18;s.l#Zǫ܏k:|a 0f!3S9XWDR\4jըوe Nirc^`#}M1WP^a>v~p&n} Q~E-3ѹشav|qXئ8| `؝L(j'4ߐ|.2ԿͬMP>{q-ֳ0]컏Y})J EP]Biy2K&QZW%oyXmYq4@§&Wgn0b+ h ,G3odcB:$ÝR {uk*1D4N.WUF,@T ;˰z_4<0Tba`S_sf ={M?}L'Xb]m."TX*5gEfn=57{3amW̦޼;*wIюdL#n@ jJ ;怵IٵMUiۅgfN7oiFv;yov@ʼ|{'fC%Ak̒[5fGkȱb{=M~t4NI=Te]ǢbVS ()TLӇi뇸/jGW^cD ]h*: Va$=SyeV#j𙴞;yfd *GA0gEdlC^IzցǫO%7Jµt(^"9*0ə6gII"LSq–wGuzV|RTcFC/_m$,sfk}Z\ (AFi>jw\nğǝGFą޴kW/3ራ(4SQ܏z^Of=ߵa٬ύ_N13sR80j}rZG1I,/`Y/9.UgMB`jXe\JZsncYj_]˸WT^;ʊYLT1 #l_=Mf$fN &؏9u>Jp^oRtGEK"fcI"$ ˇe$t<@ŋ&~"U[Kſ6wU9 e;\Q{~0(q䑬sΨwb07|1Ф|k-NoltB{~K׹I!:n+eIk(sTaߛ![-r,T8a-%\2!ʉitR0XP)U?ĝޢ @\H/.sn.y_vHVf I vr5JљI1 KnrK2$ECX¼YF.=e^orcD! 0Շղ­_fMАz$~e G][ݮrz^KYðI$_؝ 2^(,$#1ZBa5;H[?mj55"*7Lf !z<9g/MaPcN֛UVDp$pl4!tx!s[}?=+,^oTl֬Z?v{`ٽ0 7dvea/s.p9g{S7oNMξYmv9XѲl5Iݾ. 2IH:%O$qUaSӳݖS wj텏>\fl Y?OPgj{66,[ȩhc:#U>P֚ !u\?>*IqBP$}*Dtx|^ _ϴr;7yE1iʞiQ6&IX^ 7k$"X "-jRD vlCj0VCQyb+o! C*['PL6K2G;W9d{QЫ'I w:^eΥ2&o@ԗdeg4gǮW~ǛH#>.v'“N 9нKy(L7/]󎅜^R/v?3ukBݓ[^?!>@VH [T[ݚzKͱ+_y\IJgP.Ⱥ[šNBh=O՗!ZT!֖j7݆|kDbL™M1 AzKĞuHIeii n|]NI?b82+[ԓb?n E/4FG_V{:d(&kP;79݇rfr JEaqU<`j7d a4f=bkCxvqdF-lHlSMz"/oL0!!z0t ch9_U$%Y?2ǕA-P ߪcOBS3F z[Vv|?SʙE^4'\ ?x)3 Həϳzw]Qa݋P(M Ώ>a(fLJcFBrR"fқhw&rH4Nɸ=m  Ǫ@/,#FKn5C&F,SNZ)\iR)N`L$*O_9 C%CSQI kVbM8'c $2?!45|YI\M1ǁ崚g`naժ%ŋr/f,y#qrEʏ#gq%mZ0.3l^W5$B{⫥_c:xDhN <.^32ժT8NREIjN_\P].eN/xn*<ܷwyOR6r{"`-9zZmq]őٰև-z\\X~L9+öɿXO0uVIFzHxX83 Ǣ"&kD`Nzw}˰UܕS@Ԩ=qLga* .5==y'=nαXk+lup_7R q}4 tuGFJ)><5P_mET_1cf)ZxvNq:cv2H*]ϟ+lwNm/%c` t0=+)VXg mwȕ(I"FP kx#utt 3e) gވ.bG:~ ҁg#uѢ/; p0ŕ|7g+康WKc-c7v .bT뾐b({qʢkһ[+gR)Ju9F&4Ig32T5Dc@;B vW2L!<7E{ehpޕ~Bɠ"`[l{a m3Gm-;G9)8?tzxdjboqh74/5;R۶so8VN?*8ݚUXg@<.?{y)ȶ- u\95ιHZgkhopofo ֭#Rjɀ!$.(fB8BHt6NNڞh'MI:.*Hl$t5Mt;Va3NTo|0f7 o P+} -7+@ "W)9'Iy6wO<8*+]Ϡp23i v0  bѼyJ㪚h=z=z L_='|T.@goYmcd=nzf6.sW^i :h-\F;` T ~h[o= U1# buY:tpgb& V[T=B9 >qv"ihr*%VfLT/v(g%eC^!X}caK;zm^xN$Jʕr\-MSyiؐ7Aw)pa@zOjypv}qn|OExK٩VyAيl 5c:,۝\'eo2 "c6ף(5>pCջ-iHְb\ .Mɠw% XF(7ݲ B%Lk^-xV:]$]2^R-dn jy֞Xj>kB/9X+eL}0pAdh]BϿGNjTtկ{3rɑ 5nRr,RfJϥMpIfP3OlX`<4Hlss"S{2q_% >Ύ >rV%t:ɑ=vO$:T*Bm?׉ȟ h?'$,KL%d KZo0'`곗 I6Ėy~d=y9ĂnViźPZؒ$n}bc >zQhg%aq{h}5e `P_ 6;m&m,;FFުօ*64ڥ[P%i,go֟QWL^SnD_J׆ ~ʇ+}-~"CA;ps`XҶDf4f`jY^Em ,e=yؔ禒>ܙ4A{^8AUe[/ W9+7TRgKUuē}%T͚:94'z_ #fN{ZìC}Xi3'!M]N^D ع%9{e>Tjܿg&G:")5zş/ᱩ\y42d0)+rzp"iץY=e*΃r}H?0rDH0Q/<#skofA?$ 3;R[i0Q*^-Kmmсpӂ}7yZ]dO?FުmwL{:yxct}53zIл847k3WK+<[(^ܪnqbM( P٠wM dj9]m"P/ p`(LO zrq{(K;fosx4@ jXk[r2l2jbM U!-A1 t-_E⾪JuՎpD" ;&v縣vjK*]U)c?Lk^+ڙ=ZkqɾA0#&)Y>h^Mu/}mۗL7BBdFLPo8%N,)B|~`lޫNDd>u9;5L~HBž!gC*3.K# H"&pP%_&PY@YaPDyg-s?>WSkqɯ9;f,ko9K:,b |x)qxG>[RYqdoeq";Jd޵:؞v`^d 3: i]{ Iw ;:4(6p`~Xng8e Imz=:^`OALD]gxQt: \y\>FY]s7[^ : 5uN5Sh$̋KU+N43YT[.YY TEdv}1zpdDX.>!a@gɕB:qR~.!S^GP`c :3_xՄioMSJ[2~Y BX2^XÊ rpIv!t8G3t Lug9dJ2xQNjlXߴp@kXܥP)M~s?qqgI*Vs H4loܺ:ErGq zǻ>'R]$:ŃY=;‘J382!B&pS°h0M4S}AX*m#=գ|ɂiU{!X~ v b~1>yn&\9ɾ} T8ƜR} /P,D]dT=dQU,^zbjj*tvAnaf 8~{9کczW%hGYmQI2ѩ4Gm oVx(x~HLI,`?eCD}p\>5iO $}b;p\^6cZ~nᡒ=]Fchl. kp[kU8za]{alp$V3Ca*6gfLau =$ x3k~z@EOѺ9T= J/`J[i]:GnxV8)e:/|p=ۊi\G{Bgp8p%n~ 9xeZp_^Ưq+MmkjNss4ab,jWD3sdϸJSLldh,r'h߆yӎU{I]\!|\b*N,' wg1|xT4?]!Lk"~F[6Pa=4<㒬v8ޞ8^9#ɊaYw͔j^\a]Hl8=[rWANc%O}Pᕼݠـ~&N}ރK^`+ϻG#lۧaѡ<4*[f/:Idi yӷB f;l^]1#-l:TzU`b>#^酖Hd:(R#p;b^H~=&>b6i3OxlN08Α}tєr5\"z3o~"`FrxuN\+fA3:D*R M,V!]KӜ V'8uXDZӦLC\A-AeK䘴hmTڏ<:*ojD#,YﶻL2bfB6Su't0LWIH LόC6LOˀ %n@ m'=ȗ2e{yq95s~'2FpG?)t$״ޑYoiG>B=ire`VX 8z}*y$*bwRi#o._4 |R鴱0W,S䳎|ܼPL<PءD) RHexkmC*QU| GD͡Z\.W$6!n4; 9Pu$*ҵO[GK!q2FXM:L3i c_}S鱅;JK}HdfJ-O D`P uPR8:.B Dp nc !߸.R^mBxɀ(2y*d孄12 h# ImH6KOz1N獢šoUkHN!~K`xq,qyLϻlao0qgo6PF]wj+LEae*~hm.|;43p#^招& aV0qMҳe[56X̶PN4&[c I^( iD0D%ҶL_t4Bm瀳8={L@>gVk}10[DNXg/FyJ%XQ@k@+toE篷=^DMvrt'@IbEVpM΄x}Y}aILnXfv|Mṯ;wK*4+t]Z|v6,!*g>+lD6VS>Tu*&I8U}*CW*H U@lM Ҙ"]y p?4>.B3gzVVsddST֦`K {N9ꏗNE [:Ŋ\/9]7xwU՘pEXokHVCU[g aw%?з̞? qta8 n/ȶ]F=b̪ͭ<~T8ňTmyI,C)g{ ңdJ9l-M9L10<έE FFЖVOdp'-''˨-RBM4k ap k{|R}R{)dksĀV߱譨_?zg~T˯WպxYETקnHFЗG>A{-Uv ҇#`Byl,lhL!/JbsKrri| Yh1Gz[ZN4Rfm R!z0t ؠw3.yV m&g"4_H8 Ec~(6 ;Jieb&1wY V4;,y,0FŊ|NBk6rL?[qay/ rzխYU :Z͕))Y<"{O>;( x ͌,[)JAHc-72|t͹>R ܧUVG^9&6+s;W4=Qƌz-BMͥ%QM6=V7~CΎFy#ԩmHq1iYe¨?ixunTTnVPt,O1V6&",Oqz$AـQv9 +ֆɉdHf&{Xs51es@\4)UN!:7 Fjә$4!CCޚ zGжn!+R_ EdM"yg0XF^@[o*gD@@4T1,il CVa`xuE(vԟd*H}9=} >%:mz}ew-Xx?:i٠I!!jәȖy<;I3  Ĺ "!!T3`AL#\mfW`j$4\lX2 #]+z=wSٳ݁u᷇y񫞶^qlТ(uȸ P쾓V*LǕN ="<3bB/^}8x̸ @C@^%'cFWc'v M"5Ηo7Z 5h̥#5;l )QU-1\^jJ|FAE&@qV1*!C]R;[2D99`[Wȑ#K\VgOՔ[LvK3X>i7{cҒo1a̰ ۣiXnɒeHgzŎȇ\N"\ztzR;6N,Qr`^,38v NC/SYW&: H>#>iW>#sX5 xV#y(w`/@@A9Y|l ͍֏9nCY$}J+b3TdUeSu![97!>o_JC*8[1gĦ_gӿ WBOvRgQpC/|2uah ;PAb#rz-_u+ WGU00Q !+i&It:eI, xM3X 3 :VS ه4SH|,Ϩ.v!|yڔ)3yN*G-Hu/ ~&q*L\`jR3_~W0Cˣ*)6@B(3ڠO0".vYs.,3-Sp4_S*7HRvF(z\:b=W wHtEi.'هZ/Ԗd2EUNxqBIW_6d'59Iի^O¥E\{* ltӔ8JG-r.Ż $nfۭos/9ơdj*#M%Ji9 nj@OTt?)S(#"W] :1G&6 &ųB?,$˯|x /;0 .ocX=\ ;,fЙLXn'a;9(D{.L"p{K{ ίˏFJ pjb;G_~hC\'$QwQ 8fx`*~Y>?ڹC?UNJBX`.Se^\W/(1(}p:7GuLϧ>wӞM̧vVcj PE&lf|6;b} [7:y?+NN?OP8=|7&h,L&뿱Z̈9Z5/̡!o* qKV8(dSN]Khkw|.=pŃEEnsȴC=J4 kgfjYse'-c)8])Y^xk^ 5_Л5,3v5p(/iYy5ʋ6lS~o>POAyα2@\yHV/57FG2zzxź[}gy1Л6'FA>~CJgޛx*h&SҩMuA("C;zPK}a)*pDqҎ´ 7>Ò݌[NiZN53BU.pN׾ЪߑIA "W,;_+>K,.^<5+fp熈#ȍ:qc_ N[y-d N|&Ikj.&dװ^iR{1Pk"! pwm7U"6N`oVo9@< PIT$l9{C^t1{O2%!y/ x,{zBC_gj[+8[R_EPErIX?3R劷ÃW|1OUz hτA(*+"=[t{S[cG+]ys$ww%,&*6popzc=_sڜ ᶥ|$TeE$#Wj'Ǩ ~Dr  fӪ92)i{,u4gOE K}Gl 6괌ZΔ` >l*vl$FPh@? }U87 AuYmBo3pB6]LKݦNR~F]b__נp i$XO NڒK4IY>n\@Ĩ(LlFmY%Iy)_!)y߬Qu0uw#.(Y\V$~cG*>35Z ØL*& %*7U.]$NYi?!6)\^ 5߃Dj]*~鿝dnt^Xzn 0bMwhi^|MH,0 bRw]w(v]oz*2GAbG&~.L=FdE\J9!y#`oO'av#^uak/xƈ}nC'WADFΣIWMѩu9e+Iȥpu9-X}cBuLMt제~N{6/5V&e!XV4">l7\8". xm%{=81jqH|dq4g13HhHϔִ o0-Sd>>0ftK\[&e>uZX淖<Kew1:N|\&ugshS[o5VNfҖtLR(lO놣SR 3Sx(*ÒA^Kx:ln'm@[ZmHe婋9ng/яwDxRb4٘wɶ-U"K:F>:Q+Ky'|#35l\)rwtTŬC@PQ}a8??S$6٧t::O5MZ$#ĕ+?pjF̙pzH$Βr@G%crxU, /b5v13 8XE/Q rR'!"bF@u9쾑C}O StP듇ɰSlp"pU#ș>c`2HLu,˾QOԲ+;+wTC|]0r 63龔GQ(υ͡|s5W4h |9|!tyuG9@ioRxNyΦ+NCx$U15t:8`/'m 3]~5?ҾsrVA߭jS Tp30ZI齶2%M>w*'5J~|ݠ6o:=/@=ZQ{hqDo<LߪNx60d$F?i Xwx zjͭt_ap"y]',Kqq)TkZ==`ʞa5e)Q%0eDի?Tw'IMAF s=z~L ýC\3^t}?tHv{U"N2-8U|-VCe^#"#_Q^ kqyٸHTjoͶDi~W|ӃJO@}|$w#"cJj tcjSIvJxY}V g넴VtblT_;ޛ;qP\ߔg~6 ecfui[[ [1Pkx)h8 ʗ1t@"+ 1$.nyJ &|pJ2hg)Kߙ a2Mcx"0=ϐMѥJoI5Pԭl'iiRn>S Wc+<'e}` !` _¡6fӱգnBe\eEՊ<#"|#5RE (.nfye@gE EmLI6'Ś {ȟ`K <~#mwa97C$&&PCMmiFk#Ui*Һ\3obxLU1RHo,^ +߾ro_zF1a_.Ў?BF_nY]wsK^ 7#D^L!|zt4B O8rJθI]d^i1 FfKZ_ii1뚇w&θ:D^{5_S_W;6 9 * _"2/*A$?΃g_S흧 fDg܆Y (Y1Lhzl(S]c*N[us12ZZ3 {J6Ƭv e[d7NP})^HҼ_O`<׌9"\DwW;J6jJp}w~oL7+ӫAQco=Bf"E9P ΘxcDŶ-qyŽi{,x^H8Ukn`M.ϪTzȫWdo8=̆k5r/Z5}t51 |5]\IVoȂ4̋cO??^棑78ǫݧGߩui­gs z;_vܟn!": &o ZBp@NxOrGk' R[ޕŚLCÓ:;c.RtTfe---Z=kgh:!P=D+}y`ՒQpd)QO.]ѡD:_{,g =F-v&m }rimsc9A!Id]8 Y-w]W L v *}7/+hrp$:fNWۯa>)! PU09kE!TAaX=#<Ҧ\)OUD幾!?dc"[/[<&r#܁4.:Nf4N̪0WjMW߿ r Ul)b#ٵꂹ}^Uz)qYqgku=#Aj@V\R^hS߱ćgUzRNe-wFAt]1gq]?rʖa<@ť̉OPAGj;XdȲb nJpDc9XMީyPō5@O\_u QO |Y*Wx>F^Iqհ=[`YĊAyOtT^]:d+n]^{{a6l4|'tJޑHVrq}c9*|䊶?mߡv>&^ hïCɍ#ŲOqQT~P7U`(|MնeFq19wiI8L9{qw9Q+p^5փ5,pemXP 7,_ڠ$=e&|ߘ701nO9#!5 qA*":$ț=}r#t x&SM7U,ؠra'aW}S$s1LIcXoY;L]3)iC@߿Z#+ /R oo?|7Uo{et=uLRW0Ӫ&F&9\UY v)+X_4liڟ 3cٕ&Ţv,1JhH)@WV &D lcWJ,+6[AAxpQ/S&{b 1+{oEN7 sp6ݥItV9B ~x3.DT HzkHEj(Im#fZEWsUa /վQR_3hSMtXOn4R>rѲDRs53χrEsܱp?\\sxOi)6tG -F7r19r~(-f=3s XL$0^d_/Zj#{d8 5!NxDCsچ 'k#\"tk嵵q?c ;ֿz%OcoؗR)V".,!Pm)#¹z/EgH_ҋ(Wᅿa>Jcu-4+ܬNћ]={ &$o% ''=0$ F1:=hn} ]?u֮;^yڐQbzc<ҳzaĕLb= WD݆pqGdFSGla%@cF4eE#bnŃ:z^׹@qiѕ@k.\X+MΦd̛t^a:r/GuWz MSh r%OFkiqPc&w2[kRka;t+طGS =$PeL=. Kx UUi`fڬc(zAbNlCM<1G""wp9]Y9Nْڄ 3 Av! (a"@֨{NlvĐ;55!'z-g[3tXu#-ߺ?p 979}1[Rp%I!j@Fg^#‘EgaF li$ %h2TuE|?BLvg/ {bjhEkO4=zKs+LO5gZ:ڑc侈4W?}YdrB_X`91|QqY!rɎnX$%-s(O!PtgSrNֈr}紞a}4#(HX|} `MYa^D^ EҚMz.R@eezh~J&b. @+#/wOdjm} ᣸~Q IQX'WPBz#]"zrp̠:.~,Mk.5DF7S8A#r"b0eL\IbZv+Y:dEtS HX= ( ypJFKUw#ĵ0Haat[H?t>?=o_@7z \ MB z?AP"/'0_>o%Q Ґ;Ī'`C p o~JUi/ mV.*}6nٗ䳰qBbfw+fgf2 3zci!8{"37AkeRP Hn}ԱVmmS2ChyV=*k$KxdԱV˽M*b nZq"0nzJ_t2l!04;qΌwKgf9G}Fz??1фMa3MZũt ng1Z A҆ PTdcŧ%F|k=u˫{[ mvZ%EȁuNƽUs@:_Q[wgE6cu;H/xe@{۾oDF6iHB uHhvyܭ"h>&Ju ƆcqГ#.=~q)r`qLN/ (R}M7k>YVfZҳsoѹSTEzuįNWhg&T-2pQOfQ*3K,[0ȿ8!=9 x:(4gzöSXYJD1|)rA (%8 ēZC=M=ye|QvL(^Ƌd\Ѯ~t2L_1iݾsuy?= :swvoʹϹ/y8gn& T&.loD;)ګ/QKgнR5ȱF*vRU3SjTC>RȦq_ݴ%e=n_ i5dOpPyD{xeyMage!*"@p{]rW8јlT7qXeU&=n?3=1B,(jܢ f9}P,iztWGPWf%r,ީ=ocEKb;:zZ#qI8K>rk(fd:]`nH6轪?A$7Eƀ:uHV^ F^h~ /MŴv~G1> :%츅aZNx,dl Elj|Th:0˜_IJ47LَjݻtmȂ:Ї8?;=.xM2CЭ,!c ]"^kH_;퇒Hmeq(>6VblΘ#(ץA6L*~ŎJY.EE-UHth|jyO@:%9=XvW軳"ʳ gOwM&QoUb}r~WRj:ʅJء ^B4&;Aη V#Y2ɶhFIc#⎱_N %ig{pp0X3ԋM5ê[ SfdW<_c.5/nl>g?S!Ry+%X [6*ش B篡( -oMSݞ킇B4IBۭŰ1 g'KHC<~,tNg}̛ BRg/t|6;7yLaҡJ8%s`L'x3**].3,|}^GNcJTvjd,-tEsY``{W ج]CR>UyRLs}0mvM--2Mb> ߥŵ^_?Ѓ©mN~Ͽf+u*tFNW . sځ<хl6+YQ&f"A'Eϐ,xct5(3kxRs4˗E&nS`dI í\ uhP NQ|;`@0[޲S Cs /,!! (ɛ }#aKxzD JBl/ !*ACюKcʳڕBϨ)@53#YjX(xe )UXece߼?Me{X:UNuoK]"pg6{)pHkܥk][CTm.ȼmJպfKBԬL 9Edsbk#Mx`la2y <|IKУʋk'% ٞЌhm>,a᯵[ut,8~+ߪ=(ʃ-s5ZNQ{MG1<݀l_${FHA[S|#CWrb4s/.d0*.b8:H_}F1  kk?hp=PgD[yyKـp!tB%4!Ih}k+j]dB:.&ĺцD-GԏPV2i}p.I:YW J&qPZ%e꿎GjڲʀW:Q$$ghz:Rm^ Jօ)I q6-18׆ 8zTRo7UBٶ}{kQnrd\#~I98M}D,(PNp_fN&t'P:p4l<-QmT̃VT趤y DXҾ=%Ά( Gͅ_[ߞ".:&D"b-2չϸ);LN זvW:2brw)M0L)Z`8܏Msb H7kC"cIP͐yxUd2miLګvC{],|OړQe7TSfrfk XD)U/_xg1Rjf#Y)-Ge:/;=y&ZT=R O5ԃ‘ RHM{|Aa65^׻of$I @R9,U 6{Z4f>9_Vu ݋q $ |(}N[ކqv*H˫%RQrD-1$R=G2f̟SWV[@g +DF81]է9N:x~N\XzKsS;-L: c|X J8@&pOzj1̖8Bq4|CX'c2K~6P >0̯aUި%I@Y?D",7=>ho8G .<\Xpvk6#KuB> 3_Ar"1%5'XFD'm?z c 184ky3bmv,SwrP:Q72ofږD=9N7@"vXvN/lz%IMmWf4!rҠxذ❖LD^>_Js%/ΖMwR3';A[Nt9_.ed2B"VrmZ%l@;řU[Ft(z|/V>v' FضW;$]N-BdJYg]vlDnQZS]\΀ :K`pT,g;.껨F\T%S=؊\6Ӊ}R0v "`+ ,C}P$?NFx)!t<ҐN~1xX٢-Rwg|?c/RVqTqpY;f EŠFũvA&"\)@ *CC`%p^Z4*r5GLc|9M+- G-OE*R{rM/\wgb#newegQskAVpȏpcW$"D q$8l pHtEߌ܍HW Z s‚Wlc.IQ իm<|+q1M:0ưayR%ύntr럺)Uf)\][f2y4J(D4U`s㝟=1fz$̮+`7$_W8 ,qSSx va7-I˷r 9`$] h];}ՀQ,8'˹ځy>Vؾ ^fnGZ$FNls{GrXゴt-Uf>=7*;%*WG(z mG|.M~K\ݩi.gUaYibozdbe܀@{'uxI,˙p_Ii6BDkLPz~n[>h uV:_u.o" l{sOR>fHv oɺU,9PQG ?tJ܇]-1Acd"]ÈD%[JtoCg"hx}|88GT͕ctOsDO&Ĭ,JnO&b #+ M@ Wc5Wn.Od'`3 Vwڸᄕ/{T(T3+4JMk{10dW-8X%ݧG|7j Ǟ srlgnWeu8v&UxgW' ŗ.oh.&eO#7)!#QDr)Bߨ'qu9|#x-DXtS7ri5~m+jR-+ O۞7x0Lgo7ܫPOʹ]0O9:Kb q=LjmCV]d*++ٶ%ý>D$~V۠`=Z 7 r镔؋ת,|0 hk0n_oɫPq4/Y%Vp#jn&j|O.9Fe֦.׮$J!]j~|I'-Lg }M`ti9 b0,f 哷}*ά] JNN>i_n'z٘YF5UӤ;F30LVgӷ$:`/`hЇ8ІfcGer\i@Y˕+;l:A܈ӡ'h]+ze^  !$D4nٻ>qVJpBR PSTƢ=`ۗ o 6y!m%5HU[IFƷŧpOʷҝ0)cl0^jL PhRAnRZY]% 6U(`T; )z?% UlanLI!2$v_5RtD)aq)rWttH$Rȱrq#g\ͨqbnpu2Ȋ^v9؅ُW m;tIs• yTqF_䜷O^%PnK/r.M@w?ĜDZ.Eg\KEïvDgH6?7=YT|z+T|Vlhj ^Vsr7vsCfzMO0Dduu`ʦgp Kϫ)z=)>80ԋLGu9_7yZ4~&sTGD_2EX|59Y[,/ 4C @9tYP J ` %5nf IyaAKUӳH[:rQׁ0,rKtGlH,z-N~e!̞ I"fbY@$$%pQ4x: SM\䛉.O,˹)'\m eTpF,7AP;?Sg5 2Z2=Tx_\FЙ'ߦ4s}`iC4Òx2Ʀ#eF d4dٯgJIsrc!Mr4 `sy>Ni)r~&ݚ.]D|D9aoWGp_2zvcN-sW_HGtONl)k.px(qUۜ~O>q5K~E> azM;]vKDhjD=2v>Lϟݘ`n&T3b8 AB#QdNѸ*ccPhS:_z+M!|3T%hrJK{-{;-rmsqUׇXg x z Uil:;D$$}ó<jqQO*_{eh9@SnVo298hM|ÂF-n·+&N˾4JXu D];+d3`OAnnƸ{ r3ExTsC;Gn.a\^fIO!/9s"lbw J0k0vW 14,[EfI;<)+[imtF y<%YB^xoC q+dxjy|796#eΩqƈID ĒAA)WQU2/{a6-V>E!&a*n`S~?\OFVX쫙4dl#-|c $$ <|4QVPlZVe}'겑W4XiBJWiO,FJHc]N,VXm!VZl:k7 R}nj8ŭ %)`:<# y\'=;3JT.B[yxum%9$"]ıf!27Yx|C[(+׳댿OayLFgStL1H. * ΍`HWx5R!Ba[?$&2{ OOnW6$;"W!Tgl.֕G']N9⚒nՁiZRGw% AE13m^#"u 5玳8ta=m&W\we#e4Ƥ,z-01bbMIÉUORO_D6)t7 Ox@!o x թ[F4XQ%`s R} ,ɛs.uڍ +YA}BZ6a+\Buz2dGS<(\Vs-O4k*!ujMBK 1n|rE784 .`^DTbcCޮY"%sޢ+8ԭђX@O_]a$IwL23 ȭ kGQ\9bӀ/Wƹ,pott Pwy$pY=!_m``kp;0 jL\75|,R#T[(/zgƏɄy7r+zɃW3b{ȽOsĹn5-ҋo=x<[]40x-1i#o\HQ0ibN_Tqo PvE޿u5gA1F eEʒAܛlQcxFl24nO+,W1+O]dn]vq?(:2'xʨ'սfT< XDŝF~G "aӋe|''<ڷ;|*/yU_1C^hs0WMq3|B{Z$ȡRk,lfyP24J$ QX=~F1'Kh=F03-!2aKu7ɣXC \ 6æ+VA{QF;DAo@4枵w2a'ql֓Xn.Ł]b1!L.b/&#>u29fjH?Y{]婠KU`p`7Ǩ$\3YDuNaW)gI(~*Y'6<ȔN-/= ^)Hد޿@Y-O{m>Uh1_ &H24?zz @I=JhTfa-JUBKb>EヒV3Ŵb:\bL߉bdm]q<:r'3La Z%1|`/ʨl4~RwϒbLTÊ#o)E /!@83{TD33[+厌0Ŗm̿G d:ri+m5#;AHFoAn |TY!tvņ`_%0wv~G],b*/TMrpb萫iPϚF3т&sJK KjC;6m4yK XNRWچ{`[HMmXEi/pFoX̸x®Yb؅zIE؆)uhh8/ۑ@p%u2It{:( S)Ø͎'/PgNfN;+!V+p3`ou-b[٭]`}eJCœr i+_fY\ ˚&}^SB؛Z0=/_z04҄'{j Je2 Q$!,W9bTę6"Owgn8ɮt}+WG?7鮏žO4Y\4C:)dBa xFcr]oah-t[|L$W5zT}6O&^o&Qv \{r r0I -TmmaVioq Nb#0 7HYߩ=G\EE[ %9è-1Z_ 2Cb]XBNYDC$'Ӊ?ѡ ]&Z 1[3K,]z҇BOfI0VjdJE5I4Y@ʝ}WN -+S? 4MYuKrYd]IcVU;]~1",wE`,*@;J@;-E0Bw*ZT#?dl^> m>Â3돴S. p%g$O<2aL\,b #`.ѥ\ȳ/MtɀW3 ƄЏeFI'֓q o#yj]ux0gIF\>aH*nr@{4{k5?cUƒIlV&YanqY>V!X* zhޚ޵CEȶgBCXLu~orȅI*K詍_#?Z^ɹ'jG˖3yyk q772 ,k(2ҳw-:{N/E@@=bCzw :K2As-'njX OVe K`^qk#|] h XꍷB"ŅanHɃ*@F[RfeLz4!J4rEQL0@\fTӵ0Iz?vDUg֕$Vf ۠ CAp\qXtB9?>r@%| 6mYL2]]EI`"_ƯՁRwˆ4H6JLM 4'P[4bi'\d4Pj Sz<]%m(&2xҟdih6hu럹 #BJNob1X5M1Hv- 8Bb*d*/31ڻS$PkQbAfSosEsLn;>[&B=,e"sn:') }Ic4N $yjba `[ .q9u˙yqϮaprŞ O-Px6 q_gvz' %Xת['ۣf0X.Ej:oh4-F֞h]lCFNFmXI7|rH,`\!Qh\$惛 i3m%QWg]t3΃i^2ͤnqv[eXDSpIHC(Iɽn19ӶB #FA.)(%-'ޠ'z`TBq1cR;'Ɋ\l>>־6bC P~!?~&1p)5jF ;c돞Q$R6F мe{x}Lv~1)F.w&")[t̄L!G|UY2NkĘ}dCxCHGY"5S=| Fh z6F8{Lx6SLA '\]J5a+ZYӒ d%=Rwzg|Tm[^w4)C2MTr=%};*y^RxW"jT;ڡNt=%dhL\42sQtOƭٌN,N,Yp /f I#_Ge m6~Or&R, lCZb |Q +?wPsJqM(v(IZz>hێTY)Y*9+g|kȑ]< D_LxL ֆ[̏} j/L[}ti aD4~*O}`4&r(˚!lwɫ.Y$X.|c˧;2$ɰ,>:*BV`4B[>Emnw#d LM3z`-gMPUoU~DZ+Uh2#:E V,K 9$BLz䂻*v@BHD#J09Xlq[ӥ0uanr5ÃJ+?xy}_Q7TgXF}ĕ> ~m7oD* iրRWˊ9O C>»o器_> #l@^K!JAmn㻣No 4`c7e vkJt14J Cǖ,\/Q^rC*_ÆyII#%C2'#wlQT!uO̼7;㘉="Lĺ P 5J)ǜK5=9֡,NC!fi\4~UְI3$P#2W񔱬CQ E8zEy=r#.V!J?g ZYt~ԛN= OyK5 HRlqSs Sapd)"-W&3F%;Gcj>poUU]$wR{o[\y:scf=o)Ȋ"_>0ls3y69LC`kG-[x$O&SF~ 8ՑP>waݡ~'?\DDS1fAXOk:{BϸZDa,l$oj'M㒵*eOty P>_qpsdJO7{rz7Y8A3!bm'j }6H`? >uzP#gHɞ\1`:Bo&C! cc^ B̮ qX`!e< tqOoFG`$nɖ"B2՟^%r.h*{k :j@=3_7b ؇s >,}[ٸrbCD g.48ZXB㴅q#p)bXHQL j4G h,?pzEIo8sHe4۲ֽ2ؿآ,KHϗQ7 cW>Ϡn)PN Q8cGp}2׃4wWZw|9G\Mce- } -HĬrx5|M}~Mw2%Rթz85]MX? 4 ”r5U@습hxT,lK(EYluP;NLݩhx\-;QR)n{M @Ӕ0/2Dvg9kȀg%qhYŒb,!tI?DhU~31ZaYT;8v1 BD# V_?#%uSi,ʖ,]*Jytg:x]V+J) |Iw` `SPթO\_9Z^(&I~΅`f23S2F]UzV(?QTe2huU(sـ[YbTa,2{$noۥ82YԇnW 㯸gK#qƁQ6tX& k{$ u I38@g,_6j?\)4~[ai-r6 P-]%927մ r-L[m o/3TGq8)J%s,+̧96X:4}]׍/o&$b`n6] ){hQbt^l5Hp@\+Zbo}zb2xwů;L2/{DC%8Pw͔Do`_M$ _|:xw6^U#>ZIWkp yQP OsnoG/uC<> hPi02z. /+ Mã Lt8E+$tLnoSX*5LR_^wZT%;SR[j( T!#ܣO ̐^p񞫡DŽNN ˬ Ɨ͖N@j<##?t}]Z9%{㊨*iKF %X:-vp+\(H)|NީFytP@C;a1P3aĄʦѳybX{YY]BMbTk[0l2hJ BpŗjRĝhh.TFFk#A<m8 3Cx<*r=IX&|()'Zn@-?@A{lw?lF3I7z>?vJ Ek vEݥۅ[&nWѳt=:}(nٕ`,0!i~0H4cܵ' CˊPBeQ,ME5# mfj0¼v瀢iCy(x ||sjE0Fƣk8~>Tnʷ`d){#i$(˅Zst{Lxz:ȶ5mvjF9t(Q"\rx*똂U"*q̓[o$0O|'eIt/%ӊ Qh&VלE[ $Ųשi6(7O!eS&"MP{ bFkۆd%DGA頯'$֫YHxΖhzI/>n["_uˉpnl+YaKjBom|Ƹ] ؠt -SX)9I" 8~˵MS) #8>~ ]JȢ;au씎"f8iEw(k,uDT+t47^X6amO yV ǐG-۩ 8r{psG ąDW;)L@`Jp]XG K"xS*T5NPb#vK~4jX< xLrK΋哴@p> g&B9QᐽLVƚ|:٩j aS^0Og3?cC]H4\`U75չ_k}!m bۓ rH@eIMѹXv0f@`Ѝ me{2[7i yO:p -p[WΫ?f[b 杽}gmߝoVQ}{fˋ8}~nZuYu@Χ6O-.~HaM͇6a"sӝɊu!Y40X~lXx.z@^Yu"ﴇѪݸd t{k*# xWÖ6.鏼.p?F"8gɈq 6m5isMq@MJʋ_-,I4[Sz-Tbr1 ({Kߐkh(f6w' <u0WxcF`qA?k(e39%fۣ]=?eo~65͂~QZ!յ!Q_3aLz}E+S!6ݠWd H:NRn;94>f!AvnBMF9޸u;Rq.οm霡0nmQpПn6=ܤX=NKJrbXU`yqmRD/gaUPOioGa55&N7΢hoځ4yK M?,opwΗ7;W, w1lq7#>jI G#2ʆ/. l[e=e!kؐ[ {*L&f q5tѫ"65ސh*/gⰵB%)+x[Bn@rÝfuD% u!߀5^վΉ࣫'E/ ܨv797ͭd]?.T X Cg>A*Zm s_%nsoT͜E݉xO\Q~}~nEҏ[V0yEq!i*1dMrີ֎K43O} 8KFT~2kI+[2J''b)1H<|X fT]ͤ(ol h5amǷ@~tLTByi) @)z siHݹI67^V-o+&O /,j_iRR_ЋJF[CNbD.*f 'g3S< DKM)F6L]PEQterftTŒDlR9=뜣5A*ezĘʫ ѕ00W(ilE2?pl)PPPrmӵ#`jR!mop])@dj^ںmaďAD\Mqa NvAQqZE8^B@LK7o_I6GXK&rrJ!-J[A;^M! RmƑHis {)'ȓ׼ ./\̧6GutE*IwC~v\S)~s0s{w} Rlwٝ+M {9C><@mzݕGЈ  nT74)8V+8C[^YoUu IB\٨L,Vn+vs.9u4"A:'^Gxtc|~^,N l.JzX VT<ڃn<"Ao 8uO88wzyCΊk OanU YnsAG+:Ok=Ri_T{gYyh-N?)8թp!PNQ!nOh,v?=)L}x+ֽ>naZ J|3?\N3E6O|/>p[U;U̐:ȟc\9J_Q:ЌYVt$5wI#VT%yvб`U^06Wcyy> >Sf\//ɷ^:3tJoo^DMgL6AI3TXSR 1Yt_fKJ6'L%tC<];킊I<8p{䤁ќ4;ma͞w_.OB\0bA~+c@2QqitdIc}="_ٵ.eT.;y:"⛪IK*HT-3,ڊ]ʯ~RP=IGm|O咂?7C &+;O<O\("FM#T-S R9K}G_t/ι纼 Nt-oK0Nj+7(3wh-R{Z/$!*:+dEK)aTz8_0y %Rn=\NJ'/XDㄕ'9vNA.͊BPз~3Tn'A,\[/ݹwҊ'Mdsc;96C'rU;+mkՅDUwI\a:_$rVATDm ^̀_-Tp9B1nbC:I"d GҦf7L!OCxOԾu$pJO#u"MU[3s?B] )l9)I'Nnlzn@ MM}YJ/d\+"eu ]̸;g̥)D\LX0nc. ufcdP˂&PʫQpسK-wWk5FTR?\ザɭ&D%.Àk!Ѭ:}sP'H#&~ 㺅ʁW<9b7<^̏mx@(M5$T\v5M\+Yt9f;=/Wc޾]tѾy/Bz i y|Q8 *x@ZD6>CssoܙӁV36F ENOdnQeMMJ ؠQw= 66}LR;xIA"8;k|67ʉ9MDG%VLH~iN烂Le9kx. |k\đ]ax}Y*p>DK>~&Œ[S]+cXОL~I!ɍA{ Kto}vJʋ׌HX\(cܩwu~-L 7ٷ|o`0.͌q>gпO;'lD;7g }R!pD3Oto4"+U$Nڕ(4KJjQC`<2wzANXFNX#}KHGvEY=RʄQU:O1tNjյτqzdE4ߩ%@bS:ֱ[.y$HYoʽ|7¦7 op&~b b'5F*Tvvy9$}+DW'ۓ &Gעr6*\]:X Ԍ(X6~TN!^۷12hUYAm(G HM.>X Ĥ6kvAVHgM+7qaJ"T}2-w,XWZo/ vk "b R)s[/n"p)ġ4vb0m)A0+#)O&y%KZ&1#ۈ \vya\ȹlmNq "C>6Y6K( Ǭx@M,t;EhWKrRX3@?6 @1uQ& @GXM6?B`; 6hJc.=gм G[vR-+rGkXAs FdbGՀ 'a6=}0.պ{z=Tb\])٧FώKQ! $J|"Vykp#-ugϜ !׍Hj)gtNX:8.XmBgYY7cIv`@Ĝqc䙥RЅBӼIӖR?7((k)r-WG:ɔH/]5:P *P{G1n%RNmCPa4 ?\f-(6nZi9xGveכ'}9OI"~f wUCaKg^ WL& 8]M2'>EOV!qL|Ys&`6v#h&*McI=o l&ț W1zc,@|$=P4zgL#lo0Suq3iCc@5m2lYiw]/ xEɹJ8G%=W!v&JU&U*2KJXYE E1x|skOWFT zYCN Ee@N}. ^q C\ /s0UY zq9{zv~5F:heKE91R1rD̄:z< \O:tf`:(zD'lm\>\zLo_$QpLjo:"%.T, jygӁhGz߯R}Cz9|s$ޙq37^"4qX[w]cG9ߪl~ ggqy%"+V9XD󯏣$Z-;fe2˶Yv'pdiBJ} dyBCP8g(l%n#5Ȍ5wa^?&OV5Mފ7D3)G-FA&)~z K#~8XJRp4f@av 3!v&Dj3<0 H)3*%z*&9 84p*F6름wDwɦ!u]PbF\Vv̑h8nfxddwdyMI3Տ7H`XK0"^0yE$EYޒՈB:@JṯEaEUO'[$k m]D\}BQW ߐ|*yrawZKcN@&3]Pq0-lG1XaX1[U f~]^lX^f1\w+ ^FJ6VL_߆Z:F!U*)2v9lF(8 >G*&gz݉&F8{)K'}PHZ`/<令 ᡏa.R܊֝нm%͠ 9 6j  1co))b> b{ϑB w]J`_0jx~- 0~SX`8q&,5{/?%IM_|ၵAR:Y,RiFNcSkNdT{V@ ?-Od[Y^4!9q[a,F`Rg.+"MZ'awQ ox?KwӀŬHHl.j 1j*i/U~D҄`Xx0IP0g'(kֵMd&P$I'dWo7^b>g); =|Vpn})YJ G|uE\uN,E{Re qp 郵iy8}&{Qkzw+8-[$X%k$ Ҹ<¶-p1֟+4+\B<QL "nwyHnjt/*x3J;_ GOV ~xnrLU,#?^)ˣB><g&7hI񳗕!/a*AS7|uLwrtƅ,T{>rwŴFhBCޕ0bkBэf:fѦ !STpdģrOk):O1g.'WGoOF<4Z#Ytr{)uKc>FH 01. V{SE0 JO'6TXE*_#X-8a8d$#b]`%q^[n$Yl ӿ_UBawFr*fCSߦfo;y6Ԃ c곭p2~hq:X43V]h8 ">DŽ?s_Ƴ…`Cz©f ʭΨ֪2X5U+Pvp1©5,EXt @$AlG/W !_$6'KbK˴Ա>\lnJ ,r߾ئàn  a Eq aAo4#Ni;gay]'29'+)"Ee"y.QTsOU Kuc:!580JunQk2f Boneסfۏ.rV]λ;N(ڎ0=<Eyd8~8RmQE_x٨U+EڸR:z3f ZA& !\~cUFY1kf֖'/VQQ9Ӝr6̰PK{oOeStREV.9/V@#n#*vf-Υ6Iv9S _3gz"Xɓ'TMSb$Va #? z9pObUdq;(5dIh":aܛ'ETc+ȦasqyRPY_~E7@`@O;4FˉުsGL<"]6cgDKP@GZUa nA0rO@ˌ%̷}o\\n8wHɃ\p#UܼϿϓB@ -ؔngdXe?QvsgKqLNoxD Oɝv= 9'n#:壶ʯZE?DQQݹBaUf7gExl İm &2a3A7Ɍi5`X<:Laާ87@C@{[1J뮭HXyxB5NQoZ 3z'9% @~P~NvrY~ [̦/`/@\y}+Y.RIuTaw-^X,qyh% oP& +_lQQn!MK`tfˤ j1nݩޗb}_zs0`p-.,;7:ga|$*XldPQGuld^דA^C }jD+n_G@.hkV20^ti}Z_^?ί^h =@Nՠ毑W$O )v{X才2נձ2- #}و9UW)HXkʺ4ʗ%TF?GL܊)GBiكJCaU uYbHLCRȏȞ[Gd掆pr= מ>cg2Z>5>uVUު^x: $XqJ`JJq[##@fh糸 (` `XT!w.0( .V#U!;OcR3$/EtE!uR(k@kꉂ 31R[ޣZ{&3/ Z*7^J9\iQnX0+e,Z=\o"3fsK]2n wQ^Mo'b]$~gs)˒)>8ozKqr>= F ChEGd4V8viAKI))[I_b*~q4dyF;YJ'3yyl..yf qސyt=dB- c}d$)ՔKw;UNDC@IGl[Pv룄xJ>{$r6 `qh0";J]0r2O,RƂ:#4aWo`2ČH-raIb)[rnŽ/J*  -5qRP0 t:uwY sX!3q<_6F*,L'XzYl&Fn0:Q@_/OnqDW5G,'$WY+R[6=(k#U/kgka q̏7Yaj,DD56/I:Y;KLQK)9dgc8~ǘwp2"+U\G7/#},juUL1})3>bYj*A(Sԥf:E6;b~34}~l"_[jX""= ԁ@'UE+be(!Xw9{]E (OY/I ؖn K$HS'Vvcfz">ú9$ g~8ZXnRjnӽjXÈH*hppćchcUuADGg|$B!sbl6e nbO zû2YܢASr0 8ZO"A i^fwhux;oRZ+_܍͢[Ѭݟf鼤&(S&OoHٛ\gNj--+56jD"b"eА1MΤ6T%ˤ2mZڞHuiֽК^s}i͏DvͲlEK4_>֧kWo~h]`dbf銝]­o:,ifa ~FU^]Y[/v_ rJ[pJ9RSCfxNqˤ00/KSp _=M:}XʊujipC4iwC[hIiѷ4 Ei"tC ? ^p ڨ"4oyщ0^"~OޖVFi ﱍ@d| B/j,*셀$H8Vḳڶ%2V:[Uj^⻔}'EJ?O(r;9\Y5tqzۖR e nS>iT039 "oOYhÑ?WkLWy(oP*2S!hb/I!:$W ˍZ2gl* EX;'R GxDňMJ_4UЪ {Q,iYP 6iG8}i>GcU0uf˿[.e 57;ISw%b'PTQ9Q/[%!?pÍT%Ṓ(qtÅ})@H{mŏb9X8K+"q/g)hv?Ec(ԘWYQYU m' PMcD;rERA'AP˕;l-ΕpUʬxڿ \v̷VʼQ%Cq-#mX 'qr6؎9]Sxڴ.:N/8cE$}{ְ~;"75_i~:ѓΔ]`Nc+gylkKog eblXA&>1]MݧhͨP:þ90lQ}o]-"!OX)-;qOz҄C-"TyaF{ -Ȯbq rǨ:Q# x' ɩ(o)j㡜)VWv)aXZ\kB;kϢSb7q3@>$?zQNXirtTi67k8W#r) qk\]Pj:mY}x6nŮf[Rƛ){x,XZp&|[Z8-z>*J3kIL|gPJ NUe^YM0%`B"}zrOku] kv]<^?- ~qY=5;߶&{>a*̊tjURl0&glmRE=DH4Ek8>o&?1\OӨODcK7 WL9 (DZ!4ՂPCuc Y0PnJ+%#';bi6:v[z?I QTE;,.+F½oZ82٫:\5Y9-tDy&I8E`tp&%s14ã辫v?ϕ}֊dԭ!N5jAEѼ9E3Jjd6 DO=V(X[Чᅛa(ͫ[)r )6?,Qt:GY6e*8,K1-3i(4R&1؃I_Z(c7غs<`p?8Yܭ`PgY9M:l*#M}+#ZKt) 3H2?"=lmJ r(sjr:V%8{lBuڐ!q+p!=5˛T{v$H".\^5w? Z\B*1 ,LOMo^@G UaaݽD>m žڔ.RtYsi)|V :*Wiimtjdog/-ǽaNJ"3mǐ] vw #oi(M~gPf*]CwIgA6,Da9^wY7)aXaGIsa^+]͏ޕmH+fN#>KW2Ј@j ]nR, {Anj(dVۤx$ȨGt|0G;uQhlQ:l}OOO}olۈ`y_|Pș)5Tl4ح{{!%Ht5# .w}ac7)A1&70\]ƹ3៑A2@TwW \ I^Ă @RbJ&צ[4U^aI@ {#U݈][A%'ySCԒ^.FTW&5?uZj !m9T v; &ݨO>(.&hT~VĶYX>^1Xs5혣?-ÉH0Z ¿\FozO<+hB6 n,qisRt^,ǯK;FY$hZ\6 ,WmѺ3)--a,GÒl86=y(&+ܞQ I; *{+3m\ZTH1'aFwZbIC[[*}9 m+Shl$z7 Tb eye90#JiVId K- ֕ F[oZN!iP1 ĜhmEb)2|}%XK coEY ial_r iG@{0ϱw| |SafĽd DѳH{7v.W$;Bwo[Gleg$'7Xb H,8L a^g)$6pQDC@OQ$Uvj`ўBr8YصT]iA z41(ym[ku-@J+~׺::DɆ pW@t nyⓚPNYNp)UPa(*uq9'q7'\3 $ rү|y_%v^عv {HSU4VK /MS-NFb3]$Laᮯd/VIyg U]~ _*[j>9g" a=Aǖ v{$a4OIQcPt|HiW_0#m̽4eNe$H٧..Gs}!jk8QSo9QH*!w_*P;U6o7ߦPAͦN0v<>~߈n3Q;\U辰A=mMQw FE (%JpvJ5YQB!5FK HEפC j2']nü,%uB1`Q evx0:'F'ZCN g!ri6NMlXWƦ2FOLV+Gm~u5U=*Üjcdxagn X2Uu:^#ȨdALѠ[9)/12>m[6><0mt꿠<|6+t^QaYb;ikg#tْ=Σ"Y ͣWAв8̛MҸteI}1Cjmuer _:ܳ܋2P^5_ر iuv5nn Eu;&Kjqz_*!ED*A5 : 2tNZO f!\F|^Zo f/ʻ }IS>'0!9Cߠq2kR ?3Vߵy7R/=9vc*o2Kc=^` ϰ I1NA|q8M5,K ]v23Vؖul$(^*,l ٯt%Soz&eɰpsѨax- w@ ?CkWR.pdZ&Ca_V; . WE ) р8oCܦ|d1nT$?İ aQ,]C/#1uцaVk9ջ)RnD@A"½:ɀkV :[b(]?-Nꤳo=YXkrD+\ĺ:ؘ ,;ښe\ NzxdK_`mߺ&Yt5a!EV;|; ^ O~* :;GOyoS2Dz¢> Avs\@Ia *]1BjɂisC\gfOmĖى ih"9iJ+J~j7eQC֚݊:l´U)tY|ig$᷅ڳ|+!c1wŢ n=2 a (`PL/籺e#ᢂdu [S 0s wBw8+['l≲Bx8(G7Ԓ2cte".QfGٰD ]W9bIj0 vy!WsK>tmĊ '\>! rA zs(cPa*0X[3nx&g*MvS6E*ঝR\v5co+&sS E;%NDIVUHRT'ѩuׂ&4( 1EpQlyЙs=jO]))-9*8J쩫ьm}1hk T $4DJ;+qf=Ý23dt,8a+ Mhp ] IeJ$w0RxR$_)R47:M$n3M8SKtXdYj#hACD5υ ΢QO8sp[&&ӌ}?.rUȬ>Y̆ΑFzz[p#=Bt"LfO FƯ̕n3Hfn/FOoryG!{Iv .<<Ġv V==8c'eVmvFh}FǴ/ؽփ-6$8?(]z'0hTɼfXĪG@+W/5M$p Dip tdS3 IS`ȣMν4,7lc*B7R,56@ ؋S#D+d9; CP98;|# +NKd_hyb2#k}A>=1;Yf?]o59jaBfKlCH<3  X_fd;mXf ڔKdyT6r[w_zzB۹jXN>$dgIbNh஝Ptُk|;NuaZF3Qf_Hڲ)p6mbGu.eg9gחAo4hj~>D|(~$.~}¾}ƙvoL6EA#sQײV!XèfY)ޢʜ4Hx^ڶߋfd!=.^ldC@K4^g!-r/=xKAn<5IȽPȩRX Ś ) Yih!̀ĔF5߂7*K^/1~QNWU~. f%`ܞ1#8%Ҋ{q<Թ+6?&+W[fχ?X )F9R*S{}2'ɒ}`0\$upD*h:Elۉupq sp7o!%E@Dnn.tFI6aV&0"DbZiwdk/TD2Ӑl^I͏A\VXZ%zKe?5N?3#~[L洒^bGSl6)|cɼΐ[$Wxs4N>RPKTV#<_jqvP54yKJ?flM,:H-n>A U咦 mL$η_@zhbHa",U(˦=;R> dtwmO50:}%˚PKn Cpm:mH:w) ~щ %­0Ђ՜clf)D矬ۺ5S);=q}a7ϒ[_/y|$燣s2/o\Q9jmS1{Ws-p`KK̃(eJ :UגZ#v'AHNb R uu0&|OJ<+Bm3Xw`/ jאxQk}$Z b@?u/: m4B21 s ]KkGS$ɖ뇱X1oމaOH8|X_Řkj_K˟OG`P0?͟ebܣm4JAe|^ k?Yg21Q(;:_e1~ݏFtWxF+kb~t〼۶QgN&Q2pPC3ŎZT> 2OI*Fj2z`ͩ+KFx~.b\|x'qiMWk&PRʋXnہcH{-vR- ?0l۔H6S ~!fA2(1ߘmFwJލ *ZBO? lMq6K]GX?  `Z F_.1ǻ{if*9ՏAXo"Y6_6<߃x~yPHHrq9?<~if𨩓S8KD^lNx b֌ $ecC1ߒ׎ &I_A\$g렍nmXGz낅pҒ!q45Km7͋hV܍3r.,I>## }~%bON#W|b Ξdyk*'~"+f~^l'2:4Ahuvقs'19d̠-O4GjguI Cpw$FVq~ug4 Ṿa ۞^RNo2X.LӇ" gOuqZ?PR-7_!f94UZl)Ң0&m9֘ŜC{3ҋ9]ol bju0a45.X>[nގbR!kW=jΧ \l XkRl*T,3kj`MfClXcOCdI3"_whB ^JΩ LDOP(`KS^T0'ݪ <C`TnG8ЅH?~:5d?9V_=l1a@mE F?T?R~0{C*&C;jNHV#/4u6][ \(Rp;oOopO!hIRph}0qcVLװa &|kf´<~Lr#`0,_HJ!͓Y$Kc#:o8nzY@PdC0}H,^1 68+П&3SE/p"8 5LG_L7E w;iZ8].3*]FMk*o;'j_SR,x,C -5ٶi%9~nD&]EK÷Xz+Ôv t$ =HQ*KDfΛy<>j[؇ynUAN~k*73yl}up;I]/R\:%ᢿvDZNȢM($XcIl0͘z'ڔ RC"ӢUq󲝙X宻Kcr}f|AZLtcZ&NDW:f}F䳢Q;; 6OEF+?9`US"8-/{k7m.5 "o5MjKN@BHsЄұGF&DD1rf%ɰB}Tp)UdJ^b?p Ǵ7`J@-xb*UB;gΩqlcJ2K>Oc;N*F^:{TlHPQEExI]COb)N=5Y%Sd 1~ 6(K;j,@t# D@2J[Hhad ' v) Ԉ66 ~rErϬ6qrc0a':І70|+҈f7‘'nIk~ #Z7IfK!9NLuT+C&trUw<] EB4]P)^ #AQ.2zSQ ٰɈm.U>:ۢzqa5fS8[톣O|dJCzRZt`d5J',ӊ<5XW(f"6xܞtz]- 4+_Y׻^'-ZDaadUq?Xri\ )@+Fr8Ab+oLP |z ?S6h?xn=_LCyKCXV)A!Ar~%eq9E#oX%M4 e++Mgu9$.Vp%wU9n*L7(#5K] MA8Cc%n|e, ~tlpk#͌p7_]7;Lhrxk;Kp4^Ϊ۪p`N~pje>$ uE]ܥN=*y&Ӌ@Uz  Ձd}:N<kEd!U$LFTXyUHo-V gTߌGI+J c_($!˳рJ&Jl‹>jGL mCIod>ə8{զ3Lh'"[T0 h]Kk1ȩ5 ITͱ[kLˍ]jUoDM@?|eV ﻌ8Q[sJXjVG[,) 9F*̛vdze#Hlͱ7uKe9 9u%suqwd.6yfʵiHGX`b ­8o= 8lW-y Ab践)Ԫv,xC +z4<hVWvy~\}]žl])^~-ziN![Jc!=rxWϒ8c*WAŇN*殧PNe-D=(rGX=Uq ީ$r:qaKVjw)wA7fԋ=][g0d.5"9+C.V-i9{\HDVeRwRIz{v0j&Ɵb|A2^?pWĎ2JHa "uRYv22ڀbig1UeZ< E{Z@ҧoE$sDp&B|T[әQ91Mvi7'XN+߇ԊHhV:GӱbHUaHE/>  e-pNr\`;!~nR|cEsj-4?#|BwAݿ:Ӓ` ptW7 o9M} bu66 !D>bQ"F#Zyd>Άd*? /F Jȉ>af!h*NdDLHBM4d "8Ύ@ЅU1)K\_ ޴da]8(2.v% /P.4ot7 31}Ŷٜ)ÑJ5|lA^:RYM7;Y)d<#y`*-Z'?sNwX\HvVUmrʧ*伡JkkDD^nvZ;Mm6ϢrƸgp/;]EMEܟvf\P/X΁n88E?R ށ z_t@("N"P,~ qb=S~>ǭ%摔<x'7ʹ(Yp4rw`pASSm.H NfT^weBӶa#{enwYQbM ~揥2MYP-7wRHěﮚX8u֤$4`gRYׯ@EW}sB1,qS7c;iT^ w[OkAwoCh4i^D)9R ZI^fkK7&RqD聎!δgG(3YDVd0 +ސ2vVρ=~ ۆ{yQRXLAsp/C`Z*Bmq2^e|8w $؈H(/# o&#Ǭ&WUF,|L TC(bM!Ѷ`*pn3@i<4px'zѮ^͒D&ӓo16)L[~ԧ*^\ݏVẁjy |wN-:uZ9,Yا:Ȅ3@LfWҕB c+ZZ62unRHhj@$)n^wA0MBn/&6ӜsB0AMCB-tx6TIHj,NLp`ܱR! +p3W|{bbEi! RĔa/j:^ !i땝1.y8b4>/Aʘߘ`[dOPg]ۺ%`6zg_0NL<1Ńۂr iO"M:waf^hpyşgم|xynO #1rQĉ `({[i wji>P*8jk&r'@Z1hFF3( M]ǣP(E qoPz0SҞ _ۓ|Ç豜Z$WZFeS"Wo͞S$m<֤\(k(H5U{b뗪Ѕhbނ=ZfCtIr6+Z]|ѣ ƆdbYy{8Vz @##؍Orw~AX Y@5dr(y."'F,_[7 EW&qh ũ0;O&nx}2Nv'7H0z=&h}:o˳y@T3qڐȫXX\5bsgDi>BE%ЍtC.l&嫝 iY4=UZbc9Z^ \/ ̭tEvZ6*Ȇ`cKeF$e9f75̌xGzr& Sڰ@]ֽ1W[$v V}mqk|;X9d~OJS=w Sy!wÝQc3blNމB("J;Ԧ+~<K.я=bw3'c _\3~a&R8< D}o0) ]s|qaG{N k05Sʚt O7&V T{tڗʼn3*.*8-~TIchI:sKs"kO^\ y pJsYn,=:i6R)A:Ņ>з,ߜVF/OЊF~XR d<5mF)rBBk ~P *ڣ-3i?ȓNEe~}['yv8[k'"K_[>yO3G`k HٶiFavKӟn)5eY1'/8Ni#r!!ANL'RFb:}'T72gIL2 >OCkݜVA?%OS7z)b5f*KEEC]>N:ÿ} " Y®I=̴OC۷ko'5.뼰m@ JV1u"9g|@w?Yc2ٍN;cff("qH26QpP@J “;XKAb/~f:+|K9(Zr'`;¿iA(RHIslv1nnҰ7f=,+F1?i /!<l6}AZ~7 aqg> ECMw,l({R ՚B)TY+(;r0=yߋ|Um$xF%_0?m$)nZhHkK_ t x|r("; WG?A)0l%JO"Wb4 "%Ŀ]Qtuhw7ewK]Cq;"+18+J\>,DIΜX]i9#i녚;h;@ӯC]x_O3tIg?''1*Tb ETY~uS"uNd' o/-hz hCFLB;)v 2d|@?EsyIo Gjˢ)>#Vq3HAX0Jb;7\Cvo9N Ydqf$0io>NƬ5|KI~: Y>EУH8>@`N8-7U Kq΁ z?Dez \#['5Z!W<mxҤbZ>]7aNl}no0+^% ~FkvUefH&B:>Pőp-0MHf^b uI1f&,:;v ݲj5MS]\7x+mQ ;xY!燆ٳV?4:+'t;BBPW|<{ϣ   _/ݞ@ @QX`wȟTpKi.+?^lTT9`/i?l٩NS]:Ÿ;]3h[RK-څ0,&?% @uGPT.>߆]pDYX2Rvv2DVO}5:wN8+C|aa'9z@]]CDǺ+ѳhB DyDg {ނIHk9p?h gv]1̔l;Jǩل;8̞|"2oD;nB/2VÎ羶cJ98՘) ;%,"f YJgȪcDef|rF`Ɩm- WzCU-bz~muCׂa+^4Je#u0~jITSMmpX?^-3u|c@A7 yJCL(ۍvD*ws8̜>h i Y %ej"lJ8$-R.ۚ:_U4DmRCiMx&P5olGdsh qoXz̞KZˈO(8w"/S$>ݎ[f^6O=\;c7|031 c*)HE$VL"6T v6$MuyeRjnc{㧗MȢ *,R6ܣ P)*qpį:9^K;ܖ1\t3pGZp¤vȜht()KDDF sU_3}SGDI> _}0ǐJ7 ;lu?='27,v2ۤf=SH8r(^BLp9&VLC򥰃ڡ7882*z6tWeb.)R VPJ?DL^xѯRڒFϒ;^mPy#Sd;HCPseAfw^Ewe*kΏ id2, }zi 3K\,ț$(>aq?>W AS~dVD nخd%f`+Q`tv[a@@MUqٝL}iPuinFo@!Vk_ L-$PAό{T콛)+05ɝh6-SȂ (~{JDW~vp,`$ !)?X8wzDǐ"$Ęh":\UTO àI FB8 wFA ب ~!htև$# Ʌ5#-ҸH]2*mʀtng;a9FF΍wxՎY`G[0>lh(c3NU7B~ЍD|B@q&| efg&(V6W?p逜 FHQ}5E΃9w1HbwOŗ.&pR,IvŔY]h&L`P6~% Mԕz9ZHzܩpn<U=|s74R%3C!鿯fپYq]jxD93woNGEGI|}Q~acBqwHU)< I"ĜkiV\+; ~wcI CaԮ,"q!M`~': q (_HSd3H =tTOi VWQ&;F)?(}a~4էd]XTIOL6653 {ܜ'KALDH<7kYrߨVbIὁs"w1ں*h5|fc@\8`6j<+¹V`ޟuh.5HRtq'y,m%Eɵ|Vy| 118ts?;ugP/`HuWyV;1Wh.2T-9Ka&פh^tZ@¤hte7J|4.tOgd9#k"NwqX`{qa;4%|/k=]<֫_~s4ԡ@=5!A]l9b=i*>(,pϬu 42P, v*T* еug/IVSR[͕ }5ێRsm!-Q_Hz{G;|-&(-'5]QFn)O:3XɈW֎A ZV㺫?u)2٪8 Ĭ7ޫyV;fxI9saki6.@}M3aӽ ms/K /rnAx"k-w)9 e,M#='#h5a=*])w ¾:z=+s=%a_㋁kܪ"L|bY{GzNO^tphOwŝ|rD(Q(b2 kǯgPW>R,¯cZ#料dGըу龟"e}=[o5k'~Uo%d+8nX݇Rkxw4 `)ƍ HU8LFB4 ӌء%7WõYs !N#Ld`UQ};/}]{lokc>%A`, 00Tu|㉹/rӂw+(b$6MPY3smJ-'u툆9G79h.Y6@QsHxg&6:m/ hSDsGNL8:`s-?HV gkdp`=@x6XБ*#FRimBqopҩC :I.ỿns7M4XsTΥezGMk>ܩeޤ3ʨ)VHg訅4U5ه)c=l`kM1iCvfaF42?/YM_ě꽀C vtH }lcUjx@pTXmOk򔻤*Z~_bcyA2C#=YqDp·|/rtYNw.f9%dcNN}tTۯ'ʍtQwh 8nwP rEXHIi@f*⧮<ݽ\ W=#hAdLz:yLtYE\]s3ki_S/\'UY{Lh $طEec-}pn)nK]zBc:!|_^*4 SUSޚ_;;bw ܠga2י ђj9iCXsW;Piy-g^FyœA']1.}.LROp|Dk >}"bO}8>?=xǮ@`AUL3܅XԈNX.aBӦ-,m'2V:M8ٸ=.*<6ngAܹrt6)sQEɛݜr}̥19\"BN33; !7PAǪnIHaeI=r*u61Z89Yuu`tfHQوx.LЃRXn˳ScxGh4*9ˢ"KiS:uXhLь`HFC͍{ɖ22vO_BQ܋V^ /FۓV?T|BINS 2n#ӪJJN)P<陪:Dci.oFBz6IZȻ6AY9u]p'C8Es/,^L~B*mtȹvSO\FgmhR,VçOu,7)=gMn}Jao-;OtmĢ-!)GTÝ\sZ-'r`s&/a{BӃִ|1 +[d{OiV2h9p8Tij j-=E;^_NqÆ3_6hS{3aaE][5v\=aP5i 9휃}`ZN~Mm, "ᾫ2Ɩ“A7g)F3,Zea eG@.GPEf Aɓ#6ɒ^jatR %zq{Q=u h.P snQ²UcS'EB? lmϴ39j"w8 ; );7YCIb :~%3*WmP nʙ* u-pGI:@'pW>% @}f[4o{HuV| ѩJu,>@H+8*a;5<@c~k(a4G˱PJz|d+϶?AڭA\fH;0#NkNt?'Ko(A:yb30DS)2N2^#sAqK|)j|r睇/gbߋC((1(^5q'^1%+H%>OM$zLG? d(!B D"}wX8OH`u*ÐP_ѩ27PΤ@-~eUy@OÓznTzlSA`bVdj [# Zڠa;N`+,"-nEKC/4~lzY2BI~2~9+ٷ,/j2?~f⺩NL|ߍG`(D޵BZjfجTLɕ+hoC"= R*ť6"ϡNs݄ F UP{H:)sIeS%f=_،t rk\c̍Tzp7F>^~isުWg,ߘ0Id| +!*JV |sX L(rU[ ug3|БHiJ  hb8aU6ż&8hUKOak0 7K{5/$~_7LٜP7hA)qcAq)KMrQyQbצX8 'B-d^P:Y~| HF_ ؑV]j{Sp5d]]WO?nK@Q/Tocxt#+ 8B{O&e]S~,8vq(Z`g$8VzvEC[B`y*H"7P~qyA}6{U0 yX.:R״2Ԥ\V $lA=gW|x]:8RE *E42i`3aFLj|i0%gXO1Mss|\Q{+B\s($ ,͙YK<﫪]e  F&O{FOsaTWVLiQ[*PXwۙJs:`NpRGe?IŠj[tg@@Ä *f_9f㵸N'MW;z b `Ξª~ƒDȸU{5@d_,5C=fJ ®"92$1d6/Y=Gt!xT e;E;35n'` pC2^Qz/K\+y/, R2.v;ǩ@ I"!n؃e*Xnig":s~r%T}NSW󼖙@I>c^'o͘-xb\S)# .oA4sL$N˪Wj-lN$BhNy ` /]LYEr`MZ]5hKǢ6wxYc%FvA+#1 /WeY8>QfE) 1t%Ff`d!ׯ#|`byqƚBcsAbjKKd* *U\.}܅G{shP=e3cn8"q X:'}0ce{zH^^q\e6 vy3,ک9h#r5{? ,KLCJy\Kg&`JS%f1/vȮBx[=b{Qd[D_v̇ieE5ȋ+yAMmlzcE׎l"0jyx BBpiio o#M#=2V9qeWpYV'jXBE .s[v8>9K>Pc9aijb !aݰ̼ 8s sP$"S+}&t۽*ֲK{PCB+rZùKA]N]gű;I ֚7Y –P!U)VUOuYQjVv v̶U*yєҢ>yeYU3Hƪ`H֬xhS|6aXɩ3b茟 =WqBpyvP|Dϸp*V tSBao +n_4!=c>'{R$kx)-#%/LCqԲ?$:#Lb>U׶Rf.{1}Z #؉9IsSD](ŒH0ȱ xF ^fWcB"&cED[|uW1+)l=G  4_@r&}(E F 3 [Ա#?uDiQASdXP @w}NK8l!;%L"Pi9M5qJ0$o52U1GPy:N+^w3:iʇGPlV\rFJ9TUp7ª`i ea'oeW3 ?Dù9"=HWyspsQ䇱@fۆI}.^M bݫS[ JpLn~ih!7zr5+MvBs͞C0 7WJc<=1ơ'_д?~쎴ӜB? 59*2mERZ>hNh 꺣tzeeErjbcE{pT*KB`i( \~AK(y`O-fC&HQnEwCsc6d#ix'sY:a8Z'z]Oש6-O`/})9RctQ4{d< $`Q y~ƈKW0lj:5hSS{$}B 4S)%n# s.{|{^YcfF ջW^-bGj`EB 0d`P@sӦA P?`?Hъ5a 6OSQbkǸeUmU.͑#}kH,|6/Inz;_%0s^Z;EQz8 Vto{Q6Gmޗ:6yNjW* 7T?.U4LG4NzoK~<ư]auL:CXi[ ^ F[WҕIBҐȵԜѦ!Z09z Ź6H=XƩM3Se<߬W1Q9H0OJ?y1Ium~ES7vp񜬼D7c1=|ƤgR_+[ (:$VbE{R8L6$-Y; ߜ08JbR6ѩ8d.{/iCȱJux((rd+٫9zү|l5p‡8i/KQ%uE;ԥIIxQw$}eO1; KJæPEh4twxsw6ӹc]IlZh?-EP"Qdcgڅ@-`$t2)Tn^&=nnҿL° Ċi@?V#7k\x* ڌ>k^ƯMzu` Ra<={I\߹:f-}9x",ԓR@_ۦy§߲g+}pT8"cn$d%ABt?o}e+xhb!Gof!ʕ$Jp~4ԬaQ|(>BArKTw WŻȒRb/#N55>fFCpCp&_+#W_9r7~RcY~"GK4 =L`W`S[TA.&^`;6e j)a\$pNqn t}ı==GO|;`C\MKkUxzYI!kF7u )@oˎpC 4f]9}f9+&j:(s,}͝Ҋ"w3M.܍2ed,0 #, 2/ h8 '`FL@(nY2] R_9~yQ"*,ɼ!wFro~GY.0l{*·?Mz]DaIt3Q9nA) "lov4c8Ӡ _~7l8۰.<~#Ɣj95$X F8q1PՊp[]RE$Y)&*"_s֠kF~a(y*-*+3 ň}4"ip/l+d$;7R{lnuJv-_{C+>#7OZWw靋X v2 @Fg`X/pXN*4 8.4[m t7-Rg/ i-Rv$+?i9I ;A!(gᘯ=gkS~ѩ i^\Z=->`#@KmUHCÍVK䲦q~By DK>WQy)QžT-'E Gy:OI}껈&BI_01˜jIu_bAaz;I9/|m.ԇ5sAÙc34ee.a"I/ ݰcb#lm/[Mq'zYf;u4DPݟnL%cJgHo(AB kcdg9as‚1N{cz1UP; w4hxL!̀bK4ҥ>4H12=`lU}VOPr?jVu|a6ot\sԩjP/z<4ŽQ(z8?٢0})ȡ+Qp3@WGe4s9z[Ms9QRD_=7_W?|eɑpLck*~GW>@JE rSq}%I>4!J\^9 GSH}Q<{a 2djX  |3T/ha'wL<::&%n]Z{-}S_@K 4/}:]oHjG.D<9E4^e?Z?uE Ɖb8IDτ۔<-vBTC@Fj6Ir"^֞ ]U&~& ^ qj*޿F`])T{{S:RCKb7ch*ʣI42̿aԪe1:_2#[e[0?)˶(jڦkWڕSټǃ3dqPw8;Nbj/=)J>14Rme3 Ye|;dd$l,RpR !<1]/|#Tt7s} :O? !Kx K?4W_v_$B::ĝ=YouS6u\[{F?"uGCq뵚+l+"9.<{.i ?y_^闰#PysxɭHm$Q9)&az('eK?x?CV;vsۍӁRh}y5BQEȾm"vyZ%37!~<QS$8a~]y: N8rDt0;-ϲ^~;7rK \@h6 ;[ (Fzbju]7OBe()rp5ڦ+`ɛhmuO/m-+=Ǘjic (U1+j+DH@A^ȻB#A.JXP1z a 321>?(3t[{f6nLA!)&,#ܔ򩘜IWB7@5y6EJ G_- &Z"9b*a>շ|E`oNO4{5AfisqLM}=Dfrf<՟b=\^9c;[qtuFΨ7t{e]ԥᯀ\,B. W;n@jc| Y;lo\Bp}S7[3'h"G-ԗ1Vw* &<3$zF %?qܼ%0U-?HXR{$@}K!9`DYp物BxދeݜεSs<%LA-ol-0>lQ<C[cp[DW.ӢW7MP2QӸ /}_#dh*4GnS2\i %r;nyʴ剎Q"n;9~ &ml =rq?/17rt;<@Ӧ+gs}R>-x`{mW !xO3Y`_\ 45YIj4@= ;%Vrd66;Y٦n%BF?q5S}"Dc9bx*#Ӌ߮.3l ԃ F@, C]c:TL]˭͵%3͜ p VI ,uf ɢX4(șӱ; )ő|MߔKt Jg[xd%$J/π{m=* D[wglYNP5P<7SYŴ̟s/^g9I_Ejw@?a#6XV2)Y8Z(0-cq`{z2mgqL5/elr"%>%mYtNA3:~ `yEjm2Ď0|XzPr^k[b@m:Yf0Go[=uj5tL3K<˵YO\UE&3Qo&hsrϩNX+=ZNRT&XYp5Q)ލQ?۳ce#÷y c۴zw> (?ى\AdAF܊+a>OA2Q!?4 \E3jF:跩Qa >=;ߔ, $q' +.3ɑ to]"禹ufL,CvD@N40 !ϥ2aWDɳ҃IyGTPYSi=htnJþ,H`ܩ)5β 4]~儩|`%]їX*KFz!?4̷`b Vx>G;vҍ_>$*hH}Ŝ{R=Cw)`~z$#9b:7-{0}-e8So.)U6OYp`7G$Yz>.Jnh#˫DՕD-!g>;4a j\ k(V\*ӈoJq]ǃ3E˩BbADBtHyE5)!HLT* _3 ՆNIt| [ۖQˆod%^eHm\޸_}[Őʨ7klNzV'la֯y[9%{(guNb6 e4 +cFv{5+%4z`KLiPTkm#łkxF237?z\4ۋ % ^bHǙƹbEE;Q1:m_lrUfq1C5^%FZV<$vTLg`nqXƤc&+ojL/4!jO'R?+&VMrXC۬laL3(9hG|'˪ zpr21xxh¬*ФhDt0@([.p_&豀:H4dj7"!V 1 G2ddM bfvah5} DD/QNC'`Ǝs04Hֈ(:dsga.Ɨ{b ;} ud`Eͥml,NzM%yfIw%!!'P=P"봙g\evA ʠrΗl .1Cj(+<޵U=p,w(YA%.9\qt\zPM0A^bERtXo`e}UI}WquZ47Pcj̻6 ݬ.+65> 6Mg3H~y@,N`6 XhUgt P{`3]@~b$. B Y:1QƀjOk}OX^%.|@`MR]leC JW"j.B\|jo8 |KbU(mLP%>šXއŞ֖3(0:[Iڤz3鱐ˈO;{_YL~Ɍ+z{Hm|oGhuh"|Kx:5b"=M)c$Ͱ؛qaNwI&Ef4OJ}d̿xcںW0Jb s09Q؇$/hܕ#fgEcBҕ/Fʞg%/WbZe7Dl~F;p6x\O n"1G&N/:+=š6gR"C^T!G+ZnÜL2%ՠ<9CD?TNR*ҽč>W+# Y,8Y!|Xx'zMtb| eaik 9-~]6(ziN[Oæx\ߦ '}$ vg&J-00Fi\{x@ަZ$/-vIU3R!ZO@׮q#J%z3@&"el R|wADw\$^Ov}ܳ{]צb:PÖ{ݎIW9/- Vػ#_`w;)XŨJ>viOwG*%J vŭM[ 6/iM*qILZ1f`qMzS=Ҵ# 2+#+%ᗁsj0 dLc߱ B !L"C.a9j)(  hoqIL'cq@Njp]Tnhy=J1"ȅBѪ^:_Q8[L|{ 9-fzB@:Vf+gh!!|e&6~t:s}i ^dXK-fZĎ5b'ɏ1hdt3k@/4e.Vz+G)jtF@$X_[x(!d ,\4Q?˘,$-ny"؅x# )W]X0:F! 8")C qO!%jˠ<0gpox~AM8N5 1|Mgy e_f@$)^7>ݢ`f5V$M+׌%IB2VYBP΂j{?N5mbE}NLCrP0@a#Drd7\\Q1\e*chmNҫy%^88uYa$ ٫kqr-cy ~; +Izg*Op'Sa56vv$- `g4zEw1cQ=y>{&:B J+g, ȹa̪9fkLƤ$ӗ֎rt4FEVp#Ky{~9zyVjm g}S6Y(+_Uk#S>Ig+P4 iR+o1|$*DGsZ+ TU8)< gNPJЌQC~!jSV[I}r[P <*Χ^ B $ Lx]Tn]wѝM+iG;.H|)RZ3ɣrҁƾ3Ys㬇ʻ.2ZiyjPߢ_]VX akmt&"LB]W j-xu*z|w,0U (A2cI[E9m%xw4VHμ<&=ѺL2 'b0z[0hNk_&8fRj>#IHKq(]>kkOfmEl*4ZND C#枩kMA lr9fF:iDx5QN9g` y?$k~C<Q>U#O/6 a^;A@u4ibTDmڰXSQdɗ / }SS^bFͷ-WKmlvLH3A. (7M;Rْݣ=v 2SRMg[Bmb1f+vKO>X={Q䥫oTZuw:Oդy{5}"PrTQ.mM i3ɳw& :TRƴ .M9#/~<.Y$X>k3+mV-JBİ";qrցPcN:kbJ~~uFl4 %RIMQLS] 5&R&Vc@#zlK]7,D{No"iiF e}Bdm`#e!ҫpq>Zd ]xv6 i- :?rt|9\Du1 7QaD4bJ/UFxk+lҙ>-x$͓: +%qǏg;*Wo jtUX pKY_L""LokdXs!wc"!%.\hOr*SzHf}G*]cT: }OgIz 4$Y^n(q ("}TGƹ=HCF,{,X|=c8%enWRR8MvF/2пT}QGz_nJ6u:5):T_\"q+IDVㄜVd/X#Y'|X)ʎ!'OJőyp൩ש4|r01PϼPDV%,H}py,/)@d]H~+ia3PSTy˽e[X߀Q}&ÝE,U3!f!15u'~ҽ+Ұ ^rG?cdDΠT)9 [^p!)S C'(9c ɩ&Z~8L0XNo9$Q;7Geߧw>%절G K SK.,F}fJ2+d/A5מ+2A ynv7vcHdU"Arj?ϋb=d5_6 HW)z^+[8r}$ 7sS8|DK˵MI[pӞ)'ŞY/Ai;lH/euaݙ/pK(%ΎW¬:ZhbJPU ;G%7@%T8 Vm XL)j Ki`ىIR Z -~-4==\2EaI/.s]뼓a^J`Dw㨝F /}@FQc>Q}( 4LC"]~4T/d)S{3G۶ɨ-* 24b'LجVC4-{ *5ExP*Ⱥ-K֭ Cn8뱙sFP܋Kl:ekI*Xb 4b?Ϥ28`hWw"Rr8ѠsV$yW6 fwM:`%TOmXFJ-Ir*i5d!*/8OݎbbX;[7{gv" dWK>&DŽ UJF4m}ٲ| W \v~' j3GmuD%|Yc5jC#᧭I?ϕmtSf܎fK̑>z^`Yb>TY9 )sm_{Xi2T;4TX*c`!F#e/{? rMRNRިht(|ATc'])x6_gx.qugqQÑ1ntH9y ^CXJ'M*y@RZAb f"h>hx.*f$ԊY9mmYIfZߓԪIm,"yeKJݲB7. 2'UϮqJ2poAr}@gub!/)waϱ| Eu^7HK1ֿ8ט#4LKzx. !|<]~SQC.5jz)5fvoa315 /? o1 l :<̘٣0zS3AcR6 DF.7z33t*?R1U!0lyv>)og(wW> xҋ7̦D\| vѦۇ8PhXE5[y7+a8~mK{_fĽr9z l|{cpZ&RE㣉TfezYB:Od17+25,dgy~,%-d܌HZ.c+[" DSu \8U}.@UNgIYG'9v8͞Sn.:[DǒB<2w5zGG{Hy QfU:wZjScјsaj :ih*EѦ'to -9KltWĵ؞8V&ph< {l8(0f3Bט3|(],J牀粧7ʚǹÞˮ'U:cnvKXn0bz|M{B`pv}2mk/*>QL:X:mi߱'j.>OM_0o'r*Bkbs?ZH%mK JJ*pXF#23a/g(m̢Kh<,a@x­\ YP~/ _}umq連gm:hX;`aԭ"yu~O+ Ҿ`ޝ+><=\sM[̫ы?ѲP5ۜmلKr>|^6Y=(4Beܦ~ȇ!4CBA=]=ENr!5V:ALo6,9nMhW}H0ݘуC;<24:2J;SEľaAzrŇ|G(^~UP:r\jzz@QǑޫ S c8kY~6;ޱ&bx؇C}=NCb9kDqDÀFxbhUvѸF o_rx%^V=^~ݭlXE%r"WaZ _ tBES#+ӧKj22M.a9#h1I_XJ2(Y+W7DFĽU?-U8P50()Z8p5 Zt@\$&~)%?o`0KPH,W_LxLձ8KO/2XP&ocUY@L;Nkd,ԣeנ#WԽxa,4&8 Xeώ(Nk#e]LM9؁P_zf,nxx4gܔ`I▎oz;wI#Up܃IVhˉT;t`[EAաHpOLMok-_9ڢ77&K] +^ >2@ ~쫲Qf i68h%`}|i ՓKy["ehɀ'KDb+f_N!Oꖤ 5 [wMZ\),F[vҵcl)ty L]SowCLEtD]lY)Q]M{:N_HA}/Ҷ,DKae4=`S^CMlˎM9`d ٛ5AisIJ @ :|ÞjK0&k23;|v:#sYE1v_|{Ʊ=ݷV %mWXs/HooK|_@m1 { ݑ1K~\C1B5~GC؞?ow8itEՂ*e5}^'>o Oh3/bV".p,쁲m\Dj`jig׼n0 \6Wv{>j}nkPh o X@cqӬ\'^j h̓d ,OUp` .7ĊX3  :>%pnl1b|ZSaVhWӀ^1 { ўx 27Q{`)̝'0wY3H3ІCwZ)K̸.P-nzuvXr 0vsG-bs !GQ'f3VvAx2H.1t> 6@"s|vR ۯ/,S~BhM=F8djT"8U,({l!Q vp ncjs,{abS|oK%^,ēTЀ Dnm,sR)%WhemQt]sx, 1?34{A&lLE`ڝ=*ShiCcDʨ%dLgvK. )d,%'A69f Y[Lf&d  -FF[*YÒ鳹²R1FiԻbFBQOWfaB{(=c+z )ӳCi`үb$1ӂK O{t]KIE|\j|( cf/ ^B|sK꼀G;@VoPq@VGEs E پ0oY=-.bĊ2!~kq>2Had<@-\nKRd/pJL>uj#:$|m  {]+>M?a8ENɆ^KE+;4_rYbf_խK-gp&v X$ hn7.G:UQ?zOJ WewtCѝݛ6kWGqGV%>RgfnkLgx[=Oboߐ_]By—@=kn>w<U屄h0D\$#R`*HM(<51Ȑt Vy,4O@g}KRE@]z/:-j)ۚ2Ix J(¼yQfu>cRq7D^WDC`~pvnxwO^(wlHbڡC{c@PP@ 'MyHm; 2hF+^% 䇖8CxģVp]jdzs1*sC6<*E? \ӶΠ/z=];S?숇=h >݃>kM1cOwSIi<%QBɰT(h yU}R TĽ3Ktz pZlJT3-~bk/E}1/@ܑs!!-7N;_Ɵ|r7F*yTzڢ _o b3gxӻf\};;6oZo=ZCI A쒠aܾ4.[0:v(}͂) |1+$Ȩ9;p X^]5:qty Jrv.B;ˇ{}ceϋxIB%yl{Z>!M Jp\kAA=| t 0g+FT@H'R8*sw1p8Э ž SEZM Bx+fƌ͜舯TG'YSѧ NZ$tjJ}9J@o,(|3҃:\|cSgA`P1 3FAq^y[p8FFJYo N@mV>2Ym-wJ5% OUV_X9+]Q Xg;= pA+zl^is ):KjL yʚy㮒 wJ1.v"(UYDu<֑t$S9.QeJ۠XƆ1w쥫O$$zQ ubit ҃ʾ7ڃ1.H=E(RA (nT7W)G:b>&LJZRz|Ҍ߫mT`Ij_˜qa0+Kl eIjm\.aVX"Kߨj=<-=bˊ1&c JM|sPtSVwxҀ&O]LP2+i ڲ"1Xrݻȭ_`%ٱj0O?.J__҈+FEٕc"yƙW< .DiL0vEZ7&-FZd"`PD|:]l!N;ŭȋLI|;TPz%f}}4LCksR~0,xUѬr0*BNY_jEϮ- z;]dha4'1`W_*W6`ZzF6 yb:t%dfEj%Nquf?bFڞYC W[ZD+|+0 [[_+G"3rzQ,`KX9r{(YTΏ_[,Eg|$qL 'uۆPery/!uy)g,J[sSv&g0E Ur{^r]cvվ?D:GeПnFI!bT^z4vE~./4{ 4$'v[tyKl7Ƒ1~ a;^?JS1x Q~'Ȩ1=*i=Տ5~F'>4eF"!#X77_<33꠾AYM~j薙oi5Kqa%xp => &՚wF; A$mtqd a=#/tK:@~?<~DSzDKJjb{/E>)0\?O*]_yvءF.\{lp%!R8stg}87赹M 56_Œ;AEIF[H'sћnw .0? v<3o;lbAh'U2FwI0ЫF UґHx+ͳ-<! :U\lͽIoxGIhSxl>0cc~g$1ԄK 8-Ѝ?[kһXC}0#uֿϛx)!g|[.zY>mR9jf.@pE.h?Wn}.6şW jh(_ж4L{&BEFOdqQa0rpj`Z MHv<6#_+DEN Fqҙ jE^,R6>{5ʈ0/tv7Ͻ(¶f}qw Al[88Q&cuPN [8>:Ka֮8DÓL7A-){Fqb˗.X @'T(5\NcbԎwwEy[87pk Pdz@ɷMb~MV!ۦM(]N8v[ֺ+wٻ6!~EE @j,IkgK+ ; n0L[2v9,[_bȥ 6io"Ãǚ  րKx:*8ȁqfWV"J/{ I[4_iw،q?c)LbҩP=Xo"Vl}Q/tI=8F/`9|GԗbH*Vܠ|TY}¥%}~\ 7сÐDJ` &EϦ^Trokޛ \rw6aL\ס޿N xCeMpRx@g+wMEEʬK;o!~^&\܃k7KmE fHΔ^E#@ӽbz7rBa½u.,+ӹ ܝ><.uь+z L3mk ~\{6 Z&H#Js>3OzMdnc1B=< i=UlᲈtlSI+ŧT" M5-x.%g#U!w"OUħ I%"wveOp8`2%B'u >; }㝈P[ |iLEP DsEtz4̴⫋oy ;`vO83!Uh"{hɺ`٣ cm!>[k,DZLquiV J½SvK3'1@b 82jPW3h}mOƨ@EU#7UU7LzM3Ҟ탼|~o)pT_v{hʄC1<@cwa=&nrc?0G#?"m%\Gipy9rfз8gh)@X)AH+۶6)hDhz`8\D񻯡 ݏL)P^h"}э:nhEzrBa<+ԓȷÏ`4po3X8i"=zۊD݊{,Hx {16 o4V<ύg^"(RP6B2#OsIWPke7Tٟ{ :2.<fubCVO7Okc]kf%6;(6OK5XQ5,NDZ VUՌ*YU12P8tF5͇ 3Dj 8ܬ*n}I]dv06 :{}2'Z/̀>H=|}vUUZ"KeG4K!fHjGa酨|@ @I>Lu|²xP  *d9P6K] ֪^Eq%HWaqO}$+=0сh8mV۔\ovLXAdt{;/]WluFaJU$Y/YObՊ@y3{rFucfP?I5nE7#g&4(tcH)%F[Q?ԽHW8|1dQ}Ta]-/o$FT_ N]VcdI(75ʇ~=\pv^>n3~FODKF^La/L_ 2DuOt\JMɕJ+@^?z$ $AZTI%q(  /qa%peQ"%V"`,ڤyGt6^؁HQx`~|/q]1[K`Zfݞ|!tPr.fLZkf7 G=N@>,ѭHfkZ:<-Og퇙R" +L5@;G_D~!# _8JcDM1aT]^q2x.;vB5ҕ G xwĒSt6Ù!Jgđ:I'kROCJO# fa *2 >N;/KjU=',>H)f9C[FlxN{8.^cT HZѕnw 1[6T?Ž A0K!*:d[n֊xt6CD`E;ےHH|È3]`˹.g!7ړȺQ~|BҍC:fɱ 7nj}Eg)ׯuT%¹)#ϟīhsPnEW)5ɤ$!*>#-VA ;]}搧{6Զ .Z-xQؽ} ѳ_FOY"ѲQgHq}h وxX% SKӍ~ @ʱ.m!%:D @h/6Gl<1 Ř Viy+G=sY 9`{MT>d*s z΄猲omDYLS0,zZ˽?},\t0BvzΌۛ̅J8kO&6܍ⱙ|ژ@|COe54,NKYkΕ 7O)T]QIP#k s^f(Y~}m'%O1\>A H/ټX%e69,2)ecw?0TRr#ROڞXkgUxݣ?dw )2FgRwqvwGE΂ȯOu@.!,ڐ{?(uG54hXEQi{ɷ#Zqb*'E0::6/r_ITr R<ۥGߠpdZH Fxh]խP xku"GxڬʼnM=DvG) CZ?BʑU{cI*jW$Z oW ? ^BΊUxYY|ߢtК$w?s8iT7w@ugYT^:[ [il(fJBtġ"!SQ_ZGe_QK/24,YߍT lfB156-ρCvysՠL4!Ao 89QPWX+aنk&Мɂ?v4F:)t_o Oi.-bx#w_wF:%JzMx $1}ð1}|tE)ؾuɅ0o,J#cP\=ƠUG/~4½ׯ#1%ǖE:خXqӕ/ϰNc=ak;=HQ֌ SyQc }"g!wqunKKwLБr*u-{(iR7N7bqSdZ%P}J [fmo,׸UL2=|QU,_bT$> 9""VrY[!@VɅ4y7":wy^y '1jdDL=|k[/?}ss7Sޥ8ދwj 7ß )b2Ic_Pmxx:ݎCz gY8e$cZ|a(fua wyC.u_5#BkGͤF{ROm,{aY,}Ud1d(Coҋ އt FÁ)A/~'}f@w6]-<^ĽM;MHz(};GYwuGɷyР`k SzB)#;ik~7b^0MiaF֨!{CXuPI"+S9Uշ0 [}iUw9Mܣ=v.k8&ึˁU2~"r_+d!\L#,©=7 bclU3wNVPb@CLZke!ƹ2x7qOJәB]+!O"1LTNVl[>Kg}Wg*~͂sS/% "@"b |>_ѸMB,旇q(:83 Tn$v_$A>! .l2n\Fw\SVȍFţW#Z]q&ߑ nic#)͠FA5o39}JTEOACBf,@Bqrh>=b%]r:e +R,vMga򴃼,$apj${sqZ(NW.ٹܨ_>j[zD`y[IT%Bt\]QɊ1ٛ'w-qcNJg^|p:ɮNhy_u6H׍9^ ܏Pq ʫ yC UL@zY|#lDO WIZW2q3;Ȯ04=R|V6L} 8hWݬ_Cڕ_-Vn,e -H`POBoWiџ.$tj}Ep޴kkfNUm *#BSwZe>:bEBYLN#ҟ`T瓮NG'(4\b?aX\ehSgy:(tWZ_yj WXL`2ƴB"Zyp~` pܴMw:Q'1ިqgc\Wm<[R1~rH¦cE4V >= -SAxd2m iĵ:)nX#b:t?Esrl[fuS0>_7I-Nk|HζP1iSYqU@@hL ^u#A5 0[0Vμb,mVQc?ڬ~}]1rvdCX qΪt-*"A]kّ%<:QkQy/ptZ(v|l{_ʝzf|5Q\s^Z2{: qvZ3BSz=iMH1ɽ㤉 d\'k-^OtM[hj_PRuC"!ǑsU#ЮԋHKHTR*u' QxzE#(#e @ɣ?+R];+).&Li}Ny:޴ka tĉ,`"ܛ6ٹ34)9 ~GUWpQs9o7oo]j|VEv|кL[ts F52N;)UA62bx|AqFwyb Q,lt].˱: { "ɂ6q}nli?@Q3tMka Hc Dgȇj ת/d-;֤D//$?ږ-Й d<I܊6CU20+-eҗ5ڑyŴe<,գYn}WRBvbc}$ ~F$ݨ)'DoH! s%5d97TM rvsj|<jSxR߼;r_bi ᘵl)]͗WGx1QHC:kZ~#y_i2>Zo,:ȿ#?;{8u><!Sjre tԈ#ri~jeO6/uߟ.Sgӂ /Ͽp[\)%+f]ȤRʚj/5^o:c0jY*Òjer_/MT-Vll5_Z\^:=ž#i 4mЊ8BτBh\d&iqС HxI 9@o'5]X 1 ᾣh_@(?J1b/着Tǖ$`בo jnlR0JY.ǝs0+L ćj =QN͢h1`)[ؒ$R}ۅYID:Zpa39Ml9ѨPU6n6 7Bx1:qcyhY)dTCii#*lޤxCc3~$}!FjF$.ThDx7X 0}I u*2J5TAf[Z2\NA7~Kgs_`͕ Fkl>C #j %+/ҹ$R\/j;cS^(whR+ ?YV98T7 ]<( uخ10H~eBBEN> 먴)rtKO-^u8x:\T\:14P;8JzR$:X\!e6QSzu?`R8`>i1Һ@Lmޖp(!דl*xPLE\4lLDKMVI^bfh5kJ3V Q % aғT5?Dlc`Zѽ?Q:Q6"X%dؙ.kz`j%4 *m/~w?Cw'(I^p93h:_ rDY+l4*pHui=!E2k\Z-Mi8A_~zжzi^uPr7*в;fIv|xl 0Q*/e6\ &&V5V)b5q{/cj0(KT4XկƉ88!tn}eDOfKrĺ}8в#Ge/͉Ety|\\ۚr0 D"\ƞ#IzK$i[nq4By'>:з淶ߩT)"fR˂>&\>\0z IptɒOOs^(vq̈t ܎a0HR?iAM-X?N4 h7 m 0&N( o{*"z` ԩ !&jPwVZ|֛=EJ_ sXb4>˶uᖚ[|;I 6IB^2$w N& MUϸ:Gt9z 8icz;|,iJ1|xvx J{;\/\ T LP!AW0ZHū6a_+VIkVᄎ 7 S&Lja,Y[(A=7kcLC.Zi;_jHqIcEŰiNAꋂI<0ٌ:T<>ڪ@v!.7@AfNE죛eOk>06$lw=Ѥ8hB̵k9ֳ( Ln)"*`8r3]m fǷswډJ>)As+|(l*AUcЅ}`(#cQ TAq䁕M~.%q,D[GWo3&ޫEsNUSPG3+'r}3IEk_9Y< ԕIzٛSQۘL89~sqIRk%xOkL/n ܋;c]X(ۺ7?O~IML5{u?l?[lačDgc#I_mJ KY`ZrBxPh*\I2`^h{Ֆ,oSj+I&㢤̉ 1}%T1`WLö.@UN?e  paD*~Km+C v䛢]}6Td8=B/icgSLHL cb\!tI/7h;.qv:sb溑#a"M73jRd~ELtpmTT@BT6gg1Z#'YvSW Ǵ8i+c.bA*QYU&}$=UwgQk:lig"sԡ}_ y>N="n=ed~\XWr8A9[R'dw_ ]J&#iV/ zvl#e홴\[\s^|̙@k!5pBW9lΐ+$¬_5Q,68%*+Hmtcّ{_鿝8M]{z@ 3xk|*2ΊM'C8{[+nqŦ&o.Cx~hv92|R}XF3s` &hzЫܯ0@§O4#"̦jh[خK$Jk'Z$^_& {crAHuBHBh+13X![131¿Lň&bLu^ {ZSJEhg44^VfSv[5==/z8Ҽ[@\y?2@LA"ؔ 3ܛ/.?U{К}*˱zΗ1"z޼)@lrvn먶lY+:zJz~0YOV^ExX9Eq\%*xxñF3B"5x"v@@lf !je(5ճېKVn3HN{,ȨQ1XSPgŞ1A,EO_Ը,JXFP#"2-Ln2Al#9"{*c;Wէ]ߴ_u_OZ` fO6yM\KG  (QeӀ%~f$_G3: ǫ;j, $5-wWxIMWFOd'2h\ (B3.\^ La? U:tXr:Or]Yߴ(K]iOzܲU@Z) /LaWݢB)4nݓE6 7zM|Qʢ PGu.-DePo;l_y@ 2 ~`vf$`(kÊ)vD,X\4xQWȷW9 }v'6ꍞ>tv~7јlƂ1Yf~i$"2vj'ѬNCF%G7&%IX.kNy6/b\1x?u1&g]›mZ }-Ae`3xhC>._|fd]Rh/0tj~#>aMX VxMIS9# Yr`e?{9%6o.Wp_Fnց797B<_"%ߴKUH㌆iǻPU&vdc."vlǴ3 TПqz8iѯȎpG4po9񞖯'pv' <ѫNW]֙3ޮӌ9slIjT! 1}ib*}+T8ZJLsj1jllqح3HKfa  ӃO?eTγ_ &=d B 'Jsl&S`_P I- }J8!=Tmaԃ!HB- ԂyD,dZs;J(?s4Q&W"'*XfAjYg*%= "DBW]'SMPe<+w& JʌfW 4U*f*q.,GvE p~%G' D@ G]t0)5h5 Eƙ~~|C8V'[Dp1/[MF*f-ad'Bźtצ~+)OX;K8Q0YE1tYr^R2K.L$P^S!d4ŤG2ŷD'ER_eȦPK1,.ղ`ߟ(q ޹AVD+8#dHAG9wl^CMˡnJ4"Ìz6=B\)[A =.LL3! }#^Ndhp%o!5-Y>B8tJzurJ?&9,Vǒ[GF-wkZ +Bf-?x7YCtoAjz)UE< `-^Hxxo<\[꾃y8Ap !n˟ ]gJ*)B¿~lݷ7pWL>dĭ/iT4 ]ހ=oxH/ѩJ Lo$ ܆ Je3o6{W{DJIBtT.`ٽ3y>J3C`㦚5iVoҹ L\ӫd|k 'j9צt4]02o BiRgUOĴj@N${}q.M+o[Si~dr]R>ZE>Gd89G8l}]Mڈ;9 9F} ۸cg\ps 4NLiU62z{w1tH* {q[[fTnv*{pE&̖@+^} & %oW:S=D #і H=-FB 6TU;>I.Lrvm\1Nw*Bb<#mѼBi<9wDF \?Ӱ r EP1N3 &TG) f9wR]CZڢ1x4'H z~o! l\n<q&,jmnד,ۄfڢrog#;:Ӱ6:+|m6PS#9=_Q*(?TV {yBT֢%*hSgcΥ6`ﶝj 4 X=0&[u+kﮥ  Vni]l(Nh#4'<`v(x. !PiDg[Qۖσ&kC ƒWaޞ_ (V99]&+ t0_ߵZѻghC)o"X8t)ǟ'265idKS1oYI/ :ҏNI9Os5@5hs{ªB0SJo(CߩRyQ,?Ycn~؊EWxNt=͝?nOin]<,efC^:l-yhQUq%d8Va@R~iM;'Kcvr K7?s꘏${ҋOU~8fԳAъQ5F:%ޘ-hH'\[ι8: `6ħc^0,ԳKj&r IE gl倾{=嵕E͡T{n0Ddso//.vug2̞O-*_M#a&LPlI*M:`Ps U8 x՘+;'gR6OdD7:F4JTSGv`Έ?9\gGԺC5P7{0US~zAFN{/^*p[Z8aiDI C9xRMXA\ʳ^|҆$Cùn6x+::KZ@b 4y#OM:2Wc?9XH+$?v}nёDÛxqCoܟ7.>(ݱ[B: W{e~RzrSJqNPIc3":J7okM뫴>LU \9vV&@(Kǻ{<> QQ; C7MX,Vcǃ\  !K9EYa0%$ّ^}l*?ۣ-:M*[G;CW[^~`,Vu&77:` p-y cҥaEbU"[K -/=r/|$J {>G5IWqp˰TcwBXͻ;7޹f#9ձc2U" +lBE#E2}'>hPpH:~1/5H*J8?*W zvOJqHQKq #[sE^| s l>5_ 3\sD>m y`E ;j!,JWU&Wht}3hS$$hhNC:3]jưM[LW =MCz_nDUBn]n\$!c 4FZ]AEGZjl iBM$ژ9 ^h@uTh+ϫ'@~Vz񿫦X'nsڈ~<|HRaT F~OI Jظ|By릯e4DmZ8ETQ\L|LF%X{;]K(R5aJKaA[O.(RIses¢h1# ݇ckDoap8¬xĤ%T8t8<]i<]2Vx{k%a)]))w6s|*?w 0CZ4#^ Zc47kU5.bRQ`;P|Y)`w)y\lW!T>2آ^+~`s ˷]_sw( RSU4Ijxn#$DфN(07{`Kx]N'0ҟQFsේ;pX^aTdYGW^_?)K (_~vl> hE"σ\$ G;anܩ#ΈޣPNMIb念3ثE pR" ESCÿ$g#_CQKsM?ૅsc\Ҋ({(|G:0$4~ rpzR\2x>]{5dۘۚ@qe_=.e=ywkoZoyM@? ?aYt= Ь(ao&ǷYLǹoW<:GLj,nks6*b>${z~}M|}6%AkUAVZ]rH&?!Q ~1ζdnA7MH@YF<,5b$S8dK@:vqzQS!/JƙlKZEN#e1Ƃ:Dvwf44` {ofC:̵ QXǴĂ:/AR?3v~1.F4Cm @DB]!;NoUglk p|^_~fǗHuTgBk{<*J`)Mq~@`FCQlW00d?94@yi%N)}M#<8,SpFq;1kP>~sXB`4";祌 .= eN+I@%p7~=E=ْb@'@..v\(e+cWtL/ނPϖ"0JzZZoĿS35˦"Yw'*\dO#c[9Pp !"B>bԉjLWBV$0鶧J |ѩ2񙳙Ѐp /{'Z [|"L"j)A# ''iJsuC6:LN>ZSӂ#u zѿS{,P$tQ ѐ!6;B=Tcf<ʫE[dA{^+cU|8I# lTU*;`u<%.Mi{oolwI*+ɐSqthD9 '&g`"i Ur_6} z+]Ŧz^ 7!idMkrwj(f -ފ#F6yEt-_7kfuBhalזQg GhI9yrx๷g?Ǜ|/9RUWD쵘oeC&cb'}SN&Fx ߶Q(0YE+,9KHsrIQBl2LM !) uGS.P?/,S+ޛ^qf7@Q`49&1l#N4$ݦБۍ8VnOugmnL+ZVnKn&mx .TO&7S,[S[lhd}~)Hu,)MϥԶiD8:Gt)d"JIo3'J'}4HcO 83ie]j}d1{Q[$xK{[*ǧz"]%NZ86u3w#XޔЊWهB>nH& ) oH^;\fU-ix )fze\h6oq/o9L EGfzM4 ?pylvWI 8" Z J &t過I=eL(W\bxg @Z,?cڇ׏0BVFleluиBGQOߚg{!['7~Yhᮻ~6Wt ^~)w=Af4MO"rY@+^Ԗc]O}d=ʙbqyXT}=#Ū 1,!5tu7Syq(=Yяt|V]Wywwb0E 簛$sfXQӬxiF (ֻ)'{8WphWܚSQL©wФ bJsc%|mlN6fMp Lλa>bKǜ=BnVCX\ ֔~@uAcD2vYElJHGXLLDun-=xd(/D?4}ǝb#7gciVel cLq#::ϧ7/BXOv[&Rzĭe޽f V0evpk b7c%{.,Bdx3Й:6>9l.!\qC~eb7ʈ7G%F^&9-xG[I$A?49egLPz@$PT4(/}khFq+V=QN:gTDѭGwRW܄WT2'LKx\Rπjfق݈y"tYO2hד4V[g?Mv `Ҳ^ұ$W؃Jn)+*@Pt4lٞz(y/P:W |=uL(+tAQƁrI]M]Ly:_ Bީ30$](ֆUG'bM ̬h\J' Y*aO&A('x|1:bSWCn$}Nl w}"|YjH&a[AK @bI&펭iI.'܁ E0h\PVEft ?,TCO |=Sc^b>Ǫ_-;5?STa%)I5j0%@,Q\,Ófb~ t=)@>V>Rc%?{؟bc"Ԣ::ˠKt.GɱY'Z~Ѱc=lm@w*\@ě2_5DeĪ{WkY^T(sh8ՆO<_y`>i/u-2bC";Η(74,Bц9mSw\:C_cL >ueBT `P %k2#`@PQz[jV}@㳜Vo1}t]Ŀ^+M^5LaVۺRFyC`{6(+ NSG Pjs:E|ꁿgI:?-\)|iM.dTi╴tMt.H'v}GVmڞADUF2SI &ꮊfoCky˚=gJT-T<ԙ0s KqSYN(N]~ˇ^wғ):-C 1VĢ?x~4f- @@X8"D >IdK,ץ&aC\Hi=k,PEYrPKTBI:ɒtn8mkebCCM3U&~ }^':'̐2Vh^Q3H8ƴSVbQ}d$-KVRǮI)aDkτ#\o"apCqi(^.Xa>QA暘+iDqEI]hݗq'J2 ) |m\:V|KU5{nƿ+C1`40p+}"ciM"h8 a+qDiW2a+䧩gBmvow0Kx K=/Z\;OB%Df#f\(|4Ob\m'joL S \-V2FWK+VMi]SRIY#^ʤWFOk |oP/(yΚ䋣x6S;pB@T+)t冭0\nБe@*jXHD8Ipt04Ђ"*l-)MM)s-8,#y ;x: Q>?B F}*:oASA94 ,n'(,( P*'ch^MC[K֝NNO= މ=?k+}90N Mî]ߵD4nTmw.̶͆DQỸ~^kИ墧@@ܤWY1ŋؿQ1ɽه rx(s%zLW nlhkzk)㎂ ςrފ_;0񛅺V}xvXρ/ @vx֐Ymi%?@C)σRd,w2qEXFLrJnۦ 5b}'&r߸.ƌYݷnIފg]*"ix/.eMU۽dӚaʖƲ~.edIFnbzk-?Svs/h&(_dJGzc5Ajlf ӑym7㋃5|l[hzPV]tt~/ߓv̍Hsiϱl=h)AϺ͡CF`h[(fx` :u?3KKde҇,uش.l6f%U 0 Xh掾T\-dW&[a\녖 ۝σ:؁U iUygG_)߆]L2!kO4Ngbcæ•-ߢ2 béG=˚wI a$.pw!'&h2|W=g^/kP3&?(>YmN@'jEy6E!kNɰ D1tqv!/ҴA{/!8 &71Kv O~WY>q+% HLIXqU)e1( Tyٙ߶*r&c}?G7gpI HT;f&[ I tx͹r 9 ʁ pj4ILo6K7yfW-LEƅXC\To ye0"G$z6eDⰐ/ LY–5'{fza~ hj":*나6Wdlؑ, K(a'X|06t5:jUBH$m!?a6ʥuڱ0'䘂 S2Yܹc*Fz~ \TlD,2{N|p;fJg$a*)^\w)C0@1<> pWJJ1<Ԇh,{>5c%( -~j+9*ىIMw& l{=;KZߙdP2= u'=+> &Ƽj8ƑyhUݕ-a)fX)kpb6-x`zOs`*8wqmB\m_~l*|)U%K;KzC:.9 /c[#`@2ch=֕H-Whw_ E Tr:>WVݿ=pg79$TDs=[݃_` o;2[I֍V)3<'4S9CT6G-$ꋒGn;jxOqwDge Tc֞ܢ=K3!3 lFp'rV3&Ic:@@&p-A޾l=Q |™.lŕ~{zvf}p#hV:]ͳ*%3÷^d{$0t#?h}D{o+`3-Wb=4lVD%43ءaOt"eQ$|<>p9RQFjSi{Y ?B4sߺ/=Xqʚ>9g_`m/Vw_[=:hƁ%+FSp30BB!S)*N[ A;#LM2{p_G;(KQ w?[Hh+XF$.^@se 20g.3#tn" ~ޜWV 6(+^ '+J7}7 rSUuzuq~' Txy8)׾m;6C,-v^7ptB(![hz9`Çu5齒o4Q3uN'8@UK>{U8P݌ӺSjF^ Lc#>, 3l?tHc|@צD}Rwn'(ye!I_8Noōxm{\7l\#@D eV)CnuɀRjX1ȣOݹei7A-iu @2օ@b&q(J/8>ɤ$Sx#GضjKXjftX"6Q 6hIRo=/0UJvI{'S+]2`}3.?Dr>{ľLP6-~-wP`}JE%zW٧qJ.L$֣ܹStO/q7EFpۂ*E!}.TN'v4+_zb ?˱Ư'SXdťDxk=/6%3-0BӒ9L{P AYڍM&ؚxG2 ]Z-.11>:9F-m&$g bp-?7nEo$k>M̿Lx݇1R':sq,/}AVhЪ@1Ԑb& LM=DeL^ƥʁr1_~1j.ߑh3í3JugI\p_# I;V"wp|KA߯$b J05ˢMXErϛ\-5x?/)N/*GI{N b/3O&GKEHS8Upw "শJشVx5;DRՔ^c16UJ/5w۶S<.f4H$7=ĐFx"{~-K Jʼ"[KɁ ,+I$jnW@ڧ/Ib<>K̊_ZQoZ:a }2`R `sNaMg"#eQTO:UШ/;ƴ { J N&#R:%X-3X S& T{sҧß nj5vK<\Tɔbz$UXXGw#Mb=ɔIۭJ "Je'k1!s'U6HaVIJўWl<ΙQ*vԊ)kkxVITP̓LcqupZG|~52苃3míu͙ElӨɳ6>Ua`A yt "p;X 6\2VP{kXqiy Y2ELv̢ [#B:a2/IL!S X)sjmi>?fӿ-$ hCFsx;5k?jW j6@iNq3)tdÄT~cX3t傌@_ZѺl &^խd/:8Q~G CKk򉼹Mg< /I}(UѮsE<+JxbpBo Ϫf79G¥qw_Uw fbg(!BfCDZLaYZ +d= !L"ޡj;9)ɯf ;4 WV[XJ }xe]')xr @,xpƥeφ&L$n.a%c"rz!@i}+!;u6Ҷ:N ʍ-i[E ,`ϒ-@EGWfK<4@wEۅ)PRMt_^l[{D7TMfQm{RBs9 ^3Hg;}K ?-[p12\@M+-Z$r KpDQۖZ"O}FB-JJF.Af{u_9Zڼb64{y7ۼ%Φ zH*O \8{T >.6&qhVܘR{Ow.9߫&Ձ9w跂MzKߤbu(xB8 HE:T s #ۨ7̮(,(-anL/U !{<=HC_ !*ʾ՞N4t.h8MZ9$;-2np3d"s;`St.C iާBKԙ=-O̝Vj&ثhG1_x0[@bjv.Ј i0,{_1x) 5|7UY XwtKR־+l5nC[[q/'&݉(imv;~zcxN}@ AN!n m@A+gfhn8}3a?O̔r/B "5nE(n>bv`#W3PTRԈ/nX|%/v09vO&_&x )GX.<(b?s|J6[^h1/n/b268%,Torr|>SO|{qP٫kod5{]xI$O\" ]=Yۤc@l9Jc@Zfuxv UDžq*99+gs}/ Gr|@52iU,Bas OxOғl !`efۉID+wqV*RyZ bW?$~\{pBíޞ ^kvcq.+,TW*7?6WBN`rlvk<%0Z+ITRV/|b-Xʘ꛰Җ9Rl-;r|2Oh69Q֓IDP^G %I9M1̎aS)\Xʫ[\yҌ䣚|cr 7Ro(]"g!9AhiqށE8"f5j;7ƕC<. ;t懏?~: }Kp~aGzPEAH 4<(&S1xh,{qq~j{D# t[=4Wvڦn.^9)2} m.&¤4Ubyd4hE 8B:%wC*;=ӿS~}U,SA{L6]ɰ4q/AnGRX䄥cn6PV)| U6A',l;zڒlđR\_jút VeU-*!t h/H)۹D5M0Wjڠ"}U!Yw4nx@geXt&c-{A.?`6ra`.ȍΟS#ǨoG>^*rwHx6rfb/͞vAP]!zBDJīf- oοislQ^i[- tbD~ a!rJg!d{LB#`KUD#R4ڬJϐj.C{ONa `,(.rb*q*-mG2 #t,# j(9ػ 5z]X B*DQZi'r˄;a3Yl&!Uy)Oo 7EYJa_ Bx˗EG7wJvh kE$SL ^,LO5@yj뱥K4 pυtB^z&ե'ʍ+Jg( (m!Q/lN+>rv_;јoCa)7wJqCeH }FtiAU%,C_ZZ;:{I4fAZp— t~Ɋ.DRz %QݷbY0M'>Z.L% չS1s̋sPg$"HWG4sb_!Q0(2t&F;Z0tAO|7/Rc`J/zs|Uז?THk<+l!jfYh m*H3???7Q-հď~bܕJQLL ؍i+3lAV(cwCL*Ozz`% U yElPnqdԁ+='6Ga;,e0E92!?("N7rp@brhrǝ,Ms? ;W#zĬzU"n[~)XC>rt*WVxL0 EFɊKNM7#>s9q@e`(vi7)d.zx& O;OEs`=/ҾBcԣu"Q#B gjXR>cLZg8v\\|TaJא)Q àzA,8tW{̀Ro6.;zy2YAbâf8Ok{kͭ| S+¢+U4F/ӟwш*/ylnza缳Z"nњLngmuym9e {`73`F3R^q߱MzcmQ+ru+67@HN`$;LڦR9OV/Rk((FP !Siӝ / d=x/oˈ\$[x &LB^+; jF2sQ5{?T$UNcAp0j6?uneT!5y;{LRAOXӎ*L[T'ЗePgbl!@7{Yb|b[^~)TgD;"B9d0s9Acܡ@>7=6@sSs%/@90rEQطpEz+tǰENv=Na{_ji=Kkb@Up?8n„?j)d*Yv+sWOdGg$QEX|Hygńgw//xQnO{V¸hGy;!!. Ŷ+yyU] JPcw9(R o8DS_~=p~'rUg׈+b[砾~TLwπeXFُlc{ ʺ yfA"8c/Jk NԆ/~L9BeÍC?Wу;;7dh\B/~Ro +j0w Pu}.Q%>P4I.AǪ &sprP"$J[)㹉'_&c$?z1g;P\zRʝA2# wƒyqio?r)j*csŠa/-tQ!(3uhg:~n9E,H1pjEW\aA TY͂cBpuX{q8j'iCR >|yt(;E&[`'+(($=Jw+*Vi˫F__mE|ԓz͠Kq43D3(e;ƷFZ=rɴ6Yv?` Gj1bg/3$a=<ZEKtM.,1g[~'xk!&3UOMxSDž7[B d]C:[5~(a_%n);QDoV5<|<ƦGǩJb}by[馭nȼ|C=ң[ 6lw2,tgX8/GoSQVA=P}w3K+ SP!Ƒnv!&7xQx>k͒%%wJmOf*v) lJ樈-W%~cW^MњG37t|gQoܺE\ O*WPrԋy;VdT04RqhWE204_]EHo"!09^TɰPQ̂K1Y^cٍ Yw4ܸ3%o䰶m;`a :^:rXWO]7|i^=hKt1GwՁP$ȝvtq KiC:͡ :Ec+"3\ -3rΝpDwƳO7~)ߍ *{[.CwR=rzD++]n!]&j ǀ iAF* f(9Rk.ٽKBiq<#Bv xo\ r>g 9c~桳)or}ލڱE(\w= _PQeAMTVe >@eZ ˜ۖc5ߊvH(1xOva|S(q츸%y.QIY'EbkJe] ~|Ge@դ"#=%J (cjlگZ̦'2v'JK6Jvm!9V_&w@9t1-M*>'Xݞ3O0 &Ȕ].nұ2IoqCI+,Q=66\MY?+(y2T8**ff1>эr'T w4_~hnQo0 .Td۶ilFU\?g0s;.H{6;%lލY\ZWyJrejI%n: 蒚)[{]ilO-:4!ł)gS_ .*T\uY}{g +U,,k("cOBy3c kShO>D3/7[ϳIg^JBVSF=.OZtA"z84 Y=L 7ZԡT?xL|w 껶^ jN.3P*8;gnV\\$\ ,ZNaNy0ɉqGa\u`vTCfFɘ64"&K5p6' 0 iɜH8aQ-Xg%c C] KYAiC.-z)q>2%~z>E1/G+%"[g1Q/O^he+M69x=+/_R"i-O*>kE[2C 8+[1" P1O&׏U̬7@jn6܀Wy.W lm#2ͅmՔx5 I>VbC$U&Oi)ZҘZ 5&ۂMC'@C[aBY9JTp įcda0<#.mM/?1b;9'ps] ؞AOO~&V (F9 !ݯKմ\Kfknz YE :n} ; Φ1:V@iP:<3QsBu`ykD(7ZȬ+6Do|+x ,1$֩*iEwe_v/z*/~R]őG:'ݛHi/0LZ%lELmrpPOQ|mVT -&8  t ޸ů?CزTĺ;Vǝ%(?뜎jw%:G4oZMi1ɳ,ft%5LAk·Px3 B3g ~H{bV`L%b+TA٘u_ (1 S3 "t%<0pf .[M{KJq 5]ZnIRx8W'RUkAl\MC8;ɥJpp$Z $(i' Ɠ,ICθڸk:n)EMP$g}z.x~ M&moD%-$hb ^4`^=K V}G:1 bH{oD.XۃwA2a;1~]Q9Bgq;bJid o)^4,Eԗ/Ԧ 4U0?Mơ ` wY' }i˻'9j NDpþv:F9`PB|wwp˄n$ncz9B3=r0>Fmu$G,zɨ6<Խ XGW(bS 6gz zϹ6&K;[lI3گD+4b\RF{OSЎD*N$0iPfU.g2 G<24"xQSmX!uN&|D,+` DfعFINKiӶ}B@O&KeQ.4Mo'v;$f"< sS+4_<+}"wς eiT&W|M+{XN,Xo%afǚ q2h%p_g4`vGyG)oS΄F<r(GcL8; |~lg`?KHA)_BSVE4R/094:?"QlV  HPG~Oҽi!~zlx}ȁ]};JEaqthقnsY[غr8yQ$Bs$JxsIOzciFݧOﰝhQkb.xoP-v: ޗDq$ـEosw_klT0v͜DF9>3Fez?nER0U];]kkt:E.3ǺIxN$z<{ZTwVC$$>'g!F?N% KĚW:t汜3t'_w._ھS=t W&ɪP!_ YKp׺f},26֦5aĿn3=RDفXΦwStҳ5>Q@EzЎ0 1Y+6\mhZydzpq_šBNb͢7M7[bAl>EhIB zc jOesZ&=ig-:DNu<9"D?^J8n!JE=ؼ-)cjN8B҉_W'Z5_| Sq/GUm-#׿_vYS rox ^,%juEㄊJ'ݪhY2oZV9y7z(g@>L7sn/+DMm-Pk0$sgAi}=GlĦ DǺGyM 7g4guxf*yo|M_Z0fh**s.A˪PGЕUDp)4'ʚ`u,+FY~76`.~OO30tp5ґ;RT0=""u'NC)\n:JG>C bX:ejaz7-U(To n탣磈_bR*:2>zqɐ/d@LF-T^7,j$7b9)EA61[ ռL둠h "*cFk2JX yg@Y=<.ʱjC#ч{h2k#yeKQ;,ZBbT潙/rڨ y7k4Ek5.6z4qz|sS ~=`7vQ*=e ]+@“4^0z|_Gi~v, x17LwmEv}YlR9Y|9 lQÕ+s ]U"40 f*KO6+aW0S<j㦦4oM .KFٳM)-q6"@(eo!0EE3I_m:ۆX`Ua8 4Nh]b.y} $5 $ݻ\."sii^3T #^`yi~ngt5FO+q$hh1F%g!܀$:94;3D \^N5kߨ J gv![3Lw'Ry& 8!b QtԠ )+ꑓH?Rxa-e7p4N@+EO탭DXRbSbDJnUj "dc('77.X:#v,k4ZcUi{r?QmS16*E:V Z#n]GAZ=㏜|KTC]j:ovz J#1ggv{ErŲ(8_^ k[xO2)rI(mO; tQLWp_FtwPTؓy-` V\kg1ޓ/~i]W_jpq^ۀ\E0]F}g'5w9OCKPP1+b" FP Ѓ/饛eƦ2 Z1N M0g{5&tJ,L]Dks{mwA-+t*3XE~\*P11 ЇG=tl%P j3[ء`H;#[v5mό`͡GN',꾅lgy"o2g r!;N{n)vΌ-Ad@L6j{M [Q&YǯR[ ooOϱֶ8@x׷?e/Y & <O̒#c<5;VVqܕһ'j0~Bë۬|FJL9?t;B4OG\d3V1:J%uULxڳd& FL}_|81WC( WH+5/I$I[FHʲ5`e5dNiX!ZuKzϹL:r&A ݋M˒-L0C`2u>El`:Hҗj// 2et0FkC:odS]źgfw4Tn"FU? HX;;ΗdTf(f~|ƻl?*lP,#3%X(I|6T8է;'-.;^UP ]!˷C#sޅxav(ŷU`< !s;HVۑy kVAQH)%"myr=4}Rˮe Qbfqs j XUܧ RLHCцfϷuNkm%+'jV aьlO`;0hQ6M@dp&m혲@kn/i?8^Qk{[<JK56E._ڳVsioԢdMȑSzPo,1zeG׿6< kP) O{5:TG8_T c~l ӛ6n v-,|<쨼BjN ZyX6V)a{F>S#RѣH=Ƽv}ұ!V?x25Ы lȬťsx6uFNhYЮ8[u`\6]r^h;:մ+Uui;o |8D^?![W7f],&10cni:qhc.^NGE]3EYU4˶*C TJk rz:#)bVڸƇIv`Vĩu\0Zٿ;*^\ą+(պ`J^4Նa!\ҵ-V>=0ukPXB'r' Lvk .FP㰳◇LX 8>‡&U׭ɆQ⒪Lh˭Y9ɜA"Vo3 )",Xj3qD>T#r^On3: 4"ASKe6GB$V%ʦ"nM H("u7Kp&<>BqMs(sw^"v1 X.ꠙQ9Ҋ8 :Bkl ӥ&{HAN~G/><;Ke( F~ܪE ]B!V8 #ӯ6#7_z8z,\޽ &K&fSqIۆ}.,I/t7Mު{tH%C袎GXoK ?EB*%NPb\̾=*ʚIa !3|SRZ[E?Wа~ 19ǜg*t~f>Euրt yk\v|YTs^d]a! -<JkP%kj|HL?bC:`f!$ >\1DQa6\@K9 kM,&F Y:ٍ\=#Uhu&UI匈;ae.kV`5﹡ ,K~Jw!kKgAPܡ[; {yAA;[,:`z;8_'C" =X!0jHA}Ҝޫvt+FqQr\v+`ert5OQ?X1QYIwws$gz;錠K5u,|T'/db(4x'y8A yq.!0\71үJV9z!8Qgػ=dϼ1ysLM§ٸ#2^ӮFX*yDB+ UdDqkEBBj_U NFܞ)0 2N. zy1]F*8 07DI'Srb9ڽyn4xV8i++â3Y 9I;N?@!47hnpVRW?~|kuײݞ !68/91o/CH\o?&i%Mz^hbbWƒ o,ݕWIv9UF߾D:VXWfixnV4jcspc3ʬJ+XF`+;߼{I+D[̎?<&wT2CJT M<=_% 0GH"&8nC6|S=^m}2"3U<= ө*.uӣ t o,vIlѡێ뿻,88<PNr9vbdk^fGUpIBP]ͣ|3qeUP9 ~P\f3\~d9ց.j+'gIe&hOMZZoS d8Y{hN/'o'(}l$ | *a.s?rDަv݃k/ Xpeч7}#:Wywa,xl햼ɝ>{pN"uZ4wJ'_wP2ΐXd= %ԋC70_Jˑg4iTJYڃΈ8;jf]{N[,aTذ)LY#uǯV 7=_-7^˸y#ihJ7ς&J5njvk@w1Q0̲{Ё2& #].H `I6҉N20PޱUdX8֧f yQ(9Szb.{0:P|˜-)m6XƹC^u fle"+ڃ=1.#R +$]j(tӗ=º?;GsFp'5.t-אO;Zsȿif~ ݞ>fuZRbܤk~A2"޷:HSy2uCՎ>Ūj .9H>nH4Lc0NƄĭ5 4w)Bw+[> x&Έ[K#̹p!ߓRuZM0nj<G6~6jae!49% n%%x Q}a .=l"'H V$^}R+Lly&prujH쌃W:`8ʢlaM"=S(˦:`h~E*ՠ )~D9%mP&y2Cjyj(ڂS3*ҳ(wG `NqksE(+6xhe7b DRg(bǷ$Bi;Ya>ϼ:yz*t!ٌ6{g|D{8ߕu+o5fL1(Ti_a/Gl ;%9j.kf| _;ٔ1PAıaܶzE%kG[QL([ǣX}Sĸ{$M&"3P?h(d[XTe/`t% ,3 >pة  O}G3*ˬGv'\ٷZ=fjG-> v"dCYU{ JEɫX_5 oKX 4Qv+5mֈoIpj~L7nXfOt1Ah_˟.u`C1/3/pؙejH@Hgs{i%V=gCEtsiE s6kFK&G<5Gxy<q5<%aԉ%.Ӕй%"vMP'r֑&d5o> (WU?8T՝.ywy8Y;O;Usty3djrcdV8PԤL9VjK/e3 `P߫)An+e۳1k}y"V /_Q63LLPHmq2!c!?t )m^|. V+Ch%cgWϚ h}Dݲ8c|]`G;siNaaSuH,R!.Rb~h.[|T!nǫ}.DDW1P5QLb-&A1~)quuQsT؅"Ghaۓ$םQ>MU:b=8δ"=q&q=mHS2=5 sFwcT F8.':ARnR&%wXL/c#lAWSi 4ȄgLn/mX3;#ka~ŘP-%t#uR#lõgxk*ר<)5A w/  jj+jd4?@r!KN NKrdo(?)/$| ] $P@&I?l\b7F!2s Q(&fsR23$$ԴAr< l5 pAJe`[G$F,sgBƭw|6 eoZD#ӞHFb/; nX,R@T}+ V`>[$D}GJ|:b݂(AA<+4Jc|s)D_\@WB!@CJ/]}|~AjYA0 AM>D aD$\Uvf#zM, =Qw3sV;Ag<7|`A鵅2{0U$8tLKiBBworlSGP⺽-qW(K 3q5jM>hX9Bm΂Ɯs880G|O<=gPK JQބ+UJ ^,zn7 w VN1^l&giK0Kec τrG&|FE#c2y"D-_=(FN[1"5-H8"ڔv SPQ/H~}G3)/xN /:2s{Ģ~)-c,5p0ę ɵ7jۅWpU>Yrn;/vq;[p*=pso9lH؃kb`x.ސ@bٿUBi5%/mz4&-:ڜZEVD+|(ǵ\ љ8VٙC+QBt/U:p] 6 7j~B/CA[5SIИqsjhB-%Aǹ\+h>m@rgdm Gdݐ:Ť"Dx fE]os'"ݧtņh~A[_< +-7ÜwPkaO&Rښlέ yZ˴F |[vt"(Ѥs q7P 3 {o`#QteDf9gQ42fb=jPpptQiTVJ9کH/vem򍨠+$8S:>%y *R,';0&3k=¯7gsD7u;էyD3#J]x{PfWr MWf'.ïQ<7rK'`#h:UPVpK^O{+h5I9X7CMpK'hkuPy=@_p " P;(^טwJ'd8d?Ұ׎ȟW DPH9/-o|Ex+(ȴ zMPL/MS:LH.X/N 0-S}!6lS ބdoQe0X%\]{r8&+N:3+`z(iGMZ]_P]>Oa&lsS'F2>,6RYiv'z'J[K5f!\O |+aQ8їL(,)j65fefx`Cs몠wIX 0?o ZY|v#. {-#fk7#Ŋ)+޵xVOs+03EjrZNR|׋v+%`pӁ^wNO97{p?@%/Ҫ"+LZCNԀXHe|2Hu[.Ʉ}]~QPC<^@27]kfGM4@⍼SZXA[o3`&׷5$0;(` a\R&ňک 0"rMJ(H ܬd~T9!>6___P&{o8)Vv{ܱg}k6d'ZWHh+ ZZ5'/Rx%&K|`912bn\sP~ީ G-ħww-{Y;-{%P:FGam(QXIh}'VDM8a-~y)2!Kkz~5,:@2tIoW[e؈.њftE 6v%.jv>&dQ]ju7D0SmLA;6ϼ,$KC4Es8P` w0T_ M$RJk3k`rЩ,etxqCD.Txk sӉ"~%ܚ!Ъ|OܬiT رK}ۚn,Z_Pqb' =G *.+MvǼ:SED .rNf"%> Q$wR\L \jNpJ 69;"]#iװ0gγ5@2b7>>X.`eՈ:% 襾dRH]H *zإ:Y5uH[?VayAq54ĔLLIY/pPYAwH[Z u}kz)k0P][ie8`&ӎOvv> Ơk]#ZV }\&wqw ѐx~&u(ZAw~8J'kœU>(#/<#Nb9PϺ035PfƍV8^+t3"m k֠Y9:-  Ϩ.䉚sƋ8jpk($\f0/܄4Ukhuj`)s~gw"kHL3ܠ?]_ m =kTe+30fb\Wxaz+`@b*/SPE,WI UvXAn=9/FM_q[Ϋ lx|FcʛN.T:~%$&SPS)]2 A@j7W+j{'AB:.`(Jls1Ss]d}ᷕ>03ZڏX:cQ0gS.K:DXeNﺱG;MyAץF剾.=2t`F"~59,"W#bo<n09̙m0"Q+&sP[q_{t&-]w\ #XHdCLe,7 'ktPXduN1\=k<̢-&~6Ęo$ ~%2f`lА"M"|} Ƞ~ TG8~tp밸r|JJFz@I10Į9^5INTSvشfٍyvS5͸ /tA92ʇjC8#y.Jw`"mAH=1ӽO`XSCNk|xnՆ6R1Q N_Gh}.5  vq =hG] + XxYG 9IV9p@XD }=+hwTIP[C>'}]`uq8C/xZ [k}μ4~6o`Rq[q"owŅ$,w )8?mKNԃWx-Iaf%b"} +<0dg>TL&S,ҵٞSQ.w:jc[*Zwlo}:<~ԑКZޑ B,ϒ`ܽ95Y9js*%,hO0D6tAF͜T3~mzyb%j& f*酪iY]ecGV jFw3Gˀc1Lh,*&-Ť'同|ݭ%^|nçny^Gb( NάE;kPS¿({ )/T![ϳC!?Zj?8, R hԾf1 H܁Z&0T6h_߄ HN[; UD!J._ ,Jg57:Ф&t;j5;2).Eձmê^Tt+UzDz)\UF/Os%l{G9T@p{#8aq#uUؿϷvG8κ|%-)ܮJvHu42]1χ6 l pܻ0.!I ܵQ"ړx mvM`2g+:Z+ւUWzv3}*[MO[#Jdg*dOwqZLq?_an C8 * VLF'Ut/uWY X(=D|$`>?~@Fr:q*@u_%oy qɃaB`ΐ=q/FMkWY0| -J4|pQ]I7[s&# (ֳGvɒċ~W21 H5"oo:XQt00*IH?~% C'Y,t"4M~ p%c[Lmr<.+8q|$ʍO$ (_\,8A7b9F ř$~օdk TKz6Qdp%ZgZ8ճW˩ u_J\EATJBT5wr=sQ"O):)&z^k hvXA2ǂ(8^ /@I/l8Ӌ?Câʃ~pcj( ؓĢ_tJT&c? d3Iy_zKO^ӢE9ázj;ԉPtt䈦_Wz}4T0`eZ7!g\؏.* }q_ӊ.k׏LE2^NgxbG!|\A[~e;8tTƦ_*' RJ~W%ǡEiuXwH!'&)n2* f+riP5mQ3\00#ĩMK4p:4 ?.c&JWh]ć4Ueo T8cNŒ(O -gM6 LvH[a@ gJsBMJg+Go+g2+}O'6nJu`^zu8*_i>+1mPs1&o6S=נ)C^n2nH˿`]l'tӑSa?']=nKgmtƻS,@(igL"A*9_%m 5ywʤe:D2yhX8[Dm+>]mZ1I1=}!#G.}(,n;w@K-7yzf'&e#'~f/;% &Ę Fy+Z=_EF>/\ ddl GhTҡTס77jq@YJl]8$f^4 Y9%ܷp3V|*b7Ya )_"y viwS߲ACmdW7"Y\l~jH7*Ԗ6*omGaԽiζf!yߥq1D%U*Ď󣰶s0u=yFa`9P>j3L^aBK. ͎3Yr|@V=m1(>XlnpJ0g#G  rQAރl@pP1S3LJ节חLyzQ޿`HtF8wAN3P{dի~2iAxA/Z0ܞlsx 1)yUerZcE Mމ<;8P,(/ \>#~+( } I$Evy +.4\;{am]V51;Ce HZ6߄,}poaES52Χ' ҝ;:y]P 4>lzѻ(xH; 2fa ims"#sWl;bң7 ,T)7 O^W )yB#U/NW(;[c/X>7&m>` .lK>T3&J줓+e>/7/v[^hFU)g0q(LӹnZj+ek)eQG0uƍ0h*?kj)LѶ.,مtcU|j%)# ~>֎6 ܲ21دkkw-oMg͵Y3^t~xkn[{G 3n I5owg}< 隸zvoc H;Akk2T#RI=]#کf:r9^!vZ5+Rr^iSK*zkdR v4iy0[rND'^,14 P5TﺭY A?WIK?c ?_[Vl7 ,B5lm}u?_#/gyj.A!/e+9R|rE/9 4{1#gd5H}_%e(ݎwb|Z,G6k:hS6VTHm{&&K|#$-RU%ܬLLtv*{>UYΔi/8픈G Elt,6D$4;Ν ^Jzx*~#~KQ#4JF=C؋㓻cˉD;_qٱz`|=6ϕtJ>rCoe^r{/dʊB71puXSI䗾sH慲> fOGKC0F24#t˝^.Xo ^,b5&?Ugʯ iMKUcmբ;r&_A_oj* q睤YãH'^9D=_N>٣i:[`GaphK2K~>Ԡ,;-}XBׄ0(d.Ф.\Hk_ߤEit J^(r۩)7a<~G (9xɔ8>Ig@?,%Q2[n!o> braB.3-MT?qvbY*Yi6W±be05jnJiJ3r*p+{9r=9,xydA< H3*ZbߐSCHfpWZ]wI+|:ϩ+8 \S\XG[݈܎4m;@~4Qvƫǰ{6A%q^X+(ƿ\$s^IO`ӕԕŃR)jICT%Ǧhpu?ݾ#ʪP^szD1#WOl .WW%T6b$2ԪG/fBMzB_d$Zi -yK˻'vaHT6?x_ 1m8.~rз{9iB@VLN~Ά{3% SR"<ۿsS2}\s)(7ۇM@xo,&*سumLك0yc=(L,rU-ٙY8ฏL1E6#F)^ , *! Ef+6:TSY_Rf!Ҷ^|݊ m ːs&~;u?|&Ht' I\D?5y^ΛurH.aŲU}@5w7 k@rgBqq7*~e#oRbδ^r_ R/ hPJm[&%Xۏߟ:88Srkg 곈/7R3N ]_JA mzsoh|[ދKx%6+,68qq %:i8CY8T깕&B)H!r6&S8zgQl_={> )k_\dN-B4[].1$VvzQZ?W*s%,Pvhg17hl*j0}QecĒ'J!OQW$;v2Wb)gi5)ܩA(]{IIwBǙ+Qx&:rUn @"/ .ցR׽} u-)'v2$\W59 NX)Xw~P%. ށ E,x,{SP,=A/OQWU$^il=k j;v[7$)X2AuzjP "CJ'Dž41ᑜ W n>뼒{ ^m^Νwzz*klX-vo]mn 'tkQBTO{)(HT؛˷ȣq_Ќ|gm$0sۣ!pHSFHW@;ɬ%ҝo`mb0wZcա( B^X]I\azX uCL ]YU>t)$Th걦^Vs d@7||L8kn B!@+GKxС#JΊ5os Njh:`@ l)t[íd@b}JH+4ʛeX#H jZB蘿kta(qQy,%WP 3^.9 ^5hB$U1?#*a]=Ϸ#']<cD\aEU1k7_y 8Ԍ2 MHsX2\7Yv |!doU [6] RmyRMڎ} f|Ӛ[+B`pVB.@1x@Vb 6 l'"\rE>і_<0 (C:u%udvsJh_uy^qcpT 6'[uLx[&"j'ג>8QXHSIK5q͌J?8**t19U{:{Ga~^䔟P DtA]!T /7&l;ªR?3`$2[1lSG2kKƤA'CF?ÉJ 3ӈ} @XP@F ^#1|gRtV)촡XaYj(>TՊ𚐢Jwl+ÌmEox:d]X*dՊ{GgȈŀ[60]zu~M) FeGb  sqhpw -xR9"4dÕdȿ1ECL݆;F8\OI0>Mj. q`ؑ ;F`ͳ+uIW,e鼷^4]ӔGRE %>b5sLp%V%;Ye2Bv;iFFؑ[_e$l hyjc\mNMtC@K]V YdI3tgz{Vӭz^RJ5^y ̖Zݚccw"W}QS! [*q_+[⩬$9$SmJZ- ([>sjq:P8soa'&n{;`v8G":$mzdLBe ՠJi@Q,[e*e-(C(:c\d ÇV1Mz::p7eHɣozO58[|o=0Mᾴ?^1!eF1F[Z$cZA+ΦRUIg#t.6Njʴn%1l"X*MP :[LoGa!&%v/DHsd1Y.vЏ5]Р}=mdhV3Ii!C;peI;ȩQZQ:L>H#W|f 4#)Јp\;L  @ bO0 !KEB9]X_޽[B JO=nP0Kan}(&kuFCK>_䗚%(QLJ zK{IUbT +wb_)* a"sw%x@2ϔlr(cluf^q!8ȺOdB^]qgcӌgV+H OX@⌲_nxȐoUϤN_^j%YW% btb{tߦU.Fvtmu:.'{rׁ&x%e/l哈헅G+7ь>& IiU*˳9j904*П-氐F< nՇ\83;a NuVށPE7&ZH軯So6WcF;ɠSJk]8kG:,>e[pO-? |C.?wXq^6T\CfBն_+!q!qux8k42ӿҋY$@)x]+%hG:-Ǟ@j)cz6x8dAnK[1g-N2ƂTly/Kp9h{Mh$sL&pL<_o#/<:*&jD~FB!mJ bթ۝'B"]-Yqpylϯ8CHX$ PX݇wagņt~I&hn('dpr`rglnԂgA2ݐ',S)|pKv(Ih5vNGTЇCM6p[hm!=RO MfF""oAe82V`I"1}#jO!K`JhR$|E_#J'ʇ;Z7GeM]3 ~{.5X*{Y'6r %k7zq_q>k(^K=$ gΌ N0vVQvt?!{Ns:"L-M3j=~)"-en^W⢛~ caed*e6-)U{[8 RXaj`!CI\Y,Дwq4D_4<ڷjEa5{[ wm}[5)5^60i:ys~{FȕZ!RqY Dmix8.DUC4Wqi9x2*jt(J~,·Ƙ(D's#ãIfĮYuvM+xr'1.ᩐlmr+tW辦 yp͜TÑd^>C|콆'(%JjNrlgO^H:\@{ԳI}dV`0_st恹ckؕT(mRBz@0n px jw3|O Z"7$^i9ڐ4O*,00 ]jqM50A"|ި< ~ż@*{CGD̲L妃 OEat%~q"8{_> '~²&p\[F1LqJ쉁ǟfX0Z a fYSx۷+P)h-UK I!L"bk9&UI1M"/hc¦vٴ!coru&M/C9KWRVVM.0Y_6?N#^Kr&Smc>, ((> Ԅ\@4 7 תpWRƞNMAB:]^~ i 1MMheǵu&a,dd!w>2r?9iHevԝf|t[y; 8Lwh9KHҽrSԂ>B5ǏO#)A`'b&~M+WI0r(o+x%ـo]MXJ`ϣ`Б`S]w_f[c}RJ t.FWh(|h0jk^X' ]-Sqv`Ml Ix|xNk-ۤEVG(o(V4KR~L$gp-]U879kA 5О-=ws>O<ᜣڇj,A-& Z59 S^Fe2~O+[+ns7uߤ?ʨP4N.$,R'bQ ѫ9W9e  K_]Dm*~/_m:.FfLSw^ ?rM$P oUxZy }5Cf,MpxYzϻyCJtRT7>) Hj㠖,RdB}+|`gO=O] !T"Lg-J6>Rd02Q+ _U>s'ο!O@ .rz:~{['@ŝ9-2r-JcplJ["]DmT'dI+Gd5MU0Nt vWMJ:&29 >=IB)j[XQ+Qsj !q0׽WDj\gHMEI dCA_-ũ!&֠ɤ0@qp`^s/%'RpVj+}뾪飨@p0g3+g'j4R[ 8GE֦p5e,cl<1Usa&ѥcW߁VkS#mG5Cl7au%PT7a/o[w7D_}̐︶1f,B1܊M_E Iuh|.I,A+SWvЬG_XL ?Pṕ@2_25n<s$kh~QF`Mܡ~\o27|`C5vM{kz H%Ę{Jr7=92Otp۾]9VCHmb/M]~*ee0j2!]_[HIX]* ř_22fTWഽI΃!Z00|FmR=uж-dw2u }ܜ+ReI9?)`"ґ'đÚ( b:[΁V2D憺E}̛*I~^`~^@FE8wʮ$7N8d}&j L?H>t᫟8 rC o޷a@9R#HgEj;;2%_щBdʻ76C[3ŠIy7W5}Ң'ߊp?rvNoсSN ACuir!=l"I!‚[-]l2΢{vtrtl9^ N*O:`j@jpw_P bTv >^~r 75B:ZCKVt{MvkAu=)ޏcirrq.T[ .ǟsJ.P&&ˀY3ibbӜ#ݶE.g ߖ#F̌t4'ٯ^ή勹NF&f{kU#T@{'g'NqP1#c exTxm#r)o[h_'||5z[ ʕ86/Jo/ ~6%e~}d/vAkzQ=yf6W tcs)9{r^6 slgj`xEʝv,uAب; rKs.r2CˏGT@E?(_FqY>:;5 ܟP"!g4g9ftA iRjspq/i*b|7OLJܶ z'mCB4N:EUyO}y> j\Q_5uOjU)痮ؼ  CHxs%|DѸW'\T&O7&O \B2qә*$E,OܷR;T!ԩ~c31`0I08nZO*I7a$RaD o5R̓gurBD jfKe+ = %fp*iQQ,m^R`%\[n#z| ߷*?fVʏIץ}+BD4S!G7Vjʈvo{D׮PX1 42jݼr7ygjݠILQY8JJ{C>߾c_$y!Hq'!Ml4l% d,J+=3M)w/=BfvEȧ\234e&Fy"lu7#|T,?G6)Q˷ɛĿ|P$5?P: 0V"ie"(f'3c9G {al/wi"`=^/Bi7sA ovgBx Ps:Y|F*u(}>Rs6jD Avۏ;4MFd:n*44(s_ Ċ,o_7?8&݆P~ ,U "e ;S~Q9 /V+l0s==)qN*ap2l"}'gf$W SjG+&AAS`5Oz1Z kfI(*N)~-n].d@d r;Suht=1U?: 'Þ *@YCiNı($YpHo߾Rh]Ļ<|2c1~9*#ZEvba-̣m<:qڪi77͕d {uS%SA*C APd3bRx`+-SRR3bYF2CG{g{gO0!7'2` }qrX/{Fl^V;<@ '} 'q J 2`PZWDc/;`x+Z_,';CMFrkPlߞVsXvAc o tuiKDj xA"[b( ?ҖyԷ-ea%DFZ1I3xf7W { '\ҀQEm ӈz{ ,@FueR*O;uZF3Bxg:32=`M=pN9'^MWAoXb"< jŲgb?EȣjJCJM3bi#Tb8MqGmޣ*-)n/v -T&9OvJ{g19C0\lҽ +h⴪%\le][)n#o\1iNlT.9g-}ZZ/"O"VSot{*?q*3FHTeR>*:;vvRJN&F:m Xd'"ϸ[>L,:Ud V_&ԧi)#1()3EpV 쐳U'1\(ߎF[lFU%B5̴{3Zf{/`ɂO Wu9,;D]U?,rmԋ_'j#fs&R{l1&"?~dKz|˧|np'*{-+ڹְ]n(O(ƞfkglrT8ʬ V{b[DTJUNJswXťwo! ֬p[o=׳G ۡ#yA{E", STc*Z;&qw3 !1YDnD'Ӳi B&i4f"^y*ֆt 岂x_%whV [4;#)4à[;, or\$@f 2љԖ6JH]Ruo$pЄǨ_[̯ &0QǥrwHS9|6^vXWqDGD(4"ǀ#CC_ڔ.b.*(t#:e @eB}q&`BYDI^Lo4cġf_#IJn]Jbe(m1W콁R. ezIV:e-<;/qr/z]YWhQaV:2tG_SHqtӚebmHpڀnlK%~\pR3kY|tܓlNgsmDmt'j}JR%XKJ WIw wUFD=,X Ox哔<ǧ5hyNg`Z}M 0cS3_;34u9cin:iĸʏMrmhFRPtg"s ژOi /g)*s"Ϛ=~HzpCS|>^ҷ` 呅^+tTv\QKѵ<~ ]>q`P{ .d)yeljL&3FFX;ʤWz,qiwPj7FY<>¯3ćH^fԟ`4`6K8R]֖9fzǤ Uo6& Yl &9]d037'& //aoµkч&vukVwDM< Fq;O R_N*cLQ\Bl^K!XL otJsry;۾(Q_coju>x5T0WfA[mݹ8d0A{h /H {8Ի3V3 0*Y;ʤYB kkga?bJB"Jd3ndvgbae.~]?PQ$];$T @}#VP,b+ O)r, ^B'E}u1uPt!.8m U]P7yZCFt `]_hEPHC໩D6L>^q&ͼQ_eWҽ8RQ &;7Nz~|2LrfԈVb6B-2jUyʜgme闉I~xG#v>B3=))pqw롈(3O _ݟW sQyL4$U4kN&Jt +r@zV*-{6jts7Cق' ҷX97?=߱XU]ej7Hfמ ,ˆ< <XʗWaۛ1,\hm=+l&&cN VT0O$H\Rc mU'uՐMx ~E(\D WˉMs`D+0'';ٛ$gP;@]fd\R]f?F6MpظP1(E%QYѐu8p4ĨRtY {-*խ$@7_(l xT?b?\bU,2'dASUsVlaЅpNX^@bCzWfym}<0) u:VE^gX3l2LS˄Q]{u"h!R~-{B}nzK>%8Oʪ}|#z#.²h=fҾԿ5=C9:*ub.vnZto,jY0BMfi[+ӫaK Z. '^,ǥw40< 89F~i{Qsٓw8;wM=C ˓:,|N*yiXQXs{kv곸Ī_'0/Qj#mS?{%)/+!OY&><4 FzKԖk+ Cs9j:ɛ:]U?j>}j`{݃ ˵u@}5 H,s k@.ձuSnJӴ*)Z҃#p7y( .;vub53- ]W-h\[|Xr`%׶f#IBكg^Q hu"LI>QMUdrT/5(7_K!Ұ6JV5k՛ J* ?'K?)Gnjʼc~ !]#pF:ﺺ}\v we(NEXD&.' k9h1ua\(GA6ޚpfvA"K=X &Z! -nV{Nhl"fFuGli_}hK3,@GO;.|AR)ⰾ%ָz5WI AD)gz$rpm-+;erx1"ҲL*ԣqIՅD'G klj :RR0(7U2?QAh N <2ZֽVFArDK)N뙹k"BM{Qa@mf/= OlP*Aw Rh^;&.hk`0F͙S{ Vj,]/Ę͇Ω 9 brc`Ϋ3tk;['>u q(:R eq"F8qM3*:r(Z6m?f>B]R=MƤzV,]ºAVsV8ߥ޳@#| <#1덹O4cWS[r=8N;ppXSdoU&I|1Rr|GKu-F65T3-a(jB dc{L_[S,$R;]Pw&]Py>VH }y!<.w*@EL ZzEz݉ \ )nrU`cif32c5ϕȩ Qtvq 4餕Oũ3E ,aN8V60+r AƐh́>]MYSф!1weS-Mw#E(fȍK&(5C`,[E!c]Zršٵɟ #IB]rzf(7ixJ<^WXBcn4i4nF3I 74h~Zfz\nߞAg PsMj=M6/v#ȑwwcou T4R3R8\~ʫeo8/@ I^b8k6=c潭@CIǔ} o&`vPsx?h h ^ǂq]Sur,ӏDC_h کnl$[k4e0C1yd!uGB0=@k$f&%tFr/@&GhR˖cn/҂*@Ȁ_):K)QۭT5Udzx?Qz3yeCX]k讍@9[,D o͉-hR;-5dap)CN-T+#"9^4:m&]J& Bo3D/YDvH1Luռv,bZ` E>آpL:_0$,nlk 35^C`XP Ν]}2?i'8q+.,jSɮ8` Tߪj/,ِYrOg2>󗘴q Ҍh! J3oW@a3,OueOe9ԠO0 YR#AmrK }3FJ9W'IXnNsήk!r9n ta&e;{B˙~c:G,&]rC8T7xPt EF0@b+ïC[4)*ׯuqX:;7V%nA'->:3%畹r n5@ uZ)q>ʜ TdpWP$Lĥud( .ŷER5ҵ{*⚹FX&( L2f=sعO4m傀i:0anw{̀kC{9qoJ xr&9 TJ*iV>oڐTVd^ [7Xڰ\(T+S-/瞿UoSW,:^m>}vѱUN}^ǰ;{jv/*vZ?VY`޲rSl6#/$Cuko&AjgR~?_o:@sTfC#JEۑ 鉡aP .-}l|FTF%t b틉wt' {C] L3'.?\m"[ԯ?ՉyꩻaE9y&p9lʫwrCմ@#_׻@]W?|Ƿ;&_@ h ՍLhSp͍  OiY]'KO3[Qy&m@ ݶm(9.ߥp: {=5^)%A إxExX!^ȴѺ؃"mNoxsoU( H'阌٘B3OۘEk*O!Zf-Laz{rVV/J?㍮Of P .K$WTrΈ=EQr~1G1WmSP/):/yBm:]PNxN,Ҝaȷz 宆KhJO\*W&Ku:o=t~ B PG| ;pN(_";_\%C\oK>wEII,w(ٻrNڃ!T^&Kd1(irR|ˁP&UbNG[ juތ>q Q/@_?+tQ\u7/(DO*eNIDq+K͊+ o\*9Nd nI8# a&]H:be &޷8@#f"XP9)-.!Z'pܑsr= aB@࡙ɞbaV}1-RC{9_: F+$Z9U[fÓ\_E;soF(B+9-}r.W~ qI -"Cե]YcVOb ӣoy^|Z AS έ6}Yjo 㴆o\TؔkBZu0P W&+T>1s}.󫞈++Oΐ(/ԱO9e[a6LB\I7΅dƥnX>3Bbخ63Rs.dʆ6gX*u= jRK"f I>t!^թ5*g@ZSƶCc܁=XdbbSD ` 5ain7` V)0f}e `ҳLKCrBLE? 3De2]1᠚[#=y! i"9ׯ_j 'Vp(b/ԳC;_FF:DO@9R[qX|yaL]#t(ZuJX KԹbY/s } 4VZR 2S>Ât-v.L;]j>ЁY@,g@p[)$`\[`.aJ_v:nn@qE$Rvy7獩pC <֮z>~n1NIrn3+PF(պC)ﭞӴ9">*;deP-+R7ʁMQ.y,T0@Gv3u.6hR)-'V +n/of]_7Ok}\OS0([%HD>f P67Q1f4 ݱ#Mɩ(6ilG8!W!rNJ0d2|'$8l4RAbVhw9Q*-lݪ0xEfV`Q0)%E$с*PmBb-Gʾ0ZQr! uߊg>0ߏPہU z>0\4qS Q{rPcd%h$=y3~Xy]-UlzȅV$UT. O۟fP2VcJX((ٖ&!)r?bMs)os9fEJ4 /<[a3xոyt(V|7Y$=~kLl ېx52hsn5E3 )=_VP'd 9wBUY}X%^`]P2^fxغtm\J8!ӟ0:*>[&/"A{#&vgr !(|6߼)LL,'!d E>b}a&W=ZwA_Z@hڤpf>t|R AhfViac劉w)Hyp^1Vd  3./nFE|:N9fq?CݡNԑ\\\x5Mzv}'y4BbۯQU*+WM v;<=:+4βTd6f Zǯӡs%fz!Y4*z;͞.AAhD⦵El

-() oAq|Rݰ?=:y޼>11h)Q']+i'uSl1ձ5Dn>?fbE7.]^w#q>B#`e_[gPmQ ww;`K R(S9Hk$Wym q:9:u{ޭb(A: [ EpDv~}0˲$X吳N4Tx-DѲM #*=CSN[# gVJ!dZ'Q\V`CI׉'&l  n~լIeT 0Cd d ri)ކuWt(^8Uvj!Q4| m#%w@ kPmϧؤ'xrðDרcb0ulkT{ b~:hJ4V4$t)nD| iVѝ]>rpf[ y.Q/fYd/mb<{sŁ—@$ʳbO/SW$)`ۂ+ b**w&P[}w@LyfB>e:8~4|Z3:B@Ii@ڔ͙6 SjNNyj ?#$-aꖓTo}=#Z#)`[@Iא' P_=-U ']P" `cˆEyCoJZu4J#m pdudO=I2= ˻ڻ:DMԸLF>;+RRaaV(aJ1L3 1˗ڭsefD~^8_/y^ j<Ze_j>W~rT{WLg.hG!>Qܼp0̰&TJ6͔E󈳣;m\B>=`` D W[!><hn>idhFiuӍJbH\#ѵ<-/*0xܫOZ3c, Q2}1`Yc'q\Ï!<.1(ݺ8O^Gh~t+˄eMRP݂ !F]~NP0 3Q*&v B Vmj3xHRYkێLi Mg0q)XhN.knJXՆ[lsh>gd/6bEPفB/m/{% ,uJY!A }38y0/"nl5]H4qmEe̲6͝Y%ct{Ǣ96t鮚D]4[y}pwXva) HP$+譮/'o, .iY!ޡ `uGOwJ2J눠(H_,pL4f616$Y&OH?~BWt5aBS0q3񌯟eީ_PIL`xz7>?:|0H0^^Ԓ0PPΧ@枳Gh~vE\qRu>hFț9?Lƨ& Lu1V<\bYzOWU[A#3i4;SRRAGO#$pJ<8Ig ,[ulD2xBg&mL2lF.E>k޾"WYym8“BU9;EV۩#lIXN>A6G3^pD-錛HXZA p ěS# 5If(G O6sy0b>X.P9=҈wZp6B]E՝i@ݧ>f"d璃c{2L z>JG־kTae[| )}hn$e4Iv탏+"]6`6pT;qNUգZ Y&ebC^*rv'R!+k]".KFfe0NEDqן\QuOAdI9]6"UF]3iQ1n?F|,hF0yț"dFo$kr|ݽGǽr"({K7#7E *h͂նUp7gc4Q/"*Tu "];s9^"?GJR,ttma"%Yu9)2U3xE 2Nr4\#V23Y`ՂARM6ӄ(u毘H\[ׇg-IqiVKoGR  μ w(TDtټSj 9Mz_fhF+KEm~ʨqŁ*iaݗ׭{ \eo#Yf8- O cIs Lv0.`-ih=/}cXM:p||xir E+2}\c2{)D xh}e]Cjsr:nY΍vTfm,uGZʔO?!^lMl$">/jPV8ϷPR ؑ?d;N01= 8lg$P:0U5O{Z +ƭOz 8(ZPf'3ˬ/#G7ސbfCk`S>>Z*Ҋ.\ؤ5h㆐1 Gqm1kLV{[Dg4w;  lXθ:4A>IU:ۼܛaN ϊwزCǢE?0ۉjXX )CaH6u;z2LD̗0T#jQSt+&;M~l.4R^tq٧WWoe \6_l0DV4"p  ЭZG4ר_|nP鸘keJٕ-{m)JF"|PZz%9]ѝ 5D09m ?7z;8Tg]晖ׯr|9IF AAGjΫXu T*S@O;~ews[10bwD42B h\ʕv<j\c}*{Hu8/Fvkʇ ' 4c%OX ؊'_piMvc5e.O$+Rcߔ%Fl;lF^t Ů(Q,%zNg+N$ #9x.xՉws(P3}I'T%5q+iL gNi*>ARXw $bV2 B@O};N42-Np{U<@KZ"ʸOK}qXת6UvX݂k!#{d׮@_<=3fIthcC27M DHjBF:G.-7GySZ-8i!hoNˮl7L! KklqMq`D+ d6pB6*J-61/k\ l C7@§Kx[) wuP2Vǝ4eV)o< r{DRO 樨B._]ytd>& jb$ye~3_⓰>,F`<ϥŽ `Թ(ˑ[TCg:ww+Brr&9<К+bTEg_==+JKAֺrg ~}L RNn;}wc(dve8]z-fPжC,ܽ5 Ķs^X0: ot&tX{Z 8}}\Ւmр9O`-SՆh{_UHN & } +Y HvMuG7EΖb,䂖OUĵI5[FGG|x0C=^^훌ꊼ] p_|{Š1P"sNͨ69x,.Vs_T';?ڎF1PɣQ2=L%[!qz SH{frbǑ1 g`f(L>8ճ`[4X?tS| LGFÍapk`wi>p7"gǩL 3# YĠMgMVWqdL|qa}E)"5 ؑxHpm@blڒ@vMWx'Kx#c\#~R%"ȜZ { B [-=m0e PሼR*e1Nzj.DA>okR;gS'<+ωB@#3>5LBH>$ /*++zkY֛ -@:B<-wT8́e˭>ZјSއ/8`Td0ĻZFnMMb pvS ,S#e+4~4@t=[$k@g>MY+A^.4X$PcF[u;(WoЂA!! sEHbA26ęCV0ս|'zn-ƇB;&C6yH|*+p#Sonyr.n^1‡1m3qԇWݿcF |ph. IP+&a9Yr]lIrfq3tёw( 0XfC_k*,gXxD\z(X`9:{V"ԻO+I'vxoaElX1 ;r#6 `B"IMecq#$L$veU!w24)cMևMĬjU'> kdtF97F*<w#fvF1xH\nb15pg:weO||1]wYM 2z߰= 2n љۨ>{&ѳV?1IϘ=%)%uȄeN!y|\1i\~pT?^GƇ“_LnRzR;vkL'tJH=hxIp睄M, MkR(k,Gy*˛ӘTVO96jl;R#}M$r6K}_tMGVUfDxLz`t'p-;_3M.]|n>60xhzrOuV@6u*4/w09eli=?"fԸ+!"/K j9w DS YyX ,fGClTY GzWzG_ zʗzߗ.[ +z23{\/5Jgv):]s 0a#DepK/OEⅹu+_ԑTkNx|;1:biۮ›JxE*|yʤ.u6ݤ:/HϼCJ N)8 ޮH'8p4Ƈ=Se0xCh3uZYFձǠ1veq׍f먚J(CWd-'z#Q[s]N?z7mimSoǚ)`)g:t|YNU ,2@}87NV뵗k=t+_~nv.ì2Ii4KċcGL {uX0]pS܈=~B {[BNa;seܘplsL|lk䇞>nުZ* b HapBO}[p̻d Q尦 1q".p+qBCer9A5, \H9G\O&_|8E5,$$$EUҩ=wF2(*$V1Oǽw#8i@%Gʳm]m(j2nיUjȐQ VSePH;^fz}x5;}|/r6,W\AߠfSFQK^! 0'z&'Hzd w2#t]0= Yom($ur|CbXyxɪqs43b "xLiI@'V]Iy5D'<.mP^H'WoӬ|Wo=ұ@[wϭ=֝y#4ͧ. :TN/§N1= eB4[̄X%if/֠h;\#x~O& bD׿Z1&a/3'gڕ! hʠ|Y>bh~(Mδ[ӈ_Xo&BPD \ƀe!AiXQ@a.dt_<&xs~/QȄ`ʈK0O{^ڿl)6|1_#aQdE6F)IwxuAr8:DuY4?UYċdf싅 }3A/ U H?]jjD9[=N $WE?LJI՚q~|OjĽ}K,otdfȏ;Cnԙv, n~q9R!H3 a(&0L o'odcP箼o+x_='k7aR2!8Bg"=3/~pp3fh2hYl'PG Юaۤ(QxeD>~ReB>a(ӧ^_p뭄(-ie1w&;Y2ecEh+ǐ$*ۭ&@mS"$}m6*J{5% '➖w(+ ME1jvCF0>uF۪`ú. )ti S`LD3.MvFN'6M|4Y:w+yhߖY oiV `&])z# Mb&b9ZyGgl5 @_l=3CeZ=^ڒ6UJus5 ; e~Y(?ْTmxׯ.E'nҼt,z[-W  =K.3XKۧ2dAyM5k%16Uk=J$VrzZ{ЁA9]؂Vw J ڤ\:˞||adž(;xY2`Բ܉{!JG?`ppS^D'E܉&JU!lm/8Tg߿,2iPRo8v.1o?x]nHA,%l_jM1=ّmGIeՂ_0[V`P IHIs}R tr,ڨ4/>ڋ,]v.cbŠ{x.yӴnXA^N`ȍUHK乳Ts31J[z&j 9•S~ʰr1ld˙: 3>Id$1}rօ nBQUFXjdBc8ߤxnGYL}|j.a\)c :^gaB9tbd:~sy HIY;ݫ 7&@?_&C x%>qA^= 65ٶk;3:XM K|{otP .,jƼN5F$C p ]ߢZ؂q^l]* εS w,,}k]Mڸ}qi<< sҳyt& @@*jwy/l ^*Gj5p3m6ɭ<. =ww9BP玩O8pǵm̌ZaC0HxZ_UDe }C1 Lӂ <\HtN*8:WΕ7]+Aj% u)@N|T(};lϐJҔХI99a_ek0:ުAH'v& q0+2,PD![Bkѫް[=S9u]u;!6M~]%rg*[,F()L0p(}⪗wLlǃ9 Jd .QFݴ BRhMIYuCn1auOjJLXز%7HLF{}f& ]M{ߞڐn!}6M{sapn" o"jZ@_ }n3NHtgQ9W!ǐz|a $8D5]Ֆ(+0jF6g+d@S!D].$}kheTXlk υNb2%msҌtT@{4tӒ;D[HĻ͎y30Ny^?<R3<)^Uy[ Azq,TO&[8S"TnadԪsgEzΪ?/ ^ OO4ӕpϘA` g>6M&p(ψ$,g랻4Y+kd>Dh>5sk,=ݧ{:=섥Fsy}s^!ٞ@7W].-ݨ/ʬ*SlK(ǔ@B1v 8ڃ2'z9Vmހ^'*c=M.mq=V5H<cGқr$M+)X/͜)^}A慝 FpoF>$Iн}]1lJ=PjsMh , my;uTWb5mПfא'wq9%[!X!k ]T5+bp3 5{ |dC+71ɤ"1ewMHyg&cE)gSmO2*_czB>lq4Y D\Cn[]>&ӽqB 7t2ĭq!/^2XѸ_P$1XUpoXUTʯk5/ a1L- 걳xr&~SiKCIЗ[{{TSoJ ޔʒM h'ɖ'eňcG)|{+_g(N8P7̻e㎏-K=Ȗd#/~1h:\^ ol48@| q )AQ3Ocdg#'\kk@!BH׵UtpbE>d+mD i%^SP53ӟCJv2W꼿kk+8"*y 'gῘݓhf6[-L֠= F׿|xcGWL] "~=Dԯ .q$|3`@48JX#IC\JdNf XuGQ(8+fs K5#Esl|\A`7Ͱw#-kMAujWf ZH2JЁ:mAzAٌ@+\;XHDx~3 %vD2YG:ukPTJB,d" ʇg$Q>u O0xG.ęYBDPM,K[9ɌЍ :k5G%%aKqρ22ʄ$LH 0uRbI`[&O]~qz{*-,|L565̰$i #E.wrZvgG/z:w [ԕ^aDka Hi> )UxFEuId ix݈ghtdNi̡Lk_L?e}S[.,$A+7Vۊ3r$!dX>&73$J!3_ ~8@0E߃6&4 _bҕ2&Na\8oL~KqČo^ްc XhqFH6 X3 zk&ul\BS8j1.t`+j6Mj.өqJ10*zwfS8YPb1!6YS {Uީ4ؽiqlVFIv*Fp&Re:ߴ%OZ| iE&tR/ ^4&C]GH'gVEu\}r @^}' Jv\c~G,^j+lh5:e{H$nG( ^|У‹"w)9GМ4!Rr:(CQmY9+?m)=P[4х_Oe*JK7(%w6c)p럩Tםgd3ݪ{t82^4jqK! v3<$;vd$J65T̷>b#XXP%i%%n6]1M2}_( ҫcЇ#!sx]"D7,|ꎂr6#g/zSo j1Χ]VNwWVֹ"mcw'_R fu SkA5nMubߵ̈D.1+Q#/ڄ y (8b t*,ח1%:> | t6M j'$ Moι'0yjڻh8]0x_m6 f@L5Y4;Zq+_\/d,lZiDX 0a(2f"KI5 $xbYMKC\HTӇh&jMF!`3"'LVkPR ha{j=G&YsOOhIkWϛaf?" 糯6e>ṟ\t `Iӵiʫ{B5"a'kژFS+HY}5]'DLxnUlI"b~AǫKIe]ppY^@o[6w9X %N c: bNo#բʉy'rrα_nw*d^mA?tG%trS*kն.wKc(-+a7&U(!bpuX,Gmy,C0c=J A>7EXT0AUҧ*;$ U&^n="O+nqj~q*jE$QxGpDWB"^q]tJ@E~IHrS Q>C6OxL: F!~#P~e|[k6gIr@xZ[i]= $N(_8RJޖԭ٪!Z'^'SFrL^wĢr#VuY$IKނRR(4!BB=,X"lk4 =k6 jj-v V8z9cM)I=f6Mݡ ԡyA; d0*x"׼QLt;XKn|tɇLإ<^e/Fȧ!Z5Qm+ xU ؞\۵e(!aĀ2YVNSUI萛b ' Iw+6n؈h7)%R(m) )}U;)_)+;W,&հ1ݥȈx(Z E PCFl'Ğ!YxsP;)3o pwPq;7iԜ0#]AJt؝pɟ dgk}3H[S//{V^콷˦аJ'9"(`=޿⭖*JnH%ݓ@_Z?Fx!.ju<,{+L,#oو `,lBޙn ,~bƞ@6ߖwmҕ`-53Jߕm *mqqȌ;0+?B]^g@_YDnƐ#\hBBGt=t)h%)\m І>^Bn-a7$Ģ)hJP[h)zZ<)>(O}9$q&HgXaRZUnpgP;y;GC?I/L$|B#roLKS2 Q/E}xЯĐTbD9|ȣTx)#TÍ8@k'pyW~q[}ëٛ6YcEW7t\ {|qyW<.&=eXxܿ%H K|`\K}T=`X F ӒM2@?jvg| b}6RA+s٨@溨 qKZkO3}kX-לISsoһ'O1^Z833'rvb8\ ^ztXTks'J+;&mjO݀_f14P>3 pwZ F]uҳ4>4஻dc]EċU _SRkP.vz"Uњۓ3w,#WW]JzX<>$O[.$nA78< j)hWO-υY:=2aO|tϋ_m) ؁U>rA@4$=iUywa@XJ -%/.1@0JB )G?iYɪ=g}`uCyiJGp*1obATuB\{jt}d=mC \ݪIccr̾3ˇ? Tj2?wxn}[һ:zZ/b;%mP)=u 4"]Ih@| Ԉ^׹|| Yj=!.kB 7cJg_z12ooIBXw-~@Vh j)Ժž&FOX>KM8Zc?97I@i#ȧ1Q#!}_??{py| !!f"{1SZIxD!Ӂ(*HB" DsJXq.DnnDSB-r q \@xc9VHPFk]eO=\X)sn*Rz$i^p"Ŷ;MS;SCs܊iX(OiSKꄒm(>cM؁:z EZՏ]!wA_$ıTN;M]E-gTF6He&41|#VV\*'xyLB+=Z[q-G3Xr>_:?e6\2`r u[̻:9olpxd n: 0D j~:Cɞ]S]/I) >sh}v+z/*f:!txǠodq쵮V9o M* C8$0!́Wx;uIH2zUͺzS.؅-\N*>jK~IQ&^=RВst؟.tyn5ߪN )^߰h%Q @$J Far$ٽpb;ϫˇ15$g̬FKXk$ Xkx=C PPZnSF^N= ` #zLe7E䟊Ǟ8G`brƪlx?MYc6$k0XuD~*ȋiԹnHXd^3Mu|c\.1PłSR642&߳4-ŸE2 vmש6Ntk! Cn`P%ʏ2E\YV$.&J5 SL;leY ъƽ;*";qTA3. thAu96KJ_=<ӬZni$ ވzSXoLdl]׎ݚu@~ɻ0KSB'npmH#5,52ͼ ډ!N$PB;𥏪n9ǰն]1C;y*8 V33,PtW+O(@Gx27`dScBn"c2i6W6(qs n:Cf7MqfIhLRpOd) RNu>ƛo2P=_%yMU?nd(-r ֛79 0P' 7`}Vư”yZZ£M(A.vO,`ժ!f+[on>眼4ӻBCxێ85̽Jw zfKK"r>р[X?C{YK24b 1˹C3}PL_ܸUxݬáf5xt0%ç>sхbQ~MA7`_gQ>/P-9d*WJu nZ-s T BG -κ"ZyTDyiGCfhhWOX"f>BGwIBDVkF*}Yͻ#ۃ{(LYK ,/Yi߼ gv/R1Z/)eTܠN^AМa$?{-2Rm#O3g;눳L{ܓ`4ֹ8,:p>YE ʈy@xO"i%7KH((uʹRkAkS`lZVnåTux"c>LMU*9ĺtYaZ}yĊW)mȔTD sꚤ"[wT6LEk>0Ø[%B4.-&QHmz/p~of@rAB}d&R S(UgL$#.M>pD׽ QTԚˊ2}IQ Kfҟ#l3|@Gj n;/g9)bڳ ߢ)qC^`ػ3ٙm2f^(8\),wb*",9vvMQHAAԠ&}+~NsK7}Ƽ븴|o&[g;` !2iP%>G~RKl !d4K4ԭSZ~&5S ce<{Ec&^pnk?pe&99I$ ΤD`3z2(cpϞ\`( cqquǒ1'[ ~EVl|Aw9K zT?8q[β-#$m}B0 ^x]/'[Ke<0aJe'` xzxN4nb3'Ky3{̯bՆϚˡٍm*$<ۯsyZm9j&4K.q m#vIRr{C>^|Z#6"PL8t<[}-FO3g"."]C $z:sD q9dh52Gb&q-ztݿ\p7g n//%OHh'dGX- [ZsɇR]a  }1} ?qב-VXޥ Jc߈TQkIII''T|z@_2XwN6d&)*HN[e5{*73Nv:M2HԦ&c_F jƉÂ.qesIs'(Me̘sYE~y1Mi 0H|#u&RmOV/%96((ƏB!F0/,C\h]`P{1@LZ= #̕K7WOl˳ukT, @ͳʨSj:GU7 &yn6zxk-Tlq~M&dOtW/IpBK_"]›.g5.*dBs;+岦 ["g[iΞBM6/wtsh,,Q@2/rZZv$&eΞ] E'5&׌)Rdi-mV VwU7o1.錖j vN&Kt7 ˺64xֱ ΛTc)H6 wWmX+U/VzJvjٽ\anXZSo>IS*m \XYl*E»> _puFPd#>‘N傋zkÊ;XI%%Uuך") >+/xaLv=Ҳ75Pz` bUd|3VPԾ:ܔU:b0flɮhqU\ =1zm6]3mDߋہ( TϭT`Qmovy/CmF"Y)us#ZҝtXx OSzC?S @)۟g\"sycdLn#9z?*sZ,L~G-~%=>+4ϯ'9g?c:#-?wf{f7޶f!wY (4uK1 BykY}?o6Sm4uEwr]MΖ`O9M~75 e ͇z!{GzG~E]>E|h͌aBu&[/a_TB72]ѹކm8BZaĢ #(EBA=ua򮒙>%cnJ,ϋ~dFZWKZ_O[W.&d˻Ւ4שw[7fJa$VR-v548Vn(ϒ55[ =>"'&d`5 N(WMހT`;гǭYj7`dC@ԧ(?H-!ܺWP4xi CͮgJv1 [VԐqɆxnq*C)|%ǭ6MOGEYx GO|΅6'euH#( .eb.l_K[ Z=б:/ 0` ΑL#w:WEM'y=*@VbjD!;px:!ɮ=&t uJN=H r8Hm%.f.a{ Hr)&4@oIX"3;K+Uٕ X~}Ȭb&eGB|C< tFd#.=}\9>eG^9h׌3xoʽwoV%8Ww>?_ u4bD6?M^UaSDt uj=UmVwՀ #5=N6'@zߐUf*w1nFL9*iKwR&6q HVTnPD Ҭ>I-|8H;O b̕se@9(qfe;dkΥa= ٩Е>Ef{ߋd7c#(B,):FW3,*JQ"X0c!n|uC2*$̆˘ă{]-%x ,nC.\am֙k WVͱ? ȏ49=f.:@sD|w#p#\VUC_GM%yTuNgkXU8_  -É9:+K̜6muui-rh?,&3%25bjAP 9s+} γcaܘ [eM2}N&z@YBcz(lJs2x$<FWG SQ}3šB;1#?#7gɮkujXԣ̙vоi\qә:0I\_\s* .b]Wd&k&͉8)ȔqBO_=k}@ 5t<4R8"wZc\P*TrxWft1Qyx =&eb?NIK_Q /y,bLD`?Qqv̝VcHT3أ17.̃Зz?BSF𼬔2F+%x8k$F))?G^nV I94"F9';ݫ+~?w#ewD!I% Rr35RY,l)DhW s/D+ T~-ԍ-Gu<~Z4ex(9]s"P?d[r<|jʤN aB[B mV1;h;#b ~Tn 5Vo/ab?zVY8[^Z}1_N&˱2S XcŊtrq5$W3u:d Ba ݚVA1,j.5"D7U;@GF>9zGd!ܽ {M?Ӄo[z`SvF jP8ot~1WSW˴?mAq͵8$d`kC)+q#v_:??l#94~Mv~Ka Xr$u'FEw CݖlmmkdogwM05K6u"X_d_Ƭy+v .g}# -K$ xTlѧKUC<_(z3~$WƣD:r1)'fӯm};gC*`s?`Wb֫S'd βB/}d~fKɄ^P~fR oS20۪$2pڏEIT)ꖞ{&X7kP._!oB=܅-spW>/#K}MLpsnmXTKgY2 }y`E? ]-EӉ<1c֝ںa}bzpY!'`=wpi3ybBZрAdA-`_)cefDPh ;+=6A{S^o7# L"ťG6M_latys.O`V}".L`\d!CI~@61 )m 0Ck YۢbS쬘3GSOc&3)1}fLV(!LIh" Mx\5sh-~j6^-| rF'fCE]_ө֓G` 9p3 FO7qRh4?j īApq}9K`S$ݔ-,b7jYR) vMV0^Ͱ6TuxuI)߶,z-N6 q"֝6rĉqE r+]R:Θ92Y{T/ٞ}OO d#Qq0({FuFc;."w#PSskk;>{74A7a릘%9^4h3DG{Ksbgڍ=?fțo}*u1NPuZ-gfΕ\ddA zLT]+`h EƮmŐ713,(Omfx|Sij+hG ݝ"W/qoSngq\VȊ\#:Y8Oʎ†Wn6T]LKX['/|Q3HU%k `!By:xeSn|ɬ; )ڥQ)nn)!)-b݅]_H\@EܪAhA_{` a~زmmxw8Nf[/j djDCzu [ BWj[ZƒSum QI>[b?h\ig+9DOs|->,Cڠл1U$x#^fiܮEԈaZ 8:λ+3UpMMOj`M+yC:Ci r٦Bh }Fg}(y뙃0+shvu7 Nb ^֍:J ^bBg_%(n{Y+ArF~ ],N+hLh6w 5 B&2P%!N]>6eF1T`ﯹM,DBۅvRSyiu'aHPy☂lϝ=+vż@])*?6Y~Ar,/}֥B}OdB #KP8@oL0%Vw'WDvQ&(^s:`~!C[D_ +MTbLAJd}#N'/7CHb =u@'(D2EN"}sY:u98uce5J;Adv}pL UCzu\'yY+֦Lwލ]76ZsG~\ oJGZ!ŕȟC8;@\s/v pȷ"m&Xo8W5~oQiL=h"DLHA݄1;%U}oeVARj;} 6Ș GXn?/FZxLG砍LIp? <&r ]ir+nU~.bŅDŘ~Z.nA)EdNz c"pFĒ53OL9l_W9R| "_I?ډv5"[h. n*\Vrj#ͳ"?70`ȈT'Q `r`~Kzk$*D 2 5вWh^l+g4*>5RN|8_'D͵`w|/7ixL{0zH0"efpV=&ό9ͪ|aTOL6@CM/L(rB"H%^_Ht EED6B+wp_(b8zTYyb&UdfU3̠A !h?%B =K;'w8$} BD C`q^VBy6hZ F:Ql0jGC n/MB6ÃeɥޙAይS,e{!3NN,Pek>B/'GS9|YE?͕p*=(2W=YzZ`":Rr:>iShI&D]0 o͏Z#X,Ji#Ko{^kֻL5FܥEʉWK=zǎ6@J-a7:pB{?N"V·fܢ Ic5tH8=@<$': ^m/q ِud2U6Vw!q3A~TLiŹe5=ɞvUuAY>2$ R)8x!STrA0XαLKSIZq)x0|m$*-)w?06K/fo:pG@ݼ0#g; 5@[huLyWkJ.A~?MriVxp|w)J`pI`bF~s}Qʲq dvHFAþwfLܗ wdJӿ6N=+Z d @i=_$mmмHvT9<#6L)edLe+W r5 9TI(s霼w@9(Wd 'Trl$mT W`\] ӝJMib/fTJo˵[z~"V2y銠{QE9$0zq5QMh"^razC5EIt e!JtUF *˪CL7)`2=@xjuEN8͂ e8 R~b3*U!zX " mwQFHX4ƿp] ^ ۙ/h?kgf WV@BP,oP9Kn3B(z"}r': bF{&e` [*1x-A$ uZ}V먹zDD1}5eֿk>?_‡:/֙;ZuL({EqMI(Nֱ:J?~c4ƅcr73n7 R/6qׁfkeLX 1w jZMlFQo;p_ث. : #G˾]П~䍮;$CG}k.BD"1Yϖ#.hs=H]'`֣9<|&Au 4Xk/aF(H#ufqh(>a'fW54Xh&CePR寽<1Ի:&TW"dۺ*Z/ ɽ*:wTjhD*KQU 8+ E5TOzorgC'Gϑiѧ|;R2@m?y:8\/t8xt7Ŋ- O}y@QqA?bȳo: NAAEfDe1ZIJlF*J/TjD}^E:UsnS*6H)6i]Qmh&ǩzA6j=x\MaR1N$*Z|mz^"T;0Q^q~(u@47DE%S8 s+}0ʀ` ߨ JC?z-ރgQEې&VND@UROs~2~n\Jl&@*CBǖd Fh7[~D˙iM5|%DLX> *ٶؿF9rlJ|uJ3^cq9X䣧+*o"6SJ1qt~.(iĕ8EШ :pJiqA}0XO T|0PdO`B`cs#%+^дe'6K.ãP?W5Hʹ_)==ϐ;NאuO5˭ ('mT{ IݮW{ 䛷O)xS`\#%ӯ1SF-n*уUA!igFuuQN-TBJgtv37'hP(JkoG;~qL6[R` y f '/\=ΜGQ+oez7iԲnMxB3[UjL~)z6!>=#GAñ郼Bec 16 4NÛ'@3DndFhnj(e/^+x5{THsD4ZtRe6fK頇V3'ju<5EƛJ4 M}ÿ́u( `f4]uPo=֍dpwi'a@~1RJPB4!ۭ סW"ʊ1XwwR=%0\QYk<.תiq/"ov lwL\(fٴ9N^h l]'Hohڟ$/'&;O-r?lS! K_>*c r7fLxqQ2LFbrLaTz[rJݾGG{߯Sϐ(# VqcDu'}3+hH|pp|]:pw \g*foB2jfnIl9œ/_["cɯ%(7.C+B3.>|=-;mC#>4Sf2vvc#x밑Ϭ3[/vvGGlt *Y&jN3HP%Mk<'|RmpJ;K8 E]դ%g q6d"ug:9m4Rt# +iC YWO@limoO 5#.e#Ao "1ߍŀkz Z=YW:o+db0ʰLܵG [F)wY4_s~Kg3F4&QDI]uc v ,I#$~{Z=ae|bNWq$ FOdooZS[2,qʳ#U[p2[t?kJɝ+K7YѺW9bHuG, ,i~N]٦s)#D:%.woB~l~ۤq":Yn]?3Fx^T>ךq u1qWrY"g>nܫ44_/LS3(]m¬${@30hVm G/$t è[cGTm)!%&N}i4A6/ЈC С&}i;@yev@DW*ng(ʼQK?qEAf:r,A֝$2x_S97u[D%!l˰D29yZ%,/MP-aW6w9e\Bo^V&s.@e-!=bX]kxcfMaW5mRdh>bVhWDM{wMjdԔiaVh|aMc>y>]ab'[SҲє=)k.0MFVԅmc~i|E~j g; 6.GY־&"륈w]gcN4޲ \Zuc:'}>F9P88[_ X:+C`(P|e=~؜Kx$ōD y{>*1OC73}2rcn[E8y6M(\N41}W~L(o\?,W#O2Ճ =q|21wdrJATZl7u$WH*§"8y \KVh`X, ֝ f撬gүFni@'2DAa)lGݛ)[Kp+aA}Y\^~kI7J\o˘u)qg2\`x.ࡷKr%wP'Yv׸T/ (9k-G`:dǻgZz˙rʷ:51;Y"B&5h k F Ui^ObC]:Oa1ng(o<,A=CT'ޡ9 LL>d'wՔ%VݸWa}=f7/ k{Y!QI;g]9l2o9jƤ;E-Jx2򗴉丫j9xHguӕG*_( WfMr UimLȎ B'%Ӻn!^O0Q#X24t"aR?ՌَyЎm=z%w~W˼j!,!=Xi&^6vFXgaqk@Fkvd͖ `kpK7̄~[7 j$AL6b5!?x͂@V32|^8"߶z\|go_? WZԶC.^jKR\;3N?v?_@ Hzɯ+YC{k3#f\=Y/ʞM/Y@x*aQu.<;;'Vi'&Hl 2/ Aу\KhL"P(#)uײ~Y01t~ODG N&"BMx4 J&R>`&sPͰj ͦWJ"{qP-M1d4YW'!zɢ:LR@#q?K`xc 0؄am`.HkLT%=~c+wjٷvJzbS]N#ҁ)"DoKfEF]iJ^)G]㺈b+iƔ\!$ZH/Qy:RaJ2m|)(k*wh0?%at"-d.߉ȷa+j#ǯ~>'Xqa14y9uj&2Tٳ#RxQmv5Vt.r:OSC:K"W_ fI0wh*\NI̘IhfzU4LtY4yk*[q{kmUm,|>=<]-D(ZjjSS}+FZ ),+e 6',yY=(%]#k1\dgLB_I{^kq{ۼ0$0Z|.TclgXT= F뒄;ic@HY$#-|@]6"?ܿ>,wb24Z8iJta4xCRЏ#̋V;Ǩughya#=:2Ƥn?u͢l@ 锌7ԍheNXbk)SBzbIssCHd7K_.p:[Ҁ)ŀyF8BE˸•T`pmMk6Y؏amk%h2i-%h(F'IM /sI)I9Uʯ:B9w۩= ct؄;W'W {4r1`H AKĨkl (8>?WtW>`ԒKO#|<8\^%oTžc!Nb TNz6FY2)eU{ i/uLdrm=9ŪPwD SjqR{C 60&lp0,EQ[]h쉖>ug-f~J+CE( .syuy"wj #b>]xGγu) J|aǙ J'<i]E ѻyWAӐǸ8]ĚݽN9ލ13ϞVU[&UHPMtC\=#$^ף@/ؔ/Z'WUz 51cdV[F,Q 1ͅ)?F"W}%lƓx{*"G.Wے^rhQ3\2|iؓh4_;4h2些 w6X5{̕0neȔ[<佈]2΂0fx_w>V`24# iXmu"}piLЎ$NOH,*MeSSӞ̪wk hui^?Yw+ p=Z\>`)L\/:y{ebH ȋ!O 35QxW'M`S7r]}q=;}V vJhS>3dH#h-]B$iOF6K?+hV^_[]o#pAGXhllE%0 ƃϐTl>\!QU7./7^PfQ_4< 1TMˎ=+s-ej{X, Be%߰[2iyj UI~ͧ -ҔӬ_R Wɶ7b`QAR[ F"g`z!x-026jPt%yBY"$ƞpvSʪٻ)+t\cѫtmbmob|,Am7$uE7>fKVR!$'`$9 bq ]hmi xDFRt&śVjKR[F.V1x.:WgøwӻWqk&9T+Q`u!(UEJ!bX,5?}ϦAêE9SV4ﰿy<ݾ_d>IA9Ҭ!R@Aw ]%oh7Z+bvbh/XQ"BB`:x]' ĖWoX=X){qs7O=l@g5&~gjAIəTN5:fӰ͑Ȭ^X=!VHQ۹"0=m/u|] ٳ_^k^Ȓ ea4b7jpF̿wKь>@^KƆw4;Ȣi;}j 7h0-:2G5AB xFZ|ߐ ܌e3An`TdX.:nJOwDfAՠN#*). bN `"6m¿k潋 ﹰ1> TPvӞd*mGnK8-7xK7/e6aw__V"f12CiLl%L@)pf5427RbFkoAHc$BVޠzl?iAnH%W*͙j:-aDb;+?J6tV!eϻRhm^Ané!ClrM^bhװpo`iSmiQ p$ԍ?MP IΐaI'w!)e=CR'Weyw ]9"g|}f! Lɼ gu5ySNx(y>x0$)M.aVL鼹 N0p+Dwͺ5A{il,K"pfhϷ' }_V/bWuw7;>it"jfuKÂdByDrp>zZ] '5GaO #wD q$,XbLE,-n6s΁b6fUbXn.-Zz i Ϥ_6a|kq~9lk BKA@Z#輄3@+>BbR-+X6ykNuMIXC8jPWnЕml.sh,El$(վ*wx&o*wu`j-©6`!M; fG+hK/";S):.2L sS \庹^Ў|Ʒ~6ʧZk>f,5r]3uξ7lT'ުxLoˋMUxQ#j {O $8s}v<KCt^<>/6fe' xc(uc@\_8#A\/*Xq6 *nypa+ʊ^F(mҐ@XvfCa~~=VoU4 E^@BkwvÓl2&*Ë1ےxF0/ݦu@4H+9mZEW?z.AlAeY{tr4B3鴛k]uJҨ\EԸ˜2">HH<*abo|lª>1-NL^O?鳮oŖ쪚wsE2Zǩ1nK(ڞJn fҥtyqM1QaQ6_o*šj ~z|Yf$AiP{[6rY/tjE J=U@C/ڥ3&B8*\1Pz¹K;u56JDy!m0@B%8x{+UT.Ț1 wR#mD*)Y|y[sYDޕJ‹~'[Ep 6j3XN8FF[/>)F/$9Dpf-'Kn~3c˒eo{4L aݍ+_d8iYUig`ƛkS^QT1`Vl_̀9\,l^ifpqiv'GbV5P`vmg!j݅Z?6Я[lnsUap>K  LmKdaQͦu$12) tEWYm2.WT)0X&8ϟ`[YN˨s9ATŤSho[НQ"_gQ1{j'DN TwN Ug" ;\93޻s=!b)X bVf:6 ^+Է\'DBx-$yk9'⍹ \dLD2 ƤLM(Xu$yٮI`C&bdoz.(B-{6mV sI9I/ăcT,E4BCkqrq2:z:+qscxt<&Y_Q.!d'yc3ӰQa?%Գզo:@J!Xv }(-&wZ\0Jd 802gkXLQuM  آD+w*~,>WAOV {V_Eh[FQeӔ$y,n n!C:gߡ!j2؀8\/MpȦA߻#I_PŃ߫݀E7qQQEXbnSV[G,EFg{316G%[U)z `⻁Yw%yHZəo}փ(~-%RZDo3m*6ݟZ+<ĮsgS'Mzаw'4`uͷ*2v9}f$R_!wiA( LFՎoL0ُ FgKtAT2@_VzL$5X dk(MJuuЗYquB =y@'x;H6x}mn3"FtcD (.V{>@ LRy]9Kxx6@ X\ @:yF|C5^GTx%U[w"or"BW_»;EQx\G"YY<+ qZ Q25d߀w.‰v0:$%1j+y=Us'/uӎi< Z5Mzlq!U9?n!eG>#KBUlU[+mN`|]m HAY<̕M9ԍOiOS@nVINg-BUcvuȆ$'"HE.BLu:&D_xn;bWleۃ>\.7*G8\{O'ЗVDjo X _' DQߦ-@=P Ρ)`wU0 %:H[0F6hlrdFR?>%VM|w_m_ t\8*34oѕi/Xca'l[C(+F"SctGGUns[Vdpp ז~jբqQzd &nޖ`b1f2E!/e :goϛܙ3?zJ"LZ1Qׂ1]Cn[-g>>۸4`N XuA Mt0D9D\.A" ,Ɲg7w_)$"]0nͪs:O{E*+ }]˼N%C%;* ٻ/|Aʵ ޭ$.#- {$:MT`wJ\ "V,,NCO71C(wVtq+u֏NׅEWJETe/͓Q"i]> _FxؖV/`| Nwo{wS|qdU\f?la7yDQKQ@QnpgcLl(,0IH@AB@opdh$j춱=jC}# Rk4dxqs|}l4bwRA{Dg{A7TyNuo!'6\rjJ ZP%1T^7NruIJD+jHN:"iw{#um@U2縰4t\ZxC૦HT#N8W A膾a2Sq` Jyѩ0}ZE֏ ᕞ3G!G< S}cBw 1cl!E6#ğ"vWU*ש#QZ F 渷&a,Lp@x;jx#eǬM;viOxE*an4V9g=iax$}+Q o˝M%QTJGyKfGdJ=i.$G$ Olp/R ۆK1`y%JH+x1k.\)ip"ꎛO]aOK=hl@@z3;i#-[dX/&N>Ix⦐yƈSO0@]&#sBMjP&+Z)8S­Qޤ+/ҙ}?l=ut14,be7ޢu@8Yq1]f2&u68m6-ؠj$mVE_u ՉѤ&Ӿ͌4)`w9VJ}S "fpk%BnOmʥf{FpvuC"jZm,_e~F$iXL/!7Ś ~yh ʤR)lu.0yY7T$caXC9y# U~" 2יWj fl'k9]lxNH^@wP+hJ+ysDNLg N@rWj' \^>V (wکAG[l!kLY quNk.l~n͛$5/Y;uJj: rUщhY|Uԋ;hp+U,׵JLZ6Y.h_ї,RSwp+UQ[9P&YG2ףfp,8L- (hdJpRayˋ{DF|7>&mVcc~ABI.< byGTy 6Ļp2_J֬3yE 8-OsiH?Ь RcQ4z*3b^#""𑠒`Y{ױƌٮ w-p%YP3,?jSC[gu'\"Nɘw yoDOߪuSa%2e0{4_$pEiϺE2ZP ?EfHIG^C@*⢖Q}c$|_R'D$f4Vr־p|ׇPQSwCkZUvnK |0GakYr$RbꑐOw7el(P<0`-#'>{$)W;;c7>o'J]8F(l]ߦde3OY2+`6$u՗g^ޢ~MI3ϴsVM&88͵ /zsЁ/kVd%4ѐ:ǟg_}#u%c8f*&VO5@y5x q74_h~HGtˢ>%Ds;h#"!!eqUSBg\t9E[A `d@.{/ٺ(9ú>yC7iXtxV@(l,Y`5X~Db)BRGVɀWnж$ΦLFMu49E^OGôQ(D !zqSr"L"DBbKT<]?]C)8>~A?ڭYS/4dcc\ε&j1776@*$l|?Rӱ>M8lkb3 \䃂S$T[>gN )S, 4(DH{ Λfj?uS{ф:Y)8 Aĭǖ&ѧ(h^qUZ7sw{ 1L%[זp(#E%eXUϻIM)>, CKu3"(ӃsLS4!5;&Zux+1*|:'29gȂ? cgX|(2"x :IbЁk>fFr FN&>/@h.cT ]#&&kaw!j~ qLq/eY4!$=r]:KOuFK0$fFfy81HDM{nOcPo^ _"hgljy:4o}8/f( AwHӴ txo= l0HVvbR8x^67Dzjl}M?Snߤk;g@Z&sbm?v!ׅ 9 :/hdۀe¢{\~$Mr!a 1.l^uJ!5GWOCE q_ebFUӦQp!aGAs]w{KNԥPz8 Djyzi$򇂳<32q0򷡥ot]ƓЮnr2STʔZY"lOAJ3hDYRÿB5BJ{W4aq୆{>Ua`} Qz[G-G ףS+k0QSt9ƧxOlYy9HwNkW2P8bgH)+}mh@-|e ]&Su^??^ܾt.&q"kص+:u f6 F'̐Q\(~0˳a{ֺz"- X=6C`QMJ5 1j 擌@Kw$4mst?w |9~}dnOWK-B̭6؄xatV=.dy*S‚Ö́L hXEnqPmChue4 p2hԤs!(?T ݤQb, ")}FO2gX'+ VMg%u*Y&&N=ܵ5%:Π_ . 510"_P)ïB 7}<#WAݽB%y}MQ7q"ɢ؂{uV{Trգ'(ڥY\oHtJDU*ֳ!_YHJܳI7BEyzL}ԯxw\g 0wx/ڍoonm&jU*fHX4[&+;}ycKlF}C\i3߸nk`߫d_9wTkuSUx?_2͞D ً}@;7M u[_PƼ=^Q9m η[NRD(\,GSqWe޼c[!Is͔aY" a ^[\jT"mf2xHsD\LVZ&<v2kAP~R⺄o<"նy)]/x\{`q& {ƃKIᕟk -~%[9MVUZ dL'TP0Ma8| 'O>41ϴ =yi,|d4{ؔj%^l{_ؑdܞf(bH"Y?5RbPO:y8&B*MѠJ 0x sb *J>xn=I`$)@5QWBksa+P$%Ɏu}<^>s]8e[K™xxQE:ȀJ;<]L_فf%m*rױ ۲J]ov$z:`tw]uQK-ݦHI+8=SgAB:3}G$qjZF g snPEKc{,#7*0,jq 3ӌ#[Vtd~ G'H_1`ɽ{s4 \U 3PG$oLRyFn.V- e҆~,%J*ؤxyJndʻ[17}Wy^wsgI,ϝAmu^$zuF# w40*5;$D<]a;}m u@ˁ"mH&3`;.4glɆa'P߰E ]JA(L/éi,!o|3ob[#@vCz0^ 9ir|ʳ^UюB5p .Q1'M=e3&{a0MhVg]X"E+ /Yn** Z7Mb _S` ,TԢ*+a-+dqx)TSdx8p+lyFDh wLl@RcJ3:Sa3T1%۶) śbۍ#|%(tqQe.Og \)T/Q [yK4>x%fg#tp{c?鵅h"0r)G8d!O(!yᥥ+Qzs[$j: %^c_c2&cgoiF3wGd_Z8 4/#Ocfi̗Gԕ+͒o"_.es 7<{(x@~'RyXW.s)NB}w{*\ ]#xQHE%c1nj0xm9Id/ij!̳DکQ^*Dh<$wKk۽g壉E X:y!QVFM͖]y<<#Q4gI<K,g 3x2E6b~*l]@#dM%Owk).q(oNO|u xsUntByΕ6V8I"u \ŕe fA`92NDM+C¯zW0P738%t\y*> 2uJQE%%R֍+_">wƄPVAp\>fPSZ`'/9N(Zpby}O;[ދ;nS..g4qqHD(&S E={Pd θっ-iOCzX+ey {40Z9l(T^4%Th{jv LEęe=B.A_ vPsF@1-L틳_sQVu^5,L_{ r5o/$Qgmip0eMlXA!dM[UUK 8* 2*K :@]+8A戬Cq%)j# 3It*^sK?g]1^q^yS[zF4 zxOj5Eejfڏ~^!|k&No\",M?k߬)c8oXn_֗`}PѕfQUbwVٙ@ᄧkφ:O;߯ -S3c >ES{~_UMg:E4 %<̳?pRl2t:1ӘƦP*an{xxRh\k0؃5")əF\sͥvؘW|cN}VY6> |~539.7 Z!b(r="E 7$ G+ JC՜s$2;RTGP# 6CDAo b5 |ޗ8Urnqn\Z]=" gDլ1'YW_ PL"i E:D)xoO9\!R?$)ɵ<`2Q9_\ߘrU _9JBuux;W)69iHF_x8pV 3CBh!D̍}ů|JERm[wWCDm=0 ;)N<ēswPIa¼/ͱ )Z+P~۷qԛ-;9C\/u >3؈1fbp$&(#i -"r pA \&xaG{LT@zƱ'#|h,˫Ko [гg1'pn}1Rplh.: јpe=@KiUQG%1Qd]֣Tʩg卹.b0l =gn]Qd}GH]ㅭX@G>k` M 9q.#ZB7vŻD:_a@U$ppdZF%M6Yx! AbwI~ڑU}ۺE)i~B:k,X t ڪ:]Pp|PplGsɡ%rh>26F*0B3S~ϩFz,wtB?FudofD9 %zz1#tHŸCCQ?K' ZoDđ6M6QxmUj[@"_w(dS’ 9K%⤵dㄍߎȒA*=h|FH61B^zM߾ƞT#9 jiHEp hɂ/BmjJ AL _J}rː DzE8p˔h,XHY:5i\RȻa&20^zr#&mV6hO>)5"}L׭[AҺF ?R'ُ2}yA11ў+Cd8/{`? qW%W@h #ucUWG1-w2ỌDHO#5Aa)795kB~Svs朰il!Fkfct-dp&bKs@;צ8D_~_iBۜ_ TqU!ZD?;rN O{zJ$MlD+,Uf/EJyzcS"U0H1dD@G@rGco3{Ȁ" tG ﲂ VIMGX8j~q~$l;c_DLF M5dbC6\clso/`7ÓUE]_2{4uM+h.:Ѩ;Oq5<{Ŵn91nk4W4M}Ǧް1G\}ʇ{Þb象jVY9@6*.=skRD,zceD6Bx[~&'pQm>,˰Hm)9c2+H')|I i4#| pi؁%Q)4K}`V_f1ū9<6}̢{ ^/`:a$/q,KkB9tyjB "o7 @@Qǔ\!Z9BSL\GഎڗrYfP&@s@aE_0D9:H|otF,UMÇARo5m+FT|BM^ίH+֥C>#mϠ˓X][/!Z. ^u ma&|<|,~l&Nf1gK#vH{׳kf3cƃވo/ =4]=A6ɹ)PM1{Z0.KJ|db%(i$a$MFOjloE@=o#ʩx/G|B d0Oo ^4 _ow勷Y6aّR`ҞѨz%Ml 8!I:~9Y v ^kJwJgxCr^&NoEoNFncRN_/OݗS9f{%cyטMk4$zk5Y"Q]*;^3|Z]$7e .$#G#W`f?dydvA +UO%~p#vu9nqɊC|>9__잹)lUZYA2,Ki' oEa~0v^CH{>atMnl7T fٿ0kˆcN,jjbCWagJa.)=mn sa6}B-Z蓕@ѶWz?nMZ_̸1ƚ!ˢy5٩)&¬Yр:ȚI[(&~#̦r$x!Y*,/v7 u4 cwQGRȾ?ȅ Cˡ ,U\؅#jTy>DXB9fQ2lP,Dٜi]9jm"^kpcOK2%g~ ʧf~𻯘סD?뛝h[V|]IB0p x+Xwvz2:a!e):W]_6 @a1n. "yɑޥ".unU=>cy~ uWᓢdc5ר,FWasKHWޚr.A/ }t*Xu2HlD3%09DtJB@9FERÐ](K9:J,܄025{Wѧܜ*5jKS%0,G "$Q3R%!Cy hKRp7;t.+ <hs@Ap)C͟._y/2PtI&Z_kDaR0XD$@Ziu=vkuֱHߞG`@)l){RMB,vi}wͱ}=eY?}uǹsn(?x.@ Cw @Ҝ_!V(I 0^Jv~=`/1TuKO3B=q_'>b;Ԕ cĮsrϚ#tu.[t,3Ykgt'IF$/7*[~C4blmG^rxyu0Tgej sen(:jmgHǙ{t_  `ޏ늨b_Dn;{!TrΡxo$!X14yKAIHwZС/\bTHEِYKn+w: Ctd9PrѭS1wc)k0ʦ(>}-(~#J*^^id(ltQ-m>\1O };$a L cEm{w1hOE JJ; pMњԹ,wD?5n]/D].fR>#$;+[ާDm('l*߃iESh !z zs%R"WkOjiNa׿Li|耳 TU/\o^d)}oK;\xzc1v<_A# ͝ڛﭕǐ& cOy|\WH{9Dl$4I# :EXz =(3;}~P klo« 54M܁у_X78_{e?ӑ M0#9YGHxM#οR[%lsJaԀMHz;֨hy|!U } eQF:)ސP*ŔpX1ԪJC5 \A]9wCP/Q9f2I3lQ(şβ-tP}{Q 7[l<ǣdy8}(jRӝfx$mcߚȔ2,spW5ƹ4?dק1_@-0?Z\k&2*.g {'51Wͭ*jCi q`Ƽں}~ו%T|<ES(2Ўp, Y!&Kh$Z#qW'HAIJbK _w4q[_|mfpM{Ee8*V#mB\:(Ȅ*Me[}Q~+(!Ch-Q`1EcNl;qOXmseʷff5,q)j+X R򫞴}X,) DT_ 5 D=].݆v.oSLN~mX7^͍R+av_aG.Pdƶ*c3ȍx "ߡSduQ4ο?. ;qTm[H1u Z!aozYxY|O'jAIyҟJ=+ˀr=sf~rBˣ7Ms\*[ ʣ$O`~ȃ Γf3E! g]9 ;ov=(儴I6R^+j@Ki'^T<ۑ+ԟ!!v5{|wdޜv >|nmH -nyS/٬+-xzO^/ N._/;iɦ..l:ҟ([T,Ngf),ňF5(vAĈ`@Tg>G$szDl(A*7O"W_8#VsNP;Wиl9vgަIn?gdq;cp=4yi `PB;NbTFԤB6+;4jBJ=;'hBDiRS}l{  8E8$˜ MN͛su@ <4׼!uIz6W&>.Y_@d/#E wq$EC>Iz7dp@6Sb0= g=4F1VKMmH'm1a>vXQ3U1 x)FVն`wd|jBv$HDО2AGPbfG( 8Y %J5)w\pjCyh-QX>2 拨 8GZwY,!~0{M`]PJ6>QS#gI"M7Z/#I6TUI^Љ?nu$/i= ֬&o:{IG# Z'chVLC٩)I{8=(_ˆPѩ{]{2\u #1ي}1[t n`XddD\6 0U)BֵoAX)R7i4 vHJJkp; e82jfʢmHϤbd&~4ESm(N00^Y¢1s`0xڸX͉'X04;Gs&Mķzwҝ#cb\cbG'u ooIԛwwׯ\}Q%ωlG9^27Yv@U=pQ։:JG~JT:2x|e(kFcV蚁+30d4@hVߟI<ٔY@=pGJ#7giT'W)EzaJߩ*e[˱68( ]w^轗DI's &A(Һ̅gB5 yV7~h-$ݦ@\ū πĞŽ !x(Zc0]1}r:"X&Ve̳?q!ćOq_ڃ^K$wHb5/Y?P`Dz%-lte\fY J^d,S@!]e/FY] :f%oU1}5pJ {sDVxrDq? @:qהUgwz̕}>'13P#TRv*E^B6l 5bdzg lU#(][H͹1d_(A$Q]"b #;U|k*D#:JopTCq"w^@ =mZ(h[X%l~RY=CN瑉-oﻲmsjm8+1]c}b^3Ǿ)̶I%/xtQGUQC85Ϟ,~j6;A eIVQϻm_ȋCJ7DlMنˆjk5A5ƻ~v/ntq(l&A|Vzc;rxy$U㸮S yZvk̤wp ~~LҳG Ȩy1~hMU#NIHgkKY7jRK L*8\ pLTz. 顮ks׉!UG"w=/Í!ځv%2#$ ܇mjY;qm+TP^#8 fpcúf^_԰崺C 4: `D bB~@In$$MtB7T{G~JlqǶ;h!A**`}Fl|t9kn8O`ۂPZoֶ<O6:#.;}FEQ |l0# B(,3v%X$x؅mҹ3>?΢APXf'1$5;2o2 7=V+m, ɬQU]!R GM#nZ'rb΁}r7"8ն#Znq,с#, 9Fv& n:k3X+ս9^%+ MOowԯS$xis\~oW\X= זG; ]٫eST`O3DU92_r'xd"xD$9iJgiZGf[Z$i4"-p v-fU(*}itm#N+Vڍx.xFU\"Uæ=NjB%dJqaȐ+g=*"#lS[GBZσ{z| &5Jw%gLSi| EVx) fSnT.Trtx.ߡ> r!Ou&S[aӮ[F]O(X۬XE뿛 ,(_n,`aT2 hJv;2sg4E;Ȟ1L[@Ql>d?6J[?R;cY})0W9u;t2Ovdw^4wsSxPoԑդNs޲CT,]&-ɨ"}i57w*2c9IGu0Ð܊Z[DvKWџ(5b •v bs@QbSMvtޯ-]׼"^!{>R ٩fy]!)O5}~}fM*n.RqRjg+оE==rm5G7iwo%ꜜ3aTFOy nɷ/`R[i!,o T|.~#VNnH> tEnг lIjxܯq[Ef2zb-&/_Ul ewj~jz rzNk?_R"6WZr+]`ZJ(9ǫrDi;53av$?nTm<-n\ZiHX]L\{~+*ߔ\e"6ƔM\L3&uonV|Dy;bb9D}VT|.U<'SŇt 3[S3|yn1?wZL^3URv[W6!_Gwi0~+8|gj9Ldܝq|Qd &-t ńqs8r)j 07`\b_J`3Ϩ?' `hDrP8# E:G0_s?o fGݫu˄$3}N-cQ;GKM5xT N0)%rU)}9 #xGW YzRi)?)C$!- Y!q-2~3w qTAӎa[Σډj$44*nq-E(+5"yO$~6EK>krH6}{VW<0/|mY%CTݐ,?<~k $Km g[,q/N0xr4-T(D&OT w ;V?KgבM!KyͅS1`6y L_y VG#w{z !XH{ &8Fu1 LjJ ۷8(4ptFۺE#)^Ӭ)wtڅ/%m^ :27?ڳb ^Kv@XũBr͐Pi=YyCO>@YbLdPJp@eaJ(FUd3fVͮ"y<tm^&z-U4mKEֵ0<vb]PnG<Ä23e ꋰOG-K0/5i@eԺ7~8:2`sX;O%D|:;돜K :#l)?eXm\%{u!x+1n6t#`.5donL46#8Y?,FBdtvRX_PcؖN~WzoKù~>]ŐLe u1Bw.^Y{ \xf'3!m/Xu>z4虑%WOS2d9)`\'^nlFpI[z[Ʈ7>vis>8!1 SbAR[jd_r-aSR%#;zD: ˼vdҕp;BU`5T)2tt%12#IHP4D$El- L%+cB*Lɰki4ʘVdO?`"tL2wN:)<[rKr$I~Ƙ4up;F2l۟cĨ/^/#cAmaea,H! MYϝHx{ qئߍhv;_eqA/j"JK^.ILOњ\*j6#vZ.o' cFyZ|@B"IS Y?g.9 yGsHxEt2N 7J5wLhvjJLn:=R" d-Ļ>GQo3-Mpf:ZIdNp E]g- &!.|"tod6T5Xa1w_'z!#oJY=s/~oru, }IX ^'K415~Vt0qk&zCIkYW2ݥ Z7?+3mv9edrnLBͼIZNjD,87=h(83O^6̇8^bd ` l*$-h"C7 N2sfG @@YvXy):r&nZ_E*, (& %";֚3͓JBRЌcY.ov&(CO'4BwPȗ Y~SRR-\ۮݚԃ:Ă@JN ֘xO^K:(ׂ=ֺKHFө>lbF?X:܈P+d8ʼn,?&?˶e0&,_ҒvHrȵeB-*Dp>ZoYXQҀ .PdI1|_~'B꯭lr 1cκ voˍ+eVi_9.ޚ)tV(]=N.{54CP~=slC( uJÑ~4xќe_j:ɄHm ܓ(zpb/Ft E%eV#c8; aɦlP\Y@h?#M[؍fV݌O^ߑӌeGVů*ajG7N8-\7]s0~?B+ Q":l* 9^EAo׏.@2*ޑ%"k")F"5ޫXY<L4#0)[|2=82m{ lD&l~݃\kI1Jo_T|=j 9{.H"6JCh&Lա! xRzVe.Q-jO\5x_&icd2.;?ҪD6!3@BT(Depa4V=:b{ՠr@Ք/9 HB@ #;&{u!QŬݾw[Zs.yNI|iQ+:9^ڕ)='(Q x m5*#Be*)|&fpqLW#vIsZO}O^ȴt!2D,xD̪͟8h굫c}suy*Vw4͇A.g4.w5o,7Č?؋O"uPs3>Pm{QP ޽L[U̵h 0D+3 珔O[R>Jz-8v@9)B:CQZ߄}ڌ%cY,>>m~@?Rc(%5Zx-\*CsuI/R@ve 5l*bU٘]hzOzP4m˸PQ$݇n%xѰ![ F*۲l?xvF֐h1WsQk&N ~.O#al*t<),)˷P# SKteFWrGDPc [ֈm0XI^_xkV#yfTG C)W?tR5!#/W;pPnpl6Z=xBv7EVJ'jRw:53BOWR"`H;@BoOA˘(`kT(w[n%[ )0}xu{9ػ!X+A[_sR @n 101Tdv#wU&O7:̆7Ķ fxjeVpo~cGy&qTq, e+ zJ1]=qp*u&+/֦' ^Ng2!e+Yr ;1™}R{7(Id0}أ@]hH+ N['a2Kh/ق8me{1d bNh O0C_qA7rY@nA;¥'8 t2`@ KSX~K ȣ'2=#:[>Y[iT&=cAP? =p9? 9d9=NmUwaJ.дZyL8"\ݼ2 xi3Ő`Ǩ>ԫ?TrjKKpl~ĕ7@P+#1ң*W׍p>T3 \5bmf1HoPIqeos7+4+KQ4Y9e#A)YoJw)c#q0IrUEN,?FSeO4w="LK}?pꥂmf:9CSg&S7?{33AcA6D}AWHra7IGH'z%fWe }jGކ6H%1|=K%O蔏W޼wݼ]32'L(H$+;̓la0㲄6Wޒ-̓cz1 %3o zyf+a7v8o'Z>ARvE28m.u&s(COj$4@Dڟc[j+c,("0WĜ^Zࣱ3^Y6sc4wbD9k!W6z&gp8ߐs6Bb3%2 @ ם뤤w)ku@hwq OetfEMty͛p:Qs=c '>d(hpT{@:4[KLC#.Rr: ٮ&)5i'x泀x31'8gK4۠m>4 J48h 4I"1M"Z:%ou?*=t ^L-o/S6D9),rD47{o_(x3 s(d:aGk&Vk|$-^i+|m؛2O>Fe^y:HpDEyGНbmyk ˂C GGLV)T07 ~ .V><,E`Àk8Ķf*g:Zܷ.cpб"GS:'vlR."Qs1zQCGr9\|PZ*ƥn uK0DqƗ8?NXvT"`5sxݶn]C./>ׁ6W*5^XT\OSk9=eugé8v:T /熑nYU>6~fx*W e8j|U%3--,~xu-k( :&=]BUutvƂֹқ&޻br%ݏA+TnۺPVq%jFa p 4f0Q6H00G\%TVZm:v-贩"E4 #JHMI]gN%QCj)pob?(C|y#xwae47ha[nq/CoԝeVzPOrZE0_;Oo7T>dk(JRz:wNy\Qo9i;dk5XEU}#&֬+ؼ *HS[Mئ)-VYr*8PlIcGَͥj-eSU(̒~/dJj? Ե de8ڔ-6`{^KѧIxJƈhS,A*19%< >ê}u);XM=6UFj:? Uv0*E9g,H4Vyl47_Sg0BChȉjN ޜb|.v8u~`sSUI h /ȟcĞkG ^9 n.._$IN_Vm ϴ(4`u|]\eVVCK# 2=?Vla֡xٽ^"5 <呴STx |$RN3A.an[; x9JŚ,C iy a8ZKFOAg%+ d>GGꃑ7M>;eMNQCcD2SpjR)'u4YU -(NCކ<MG-J\xG7-:SXB8'3%Zg9߀[acg Y#E|M/yhwQ%[!ڡ%y~O˻5@β;|O#=P/+?S!cpo-r!7#-+,䂙 SEt3weDFxK [{_ y Ѵ =m3EʽD㝛#H"Ŗ UN+G "CĢAOEۗ`cwTͪ1`F㦟D<">0AP2 ź!ny.63)YtG^hZn%Y~NG%57]lmdQG e.'$^rz0hQtpPR\Զݩ/ *}]:4o94;Ud2KxtQx~K6[`E7G%WK|ٕ/c ,yDoC%f5M'P`sEV$/=nA4wk KorHކshk"xYsf綏@P]|5_Abv,-z].qzj?]J]/fK\V*Cڇd Lrgձme3WgV䐼&)B3d9,4߻t"5 D tceɾd;R|D0fqŸ1|$h'km1|o}CP@LsYٱ. 8~#8I N"mImuA`]98bhunZe\o1h.i+׃?0715Hp lA`H݌"( 6GX'ڰ|LTr<8!@^N#pޛ>fOs謶  EeL&N̋?G l-'qR }a5dž{,6?]-K?acg6f[t7z톃IRa%~< ^SPӖuk֫JwZoՏe1U6>\IOe 1]պ0jOgtS'˧ќ AK r\ 0XTVwf KtU"<ޕ|jl-iNU]࿰~]jmbHvSr,p.dɎ|d񣆍8}WcQČ -n8f*^=zȲ3h%ss+C%m " f'V$N.{bzA/48)5YJ3Ă](P:ݯ BlqOnvDCxl+}Porg!!?EڔL7v |nXp68ٷ@ڟY I icaMgxe=sn,u]_QujE$N@_JSSx\<˖"f*kז]fq+W[" X;cLS?"ؿ(M\e,(Qb[-8lk©\?O*X@ ns!wغ=uNcJ>0%&w$Sn$ˆVx^MU{ hǡE!`6aKFi>[ {RA#S4 HYY̾:H:ɛ18~ ,g!^)n*c7%;߶vxeJVZ <*,퍽HW53H_pXE3}`i+Mb?R3O7K?,%LdG_t6@e|ז P)5aqT53rdcwU0!nyEQƩ> xD;Q`q/+",hF!jېMme_l!j)xxlj;ͺ) O-Fu(BdV2 wibt+:zkK 0Er~z]dҬTtDm[.d|薋׋ :_f֨Y&WIyϗ[\x,!U9Q ZiS*xߐͳףEO ˫i =.\>0'd{-`a*N} _P]R}ݯ|S+:E8ka6;S6ލA!TBk ڟń[)eil$br(&-M#3xo/P (nY0+kC/T  cK^mLխݍ ڂ[R`Xzh%Hc}xC2R(c~٘ϒLaflM\`N^sT R*fN?MJIR s B1>r$CBgk rLs1Q'h@miU#Ʀ%S[}1"w`18<#1w,!SBf$}T*Jg7;wRyi&k]pZTRq^he;MPo yZTbx WŲXnǥHHdxO;Ms Yĥ[^`.fBCa⊥e"}*-ᶢp4-0]j 0 1"8瘹_F-Yg+3_دx(!V# +nSȁ]>KQ8cWmix10Mǀm +$p`g 9ώVZS\nC~L\EAk3~D u2\'a O(*֑6Bhf!04f1W9)پ% E]`\`ݜ9z`*SBF%6}i X^1a#V|)uC I`Ch}WiF\Yr} :ULdUC0Y^ƈNK2 %Ɩ ʛLu%~%%/ WLŨ\=}PʹYs. +_ eH#c1Vd}ou,c]x'.@u{6Qp?B5t%&' ȖDe~YYk wTLJ`Sx3&!fn#;{6U<۟mi`ye?jTdRQL bZلtGC(GwMҔnSñ_@:q'D*S:򵙨uJM9S:6xwO<^ٳOv_5A+ʥpR/oʝHaR3\ l< *{ni[4eeD|\q3{|0аFRn O\ɭ<ӯV{R[~M23$tN#Ә}9&d ;b{P)H<h5:W}| ^˥3B=j!OR\@΅KP1Jq9`iX{x7z0CmZv'0D?Y0; w4*y&[hScb&c Ej"J" ?qvX(*J1/T4CS].> mx O@*06M[] 3|"o>E,@'r- ;j;~'"7;F4$;a1yT-"qy E+W |4>okN7eSh y'%_u _}_.` , qE@Sl{k~HF% wlO)x1x`1HR&,ћy^U5B;|/~XWQ_dbl׶9*Ш~0qTxK0S['&SF.Kڎ@ ?*bnE*Q TF \gzG' kІHҢXW-*?`%꘯0pkf%.PhT݅FCRqSnNfBȥb W1LDSQ3A.7ͤBД9f0r0YsZQ@K3yb:}s(ne`{CƨR\?ґmׂ',XF³nyܠl vdz,n {,^J9.ys$Us*M Wev `v fwmlB=a\} ȉ@]D3!yUw38G *RgR]Inb[*TJ)r=FXfg\*#k{W2pvzQmlJRETmx}b?{2΄j"f!my'Zo)G4Z(BqT-yQ$e(^&vḲ.fo# yh%ոDDQkuF|xmmbX4=Z"&H$WRWqJ!L%ۯYcݬodch( +}V5~.NbGz"ʺvM}PY>=N{gq1([F(VߕHi&,Ծi3\ &Sh+? 6KQ ީc7󄷗ewGPvFr7r _eIE "xbHRsV8ujʙb?ZLWu*,>{)\{>`~/'TYsqp.Qt?S+!O6+_D_r` {c/J^0?(ߵ !Z5@'oU]E,EلHذZ;oa w[i*ti?b}4%l\dbr5E:P͕.. #T{?('ZOKɘ3-RXV:JՈLmJ$2bVMB|"]3D `~cmun}辇OMGdtsD8GuNuҳ}?ZArsX/c[}OpV7x妍b[ Ҙ/UY#sN&V=ƄYNi𑼄 \U?u$#)\ibhTHmLON5ZVd~ N.ueToR@BA<ȩ~G R$tċ {p˄{Ej#oG+6(JNz2輄[^ @.;#)'p)~|>L(9#O|VUUi8Dk cbeB 3kE?ss/W0\ϴɢT=K* ֣ہt~z!4(uLItuj u:OaDHY@Cm6_{{aab dKTFmYAmXß n]P#\9CYX:4cGƽID6sh6 M7҂X`e$y &=x5* >@pb1F#y;2\F$縮 ۴)BA58(U⠲"rt2[{ҲǬd$^B'~C^T1VN%תS=׵"=?uk@Li,ؿў-W6}|7X)"nE3dW:$4`;Ħ$J:3y&OXHroCBUuMy#<8mMzyDwJpE%̒ nem4-3uhuzwI dG:e,F~Isw"QsJDz`q9_co}T~!m@;PU-㹺Y8'wS-@U|K3E]U'xxw+xQ۱s=MiwE̔^:69 M-@a ׳MxI8 V_.nӴ0c|ܦ"WU6u;GrӅxÓJ~h-5T70PsdxS#$o37f@j!ᔤc+wKΦlsنm|kQ59 N[s056tʕAage ;8Fy+G_@C9xs ˯keH>-鷘K)`&?=V^"}Pk|W.K4WQv;0_# {j"7Գ STau]QMfߞEqHHeT5}7.5G;6?52eLK-?b>Ð"KX}ZX˅TmgV8#ojae ? 4(˹>ȭ[3o;<͜;'IJ.Ȧqm B^ʐOvCGY2ʋ8\4L^L':KkM+hBz =wnD6T9ORΎP !#F55\gއu˗&&~a=XıשC5;\ĝ;C?ջ =؍ V5Y܀#g> kơa'En$ qUbY]Yz-> Gu}۱DrU D>Ԇ@&>@q6nq/]rR~=ϒˠ)e2m[Woe[]a+F|wu՝]k/mtRJ]Bbŷ2ݪ%vl[0,kKD<C~sFwl6퇿dL=u(mRXnJ $y6m>S˄9Hcʶc3hʨQk=+;Cq^%:Ǟnu.:*QpOzA%lgcd++%ɌɖsNq FgNHӲJS6MM&&_͕t2epWԙ7ǝɃ zg j7s?cH т;7 4$X*HhUS-[p= ܚC䫉sk N6qr8('D: ):F ^_k='}5;F[>Q wFS)5Va,ݢ;e w{и\We!^SgIf`HswHV!"P8L,J!'WKu&=̙PbIZ> Ҹ;ڷzf:_BwTsYۤdS'gEyem)!UGd*@/.*xRu^]-ǖ֐[ G2˓ -\02FXb(m,\c*ѤtU6D-:-h*>[h{w8A'Di7~"?N? VXSd j@,x Y{| !M0R#bxʹJE3OP u/pZz.+jQ._ [?` PcD((gYveϊ: >LD=6fUE%)`m_ajx_G"/hQ)}޼YuROz!\{^Ɣ"=ܔ> 48`1$<^q@TZOqk55N]BKBF1f $ba,(}7 s(FQڶ1͔D0{V|Pa@dhPAw<5~<)-zBj$=8ƉEg!jV7%C߶>xf9&`#Mzq{yP2(Ie9qTI H|=;ȋ?XCUCQh@qE!2ax#*,_V1A%6|5lL951Q3aX!J$Z bM9^BBϫܡ7_$Dų- &pó NF*&8]/,:T+&kv OW ixyu>UL^_(a:&+=x(Vg +(;, ˊe&xb:~G@giڌl3z[+<+?+y@:v݄\չ0|?\qg^@=r?n_bl!Ҽf25ʣLNXa3QSǡ)ۓC #). skJ{@\`gs #&7K| %LH:)@D Z?Qcfi|є 㲟Jšd|6~_ub@BP]e/`bcop[[RYA]Vu) 7( LdG$ vݥGxl eP1>fZD}!Msk Tlt)Cp(8f;P"'aqŅGD)}!pB! o'ۧ4+ j>`Ќ)^h"4h1xb7! x.!f ]~YesX q#KmceDC\471>.OިM!޵zWH=K /%ˏeRz6a8EI^WPXGbxq_^ َW<=scZ5N{phPV6TT"\-8i}`U>rSKq3TֲvW=HX/@XlOF|1Ua6hH {T~H\eN<26^InaXݵfq a|_[Z6FwPƃIzNj@XA9?Eic85>`,^ e5*~ٟ覿 mps>ÙihnUd7z$],` *"66ja[i}L$if?̓k#Q 5l =^e?N&<pQ^&U5]X jpf/ѳ\U'ݤt9%~5p_O^^IlL#֗2w8.Nx$!2M#"(RH1Aka3I+d=a- uuH`-y̥s`^3bܐ ʴ*B foCA% Ο<-Q7EqyrCwpn2hYɯbC2#OM-bd7z.JřXJ3;V&*XJQDAbl d(;V|kG5tSG@nKFmy,јbXH\B _i7~kYz?Lʀc !_UTIy! E4Cuum{)*(6A>O.A:94+4- CcR38Tvc\')h R@>3C OʄU_xb7Gs+ћn f!0GFO{w=i7([codM1d6=;|悞Ai8pqn_ʼE&3 ;`,mˈ55>8`Ybm&t "ZgX"1@ u#kkaA[w\f32^=\ÞG:2dXOMbi(Nw ٍH}L_4t(|Y|3,jE7p3'ʀ1ߖۂ(vlt K؄&N-OQd3v{pdŮkٗ' d]xQ8dqoV%įI^ kiRnN@K"wrrUіS)os=28V W33\&I8-Kz XMĚg ؁k˃'q:''.F'Cf6NQ?peh`?ɱߒO%|}/ -۪}RX#N~DP^dg^$ pQ =!AyP 8U fZ$@$+;,RWJvWS\4ĈȶO6F<^@[B3a׵oZĐB-]LTk&AyA6( dQ8 j'"'5de\(a@Ap6Me:fߺ>F+a1U4]hGs b [O/H!|"lG'= 0I0c]ǗUI[6BВ#Tt+7w xk1Fr%+A7h2ї5 LopS Sު},e5Υ6 gR{1pM_~W[ ,TOQxج"޳XU۶O FVW-#:D!bOix X%=!By% »´9Kf[+{X)Et+S9mq/E%x| N+,×oӕ}cWy|ЏT%Z,\e&G 9ý̀d4ó6x>yԻc4K)̕slI@ݦ_N > `NVWx j)H_.T1eYN%J0!l^ G5.!iSgQQk ZrWw\9$͈l+:'GJw#"P߃N/DM>p3v7 Ŕi릲4ƿe-G C9cUPOzaMx(8‡da|o- =~"Kp"}6$P4i=s#HOԛϏ鴶uE=&I| l@0W*׮L٠W0Ei`"99Z}919m$WHɝ? _F]Rvi20Y?qѮU i˓]wl))fg e+,)~tPyb~ .>9pnfZMDR5eZ0bhL(dd^dӡpZ"9i*NP>cX[\O&WMQyy"XX ~vb:F/WxzOb|SVcQ3GG0ؔ~A֒ *CZw#" \ :z! N1oKnIf =^H\}b@IO9d)r f/>#Q3 4_^1lBL4}tdgE 64(d ,$SRX.bK:UMVm93+&ϺrHtf!$ʚ'6V%OπWϣ"[1Q0V l1Y9Uh7=ZYHc5BUŭܢ#$N…TR[WGQflOq铂>L8yHM']}"6 r1׾?;-=!IlM z"ysQ* æ~aVS7!tHdBm+ !Jy__QV&sṔۋ0[wr2Q%RJBjmV*#dP׺>2w5 sYd/g^ʚ{:<(C11rE0k"E_5e֤M'd>;NV !b' iTy#Qy@yCݪ tBX:ofl7'$(_SOMjaV}#?׍?M`$?wB 8 D_[xPe}9z3!¦)YYfp/QT^?3,T(l*/},>3e kŶk2XP%טEKb̅QOPFKόjmpr/5uZDVKI{V>n%- t#v P SP/gk{b ,NI/ JψV͉&&.fbXg[FD;9gz!aBLch wK&i)"IĬ)TgE"$ f3ӗgH+u~[\H4Nb<n˪Setor:W7sy3K5D!P9t\1w%% HX:O^]!-0x 4Fڵ9&5ğ(.e'ιBaoهPB-0R kaf~LDQZ, n##rm(Ɋw Lޙ˄%fWwΊjyܩeޑ[. ;۰6yӁЩ ۹,n~U15+*l08T&>a\ !Dvu9AT9K/|Ch([).$n!(P߳ھ I} RY6+KrW~He30f 'GIB2_d>Bacj;A[y? }BK*H,zś|~:XU5?2`so8  r {uk+#&1j!oxQjT.F9>~S!~n)Vfe+Ϛ6/Ǜe">vy^ #y*+=\n3Si›ℿ>SC9TT{>PdejN$)m`%A6B1D8ꓟ(mAkbOUF=y)oUE4e&aw\7ƃ>i!ns]XVhɚ*=*;N`vLԖ_#uWrƬ9CmhGptc˙Dr `Q.kfᏞԽ%*Pno#r8z@ٔ[(+?H8Pt2ֹW}3ޮbKMߧE˘>]^4)Ky!`ӮX x! Zmx@W!OBEaWCNxT}P7L3Mgz("'(a=ВǧT ֘kT8nwe&sQӤBujv8!YhER&LxjcMs-'naZb ԣkdq5J u =%֞*~e0*Z߈d׻9gv<_{A( @әpVwN(P6lsԳ~|︴`sG<!]nG$-&Ig"-dReL@4peY[u˹Ǯe^I>M(Bj( 9 Q 4@\u6ˆA0VY|f{gיT¼zRb3Tr jx9iAD_ w?+;!Ǟ.C2K z_&KXgA*š猪X0ડV>=T(gF8CHSccNhRfĴ"plM?rA1QWC(5[TFI(N̅An,BGyPbA>XF߶"zu,kZ+PNM2:|}j<%o77F0ܥ{Θpт\NN'15J`7= د|v h&v; U`.`^Zm<}r-3̪FSyv݄ƅBsStؐ}4*> ᝄv',.ۘ@Rp¹^+nqS&?JW*R!D Sk\;%a:U.0gWҺ1.U]QŪoS⚝'_Po5AE;wDA NF]S_xu?̧d?mxکZ!=6>@;Ci ͳ/rӾ=א&4=1?_؃O&uz2iPB=!`͚ٲ=+d?VXK?ǭV.v;7 ˰1FFAV-^/d8qT"g? ÜQozɲFD dvpT@$&'H_Nxs.إ " Ʊݢ~k?:}IͭF }{cd [GajgW3{4 gzy[څH2ܭxg)g6]̖8f/OߍLoI7Pc\{f"އegwmPV:SU7<˞yrCÖqf{BKJE6|dt?uI3u6R|ĵZmGĖ;;0^ =9 g5Gnt/Ɉ~ǃw#*'n#bnibYnhkzRXq>yhG~򛁝1Zk)׌ ]#Ee.9y2Gfbà7<Ȩ5kԪmw!Lv7158SkfɇW.G11$v,MsB ֎UV'`A5*:jUbP0%O L/RhVgjQaH0y!EU54m{Z*<,9AqJjf'!ZF(-Πr?),eu(z%io+vkԇ<YB%kX Q16{_jHɥ-+l׎H>[Le]wLg+3KHBd`8KE+VRjvQ|__AK_o'-s~,H+(Kj z%BKVb)- L[Oe)ͤީޒ,Oh(H, L+*_JeV+X~‘= J2 :ƱjmqW23*ʴOQ(x otS4^~ zWW:;ז8*X&/ƇKZp uU 4k͉;nR ~%qjєTYFG-K߶5Śۿ4wJMn~ Xæv0 ѷo)ϼʜ|#uZ{ ՚r$ (A2oЊ/9#4W ydxtqS}MܿZ]9M f5Gw̠߰o[K/*]@3|@C>u^Cc٪5l">>N( ]Q_]QP$ K^Uk?O [&oFRU}n+mP~81͖~.UvJ$(8m4!0vܵT3om:=MV95Z ˜Zq|q ACeFy,T@,8`#"X@ +'5 38 ~Pgh`HOVIgټ4FfIIw+bYs|Cw7FHBor((,lt? }kJDߤsUhKF} 1u㪔A)\ĜEJK,d"4PIe~ZqD|}Cw\n[R|k}]Ə|>@~Ѵ&WLD~O.Q<6׊ /`iU}\o]pM8S %;ԂcYES}^nC.bE2Խk^wMZh~4\P6 0ĪQZM|k3Vu&"`q)c "BA07IOspd>{8+e7dhc6̬FsB-](#R HbUȽ mGʪkM1bHY ByQ^bbˆD0,qJMp Je}%s!z?V5I wAko2qPTRhoMFQExo(1ZpLhdv={|*c܋Yd_ h:ɡ֖zб))xEU&ڶp΂q$xSg&7">]B!F?bJ"}f!I<}65M2 ]oNFCJfriv`u*NT2tU>O﯂ ƙ@Pf 鷖9b`1,pNt<@_Tqe%B*OkDGxdҪDL uw<.|.03}PyG4xDחgV>v-)RwbX%ЕK9%Ugž ho Yr>rGM," ¼o$0kA>T0DY#4+8K7C\[ C+)7'6}}E\<n=\m^SʀcR=?]_ɷ9]dQ03/|GӋߛ-iohe+$u=hH5"i_MG>dt4sG왡0H\Q̐鳃vpXc0 d^o|ii9aFHȁO(QK8iq#UU;flG2Gx)M-=S՜ ekȦ^ka6ng G3qu1a /yf+mjR5h[~3RnCQ8&OTCǿ,@.ew)WƨwBL鈶v"C=oQG~8e&* H.T-¦k!.tu=HDubb+3#[=,<7olZo83kwZW-'"M7M횞ʞњ`cQoL"(܆qi>CsYljIv}K SEcP͒szq_աq0H)x}XP]k@L!Y߰8Z䫝zWm4H ;(^o4cu}=q G>Ӳ fdr3f"´"#ds9qB=]pWcqN" ifID>"^żNtJ!G` Uqtq9/{b"DwFMJ3nOwݷYvz(i#n\痢<xSmElSFJ9fk=;z&یԒa"ys9÷g.kBXWp3{ S~+ kZrWlHHOoEV^ db"+>7ݞƥ}}4Ԡ+2 M}:Bo\!;^?Uk :R5~⽐&f0,6/A\Iހ~ J>|A12WVJHPoȂA|Jn("PGG ^(1 5{l {mQ,|aHA/È<O+Ln@pX2,ͯa JZs${O8,ECsh$iIDIQQ'- d{$ 8[ ZeW!wPl<6r,Cf*$)p$C]G_EȰħ܍+Mk墼qzrlXNl_ۡC CU>q.|$>f^7[:y$R TrYqպ/p})@*z(о @NIZI{1VLvzU>zuXx(!Yj ~bVY3J_]XݍAaY+U< #g\#KI|+z1\`J5j{zy$OL%SRxxW]J'-5Ĕ" {p^.ϻ]s; }'_C"Z@ah%}4u VX+v 6'2U ǘUFus!WkDMsQ^䘾ISDa,*,~,>1^S]ʸڛD +͓, FmREh,]J-#Lo[/i߰)ֹc|tHYy15͓(*_N R5%Y+MGRr|$T qOхom"z `?>~uAKoW,{Y"rI^]+h6̀i&3:0,.Ξ4cJ z!:/nf`j],B*OIDe4כfsU ')!ECjZ3KrW?4?23!#WnW8!rqe5:i" #0;~:TE=Y=w8E ۍ7d`{x]<.] D\65աZ?l#c{"\za9'bs/0d9A'u[_mW[R]+E^AZL7p &l.!g®yϾ:n0eܴ>;/i 1pYmSS<̌ yyZrq?OMtb`Tq-N} jg2Wh;ʶSW=o5$l#?B<<{6Sʨ~{kYHcJ]WCen썴S(edb޸8e 0V[%j4藍 gq.*UzPVǞj)ZLd;/yv\Xo7 qw5R iny}Ŧ^af*3/^M\8Q-{|5&#+=*xH͎VRzp]mŗgTL7q$_SlV8ESTS2uJ2N~|7Ai7:|ρ'-d'u$f~‚F. -HQqt<锚628QV\o ' zf|EIͣ9pFFM$-gCUS**?JҷA$n%QG;.t5νS&.ʻF(NrL4fKPw0:MݝZ6.68.3#3Aw`̜&؅'KީpKp`⃍X])RzB;Ttu0#WXcBNHLmI A<$ NLӓ@ )rh}Q$ܱM 5vtC3:}')I@\YD]%yhJz;OM*#s0P%DM&ݘnhݟy8o Ī? SL+DXaƬprHý8Y2\R*m,'W 305a"S_^ ivW oy yN$I`H`+J駙j\^%CcP+9PdG4e;[kW]d`M4lM3=ݘH|zUZŏ٪Y)+M[zX.=x bزP+L&NBjƑ_&ے ,g:ڎo20*d[(g}T݁q?E4p rT x'WJT‡P9gxVԠP0s?Vv(P2s9$4nDYBCk%% Xd4>=!lR%hZ!pdfP\2~uƉ@{VxTUY0e}UI ́v |MAK= =J\f={k4tCym0Ǭ[I묟˩vkXBdP6\75QyxK!}<۬3HYULi[Z,5Vj?tor*/bIؘ\xjOF8է`@o0e.,9I6N@t$Ma@@Ce' H!V88FB&LYiqkZzelႳa2ˀqC0q`#W2Ϊkc y{t,)RVo\ ѫq27Qn/xG :5E4HR> b>xRWW̨,ڴS ',< Ë'RDr|b> )O҉e!p%Y /9f`6Ww q9S.:t[|_ .+'Gfah0E[ ൓W/f"#K(+^&#ئ`LK/nT&CNGN_{:.绬x3E8@ T~u7ȉ̇}yuDfS\ܯQHf&~gL2 0)VC u1櫺}" ]c\?-DNz]O$b5إ\nH˽ Z&I2hezت z GoS"\fg%G1jЮv;fyGx/l X낡&uIx4?dbC'vbj²m~ldjJ4Q*oowPYq$HÙ΢/{G8<޻C#ۤzةE<qҶiz)( ZfEw5~Gp$>AuAeJxq>VԻ,*/KټS-NV#%Qq(;1 cJVwscPtPJ\$(i%%뒷/7/@_E|%q^(Yy'y?#&zx0*⚨o&.z@% b3f:Y44' mKbEK,rKJxTĬϐaaX;)]Yu{6碑c(Un,dAm!k[Z: gXWֳehJ/dOū:tmТԻ W:L*%., /v{ X$W-|H}PXw>,/~X;׹.QAy<ąr5KbcXtc0Ĕz4ִNݬ)'`&v7WM&.g?t 0ʮ]hB}p#}y[=ˁ/$9F΅rBޚ<~y'} B|D^RK;T э%I[ =BVا.u=Y,zJ`s{Ǎ3k b"ǘ4ʭCiCC5HRhw+S?fàkn B0dL2r3 @5Oi#CjT倝<2RLt$g0&e@n(Y-oD`*xrCeT˶-jkӿYu!KMg]69So=lގ焝Od}-B-d. EY'^s~Bnr#T#b!D(?=z E38t1 +͋a4/eA%Ϯhs*;z׋f-w#zHA)Bl+d" `eKuׯJ,\bzx\D%j˜(&xͽnF;S.ܐe}s (Biy7;w1w͕N(%j@}ζDM* ["9r0kbs A8';_<^J M_\_O"} it csrycDmފMKׅ+pWF;}/pTa['@$I(*!ۺëȚ5wA ٸ_#a۞OZX=:-R#qs%rE0sxo}w~^B K¯! kQ'1ͽ%B^%1™隱LLs= Ӌ! m4dDޗ3T}&OeRr|O3Apta{>(QSvd-Li:`)2?!.3t&oRBgRЖԶ6FGGG*'뎴"ws?/v|eUp"cfc^Z|( l; d|Ce:E}2?S9_>*byqpVl>(%yjb>% @0kEJ8Q"VR"]rz<̐MHK܂+KЅr*d~<%q6({4sKMO 5h,n p/[≛-@lP83vbD՞ة#7ͪ YuE>(@^5EBV~Ql)4L{Q2@ȹYn2,κZMf Lss^{I In55CL:.=5@.; WBT}C7q/ą]if*%+VzQnWGc}W"1B0cvv %N"Iʳz:v|.-x{pW g:(=s ZڇTZ(,;&~Wdjܬt.`E+5Xg є0C{b  }?dҀ-=pВlu)N3*A3_J WfHaRNbNf)hWr5v$j¼(JD(YXsFp$MFBMw7@@zc3EK/ڏ= d(A cm6 r!/hHV\"4wcr6;#†Eg2IY;QЂSy&"3K7 `eKj JHz]  +P<iI0 %Zƌ-<e\*?Gy&Bju34˱hRHm=l Ҏ0̇3h~#?i{X[i%TbnO=u{F ]㘱d\TRg 7dZCJ0 י#Z0^馷)(NO\v|~?IHp"]1q .4tላK'af~Η::O'I{a !\kLkG eHSuԸ^@Q9К@ lw qh$]@5ͩǞoQIn,>NJgŅ{FT=VKAk K3i&u;~N|%42@F 鐲dOeM }qq9 KޒaǺ™UG 2yxrf =̲N|cqU >۪VPG8_~Uk%qN‘0իObaQm<`o0qRѮ}.fi%Y~pQu%T9יrVN07-xlyn][(3EMj[MAsK&ĺ~ 24sp.`5廃~ZM :$%9*$1ZMO2̌ URmRكv֠"6(C.UQ} pjnԈdäk9v9#|XXH쭨J& r _U~`d}vU{M+_RÄ2;&}OtT/KJJׯhjO\N0C#jXojnpݗTP WX#4u/V [ QDg'쟄$ROD|PDZI=9sFx${;I9!Ʋ߁He?3{RlH /*% 7"pTj)%< 4@{hz~D%ѣv'k(Gw^fXx%3]L~]7RFqjY߾g 9K\sŲ VscA|c2'Iba%Olԣ=JLе9:Jp =>Y#0)PQpRߜ7Kc)K8^V;o0jLoN?t+qDe.mwFĘ"rn2$@CԨ'?4h \Jl1q: R#7d>_)[9K~d_SQvޠ1k r5k`g k +x^7?yI5ԽPvj9sW % mN]R3`jAB|O! L4@;1K^}>@H'bRK%\VWz#DAF!Y&'beEjyVE'mJf&sJS^r(NP)]*cR̗ Ai$M/n=-puϲGrre7c`I,ڿ4 wD2fOQ8\H ::[hpc h\x7Ġڅ @fip`8BeJpEٮ<7y]Q[M>JvDjŃ  0{xvBfW8m5Zpì*,?j=3<;/J Ts=Fie3N+B>(H}Դz ^X-'!Ur)-yI=4橰x,nZz/PL?]B]}ОsO^as[|l wsLJc}LN|PdCj\6iɵ#kIVi_ȕlTuaN|+8˔<<=QЧ=-F##A0GBTM,kVxK|HrTi{un_t ⍘qcg dkPg& GL",PH;,z>lIx;%ӆ3TeYe%twk19'xsia:A-aMY-挛&oDXzb f Eл~|OE(eD;:: +bnxKK(ňHnibf% O&.Kex/)9wbq?]uYdou בȓSӥFњ8^ǐV pF,GC»tR^RFn81;c& pd g =j18܍c$r(C$bX^"\A"Fy Dv)!إS(}E FӲV:*0j'Ps.;gmG,W fjTag^Ի6w^_̐ ITAb2xI"-0YR\ TJ%7tN#QTd .NdE~EV`;,CLxpB$Hē*>K6l )nruXOhjCx Q}#$ǮYZiB8X] Tl6'_^7ӽmVkldE,-%Pv['BHqÚ2X_^rZjls7P"Յ-NV۝}/y ⮋D#8;16FQ,iw\$\Gv>jZySmlM CyV"—\|o>sL3C-$r<ƪd DQO^φ$|{zڸsfE_qx4Iҙ.)d_ 0ӛNUXgUvĺ5S<Q)@BgsEir/uN=, 'D K:߶K`H$/u#gM=T 9pc50,(kKZP~@T8|#ЀMwچQ-xHB2;FoLUّ+].pzV 80l(5PmlD>l.kÌ0kP*[}Cj'a-RaN:5=m\ȡoۆH`PDt!Ef g݊'ysT!!QF LnJ(M%^VLAUkeM`'PQLkԻ@ ?rg []=-Y2b=85pu6dơ\s( )*<7xo(ގqxMX(20+6REOnѥGcoQ?SƢ!vT҄&Q+)mۣ6MH:]13sݒ3WX1!Aplk,>:pIk^W\F6നTk%\b2'9>%#g>Ɖ Drˑ2r<]I p@ Iv!=U$yj_{EIcOҵX1ΐ5iԅkbxk:0J̈́d!EӠ e8 ^\M"&KZeU9j͛Y rC$Zyle}9vmL1 w3qgb|7-y9 * EJMGnO}S#<grSqߊ? XPtSNJ!;J *gCY 5Za2#7\[aN1P,{%uHSC ˡ)2sfk e8_2Bsb5M1@J>GY^_}a(lm ~aY8+[UaR?XA$ 0^еWOa-kCLjf\;j( v=`'`9C0J_%3kYG޳g=FUF=BGo ۢiaRJFOtUGm86T:XWU:oW$@4]qOTL2N3zÐ^pKt9Av881\Mxr^%IRg#Duzv?i^F+c/x)hDB^0bʷl1=[9[65\M2a%U̟yG(bjR]y֢ikP0e6$[! pzYӅ$@\Gigs#5 +5$6-HxvSÚ&$3=.i-V[Mj{S٨L]"&ߝf~# LF5{$](Q;( 6m[ 9`"LG]8JJ^XCY!K yErَ)$S ?h&BJ4Lo${YB*8$;LsaSXJgy5mS>,what8 <.bK\O`%sY_?ә6wCfɻj5-"ʐhBcIBJ<V<!&`B&}tsG}B般3a` *^7#WκVw$Ugm'y e1ibCeK>m r)/ q)P8_gg)&R|>]dRY_܋͎t{ЏUt(@(Kͣ}anSߨNq;Rv kUW~a$7iWi~Jr3(SB$=_>A]=ě|EI-,/ySwdpt΢0NS_H*rxIB_ ޹F #U`cMn/.Jf)M7޼EWd3zlf )3j|hO\zoprOF/(jkp4a}%nEmT;|zZ Ck:9D*7X술 mȤVfS_ve6bAMBM~߲ IOnR@V1 -xPLvOO=A#E2!b'<&RTv,1ALF8j+{oyHx͇Ts %R|sbV, ,]4v3P,_t'9([3.?$DSs,{.6jlA5{/r(mh~ ilB8߫u"fD%CHZG#8ǔaW9mnLpǶz^F?w02HjS.GE!ކME Q+NL'ͳhuZ)jfmY +)}!J P/j'_Ot/-ہGƚ@񢃷_Ur?< \Aqø׿E41"`Բ)Q-Z5Zj.Y"*(pcMѻk`? 8(t:q(;0A,Nrra%!fH~5pj}!o;OZ _DN a-N? q˝by%=qq`z#p 鯻c^\ѥaҮ$ļ¯V$;|wn= P YjNз:Ӝ}J=ScW^vT*0Rڟq*BIv:\ b}d'~Z̛{"@A_l[B Ά ZR෕>t;{R\2r'kAˈNрyX%@ta4 q֠D) 8!Q!X.^]bucyļ!8kYg3rK ~t@DXw1t:JytkеۋLi;4l2j̞33r#f{..Q ڃqfԘ}Z*2w#WI;nB_ M7=[qS+ $1zy=LpO?ã{tisw'Eig:?+ B80W}Aa$r  sLmv8XhWe8ܓKKgU$EӑcwLw_4E5W-\LMQ1H0º _YBɘۋ'>?Q3W !wlX)ZZU7+I.4${^ FT8xL@rlrݲh*Tp hTIs\d] ȑ2l+E7/FH=Ѳjs0jk9Dn0'Qt+(v` Rf͵xl bI^t[E=uI*E@Z{ij$O_)L.06O됏 ?gwUN+,#5 O4%* }))82י)Y[]yȗk^QRq.>#gpѝ$g$/,דT\GbJHȊG& T>(:@~jn@)ᷟZ(aeYH%]z*-J~ZJ`{8E 4bf-G=>`Όު IWy"@ >4^YЊʐMk^of8y.\P8u%8@b>/RR !2sF]3i/oꅑ1't0~.r[$DTwN{1שd`<> ZkjTx~74lAT]+<5(y0ub2`q{O5cJYan9ʞ} K"9Lw>Pa29v`֣0,uL/JiR%7>+CaaT_*p`Z*Z(eL>I`gލ# BiK7.C/ H0 6, - S(ˆJŢVbk*^xWn}Z%2YLUJ^I~_ziAI 90z\t0\RX ydҍ=wM!u?Z^P>45UPrQdPkuߦ1?,Z|H\$2j{}YXnt+ANr̜M[/[Nz˺0`K%vX~˽_dGp7kkD}~u/uZURG-z7%)I`I wYb߻4m(*;m8вK$ T}6᮶Sl4-y3mqwMfAJ B}2}X$!cmkD-n#x e6$OLN-g'gxem3!W_xbVqY>7F-^fGz IvŤH4E=D>  cH#f hEWUϜp4QV[f w[ah~iD-3-B~H6"`nd!dxQ Yty(`5e)}D0oSġ*%܏"ct=B@9ZP=/t]Q#&zͰ2,62]39ӈn9Yѹޓ}|IPG@ŹP"`$Sx^# l]7u@3}kQ3G¤ʼ1T*̞ЛSAJ,RG4NpR}SH70)VBQ2ix ֘5|ą5tZ[%*\ ːRzӐ-U& ,^lt|ދbX)g8>ͥVhEӔ.ULʰlLD[S͹kjasQ7,srva-]2LP\Gm~}Sm˷[.ȤOõЄal ֈ~e{LDP 7;i lT O\BLAZlC^4:_q෰u:)&87^ hz IG g o;jÔ<m%I|b.iksi΃d;}r{mm4N:=rg! (BBfVd5YIڬ8{yާ~HJP loνJ`CoIP GAl*.7X[mU3`.cFvx&u}36Pۍ3RZIy9yP/̗:N,H$ySb17@.$!ƊW>[=Zшj Ed>>d]q$]'b!QlUSl "@6.{Xj kڍAn]X<:u$FD'l`[A.HͦuVU{AtbH_4 UýnճAXֺaʼ@)7 9Toڠ)`mcWsR&4ĵ΍"-x?=Aw,6] n}”MGaMEՊ\ tnXQ990L[g^+HIw "ATcFo{E~>أBH_uR0,f^љĉ*7CEN %yfh-单Aą |Fi™x̤\u<0HXzkgj׏5؛u^hpKI0B.YiLp·!p\wނa~ΊqR'#6wA}ҫʆg96hB[EbKed*Awp_0(؟3/Cp=#0HG9XiLgK&~cȳ%rƗ@4/U}XGKڸ'͹XI8oT5'ref8DaW>Bj^ Y_6OH{ܛQqe I_z5ݬjNB̆Oq{j>]5wjxY$W+ Fw. }7{nM5LǝrjG q;:p>M |/Pu' y26u~4nހA; 9kU ])QzP Jf\j r4n JqYA,جJvԣB@˶jJ@,P'.\xX2B|\kr;l#a2>q{;1i!1$)"񄙳dQfb:k W% 3 RߨWX1 Z ~E&2 b&6\.Sk]q<$)^YiĹCxMlPtxrv4}aoitJSLzHMқ5say0OLilh!|E;Y1UYIG%J/ :Ȇ7D,"Y"{x? " 3@'BFt]H>n4Gu+r/^5Nt5lU[fRSAxB1"]IAZF0h%L oO\&Mi^+A_=|]wj֤H*%}'n{b6 wnw.િpvx}A\bHw(`@x^k7Gvcl@ VXR:R@]Ěm UJ11,@[k liy?8GqFn?S LR#x-QI1+Ʈw? g5-U#=DMsd-db;2dF&`-ř/-s:2t;[Bz BeBay;g2 mxq\ƱbcH|HK/m=0G1}r!d(\:{l{&/wT`c'V&]| x)3?LBn_ Uu]o}?iBdibh|΄hJK(M{LuAEK!rC4?loMoKbV8{ksl]J7[f<>h4+‹1p@{;e&.*TGĩ|ʃ_3-"0cO.F 9_Ì\F@*~Ԧt#)Y0IFhȨe}6a~ڜFX]+=l*{J>K` .Oq^c]s,g̟R-)[&io}Hgl‡y߸Hh_`|s4o0񠆃IӴ^Ce&}U`2JJ{ r_o$o!h>c 0<9y)Rlpc+{G$1< Ǝ^(=#)v6@e:K^-]Z^1+ ZɄo*ĺ <a-HY٧\eUλ/cM/Ľ,mKFdM4ږ>',5;'q@ښ3m+4NR? Y2bf%Rbbv)a (_Uq lX_l?$iAEFf -f4VK7.|aX@[2<~d韇4ycઝ*`.`8'<πeBַ`ݷK3nlB-旸%;mJ&63>ҁDo4 Y?(h+ h>_21p~]2r$;1V pGYocs*F[z/JV.;b#^LU5ɮ--WXzɖ:lgsH=io[_@_;A#?TvseiR/PK7wL߁uY|L'Gײ$vo'C]xb\mU}5'VT>]T =ϸ?EP@pH]";0k!AE?^Yv>I^T2V1I#5zcZ&+:Efo?Q7P;^d+nL>楁$YzP7W_!'# Jջ G;)M||z&x(nx;y5{fm H:'VcY+էERۍ|?njxOm.8ZELk, :a͐`.39Tں3.dJЕB+%@WQ]''mS.C `qmوӹh-09\d8|wkD[hwT)}-OK1Cӭ$3I*k‡鰍@Gƞ _O&2̹gV=2-:K^[TҖQ>T3 Wc`Lp|D~F3P=ԕk#f4!(>>7;p5Uc̹zS1BHfb uilgq'<.5[,P0+^a1gUG#_M$Ώ3Eiߩ}:S ܻYQe8vZ/= [՟v廇p\%FmAf/ ; 8FNV/Db&ۙٺGCpf>Px? AW-!?\R[^|HCd ܸ ;uϚ\@2/һ1׉_o^ ZM.4VoO3( =htU,b (5 02M03HZ4ҧ)-?\Vس@x[ Ddr%jjWm_ gေ&@'z6Xue^bn>Ak(H>,&هH`IN̉`Z# $ ڝP P%Pe;wI}/jR&d5N^jXS/!M1_( 6t~,IZyd5f{&V5]NJ?,ႋ1agP0L 6iWTaOsvd)rp^R16U/8Z rt&jajR^QƮӇpt0OS?_ꓞ]T )hdI=\tc h(șl~۸JL^KcݶR7Y!2;4a`+?M_E:+EiaMX*S-׏-L,djh"g'ƂIn!-hACEd^'q)a@Rq%/K76$[oV` .ljRږ?Uꏡlpl8e f=(,QvwV 6`Pl$ F0R(qj7uƙtD.^K33!?dSW?"7kt ̳Ǒ,'q=3*Xr̃ǰun?ײ^..)~%U3;ękXAbutq37N@'0l Ӵ Úݏ.~L71R1*QU_ٶֽ n!mH.8.?uNu9X+9Nn4îΫE>y14O-Tk1 LL''c!rnEy$O$/B_=bثRdkCu<8,! 1 Jt7DmPL3Y-:&a tfܑ޲*¯^- ގ"sM@;rǩ" ZX*M4M1r1Ul DJ ,`ޠhsksTfX==-lQjr:h/DXځ %g}]o$,~Wxw/$iVQ@ d_diizs[ӚNc\ͱϼd>%_yiA6ioɳ_)Ґ6N z}թpw@O_Csr,zVK71HАbmi#ᘌ> H)UOg|YΞ1%ŁZқ]A퉹ᨋ1e'f0N#'Œf ؠ/}d$ (ŭTB*T, |]z s}.Tz*6"6ѶcQ፽R Px\F¶W?iY坪P5~{-#ٙl{\܆Ul, ^Rd4ŷAiʾ !\{{`5H8u<تgy fvjt g`ќp~8$lQzj!.N)A:$)Fҿ4/M7x o- :#:*VŹ GAG,?v~Q&wo]㬹L*:DG1B.A;ҷzֳk `GnO j+G ѱ6 GWht.oԄA#lsPao*,R$MJn*̸ ) Lp~NlGՓn%j&1@'I+6%2%GmLE+^y6g7_@mpmp8וC^E OFDᐙP<7Y%ӈƸ6r^bi"H8ɏ޾@3R[fs$ eP!rWmYX+]0a/Pi_,mMciRcW)|MU),v2;ISZ~ҹݻ6 )\f(V l|7'!+?sOsj 4zay5%Xtà±&Q\595v! SF1~K Jx{AJ6@{ Ր wX*!QtqQ,_&{GĨmbe`O?|Bⷻ>f0'RXۏ1 LT2*F |^ɦ3ɌIZٍJi131+LBu> ^O:SAo-XGfJrL<-HDlnɂdg{mJ Ѐdp T|ʩ۹b|e\ob&O$xSpߤE94 W~ݱp6ܨ>_=Ê͈7B*0QAkt2%&;f>n(0f'{lqCr/` xGӁ<9b\Z3T@e>Ijw?6~8̾qRn:$>[λ~n`e%wRޭ:.v9ChdPeijD'g X)G]EEm#Ś@6oiw1n!G:b∀9 kTh;3,n] mPSA'T9氶Waz*3-";0"|.! O{)α*FI %NLmcs=EL$dpWԕhLP E=S}>e&G! fv?j^P. #0.f>Cl/5Bl,LVћRn|%4=_ 0*M(EaRcӅe_k.fY2 `lxdйC망h7m}P=נ2tFL`gp :z-ql6GxglK?vU|M\YaÞYQ띞c@JJ2u 4ij-N;7 7pDidiƲ@4o-En\pk,h) FLY[%s3nƷI-w^|wb++= o4b*αwWT 6+3֬}Ef_F(KsQOHU]XmSl.B\=2#,fsHD?G8A*PqK`El1 jRCU+֚`k5܍`|x+ً5:#R-!x"QYϽix!@3 S{nX3G]DTZ^ PP)dHR>PZlLpTn_w0;y~#T:D4/W@y~ӱOyj z6箱J'#QK0b#E:BC__B:L^uP&~sL7ŕjSAO# t@jENvě}ZAﲇUNo2<{ E͋퇓$Y#rCx$Q¦6 {g Ex3xqZ̰8c>hXsJ3B$ ~=a7 P)mi٘^R?|d, xo?ݔjU8wpmTh8C@B_^^z3?Tݿ6a} NtB,CNV[K[؂}u/Q5ƼStq :4){9L dk9PiHHYк Ȭ4JP)D$;.#tnZ)/DkkoIpS p 7lۮh>K0KT{kGS7) PfeC?q5vV}ncVY`zX$Nw15Tuoy'X7gZPEq(1 Ov{]\[|J.(ff줲nוv~m4['ldyawHyu:!FCgB|LS2ћ3.G_W"覞h6F磛 fNWtfV.)1fSYOqJW+$'3+ #j226R6 /~2@ȟ%Bf`ë -S&Ua \}$/F.S1h뭎s gQtJJk+fN1]ܯV҃vFN! nZK,ob:J 6(b1ea2j2 է3t֎85Vrt?F# j8fE`bD4"j nfY³_ f&6fR0&kϦf` } ,4;~gDڻC κ\ڽPkM` ^o؎^yIn1~ZqQj`j\ZЯqIfV~_nK`aw#W8_z-oƿA"HxUz%l?bZqru{Ԩ ӲP άYpa"աMBxmܯI3qAUs{}* ݏYY#م9k t^:abq:;DPwAeo~e#Rcv׸`pE pc^Hd>Im,/kLJEb}]\uNW,+߅JHyJ%g(RP^OVq$%$pKWxn%Cf <ͅ![V;'2g,Cl =-kS)NEo O,c7k~ \;,Dt]n ^y}5Հ@*DaPͮWUgS>ś&P%\V,*s, "NFd.鞿ffBv72O$1nOk,\^h 6%lʇ[`,+ThQ0`cF\ -^_2@HOQ5 r컆Ry:vaI/ށ5 |Į!~\]JKP\3&UjW=+!fGk66H+EpqKYv e0M#6ٮ,t єe{UƜ ^6Ia ϥf`1)u>{B,V~C̅K o|:X)(R(/"|>*PW"s k*4k+>Rvjb,k_~kA*:=f^ {dC#|N9;*R$?UayE x1׎iLUe%P}ZeuMT4vˁF͞ y%% levih}AwK26spj f ::v/y;ƚ)$.PXDvZ J { ³gl a;*x-ltz.:_4L |GHK`UwıF$j<-!$#d @etygnyOl{Qu@NHW rP{v]e5fypG7"Iڭde3U~y4 :òwPC~PC{꾟 7٢]cZ7]tV UN\|+ @7uT"=JյmYƵյHL*͞/IjQ]{> '\~xn8)4OXt(; v)T||_9~O3N)4fJdÜrKN~Ww*2S q0K]5ՆP( [̺}kx M{q6곸3N B~yOҽ?d'5 bۛV(uKɊ+rr+A ^C/2YV*hivFOԣOq-287l4aRZ2}E(VbΠ)waH2CJ$;p |,"/ZnF] CaVjs/?2iR)*.crOOs8b_31c[H"M VH q P?  .eVc/lg`e.q b1V%%YnßάB\^0"~S Wn,W0hua2 u,?;;v޼苃u3SS2VNk i wfVa} K|װJ4sQ rFFeА8g=% E.sh>CU#_nvZeSP. oAʶ G)vih IQ)O( /RE7)\4t/z3fϡ!><raۭv rbdr  "v.H'qQuU,G9'G#eQ{}_^RҊ钀eFj6 p29wPH`״}KJP@!mF~ȽEӖ,`5b[Npk& J2J~7\ H\JlRWP񏬰V@8#q#d S7wgrP3 ARY䛯T4@#FBCX%w`g{5C貺͔dP0-_*O.S%Jsva߉$?2=A ƹWPhe-CȇпE32<" Ɋ*˦,Q26He2L}|r꾪 a٤(,Q?^=1HJ EJn# oq>z;`wW~U7EC wq?cp"zx$f~vj~*1([l^ˌۛ.r9*wS4VA^cE"Zi^o |GtGD7+D:F;,JT_-NwOǥm֡EE@փ9@CO"GB<:1"Hm6wtq FAVDzWOMd%$lH%~B"`w#51)bB';ƈbk<Rm" N#k_ ۍ7 ,x9 ;+3 P L<[>+9#;wқo9HKS=uL7>}- b7=$‰57μ !E3fhI/!Hӵ8kԈ yV.|dy*ь}ǼgPG 3 ~a6ѣD*8jVllžh<% U[#˅Z4ORklMڼMW#b`IbiV Z`8oZ8xǗfL|b+.q (cV9u@2er(ܶd7q319ibi$g.U{+;C}dSBb>My 2;t\@:=~eD&\:-aI)>$:HLPS] Ww4򕮬#,K%2ɫ_-_inc pVt_hXU$=>ɷTl1yɤ=< OΦ&] eYu W0lnYE{!#pfy,Iy,A:~v o2$,Y>ʐ1Ew*ѣ TxΖS0$'D2 @;}0Px\#}-@/Fl}P9:?Hwm=RT?fv-kWNZ6fańed൜XOƢ-k)6*wK*m`<$y=ĝBuibh(g.ޕ*LkGa)UnLRD| 1" 6/檹%expɲR^Dg?yFTگauآ➞ẏBBҴZ1=tsyW 2^AM"')}O6FR n.g4fD57dԶl6N<92[G=L^ئ|\͐L&E15zx>Vy Ʈ>)؍OsNْƳ@B}I\;-gV }P4rt#V{&oT5L-㈆PVϊ2'hw[<0B|!R>bQޓV7NbQ qmHm0u)8HNYI%ٻ{1NqK2<ΪC򁜮|FeI< 33`kV+>:0s3VHD W9Lj veFlTzWU:h?ETv2Γp3Dx9`. WN:1Vogh#8;3bGÄð(tƠרQNFҲVuR{ _&Cр[bsã Ff5 L)aI9H|DS4bHpUʌa^HDSFPڸE.7N!=NO7Dd~-vBТS[R-_wѓ'0kLZ:-[ u!-,9XOa配[JƑY14Ueq[%(RʻqO6*h^=-s2^h%la=D6WO?bBO.H#ThHZ>=|x .QXrpa,JM[J}Ut?*,[.wn* M-o|mAGUzr,Oӭ 0yh4g@з*!7bit/Ֆo԰. hbk,jnN9Ȯ1v`F2v_^ģ3q̈́B(E.zJ05ozss  Kg{}::ϖyLPsXZ-uׂZF23χŬdwzRmV2I':~!(Cc4 Ճ0(=D0?ȩeu]0p֡`ZڽbbUyFvi<ǂ~Th A׏VR: }|V@O.YN/%{ EFW2mZo~OU=ϖvp8n"DukTlm(Eci .½SWioaykGMz +('SDmc3 ;JS ZΖ\1 <煓~HdDxZK 6j{^s3 pEbQ<#"HqSM׃adT| CE71y[z QL`rТΟd# Co7m|+CE;h+G_lI" W}M[R\ U6xWC!Pzd([qB;x^!!5\IrguVOvoҕrt7@ͻ%U,Qj\ q]B#ٝgZL3rr5~ esоJ0A«h A$[D49k[LF sH{+ 㞌\GUw!p`zAJ8b=FFVTL1ORi{"56͜]uۨxK R`$ݬ~@[WT :=7\sW]HG npZ>ح:ფL:[X! ԺNj̄ t`QŃ))aivA"lF96/T܋=-=B7q9zA#nțV6[uN,fg̩󄘿%^~lU!Z7Rr#!k@+Չef05)Si_4`Si)hjeyp20j7A!d?/b6D%62cɧ'&) tnPX<&4A\}6Iad/Pb @cEˮ}uc2CyލFIz]P>a!!MѴM}?EpF͡;HmH`{wQ'+nP䖱)8>ΊM+@>{|B7 +aPm]`i7'$B&*oqMVg ~$D"o6YA+>$@ oKܥʏg⒤/(Nfw,1V aN z\3)Y/X(b@8}eFq\/M4ľ7zoʐsoh IXuLޙnAŽ+5mn~E!e/dY4%0[FRdSN79@q $EYBϪJ/guiaޕ-}'UܸDb+Nеc9#MXu(i+H_k  C0-U!?Pm:.TS-s\c] HGA+\UsoG/3+vbFë"!2k<*Uph(xBT׿K(坂|^\ﲢ*ΛxB5֠&3͟$nBl%A>;B蒮ꁽǚ%P֖4wDߤԵ8pc;;4{pA5gVVRwx0u௔yayj6bn!._H>.`.+|V{#ZK Z7Yosl̳7RoeݦZgYO*Q%ad|T#Jvv?#O}u\."yėD&;WܓJoOڥTnBAĹ7[1wV.-cTl%C^t*h,yD5]AvNg* @ i[ULOP- ;W =+"69wo5T@ɣ&+,)4A-~vNSɉcIvn4)-j; Y0d#&S󕎁Fn/߹p-Zu0W'O5tl\E{/nJܳ+V D DRӎ"K&@n,r<_5@TfEw?"=eҏѡE)=U8oN#L ڎj璚;H^ze@#*8ݽڧo 7>ˎē9OWV^V`3Hfˁu uYnbf &U! cʩ<$q֖b"h\'RaXX7hJϒm6\\gWV\A 2_Zt:9Zg vy,#h?Eiv"9V9ѫ%cb ^ ^} oIpYu*BMn> wR+:`!&~Rpu{6nB*Wkh-3a"u`ÜT. &,dHx L힕t# ٞe{@t)VG.l(!D]>oS7>ӊrkA$ g"͡ ;N֯t%oRo"h! &! L/\RJOg zd$ܲ[w-,M ЄuD$cc*f%yN*㐵&dH+dMP ;0`{ dhW1,^2﵏{7*?"PO*هXoW:솵]q71Yi<;d۵o) Mc4مJj6Z5zli/(g ʅ|kJh #.@' 2]T3U4lߩ6sO!tK_ȷ?󹸣>N(P!$)b!ϧ_~tA9^^[vKRRGEr0le+uXїAw{9 ˽W+.3E {pY&"̣ ܄ ?nmzǽGb 2WKLB1@P륟2ʅG3ж5w y`A0S2 X|:'&hѾNEnf {HKAs&Skx^f}z'|&d;T nǾqH;΁_1;Z7 p l9X77\'q3X ]{Pad6|Hk^wV(>p͍&V@LPیmq.&}#$H.X ?|̋ۛST"Wi_T x%uЙHc `n_NJsO4W W+X2[9yր&'vztT$y,to c94ƻ;C%Y2}Kӛ+<+UGaJVIIGXA|B`i?!>+ep*S *k%,ZMW#)3*p~h ڵ)b@a3.'Uﵟwߌt3':`2;?űu(Hmﺒg5Ch#Vt< I()0"BvKZ*һ J&0x֔YKKVLO`Eƨ.C{zQ0C&*PQ/>-ݥ,i#YL S&x#  H?A$lS^tf# 7g*̛Uu0iq+ "3(6S]rt 9Ґ#a쎷"pX=$hlT7=$6|Ҳ5.禵i98S5onr,zzAq]hC#E01AP$m}͝XGdKYx>tq,ĄBEVIH8=>llYlquq_GYicD72Uw0F|T@Vu=}?&ۮq$&JHz܀"g>L?Û^4%smOx~.a إW[-0 *XgBJvLt҃n8{ߺh^xvZA$iivLp N@RsHYYjo?֩|gd:C5p_h˔ֺP_0h:e^7DG} sfG{ $u/f32B?9? Rb6HͿ/6t@ j Lڳ^,y /6L,} ;vt);ldFp]uǛL[քlӁfK4X/9ΰ}=̜T\~ӻf6M&)yv2w* ^g/yWuN)7{iU7dc:H݂1]r=6O!L9IMwe蜔nz.hW֞#X }fM2ٳ9)-IN"^큚ʷhji6Z310ZnEo¶5 RF;JH\F=j߮T۵L MwBkw$Sb#zF-?nPxKJć| :'M Àp4w ׫|sz) h9"w[4&-/kCd34 `R>zfuX\`CdPD@9'Bvq#/1&EJG`Š\:$ZiQlX.~s95hcc d.qᔆjfҺkw)U1(vD0^Z+!S1+!|QG#>sA!L#l$r i9QBi<l]nB!dE 6  G,y>Zuk $0$xBFAB|HbG6\|WD%]s{?HUM}ܣߛ8=5~c*-8Ǘx&h܈>x-J\K٠x-}eBH*}Xe 03]J^8r[0A,`T V+X׺TN,gwlCWnKԂum(7`˗]*,S3d}._O9xl vayt|$]@_2 Z~4~O%=k]$@k"nt6M1[4΋ >GDouĜ>]zE|.O,!N\GeIvJ a|f8*Mh'z6kqI',/츤Jo!1NE\4 ٸ#f訝zn—DHtw T62!9A"2zS \w ´,Ǔ*pMj9l[WSi@hҜU`Q9%aD"M)BU&: Sjt8#'!5/S~V@WP{żМDv9rMY-5G<)X]]c \1ۇRpYR?WίiHk)Ö@D49DP`+U'qx '?di'ĕK)ռ]F=_ʦA}+\N>v>¯ 벉4ѧQW֞$Ҧcpx!$B=ωSN84! rgI/X<3nJx騦:!Z)d2-E Gq|0O"^%8X䧼)TRsXԌI7WlaiSz"y:~B.⮯c`Ěl1@?|Eogc~:#Dh gEy|[nKr播-.B9r!3ٛ .̿DZnp9ܩ¼\F&cFɭ~Clٮϓ 5xY# p6R,~hL?ŝBiW =tM nB.N \eN n]Rdo^P ffg6^Kn۰At,.!5^ l f+F_=PbhP;D}țM,y_~gbyjSw<9fSKg磼 ]5N: D;dӝ~E"j!$H}}]BΕ&ǖiX(%5/xKZ,C_{`_(::|kmȘy Fʃ._yA2Hzaepi8mAQGI`Ǘl,mH~|9xvgyuR^DtO։24wA}=ܘeJ'D2YFUG.˔_7ת j*s\EpE9=Gerv\8P8z=͙{F]+lZ!L.- 9DZi3۴KϚglSfο/dLd.̡W@~ &&6ሎ4G~ÿN'Q(+r=ɟ./R#R`4df>AFkF@$:P Nzx 9m8@dTpPz a(C#9z,__jWK'^;\0-6[٧RV>s;eiDuCq-n{M n_D: L&+կ"(ȥC a@׉1_5C9ʑ+LHd` ~hacKD;Y}H/Dd J/aRjF iQp pl1O#wXq>P H_qIb 9R ١[T>0R=02V? |~SJEڑEeX%Z}@ i/XNh]~&@'0R&J.ފ35`ѺQdh|}$-*<>b1Xm \NJU$nboò8R˧оhv)6>eձSt]՛u" ^N7*ȎEW [:^5݃:ǽs ~38+_}rG0Laut}:̤)]-t-\Ωê~lPfW`V0A5"K:rJUYY&&)5OFwWceB+3hZt{mݩ߬fiC聹9J (nTe@$ ([i95MiPKK/7Q.ý˺TԆגj+A ';Th~ЎUX&FAN/s1mmՎ|oB pZXB8F$# <p U PEcjzE.b0meH;h @8V0(H$<ђK7zIԈ"I%-Ng5d^}rd*) !R2rQl=eNjKs>3KP{XbP]BWY[}Vׂ$82=q[ED鸽yN֌PL+K muƗ7OS:33?NMr*M뱜}SϢ3ayiXo3ŷ6gp`Ao5KUC O@h;"Dd8҅/L 6rMÉh/ƛ3x뉐1E*[EҬh]v)s^h*KgKqz,gQ [hHY&L; v1ًJ^`B|Q?tsXc)ŧg40^P ։ʵ ȳ\E5ux"s:7?4nCsRga_tĺ@k񇣮-^eu[IpωUYdt3xv {H'DXb̡ H!T0nMNpfOVrF̪cEt}tڣ*oL('FqƸ980ZFg׌Gs.d ;`␙n٬Fb"W/pkDn(\2:C1ؐn[=C("tt10P !вKL,_mM2"-Zq"p޿/PEߖ*N}َOwcXb̹2;BI:X&%ΠYF9q&P;}@K}Qi=!܄iz x8²HW0 !|xD5~;n9:} ^ ӯ7$%K}qxoI<=MB|4G6DAtG㮅c`4%lRNE24i+Sv/B҄f兩nsDU3p_JEG"]J(#|o>;rT褏ylBF.E4` []N߃3#?p3.kGp$`Q)YH};R;ob1" d6߱~e<{N#v~Хb!l!𪂷`tR̉s{{1*κD^H ?CꝾgNpN5DZٮzWoe<5 SհE7d$3V<ku]:F F"g_A`QeiS0#Pe&ɖҚHf^1Pu +! TQKSukI4z.Jr*R8xi\ Eq[387\a cw5-;VuU?)?l"GeGD YE1VzƍYj~/knh#>b7F8SKFV*J_ndX=c `7b5d]R{n$Vu7*ڈAkpE=3L&/>͹!Ŭ r5h4Y]I.ʊ]nF p$yӃU{xx!`xib dhEUQF ".͢VD5fZ`I"JnA`[=c+8$u|-0ʅ p[Ϊ2|oAE kh{^_ -Á!Z?]3RlOv li7I-N_BS0qSx\/7 qLo*AQPg R’5דCSCzg1Pdh7B>3\WGNVu;/0pF vU:0DĤ% 󩅏5K7։2R)ݞm,Z/ ޙkZ8ŋuᗢ)ǞAR7{E.c}[YTGH8?8'^Aw5̺]p=fӡM"} J"YaP*yr̨G|2Rwd%8O 1:+nUƷ!4 ֱVH?:duV%+k񫋭<.yvVj)yxZck+s3OCQw .oF]?LORlI3E,,f0{^K 8CO!9R4\tbEse,|P/ՋǸ]_X8%<@Fpd(Ƥ$$D[΁J8#FQ2D?ktZ|c@-4K \ձvC øM h}TlqKП!e_S9rt'gҗ\t] Ā ܹ'Bߪ#Ͳ崖\32dա#9iȢO#ٜ**k0GnY?qmT|Qh9 AI7c2 l_㿼M4CMƺ+qX0Ҁb''Jʣftubz&{tOo0.m͇0 ZywblQ|bȨm"}|"as+%2ԉRktY4yn=o/1*Eİ1}- t=5π úm֑8ZbnZ`dMUģm5Of9;dDDmZd^<:,'bʚ-`V t櫂гbdɑBr &6NN 2/g-N ^h!KLՊ2. P?zF@l@HV4xG=9Eh=N}Vs;zvIh䑣׋/z#ZKxKt1fJ)@M5vm4'Ĭ"ڟmsŅ2ۇ%yh0ܒ>̻In_xKZ].ob2(}nQf bCﴐb j<ɯWvu& źēm9DףTG_xAM"tKY] ZODty,_-|FDzBULϻ{1ID=/{l~t/Ma^Cgxjz?KJC4լp|.Ă˄^ӌ[qK­wMKx,Xl5w #;Ѥ=\|T#cq% ۔mw(~iaA͕BHxXpY^tJfSvJ-H)A[j~l0aи)o]Lq1)SjCCx1C[h vdH@%bS "i-\?^Ef @iej7LY0'uSSF/btd S MOŽӢgL#uM}NI_GB 4JZP&m6}(B5@)%_{Ewg{|#N`[cnZRS BFg^QTqUyVM[sKo Sw/`5[퓡OUkdZ8C>1=-j8,c2R(Q$?f  W;*i )^ޮ4lHs頤3H宏Pm~97L  x/ Jqʸ*-Yx,.} u Vd\HEH-D%J\ @¼xJ(Fش9+y9~&5*&Jj6!->̪SH :fb,`!Ffϗ&%eĐmSpb2Qh@fCXrEo2Ŵ i8vAzd*#Q!#_Ǔ58ݗVNJy\=t8fA gT9zݟin҆ K:5r-(\&o۶(wo-tb"8wP|BR~ѱ:9gk4\J4tC2 ﱉyT>2,&8 cznhX?FkjyVr9: 9ǡO7/X;ިgY|D_r9J9npv/3Rn!hEUVQNV^zM5t3dM[X:S7a#2i[T{X-x􎤃c. xn.ÿs?Y%ؓ0zo%)26k5 x 3 .LKcX;%xvv2X3q@K'?^3 $ Y> QY3$i~m+y9@hP۪ ?LDSoM2%֥עܝ:wK2gvU9v:`qCBҧn{1͊:ѵchCQTBuRquo?'lz0rcQtgW$g3m2M`H|i(=C+P*XQ FZït XvؑSlچ%hB^_`Iרyk{ZNB{NdY}T1avOnĞhi$-V.8^:pGF鳬 MY7yhD?N87#"uዌ:Vݜ.9?$!Q* HV|!6ud޾ɣ!8azTx+ Tt"{ j=yVsqGh0+Ց Ło 5"Qre%~͹J{=RЮ>ٿԠ$5~e*Ja4\:1 q߷ʕ+v=0ŎxMDz}8 uz:v8KICx(p8Mj{gȈt;$"S[a@a? o3asy"UxvYzye5w>flC &E}أIFm؄ESb1YW&V%Y4gH 3\X_ЛDK]Qw2bQ;#PD q2Wʔ_ $qT9@>LD_kQ AQ;$ _Vȹ&.ё݃IlZ2> g,3KtwA: !FcIZ6v:^vm_t{#rBv`Vu}X=˷a^7ribD {Eo[8Km)OX 7 xJIbfX<P'~,gsB^fI? 5xmP" '&M!Ĉ MjA;x]2̃mgX ՞ <o˳R{Y-!\~DoAj$:ac'svbCvM-*ƍBX:Ap},su+[I/F.cѓSϹ3RWҥ9n V.:pz>d^6`,7a꽼B(%%n1g:P!g7H_Hg~Vpul4ϋ?6cK| ή ?~_v 8֔U#{,O3skǢs!Λ cf*62}iZV0#DDV1KjM!\TXCůX*eqc  /#чN&Rw JiyrVJM!͒fIM[X^;}^%n>R *Shtd6?]{1r.UѿBsEJ(Ju@oz=tc td!m$)5XDȢբ{Kj%3f, w`jٚM4w۶_3M봏r ڄ(èW*~Գ:ⶇݞ vCH8}˰C$T<,!|X)r;B*$|$l-rʃh˒cY뵅^D>EN%+zh[&^!R뙮YO8~e}LsgS_i3riɼkfp|ÓC sibk8jz/WO菎@k,;f12bl] 4Tpu;v3 JƋ 0XdI\KL6 (abϚ ~= AI qNңWpWCKRoU_ع]e7+e+."g,2N~TYs;zDPU.$#,nl+Ͱ yƖɀC ]/< ;>vubK@L`V?@uB h TWHoj"OGOҐV4@ET? 8V8}O/yorDjM/ ,3n3bDRo˶+ʑo7E^/G*]Dܗ9X޲qHY3 (!(͛VTkX&FtJƑ#! ®yũ􀬡RE7ٙn|_DqkXPP#~=PeYP#DhWЊMLn$OayEn|m(&'K;xsLkC?yHfJY9Rm;/z 2&C*QeqeSus }x,j_޹ud%ÕpM#ՕJ("SgZW%YJ=U I@OLXъ2Rb,Yj1{N"H/;)^赀C jWNpљ(IRP?{9 }^a7ՆQ D h?Y<#-7ƄgFQJs'$v C\\yb ݵԤN"pa@DL`,(qZUܤ0v=\wy n6ډ }SB&bK"T5rJ}q`[T5honlZ UmPnT6O-r Ns/ǫCYwe] @DY~=_:dB9ADw"~a/!gp3;|$jNdė{?+sW"X-w%SbSD:GPQ,AL>@cńd2h_p,cD-?' ؁ ry,>*t=Iݷdf9bl:GE\~i< kQ_ H"^f(Ə?M|FD4`C ~+] 'Cu*/y َ+SarPli W#$a\ l=^2k=gYzAMpl)z\+ d6DfARpSړ&k,6֕݌nȘ=vTώ2`L$m1v0h)t}.*ٲRpl)NH!8W+L0}VT^?gֳQ̇|bǯX>a@g'ʬ4b5)Y!]!K{C&";QNq`ah;zRop8 @s2a럡 /y7 h& Of#.z2[ݡGp܅yV#:˰{_:>4*\U kHטǒrh29 y{cfU>O )JE+҇^/ᨙIDVc,42I,{BNp|oI$!osۇy 4gMDfX;a:/t;SwUYG{D\.k3 k4ǿSew33Ӊ׫#oϑ`SjaL.;fz!;zl$=§bt@Um|~^~2G/hǠ/HO.6_No#vRX5Xdx~Qe4~5ۮpwt֒EVMӉWuKhrOhG748 Wݟ@' KTL Ce[9GFq7ʨjd̓S6)^wQ^/pXA%5|9 =ܲ#M)e*ZiCDXN fL"'yzt 5ρU,cE f>6S0(c$7C qKCs1%SGjQ40T$?ۆ0F1BT 9n]ͻ^1&w~n!xy+'cg~AhﰍCN %kܝ96Yqiy%O9ú :u1 ץ`&(A*̈."/6QݭX2# E!pjoO#-FCԓT6_}J{[H³fdkPWbY}%_oJn7d 'qx>Qnh{2?X<y.[N~ԃ5.*L%GZ.yM0>¯E.%"ᄱt5he5wQ93hnr0jL Yu _,o)JHO&.{Qʥ@4pi4.7]ku0Y-hoVdR%8*~Ͼ̰TM7Q `XyK|T5J#@Rnd`5h%h#9uxNtk7= Nop#dRcxosL/R]ٻ\Z[BD_$ѫ5XA]ZS]>ehа7WX`C0}"B~w6gas°S"dpO~~7T/)z^}v+;eo\Ǔ6k)](~N lq|u6 b?4R*U~7x( zŵ%2>\׳%#2B9{ji%dZP bnVx Ȋ G8gWd'W|SڤqʒZI?A4<'>NY-qhAEMuUm|:zDO&#wfknaOڢ["JrG!$hUig̋zΥQvf=4PI5ba7 .ܝ(86X3e OPMcoM-;E.= m.>e_W Y9#:IfpeW~Y+$~oN3<ߖy2$tMӊ~|3dY8?lF/^]- aJk'x`>Eenˡ3(QqU+('ޔ))ZuKDwX0zʼn]-',T|ШrJyJ{_Y:?x_ y#qUCe Yw HS1 Y9ՙͩ*8y%iqDAvɛZqV._/?6\cuT[M;LcFۺdE?p)%s h6@T\Q-GD# avzǜ(/VN 1K U]`h+2J-'Lj;yAz1CD;tt- F++ yjzVBlښښ2eMo)SV:fxSB&_VLL !p9/>[gӣ'M^EjZ ^}_k9. &g1bզ<ҬJ`Xjd!6THc}'^IXVܻ%_`cF>+1.rx‹KR>={ }HPxLS-b 8v}̟'/$% ,NTS Q<*cxheWkw/X7sE8(! Dݞ 9M: &7"K4L4n^]Y>loL/>,{nTՊxIEUkAwbi#Nd) F 9j 'p<ywttpQX$X&G3,#O&trYgT:XԡCywQ',%'<v!՝WSKr %(KEwA0_ƞ?TpubڃN΄X䫁cԙҳLa /iZYiCU4D~a^af :?fe[]O1KW(.5yU[8˷% -e3{S2>mr!N$qm`TmwЛfZhZ|}BI2xao%0uOXǩWu^!>6_О$-yDcLlYAgs]қYLf~K}_sC sj-R>~[)J9/[=V -d\˩b| &L lӚ*3\^1)Hb#UAv/1+LVvn/LCd`hL@|i4zj7+˙"t*_6ʎN})O ey VdlNa%1nQ0$p4] "ãbL PR >2u* A0Ф_P7fYdcCpcWs ryVԛ)v Sʲ>1&PԚ?HPۦ?j9%.^k l?2+ͧ['b cCuf CVZ&/©6Z*nToS OqG^F$͠d ›{\ _'-IFB䭌=YIu.YXT=)ioZ< (<'hroÚċRBeT"N#TLKZaw' aw*YZ51|,ضA'dsM-JijKO)ŕdM92l~/N]X. GݬKA] _4 pu|@':.QV):ԿUiGWsĞ4,6xzwr;ߌAn,!VĬ;;*jR}+}8HIAEcR5pE!fPP :(Mm3/=T\AIubEER $~o$tQ͏`<8)&3RU%-J@!`iEa1#[pJDM%B #vkʐ[&*kx~]˅r-$8kaL`uAkI;8! jZ,ܚBb\h~=`_q[{ҨE"S" ٴAtc}(khUC_OI?A#o%[Z ]FKڗ`+1sgp kkO]Pڛnq1S3m"QhXZvRK@9B͕‡-Gq%\XrU71Lv^ l _$3ܭz6R[P5(ltdDKË:Hz: P=ۨm!EZ f=6p@9HuSE 9}!-Y?ni`ns3O. f8L?y0 ZS]Vx?T n+(k KDS& C~>!U! y꓾pfT4fmb͜C[Ke^C2u_3u H"A m\a$+y5.I JmC0 RHΉmRN<GPm71Ee#;2G3D>fIC~7?@"1o(b19ny)^[t6*Hp"2ύi++4X^}\yd{/Kx&iD0 {Vz\5Ѯ:c3n<=msnyP)][4Fq?oΎ/FJwJPX^>δ4!,Q*Ō`޾Wnfp0OBnf9Pqڶc{ׯ\Ij3rQ-ء?Bʗy۪Kqmq'XTPQ Uac@9o $ en0QӺo/MR`)]N+J6D4^bבF,ԕ؛Ίz\UYX䰣¾B- b ~e_ۚ=NY|^H/18jj5eÔ_-b}R|܃hQrZ_jZ ֣{n}I T[?ͫ>ixHF 0|؀?2ؾ eng`8PaN0mS(vc M{ \^9A?dFȲćKkevnTc6D3Ψg- *vck)E.#k>jd/y1fdV^'~)+>` JsekDc |Dt]Hߺ,q©duw8$2gY81i#NRxt"G=-H"kq;.tt+lpy_PSVJ!3^^b[iף ^[w4&=4P3K 4KSxҙOxm44t5#-` 1pSFVj F{%+%._("Huzb0G 7*i4yvBO:N 4꫅b}h liB:glQ|H 'W.,i+9++?蠾 _vEsժ]~Yjo;7N^dۆF5C * HH^֣u#%JH扇 glE&1/%el+,_H봗3u8]jXh=ni < h|x0~{8 hس& 5 UHh{*U{Dqo]>?4$]bEo86SsDoJ@vs09b;[9aKojzyܰZSֶ#2L^=Z#7˳Æ!gtk4W rUIaPI O֣x/5R4^D6x'uYA+Ĵ"b;jBR1Soɜ|9,4[zՁ6e#}҂.UF+LiUܽG UI8T` qiw 4pLxUD^ec&5?Yd P΅7RSuƥ2iO^px*9/#9a,*xSnF鏼 K|`XaņH@,M=<#H_c|m/8g 8eT(ØԉD+Nl(9s}/%A4xѽ 2}mԬ;hEM!n > tnP4n>^MlV=?&' ~ˀP5.pZ+`'OSmG[=tTŝoCWkWfwZvZp0MYKCzfZ?ݶgGy.,/<"Ei3,ޑK:7m>$dXY亰+z0Vmsc\QI iz/hh**g[ޘuJY&f&S̅]W:a*T!62O*gR[Dvqx4O(_L. m SY`v~1׳u5>߷N:ӥHgϨz@wA!;A-UMy'ryF%(Fe$K5n`2ޝ‚S%g_~̫F0'h3adva<@18~ :aK{MLqJ?IVQ-ˡ=WVG@(|k8/jޢzc?NZ©X& ǁ"f[ qHìRK_??0Cx͉O Wm)BVF"Je%yx #5AWV˜H&9އ}P P-˭pZ#Lo^v-U"ElQB] Gg'J2¾zT>mH*DL)IwϓR [=m N^3'6M/:x@Lsܺa_=R~B]G?qIB{`]0`(JUܺ wFK{W7ڋqV!n8E#.?.e3 ޿ZrlF5=k#IR-Yo-% ˢyIO ҧKà z! -y58h?0lptz $j,hx{ԇ*YHl>g`a(ʝc3t`<̷(>%.uM:#X8artjEFU}9a%S0m_Qp hr_2%jҪݡR5L_G =0Љss, QA{Bxl .20c3LZxPt_ W{*T3"zW|6i9>gt%~GV0k큤 j2< WJ:`DZy^6  )Eh4i_KI?"yn|dmdM3'lE8]8QbK${&ZV!$Ҏ"PSW.bIRUyZPR_bc4SK]^/2:$x/gxMoM0ڤ~ٙ ]GL l/ca"t9xs 5{tA=|[ў@CV26UW*7ZP2m,si6.>Kto޽@H\BpZou[ 6F@~'SuvpqSGy9 Aw"Yz_;z׫|H/-BE-Yȥ_x[B{áUoW:.2Y0C%+ɔqM޽c3|8(["66*o+՗E+,!*C G^_n vmWJ 4ٱg5s%{R)GN -#ܡN#LMm(^y7LdS΃甀~\bUR2( V13ЈpVzXΚ`O~_y8`+Z?GbM] ?/7d; d/$יͪ? eizq0uO-UOHm. VK4tu'1s%1 FZ2_ͼ2Qɷo)ᓳR>sgTg?Af1#"ڈ7E#!BM3[*l b)/Qq򹮱5ʧ6BBCD1 k=96DK?ꄕ `jN=`D[|ᖖ=)4mCH\,7АaTaGZEIϦlJ n?v S=OZJ, > }ԓ(L>( P1#1{Y.[K!)Uumi)ڂ#w@3&t5sAccWiFds}E^"Pd+0ikqu!hm"f01ݺ-`ZnK]gVYj3_?MD}Csz_EzK+^(u%tĮ#i6(J͹(Ø'X+"b&Ο, X׷|*42"+)Mwhҍݟ wx!%ki[ J@%`O%boe2m)Oc`cU6`iX9`t؄za!sq7 6! 6Or^Tn*G Q>sW9GNÒKM4 Z{KJ 53aЉOݙυؼ''4$ ]^~&TZIA1I(A36rz+ǂo~!F-gB鐖'(AC 6+ 6izYET/V("'|12i(.LWy)\ae_gLgq)%e+6JgVL9xȺܼ%+ۨréez(G{UE "yԲ}6;֋鸒5 \P.HsQRp.U/͛k)8suآLxf', 𛟄a*#$.ik-oKK_|IAIWxe?&$#/Rc_Uj _6O}:>bȥ¨T &uɆE rp *Kq*Lzt;]Ky<8cqŗ|OQO! 7w4R91 ڮhJAtY%\&tV?=Y>@ mQi7T<%oS-ڛ#!݊&O*nq7%/D!wԁnE)fv qIoi^U/32uEt=wh"Wפ,wctM)7 [ĿXei dn _Q32*)89pET(34#T8AA}XЭF\{1'2 *V87MMD9d6$u5Gc64y&s|JFPc.u%EH;YSc,p \XmyOarP0T_xH~w) hAib?Y#. z%d\|Eт¤r)qs(P4u,_?ਸ਼Q+_C^ w ӪTNEѴF].(~OoXkU[qv n-F& |ٸ|dPfJA՝cHh׭ME.1E "%S#%?%-:G71x|ic4+++LJ1 z\cj"]u ~Y?)?KBsQwb84Liv3+}@de}~Sj~>ު T ey-C` YĚOUV@n';,6 CL*(LuD1 PJmBe&^~l& ?ToA .GG~C$bۥNI`k"цcw[[ T8`8CbTmc~e-\;y5I$*LpccBt%Lߤew!oG̖lJbkeZ|j +[wMp $E+}H6P7k ɂlo/EIf044c;cHE\=IQŌ֯caDh3OjPߍ:]54r,U:S<́7gmA_$YNCOz]yT_|8/(^+O7 JQAxp j(_ < v.I=rKK'[媦u<^چq+niy\o=.%#jՉC-+=E#'/Z<η<.Jr#l2$+?wRTQK~Z*\pdLVhy")ƞ:Z`C9 >>%ɟٷ;0}%@P.ӑƭP&]~t8{̖VŧMoaFK':4u5QenU#@2p k?%1-DDx tNdmƈlL%` ,'pë8f4݄88!*V뚇xad"|]=ފVdcw̏BA%{1;ieP6KcA"Yw^a{ b}ݢ,ܝnW 3~vp~z~{W>;FVJY.H>䙇8,Daȶ^9Fpmc srRj5RF[' n'{k9 G`N\.u4ͬD;TV Kۍ4䟤D (7XބniiO"AC ,:rj2gp\r^;h(Iiݐc"͘vW/InmzdCv]s%E*&5ހbYNbdr?zѕ~ Y&JLLb-gse#2UK1 8lܶ\s0~:7a5vP%Wkq7 SQm6>/w_&.i`%B0ep8zBf@lj}jQbg-~ m3 (C۰ >0dN%[+Y&"G6x^k)&p;>f UV @aMv!0hc=N+<+$ ȏK~%U[!Ⱦb r=ڀo(r;} Zh]+Ȥ-ID!XF"mA)Y06abZj0no9-?}R.o­t,1S\@_(9DVJOΌ՗XQaٻgxyq=*k& ?98Jُ?F vd1MjCW/֮c$ ^b7 MvTߑ y6 "5AV} 8Wp}=dH .E=њB|rW,^XX7X]Jْ$ fY[3"dWOtB>wljCaTjgqܜt劲.^Tnpr2 ‡ )|HOhOb5oUԀ|'"LD $tj<\\ԩ|zDu :2OˉL `ۈX@-:S緃nd)KF\M49`ze򽎕٩r޾k^(˟UA@s$nF?hT A]O,⟏t>P;淍-0P[-}ob- ep JI^[TH(Ho' _ژ{E`5UB+Pu'&7 ;t%u\E>^DF3ШUN *UH#3̪б!gҕC9йࢮWMaQz`NƆZMreӎSNc.#A$KhxY1r~P>A)TS\bvײMEʩl])EeRo|Q/Tw==8$E%!ɖjי={a<ın$V>ճvj@kV5I FZWy/ۤbT/'̝d=t cV<-KfePFSg ҽt _*!y1jD߀LL\>~>(0j{@VOl_0gr9BT`/L0:5v&8)*0~d6۝96>^Tt, csZ CTFڼdt۵GSqE%OޚAفDUTp5c}wfu:NV*Z1Ë#>e'm-'H'=dPjS!-&D^ c~ (78 P 6飣_:! ]d#V[ Uv |v}D))6GB_?5o(b`i /VwYnS`$M=GubO .ԿEiUWs,^7ģTEiۘ'|0/:xrƷ\W~1o \/}+]u@nV;b2vX:=/*WUbGmxZvzw#$~'QL#Қ⇢azFP̍X]gȸ@tFRP &g2uI^Hr\yPne/( M]`:UjK/k2(5qGLA{qZ$مZ} G| BuZ'sU͕ϴectj|z ;~5سi7Dd#|{܋J~W:.'Dx$EO<F^l6ϩ*.g@ptJ)t( !8oqLTz,0 15t̜`->M ߿Xv*Jw7j^ދ ~! f2O~={B%!o3imMIT0+ 99^.54EP=VwDvq[9~Eba2+`߱:;Rq^q|直 ͣ>rR[QfE2?@[ͳcÁbk@]Htg\09,$VWdH/qe>thx~O7!.C6mY.fj i!v-gmDGuf"7Œ8^wvH?3nW}@C33EK$V bG$.e"I#_/8&FO})zOަ%(=Z<Oj~^(:ϮaCŗ L5 '49kC3=Kzf qϝx9łPM(TwԈHo9"#}Bq떰nxb";;UD\}vy'aF X2]7ǃ\qDS |)`,bqCș@裍y^n㠇2>_ؑRW=S0ڰnkM|VR G2", 6(`ɡNS,q R]/ $;ڑ{)zrd% _p愴=h ҸZɓ<)^),o;T/g- qq5D)|7"ksKs~swmSnIGI5 GsmrpvPYꍮ=kR!)h݌djcWR UOӴ~8%95iwϚ4A֋J f\ >/c2TTwבl!p jN_oMS _oP@M7ím8TZ'ҁ;}VYeɥ,hԅؖ3u3 ?/W\::Ť=L?)!s?g~RprσEuQz>yD3O0E1hJHxy,»0<ݣ8947r[x7X^i0c~鬪TaF,)ɔu@95b3e*}3; Xac>˵=QqXךx@i\f{͝2,G?z٧^3ޭ_Cz!h4ǣIzm }`+u&\uB!Lhn^xUVZ1PM#p :Q6¼g e0'Z% ܕóEqXHQazW]{nKˀ_ȇ/LV9DlCdqnq{:77`F,̔.T&?Su_nٕk~wb);UΡ*W@Jmw1x}gŗ#?Q79;E&kH.bm.|v*h|r7V<(Q3U_H?%#NHިX~[NO*ȖZ^Y6TݟaLpMHPQLm!Q*lVu[d"uɳ$1+'@DNDTaD놖^h'Xb3u}1QĹ*}D>U&kǽ}^IɅ nC28~m?;j~fd{m@{ yD;p:džsͅ \+SwhtsQLf7!Y\"V9a~z#NWLdR888NcYsӟɬE;u'l*VbiwFkƷ2M2FvOPct sMURfr|ͤ.Y`K M3>aF8}e,69&$)U&oO^fzjm8Md NXB}J jrrT"82Km?ȀmJbѲ,[1\7-/zF \Tn*fs2Kf\:/qu.ugbw2~< Y$ac(>""'9!@H!&O_l*Yx{ZQF(}s&WofId9iz &#gaH4&AN$һZ2ЊX1ww7'ڨm\BFP߱UT-!j}$>M++]4$Ͻ׋ WBt9u32>^0#筤)&^u@1>=RYdZM$T*,WEqDY3&}0 qBd &C1wOHGkO<*+}֧SaXTi%TW vyoef `FAE ' S;!e )3%ۤ!ж< &fqA K}?Ӆ{Kwǩ뺕ٽ *JH@ :OO:'27曦oXjs#CVϊP6!C[\Qt&FA8"4!Uo( R}@ / @*V^Є~=վ&~D+l}2ydōV h4]Ͽ o Ό?z'Kq7h6ɵ?\Νz_H[湁)[O{sC!Ň$O<\9; W!X& (Sph}S_Hʙ6+XuE_yb X72ֹ[jVLF\}vfWؾ̽{RoپCa|Y#ۻR]tcAŒO{Va~!Cmo_*)4LH1HQ=@ hLLXKļuy%7sed޳# )럊%1-Qh%|.{`DV{kE?G  >UE!H@)sD>c#4Of[ڌQy q> 3l n K$vzG5e/۳^y H!,R"8lI`cJU[Wp#0DZX"B&]e9 uZ\W?<msja_9؍ZS0 )E(pE&S࿨7\'%{REW8S+9QQj5'KB}6}=Q+ -`5} P#+KƷ3׎聏FKRg>|úΞ`27kNPYƗH淧77`Rҷ QOD8]#.ӕ*!`B;{>8ܻԈLBtGW`ɟwO$ ^!̡"~Њح`+Y^ЪK%#t|Z>Kޯ9NuiZ2:zq$NcK~ $ iV-/aeg5a)uHT|&w+:!8O=AqnhUF2@㙫to'q.Sǁ$_i,i[STܳ$=єK`|9pF\gO!;& Ū|`j#|&%'ɗ"n'mXN{DOQHŤMUྱ@KT3q==WYnu7@/cXǕwxnX/'!^rŤwHl(Iۿ.)-A.@D9?*(ʍN?vZR6<Փ0"0i5g\P!2]jLh%AoOO±fH?xw[n:^VqH$H77w| @zp[BYa]Xwre&뇊ӼxcAsB3s ~~P 1ٌ,i'⢤O/7'DAU)bPf!br9@7hAOJQπs(,VF߷ho%m[냀 ϔXAtsj!њś6a<%~bAUu㉹/*s r 1Qp&;V?+bz9u1H/8†;gu*/y#!;-js7`)>mJiTF(j$elee4JeBB43QD4s2(aUfXqӰ3QW.ے$N,بn C8ct1f=da `!}T7%0 }:;ү3;}M$<]gũR+ R0-*V\][H#g'=mEr1Nc1uZ.!lߒ9l}Ml~xy8M`J2> l_IDH]Hex?xPu+ .|2ۜRNINȚ/:9M )b#r=J5Exɶ.ܣU"vjډ}IJ@k4 o-Ht[]8)QqFBF n3I="_~OG_-+͑(7}*5'tf&uXO.gbA3:g2 vuЄ/{AԌmk Cr4g/ePp{(*^L ~tL՜]"&xXGOLR0!(n$̯s#c{ˆ혁G)R~9Šȶ`؎d3]( C_ߍ1Ā; of-*h=PUC޲z)O3Zk%)?w`ʬCR~Pjq^j;-V1rKtGzX:$E⥤LU9L qU'mpc0/xCS-NvCr5ƅ,,)&>a&T z]2KQF2R_ vqM 6Ki-%Yߙ#-XLp^eiǓ'] ؆p{xXY4bQv)u~seX5~u'9'|Dׇ q/o"|^D:]#Q$X9.Y5-YuF,}'/bp;rOhM[ ۝X^a[֊~h}>uKO'*o6" ^<3:Uʻfsiigij082v#X~La A4rZ.YV 77oC&θ)\մ|il7Y6ڋ9zggAW@V)k- OBP\kv\CD.RanX=xp=Ѧ { B%ЋK:%^P}i2МWHrE=Z¤6yJ2ڠP Yh.ݪ!ց"FEQ+%C RPy8eoڀ!0:&[1UQ& x-g?"ǜy`I]{9Ʃ?ثr/;Y}%]zs:8>3 @7bt".HW}dC.n ltԡ~KWzcܓ%w (P kxD]{50\O<)%f߂t,G (ߕs/Qv!^OG@D!`G+}sǣ,a)yʝ* s* өmf#UM$Qa$\:xtm<2WV=T׹kVSH7f@ r-Nǎ}\M/b8?P'1gॉǠάl+]3]BKw|%Ih1Zf(1u[5k.$GjEb;Awv,}>9r[ Y} YmŽ@\# f\4絺Th,?ڥ ˏi.hvnnQV͉l@_n\TF2eDdszO Ow[TYב<41rNwl5PW,1w @ JI`#ڴm \ƛHX= ty>B~]ݞ'VCue+J%r]jWJ?mJ3PzࡀpGR"}frRCNe0. /+k [?`7Maz@d(r㓞C^h9" t& >ʫTkءwvǏye37> - ﰝ`d,ԺBikŤ N"QRd:/#܃3R8zOM{`lEgDqtmϷlѵ._6T:$`,#]e[H}Oj~#Qω̦-=WAw"TL0A\Yj BWC] Ah K=>S/%(gz0q/$]}蚠,?!oU|[2MD$6>{H\RT 3'񅁰z9PNO]EGyEU OtupozcK]c*xގ8A@#A3W2K$8C(n &a20z`. tb0 9Mm#еap*ýJie5Vȣk>'] qk86rPU[W1h`*xYO9vTINzM@_;q;w쥼u;59 e[mJYwlJGG@MAgX6ź8i@Bcy];PS͙]X] a=DLq76X7[L{uYCN M{0)X }I)(V#"wk2i RrC}R]o īP=O\L>7 4MmU7+Q/;(1EQO]X±C!|\`nAibym80JFH*E[^M:GhYy]?4cMLؘߝyw e}"|ya`&jݼe=7pr"6IP{X?M6l$u:G 8^hϓ?cNր6ΈFr\ a?q"Og![]J[ء:u؊>'˴q3Ul^Vl3| Z𬫄\*jHj5c+㸰&>o*RsAt4*_3RVY0'ہA@*)Wx,W"Xtftn\6. s^H%uۉ@mL,2.F v ,{:;{45(S {ZUvZVnJt&~Ԍ ʅry:_ް7-3b'%5*Zt̒Dc[io j7h8d7+d3"TE$^ZCυ!\09=V R;J7%K&uwd 8Aa6Iw'^3;&z<}Ġρn.UϫlwųTjnO*sNTg2cWb#&zyBͭs#CMEvէ 59)(4r%vp#0?b7Kp!@#.OBu~NA6t9DBEA:~4$kS ]6Be{dRSS3Mo뺅1YnW8n;O$]GA;Уgg`#6S`Vٿd[ 9ap|mc}pt jF D7C{Ig*(Z, nm@_XUBўqH(#/.C937?'&V-g=q7۴8>^&oKdi}#8#zYaI; Fb2N13ˡZ,pRiVٸH{)qTj%zMHir.o+`=EӸ`^HL%e&R%#)V%cR-rj`YSXe;&:'CzyhGl"uH4O J=2>3Y3&q[6WސW\%a 7Ju2Vq +,w1k QTRigSRϵޑS5V(cAWC9*?gK+2t.0omOa8Ŷ' rB@P@1EyR]<-PN|qЁb5$9$cF^zNjި10'&>$y[v,Ġ ,ЫRZگ^;" A4&/4;u/}#w\3Dv\\7ekzI]!5?xV=5{pȻ5Y6YKM^[!pS64gmy>FBY{^!V&*wFpȦ`F G0CʜXA`g>F_fi"(a__Z&Of0$I7 y}ԓ:Ϛ'*[@-'(ݚY:  9Kя5 v> }8-[ֻc5lFCJomI4r;QO-1˩J S[L+y4;#._N9!ఱy-/`tR@n8/e,eu>hǶ <*fUMG]|qkPn;"w0t#lvvPDMN`ޭ %]Fy%S/ǏF޵[T?/?9KG]/Z^4+ X\mel/YT됰Sh/`\b5_s&`ρJOV32Tlk.>YRdT<|;uF[R*EMw/Lu_=ɤo0#~mmtոB`V[nYNRe-7?8,ߢ[mʬYGHœOBQ*BJ8dL)/ ;#.8>-}2]ZB5U@ɺ;nLHē~c{ XoH~K-(BaE6 \R1%6삾a\dأGiQ3TiHbQ:h4z 2=)h}]Yiu:O@BXeт2S [w`#Bf$^3{LsA};Z뉚A $,/,L+Vv{ཉf-T.Ec8v5r?^N66{ȥ\ ^3SG}RV툆?#g=i8fN`$秀&rɃiOb^M9kkr?÷YKȻIa_ ,]lR~󵫨0TW D_QAvGt6:K#M:% 2ge`wVuɸ"s }Fv.[ Q:M\/ß[CR@Q32DWB`^43\iT`[wM빈ѕsCcϒ,䧚RADɔg lⵎ(c+b/?u:TH*ߘUSt\`p;mߏiFd,SUQ4# ܓoH 512? wQEUBz>vc 7bOU>WԴװ:dʽQ>ƽ6}!Gz_k`]s觗9NڕkhҮ >}.n7&Geǘȶ*`xÄbZ?λ?f 0k9skɉ HZ HT٨%Z)z_-MX%TW0|뀁 E QI1u =0~-'؂DF;w߭ ţ/:7(qAEpsYw *tE[d^7y98hAij='&Ng$gsVY:Wt30J%)8@uqV>7( f1vyc3(>O [Wm&w6Dc!(',1{E/Yh8~9#>s=@,sTNiμd~xNqJZ7ryɥ_Y{ Cٲ!NN,L܈@-~A<9B-I|H[R~Q {9jbN.ԌufO+lsiY#+B\}z=2Lb㡳h~V A /yFep=tz:Z9s;vN4M>L)G\ir`ppf~\zyR#ě=0~E Dp|5:J>ƗE0Zdyy]c X˫2҄("-K;[Ǩ[N|vi1Ժ%ݱwxZ^Y ]:~fϱ(G#5 IN:ScT˵Zd]I NқMhgIڒ J@ᇙo)xޱ.b13y3B2PrA b4EqTʫ4NMYjƦ |ꑘuϵ͕Eq>}3p !hqPg-VC)`z-6`zZV>px+yȣ װȩxbjRK[ߣ$S4dp<( ~;˰"[I_~/^JQ"B1 A}=Q#A^~VÝg Ytx]jL}q"AEOӚVG:?#ow2nLV=yYO;ƛHd 1نDNnr>:EǀvYoCqb_`L3j&a{u1$dPjH^OְݘePeyQ@a-7>eB"y]vltYBI;ğ=׹|iRhAQ]D,K7dS>ڴIDԶxKwBK15̄B6vGXE~BפKql4 iB|JW eBO|k]73TOWtˊ͍媓˔ž.fgF5N7}les|+ ڳ@q`^B_V?ye/U tśQ! Mr' zy]@>r 1xtُ;~Uø62d..X9-]q0X4*wety{*]=80R QqarL),ffP$|{R?B< / FDD# 9ee_C(,Xneԝqb\=)X IF+nm#6Bв Hp-? |hmANb*-u5+aysF{wQA ;0V,ZQ ^iiUk|禉j,OI`}ySb?-lZ4JJF@ Z=1VI$hLh dS.oPF@7Ŕh$<]pI-%5wSMM4蹛&g,*cl;_psgo(-+Ƞ|%Hkː`?HJ_JaF#ji4vq[Aڀx-9˰V/-\?W&z -r(})& CZqf̊ UWF?;>߀dܾ?wX3{B([:7F8ZOSgr+i+S%c.< yw"zslMn^7`hju146SQu.ps#fݒL([>0K-cZ}>'mhQ1nXMK? 2ё^S; 7&SqJޑOSz,!jh4n`ð싇~b2@>nAR#3?A"׻{wY ~fռg7 w!֜ڟz^̣pbIBJ=0sgM1`lyYlh(]eڢ{?StOP$R/ @oBxe1iny.21n 7\6pb!Ǩ<˽u~001],dAXJYS~Jy YWw<5u?#ǟT%xK^uL1),4ѓ-GE=ZDK|SP ol `W9;s烸g1:]D5s &鰗MGKp3/T?52t32-Z#$u T^Z>6Ň[M eЩt-&3i otO L,,c=c=~VPVpR}kvRI-؋$ՌvS\凜i* I-^YP]) =K; HewkB I}pϴXY3}]B9עS5R}l.o5:22jN~iI;%2b:ÍRNXn F&!D@ѧG ȢNl^:<ި޼2E/9"E&ܺo]Ԝp1T#aKy1#V(PpKVB5ݠ~'"w ]n'dlb. ǫl Ô"o lo!ͬRپMrIZ54F P7ZϥPv5+ԀN=Gi Ja!b*=żeggg+&ɰ pm3AZaW?5ݷGP\.=9Z11X`xu%LM۳gP91_BK:Ke5{@)SS?[-[p0>)RsT(4b(YS{!D"U$G j@҄=a?$\ OݡF3d@&ԲzYB7xet[N0_7`l_D'Cm*i* [DgI9ހPߍmS9"RLФ9"zlޅ)֛5Q~בޖz@r}<@\Q)j|U #ǒORY/Zҧw wc нv]:,cG^bҪ ZRq*mT hrX NL_&,u0FƇ o~kV8O,RˮEN: 8=,"½S[R_.htgJ+a:0v.Q xY3m08SXZ7b44wfɪ(z7yX`L܍бS@:L&0ߛ„K\b K;H펏2uw/\i";Z%͒R9եKR!x Hts/_{[CħmwvA+Xf: ű,H 5ԁnxFn mT!f '0Ҋ kic/BDDaз;ldwwmɰ2D82>Q2,9_CW<ټ8y@}>#y8l -38 3WVL$|tDN}MB4Ǿ#s pf)g~t9Nh# D_n \¥4K1_&꧹yH5,y!VDĩjҝc瘇SjJs8$" km^U#/Vǡfe'JD\9FcEӕ2(@j:K'|aT< ;Ɇ3Om͵v35'G`ua ^]EFo !:7z\!;/4~#=FyZQmT'yEی/g޻ѫq2m,.zY_;),hO?X5iR7OK݀e|[; Ȧ0i6SX&zh_a"ֵ^#2L/6$8o0#jyrkL?=ᒦ΂L~I4.)wϵ+QJKQZlQY8SmV1MQ.ql^H eFyےHs,P DhKV#]U -Owo*^Tl>?I2Rٜ%91`| U@Lb_8Y C^>al/D>jgĖJ䶣+ jY^8-dZGDbIk\c1,"kFLkX7 Gpd+{`r = ϐ,C*p:+xe%JJ0 ɐLM/ДX @%RMSI&scX4>wjdՙMq\L)/>2 QWh3U c.:( ؜w΢߭d.zzM˚4I5*׸DaO9W[61n"]+E Kvōh.䍻Ic6R "e;L!-sE * w^1@67 ǠL_͘Vw.YS 8hnm ̿{VAڟ4Қ`Gj0V3kK/T3]g=he>3VLgaf `E(0a7Ы8<5US$MEmyRB8x@5_qazu# ` ozk̊Qz)N@/G;> pḇ[uZ4LBF72[ɢ kH`/d)HobdԵkI3r,OugI@0 ĽgJB}ÁouSyC;7M|^7F$&|ȫͣOs̤)ٷTQMmۮZK<أ$p! [܋ +7~R"ȸahfn Pq6|*o_: r@4*BOЧjhsm汶=UjM&S ~rP{ B<1dy&#FGe{Ѩ΀+BsJ6{n6x\R$,|xf*9G,^{!U `\0/.I~k {)g >~xlv}>HcB5+֟WAZ{Ō>F>q"ː;NDtV%ˠ^ۓJ]?6d [;"6-?^abZA[V43U=0tj_%cW`\$eJ'Ĵ }W2`M|ȑy 3`>)C?-[lX7J]nr.y`2(v10_Nϣ?S9`ÍP1Hi& .a0F> pe7t R7X3P'_5jh[t* kfk]eÑȩR|x 5m2$8کoUM 4T**[T3F \p3r'|*^A_u~%, #O]\BCmآt}kt;_sI{IRԀYVr--|Xng2# 1*0VlX^mĜ^F>ُnF܂l^_0,u5\y"]?O45)X(ꨝ/W6ȘUミsFPj *O4iߦ2I7\q=+u4x6QR-+t^QN]&{~͵1|?]fJ%vok@}A ʏ]$2; :t\|Z~cS2$ ^|E@W9S4Y|DVej\YoQvGƢyLz@1+mw&z1a>NecH7yaQ]nOT;+$_p \EXêdvZhA Y+;z2ϵEZ/nQK8ϵÐ}KhY> /PF1zʂ!j4j3a[?/c%$Z7-z2 tP1u=::}yb70寷™ qf;HP.Xkbcr$!= iFJ>j9rTHx}ۼ'E|>+ݒQbBeu|d:u:q)ݰk7E=錢ްȴ<ܻ! s;-$I՞Md$ keIܾN@ļuJҀ[);NkݎFsX)s*k6Q.TA_)9I27)2D,|%cjbQ휝2@Ōr.۔"v*o#pM}oRBk.B/Dڲ=~v9nY;jU 1>&(h: 㜒vEA4YC4LD m''GˮﭪL{Ks4Gdld ѺBo<5kF$&C*VWrV 5(zt(&ЩXA`/qC\РDX;N<% }}X8ٯá4t3QB5s1Cщ%yC7F2~\-&;r{ΤL/;;.%Ӡľf Sί;E\(p" X%I7A |/qO~p!MB@C y]ѣR]:@'J+ghakt;t{ʄ356g-驽s_`\PS x7xWpэĤ!;i磻E,J8 b p1j,J-)G Sȵl4G2_F!~58nR4$&˵}T7MB:mkdc7>fS `DE+'g#6&aw|.0VO"6N5dkSTCXd&=qI{__]zڷ7,v_p.fY/YUcS`̕gwVӛZn3BWŶq[80.RP<&i?ED/4щH*ȿXd?6ҙX2J ̻yaE#[+JisV.mP)B6҄|{E&X\eLd}7@E1L)Wa<;\~4衈ifve:o JحZmah2p +SBO@fXkt9k)Te> 5?_?Jͤ*Ć[:8(SKe3Xl{[>IOk)X+[W4wǂ0,zUvwCbf۰)S6x+fK5Nh O>.=&uWV DRD p`|O]⻶X'n&(¾"i˭SZKQp|s s{,@^\tANqVojw5p1#\4:f`2ijK8WQR=WARUWqMV;ҫXt-%?%Xen3hP̅޽ZܝNJƒ_%dv {oz'`@pLYd&Nd+v3E_{_A HKvjzx,o>w/l&\<ဎs8L`q?Zz6T6P"c{QRM j7 =O{s*,|^1T'qCnB QqQX@3)tTNj~ԬBG-V"}78gSU~^G3E %,|ݡR_a&?V.e-1y%q lYUҐj ~5T&9*y)%eݜJk=O%*\NV<Ĝ8<-%~Lnʢ11SC*;q0ANlIxcٜ. GYĒIgRA8T\~-Lv:]v_W|4FKi9a.KPK!s#=f,k1ayTXԈk%N4itpcDìtSǀ4xԈ^yG/ғ![1u.Or :NRڳQ,~D7rJ0'w(q$ֿCy)N{~hpdlH0Gݑ'$=FL)OrӷSaOma{abgBoi n8Tqw?=x:y0q,Y O -|Ezׯ -Ѥ\sYe0xHshza±/QϤ2Q8$كG=ݗϒͮ`Ȑ}NXt7!z=Db?o"l[XN I`-M/ޠ1 Frr:zBĖ7`8U;^Kmia9>IJթSrX bDg -ƀ3$S/\IZ_妺1&lIf+*dLs1Ӵ6#g1ea26i!3C!7 x}t{Dt#ز R8j۶)}k+K>io􆰓mUk EBM_$_ ێ^b#f''` EjВk(iDP!N:*sUoOˤut=̹ ˒襯yDlyz3Y J Krt8I J!+E%oCȮxNZX! fiљFs^CȶAVea)ܟ z㡸021h|8:n3 Щ5*0k!j?=ToĀqg^S_VyI{KX*^na¸AcR*n3?-\M8!-ftzU;M)?藷iBeop\O3m9pq?u{ΨHnD.Iʱ yo0-nЛ1 ;#X&o;ܛx 65TsG9rHzb҉} 5N(FxgPwc.6l> b!9ÊXVxLROČjjÓ:oCW [!mƵ[$\ mTXUl?)JiµY'OnmBgg1TaX: MYHtάQ0;.W,Rk:Jm5uQ.3w Ǐ_RaXc Tn83uO-FΜK8e%mC Pw d_b}f³1'gXh~2: D+}<gP *qhԑRb8Y0`N| |mB Pp |0Ne%jl}1l#H]\}ju\]T8$ߵily :逑Ī6ѐz!=͑HZ=A-)i1P d6"a=1P#G: r/s؇C_XV;UGBhCPȲZWa6dNJ0\ Eݩ|a,ӆw]-fXLyR +4]_i7U}䏓ʮ #Ҝ1bgwyr}]ڤ"Y عངg U; m#ƞPT,!x`|a7ufSLhGx gVf 'P1xq Ne85nEqQb챖j_aV[ڣ''!لT|GDV17SW$9w~QW[(sl=2bQ5?ZYm*f]BZFkz'FeeB]TosBƚ?*V2V%=ۑ>Pbsh+*Ss6k溓7NEqGl41A/E+ΣMg)  [hF}SAS'́yRL 3.{;8`1g7Iֿ+V]P׷=w5DvCnU3qAuuZ9I zoo"n4)?yHaʴFvQfI'l@s>аtJ 6< Ԇ Ņw0F#hг^"`kXBC"b.*Ӄ;%uy2UAyiBKl |#6"r8rMIѸx="ˀkGRmpw Ī+-z\ȭ1 8eӫ>s]8Tfp!oJDža~1ݡtʷrlq~U1*Bӿ:⩽~|4{bsj:94L@N|) wW_/V-Xp$A*%̟.DzZfOp]ad,QH#MQvǿm7R.|?l=\GH<v-|Sl%.M!&K ;pKdt۱MBBmqAʷ,&QTYtzh[Ժ\F1z7![u~z+3yv=le0DM_kO&)"1xANJ²+3Pzߡ5 ӗ#Ik8ڵ0-Na7 i~>O0G@% ýU= i|fO] H Ig6lI@SXq2/>N>i𻤤A_ CcRE` dg7U+/F( Ay7*RT[xOt>!n iXsfvR$RXR'hÕ6!R.6j[Jj*|!Bi!e6!P]Pi 52w×G;&ɛgpCvo9مW~Gy5tv,w#>[Mם+\Yw 7*c/ 71)7"n@f_:۴_yNr\])%osd'Pa(@%A-PUAs05A;%[^(dKnټwI8{у[c a~/o9]ݔ*p* eجAiaa+]UcuܨLLj~J80}?wkh*OsTi\qkq=W*{[d3OC~y%S\׃ʂqQ7Wat2+L:a,C3}ӗbjEjΕ赅.27,&4Ūy{bb7[Dn C㳞(kL42Qx1k 0o(9pG4`QH<:,\>ZMwBd#GEF=K¬`b%?x SU, BBm,zSJ~גd]):ۨk:OesѺdkSZ9 =舄{-eiTbWvެRqΆݦ{EP-"lkY}uP`"./S.ui#%[(" —`~K¿4Y`~ΤNf `~hv&x=J K=9O;%Fߴr'V-=pׄ.|g`1:~T(+D[S@M/[_l[WEE!$B# 䊴xEue5ȴV1B`M. 1}*$Vgn>d4>&A0-jf?rX蘙q+5~黥{,Omm:R\%dYXKj-=tCR6Uepk_`+#@(U}Pτ!NƳ8u*}"ew=DvCb=D nors~"3i/ C9+2ۥ I `gϖcYt"i0%O ˀh "yW(sqƀ= Cɚr *2J'_k6 ggrBAr&a.]~ ,/xITZ3zM?{@$@ghS5'kMO ku&rƝqpQbߗa .q]Fg' Ck7ʿ@WiD|p @"JR*4 k;I|CZtЂ}r^"4D@-0$6  cc0P2(6~ݶ[vGP1d'8fnW^Qt!Tzx0ܚ8W/=|?5ˉ=LNWAW3Va#P@dEwf}f4`ԔeRV6'/ݠ(M +`q7¯͚g#ںx9$CgO#C$j@'JQJLvn! ; )397,[@Q%w_}0}-ţQx۲s@G]{*0qܤ;U}Jim&Z)M$Fo,^oAGgGAmNRdvx5|Y%r#amvԫpwBP.~c&/ ėJ4ШR~!]^V4:si*xLQtsl&P!7ʱv OБNW}QwVV>c;}E Skp|$wB~_T~_Y!!~lH.%8c/`rj 題=)jjm2@<',>AbO!ZYF5_iKQ!M@JC/YaٔV3o"c+fvF(9]k2}UFz{MZE- Wմ _%{3tWfuA{Fz_jE0Fjugl48oos2C7O.?RWlp! Q6w_O<Q3u=E*Ԓ/[8-/xBeF~nA(mn""A/KyY_汒S5%*a$O7ˇNF /'/cTR<|ቛk4$9>ၑ$`R<Jyu[~7.1gW9I _("s*\ &"!psWӧcv8:Er%6 SAA軍Az3FmQ#Vm q1c" tŐ#a$.Fsanj{&(CD#߽sf.t=`X E Zrwߏ"P`6:g[Ohm iXMҔ|C ܶ @ӑE##DRhѠdH 5n-.aF/{NC{`hO;w9 O] jKAKŜL{ظ-H[en]~udh7%ܞj,529W薳 7Hm3[$*V'FuS"XCS-GC8]O5<.:̏k'8ߦ\7|4pDS #3_GLBH)e8ȂA\N?w(:b3)=/a'°ȱO.fCTIjgPp>5#xj2!H"qD4n7AK$RF.z5*Xi(|6@oa~uYzIbNjS*MlwhHѲbhD 7V|sW2q%6ac`$!J;nRn+ꗹRӌtY}YbZQCwQ^fg#fj~樟CDRv+eܱFCp\ʹM:;"%?r 6O̖Oe<+=e` !hp@~6GyiQ$T߀@l#_t yT>n^(Fټ끍 hS0y÷)0&!EXy}{oq`D++MXt5, #- HV;%`[]YWC1G͚|:Wz#peMy8GMOk\a2D$75{˯2Qs#::N5@ak, NqZBFOj%]O;o.$/dN~D|c'gk3ǂs/g[ݣn!@MD-iuyaVQ@k$ST1tfĠp\e0g>NQb{oE'28Ŷ½Z|H[W dt ZayE,/J<Ic ~V̯Xl#+N_2IQxZA@ϧ%)AxN0B=F{l`wxcjx@nk19ǖNfTUz=$?VEK^N aYXObsփ5i&/419 5$2ivIzMbϧդ-120GFC,7L9}O j1̰P"E g9]@>&gWlh;Nɛ6#HzŠ_k>q7P%:r6`z!ф٪{QrISFN˫Ƴ\< RXӎ,"BArh`} ?G[֌ͿkvJ_H7a/穐1 406ERD^ADS, A`+sޕqU5O6UOa5M'pD?o! >\6ZC;:^0'CH喙qnw@3ՑhHS:& ɕqץBƃ6/׵^TKC\գ8 7o\iugu*~H ;%Uʹqq`ۿ&#**,l( ̫׷tS\}z\Xf>!r;eQ}|p9CV 3t+ '%ɪbQ_qLݡO b#COYĕ)wE)^bX'542$/B#=8jд q_|'skF΢^Okf@ vXQViQsQ簾">hi'^D\V!mcK.pcKC + .9SېJwZ)êX|g *ez};1ȄXz7=` X\(]6IJei S@cجf\oY'ume7MsףQߐ!FS*"pml{i9DSaZH WY?QѦiH>){dC0N|G.r[Rܾՠ|/cNK\D =|T.aAz-0J|A)U:X~t|ɥqge@ !>Dp;TRpRgrBʭXEv?f{?1!4.673VBT() 6*FCw75QJ*h5Qk {7u= ~U5*)TJƒR=m7-$}qS綘OA&\J {Q4 n 1b*8oY[08ae7˚"K*}[#ۧr}jlT71Rn\XK/Qed`{dV9"DU.c&YnK}73N3NQ~rժDn):k:l͎ٷl꿺铢h{U_@r~'K]'၏p7yWCU^Z[g)@eH⻤6b\=SЏ W `k{BbH[J'+JCgW;g/^u[urNT=K|6x$o?*K8P.ΟlOteU)zȇ,-kEM0IU&;a}kcHJqysf(ґzGWIb4y>67Z?t$:16# H$YQZ](fI_5ϜªQtC2cĉxv($)"쬊GFQw%D#-m)oO/CUczܴ5zo|FFHI0YX`4- 2W!|36ɮ "{4 q6`*= d`pǞׄyjYf,lB'Ml2m}Agxd ގ @ɷN¾&NuV}m@v)\*{#*RO;wݾc21!>sLE4L5 jqZ1o44&߂'Q,&<Ҫu Y)L|> A`)4Pt˃?Q!~]W:rxw^F ~+De[Bw%(L_ `um 7Jڭ-)'¤]p\ڋp)Rs8"֞\4n{9J %/|}lj%`5$h*[,4rCJ"gXljkwLx]^\躏Ң+c*ߩ.xİ&ު- CoHWϼ@(_&LbWvU#  o]y&ŢX^(]{RաgbF VF=H|]XJ0##4e`.Pڤ+*q~α3pEJ S[1|ƶF-Yԩ|b?[ҏ `^EZ nRDLsZGq[, ]B;!6[C B]d AD4 0*5љ)Y'M x9t3B+A_c`|2܇Z=_ujSL;VeQjTR=n<jx6"zG(XmEHT$È䕕g7[Qmd],U88k N4.N,bi`O#4 !% ?pDeTTr64h w>nEJt9f:bk4'.܊U&; d ӻzotks۷8ߖ00@~PkΧA#h׉bjofVVgmyz˙b#gdWC+ {Z ^lϸ@FZcWҏbc࣌ WSD"OɽHqЮKȘuvAԘbh?Cӻ] il%BZ7faZ.v' q v R >еS&qyغwhScB`F `.<{?ésvDqe<`U9))^%ds ݨ7}PC>Bw?jݍd#jttʼnؐԀ~,$WJ{LxKzX|vhA9Ϊ#!/{({[ $P}qDпqۂmmSuu’RG"&C^/'TfY`Zހ&dFp7IR{|+2=g]PpjWKbKSTUTq^87qJ茑(%GT^/ŕJAʴJGJ_Ua%Hڶn^k"Rh)vq'VI\ Lq2ZJD8Ɛ%⎾>VrQi-P:_bj|2 /)S1vi/R{bD+K]4`_2\\Z"fO+S _Q'C|F-dį~Hf|bΆ<#'pr]9z;om-*vJyMYrJZ|L0Q9 |SufPL$diwKίgŜHIc{Fy‹!HzT޼3uScb +̚6^IA"zYD9~T284r ̻i;`]{c}ROcNHo_/,=9]7VXDt)SzQz0W"]S#ogrxkZ:Eqr@P|$5Qƾ >6t=h XBqg@(h_B7Qv3󣲍}qfA۳.csMQSKeE:חIUHt /K-X<'u VlG19 vw\!جdq28tNF!}jgƂY[JhݯD k<ԓŕD. VG,h!| 6-+C']: 3 j"!(;5:N78Gj'QNOni<ߧT @}!&` +%q,o[*l~}^pEO搎#<R_K,W+2$hҾOq;]gk=W}8Bp[PFkLh1tkgBq98Տt n;0YZ