From f6a20c7693d97b93654f472691acdb3d9a7f0110 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 16 Mar 2016 18:47:07 +0530 Subject: [PATCH 1/6] Refactoring changes to DAO pattern. Renamed default dao implementation to InMemory and refined interface --- dao/src/main/java/com/iluwatar/dao/App.java | 18 +++--- .../java/com/iluwatar/dao/CustomerDao.java | 12 ++-- .../java/com/iluwatar/dao/DBCustomerDao.java | 38 ++++++++++++ ...rDaoImpl.java => InMemoryCustomerDao.java} | 50 +++++++-------- ...Test.java => InMemoryCustomerDaoTest.java} | 62 +++++++++++-------- 5 files changed, 113 insertions(+), 67 deletions(-) create mode 100644 dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java rename dao/src/main/java/com/iluwatar/dao/{CustomerDaoImpl.java => InMemoryCustomerDao.java} (62%) rename dao/src/test/java/com/iluwatar/dao/{CustomerDaoImplTest.java => InMemoryCustomerDaoTest.java} (71%) diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index 3fa4b34d..27daf309 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -51,18 +51,18 @@ public class App { * @param args command line args. */ public static void main(final String[] args) { - final CustomerDao customerDao = new CustomerDaoImpl(generateSampleCustomers()); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); - log.info("customerDao.getCusterById(2): " + customerDao.getCustomerById(2)); + final CustomerDao customerDao = new InMemoryCustomerDao(generateSampleCustomers()); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); + log.info("customerDao.getCusterById(2): " + customerDao.getById(2)); final Customer customer = new Customer(4, "Dan", "Danson"); - customerDao.addCustomer(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); + customerDao.add(customer); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); customer.setFirstName("Daniel"); customer.setLastName("Danielson"); - customerDao.updateCustomer(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); - customerDao.deleteCustomer(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); + customerDao.update(customer); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); + customerDao.delete(customer); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); } /** diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 26b4df47..07608621 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -22,7 +22,7 @@ */ package com.iluwatar.dao; -import java.util.List; +import java.util.stream.Stream; /** * @@ -31,13 +31,13 @@ */ public interface CustomerDao { - List getAllCustomers(); + Stream getAll(); - Customer getCustomerById(int id); + Customer getById(int id); - void addCustomer(Customer customer); + boolean add(Customer customer); - void updateCustomer(Customer customer); + boolean update(Customer customer); - void deleteCustomer(Customer customer); + boolean delete(Customer customer); } diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java new file mode 100644 index 00000000..fb53c1fe --- /dev/null +++ b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java @@ -0,0 +1,38 @@ +package com.iluwatar.dao; + +import java.util.stream.Stream; + +public class DBCustomerDao implements CustomerDao { + + @Override + public Stream getAll() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Customer getById(int id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean add(Customer customer) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean update(Customer customer) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean delete(Customer customer) { + // TODO Auto-generated method stub + return false; + } + + +} diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java similarity index 62% rename from dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java rename to dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 25d4149f..0057e7ab 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -22,7 +22,10 @@ */ package com.iluwatar.dao; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Stream; /** * @@ -34,51 +37,44 @@ * the DAO), from how these needs can be satisfied with a specific DBMS, database schema, etc. * */ -public class CustomerDaoImpl implements CustomerDao { +// TODO update the javadoc +public class InMemoryCustomerDao implements CustomerDao { - // Represents the DB structure for our example so we don't have to managed it ourselves - // Note: Normally this would be in the form of an actual database and not part of the Dao Impl. - private List customers; + private Map idToCustomer = new HashMap<>(); - public CustomerDaoImpl(final List customers) { - this.customers = customers; + public InMemoryCustomerDao(final List customers) { + customers.stream() + .forEach((customer) -> idToCustomer.put(customer.getId(), customer)); } @Override - public List getAllCustomers() { - return customers; + public Stream getAll() { + return idToCustomer.values().stream(); } @Override - public Customer getCustomerById(final int id) { - Customer customer = null; - for (final Customer cus : getAllCustomers()) { - if (cus.getId() == id) { - customer = cus; - break; - } - } - return customer; + public Customer getById(final int id) { + return idToCustomer.get(id); } @Override - public void addCustomer(final Customer customer) { - if (getCustomerById(customer.getId()) == null) { - customers.add(customer); + public boolean add(final Customer customer) { + if (getById(customer.getId()) != null) { + return false; } + + idToCustomer.put(customer.getId(), customer); + return true; } @Override - public void updateCustomer(final Customer customer) { - if (getAllCustomers().contains(customer)) { - final int index = getAllCustomers().indexOf(customer); - getAllCustomers().set(index, customer); - } + public boolean update(final Customer customer) { + return idToCustomer.replace(customer.getId(), customer) != null; } @Override - public void deleteCustomer(final Customer customer) { - getAllCustomers().remove(customer); + public boolean delete(final Customer customer) { + return idToCustomer.remove(customer.getId()) != null; } } diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java similarity index 71% rename from dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java rename to dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java index f3074062..6ebc4ccd 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java +++ b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java @@ -22,19 +22,18 @@ */ package com.iluwatar.dao; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; -public class CustomerDaoImplTest { +public class InMemoryCustomerDaoTest { - private CustomerDaoImpl impl; + private InMemoryCustomerDao dao; private List customers; private static final Customer CUSTOMER = new Customer(1, "Freddy", "Krueger"); @@ -42,21 +41,26 @@ public class CustomerDaoImplTest { public void setUp() { customers = new ArrayList<>(); customers.add(CUSTOMER); - impl = new CustomerDaoImpl(customers); + dao = new InMemoryCustomerDao(customers); } @Test public void deleteExistingCustomer() { - assertEquals(1, impl.getAllCustomers().size()); - impl.deleteCustomer(CUSTOMER); - assertTrue(impl.getAllCustomers().isEmpty()); + Assume.assumeTrue(dao.getAll().count() == 1); + + boolean result = dao.delete(CUSTOMER); + + assertTrue(result); + assertTrue(dao.getAll().count() == 0); } @Test public void deleteNonExistingCustomer() { final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - impl.deleteCustomer(nonExistingCustomer); - assertEquals(1, impl.getAllCustomers().size()); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertEquals(1, dao.getAll().count()); } @Test @@ -64,8 +68,10 @@ public void updateExistingCustomer() { final String newFirstname = "Bernard"; final String newLastname = "Montgomery"; final Customer customer = new Customer(CUSTOMER.getId(), newFirstname, newLastname); - impl.updateCustomer(customer); - final Customer cust = impl.getCustomerById(CUSTOMER.getId()); + boolean result = dao.update(customer); + + assertTrue(result); + final Customer cust = dao.getById(CUSTOMER.getId()); assertEquals(newFirstname, cust.getFirstName()); assertEquals(newLastname, cust.getLastName()); } @@ -76,9 +82,11 @@ public void updateNonExistingCustomer() { final String newFirstname = "Douglas"; final String newLastname = "MacArthur"; final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); - impl.updateCustomer(customer); - assertNull(impl.getCustomerById(nonExistingId)); - final Customer existingCustomer = impl.getCustomerById(CUSTOMER.getId()); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + final Customer existingCustomer = dao.getById(CUSTOMER.getId()); assertEquals(CUSTOMER.getFirstName(), existingCustomer.getFirstName()); assertEquals(CUSTOMER.getLastName(), existingCustomer.getLastName()); } @@ -86,28 +94,32 @@ public void updateNonExistingCustomer() { @Test public void addCustomer() { final Customer newCustomer = new Customer(3, "George", "Patton"); - impl.addCustomer(newCustomer); - assertEquals(2, impl.getAllCustomers().size()); + boolean result = dao.add(newCustomer); + + assertTrue(result); + assertEquals(2, dao.getAll().count()); } @Test public void addAlreadyAddedCustomer() { final Customer newCustomer = new Customer(3, "George", "Patton"); - impl.addCustomer(newCustomer); - assertEquals(2, impl.getAllCustomers().size()); - impl.addCustomer(newCustomer); - assertEquals(2, impl.getAllCustomers().size()); + dao.add(newCustomer); + + boolean result = dao.add(newCustomer); + assertFalse(result); + assertEquals(2, dao.getAll().count()); } @Test public void getExistinCustomerById() { - assertEquals(CUSTOMER, impl.getCustomerById(CUSTOMER.getId())); + assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId())); } @Test - public void getNonExistinCustomerById() { + public void getNonExistingCustomerById() { final int nonExistingId = getNonExistingCustomerId(); - assertNull(impl.getCustomerById(nonExistingId)); + + assertNull(dao.getById(nonExistingId)); } /** From 448d855809aa7380663cc4b2b6f88b23e5eb7bde Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Fri, 18 Mar 2016 16:39:45 +0530 Subject: [PATCH 2/6] implemented and added test cases for DB dao. Added dependency of Hierarchical junit runner in parent pom --- dao/pom.xml | 8 + .../java/com/iluwatar/dao/DBCustomerDao.java | 110 +++++++++++-- .../com/iluwatar/dao/DBCustomerDaoTest.java | 149 ++++++++++++++++++ pom.xml | 7 + 4 files changed, 265 insertions(+), 9 deletions(-) create mode 100644 dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java diff --git a/dao/pom.xml b/dao/pom.xml index 3b6fc7d1..3f22a0cc 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -44,6 +44,14 @@ log4j log4j + + com.h2database + h2 + + + de.bechte.junit + junit-hierarchicalcontextrunner + diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java index fb53c1fe..1b9c4b98 100644 --- a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java @@ -1,38 +1,130 @@ package com.iluwatar.dao; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.function.Consumer; import java.util.stream.Stream; +import java.util.stream.StreamSupport; public class DBCustomerDao implements CustomerDao { + private String dbUrl; + + public DBCustomerDao(String dbUrl) { + this.dbUrl = dbUrl; + } + @Override public Stream getAll() { - // TODO Auto-generated method stub - return null; + + Connection connection; + try { + connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS"); + ResultSet resultSet = statement.executeQuery(); + return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) { + + @Override + public boolean tryAdvance(Consumer action) { + try { + if (!resultSet.next()) { + return false; + } + action.accept(createCustomer(resultSet)); + return true; + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + }}, false).onClose(() -> mutedClose(connection)); + } catch (SQLException e) { + e.printStackTrace(); + return null; + } + } + + private void mutedClose(Connection connection) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } } + private Customer createCustomer(ResultSet resultSet) throws SQLException { + return new Customer(resultSet.getInt("ID"), + resultSet.getString("FNAME"), + resultSet.getString("LNAME")); + } + @Override public Customer getById(int id) { - // TODO Auto-generated method stub + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { + statement.setInt(1, id); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return createCustomer(resultSet); + } + } catch (SQLException ex) { + ex.printStackTrace(); + } return null; } @Override public boolean add(Customer customer) { - // TODO Auto-generated method stub - return false; + if (getById(customer.getId()) != null) { + return false; + } + + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("INSERT INTO CUSTOMERS VALUES (?,?,?)")) { + statement.setInt(1, customer.getId()); + statement.setString(2, customer.getFirstName()); + statement.setString(3, customer.getLastName()); + statement.execute(); + return true; + } catch (SQLException ex) { + ex.printStackTrace(); + return false; + } } @Override public boolean update(Customer customer) { - // TODO Auto-generated method stub - return false; + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { + statement.setString(1, customer.getFirstName()); + statement.setString(2, customer.getLastName()); + statement.setInt(3, customer.getId()); + return statement.executeUpdate() > 0; + } catch (SQLException ex) { + ex.printStackTrace(); + return false; + } } @Override public boolean delete(Customer customer) { - // TODO Auto-generated method stub - return false; + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { + statement.setInt(1, customer.getId()); + return statement.executeUpdate() > 0; + } catch (SQLException ex) { + ex.printStackTrace(); + return false; + } } + private Connection getConnection() throws SQLException { + return DriverManager.getConnection(dbUrl); + } } diff --git a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java new file mode 100644 index 00000000..202140e9 --- /dev/null +++ b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java @@ -0,0 +1,149 @@ +package com.iluwatar.dao; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.stream.Stream; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import de.bechte.junit.runners.context.HierarchicalContextRunner; + +@RunWith(HierarchicalContextRunner.class) +public class DBCustomerDaoTest { + + private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; + private DBCustomerDao dao; + private Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + + @Before + public void createSchema() throws SQLException { + try (Connection connection = DriverManager.getConnection(DB_URL); + Statement statement = connection.createStatement()) { + statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), LNAME VARCHAR(100))"); + } + } + + @Before + public void setUp() { + dao = new DBCustomerDao(DB_URL); + boolean result = dao.add(existingCustomer); + assumeTrue(result); + } + + public class NonExistantCustomer { + + @Test + public void addingShouldResultInSuccess() { + try (Stream allCustomers = dao.getAll()) { + assumeTrue(allCustomers.count() == 1); + } + + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.add(nonExistingCustomer); + assertTrue(result); + + assertCustomerCountIs(2); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + } + + @Test + public void deletionShouldBeFailureAndNotAffectExistingCustomers() { + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + } + + @Test + public void updationShouldBeFailureAndNotAffectExistingCustomers() { + final int nonExistingId = getNonExistingCustomerId(); + final String newFirstname = "Douglas"; + final String newLastname = "MacArthur"; + final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + } + + @Test + public void retrieveShouldReturnNull() { + assertNull(dao.getById(getNonExistingCustomerId())); + } + + } + + public class ExistingCustomer { + + @Test + public void addingShouldResultInFailureAndNotAffectExistingCustomers() { + Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + + boolean result = dao.add(existingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + assertEquals(existingCustomer, dao.getById(existingCustomer.getId())); + } + + @Test + public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() { + boolean result = dao.delete(existingCustomer); + + assertTrue(result); + assertCustomerCountIs(0); + assertNull(dao.getById(existingCustomer.getId())); + } + + @Test + public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() { + final String newFirstname = "Bernard"; + final String newLastname = "Montgomery"; + final Customer customer = new Customer(existingCustomer.getId(), newFirstname, newLastname); + boolean result = dao.update(customer); + + assertTrue(result); + + final Customer cust = dao.getById(existingCustomer.getId()); + assertEquals(newFirstname, cust.getFirstName()); + assertEquals(newLastname, cust.getLastName()); + } + + } + + @After + public void deleteSchema() throws SQLException { + try (Connection connection = DriverManager.getConnection(DB_URL); + Statement statement = connection.createStatement()) { + statement.execute("DROP TABLE CUSTOMERS"); + } + } + + private void assertCustomerCountIs(int count) { + try (Stream allCustomers = dao.getAll()) { + assertTrue(allCustomers.count() == count); + } + } + + + /** + * An arbitrary number which does not correspond to an active Customer id. + * + * @return an int of a customer id which doesn't exist + */ + private int getNonExistingCustomerId() { + return 999; + } +} diff --git a/pom.xml b/pom.xml index 55584466..524a0261 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,7 @@ 19.0 1.15.1 1.10.19 + 4.12.1 abstract-factory @@ -195,6 +196,12 @@ ${systemrules.version} test + + de.bechte.junit + junit-hierarchicalcontextrunner + ${hierarchical-junit-runner-version} + test + From fa077c8be9020cb0417b1ea705dd8873775ce72b Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Mon, 21 Mar 2016 17:55:29 +0530 Subject: [PATCH 3/6] Work on #404, javadocs and test cases for DB and in memory dao. --- dao/pom.xml | 4 + dao/src/main/java/com/iluwatar/dao/App.java | 12 +- .../java/com/iluwatar/dao/CustomerDao.java | 52 ++++- .../java/com/iluwatar/dao/DBCustomerDao.java | 72 +++--- .../com/iluwatar/dao/InMemoryCustomerDao.java | 23 +- .../test/java/com/iluwatar/dao/AppTest.java | 4 +- .../com/iluwatar/dao/DBCustomerDaoTest.java | 207 ++++++++++++------ .../iluwatar/dao/InMemoryCustomerDaoTest.java | 164 +++++++------- 8 files changed, 335 insertions(+), 203 deletions(-) diff --git a/dao/pom.xml b/dao/pom.xml index 3f22a0cc..05ab2b22 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -52,6 +52,10 @@ de.bechte.junit junit-hierarchicalcontextrunner + + org.mockito + mockito-core + diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index 27daf309..146fddcb 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -49,9 +49,11 @@ public class App { * Program entry point. * * @param args command line args. + * @throws Exception if any error occurs. */ - public static void main(final String[] args) { - final CustomerDao customerDao = new InMemoryCustomerDao(generateSampleCustomers()); + public static void main(final String[] args) throws Exception { + final CustomerDao customerDao = new InMemoryCustomerDao(); + addCustomers(customerDao); log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); log.info("customerDao.getCusterById(2): " + customerDao.getById(2)); final Customer customer = new Customer(4, "Dan", "Danson"); @@ -65,6 +67,12 @@ public static void main(final String[] args) { log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); } + private static void addCustomers(CustomerDao customerDao) throws Exception { + for (Customer customer : generateSampleCustomers()) { + customerDao.add(customer); + } + } + /** * Generate customers. * diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 07608621..545e46a5 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -26,18 +26,54 @@ /** * - * CustomerDao - * + * In an application the Data Access Object (DAO) is a part of Data access layer. It is an object + * that provides an interface to some type of persistence mechanism. By mapping application calls + * to the persistence layer, DAO provides some specific data operations without exposing details + * of the database. This isolation supports the Single responsibility principle. It separates what + * data accesses the application needs, in terms of domain-specific objects and data types + * (the public interface of the DAO), from how these needs can be satisfied with a specific DBMS, + * database schema, etc. + *

+ * Any change in the way data is stored and retrieved will not change the client code as the client + * will be using interface and need not worry about exact source. + * + * @see InMemoryCustomerDao + * @see DBCustomerDao */ public interface CustomerDao { - Stream getAll(); - - Customer getById(int id); + /** + * @return all the customers as a stream. The stream may be lazily or eagerly evaluated based on the + * implementation. The stream must be closed after use. + * @throws Exception if any error occurs. + */ + Stream getAll() throws Exception; + + /** + * @param id unique identifier of the customer. + * @return customer with unique identifier id is found, null otherwise. + * @throws Exception if any error occurs. + */ + Customer getById(int id) throws Exception; - boolean add(Customer customer); + /** + * @param customer the customer to be added. + * @return true if customer is successfully added, false if customer already exists. + * @throws Exception if any error occurs. + */ + boolean add(Customer customer) throws Exception; - boolean update(Customer customer); + /** + * @param customer the customer to be updated. + * @return true if customer exists and is successfully updated, false otherwise. + * @throws Exception if any error occurs. + */ + boolean update(Customer customer) throws Exception; - boolean delete(Customer customer); + /** + * @param customer the customer to be deleted. + * @return true if customer exists and is successfully deleted, false otherwise. + * @throws Exception if any error occurs. + */ + boolean delete(Customer customer) throws Exception; } diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java index 1b9c4b98..950ecb1b 100644 --- a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java @@ -1,7 +1,28 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import java.sql.Connection; -import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -11,16 +32,22 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; +import javax.sql.DataSource; + +/** + * + * + */ public class DBCustomerDao implements CustomerDao { - private String dbUrl; + private final DataSource dataSource; - public DBCustomerDao(String dbUrl) { - this.dbUrl = dbUrl; + public DBCustomerDao(DataSource dataSource) { + this.dataSource = dataSource; } @Override - public Stream getAll() { + public Stream getAll() throws Exception { Connection connection; try { @@ -41,14 +68,16 @@ public boolean tryAdvance(Consumer action) { e.printStackTrace(); return false; } - }}, false).onClose(() -> mutedClose(connection)); } catch (SQLException e) { - e.printStackTrace(); - return null; + throw new Exception(e.getMessage(), e); } } + private Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + private void mutedClose(Connection connection) { try { connection.close(); @@ -64,22 +93,23 @@ private Customer createCustomer(ResultSet resultSet) throws SQLException { } @Override - public Customer getById(int id) { + public Customer getById(int id) throws Exception { try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { statement.setInt(1, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { return createCustomer(resultSet); + } else { + return null; } } catch (SQLException ex) { - ex.printStackTrace(); + throw new Exception(ex.getMessage(), ex); } - return null; } @Override - public boolean add(Customer customer) { + public boolean add(Customer customer) throws Exception { if (getById(customer.getId()) != null) { return false; } @@ -92,13 +122,12 @@ public boolean add(Customer customer) { statement.execute(); return true; } catch (SQLException ex) { - ex.printStackTrace(); - return false; + throw new Exception(ex.getMessage(), ex); } } @Override - public boolean update(Customer customer) { + public boolean update(Customer customer) throws Exception { try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { statement.setString(1, customer.getFirstName()); @@ -106,25 +135,18 @@ public boolean update(Customer customer) { statement.setInt(3, customer.getId()); return statement.executeUpdate() > 0; } catch (SQLException ex) { - ex.printStackTrace(); - return false; + throw new Exception(ex.getMessage(), ex); } } @Override - public boolean delete(Customer customer) { + public boolean delete(Customer customer) throws Exception { try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { statement.setInt(1, customer.getId()); return statement.executeUpdate() > 0; } catch (SQLException ex) { - ex.printStackTrace(); - return false; + throw new Exception(ex.getMessage(), ex); } } - - private Connection getConnection() throws SQLException { - return DriverManager.getConnection(dbUrl); - } - } diff --git a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 0057e7ab..62276d5c 100644 --- a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -23,30 +23,22 @@ package com.iluwatar.dao; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.stream.Stream; /** - * - * The data access object (DAO) is an object that provides an abstract interface to some type of - * database or other persistence mechanism. By mapping application calls to the persistence layer, - * DAO provide some specific data operations without exposing details of the database. This - * isolation supports the Single responsibility principle. It separates what data accesses the - * application needs, in terms of domain-specific objects and data types (the public interface of - * the DAO), from how these needs can be satisfied with a specific DBMS, database schema, etc. - * + * An in memory implementation of {@link CustomerDao}, which stores the customers in JVM memory + * and data is lost when the application exits. + *
+ * This implementation is useful as temporary database or for testing. */ -// TODO update the javadoc public class InMemoryCustomerDao implements CustomerDao { private Map idToCustomer = new HashMap<>(); - public InMemoryCustomerDao(final List customers) { - customers.stream() - .forEach((customer) -> idToCustomer.put(customer.getId(), customer)); - } - + /** + * An eagerly evaluated stream of customers stored in memory. + */ @Override public Stream getAll() { return idToCustomer.values().stream(); @@ -67,7 +59,6 @@ public boolean add(final Customer customer) { return true; } - @Override public boolean update(final Customer customer) { return idToCustomer.replace(customer.getId(), customer) != null; diff --git a/dao/src/test/java/com/iluwatar/dao/AppTest.java b/dao/src/test/java/com/iluwatar/dao/AppTest.java index b4caa54b..08babc62 100644 --- a/dao/src/test/java/com/iluwatar/dao/AppTest.java +++ b/dao/src/test/java/com/iluwatar/dao/AppTest.java @@ -24,14 +24,12 @@ import org.junit.Test; -import java.io.IOException; - /** * Tests that DAO example runs without errors. */ public class AppTest { @Test - public void test() throws IOException { + public void test() throws Exception { String[] args = {}; App.main(args); } diff --git a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java index 202140e9..243d9b3a 100644 --- a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java @@ -5,6 +5,9 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; import java.sql.Connection; import java.sql.DriverManager; @@ -12,16 +15,22 @@ import java.sql.Statement; import java.util.stream.Stream; +import javax.sql.DataSource; + +import org.h2.jdbcx.JdbcDataSource; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; +import org.mockito.Mockito; import de.bechte.junit.runners.context.HierarchicalContextRunner; @RunWith(HierarchicalContextRunner.class) public class DBCustomerDaoTest { - + private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; private DBCustomerDao dao; private Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); @@ -33,94 +42,148 @@ public void createSchema() throws SQLException { statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), LNAME VARCHAR(100))"); } } - - @Before - public void setUp() { - dao = new DBCustomerDao(DB_URL); - boolean result = dao.add(existingCustomer); - assumeTrue(result); - } - - public class NonExistantCustomer { - - @Test - public void addingShouldResultInSuccess() { - try (Stream allCustomers = dao.getAll()) { - assumeTrue(allCustomers.count() == 1); - } - - final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - boolean result = dao.add(nonExistingCustomer); + + public class ConnectionSuccess { + + @Before + public void setUp() throws Exception { + JdbcDataSource dataSource = new JdbcDataSource(); + dataSource.setURL(DB_URL); + dao = new DBCustomerDao(dataSource); + boolean result = dao.add(existingCustomer); assertTrue(result); - - assertCustomerCountIs(2); - assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); } + + public class NonExistantCustomer { + + @Test + public void addingShouldResultInSuccess() throws Exception { + try (Stream allCustomers = dao.getAll()) { + assumeTrue(allCustomers.count() == 1); + } + + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.add(nonExistingCustomer); + assertTrue(result); + + assertCustomerCountIs(2); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + } + + @Test + public void deletionShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + } + + @Test + public void updationShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final int nonExistingId = getNonExistingCustomerId(); + final String newFirstname = "Douglas"; + final String newLastname = "MacArthur"; + final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + } + + @Test + public void retrieveShouldReturnNull() throws Exception { + assertNull(dao.getById(getNonExistingCustomerId())); + } + } + + public class ExistingCustomer { + + @Test + public void addingShouldResultInFailureAndNotAffectExistingCustomers() throws Exception { + Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + + boolean result = dao.add(existingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + assertEquals(existingCustomer, dao.getById(existingCustomer.getId())); + } + + @Test + public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() throws Exception { + boolean result = dao.delete(existingCustomer); + + assertTrue(result); + assertCustomerCountIs(0); + assertNull(dao.getById(existingCustomer.getId())); + } + + @Test + public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() throws Exception { + final String newFirstname = "Bernard"; + final String newLastname = "Montgomery"; + final Customer customer = new Customer(existingCustomer.getId(), newFirstname, newLastname); + boolean result = dao.update(customer); + + assertTrue(result); + + final Customer cust = dao.getById(existingCustomer.getId()); + assertEquals(newFirstname, cust.getFirstName()); + assertEquals(newLastname, cust.getLastName()); + } + } + } + + public class DBConnectivityIssue { - @Test - public void deletionShouldBeFailureAndNotAffectExistingCustomers() { - final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - boolean result = dao.delete(nonExistingCustomer); - - assertFalse(result); - assertCustomerCountIs(1); + private static final String EXCEPTION_CAUSE = "Connection not available"; + @Rule public ExpectedException exception = ExpectedException.none(); + + @Before + public void setUp() throws SQLException { + dao = new DBCustomerDao(mockedDatasource()); + exception.expect(Exception.class); + exception.expectMessage(EXCEPTION_CAUSE); } + private DataSource mockedDatasource() throws SQLException { + DataSource mockedDataSource = mock(DataSource.class); + Connection mockedConnection = mock(Connection.class); + SQLException exception = new SQLException(EXCEPTION_CAUSE); + doThrow(exception).when(mockedConnection).prepareStatement(Mockito.anyString()); + doReturn(mockedConnection).when(mockedDataSource).getConnection(); + return mockedDataSource; + } + @Test - public void updationShouldBeFailureAndNotAffectExistingCustomers() { - final int nonExistingId = getNonExistingCustomerId(); - final String newFirstname = "Douglas"; - final String newLastname = "MacArthur"; - final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); - boolean result = dao.update(customer); - - assertFalse(result); - assertNull(dao.getById(nonExistingId)); + public void addingACustomerFailsWithExceptionAsFeedbackToClient() throws Exception { + dao.add(new Customer(2, "Bernard", "Montgomery")); } @Test - public void retrieveShouldReturnNull() { - assertNull(dao.getById(getNonExistingCustomerId())); + public void deletingACustomerFailsWithExceptionAsFeedbackToTheClient() throws Exception { + dao.delete(existingCustomer); } - } - - public class ExistingCustomer { - @Test - public void addingShouldResultInFailureAndNotAffectExistingCustomers() { - Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); - - boolean result = dao.add(existingCustomer); + public void updatingACustomerFailsWithFeedbackToTheClient() throws Exception { + final String newFirstname = "Bernard"; + final String newLastname = "Montgomery"; - assertFalse(result); - assertCustomerCountIs(1); - assertEquals(existingCustomer, dao.getById(existingCustomer.getId())); + dao.update(new Customer(existingCustomer.getId(), newFirstname, newLastname)); } @Test - public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() { - boolean result = dao.delete(existingCustomer); - - assertTrue(result); - assertCustomerCountIs(0); - assertNull(dao.getById(existingCustomer.getId())); + public void retrievingACustomerByIdReturnsNull() throws Exception { + dao.getById(existingCustomer.getId()); } @Test - public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() { - final String newFirstname = "Bernard"; - final String newLastname = "Montgomery"; - final Customer customer = new Customer(existingCustomer.getId(), newFirstname, newLastname); - boolean result = dao.update(customer); - - assertTrue(result); - - final Customer cust = dao.getById(existingCustomer.getId()); - assertEquals(newFirstname, cust.getFirstName()); - assertEquals(newLastname, cust.getLastName()); + public void retrievingAllCustomersReturnsAnEmptyStream() throws Exception { + dao.getAll(); } - + } @After @@ -130,13 +193,13 @@ public void deleteSchema() throws SQLException { statement.execute("DROP TABLE CUSTOMERS"); } } - - private void assertCustomerCountIs(int count) { + + private void assertCustomerCountIs(int count) throws Exception { try (Stream allCustomers = dao.getAll()) { assertTrue(allCustomers.count() == count); } } - + /** * An arbitrary number which does not correspond to an active Customer id. diff --git a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java index 6ebc4ccd..ca5180e9 100644 --- a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java @@ -22,104 +22,108 @@ */ package com.iluwatar.dao; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; -import java.util.ArrayList; -import java.util.List; +import java.util.stream.Stream; -import org.junit.Assume; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import de.bechte.junit.runners.context.HierarchicalContextRunner; + +@RunWith(HierarchicalContextRunner.class) public class InMemoryCustomerDaoTest { private InMemoryCustomerDao dao; - private List customers; private static final Customer CUSTOMER = new Customer(1, "Freddy", "Krueger"); @Before public void setUp() { - customers = new ArrayList<>(); - customers.add(CUSTOMER); - dao = new InMemoryCustomerDao(customers); + dao = new InMemoryCustomerDao(); + dao.add(CUSTOMER); } - - @Test - public void deleteExistingCustomer() { - Assume.assumeTrue(dao.getAll().count() == 1); - - boolean result = dao.delete(CUSTOMER); - - assertTrue(result); - assertTrue(dao.getAll().count() == 0); + + public class NonExistantCustomer { + + @Test + public void addingShouldResultInSuccess() throws Exception { + try (Stream allCustomers = dao.getAll()) { + assumeTrue(allCustomers.count() == 1); + } + + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.add(nonExistingCustomer); + assertTrue(result); + + assertCustomerCountIs(2); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + } + + @Test + public void deletionShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + } + + @Test + public void updationShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final int nonExistingId = getNonExistingCustomerId(); + final String newFirstname = "Douglas"; + final String newLastname = "MacArthur"; + final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + } + + @Test + public void retrieveShouldReturnNull() throws Exception { + assertNull(dao.getById(getNonExistingCustomerId())); + } } - @Test - public void deleteNonExistingCustomer() { - final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - boolean result = dao.delete(nonExistingCustomer); - - assertFalse(result); - assertEquals(1, dao.getAll().count()); - } + public class ExistingCustomer { - @Test - public void updateExistingCustomer() { - final String newFirstname = "Bernard"; - final String newLastname = "Montgomery"; - final Customer customer = new Customer(CUSTOMER.getId(), newFirstname, newLastname); - boolean result = dao.update(customer); - - assertTrue(result); - final Customer cust = dao.getById(CUSTOMER.getId()); - assertEquals(newFirstname, cust.getFirstName()); - assertEquals(newLastname, cust.getLastName()); - } + @Test + public void addingShouldResultInFailureAndNotAffectExistingCustomers() throws Exception { + boolean result = dao.add(CUSTOMER); - @Test - public void updateNonExistingCustomer() { - final int nonExistingId = getNonExistingCustomerId(); - final String newFirstname = "Douglas"; - final String newLastname = "MacArthur"; - final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); - boolean result = dao.update(customer); - - assertFalse(result); - assertNull(dao.getById(nonExistingId)); - final Customer existingCustomer = dao.getById(CUSTOMER.getId()); - assertEquals(CUSTOMER.getFirstName(), existingCustomer.getFirstName()); - assertEquals(CUSTOMER.getLastName(), existingCustomer.getLastName()); - } + assertFalse(result); + assertCustomerCountIs(1); + assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId())); + } - @Test - public void addCustomer() { - final Customer newCustomer = new Customer(3, "George", "Patton"); - boolean result = dao.add(newCustomer); - - assertTrue(result); - assertEquals(2, dao.getAll().count()); - } + @Test + public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() throws Exception { + boolean result = dao.delete(CUSTOMER); - @Test - public void addAlreadyAddedCustomer() { - final Customer newCustomer = new Customer(3, "George", "Patton"); - dao.add(newCustomer); - - boolean result = dao.add(newCustomer); - assertFalse(result); - assertEquals(2, dao.getAll().count()); - } + assertTrue(result); + assertCustomerCountIs(0); + assertNull(dao.getById(CUSTOMER.getId())); + } - @Test - public void getExistinCustomerById() { - assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId())); - } + @Test + public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() throws Exception { + final String newFirstname = "Bernard"; + final String newLastname = "Montgomery"; + final Customer customer = new Customer(CUSTOMER.getId(), newFirstname, newLastname); + boolean result = dao.update(customer); - @Test - public void getNonExistingCustomerById() { - final int nonExistingId = getNonExistingCustomerId(); - - assertNull(dao.getById(nonExistingId)); + assertTrue(result); + + final Customer cust = dao.getById(CUSTOMER.getId()); + assertEquals(newFirstname, cust.getFirstName()); + assertEquals(newLastname, cust.getLastName()); + } } /** @@ -130,4 +134,10 @@ public void getNonExistingCustomerById() { private int getNonExistingCustomerId() { return 999; } + + private void assertCustomerCountIs(int count) throws Exception { + try (Stream allCustomers = dao.getAll()) { + assertTrue(allCustomers.count() == count); + } + } } From 3f7ead5ca57210b77356338e64ff8e66d6f847a1 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 23 Mar 2016 13:13:19 +0530 Subject: [PATCH 4/6] Work on #404, updated class diagram and javadoc. Passed checkstyle checks --- dao/etc/dao.png | Bin 215487 -> 39783 bytes dao/etc/dao.ucls | 66 ++++++++++----- dao/pom.xml | 1 + dao/src/main/java/com/iluwatar/dao/App.java | 67 ++++++++++++--- .../main/java/com/iluwatar/dao/Customer.java | 14 ++-- .../java/com/iluwatar/dao/CustomerDao.java | 16 ++-- ...{DBCustomerDao.java => DbCustomerDao.java} | 76 ++++++++++++------ .../com/iluwatar/dao/InMemoryCustomerDao.java | 1 + .../test/java/com/iluwatar/dao/AppTest.java | 1 + .../java/com/iluwatar/dao/CustomerTest.java | 1 + ...merDaoTest.java => DbCustomerDaoTest.java} | 50 ++++++++++-- .../iluwatar/dao/InMemoryCustomerDaoTest.java | 16 +++- 12 files changed, 231 insertions(+), 78 deletions(-) rename dao/src/main/java/com/iluwatar/dao/{DBCustomerDao.java => DbCustomerDao.java} (71%) rename dao/src/test/java/com/iluwatar/dao/{DBCustomerDaoTest.java => DbCustomerDaoTest.java} (84%) diff --git a/dao/etc/dao.png b/dao/etc/dao.png index 9fe34b976d7c954b17d71df76c148f43f22f2285..452e72ba10acd5399dcabf1740de9f3806b3fc42 100644 GIT binary patch literal 39783 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 literal 215487 zcmeFZby!sG_CE|rO9_I2lpr7=-3@|(bPwHKgTTK?b4D~z0Pg zR`X%r(+o%R%@lZ%#dvBQlT36tlM}~J&mQy!>#q=Lb`*T!p7+Ax`&LZzB8(gz85~8O zJP_0bIxOgrKr{9qir+ZY^V-0DwhxZs;oXxBj(Xx-T#fWY2M(1~v7DP0K+%0jp-%A5 z9}cI_D3!8{*eLaNS3GV?0V*)q3ywlX^Q|E|oWttXpnx-aI2En$^p}y9<5!Dll`r|@ zy8P;2u6{^L(!?21dBr7v^Gd$IwM&*bs?R7l+}M%{_tou@10qq0+oL(}L!F6PaCi6U zr-)>Fj9{EC4CpsuK?bStS1vix8PAE4D{(ttxRHc36E4Z%BZ)`NVplkRHyna{(v~q~ zc#SBEVI9IIzB87dJ)KM)d-cwPBR1hBA!lgJUz*RdkH-Y;B7y6K@*Bv=QQbQ2BdDYu zb1`n-emEUTfn*~J5utG>;@T&!tY2{kMCYSp$cQ+s9^VL0@jDGlya~l|1P5K|R*f>h zvkE9Q+YI0Mq*hb^ui0OZWv8<8G<~O(@CrjD zTFJhccD4)j`KxAlIy&`xFY8j74o`aysEsVYGA~f(+V~KuVMR&Vjt9%%kNXH-mcpMA z&BTwR&6>R6rLX=tnQ$AzyUz&qZJw&^o6i__RyxdI_oDcSb|UevdFy@AW9kjKDPPmt znIL&B<9_;@Y-gFSGpU~MAh2n<{b&b1h4UboKjNBoqep`J2G=VXUR*e_V z=jcJ@av|m@cJza*Z2gCAnt3GAiiD?*1nlck<^)gDrLw}kM>g?MeT;??UuC|$xsEVP zKy1G4v9TBHoyEHRq5I0Gm(+ZDw~eIkQ!8x1KDZz8?a`C%jcV> zG)z|w3L{4pfj_Y~Er4gtLiZ}08#_)X>2UN>`W{U|LSFgdIY{UIeYTq2%#ff4F5|5LQx#tcVgSY#90x96lTGk ztHJfJTBKNT{W_^aq|kpziuWRz5Gnh|Qf~Az<)B}a@`j|oXL^;^tDA$eBe_VCp@fl} z)n7nk6)Z17s-(by8u89Ni_U^8If@{wcx=dm+8w9#{YVyIG{u7Z2AA{)98DN23+W(< zW9RoumbdUS-G5C}mJl*@&{uY7Jh_8FD(!6GZvVpj$T!?Mv~q{hmi>_{J%afMU}fXV z`#S-!y?jmZisB(cgvtVE5Ow%3k#{7oKCuKTioc=SqfVtr4Pq#YI!c#%%@!;nj#AIH z7Gl|X-Ko}T+evJMR~a)cLqZuXW%Zi<3j@ox;aAQl2vatQ*7ie zsAxZ5uOm1RUBg{-G=$xS3%t#yFs4|0i$~KDokUwLVHPDDFvyuClw=r6*%iDh9g>x! z6tB#sf~7L7LZ-Ob-`~I6&(|j(v(d*Cz3|pU{36RHYLB)EcPe&QE=?3)37~SRlv3bQ z2(;u#el-*jFEWr@nx{54JVrJq)IYZIb{%1Z$02Nke%)%Lab2%(p!a33NB_u|kp$)# zVHzJfZxK<6cExsWzuXF`ukTiJe%O9`^}aDH&M46+Zx6?=i{u6WD6<7dCb{|Uo-MA>G0wrVxPoK#LC2C)73Fx7riN*F6t~8R4Y{E%^e?V zBMb}|kw7-aTzj)duy%?#gqDt1kEbrrBkbpr=mOPUO2vXC&ue&bhWZp_seY(4cMR(QLEzRaoRfUnVpB`Xdc zd>va7MG}4z*Ai0_*x{Dl2i-H>aoyaq!8DOHJ2Z2$e6mU^{1d7Z=o8jv1xd|BBQ`0T zTd#k-&i`=tAuh%)MP*2E=yb4n$m1;`K|28w0f?ZS2C5*R_}$I{x(N!#JxbZSNTRGjV+Z?7sJtwb$FB}t`5}q)P$y=f$0KIs@850RawFj&_#=Rk=CLL*Oiuk%Txd0!TeC*}~Cfpdd1P3k$9&Lq$G6Y-Q z{D%E=pSlycGtJkcYR1+SxK%E${^;_Oxl7p7m)1;fIkWOJ6}4<{GOZjSM(2E*@ciOo z^-%^CtrK0bec_O>!LPo|;L0!ym@S#FI?-m$zj6pM{h-;Gpth%$;8S}8IxVLvjset_ zSL#=LF@9w9*)IhhKra&L<2Ms7%CI%{oBSHSx^^^0RCDXmS2NC4hE#p1DfDnW+Pq=B z(FWUHE2nFDSN|x^GAr%|$7u`Otl26vF*A+GIddOUOFZ3)ynuU#gWa7lsrr;xC##p8OF&XgzFE(~@2$3`u)w)s5Tpmvu8bNS;CX+U^Qgfzw={)%KT&mgA*+oc{ne1-!^^0^HFEM;U(jQ*6avMTB~dO z;g1IO5it7;U1lylhZd)ksa((5^+;q7SlS-?9gPt*-9xpiIt$sd#<7V8d@6!{u!+fKMu7`#F z{66;z0tR%KM?UT!yUZEP8!TC`K%=>f7mJz~E{894PZh65voDhlgM^>^sNU8;#;oOo zM=CQiFh{Q6-Beu{_dx=IqDy4qCXwN&8t>xQ-}tr%($GFRG9!npadma}z2pf^J$s;j zChl$?OL3&2;Vu~yEC_ci02i!>Ai^S$Z4)#EXGHHA7PX{A23K221kC;tV`I!1@%~dC z;g6o^=(=RM&%|(7^dv+?i(G6cAney3FMRWCcA6F5io13%(Y0v%6}u0#kDM?o6Il&4 zBbmy;5(PASDNRQ>I0EXQzwjTFUmwB2!Dm>iYB*`g$?_QkZJ7*BfJUZFuD15D(Qt4A zu6(ddTT>@P3RhbjJ4ZfOLCU{J@WHNs-e#tx_|eBW~(w>|kl{WC^sR__?m35fJ1gNJ;r~qksMUgHBUd%YW}==lD;y zU<@+uhy&JKMH(lL6|&ppLHOhZ#}M zYa6#XYSu!l0dNSY6u$rcAx?oqDoR%Mr$;~UeS?FS&_hJT5rKpMua962UpV7VClm2M zJcEr#2><@%k6TjURKme`2k-O-|2H{5_e3OgL;2%|A{0ijRi8~nKl^WDeiDeva)R|| zMnpPct5W4rQTWR>YUph>wl(&lJH+EdE(+IRAT* zIRAT*|I^6-Y2^P*>;Fva|I0^qzWdFsyhs;ORh|3

zN1r_AizQ76G*Jr=L8RJc@x zZcqQ8{#)Wdy{T4<$o`HkV{3E`&QJH0IfN?y9@~=L%T|We6wz4QefA9hPj1W44CW@M z2Q!}s{ppp7Xyd}3#;0?6z5kP!%}j!MbuRWdU9W!Q>7TB8G#(a7e9O(3)BmFjwlISQ zAww9_AOGmtYp7vQZFeju0KZ2Jeqh?=lIRZ4v|%vBNh=%Ky7$ul-l%&7KJofNURmrbquNfc~JN;_2E_(>5Ea`Xe zK3(St%RG(KugKpKqpUQhP!F5q)9!Q z_Qz`Xoy65!(524$3z!frSP{YvY*?fG1Ah;hK&Xjhj{IPu^3)7FyLqYaQm0d6;apz4 zOpE2Wa+rV{d^L!nP6@Y2a+M&wmRzzS5fLA2`<3zpZzHGgLu9P-4+JMVE_yWG z`sbcX)^dIlnDICev{$!!d>8>$&4Q?F2dH=B zST9OyT{kkZoYfi3wjL9%g40sf=y^4Y98`kTvg(GHk==)1&X*H=eKU?b$gpndS3K~4 zR3HA!a2LWD9+z)(%RTN1|H!E;L;LBpp)YhAiBn~6ipfmUtdpxK-5(@^P_ z#WVBoJ0m=%XDwp~Bjwshd;qEE6{dvOzHpV7-71d>VVe{z-XRnWS zCA9&O&-i%<&URPd=cPfWN5-b)0clGQJF_hNHlD4XE0abWBdMhW?ii5Z53P_!QWVvt zMV{!*Q>qP^9U9JtWhke?3RA!7xG$hBJjdfUck6uLPi)Hi$Z1HkalwOu-J?n!s8@QD z(BqyzB3*gkl59?Z7v~ zg8WX85`ZryN`T(vv$-qxc{TAXl~`eIG09v1z!sxWPIiw}@7gZBi`XJ*PnY|s$Qi>a z2SM(AV$8JqPR{;GVLx7`-VqgvAYS*T8k+4$sMGs{faEXwB=(0+ZAnXgi+BzkH*T&c zDVYcL(71i_ii>%+RwTDmS$=W|+2Q1-)J3s2^!JjICq&&)>r_LwSA7< z@>u4u`1R{$VoM<)J_&_yn;XpJx~7xEO;P<~Hbv$L3Z`4N2e!6msCEJ)v`I~HhUx@D86%KiH%junc_K3b=vUYa;^H_c*m z%*%KV$3FGT;3gBV$67{urorRI6g3O~W=XKMyIIkNz-2wn+w*ziQvbB_;@K_5C!j+Xao$siRgd=ws$y}!)T!I-Ff#&bsshY9Z>eN7{;HRm5l>aEG%sGuB{g+J zKXV#>kH;4(&dyig84Hpq^qD?~QVwmE<{6?yHftqq5$U>Q5D0U~3NBcq)8si#4NV+E zRMOuh5*2Kd-hpj>$?Q=|Lr>6a84T?9-~}_9`qX^D0mL&svXK!r>4E22!>THP5^y%J z*dSj>pY#Xl*Ew$?l~aM}u`kj|)X(-6Y>fOHU7*{H`R4BCF+yq~l|g4gA?fDaIw?_u z6GQhC`ygE7h>?Ba$24?7(Qbb?cVnL`rEq8dyePJm`uVQ_@KW*MnMp3_LyURrHr5X5 z{>}KRG^GdGu-DB(T6$*L)UYP;6!VasxwLyA*~1zekcIsa08A0FI6Y&?)ef}tu?Tcd z*DAk6-(qm_r(LFJOygGon6>VvksWq%qQEqjIlveZho=sf*^iWR*Z%Ix;Stc%5adA+ z?AGiM?lYC-M>{gV4|~;8r=RGG4rD@_&pV?bYIiHuH`{G4`-Ovxoo3me$L}8}AE*`? zykCBP4ZX39S>Q%L?_ctqh+uHOi#l0waX4(~Rx|57zuL9C8?#^F%>yWYQ`O~~8pWK!T=KF&kI3`|rQH6y!k7Mw<>3IzWV$Eua1C zVTxz2-S)VYVBW;kFZsLsLdB69-Iy^;K9(4H!(;hls?Ne6*%}|HEHRurm%Vkd_h$U$h46UKE!J*F+M{y2#1e7z3i=M$9kSe{Ln#aQ*4w$F zAc=6cCU(enx!GhUlwD`3sU_%^=fr&;N&G0Lr2exG+Rd&ayQxQ^`J|bYzwcApD3a6k z7en`cS$b^w?-ylWp?F-9VKn09igx0+^kXxY}eCnSB6ig+)P%v?Yy|4d|=1P#YPKyp;|cR=ee z^v>j8+bMOL8{ zmFwRx4yr9?vy&rAB16%bv_9>ZIz)+|F*lSsU*#Y3M|KuA&T>Cgi8<8!*6JgH4P$Oi zojI0j#eCfF6wDkcE}dL~_#L$dT`rs-!;_N9R>@)3b>(mC3JY0X)0Ybgev1c>&~tL2 zv)YHFwfU{Zg4%Vv*sUJQZVbBF+gwcdr6uKTLD0(U38#@n4E@Z?=<9xG+lk}|a?490 zx~&&31^QWaNHlrRNz~XbQ&BjWDe8GN8lo^Dp9h+DWSW_$@Du7Lo~{8WISw~pwVae> zmn$^tvNhq!%++rCNQ2%tF)oU17~`Sb+>CX)BUsxmYq~v|;AENUq|E@2Na&Wt&^`$W z{`j#nG@|xl*S3r{KPVoY=q$dw9>%<@k&7=Xhh-Z?q`S*vZAwGajW}oa_P%VjByH6Ekw^Oxq=wD@h4Tu}vSrzUM-tBOlv>31*t1UsW+s1$1aT-oX9|I_ zzHjndi&pC0bXYARv%EJ$S)2*r>_a3Ji@#y#KjM15l>ahgtVYM$>eRsNFq&VMqYvWS zVMc6wl)sw&cwEL>faZ91U2XiFkg}MKvq`ux{mBy0sP*eb9-ZT0Zwn^#i=sMk6Hs3L zf88DuzHjf%b=E1V;$Pfk>I+IQn>-UV_M%3dLsz@J}_iEjb zhCV5uuh+-c$GbzGvgo)Yw_4YME)W*m9zF)usYO5`XwBEfZOf~ZlACX~B3FnfCoaD? zfAYYFS#?I=Coo$!f?#vv@ShGA4q*kcB+ZF-gli(7VQF%63VRkl>jr#z8mpw=g0*nl z7-I`)*T-_JN?fA1^{|b*yj#UutoVAVb>I?+jPxS6s4mUH7smi@1b?YDoXY1s{p5rHng(w0k9UkA9&b`MX8 zlkPJm^tsR0lDlJ_m3v?>AG3t-^E-~}Sz6T4~JXfU3Z@~K`(*s0tr zpH+a*cwi~Hg@UEzh5-Al?wE7L!Lbl{>rc-%#Car7j2#)(c zoud+Gp)=ofE&T#Z=f`i>{T13A)Uryai;Xh(#Mj*Rj~CkSxw;BR_9tpe>?87~_jR(z z63WqRO)p69Pt*Z8HB0NgH*sJ_dt5II>XmZwWM)rGo%e8lj*M-n-Hwd%Ucc%!EUv_p z8nsm@1+*iK6!1R=Vu1apMs^_wa4}H%Mlx@YTCx4Z@{of@t*I-SxH;nc$xKneHa z?O?*NM{Fi=V}468g>zr)lMR_oo-%hc84$lLpk5qwtg{=xH>cRm&cn_*?8tpoS9WU# z*wZf?Mw8M$t5cB0VVC0_u^VeDK2$Ml(}jf8Hhfqa=H~PeS6nVFbN_DI>7IuBy%ZR# zl1!80Z0BuORfqf-Fi)E?I+oCL74bQuLjU2D!_Q1!f}#lQIV%g?dGm|GvK6PGr|&cmw3*&c}o@jK#O6o-clBJ}<#&NO9CBr*~ixmK= zRT>>0z`6LmxOrSZ{X7<3pY$1doW(&L$=f(?Pce${j$oxZ8V224AYpvq=WzMDF0K#{kRxJ zd@F~9-1#E^2-!^h#AN>exN)WJw=E}<-&nHvijZHFrKbHdch@RkKBH`ECt1r;@8#%h zLBX5%J&8c4*ws}de0;UytG_1TEqO%$4%C))P+_6Vi~dQ!-}vWHTvkS3@t zA8Ab}IuWlG;#XxdKeyzcw!k+w3JZ-0Q?HZZd()ts+HzMLX_bMSyXe&~`WKh`>x!YZQrietpNS^sZ@cPxkuT?aT+<)*K|WvBcT6pV)PTb$MMj>l zRE6fqBDY)!KX*7Sdr!nfx#WpV;_UnIOS-S+mY#n>oBif)_dz636!%v;gKrW+J zs5ZZ@w*R88OCp0uueffhXzGQe0+ih6@dx5_YkWLtGD2D^$qQVTng<$yrlxI_RSB!5 zvD|FA_dccWB&!xg??tZjzV4xjc1_L*483wd`gwFCs7R(9GL&938Y3FNwp#y(ApbAy zP5#iv?r<#L;IzKPd6QKlfhAdMHP{%ozl!@D56?DFuxHkq@djX7I;5edW(+nHu=Q3* z@->N#B>7mh=@c#>o5D$?R@@zF;uL!@@u+(mkFKXtj{h>OdCJrb3p|<<2yI$=S@`UJ zq8Xyy<(I7-*=a)kEwnqmM!_!K~jgOPOC|=`UYkXaiV?dQtY1yrTaH>y1hYPAyXnQ%zGXQ*F@XZQ&cR zf<&Z^hW!}5#Rf2L#xhH9URM)Xxpiu`Q|5Bk)@Hr8yn1aTSzN@=)N(wuP%oW*iv=m? zBC+z+bAVwFNYri5cb@Kk94Gn}SG8b77~ZuYeR!)2?(NFDT!e(+$>+LQ0#Tmw=hgvs z--k4snEuljlEC(0Sf)6I6`l%5k>4>GZ+VdXy@uWVVFO9);( zM)_Sxbu%S++DW`?bO}a-aRpWDpHa*F+HWq6X zO*VU$=(a$3eq|qKcjyv$JvF5K^3%^C=eYr*v5Y5u4cfo81s;*f)o*t8jYs}=Xy`-{ zS4z#~WGWZ*twajlFpZW4mp!WtL-IMkF2)D5n1prbgL2+)Tt1a~vKd_2_|_##QJges zAIR}u8v93#ZQj+Snql^=^(YJ^``b?8A5>dk<0a#5c26QbRr7R>nMu0QB^9jDVjw3X zrJ16?FRL(()Pa(X&&CrVVOko5eP=mO%7`>tw)&_kx`Mo&@AX>))>YKc1N+!F6|38zYqT*a6;^~4Zr z?{vMzy)mGWsqu~00(0Cuvo^lV9TyjZzNye5@iAC{e^JY_c2%agP-BdsWHw0&lipDmr&7s|d+%GLUT4y_2voEKT8 z>~(T18kb)1ZBE~dUj7BBNu$~0Tv4lDS3A`#AT=AGk8o5viIaX{X!4lwG=fuQL~L$d zS}(im%Sg@Tgb(yD%S2tkP1ml6CU)-Rln8%zVRcr&Q?INGceZql@)zCvkMY(nW38%2 z;GXa>1?8KB#uPav&oXsz=(yO;dPdOTw%U_1COI#r!%{msQ0>T6f7KVSo2!gmwkLr7 zk@pKNIRm$#QgghNwu>(6But>JkM!kp>q~DuT$_X}nbvu2Qr#}3JKpX7@&bj{wsU;R zc^276uO9C6=EVuM+JJd`b@?zg&Bm6ET;}T=bDkPot;%kCIE97V~lEG5slLyC}QzSTeG0X~uRk z7A)>b*8MsVnOXx;s~L9}s-^iD*MS%@h|G+?frV$_2oXkMj4TIPv^^vv}LGUAJS;N|xfb;e$utfcp4#hNq5adA@v;Vm3no4|PdCh!}O z@1qHH#r<#^$nmDD{JCUh-s>m`I_!AaE}3u{pkYY!%D6y7W}B4lcX8RxphOX90#B4dE}UZ-^P`bGd$9KP@6U63P|Gi_=-O7^|XXetU5iZ zP%{PvdBZVxw)XCs=?#)qewnK}w*Jl6ZmalILTosqYL!pt~v)E@?NTRN-A#=BS1 z?#ToAk>gbqp?)_SMtG7l{Kdt|G-?Ngk~4n|Sl_UGzbLG#$}4l<5n+Z=*rS6wBh{!X zW7nWG@dJ_CYbGqtWeYntL0I$s%R^3hxh2xuUJSjn$G2%bbg%89&H5GMNqx|`!d1T8 zI-|{iA}KHR^7XS*GlqpmiL~+y>_vBA12&iCEGR|ws@F(R_;%M_f?b;7poNyA4N7Mz zveZ^lyydRjxaJr+#&}qw*CwMXf+KKIKtH|4q`PJn(pQHF^AiBwz&Ecg>V9&}$m*Qq(tP%(TWwE6Ddu!O#ugzfD)Ze6VC4)ZwMxC)&Aw>`LSmZCWLVVFRHZHkUPbnGj0%TaFiiK>=q60nOEQa4``;yNF@FWfb&BH!!XT6m19^K?Yz zhvpT?v*?HKGa!-Hw|lwjmUVhtjaKQY9zC!z9s-oH*Gsc$-$2K|Out5vAtRL}u`Shf zV|aXb>a^CO-2mu2k<2H+$L!Sj@gOGbd~C7Sz1%*&>YcP!)+5l(BK@-oaar8q_mY!- zId|as`sf@uZtz&^u`lIkH6lHkm_%S9C(A3&xdl^!5uIqCXG+%b;k!dvNK#-!8v}y&^(2a=urtGLo<+p%btK z>|=4`(O+}hR;~4!)M*ZpR`~ekqPug3g5p9dOtdjSMVs^);kUfYFAr6tNkE%DXCb9# zI;D1UTJ*ig1Ofa0%%gFHX$_ZCWeX=b4^{__>!I(sX*{{z;$QoCO{9`~k7$ONryt%o z2`B-mfB%ZvgjM(hamYx;-QotX_)PWTE&liO8ljtY5MHN;#{C}MIO{IAQKH@BgIqG< z5`?``MA$rIq=HJHG6> zTn|>k9tQ1Bn&8~+6>g(MDGl_dC!x^(oP;rvQ+-A=yY{BzmNP432Uue1QsX6m7!cv=HyR! z`^_395qfv6uS~U{a^B>kwUCqInI2LuEXLY;l{RX1(QZ)cl1+~K-+dzHH3(N;3)-HW zAb?fQsENO%<)%ntsJ03jg8iKWB_4~40tlp?_NI34+S<|_UND#|j#5Tg0=CVO)&jK7 zLN3V4&>A;=`1H7Scl6~;l2_YhOE4s@EkArd$CZrQvx_e+`O>l1 zZR-{1P}qXUQFIztO09muCqzVlHB;va<)Fz+7O^1xKvlm--2Mgxb@?Q*z$bzI=ozo4 zDXdU;E~BVvS?Fx*B`M?GECoTaL0vEE<rk*%in3E^UD0xcH_KNR<}>Tx<9poyZHv?;(QxG?vs={$J9aB~mht zYUudE4~@=w7xRwy$e-qa*!bcmKFp_rrYzVac!6fy2mR{zNHTyKeSr4hLB}WI$xGli ze*2^yJ0HvT>9k8Lfm0V~)^WSGf1KX-Y>^S%LPeXC-mWC(;=iZ2>lxT;X>RV*#jiFO z$50~(KHoL&ng4X-orl??H{qFY7`1DW#BZyAzOC`7m16i5vq7Wq5{!?mE2o~yEp4$- zG+BmuxE=Qbozr|LFSF)6Ezq4~?zFI6>)@3yETazp?;cK(bp+PRvEAd`usxuWQOW9> zj%fRKqD5C%^0VLzZmr7AdEwse&{tXzSw2T*a4eqrNq1KgTy}#^gnD>bn3A&ccXv}K zRRwlTZty(zU1xzxLK_1;s?HPU?J}=M^Zi3kBa`&_?=^BB(z@1&fijR-YlzU<)6zjq zy%-jq5VOmbu{EcS@F8^4YC@*wrP^t6>f1D}AP2j}#Zg`z#bT__QzrcwzCG8SMHBy4A5KNjo6l`)cZEd>K6o}qFa zEm=K_m4%&yU!hq)KBN*6gWFidYQr#Vj-*=WEPS0BA*IUA>3Ib^^75Ln7<^+1Dt95J zO?PGGk|aIS{0mapxyTa(WH`)1dD6>1mP0hG{UbJg_GPd4l?TtD1#KXbTtu&P;lLEi zd&xNb-LBRJb1>OiMiaDf>V|PbraHmGIJ)NJ8ZjhduxrP*ko3ft8<#yhBNds)GGPM5xE0K@cO_~*5A`zCWQ)mTHH(grYMq<}G z-rl;iwz9llzO)QUs+v!P%ho()bA{U)G@avED~f(KQ5yDm0?E8VhK4dv38T%(jCKap zw_SHTTNYs*zw$eek9ZR;;Q~f97-wbo+Z-dRMO1Cm(&-8vIZ~fQ=5UVg%`3i*>AQ#ghKki-_!Vf?0?Bh@ zFUBsk!jEZ|ErvdoaV`KOd6>kR*m7+q1tC(qEqB^oI79}IZRP4ph{=MIX#ifl#Hc+pb zr5<&t=};@ztt?QyRA@{X8@cSP-ny&!RZ6^Tm3Aw&b~+^3Zw(*cCxXwpQE8z`prAAo zrVUcU3!b+cLwXzv{831U$!|${Oc27)J#klY5e{iCz;f*q6$uX-VO%8WQd{$nkq2l* zrVxN&a~hV^;vQ`X(LE<;!Q^$6t$G{!Cwy`X@iRs0BsqKJ@VjUSGl8-VZG_urisE3% zd0ZftErvJj9IC~VjXIwCA3EQ^$1oi|8-B3No*SX#odSyp2jCuWfMnzyMh(J)X+QXVFvR@zE^9fB7V)ewYRt`K)DU zlCHTm%f_+eg$6yizC{?&KJ4KH0^~1ho|jZPLJ2E3nS}bnUFS7a_W(1_nD_1E=ZhmP zrLxt9q19QkbKn*zAc$cHas#^9U=^+O-RamI#%py~PitAw^LeoTzR5&fY!|8o?)<3i zoz9%Wn+!u~_T5b)^A;xow4q?@v$TOH2imj^NOi>{4L2!HHq2fw>Vff_*RmyaD|OUE zkRS7gyBhb*f?kKu52b!&MWmQ`p~$5^AGbS1f_fdLPx{zDPEnl)4Ptm8n&*Y8Js0qw zV!oZ6ikTeIwO8Klx+t4|=sWePmJje@m0mC!s6GE=&Utn)ifQE8Rr_UY&6-6LwZ_da z@WCT@NDTg$t{RvwaMX!}qp@{&L6SwXq2*@anjICh=1yWfj+*WVQvO{QD4W(?<6n^? zPPNq1oWm1EZ0+x%++1AU=|)~3-M{nc*+k-{($sIy642<(8Q+GheiV<4jE5ezAVs zXKVfQocmtd+|W4NydvK5DUxt#u#rVK$ z80qb1jeWQ=eUM;PzC$S~YUE!@kMn)#BAsH5@zYAuRS3T_1c_?7xXdn+yeRxT<^- z?&T2^EWCNBR+y%G)v<-$!l!|hF^|uaH5z`?M9s~Ub~xW@w2(m zsP)qLx{~f#t$_Vi{WS;N>oGzWv0SPxW&U@^7n9&4H#QCipRX6B+POi%qX_j=g*n?! z-J61=_6pI?612;mW-5lWv(U;1%~%7jv!lmO=a*Rk`lZPmbB7=CYajSQ?aXr8>61fV zxB>~^TeHbDOOe2y`=3Wdz1*jLy!uq-ymxi+fe*P3)$H$-=U%W$LJRBEt+!N+2hSEq zUw@=)!F1hgS{Q6hg6|t--^bN(mbNlL@A?$kD0}Ysq1CEH{y;YmNhJs+c8|YL5tjXd zjwat?qKDoF?$yK)Zw+j^JWtr;MxQ)%@BNy@mS&qbB78CU&dbR)EMArz*KECL(tHpD zzm=0=k9}~Eto+;qQoNls2H(ZZIL|2A7MCZS;kyc}==fFB{QP2-d8rfnuWh7$r>@?4N3-|gEfc>`%5iR!l*wcY)q%n#zYm&ZgW z3@qN6*LCFUhjqX@#A$!ai}+Z$FWWi}-G?+->((a^-q!SdSD-0-X`XIql@Pfb4{kFs zQ~X%Ea*fEDG{J(PG$yuJ{8#pm<(gF)L_+Q3j_jRZGK)!Aw?`#YQoPUo-(|25?EI3D zqN|P((CS}kEZ**ei-Q|EYq1M{Ii0Q^rCnqRd4;-7u3pzwVf%2#heD=i3-7x>*WBgH zK7D4<1k(fNL30J);~$=7XXyU|-C=!oI0iNg%x#557E@q}8LA6d&5rYB{baHu1hSiS z?pX@7v5C#f9x5jyBEVO(_77We4zpVzs3C))^>1N~da%Oj*;!tC`%3!jyZ`ulRjLfU zLMF?rF)i`RS5N7{sRNrzFa7}&!Na;aaNF9^eglpEW#c&{V6{@?8mX|~!k&NCQsH5& zJmL9gi7(c127Dds(bnIe%=chx7aStv`5@)L(Y{7r!u^$QagF&m|F7^B;7T zYGf)i57%oejk!P@7UJ^ASB;#AjupatZU>VomcQz zm4nsWO4_2+=H!;@plz)Awu&F8L3$1)rYM9mTz5(z1iPU@*4W=>%q4qZ)r<}F&TsR1 zV{E@gLNLaXRVXC9T4S>3;m4=+rCE?5y*JgIo>*RrCfwC72tE-&%#koI%26=l6}O7E z$LiV7hV_5vM?5kJk)aN1JXSf=h`IUH5KWo)nhhlKfJTm(gFzqGQl+H6HK*=3)Piau zi(iJ$l^qvSY4dXEx?DO^D32&asT>Z*Q4il+C!bwEUd_usD$73p@Z+Gsoy~N(YlKQO z=MqiWtKCrl>`cZf0Ql04pP$&{{YHSuvMd5MKbXOM-IW?dSU9X(2H2ACz~^LBC_g~g zVXkn3n8nxyEAwBEcVVVxzi^2~Rx>P(;1O4Pa(cG<(wdXby@1b|ZNr(UFlYN%t14G@ zcpUqzO~i4bXv9+`CdlGJrb~1KF+*!3lG~ak(xtqe(B0?y^~il2-9)4yl!Icn#&TRs zO=E_ntG{x1$UPD&En6{p`jKo@0a*(o=dsAM-eBcjd{)%_u!eJQ6}F+AP0D<)L?x@0 zk+P$Iha;EVDxX_MG*6ROJOo&5?qe#ZaQU+Eu+b#YJ{A~nY|3pa=g`2Uc~{@G7#$j> zm!pf-Fb;@R_Pe>D-N2>l9QH7#Y{^GL9 zA4muU%-Ku+{zfZ4&bVpOb&DO^_P}%DlPLhPF&lDQGX`iuBiB?)hwH!|u`PGGCi@yE!DS?u z+O{o@1& z*}{UB*FQD#9SlPZOtwe*{b*#0BA{>p?b8`d)gwbAzZV1a9wMxwO2*&1)Yv?XKSt9# zTW@YtmpRQ`?oh?p1;iap54hX-Lml*-TfWVTJqchSE1BY7Qr*8Tc5*m0GQC~!-Yc!W zINzljp@--$Jp~?|%RF;;%}eSwZv@6|C(Ebim3+wFM?ZPI!*)Z4JD9s^ZIPA}`Pj-I zsd>EO?2>sV> zSASreN?*)NeK13BBziw{j8Y->@ZsBR&tABGxUfTTGo?-D9EESh9h<^S% z`)#z#)2G-QbNNK{o)=8#3Sl1?WCupYT0KTd%-^tAYGv%-j^gV~*xPzLlNlv4z+@kQBBQ+fKTt|~5ADe0+O93nJx-|KFU3_vp z>oJ8i`g^m9PAcr78s{!D>Z}27x$X}|A*jQbkfuBy^QG&IU4l71D)R{LYyw(n{w2m) zDIHNtQAtY6L4O7@c?FY^j=#0sfbSG8)tjD)`j8QUf)w?k686MLRE5Gaq;lv-clEiMK=XZ*XZZ zrt0T0N_&~X-Pn;97r{T2=nQS5ezfHztW?W;r5sI!#S;p4vtVh~su_LSMR- zt?Ox!urkAHmUjt%=*41Tx`*oBnmv+PhZ z<}*Q9)a-v2=wYxYd^bC8G>o)g%}J)7Uq$wQQH{@~xkH|_;>N+IZqg3`~-1Mn}sgbZ~2Ngc|v5og~J9;s`uVrq%Fs zor2*1`(FT|TzjLl<&ED=`rOxFUT6gk-$T9Hy9QUZ>@Pw6cUsuz_a_N)?%Qf0vhRvk za1xGjc=NQwFoF4Xqr)PA62hJT5FP>&*MsJqbWgvJvtw6e!qfnItYyvOeTLsA#Kubb zh}%npRUL3GNl5B3bkJXB*)Hax|6Jq1P4MX*^knSI$d7L{8z-`IoG$TYIt6=i>R&Jx z3`&WTzI;Wa`SJg;_f}DHZB5%~5(o*wfY{9RdUo?ljOya1RjN-QC^Y z-QC@tKFzzo_uI+-_kV8B%^71|tkp2qn6qZhs;A~tRZCgETpj(;PVeDTN~;nD8SB7K zqdPu-_24QuL`#9ZF5fh9fU+VuRNsTqGQ8JvqBRNX<^{`M7xze%G0DFE18fXm!ph!) z7c@PG0WBO>ooBP=<~BO`G|1aMH;NV`fva&qRV9tEorP|_Z9dnX_zcxVp1FqS{a=F` zGxHL%xE?Kj9ZsHh44L$t+GEt(N-hAaI|1TX0=0{AMc=QSr0^Sfoip1PYkTsEcOJe4 z%V##!YsVHQGEIY20D1X+o|}Bwk$X$7JO)t*rMs5WaSYcVU-2cnX6!#K=|plno5;*o zkx+FNi6K7;n&JsMvJk)g6VsR~BBDLjt)IlQnFhnzR132rs7Dzra*2ue z4-dVe@W~8ll9BsWE5fK+C#pc5u-3IJgKpWx&{GwFetE_ch@To91yRQ1!;Hq!Ud|0=uDxv%aXO?q%Y1(NJ;|!0IIm$U z@(xMk*EaWoqaOI`0tlEjs<(2zt+q15EeeLY-<9zbFSuDhl#Vyq5y7NSC>ZP!x@evi z@=uSyy*tVY(t;{_vLzI0;%x~V|Dp8Ho(s62n;Z^r&4F|LCOtg$(|%z}ASiqz&<|2t z@!7Kl5h;Dk---s=9w*$S?DPYENMjaG{+t7;)YK>axGZcN=Uj^TN-dI5TP=b>(G97^ zh+3ZIry!qj;VVq2%a@4U=a}PkuF)5JgA_Aw7JTwlgHcQ_88D$H7>c^&u|S z!}!;z528Y4T_t>)#zEQVF$SXbhQ_bo!CH-GZRO@?bb2$6{uONIHNRpP(pbwV^DOSh zV)fL_MtO+tuyppX8hC(1ku8H2)<@W~up16{M~6ikIN+ysl)~`M1twAadT;mpqz$!S z$jHdp1sF@4n`qOgabXt<2K9;u&&E}E!(P>9P)>~~Xw`DE(lOHWO<+6Zk#^lw@7qM= z?HfkYNNo`CWYLl{CC*4n<;og;s>ziyviy`IE^Un>m!D-LDx8tPPfe{-vd9i>jCaai z#(H6(@Q%jGSA%~gyR6rF5P`DUVX!CXKNYZlnIHEuMku?#k0%H7v~vX4p4h>~eBe6t zz{A8ry!>A~V7Oz^K+(AuKTfRIzXcV7CQmunfJ8LYf9=?j?Db?)Qc%40|172XAGAIU zc&du^&iaV=50mqkt%PPoLPNW4&lHt^p!>fb%i*ArLBR_3$iFwzP|b##UaZ@%hFE{t ziT}E{g7;4uwyHuxMt|fWv8h8-Y;#xqKK*rc+{}gb4&OGoWys1l@GEa$Ge*e2Nuk+` z?k$MeKDhC>Sq@LWd|LE9*mI&M+n@Xr{;3A}eL)KK068>cdGlvF{_l$Nzqo%k89HqC z>){=ie;xL~Q)F91M*Ul^&s%Fv^U3N{U2pbe@QzT>B$bap(GXl`;6tG`Xz-)Ch#w! zgl1?zb*jO0y|y9vTmFCFxo18JGxy!iZ_@bRC4Otz29@R9aa$HNSO35I_}d+u0`%2# zFMIw~*97sNiqyS{_%;50PB~A@L?h<*5T(d;~ zA0MU20F_*%fMDz&qXP zmF0^?u0rBcgHHrT1L}5-%)eG{3YcW8olVV)OXQCRph%6%=3UHK+n6-L))7rfHK@gG z8m`TQ%BvTXD-!1Kx>5+hV{gs~88m9diSUga+)AvL?81lYqrf*+u^4ImYC}m^OLu`> zg3BMErqzL%SNQf16*0ibrgG9CJ<`<6k_gP>xjCGgqY~mD83k|G4moZ- zH7|GiB(`&AMA%4g@j~3PioJ4+iI1DMjlT{uh%GN+&0V8%q~v*2rh~;DMFZC z2PTtzv{C_(_KrK?hycd6y-J2^g4Q;;1s{7a23z1w?PSClpdjup^psclTkzCoLtObv z4hVQNsSU7fW7^>OSi>@or; z`J6_^=1^-`_hkZUR8yB4EbT};W8_>@TtHL1%Sq<)v02ZyGsT>5Lk5}Zdvr1yEVVQRjRwQM zS1mLnQ^A19LrA}}SVFB<>N$qM8XULEhQj`Ay3u9Z&tDswx~ll+pNP_5>SLr`+@I-V z?YiR~esTKpbCWwr>XV%G&~cB27kjZ5lGEe+4Ic5U9Y~>S+D%QKdYXHg{!Y{(TRr6Q zDB-hUNTQntJxzu4 z=v&)*r}P@mdX zyFsQG3WJkux_XMrP1}HqH^t`x84!<~!2;Xfy_B{2YwNyPrZ@-r9j>E?iuYG}=anI}N>&Omc1UfiCcSm$uh)myiPJBMdhf)1yjVl;gooUQ%1PqK)-0w zT*Nk{t-JV2iBOt{f_^c7gOvh+kcU*2ZS9ldv|QstAtRLFZ0fLf;#e5okFP<*<}_kU zDzbFF$T_7wVqVb;rWX+{p>SlssUg3Paojb$E}9SkjU|U(rKLO=cb{FEO9x#ZIf$NR zEtpPn5oB2=E~iGe-(S6uR*$}F0@gzyKaT{)FlfP>-!&$6t3@Pl8zv7pzYN8eKOVt! znMyUE4LPXoaXkEf!0gWY8oz)yM_6qUS~wA&o5P=xUac&JcbY`8j9s7$Re|iBk*40> zimFqD2dA^932LrStcAF_0do~RLOq9b!7fh8W1Jg4pESzZq}%5Aray^FejOt_MSjIP z_9ZK59QNp;`Nf;lGx<TBY zm{C>3kk;6*Ng$C>bV%=eYJ-;v?S+~CTZSu>5Vn0mF?lyA(7F)-xK?=ELFP_ zt9b}EbAa%Dr@wnRN_}b|FzDL#Dy4o#6~5 zYDz;cOe%MNzNl`pKmro0|JlNTwtEZ@1ZWH>s$zk_i27AlXAO%tOaOZz`U_nvBHj+I zCbk=IKuaZRj)}`UcEO7ab&GmRH<^Yl2hs=o6YR>IROu>B?L4|6#lAG!|5hYE$e zB7|%Uzprn~iwz2~>eUCZVa5%2JZ0ohoQ(HTHWST-8km@BvMf;Nz z^Lsj3C8Mg2`Spsp7p^q?qeGi!_T>LRCfA!$29 zo@w-PP{XO8;C(kso_6fUYlW=29+ZB7$Kh612@N;9MA~h}j2?OBmF%D#cvxKe>!jpM z%}Vlqbt5^~L;s0bmpx4Vfi~ET3*6Ks`coBJ(67f*!~EL}N?PUt-np5p-ny-zDC$z^ zDlfP&O_Z;V?4;S89oTP2UO&IiCSlI8XumXXZAMnW63u9YEV7J0EdZ2EO4S1U-2Eg!q}4i%W8Hyzz&jymv!DTUIB+~ zhr`9ynH4eF9uLHzaY}aq`G}M62xtMm07LeiSW0pLHf>cAcWudEz{7Q4l0$^JXBL1bqwhzWWS^&Ua2;xsZt3!nGsk@d#}q& zir+8;aCp0iG;eeyLjbJ#pks|hN1ghO+66cuIYe(!1gz09OH}N)jr1$lwcPFtN>TY5GuK7htXDbyM5<32wepxqj#_8SuRg#;hm( zVT=puysVFpgvo7+o5=o>YhRY)GMdt}I>DkeR7T~ajtR`I1GTR2DeM#BLIxk4@ z)!IJC2v{sf&q|EWW@q0oBGhz|G8r{#WwP&}>33m!nbDE7+|Vl5-8U$t=<2ul%;eDN zO^L$Xe6T-Wcjn?=qOt@TF^-^=X>tq@k9 zvJ>!BIw%D35sZEe)(_ktKPqbR^3#-XBMfY?+u^i8d-weBYa8%_-wK0U+3ziV*ViJy zmEuX_O*Bg}c}efp{_RH@?{|9Qco_vGY27s3s(0)45PL?c0tbO9+wUso%S5Yh5-od- zTe4+HQ89tD2ds8Kgb@vr*2+eUI^srg*M+0Z?+ZKTVsv0f68VbEKWtvIF(x5#hE@og zdvDn#F^!r^Nj9n>2F{jk7B)~#uxc)CIH(+c8c&L}HXr-xjwA3Mq5NyZ=0vg{&O2Le zM;@A{c90K3XwAhtaROo-9$W5T`PcAvTc6UE{T}b@sc+9p%4$3M(*>n_nVlY}@3(3B zb}lQE7-d34>o8+k2eLUhOc)k!?pkKl=D57HTh&eZPNi4l3u{aJtj1rmYR9I4s+NC!qm^#T!J9Axu1uYcWPCL~$Z7|7gE z>4|G}Z~(JQr*c^Q^HbAmD94)-pM8CNHzCBMv^I^ z&tcsQ)o7ORd8ptiS>CIb$WHNevM;>!6It~*O-pG&KUYKuf8|cytFF#2-O9;w&Ien3 zlNR4}py~M=fB*2;^-d=Ybjp!)?O`T){d(x50Tq>HN~GF9&Awg;wHL(N>$|cq(vDql zEmfk|Xx=D14(&x_HUX$}@QzzYtTjCISw@IehVEZ^jz*`c5hUY+Z7BwBVC!LU#~=VsSL$Rd!xO;u}Px zkg0qIq;dmI2BWd7PWA0DMG|C2722+>yrrLOW2FX>PA(`CKkt@clwXx$$SoRK_&Cqw`U8ltq+DVhn0R2FF0D8S8 zZN-vzxm0XdBED^t?w8v6Dy2dv+1Xx+V&DcU9T3;-C}~!~+wbz|6)X0T4Tv)+u@L`G zDUk%@p@8eE+}K$@yTIg}z;~1*p#iq1acm{c`KJ|9h(Olott3Xh{mw#-SD`UG2WK>P z1av361G#&KL-qBAV8@EW(jEIR)%Z!S&%kD!{u0;&ps2ehBSX`Io!AFPdx>{D!^FyX zj|kHIoWdUb6}IZ%mx$oYEvQAnA6vP?e{&3>f)ENODyr8Z&ITk5eGdWBO&ae0yLs33 zsc6JjMJr7o5ry57i1Mx4#~8Yx71@sfJNRc~7JScyKEN%9;f6DPUw%f#t?JadSoMZW z`avVm(4RvIev(*Sg?xnIw$(cG5mu>s7}P2oV6kqQYSUVb{V@>=|LZfEZ)Xc2sYu$^ zUovH(a>W2reJ)#SksP4ksZr`ydA^JCigtQ{e-h;x*RzQcRsnR@E)Km2-~v1jKdQ8! zHWN6gwf;5rNkHgo#!$Oy2;LQ=(;8NT5y$5O^$@9=vtkM@8H;Bp;V2FxY)D)_SZQVV z*aMOmgR^x+HjYI{b{2041X`xGYHqNPze%Foo6PowX5nh3fthAHL_7#ICSS=ZnzCTj z20C`|u$0*NEOz(tsPe*X6t+<~!Ob!kQA|Pns2E|66)`--LXestj)LU+^cE^1dQ>Z6 zwHtLCmL)IYsbIHTx?O$)Ku<<+Sws+i7>y904zBGhA_9S%?{k=To)M)~VHkF1I@LYn zlOPK_;`zI@vdLuIH}n^_D7-6 zK&7?7Hg|oXkj$L^=M>%0Y{%-&A^{S6bz|KNhe+%O^LeS8ZWqXUZsZN}m~~iT!#dHf zcEZ@418ArozE+Di@TP|2`&oUgD%iflbkGuV1EGM7d1bg|iMpJ0||k+e1D7 zwgl|C@6Z%pa1}@u$!fnQwH8h(_n@2R7FKKe`}JN&($j;_U}YNeGHLpxMH&&%PlLuh*R{mPNX4K-SV>-TJMaA03Pq66o%8Z?e$G$G!^0V z2vO(Id|TS!NO{G!M(&lrZ){ZS6eu(-wt6oH`VLQaPo$Mfu8;G32`j($7Wokqm`>=z z-ZdaYzh@z=@hTvYFCR(wYCA)B=5pT$3-q0ja&8CabzFR*@%;IF!o+yg&6EZ#P`FO9 z^2yf-9)TwAn=fZwr+n!=9CNphIS=erj|7A`S70Ahnm4uIAoji8^AS{2&!|uaWXzPE zT)g2rHJg6K|89bw!Lv~e`ejf_8D$5^b~2|41)bOOhY!IBtTq~rS$ z`lcJ9TgX|2GK`+iT{3SXs_xc9EKbb7RPhWB6zd6u2Q0&@hK7z0WY4km6*O)jPkX?c z!9J&D+3Mng*{56dja{%_xh$Z%dloKQ_(eA{y}|l*)8%<-1FDdI64~$o)a&i*FE5M} zAO$YK#xDGhpF;)h(Y7UFbUpE%N+%{$H5VtQ3Ri0H4NflPJnLb7yHb+ybC8h`zi*Tn zCVZ&C(a{MK>*}?fEq~SMxk8NWe7VS@d}fh}>Tv0J0;@LCjV?LW#sPm$_d=hs^T7bY z5~3U>dH}+U(*0$%mF>W&iFVY%j_-P?625LImJIVWu4naxbmB0&D4O`lLBBa=H`rN; zWLBiW0|FrlEA|sv#IXj9IK%kj9sBDubSIld3P4FTtP_U2>ODC*9K1La)`?EJKX#f` z{SxtFfW6^jz+Av-=ss$BmZ+4wC$T#NnIMcVc58!su9_uRFA_dM9mPMiz6|z5+GgtE zsq4P8vAbyTFH14yUxE9no@@-4GZROB=m_l%Lx#R*yt<~4ih ze{5`Q&5J>CMDipu;?G7S@uRvc0ch>G3ffo2>yN?zJnibp1zw3W&Otp{(f}F z6LEv<#Pd!h_`_HKzG(!HD4}ch|FK{Muh6r77BrV07FIoO3?*71ay|(u%RBPWDJ)!tn2-%>JZ0pA#S8h$8D%en_ zx_N%l(DJ$gW58`yBrou&a|_`PIZM*KANmCFbqo{A zP+@fNFUzU5hW>-;6M?9cf|3(4@M_(0ZG9!H7-7T@0+#HABrKgz^6$h^n*1UCw;04r zjR=qmJFE|LykC!AB<_XZ^?hv5iu!sf$GFlxyR+z}D%1Ng^G59ZhZkhS2e8hCePag= zr9yvdkvjwV^4eP3ZquSgy~N#)LN9?LzT?f6uUaEY9DjFPIBV;?k2z0>0imidaOSWh z$hu@2Y)o*Nv`)NKtvwY{&KC0d@S=TEYdLs4tzeX!$CR}+=`cC$bD*0525E9FVwuvK z_#%wq%y*Tb{%Ym)^**M!h@6fjS)Jl9B@7h#o)W88DWEne$Sn^OG2R+x&A(=LP1I=-mu#&54)S_SlNY@F&z1^KIAGQFkUSb!h)F zEzQr(iq2v{2AZ+gr&rN|Yb1}lp>>v)m!;&>HDK0LD|X$xOkoQ5G-Xalq~M4+|61mm zecsxy_>b+*f0MIpFe?SE|3d7KwWR@*&_Af$`a!bZh_z0;(QDHQ%wEw_#r0w=!^kr3UA zHi3@1A~XJ)4=|EJ{b0;o(ZgHH(84JZ#t-l9-W=j@u;dTiJkpV6-M>~NiVf*fn5rdd z&%jPL>&sWfYqq%{aOL0%K{hdyX}Ofc6-!)ql&>W;Kt60afNxURD3e?Iu#<+)JQ-Lm zJfN}A?B9S_fvI_kM;Dqla*N(@KE;{z1pyKo8Vq8j5syyW;oA5~GAHaIjx&nKD zdxv_<6zgaWW{2@nfSL`yAA%vbJx9cnoQQv}&vW$WYNqs;3A_O;dHBo>Trca=kcHaJ zTHV|PCGol6w80^_r&6ymQ+4kZ*i%SJQ65A_R@>CPu^nv}_|DWR!o4tpj||_bePS}} zyOrJPg`kxpf*L{jeR{wb(H=J>K4VaTV1fY!2+}CP;70Pj9IcwDJBcsQkqK>jWADTh zj>nBg`&f)F3P*2CxHO;~B-C{M_DbY7rp^dFD-&=k5t*G`g7D+r4 zl&QQUb_yp)~u-pqe?IH^yot`Q}WMX$JOc1n!tv6`$Urq>!WQYAqz`VHY;5ZoU0ZUzBpk zt!%mSQ=#z;8Me>7gX*BFwWkS7FGI^$lN|ep_L?^bSj!mOMLJ%01&S1!ULX6~Kvc~K zfBojc++bCul2@EyXvq9UZzceaS{;}mVD8>-d-JxN6fbUpjzfMq&tAM~Zc2CgP7ZHK zL7uDoGO@kx{12~c4gNKePHn5+=k=5=9QQE#txFsPSsk03kK?P;i%Yszf^;Gw_Px}l zq~7hzK6%K=0QqY)D2~ zbjUf7{rY|~e*uP4MfN_pjwvMYpP@7tfD|gRKtZ>jgclWP$?L+`u^Kj=N~;_yvMZLv5iFa-B#p2N#rZj)>g5?G^nxL~iucy1*)O$ex! z@w;AEy~5(w^9KjGQ06l@g5ZD3E4G?6nuMGeJQxX^ZDP&rmEbUI&KUICPt|x^uY*7$ zOS=p-ySG$LFumrjTI)PV=xCHnj#>MLHwDLjb1yDvW$n;<NOvRDtNVDg)Uu(Z5l+5iU5?PDEsev8Pn4o*ty=lv$@~J!pre z5<9%#!HQ~B$ePtqi1#JF1dFx7R5s$Plm`w1!eVPU^XEL9v%R%_y7Nmzy6|+C^r$la zmNdDhy?F_peD?3fs~%hJUl!~yv*t-_EN7kbY1xJBGoYVY0D(H^y7{BrL88D#gI@Cw z9#tJfOFlf_`_|M}5|PU%b(^H8--!>2^7i&qkNnh{`k`kWPp9IKRh#jDVmmeo!5Zt5 zUbC(#JFe0@DPW;5c3M-1=!>*#9gD9_-mqTXmfM0qUc$cXUd@}NHjSu!;u^LMA9K3G z3^-~61K>ke(gH*+8&-tkAzw-LL9gRaM zf;o<}rp}7(%?q6)uHN&W_1Rp9+~;V=&!2zx&~C@$pl3cBh1~H4$=uQrfb=z*wobp@p&Ik|CC1qhCzHYdBca`j*yYjku{-sx_vzt zeJ~;D&?wx}^0^hii^RenFzQP8j>YA`pUiETXhi)Unow!KnwR@Qo$C(mR}MlEOay&s ztoINDk+7844YWM&{Hd8nq?Ir0(HpE@ z@M~=t_!{Z7WjxM@w0(()|JR<*c5as-{5NL7Q_mMZd0m+TRCVc<3)ZLRt1UPl9pMmo zj+b~0K8YI7Du<5qE`$fIxGJ3h-phM2~9_b6qZHzbJIf5YCOTJ2YDM z>R>h>kSlq;meAathF^%ElaGXT|Jh=%=T0 zcQWspHZk9T!i^wpV%tkApj+lF`7*I*+g2IaWs~>ynk?PFPP0)5w|_AN!XVMCzBVXM zyXb6`lu3+hO$lr?AN^u35HN7-+JY9*?TVYH5FDi9X0KQCN?L*=HVz#-1e~j<%dCND zf8f}!9#O}01a?AVuXh|bVxrAcoD!KikUC_o`uxDOs<^@F=;!?AL`B7ao|G!F@_pJ# zJWg+twTa28@&3Tw*k#E)SB}e4$+Hdxqv&)~XNh)0GIKC)ijr=LLx`kiaPSdbyn%yP ztYv!dqdI8G&_HI}=H6I>#cn>sv4|plWq}@{T#%30!Qx=(ShdzpD>o(GrHRP9`WMsD zs|V2PjJG4&_EU^Fy`&g_M*e%4>W=lAY9zHUH=n9ZWo3&tEEQ_fI)+4{P2o6}WATFu zqw26C@30=$tD(Ot&0gnT{I#tQOA;XS$LbPu*I>l8R0dt#JHBsOyP8r?Iq``N$9|{> zT(>zNqbx@ZN$lqrwoV!Dj#e210cS1ivlK%sfPp$nV$V^e_?bRzVxzQqKF8J6c~j~Z z)3@H3lpz68ikm+bSWAkWU@CG08bu&P_GndVPe=dZOvNr+TvT#oal8@zr9mwhyi@; z?k?wE36j7uOWK)D(yuG8x;WW4zP_d^$c9aV94QR#CWarSKNzt(hB5T1e#61mKu2l` zd9+Ro8{pHvwgu?*3Q&>Jip<;LcO!|fNioQ`zHL%s1XicrbMY1!S|X zCDTJ_m-({Rgy_SAJa%u`iV&5nL4qX)0K~qWRfloJyM@kA3YVkGO}pmOcC8%$fL&mN zFT1(p<5@uxqLcuOJ(`rWWQQAh&eDOyb0>OIm>-tg;U!&B@^Q~z2oPBy>9B_83yz&} z09VQqdq{ehY^GcVJy6U1KxC7nL;{X({?PjY`+4+DYb+<7`7E5V#8lxk@5OaTc=wm? zgaY&n7ktb^0Y+%sj87*!jI;xeKmUmAY2nqoY?Lh8=H$M8W z9h$Sz{(}?Tl3a{E$zttfh8rCQUq+}@E3k3rqPkrgo^^c&!>b|eHi&^RZnO`_V!C^j z*XyC*8i{K%Ao@jdk3mWnd&Vl-$Ts2d$qp{+2Q^Mn-6yA=57cko$h^4r70naA>kc~@ zK7K73%PJjQ0qKkux;)frV@1dDBLkjR`u3hoRY_oa?nGUOTVAbuUURHXm&;ciVHM%NZvqm1m>%uMvbmA$kx zKtzM3gPR9KV*!VLZHaAVPA%J;W;7g=}4ck@V;}o@QLK-`K#P;}sBU;r1a#QRb{rGq_9>u+I zQb+1`#Od2H7dK5F_?Cznt90(W>~X>lD8;R_i+|Njk*Jele(>?W6~@@|JTrmwqWvS# zbUKc=K9hF?Z>#O!>FW`j0S#&5N@F~IHr=lycvW!{a&|--CAW44riG<}L7fjHIzsY+ z>^GE_laKs_od5T8Q)jM-FlQC^Sosr#uRHrU$#HEN=Jti!z3H-dksyrh@!{wk@&-5 zYDhJ|;(x73^0BX^(?o|e-_}<}1Ro7EJcX0B797zc7Bebhl-EsF>K{DG&vgV@kdUKY z9I^$x8;E=)E__E2m5&t&0HVprq%H94iYm8%x#HrdeNe5ZR^!*?y)k2EG9HSpyG)fI za&U=S)2pGB0V@tRNJ+ry+{4m)R9wU=3H{P`8~55c$i7EAB47~Qob;r!{qc2wd`G!- zm2x_v3PsVc@UEV^_OPT(O0BlmBfu!SKw>uU*s)~N=8|(>hs9e}M5@JZK#q;)N(0~F z%%wn^_Yg9*Lchx~RCJtHR9{}yDe4t;6<}rK1f{Dr+P57)Hyw`#cpuVPmD_l^88NwN zgL|PLb`n{fl3t}xU}Po08OV!tNdPM$AvuOV?V|4Io! z8}?K1qRYXF_N#xW6QpLbYRM}d`mQPCWBi89y`|e*hf5nMQ7z;6AEH_`NiLUhe+bHTOYL2Wr(MA0p6rg9 zAW8lY(OtU-8jaD-WI)@df3l7Av>ldz+C~o4ze#BFEfSs-iEk6Mtm(8F!fCay8}Um?!sRs@D?8rR zE3E%lnz`{mG_!F5*sxep$>T@*(wedn`S(ikc+P7Yoy-h8tIdz?P3?dd8J5*4;xh~Q z@BXO$#4VqKH?*Z%`3r8?`f-lfJ~}3KE!$Z$hh$}(OW@X(m`pwYreDiH^xYX%;5^9I zpp3n8q-0BGsjiEOW#@s{Y3Uo^%sr1GK09E~^_l&A%}Y`7f>r8V3vOQ!#dkwl*K?Z< z&c;)Wlx_2bWwxm3Xd@iON*TOv-Kkilrxw1cVL0pMQn1hWH74X%1_V7 zm!4&RptI*_&){CZTnRgpY}cy+pX^l8evxs(Oj433`FIGtkMd1jws-3xyeIz8YMz z<5&(wdWXFJ>YXL41To6BZE3TlanU7ZsCX5ASj;?gOwSlw=5q>3kGugY-^)BxUCmd? zRIaw{x0X+wja2GUEZ1z;@`#PdY;ZH)+1$hGE?A#2F84%l9!;}Fl(UYU-+tr*KJm_u zY9f%YEQnfs@OCyTM`ii52him3=_J}IUAaTve3?nRqJ2&ET(#BHv*RmHpmqw(TjsBB4wSc0Ai{j_ zt39Hs6ky(tBTKL8iChDg$&s6-GR4FduFQDHIH(P)b2w{C%g5Zv)M*Icu( z_38xg6CNt?zr6q?7d3oQt_1WQ2x8Mw6N+KEvKCusxoSaM*#mR&VxQrW5jUvm$CKwnjcPxU2fGFqnscv$bEGDbnk$F{!=SNav6A z_9%0NCei7jAKWvM@(*T9Ok?@Thzv#?qqH*d;o<7&UKt@G~2sS{;Ao~B*}rLBj|Ur85!exT2E z1ogjHy|{fa!VRW83nnq2Lz{}1%K1^whN0#9+?tQnpQA(N+rxtf+%D6~)(tH3xVR00 zaivKkWugnK^oxfew-9{YP>4jc&mRYmV#$oC!=(IL=A4U%MnGthmH#e4J*Sd1ZyViN zyKJQh8$vOXL4d>Z^{vOoVMobI8?!twHhR_rE1VB(4xGrwwM{@so4>9jrKN52myc4x zAJSoAEqz-?Nk(!Lr0H4KbV5@dcm_Uu0?ps2kyaV=aEYti<=_trj$*;0AVa@!8wY$p zX5i!}nIUyz`tve{__gu(sL)!~h$w~DT+!@GSe@hIme(kwT?V6D{XyIxrA z=lUOiREiW5M(UAdT~g~JAhZnoGKISjq@`_cju0{s?$(j0-QHpas#QzNhX`GE(9Q1| zNgA7G+0phgs3q(X;(M2b4G`s2B=EZx_w3|eN)fHE^xzIunIAC4nr_*;7?*HR!v$cX zh;Y5RpXl*f)`l}z%*ZRPIvO&*S=5x78X{RLC}wxAQb*(_o)BuHOkgS_ENB%ieDQ@a zHqGgrrNYsIjj0kB_vIgKU-B0EHX=+Ke_xTw{6Q+5C3s| zS&R#f@9n2Cisj7ZcN*y%RR_BLxaAoB4{rm&p0x{>X5MUfG3v0=!yf$UW+Dr}RLm~u z?VGXqg5B0g6yf?sy;+KX*cLZ357muSOTd{4Z{BknBqwy>$&`T#Mc>9U?39;`mZC5@ zuD`*MkecQ3IX01Ioa;oRBX;K(h4O~{Rq4Awpx!fXuU94Px5(n$`bC1#*YBZ1(v`ES z<9&6vvq1GI2wkJAacI=D6VCH+(uovz_X1w50!GOS9A}-N?%v*$?tgID#y@0K1sDkp zXlvWnB#8h^31Z0rQ5MJ#5=$IGw3a9V1n0n6WV41fY85e!R1Hi6BW(7jo-T8M=Q(XUk zd4~Rv3EPmnFD|!CN1kPw{pZNpJ@FIt2%67YgPWViiODYF-NqjP^mi6InFu$1mH?~*Cx>kEJld;i$%l0J0^HVFUKV&$(^m-ghQDcWilp@n6Jv_Tqly17P+A#P` zVy(-)DH(%Iq%~!5dT;aH zLE_#vW*-t`|ASs?t(i4DVbhB43A@{9TM-Gh5y4Lmtme%E_o>oJNTUO$0Wtjfi>Cm_ zLwNP=KlDdcA{i^Gu@XUr$0{@o^c+}#DMY*eee0zEeg}tpB}+^N{OqRVus5I#W%PoFO88~%gvZ|Y zV4Bayp=u@m2utSuMTpLxUt$$FZwQ;%L>k$y{tl)5aS2WJ)TwZF3Ey`mdntz>$g+WE(Dvt>a2>hgN?gWBlwJnwtgHh$ zWzA@IJJSoU->&{Tk^>>09(4wT#FQ%0&2>_YHDE8(mx8{WRaXb=1Nc}>ae)X!89{Pg zm)C7YDfvD@rG=Nd)*msaX4y*h!CJHFenFp-4W7nj0If6svr>W2Td?h751M+sDjr0D zotJyuq@cBi5Qn5S+bGi)!JQ$sM zH7I#Dl-f@tYA*4)(SZ@sn^yfL46TGINOCfi<4 z2K8%k8|nk%wd$G~piNL3;Rbf&Tdd|#R1Q*-aW3|`oiwqLdP)1t&guiALek|`%3{zl zH;E1nyB~JiX@i7TxM$=N_%-S-@=mJ2?6FJn4{zOwIJNI<%oYC+dv6t1SGF|lCWM3# z+}#Nf++BkQcXxMpm*DR1?(XjH?(Xi+zv%A0chmbj|MxuS+@3qQU@g{|bF5KSZ@o3Q zZ?ns3g#^;<-ny7hl^H@3-YsoI65vkwA}uYK`D7T}RJsv>{IT#)27IhYR`hQM+#Ok- zF0yGEmD*18V{jb{HV{T@=MNI>(%~G0>A(O0o*J7gG%L*?NJg~|3%0*vTGrywXbONw zxYoltBzW{6axUQ9zR}(SST(_OQ{^coZ&4mazM`!j918{NF9ly%vn5YH3y%YJ3~{V| zXXGKfLA?fHJ20AVqhtR_h0Ls*at6b^rybn1H(f~}P-MjMJsboxiec3&cmCw0PS^F`Sa1}RAr(@j>>C~1b^M5eCB;jsnEP;I59 z_xR4`9GR#Rf6NG!_SQ_W*;W#r@!hc-#@P$1oL|!ZUr2ZD^zi?VbY+rR20}JZ!b5Re z`)9t($HsY+q=TF$i(1Z zoe#0wY-K$k8A)_0Qv3yK>6Q60_(RqBP14e9`L*J+qQAQ^9m26PUpJ1NMj;a9<2PJ3dt<%7Ek9K5Oc--FfPcVqk z?%08)in&!13&hkiwoW7`+C{xA6sA-`f&Pi~o6fvAB@F2NBGX({lw_1SQRf4XIA9(YTrTr2f0?tCMywAKqZ)OXktSr3aewhoV}#F`0UE%JlxEZM$5O+maQfMetjYlW=iHdaU#fE0&Y+&DH ziO>*NuCVH53Ej5nQ@`+`uj|(4a@_ zaoA#t#3FKpG!E45JTwW|iuh^|Gb;>>;u`h&_!XKqe8oR6Hg zM72IW5IPENK945`oR8lFy11GW_KHruq>NbH)T*e?d4XI!04f=X~X+QsiE zbuC@jntSLX4VpL+1OJ8*;v~l!a$HFVvGF5o2|kbgrgE;SMPQJWs~-(YL(*F_0jz5- z?z4R@kx0{nb+aPP_OvR~{`^_YuR0X3W(7!*Wour^))O*~lUqtH={Q62a^T-uq8DOk zO}cA|WVPZ0Hr{1^>vlX_>RQN|xIVbFtl(U9Sc59I%(b71N`7@N<(bRKiT?>Ioe+&Q zE%9yi(hs5Y(}iL46&}lPTKp|{HLyE+MSDwY>Vo101Ueg)5V47Ifw|T@&({`GaoS0X za$36v{XwcE>qjdzKb<7QuO~$oJ-%^a^kvHU=8wJ~+@Ij^#}426O%G$k;NEk) zk?-OZFzNroq=#M~)HvjyoTsc+Tt1cbkMB9w8%flgjf;f{DLpx72bU_A{y_kAQ`4yI z^EaS>u`dUYlE2Kcp%%gpZFRhM{{9yGWw}J}jZ{i1)o^^&QW2SwzME=1Ych?aovxM} z$=c|_->#}MT^mwu`6`G8wbl%Ww0$DfJqHUwq{%)pcuE^dK8Qc)u*yoNg)8YJ?N%#_ zc;m8^$buDqukpXukN0h-P(F1BQDY+tg7GC@aO!&x#?`Nv&z~G3Ta#?C&2(6-!{MRY zT}kWFP-kt=~J>0!P+A0#5K;PY9Tb*fXHuC4^A_-kxb@-J&;Ms977qi2?72`Kj zn)U}Nz5P|I{PjdsAtQQgZS=Gee5(e|jn_vu@5h`35d#+t%VAhXxk{$qt);xcA)B1q+I>MbTtXXQ zT5`BQLF5Jb!x8l3{j5u2lvKBWf3p!ELT9_hAO5&g774J*GC@*9jOm zxe483rw`3-wj2-%@F6={LQp;*Til)>I~N!a@h5iCDHiJ`t>?Ee?-L#pT<}x@5evYX zYm7}@oa@?@cFPe(Eg)Q8iGhKQ<0G+n5NwbsM1gbFTba_{6A2*9zc0t897^&Sb&JcKFunZ31|>1*LUPD$rSzRaJytf z8!EXGmIywlinv^Cp?w5^qK&4zRE){Uhv%ys#|O@u=WWY)$^D`a?0cW|Urz%|Jj`JC zp5HS6XQMupcWs=Uxv+I1hnmCe58!`P{|a>=2Ok9HpxGNyqR2 zlG0y$HAjISt6xTi%y2A0D)LM=K?8}+qQ=p)7(pv;-@+7{le4{uj|A_J{G4QVjv`%$ z(QKRn^&b?PnCVYnOn%e3luHvHSq^vzpeWMtY9*8qoNE9KEbo0hp4vgT>gvl2d8G2l zu577^FvxiG>}W`jNieuwNlrs;R$-UW0Dw|vBjHsj94Hqfxr0hkt_(7QU+%=UlV_Hd z1Rdr@esH{FZuqj$BR$4QIvsrORAHfPp&6Aq=tNE1X?4(C$GymqeBq+6X>ao2V(=3r zP%w=Fc1#TQs;As)=w15A38cdLzuLSKWB`Tul~V?QnU3&alo^5?rr;s$Q6*CYy01XP z>vV>S;}|tQs47`QNd|o&39jxAGF7QE6zi|)|E)e?%v6!+B0YuP&0=|Fd5~l-7HxVz zQEQ9qntqwmz9+(Bap3Q7*laST-w+yi+3oyFL`~SgAX>COP|W4)YFu1GC_S zxBwwF7h0(rf~E<11wL9As_;))_r(#J9-2$FcebVDKWgy_ACH^AtZ6xsR`^AjU(Z1E z0)O{iaqQrtN@j-Vp}zak_@RDKg^ItMh$FPXDs}}gzde;Wh{>xjRiO*gH+_xH%YSxcCLz5a_ z4=_ZH8v4gyh3z*&r}cPL+N0tu-vp^fXWVIJgw^JCJKT{h#gE5IB-~M>AKH((1JHL@ zB<{xL9Kj|VQLzvjaC;6Aj-#cv2v^Cz@Et2y&8kKnpp>3kHj&=qAB+yv*BbP52BoI) z%G9V{YJPz8X$af@zmd;>E4jai0ZMK{NRiVn!HDXv5V%$l`Ob|gU$au9F7=L0op!bQ zR9?7W0P67#3QGsB&(!F-!v5?A#A3kas-c@k9Hrc5q8se)RUnCo);hBxrQ;QI0-|sP z3IrRK!QKS_(%hu*_OJUY|4x|C~QuGtAMcM; zTM6Oe`_{X}MA+vcKJfKZs#e(1+ia$``}~GHo9ReicWs6O)Pkd?Ane!koJ!MSpYLC=gzehIq#2`~{}rcS;>#>K(P!r3mZMcX)6J>|7!5KrVpVeu{ivupdqNu3o~NR(nXp17woI?EduH1Cg>0^GJX-q=)Hl@=hH z7CnmK*D4`;H?HoJ*=iX@N4Oyvtk}1LJvgq<5}C9AvSVg^f0>N-66jPm+IJ2c#Y+*`N%>}Hn zh(ni7T(B$nZDMn?@aDd~C4NNkHObGXzEmx_b>6w|$7xfNUbUJWJoaS+cpyY|osK?P zJ0`~m_+k^7fR~+NkWs*4Mqy9jh-fn9HqNp)ej?EU-|m@W+$@@@zk!Su$d;$orb=m@1H$r{`Ip z9l=J$QtRE-B0^qXOTZ`zF%0hQ#<3DS*-w=C+8;3E zsXzfO`tEP0y7ffz9DH&JUH1gB8s z*|%s1-r|@xnQGGvGEPEDNjPo8BmCQlHJPDB)DX#V7JeA+|CJ8h+XAqa_AHPX6 zjB9G3wX_a*9)>j8#5xjQPUgzh~&k$TH;7T{0x73PqxvON#i(anxt5d znFt7dgF8feU^wpGrRI)D4f>d>kdwDt_m1c6qKZ~;n$WZIQgV3ZnT^~uI_vGnd_9ODI! z`arhc-mXar-cvUA(GQuDvkA`SyCSVRTxUjg3F2y>+C^da;gE$&i8`Px7d-J6g(-nw z;QD5yI*ZkFi{BPR_V4v{@5!^KR${5SG)N?BfI_-m{Whpsm$$eh(>Alj{7oyPZo9y& zZ8kZ8_Z*xCIYNINZS{-)@Aj(;IB34X-JT|3r=%eZv0+gmw!F!&2ju=a4^u_Sclxie zdV+C}b*Ij_+y`5A)%ndNKZ+`DHS8>-3I&?-T`M`}qhqDdAN4dU!FwYe_`_>W{FRbZ z1O0I|p)k!i%iu514I+)-K zNwF!e^fzER@~cu-F5z&lb5=sB;0;u=aADP-rYeIGJsQWQ0JL;DVxaTW{?L80uoz3d z&Ag3YCcdpud`OBJTCEf*3vq-VD|~JIAyj>@-`BYRu`Oc1?!ly%GN7B?R-taqS@GIH zlt?dz%UprBl+B;b2D(M=O+bR9PzvDkfv6kbnS&#Yc6S-P2DRgG6?jN6u`kE;sw#vC z$-!g&0Q2npNlA-4)JZuPM9(CtVmtqh4%)&TxreW2Cxw1|R+UMMsG5kP&|4Qz-?)rFVRs`7u|8ehpmCY5c1-tK#mBg8Va7BiCKHjs1BbHieOdYmXxxI)Fj zV%jKSrRBd)_--`K2|#fO1oXJ?I#*YC(`dkh9)em+%C+pqbBQVyCCp!>re)ebV*>L?Yd!X&jHZ6w~ zDQ-goZa2Q4s~#1xaG4Dm&lM5^awRtZt6=BF5%Q~GCM(2u8_q&*fIh0cmGyJ4ULIUoO zDk7&FVH@6rixmiw3-teS zT^CrZ&qv#;mTLy&EPUvVGNfB`28i%}Cvcl|Gf~sNAybR&v%8LLWb`wzr+sU}o5K~6!TOQ}w?VesFvRM+NjSl| z^dJHajFZ4`)>uey0WH+vaj24AVMlFZ|_)h8&;!s&Okoq3Hnp(Oo~{l4=9(g>(K3ttudRT&K5Q3?DcYYbI(ts5sta;Q+WlRuqhr7 z6gNL13Nd~~iCJO*vufc0>lZ8PxGrEgbM{=x`)aZO+2qW8Vw-t=dH?d%o608f8_CVU zxy`i#!2LA8RNZ2>U8J@y%LMqI(iD8~dKl(5-HU4wA4OAm<7GmgVv;CN#pS)EUXDlItl%qKmd%8{o+(`=36kdcsd>mP)vd6~9>TFyDa;d5cY8mDwF4-a$2> zZ4!`n9bcfZQA4s@D1|909=o7N@0Qz4TLMFk>+EQCg(2hrp+|a!F>vwUqp(I+pugY% zY)0LdnN{cgQ&Zqa@{XQnJz-VP>A7fH46oM4dGYFu*2fh(j_O^gobpDm<|^n14B}8A)p)+;Jj#n1c zdlL@YD_v_RzsU@XL#ziKEcM4>*)31@jFZuh8E?sw*goDR7L{v@)GY9>;!yZ~>bQ&n zYIJPNNu(6y8b!wlA-?Dwlg_n`oUiy_Lgk1}$`XJ5SEW#8T7$_*6EzSQbU`JsG9#Ic zGVvZtEN+nDu7T!VUJEkF*1Gn2E^F!&+e=m8x{#4mvr#pE9nj}9GbmE)5}k9i@=<4` z%w}LgNAv9a0W)bj>TOeLy|!#5i}oMe=X&33dJIf9RDT;K)}B75-E1Gu_bC`t^aEbJ+y3o3>rg9ON%Q7ACqf!|4Gt1fSHE%RB^6~Zcol`c# zZb55L<>%M7urT$afOvm12!Oi|eVtcVM0bhGk&a29scLn4In}URE8oOVfldfI+(_Yu zwb6Up`A1w-)K4?+irLSN$n0ghr@6pF!Zw-N6>SrR(YuU?#oJQYhbQA{<1bhT>j*tM zj8-x;O>d#06m94ewORSYLcVBubT=J*9%cW6$=`GE&_d7q#6~`N^Payt=S}|{a87j7 zExMzaDi(hN8Wwx3$9l6pe@*wQ&-~cmKqpO!@iNK{(d@^kDyL&`t9LWsth$%qg-PO@ zjib11{Wl~OKFp;fS_uyUHapT@K1Hq&liNHeZ{M^V=FeJ8(H~{5o6^lL;fobko!N$*-`8 zn>8wTG#I49Dr=iuJ5`_~Apc}#D&!9ki1T+4_-wp;nnbVCB9ONH=5?7`!{fgTj$8g; zaKOS7ZDV6*%iVd&=1WUjY&s(bL)4q~hicX>vp81ozk|Sf=vlOH5|Uv% z(g?@H`f{Oms!N*4NN@}$J@?;uPZ$jgAOmpBJytNNRUOo57`@lR8F`D9B)$FlG11%C-!5fs?X2PPD^kf5VV3skvcS_WD%u}gX$I6 zFZ&G^R5&PDDT7ua^$%oQCRU$g6dEc8=&EQLUbRNqOsL7pIY)BM@*51vPkV249#G+N zaMnZhPi7kbE=}?_YWm#G}83pB#!qo9Q+Un9fnQnb6!bV@kfXzh+$ z8(eJGEh$XLmvnP5GI{v!|UjMX)_cA{wT0E+wZEx-7H$@?yDNuz)*3kat?+*&Q; zXSd~t`03?LdA+k9NA1k$Ogg)MmJcv8*Urh#<(u#<>!u*27XRoi29#j8L+#tXn=S_L zVg^~RSm=RvE)mY)vB=O!ZkzQOveYBn{(_+MiePLkYolhpN{`YWlf-mzF z=aw5EiFtak8S3kv`nuFq1)svE*OYub;J->nH@4JTrip8P0u<< z3Pr(cAz3G+))=^Sqku+cj+qq(i4#_Ep1ZmIyJ^H&DkM+?d%Hm(9$s&3BIUS}XB60> z4#S4#!?hCq_@K>t1S^YEFR1lV2aZm8h1kGej%n0x%?9L@C9IOncz!We{#izVtT_Xt zSOc9JZLr$^MiE~$IPZIXq!xFXGrjpmdw!WzBINF_RVhmyIFfJ3EDLZr(QUw=8Y=BN zV+FAFbzcm0n~{It}X0e&#t}xch_?7fe=&d z#Z3Zp`EETW^|_0P&U{{=;c<9g&?maZe0o5#v5>6+p_|rL7Xkuf1OsUU3<$Km?3#tfnPE^2B=H<-?10 z>Hx@A1K1x;BM^h=w>`$b#!}gJYE>@J{&-U(i%fQlxB(*PE<0ozX6%dW402+;hlD*I zoH9SfRdaEsQ|0>R^=dq<^GmDTGRd+fP92MmzifmTN9!qd*rMnY0*a!@K_=A!=5f-g zm(hpgmt?Da^#I@nk+!E+w`19#T<`N%j~4DUz7r+q+A3tV*@bQLPK&Q#;5-1bc-PVE z67fs+$PeOzA7ENe8&UCt3ov~CqH!ZHr4PTE9z|gKqv7Kx!r|OO2vbxt_#XvmF%Rf zQK8qT&K?wEDLvzzYB(fvwOy4$^~xm;RZBDYZvCNal`^K6CcNbFaD=3naw+g84Rvt4 z=~Fp1PO+*c;?V5yKP-i52Mveg>+vz-g-AEMhEx1~v66xsPmys>KP~HN!&yNO%CQAw zjw_8aD?dL9s-ympc+@M8w9cC`tvaSXYId>nSYeCODWJN?BkHh+Vq!ktXGh-l#%;4N z+%^)oo-#Z~Me{;aruTo;=b3T69cL8s=Qb5rZ=ARG?HP}3Av|5ZUU;-SZ}?>IdI4Wv zR?^GSwJ;q)u%6!ds8pf)z`6%__T(fQ+eQLvFY1mMlv1fB_U>ZuMFFGoYRDI7@D3J^ z^PgtJ$pX{5YgZlu6!{*X>oxZFC__tmL#b zB(2TK@PZ|?1@Z}U0J@ZP^STN$!TfV=_nyVe#?lV^(mZ!e zhusE={W$oo*5n9eI596Iu)9_n-tMNRp*pX*OJsx{LP$sGww;LB0^X+~-dCiVDKEDW zHttcMaBk#woPAt&$J19mWm*r9UUxl>`i+L7(R?HIlsxS$p1BQ{V}}wEF0Ed*67kcZ z06o3EO1J>>Ls$U>|82e-S&LOKBl{U{kx zBEIha@%^G@%T_e3f$_odNW4Uh%rh?=fw*!JBe+Iq3`hbgID^S+K-I+x1A`_k!3 zMEY@MNTLK#Wo`cf?Pi`_6`g(9|ksXa~Z(7*u7hsvFach?!dl!q_=buL$& zJYV<);*gCDf2rln4o)+MP9nS@Q>JlfYJOpE`f_`T^m!%rF5}Eo-s^x%)jixU&~rQi zait#g_e1ca5$FrHE9~{vP?VWMWr_tuY;yZbvQwGvv@LuBHLjY)n6Hzyaz$Ig+vdbzhxdx7)RuaGfV-iuee_|SV;?l8?DYdd*p;^Z@d*|7!C!~va{ z9yl9n;}-$&9DxVf1JWw{-G)(#2UY9^r4i%K7u-|9vWHDeq(@}7#wrf_{9r{u44boV z?E7;t2y+dL%d)oIRokKW>gR{Ksgxtm+BA?%KU{@-Eh)`1ixU@x54<+h7vT;d1|XY! z9U87Plmh952C>VJq<`3-nP({mgf*Vo9F5^kC=O2P^j7FWr{1B%o+SCIopP8Jf`<6_ zGP}UYhwhJ_aQYX|#N|Vy42GwekwyAd`{P-EF4S8Zd@&;-AYk>4n##UAHtm(@%>1(9 z;na&txE3)xi^XnTr-8L%IS-Qd&8)SmZ^rGyTVH7)e%qCt?iRWWU?*(DCfxP`n$)Y zUJNa};FDT0z>2)?-+E-%HMQPfstJ6OC_-2~bn$r$Y8CY?9-KiUomAq)iBV(_t zI=e{sAz{U3H;s_mz)C1$M4zA$JZHUqfxttTfO!1i+(=s8e_V{C>?y%F z79Cm0Lb=-~IPWHk3CgL6l#h%smb)8%{f-$>zJL^Z9@-;eeAQ z0MfXZtuuz6AxJhh{9F&6s9@qkSL!q5u``<8l5U*d2|pyF5#Ot!S8ME!eTSgw48*is6vPfvX=(zAQWFuR|G|3;M_z||_ z9_XaPOUA_*UKZSB-;iq$8C<{&28$70`+AC(C(Abl{B_$E6(rqdeuOR{G?$C5f6T0o zHQ`<9yK41x(RY3F(BfA>+rl|jI~lsF3mt|t7BN{o&U8T>I2e6!2xvy2YIvEGcGq4l zKa(hBVo`o-?^&|RJ*LqLrvnbfhpY~isXtp^d1kd=cN($qY{K)1fvXF$3XB2M6nb|d z0Y!eUG$(UP%;(Z|Mv@mKwFjjizY59M2Pde#1Jv4-G92;7MxhWat48sAGr%a6-35W# zXlcJ>$mt_vVlV)?H2mi3uTu^Xj3b^ghNa}C8&dH)=bojV?;aM^S6aNvau5)!SXQI~ zz1y0$2T^mu+hO;LMyoitE}`vT4Z2HjkQ}NnUA9xb^II%urN;n^rc*z048p3y^uxe? z22*BPryY?Am>5PCWU^lyPN+^%RD0=J#a1Q7*NQcRR`VNGw-Ke6qz&w69ZF<`xLguY zdRW);vv>#`c5CC&K6QY6CMYSp>Feykcc|Yl4Va*2(DI0k7{NOU?>x^S`eKDdEL6gp zg+Ig-kVqA|;=HiqR^ETjQ3*U~C*1wB8mi(I6tA{Eoc7E7>8MZb5z;b7ZD{zdSMKAQ zZbwbVS$e1OV+&sGR|;YC>*#)$s&zw|9mA7M6U`jWE&WuP`==F_iIyt;wu zVQy(s%tSIZw3!xxB#*j}B@#2e4)>R9{kKUi;HrXazrK!np8wh_e?OGL`X>-Er;xUQ z9}zhB7$GaTgocJ@@*c@}MmJ$P5hBTfp}E9MT?uRj3aUr=uKOIV~6DO-qY;ro~XKH|~S2Zcd0 zex%^%jR{1&LlGl~DvKtfrZTyEj0h$AD27(K`DA89<9u|uKGUqr;mstGa}hR)tpz}zT$EXpV49)`K)J@ zh`*#JE%?Uj`BP6ZIrKf>?9yn90bp(=>#?f5wn>lA7P6Cx)Zy)EAd;mm-tKVyO^uJT zrXuRa=nJA$MsgGt*9_l~x<}^?u#&_8G z!?i)NjoPtyMO7ik*6Zvwmo8N&a)K-T^r>l~E3YPx~U6)=Rc>uh6ox zmrmG;rV-pQjk)D%Qk+Mb2G`g?t5W{3NBMyW{<(#CI79E2=FG=7b>8IBi2}o77E$bYW75)!4DMqB2-CERmc+J+XzkCL)P>p6D_D7^pj| z_Wh8fw0Ko*2Xj22esOp6_Y%UX*Csk~s4;g}pLMbM{R?^%<%y;1V_j$nFk92*1$%+G zRN{_so3YMsBL16Emxr=IELkYMgOp~mb3`TAed{0^~))iHdZH>+1Z zhKRkZA)9cvp?%|XQA8>bnG3Un??ynFv$`NMJUAR<$?yf(qCbU4^_gIoA*_19xkJMS zu>xmwRQsoM)PsaN@00c+Up|-ekUvJa-+q-=AFi?&O3MH=rZ;N@bXvHa26GFV{7SRu z;JZ=#u#JOr+4FSgQD`ZEfmT$T$ zBnO*<6Bz2Y+e?e9VpuGv8wcp#hSyozjQq07xHUTSB@`+MdXoVIFfOH$K>`tScYwtv z?$hb$=2_dC(Itujg8=gy&&|tvXo97L0>w+*KsRKaSJK5a{@6n$n4Fa@df+=|DzKIS zC;kF2GZvGwp;Yd6ds3I~1f`5slEG^?2?%fkoyi?dzQ+iR`~p0K{kVx9_H(#p#W%#bYfZjJt4!u@Clljb?zZ)vy0pj^i*+h>#ZtHtJbjJS~2hf>L`Qx;sGS=QyOa8C#4%yQHmzt`sM0lc}Jl~FUB-L4-_-ewQgH6$TUYr3CR+jOXBq1Ek^ z6`YB3VDob`;91ZB$LJsZU-?#=Fu-K3GH7YkC_S2*N`bslOqLx6&w zHhTT7bVusW;1)$bPA3+Q!Hs;zM8PBJ2tmHtIj0$@kxFap=Mga#yh^umV$mz{$m=iP z0@f=`U7|@|LA1$J+bYUUcEz@;&DRI0I6t*qh;iM!D?B$o3zkG9mErG$LBEWY=x82q zlk8d;l;{}I>jDryOtgaH7{-naPRN+#^qngWeE;~FQ8Lf zauEYYB=HnaXG?;@Nc(C=MDvL;f|CgJ&Q(`;h*+y zq<5RlM+fXs3F%rrR`#!iSb#?za?GBy{h*pn+pAHvTV18%P|HTzkBa}pEs$ma1Q85DR9x`0 zKijZgwZlOQq2Swez1sA$3766wAtk)hZ-=`< zyrYY>X8G4B@l5~+DO7QLo}mEX0w0~X~x<&q*3_7#nOjss4W2rSEg%^JrZk8pDcRRnqTa%;OMoMko7;X)E?FZ1`g@%i!!+@JSrB`Z#pW@K5ctB zKl68kSbz`U;JwHL#g$vV&EE*MB#=F3)(OkeQ)-2JVBINN@VXu)00pD-HP~BrVNIF0 zmIR(v-#ru}`_x6SX$o@4>;5<=aU)@pj@9xw20o~|^ZF$*xCL3{a~xi(!FByjd=5K_ zj67b8M77iEtc3Rd_SGtNQ9x~tzZ=?3ZM|M9$l#nQdoQM&8M8=iE&duWpzw8tD;)5? z|89h5%~^&{b@8^G2&qs)O)fC(gIiY6GX?P7LxwVZP|ky+vy7||K;~`qo5xWSD=Hck) zdZtaYKIU+b$1in?1v{l8{27hS!^=TRPA0Y#@Sp7;MhyJeTcDu8XLKAZplr|M^G9(e zT?@BMTFY6)9h5zx6o@x;L;0(?(M|xAclk8aCS#qUSF>enI_3rE(u$Spfj%%)R$^fh z{z{YB2oY?%Tng5`$k?DBQ^9vfyNi+480og9jVY?DXtjiiOsZvM{%3ZS!}8ndZQE_l4XHkkMyOzjNAWVk;SD6RndXRM^U1?6 z+nPWXkgcH&K3;hwt0BP#T18WpR2DCfwx79ZoW>m;((SL<;`MARL<|*g5T&Db)VYj- z6)D8J;sVM?b<3H)x^Nq3Bo5bAB9BiSiP%^xnKAoVtJKHE1%--j$;ZjMxF<0jd+6*G z4^G094Hv(*m8ww_A?4yd?tvr}9aJinIkvRqItU0q!6jTe)>;oTCy}iBUiPlGJ<0b@ zcje@)2Ua#ps2DC;VP7`G)%ai@dllERMJAMkE5wW8P??gSU}5=JY^ExNEg;rXMIV2@P{oXX#g zVU{Ciy7@8Vr*+VuX-(rcXtPyiU9|9kG7y!B9xEOC$3#7-bygIRybgU25tyvgT8q_@ytO=tpWs0N}P{QICViP+7)s2a&YFt?rH${O8tM`CYe>tqwWt2izhg2oyf=+BaF9e?S>Ypx8W!-wL;LC|{~%!6ZklWe-)vwh@Ae-W>Eq-5 zFEq7c)oTft=%Ag5{Vj_`gt;d&f8?VnM$4;Yd6ZpgqS~E|Q4@(6Ej3}w&0KNkf@O~W znRBdrwZ)4QYB}6d`?fkh7S!YC`}#zy#HfDFtIafp(9y0WoyD@-u^;E<`B7vr@@M(H z;}wV1_JJ9^zm|(zC)Af2IIIZx_7sH{v$)UKMq}qsY|$&`1Lp_a1>Nz%av%W9e)z*z>~t*{W!IGB?ow5dl0zs?^)_j7i;d-Wp-xzLl)W| zMR9kESF8T=iFI;#yWFAb80}38ta*g3Xx|rqa3hfeIJm0YJUe!%8&La)W`o!^bkHgc z52Le2`9(6H2*I{OV4x=AVwbOQuUH(%?438_B?Jh7fEBaF2-x)K3;O6N_dv(+O#Mku zP&in))s2WSy|*M7bsfq&lECAf?1<-IJFQ71P4S8BrI`{7$xv7TnHd;{i;F0~1z7El z5i;A9H*^mB)gKaSvIwz~w|xqa2st!Vj=)SL^|Clpoyrl_B~ry9EA~gW?2^~UDe0{1 zmiV+xY|LW97R5b`bIm~UBvek#mk1_{jg0e|@2jp`_lxj$j24)?IyvMGOtJG$<=D^@jv^!Dpr^*Y{y@kD5fGwCW~8NM?lnkYffcMY z`9FbHHL8ZNiS9$lwflZ4`~Z8l7o3@r7+O%M<>l3g>xtcVV&oK8vx8@c?;bVyfLyL7 zOK9GNzfIYLdvTTTV)SOt)xcz2J>|wI{Oo2W50fQ^)l81OXQV3y4lri%Ix^1bl}Gqx zg$JMGl@xVwwfom1N+fGn?rHf8=IYAquBj{C-C@OSnW2*uf6MZE znLFA{Wob6Cskmfd#^o9$hxYNfG!CzAEbjcyaiLtM!`f)QGA+RLGe*lV(Xk3SE7|*n zSUF8qU*=J0OxSm>YU(XB^i(%O$HX#-S}P8NRF7^@q18bWo^^gN(jPF|SNPwI_TW~r|pbaoCn*`mz2&`lYDwv42Nn66cHaeii zWSiDJiDSh2sMV-Ti#@7{R?SQQw$dBTY*553>aG+P;6Z-i;UA!oUlCbB?v=h{z?XLm zm+ck3*&$WJ+I+ypGan+`?hG8@JACNaszo*wfy1}ngoF2Am(Fy z%KhQhbtI{h$&~IOnUAo?3#)3+`FH_E;(%H2T6hfiMkEyQnHyXBb~C2&^QO*3{1p6R zGn!)!@%h<#f8pRpf0Y(U-&CxUZIclfa6+*J_ziIwj~`$u-BE;+;&HD`HzzDXNk!<| zJBkQ|6SnKg6q=IviO9Qr=Q%tmWJR#1hK4|~_cXK_iE^pAY%6lL4-yg;hufAmGSQY; zCT97z&7n04j#2lgOqK3e*%J&l%;7FuihrXTjWJtqh6Ky_&Ffnt+hFNz)sC z><0Ki!djmrCYv=RjGcy(TaLWIV>>>3zZVX00bO}_BDCyzci^CzL7%^fbcSirm|vC| zAkV#;df$z7RfzP0L!kizads#d=jlTm_<962ADQzR`g1ex+pX~ii=}Th2$(LX+)C{G z#qhTSyv@9K=2<#@pGt_fBX$Tg0fYTABUh&EuZ>&i=14rWoPh|_ZqxERB;+BJ16-R4 z+V!S1jhVA1$M_9ZoE9mDh&X#XcYQ#}UEtRC5GT77-zq51dDlOe=NPm12{}bDT$o-z=?H?IE_wfa?m4aoc7x{d zcXZSps4beu2FK71&Qg&uvL~2UDyT#)=~uS>;$(Nyo*=U*p%2-;Hm*fw*RC}eR*8ZD z`|Oa7^Kj|0+2AuQ1G#1Y#-t1XVA4Odu4*7>b-P%qjCOh!9}TgHfjV>K?{{1S;2Ji6 zIejw6DyCexW=EwLuF&m#oGI^lRxuy4Ck?KiI(B40L!-7Tg4o5isNyO&eNUtl--z_T zviww$FD0L_MM~uUv|Xp+(#!uM-JiQ0x23LV{B20E#HxZwHg|Gl{$#kg3#fQd*;(YRyk=wR{RE>?z!{xx?(VinJ zJFVw%;{QX}RRGnsEZgAj?iSqLf;$8V?h*(Ag1cLA5AGh^-QC@SySuypLvrtZ$-D1Y zouYPa4(yrUGt;tGcWbyE%=_ydHzGrszd(N2Jt5q*hbY%0T>2+oUg)#h-Wla}6{Y-W%kIVz#XFl&<26m}%qkTKaYT)8WlXkPj#5&*u&rwas5=PzG}eDyUtf5+}SV}KU%X) z7mv3K_gh36FX83xY02*q4w* z#;27-HoFn@QYT$+h_7LxVx)C=9W5~Qvg1QZT@r+Q#gr~*J@FTpQV?o-%u@4bCNFY) zQ1u%aU>f$n^I_a`X7)GviRRPxi>rpPa>IPck2YNI$=T(HM<+9{nGS2O%RmPUS-47S z@vYiYhT;3PF@3x@YxP~&CAN@;vaKLm>?mksHuuzXe17nwsEYH(U5mE)<|~+=^a|#q znJ3y1Eb*U}$I$ zzlLrq#ohU2rPZf#Gt7@RKOCVg4kX#`t~lMx9`9*i;+VT$oV7y5fIqw*YToqi&2V96`-f1dpEY#FATdl8+3o%Fm&kZ?m zGvW^1iH9+LBGS*=ni;5;iq$)smg0EX6RP2vdT^eXJsG9`dyTOGFL`^P?RvoVs-3mo zPOM1EsoO#6#KsaSK4LE;PvLmEyXSq&@*v|x*K%9~evkYnCxa2OS+MhTw+?A{k``97 zXKNy$epGkM&vZ~C>~T1Npn$qu(`7!j@H>_0eep=YXwc`icz-99+>fay7&K3(j9r+i zE+Jyx%|!IS2nY9g>>e8yi1Zf#V?)4|$eE3=8uSGSC8BwU^D?QfqapJh&HKo>tC73N z*m^9OLLGf(_CPg@n4entaF#1{SdNQ%eR5AwnmrU|e&ZVi*cuPG*$PZ# zel4sIuYn3=6b-x9B2HUz5u0C$S|{88NjP|}P0>b23-0|amF{Aq^LB)P@r_FB)kf2! z)9Iy)LK<7?+c9NOqxMyUjt5fik~07Wko}};A)gkn8?krB(eR_t z^~$!zu8fkm5=kv^Q7fvn^7wQn^(slOz>j9WRioPBb)XBEB|M<%q9H`bNDFso=n+ggA^^JOU{BlMl&rw-=?<#7SSE!?u!H(z zSUq!a%$#QtLd!47$w;pgA~4N*(6L_1K5$g>U{(g>Sf6`E?7%%{6QC)e?suP7YECkn zM(=kW=vD*@h#?(F`Lb*I)d!B)HlQ>z1~dW0I)TJRfLpys3H8Fdg4TrTJ@M{z$8Jm_Q$#O;wtlpMJ}EADeK<`x$7J z?JbTcCQa`Sp*v)?6Bt*gbCxjtXK1y0bSaJ`)IdwE2>nweO65QsK|}TDv&3fDDV!W} z+a~8jM>Z%ZEU*bPWL~0=v7yd(9dpY;}6clbE$=ziP+Hla>_JM zRg4DGNEy3$Xlvg$Sy?RXpOh;2cB-Gw;_Ah!^p5?IO5VA2Kdf?qZLB~K-t4UUTE)4v zS`*+wIXmubxhWEbvkfPB&J94zg&n3nTzux0r4!h|T_jh!j);1N_c(fqsqMh_wUdlA zCSyW2m@uqznnh8)(fyaBP9>&F8SbrfW2r`Udm(g)&vTL(4!2t%XYiwwlo_0Pb*$uD z_HR^;Lg0_9JhuqUdtss;)TJ~QwC$n-*2Uo0WJ_NpzFw$470&j=`)nof2~Yee&+My0 zQ)dR8X|VwF9&r^!%*3etXT4|^>9(ZN?Ei;bf|S8d6K zj2F!B`%VXNe3Y8?fZ&;cB^M)7EQd!tVemIG{bZ3;cuz4yRigp%p46hvnNY_;i_%}* zYrGj zxAV9LuK+iyj|qbs?}-k`uF6O8tg~k&%rK#E{3cMKAIpN?(3Dnffz96g)5h0!IlFS{ z5Wk_v_U6pgwN;9#E?V)hUJ;Zm;F^C2j?jEtb~|1^dUDvmagAeAavtn49}^59RWJJG z%aC2Nt_OA|E+$7phGB(gm$&KN1)9z@&SCoCnrzgIvvBOROjun4dOMMvq`s|1KWO%K zFz>)M}&WyRLjb$do_`P{x?N$?-R3{C7qe29JZ>MY+jCKiF(LrJjc=Xv=7w<48jpLS3w;i7&#^mcP1YC zN~wWS$04_5Zp6-PVP^aqWE^DL#I^^u2aHd1cogFncqP`LPJpgZ2d1PIcI%Lh3TFN} z=H}|mD-|ybL4i=CfsqcB?u`ppY-@5LXKl^sIH)8gsqzQ^?t)i{^F}eGH@-7z> z(?Zyh2A)X-IBYY{5FG9YP@rP#*AE08I@tCbm-#M>s`P9`6Vk0f`l9pLx#Tk471C+z zv*n{@&xU-Ruy>>rkz_q(@y+vo^dDcisM_F@&`)IyD!w3gCB|$EC8N~ zDGd`cy8iG8uwnt^#ClWxPse0mav4y$j|I5c48cclGk3 z=inO8ZwMiOE*T=eH!Je00@z(L+QvP*P_DKMgwEn-9Gl5Q&ByjU_!eZDG|+hnpnKiR zb6&^Enb5dgQ7dz(AFC=bxZnVYxt27h>vXg>%-X4>2bH8k zWteA-PTHBDG{SOScvqTBgI1z^W3!-YJ|;6sSeUl~*r3H#)ki79XEh**>9Vo#WfIB6 zP~Z6d3EOri;LD|xf2P&hass<9pCoI@!1RpNmue~nLxHY&O>y?Ar>^GoV$!Ts0F}-I zl6NFfwPzc_sCUB4YiDADsdnFAqbGAW45_Plrlh%=Sr`t2z4Aa!9gHb!8_%ZJL#<4O zI6h^Pzw>FBpq;IA%^6M{&+uA&3&0$s6dsZR|1gHY`Kp`>mjoEL-R@o5$24uguosUJgByWjPo3n^vq1ofM@iD57I9Mqt>4Ze8=a~3j2rmyOQ6kz$ zl;ddAT6Qjq#nh~zMoessp(dwmEbg#p&*za>=@VyS`NRMLp51q#x0>@#*OAn(yf&{9 zVb9Tr6l3-ylZ>z9BOTP7ynRk!B)+eNt&hO2tGgWlJqf5y;TZEKO{zI4s^ixjnqL1( z8+dM{3sB&NdjV1A|0knyAp^*0+!N+j|AD^#!NC3wHI6_67;qzOK9m1H)hOZ=V9_v^Zf8Tk3glsEamSbv@vP`e|S%@mQD|B-*27a%DL&+^poZ`AeQuPB}M z)l0%wH~q8c8=eopzP>(00%fiQz##CvH-*Dy5l^}dL?H*XvY#wRZ<~8Pr1^0W)4}v{ z__M`-JDvUtu8m0Oj;8WZP*F{2*Vosl*hKtdnN~#tPNQPbp6&mZ4xnyjTw6~lj#=>N z&`{M@!q3-M^1e-MsL{#3BlzUa(z}-OwRDVZc||FxAJeSq0?QMCWJPPGJ8&b5Q$O%v zNCKTa5ZIQMmeUwlBmQ(vH$+T+Ef*=QN<644Rv;cspckhvCKJ*B@NdV|fvc;lcNc2u z2L=YJN_dsYwC}}C;S(n z%PuE8()Esmw6&{A7A@@_&ld!F6~>b}tSb@Kuc8_2hx(8;(a&B-O(UzusRSritgIDm zvxUZ?BIjjMP+-~80F6;lU?recC_NpQ{eCK+&5(M)s-{Wvpzza}UIBHJex2waFXc4E z)BTQicz}UovA9Jil-XY8jUF&Q(a>KHP59B#EXw2y^6w;s*tM zOGghGAOp<8OvDpVBp`@p>o1M|21*mk%bM~1hu*9yMq`8eya_n=#dN%IUYl*$28R=O z()GEx*QLt!lQgw^bTA(^LyJKl@bzrS7dkn=&XcMViuI}*66#c}woO+K-7mvMoL$&Y z#HjQ*!agw9)jp;_6QwcHdX0>BHqt> zPPPWXmw*;54z1p$%@c}+YILa)`s0n^c>Eyyj72Y@iNIEtCjyZ0kddxFpjKzzt)O;t z{WP&5+kRZhlzb%0A*=z1({M3UQ@4g|M7RAfilFfaF18lFr21g?Mb3Co`3s8^L!+bK z&c)I?Ktt}(cZHwzg};YPmMFl5nR;N92U3?Y(L=z9id7xV{Z|JOOIFBTv5cuRBc6O$ z85wxRrL1t?0*s5FZIHFX07pXOVyr_LSfSB48PtAem`GY-5x<*$^Da0J5)!r_zFzSx zbCG`&@i8YUUb*(OLyf#Eld|HMiYd(DoB`lR7Ty+# ztxTzv&{hG{(zi`EMFZId&8X41bK!=f(qqxVM+P#<5WneYz(Ozq&XrB;IbLc+!o>}F zIB8vB!;4WdD3GcC_{zERDv<;*akcDrxKA6djK&SAzkE}11dSV-!o+rK#`T5o%){|B zf$o-jGDm{xK@7Odq`(((F%l2W3^4uHH!)>5)yMag5Bjw}eMv=8t7CkfUe1;cRNrMK zgm(!fDUi+$e6V3uxIw^tumUWe(UcYXOIr8p_4OVzUMGSW9l!Y?dWZ5K2h^AWr0IN> z#Ki%x-M*r*@T}}@UK77z&>vfCc= z7o4HQD?P_=w;HhM9>Ez)<2-fTf?qoj-|}L*VRx65XCPIto5(d+>Cz)_lD?%tUHaNc zMDsygUnng2r1HQxk~aS} zl%A~4xEiZQK&wQFi z^#PLx-N-x*NX?xtQf}-a_zdXJ?$5g@b1GphK7^a5>_7S#4{)-GMfxERc~blj=xjU7 zh-!&AKF|<__PZjty1iXc&D>Hsd3n>nL2R}aF%H6LGA{3W(`w$;=EGWJ9n-IR3FOXo z^-)+&N;*a<59UTuML^iR~|8+7Yzba}M2 zlP1KoDgUs;bhh#EVP_R6&I(aeBY`=Oy81EbEJ%C6sIsd1tU}T9fz}2=;0N3jB6Hh_ zl3g(kr}xGSueVeMZ=c+4dnY&%S5y9-+GjOoS7e>%M$ot~v^PAN7Hwsia~^}mNiSR@ z^!#5zzy_Tqpa2)@lmBb7D_Nh5?4}BDNh~G zYv^-?*xfM!xJGw&P;0HwXuRKqd!nevz${1GUvEw+jh)3asQ`C;P zP*j~h;Sh^rBWTEWkZ-ki>{@!GDgbT!jtJ*u7#S>^L$x7)p@<-4Bkeuy$&7JyHcJ(% zKO>{0g`dmuk8dn)3Jo_IPvFD0!Wh71R<59!&kY}*$jB66*v z+s0iWoqj?PUuU6gi%+*2SlHy`G10cl#tbAn!j3FmYsKjn|1qV z_{CQKmHs^udNefn1yTBAwkm0C5*@K{^jD)(q(Y%`ZIjEHN80H@#vSG@LsruDRDFW1 zrUqQQE6F4X)LS<&J{`Wz6b_nWEVmCN%3%d=p{gQ@TVD!FVoXTrrUQM|^;2+L?Ufi} z)9CCvxIrlqVC|@wmqpjbG-f`^PuXFzu?!U3WtLYD1Z$=0Bb$B7)(>1%oBocG6nwKW z{S2cSW8(~Rz^Z`n$Ta!l`&hsdVl?kMS{}DF98%o`YLc_$jmj=5;nEBIo$s9FyWxKta2a^iLi1zYR)paW($*J zAPaW+|Z&43~D5GAaZqcuh z(}K6T;`hJ2^_23xl`m=&DR)#Xg^8n*voF^~{kC&@OBKa_%a zE1-gch*Yq%=2(V z!G!7*Yo=bGH#q40c*F6jVmSu4D`l7p<4T)3;kOn#xd9fSe9S={`@CbR`+jfEi8hJX^2ic&@%Zq^@adLG|$R4{iaZW(1|5 z7nH0n&fMOx8;Y!{(#3|yP_$A=N}QeL^;pZ$;olGgCtdpPF4hhoOTP$Qi)LLCsm9%S z;XW*fXmKXVsQ{7^M%bo< zC4bXionX5H6e(HnvUiP4@#Bb_XT5!yZoIZK_LG>cd(l!254v=Nc7g+INI?bnQ@cLdWl zhQOH*3S#lY=LHzlqQl{tLo;GYm5(aK;xkgK=#|bA&1yv`w58yn5}Q%FflS2@rl_)E z>lSh{8iO7`3YGFRm5LW~$_J75fgee2$nEhsy(Q%m@BD9izp}IG+lgXV@IKuB|FgL*LgsHcC!dj3RDkYw9`md2P(X_vh^a3k_|^l=wRVZy<;$#J^oFp>+dqC4V!VImRNc$W$MrsJ&UHoqZ9mO#lB%*gu zzvdg0Qc_V~tkYHPEQsL*rs9*kkb5Jikoq}6^; z<{MjsYI=Eopol_I$Px|xBKK+cW2c|-E6q9XCr!HHHKfouVeSxFO$C;P&pIzlEKdE> zpExRfmXs&v1|OX_(GDcAi!`sLjigtMNqo}|i8fegPPDeWzym#Vv+Lc0B)3aD(8q6l zu(LxCr0cr1Pmc5*q&kj!XGn&My-f|uUYg@Z=xbwy##;?9TG-$^0TBOxmd;o^)UH^H z-C$QNjhIE@jhO^N&99IRKOht`QWmUb3g^z-vO87muS$76Ml4vEH-SNy+IttAofq9V zK^6$PL`{PX;(Xm3Vs*3bUn?#0{v`tw`HA-NMp~cYY}=~NW)`$-fr0sU?)5 z{44CGaWu&!5M)%=1?>>hrvLGZ0f8M&7~rjQ@2i*Rlb3-# z3Y~YCV?wm4U%wRI=e0GLZf%HQ2o*Ia3kc2RcldQA+xBOTm|^iP zLTl89d15OZ@?TrTDKPkgJIa(@VF1>0Cm%F#Y~HxRdgmE(K{wKc3aQ~3Edwk9{0nbp z;|+hANBUrwzf6O|0012%YVDHWlA` z5rLEW@VO#Ewyq*m9-yEP=W9Wq-9FId;YzM^b&eZ4LH=fAl1{-fW*StYXXH&0)G#Wp zDv4;nYz+Fc zVGuXyTX4KL(XgXYeZDOe)v@|felU|*wi;%Ct=R>L_g)^v#UP2`%3 zeb?U4tmX>yNVC7ZbbNbJN+%$7dAzUQbYk`%pH<<4akg@XXLn|Y6PE#uh>HyTW;iiS zq?ERM&3Y%Vzb&76_*NLTUZ7)|2n?a4d8D^&<{3eI!LBDGq27ouRlGvoWd4hvo~PM( zO$S>)C<2z(olIn0@#4m=L&Z7s`)j;#M5wRKOwZ)v?$>rjD?4@Y5J*-pp-D#byPiJ3 z>9;W~sAOI@Y>$_RmA~Q@ty5BpuZ%#Ue!X7-3;uLpdu}Ztu$fsoNKo*5y*^Ly%OL2U zP3Da=yE`yks)0C?F^mtS<6hn%AZOB3PPBbe1c6LNVd4-079uf<449R;xxC~9-Rk`+ z%36ZbT6jT&lB^zKwQyJ@UOEl>w`00;O!ooj6DdKAs0h!Gama+59=H*JI)_~XNl5H2 zWb5Y89dRBy;X|6eWU-C)j*b;i9Co+qN#7{Y)M|17VUA1EPk8RYwO6eAFWYe9@9mVQ z=deu@5Y@EJTNoQ`@Oxf%!*4e+`1lV!A>#p+Yb+mn{TOMUT2Uq!=)_S|;CubEw?kFf z(q|AF)+}BiyCMO}E7R>Q=pZ@3+n9 zqQ1iM406_4MWmW!ZkQS7!-rS_OD#{HX}F|vyA*YiZXxS_Y@Ro>`<;{Sq6RJCY-=j9 z#q9m(|9HZlpe0;h!%6HWJrFA|&o@X&yS-Bitwa{rCN{?$%Q?Z9uP<-Rc*V z)s;b&B#zz-XrSy{7$gz>G<*QlzO!pp!OI%B0f{w}MKR(#y`qwMTP%N`C&Mvn$PRsM zpx^|JyOQwQ>=@zEBhn_0XA6&Wx~y;=*+R4RIFs8;`x!-_WY4!QR=R`!rMkJCI_v!C zuQ3mX?Q7r7#mjKgJm$o46OKw67b^O!ZglMyp}+59Gf#clu&^v_N|dp&vM6eQ$sFpu zyR~`lVT~`BlZf{b(?$i$Qa$wzml2kkNAJRkb|?Ulr?b!HIoT;0;evCo?G(oCMWPha zL`?5d;CrhoCoqTx<=DTZwH+GVdSoRzd78>0VmESZ|1KvkGOwYb_h##4R!K&&J7lb3YcSYG@(2`!)SZ8Sjq)+G5FN7&DE`u^-)E@3mR6fR%uje8L*tnr zik@?_xoRs{q~7D1oOf=0)}4OP`a*ue-lxpU@8qwjmk3v<#XYU76;KL6e=o1dKM^lm3@<8-YvAS6Us zQ1EMSp}d>R^uk)Dy@8aDjm-a4`&J}0^{bZB z2?;ge@Jl*m05!$}&|Y1cwQsdOYKt?;`TXcB(rgNaLz13Qc`1jxPMC7JFX19Rse3jF zc+fra@857*kT%9-)uyyQ#xcdQTdnA-knTrg)aurAl^#XPZ15R|K9iC#I9&Bo%w9-+ zCxf>#E=KDj)4lT7uynjq6y}yuDujnbusX!RTeSt9LukI|7=RDAL`GfxVu$r{6`9qX zt3bA>^ZYIfx3^*mPGCQ&(6WIIE-U4-g)YLLcoUcFr^)db_yj;y(;*z3PTL`nC`#hq zNf(@iV6Cf*N779ys2%<+n~vuNC>}$NrUVmJ3%MJV-{a@Kj4Z(!N0h$Y5yM)YS7O{X zzM*uxJwbYSdn1;YS04}@X#udnPOJAPwm7OvO9_Y@?J&Ca*t-z!=`W$-y2~<<8OZt| z)&#t0mFXJZOA!Og!8~JUXY2Xr?qxnA%@=ati-^^9FqMFlijYziE7!O_XX*wEDt<2{ z9y2hF`|2Ex7Po4;Cz24%x4%CG2^mul8z5L06*iJxhzj5y1=#J77E=)l-(N+svP_Nw zs?SXBj0nMs8PE`Bs>rH2_(XM#Es3j?4w)9T)mNe+GiuHb;DQi$eA1E|E;-mA4kN*W zy1fmXGQS&*ih#cO$Cg#`Zfo-bkyBLMoXP-)#q^9KmvvSm^Zg04xR3yfb;LRN0N64h zX1;av^WdniQxxMF^lMKWE^_7#d0806YC!)D!TWlYnOgWI&w} z*c#vUF9+D0w>BhnQ`1K6+KO!$4uIP9m~NzR-oHX+NkQmGCFFyEy)geu7WiKUFxnbH z6FDz;m%J!KK}*1ac+PDs(}}pwr!eF7{|!;T-r>g}ZDY>RvfZdR{mmZv1rGlG^AsH5 z;WP_GF#Udl{km>|^#Xx_Hxq3Gn}zm=Ty)l6eEvfHNZ@VLDp#Z1hh&i~h9; zz;g4}z`rLt@97yHjt~=U))qqy&|h41fDv;aFI)W&fb_4STMh%_5{|>Qo_}`i{9PJe zVN$O+a-&1CQykd`Ux!pTT;7&&{mF7FA~|1a%Gd`7Xp?y!ECnl|YkX>xn~P1*--9CJ zZFoRY{h(;Oq%15yv{+x)g?Relt850%I58I0Afxd|qOv#F6zkPAOnE z)jtD)jKuD(T^ldaFwI_~d7)P%adyKA4B!GME<%PTGQ zZ!r92guVClSaaA~+L=#!t6NaSpPi3?iXf=?X|fleYLH5oNn>6_vT@KOeP52uZRj(f zkC+JIEE@1hnQ0~?6%V2NYs{fsm- z6ZiqBImdo1EP&$izrW5VL4LdlKq`QVi3t)i@;X`qs^F`aix=}IT-@PD%0|(v|HQ9tAMQ5wn!3}?@Ow}mld@znAMmkxKvh&ap$2N=)74I zXCos=@f+OuJT8HYyl0SSDS@mHlDc$vu%jW7)~u;b#DcwgbJM`&oFlc8$M4VDIVShL z$E)3+aGRIUX8rOlAw=&7lDAF8viCm&c=!z%9%0-;B5DQX7nF~-(NuAFhwrlD2CBh5 zrXKmix~U&frx=XX^0sJ1#l&!lCB58}G+0+< zTPr$5u=aM?4HwK5Z}gC~-LT>^8n53G{INBR6oApt(2Pt?zgw3}Qz`(OYV(T`@q_7$ z%~6h24nsxb&HK6QKSP+<&<-?rbxFiB+SC$RZ7w4#RVw!G9i3M) z>JRbU?p-Uu+Z6Lq0}3-UkbIy*?(#Xms?c zQ888Nf~JjKi488bSjONB-TqaW^?pG?I-WdT$s`RK(jv@CpaRc1pv%Y%RTinjxS@D$ z^5>rQ6dm>X0_;hTXOHUxv*Wd5&h!4^#-W!`_ zR)-w6<+XCz;ZzO_)=D0xzfewOvYhLvqNHpyp`_?B$Hh;eBKSa3ylVq_EIqm5bW1}a z2jX-!*U?FRa3LspXjr-Nc1=5|KYkGWTwuLSVtL^3Xvty5c^rRdc&NPKC$NT|F%6s) zN87#`O_IZ%exDdooXvm9ZZd<*DfzNrcrH{&C%%}sm>7uwjD7XYQoHphjif5s(;A-S zmumNn05oiNCI99rxk{rPBEwh_Ajz+NX6R_KkoG|*+3QnOwdvOVsMk4)c#s5hO|ToT zj%1^jWaEUHD)WMBGICN7NP$WE+48*&3sbmz$UO;G-n(Y>@@eRzxq2)ZNFbu;9H3{fiW+xD=t510$q;WPw+0J9SUfuA%*2wm{ zONu&eJLRwTrTc_>%&dk<65IM!BnmulE7faFT-Au>Iv?!la-)VjRFp3O>FWEJk40^U za~iB!1YNBoSUeozo0zp6y}XY?pf1nH@%tIH4+6gf-kJmjp-C%T2TPv9VICW2C zI#Bc95cFo*;tw6xdRTPyb0_HE|DbWUCoxxLdJE3ECy&SqLX9jYMMmH;suYqVax2zg z<#Oq!;1>Y1`DW;8Nv|mm3jvoaz@f&pcb=~$aGufW;gHPt$woe>CUNFp2318FV>*yMN=UcDhv4I zv{w)H)YDXqL>5W>6|3b2bTDgt;P$+zC0+foPy!7`KGKOe21D8{*@YfRYyJ3+YHLcT znfWEJTg8cd3MW@@X!uZjVS)d1P4;}gSHw79M5gAaEmyxKrQWH136xGmCPCN&>$utj zh8hpqCLB@`+Lv5L4*-Y=RV0bK>YQAlS`0+`MR#gKKUy!WBna4bNgCjD|T8wh_& z69Ra7d3m3Lg`oz-6dq6k4G?t(EdI5)0O%TOuO*M(_Drn!?{n3f?v6O%)P77|tCgc- z1BIZh{r9N7gNC|A(;azywBs=sN_M?)drKu>*x$t;mELW2T*xFnAOyF$=BuT(V3+Sn zMlmcFCu8jq_|55k92#5*n1cz`I%&L7X0@R^@hKInNW?EJ@3;;V8UdGdq!TuC1)A>lK&Eq!wy&>W@vGbV*1%tml z9bd4D3RRED*}7C%`|JV6=?H0^)u4B^S#a;#e~LaredKwp%_V|+Mi-)2X?tR7SYne z>j@`VG1s>yeEs!q-fJJMJZhol`GmGN@9J-?HsaUY*=OnD&tPKpgiH6t2bj>wdEP;f z`L5Nf+2AcWt#~^fgf0h5R_$`L0_hI<@#>Qw$f|5jqxWcTd4%g~uYaL&ye+*|*Y7f^ zYb7AommbfXR7p>B!6g$37fAcq+GBq4MvtV52WpC#eKc|ae zgDs_8tq-qL`lwbM5PD!p()3?@4!e*x_Z(TRmg@ zj2)l1$8UdX{vcMj z4aDuiKOc>EEEYtYx961c87RlP6rW73woSHjVYXg#F5=Me5QF!|_!BKV7M1~Tqtc)r zEYnSiQmx>ixIGDofPN3rG|T)UW|sSa*=m_w?70%NpT+~2Y*#{ae}MeMroP*NXwm3^ znDC+Ir=1qRPcd8ghc5%pi2AqQ2>QO|-tz~$d(`|eo2uIuiKSE_e7_rg|6I?fcxp6% zwKivjNQbzgZTT%N7)oQoDNsXO_k-uu>2_vsC(&a#V_vg^n%>XZXb5KX&OAD@z zY>Pb}u=%n6kN(q9g&8%4k-r-cHZTEgC3HV>mQjyJ*}SGEc=;(Q|=#-QGHW&&|~zjHPu1IQrb)13w~OUnC&iw^qCsQ2FQIRU3B; zKo^&mG92lZRa6|ND6O@Bp3zdnf)ZKk?K`EoMEzs&k$X}~d1bAEpT+oKFFX$5%BQrMeO-9vk+5vae2mHfGH zKWJ#c7$jBQG3(|ggT}m$*GrjLH*jfQ@|@y-F<=|s0U;oS)A5PPe0v>3qNJzB_aw=n zqkoU*pF6k!X#xVne=@3mffQpbz>;r`e-_W(J$~Kh$0u(_(*8BM^f^%FQtjf@_S*xU zmxejFIj`5RG++azw$F-Ee}R`D6J4kL)3JDc`YJf`hY?-HCXB+uLW^{CfX4*5%LNYT zU~V5`m;T@FG64cg33!!t0WDleiqUu;6~N*K6#9YC$H^!z<(?Id{Pl_NV^RrwgE!ip=-O{^=n(kX%?uPpMd|ws@u8NOPuP>Cv*K@9| zk55)QqnquYqkuh#UrQ^6tE!Qk9eg>Db+r!g8$5qNLtgF?^$#e29FnhoyO)fhr(d^B z#RtVGfRm{Od0H52-##Sp*LeQ5GQ`tOUe$xi|7@Q*1`j%eKHajwoj*hzfKl1UEMD~9+<2(`tG_kQ48ut44;~SuXWMyS3mV>9J zrnC$sf3X<>O()<&XhnO&{+azh7fUe!w?3T94qz1=0IUMQY8(R$Tu#c{>0crMLN)>h zvaqnIRx&d)Ls75%DO+1JVDqcUhHKOX2YYjK^L@`NJBS4b-7wLgG#DSxqz6npvd4=b zBIwbRuX219C7mR{ld>G0gTwui?KtUn6<`*L0&SI8W^+HI5dS?Xen^TD($5emz(3*E zV;N7KYTFx!H#`3@q<<~!-+s;r0OWJvIiuE?dcRBC)k`nZG0;q5asKwpnZ*2HfKC~z z?6Vc$rS$R6Y?;9Z_dq%QI0jnArZZ|KMxV=n&)dky6ItSS>uHTUef>QhTdtx06JLvO zM*l@=$5}1A-o?G?_hSlvgQy2iHq*J=Fl!o8Kc+)T7o?V_lXeraL7MKN-$M3>8zzVs_7M<*wNGwq@h^W~j_=@}p7*RQPhpw!`WkB82r zVpj$5cQvhSyf;N_dVEBjC5D=r$)D=IIiIHJs;vSCul#3${JJm`Zd+Km<@5pXVFP|& z4!8&4oEI~ue5qF#QYJ(vqN751m^yH0*yE|#=|M>?SOH2C)7+G0_ zEEYE?nG{N8yVLU{FE1j2F;1-B4G8W}|#dj{*tNh}_j1Py%1!o0_B_#S$@tYOgw)NaH?lQYqXVVxzqAG<~b)v;G z{Q>^`zH;Zo0B6ZU*pZ!731v%A$4V=?Xpf&hj|P z392XGZ?>aZ$g^`YvAw7ARFx+$+ZeAmlDf9C>DucQ4Li3;DDBD0ZuH-Ax7XD-7L2KJ zr&sN%b6~Xn2BYrkf$kr`+m~Zmas7I2OM#y2Ke~Qcz4nFNC<%2Woi6MV@y5i2Q=yX6 zpj+@b*h)sIk8YCB`H>GUZtUWgkDm5u6*EV7-f^h30sFaqqeNNSAduG6A zYznR8%zObb0OQ3rrq6UQEoz-XHLgQ2P)s{Hg6mKplS<()h2PS;Yt#Rt@9oG~&tj z8qjFceOu*<^eO(BZ1YcHRf|rfaY9`n1z#}h)Aoo|9=6Fvm6Hv)&P@QXk+tIqKiln%c7OZIemmYSW^O ze<*b`EMZk#y0$APVf?Yu&tMHo`a5{?OX2*bc6y1^myGAjS+dyBfvZ(YGbx_%9Ip_N z>3b3^ZEQNXZYt$$$|3DkO52-rvs%-#ZD5#Cz;BEMN|g`Si5qOG!}#U?_sIBxi-kS$ z0eLkQwB0{uraMlL3^3{3g7;zKKG6D!cw0++i@R@VP{x`c9L2^oSjmu*`J}u$)?!M& zMe{43{qIGzJM!9P5lgwXCtWnS}4mqz{;$f^~X$*Re6E>v0I4?dV|-;05nR; z^tfRJ!`1$WC`QRjX*CaGh>M9*mv}ae)eXBRnt4qL_&?>j^v$zHmoM^VlP&F(TuY_J(m@z26N?EtwXJzL#mw@iJsvqhD{C;@3lQBmn(2-w^xm+WM0rhd+g~%b75*cGc;Rj1y?qjT)j%r6YUgX8zzKCzu-6#C@2eD@I8(RiT z#LojT9-Sp1I;)CuB1s`4Kaq&vCIl#PsNjm9zo${o%L8I4**FGtuw{7Kaml#Lei)}( zHZ)zA_ibQsK8XDDh!DX^?%4?A!$o?5<>pc7Y!ffefkU#G!Qfa0#_KV?XbB9zlD23W zn&;{3sj`v^>3+49u%b%AC%&S}p>w8~Lkv}oQZYt*NwjHXZug1U{9c_8}yRzWQ4#GB7pnTTs=DM^AHuc3gmt-67^j z=m~4mK0aP=$0Tgma%Odv0En23+{#BWY8xS;oDeaX_a0NN@N+!2s!nEP9PxpYf>W8J zta{-adf7|%m4%sv!RpeIp4#X}$8$?1`sFx}zV~Bco=vi{HI3xip}1xI4k!-AQnFcL?5%yIXK~*I)sH zySqbhY24i{=+`;t-h1wQ@Ap;lN7F?Wd#|=0jAv79dhvGoX*qUDc};Cw`AkzKI$sxP+d8kr%2!|COQ-K@O;7tQRI*Tj zSHBJ!qR~U@luh*>M=b23{QF}|V3udkBP)hJy-4AeL@(F7yl$lVp=d545lrckqzbI; zi`)CaiGdHxm$QZ9;0JL6o_dgh8axyu^V*2!uM9awIK^EMc-FVnAq9OSW`6O;+F)#I z3^Qv2RS<8_V-5p}f4Ca&vpd*8YA6~`>n>-5gcarR9BK4RV`I91v?LLklw-uvTNwEU z83}Of2(M#8@KQ>6LDw|Yf()Q_h_X5C>47g*)PaC(onXs?S*E5b_Vz2jH#fj^Z~6r zinBh<=OaZC=Q#dgDR@BdC9;e5mE)T3#&T0h-Bl;yaA{mTd~fD&_yd|jSq_SN*>zg4 z_&e5>Hmcn9Sj)e>;)4CX$u>D1Xc`DOXPB*jwcYJSnF5|2yJZkU>78d0n09G}-QOBM`O2$t>(^!-R)sMU1tl zQG@pS0)H01&`;w};Cw(fmVR?1x4fx7jf*LC+`1gQ`&eWw6q#m)q}YtA6>G5E(l-G)C~j zvtAbn_!2Ud1HMNuJo-PBFtR4fN}Ga!!;cy#z8Yn@ z{Vo~3ql_Hwi4Xz~1{hQ;T0inYFh1KN111t9kf z%J-dfndY7VV5T+twdNrg$xv&3!~EL^J{j%05HMEZvHF9b?UFx^U&64IV5l5cpWw$| z#npdD*aeAPNPOdM7TYEDh}4oL`^DIH_>?lXi)l6$mX*Wb?hL2qxJ8z@FP7hncQTd* zqw6PSMJ02mS{3$%-U;d5K+lV%{peSks;TC7gU)7uFF!0ZJiwCC-fVuEyflP$i;*uP zrY|#S&+{>`e=%$^W2*QtStJDwNc&U7;2Jl&TIIZFG4`GFXlpSeN&*^DH(r7or?h-i zIXmLw%AK~rOJMIG*C~REiSE3UB*{#HW#x9Cr4K8pPaUS7ErnlL8BU9ny7|F(I7s?y z`3=#fd`aoQbu51+jt6_tUXRO=ZaW%6y^{k-RvYDFCQsm{A*_hwTSaM8ekSp8tj6Jh z5CH^^mVB1z5dU1Q7JLg;PFzHvN;jpF1Fv->CJk{Jn_I8L%_#&MNxvo4SqW$!T-TjmLvU;gZs4`ap`);h=d6B z&pux2F6(E~{%~M%ka=oG*{@lIdIbwZ5s4uyKe{hA-Br5T*nc>S(6{)Y%!*8t%&^+< zC4lUFfIwwx8WC0&Lfq?y6~0`MvxKG)%yY_F2~l zKnE%Qy@bQs!LiCh)h~Sko1l*=gg<;-{&5jQjG};kkP~kF=l(WIg-tb4RC|Brmi#(; z=zRp&h_r50IyRN|o|C}#;z8aTbzC`FweUCGFcD1O9_lO;x{Ua%kBgU=8gS2Nt}G`F z5EmM&EOb>$J7X$4i{q8MkI6=Z%L{SeqmXP0;Hs?lUHJJd{YvYaPm^rWl%5xjo= zrR<0ttMIQs#c9_6-cMx%A_R;-RgSAMoSCC`$#PM4O~Mm;ULJNYRxgAs|GgT2?*H$f zu3PjA|$T}Qs`>bv5=+lrmrMRLkfyLjJVJ7IU@hZf&!ee8_%<`HFZigRRwOc{Q(_HUV zuxa*5&p!K{(JjV;=QAj&SBjf{|2{lw-_@3aH*RSVfldtM5GN(REQzvLiW2Sc#iu=f z4Kg=h!pGKGo{auz3l5vS^bogv2}osxn16Z8{Euj3AqFW3r$+j2G^vf2_`D;|67gLE z6{=rKr1*0kGpH72ZYpE`yt8$^FFr@S&J^3e$bLS>uO0R7Nen}D8d{U_ zi9_?%y)OW5cBdHvZ<*IyM#=$x3h_0}hfyLO;Bz3%w!deT#8m2_wT&mWV4l@4LR0)3 zYiY zCV_ETxd*6579nXRYm^@?IvM^ zhY7G0V^YkRTXjK?1XvGuySM10ugz9z+KU-Cq>s-iu>FNh%0RDdl1zG9;FWkxQ4%4# z!^j;Q_+7I$&Xs)t2~pS)1mzR@b|I2j3d)t>*}Kf?(ld+7rG<6Vh|X4A5Jp`PW{9>TLv^4MfNd$%$9(5NZAF?z{-z3#fgYZD53LL%_!=S-#s zmyybsrsdq`Q#~0|MEE)e2p@S1osI>%ETYH-nb?>A&T{|WJy~e4i>?-euNC3;U%s-d zo7(gcgOQ9vDU|FNa&+sxn1%)}d~7n(YDzxzl;}$Kx!vsok^PEOdLH6u@=g0uy{iDe zO_a7KwSj5`qXhWui%(YJY;hg56I zdDi6jtyuTb)^<{qA}w63?R@3cl{+NTzp;!jf3SgP&JC`<3WUTh@P)PzLin&PohE0Z zgMn!a6L3@knsi~D$NS~ALBHRZrtqqx;`jE<^|j08+=~zq@|HrK(EAzhpzr|mkY}Li zH?XnytF8Y%kWU^n{DX|5x+U|`{$Zft%hM-C^K<7Vr(2z$whYoABJ8y03Tb3BKplsU zhB9ath>*{jzwj_X@-T>z6=TWBcK=+BAh%O1#eNWYJ(pA8I&&zUxFr6aL>N|Ie}ctLXwE!f@k&D@*jeN(lS^3uXV}|I?+4(O9so5Q?blSLhx0 zB=Fk3x*`e$o#_R`Zl{nM?dm5s_R8LhiBV7Kz)t5Z#{@lKkkf01C+TF0Mb$QZ+k~8F zOm4_O|45uQr|Ps_o(G-N)`|%~gZ;&xuuwUJ;zm7VL>e z8p{zEr@qMgeA;GHc||w;^ToFPkGD&jyi`a!^3<^Wt&&L^Rdj00;T?Rhj&ouKHmbTe z@3-2E4Y$THzrvocToR7v>6f9 zixb6V#k4yT#aE6s87^eZFpdo0@NVjUE{U3pCS_e+;7>rp!c`kGYCE$?QpNQ&Lf*K{ z1z!`ve<@+Cn5I@Y%;+kXPpa`3&%W_*0;bNY@n;>1ShYD+7)o z>C-WbqHR(+A!dlm0#b5_AwkN-Otw)@`?lS1mT@U5!Bq3ny`B*^3w7r6*?zC1lX1q3 zk=_Kqagj+>%^BYjrE(xn@@E7-Nj&4VCT-omVYjBdLJJ|@F>_k=cxV=CIig+S;KwuV1S4ieg8}gW3Mk}?ec8?@m{DJpVS0PV>*(5*V zC@A!QQj5qBxTgLI{fN|t`}viUENOa8@f)~cSEizRaX&=)MfI-R-^V5XyVkck5oLn{ zK%fgCfvOPI*mO)fGlW6q&Pcr}CNQ%I1Lp>_$?1}n)^vj7BFOeH>>z01)r@R_SAk|e zC2vC)m)06#x)S+IKz&EN8a2N&ktv6?E8$}ZqOhSzr(Ey{3=CZ~t$|I*$8~yuHYZg9 z^zo!4m@3q)b$bj8h>X|^@7kPl170HpjW5xP{pNmjPQ$^8GTRBB?;Yv2U(LAliQBxP z;C3$3+&$j~K|zTG=w5Lhmod?FH%AmsORP!v2+sEDPr+UZ0^sVkU=04BySW_lZqg7y zJi&lp_!Egk%(O%afdNr(8fLm->ieWb0NQiGIsex*Jfqi%_~I_M6M--eo=WtOJd2P^8vDuHT1P8*^v?lp7uWI`$)4 z?1WmyZjP~7TG-}t0GO+4JlaZK7NAaprC}TV@5>k#Dq5JZF#7{%Im?9$k5u<2ZP!A5 zMDp#e7gpm-B!XCBW*Z-sAm7XpTELJ1?Hjn^VxOOfk(3#?A)wIPSUEj7L?^pQXMGhm zq`VfQe@4SSuULn-AFuU4`5phNiGPVhAHdCu8|sJv z=_HSh_GO`<7m~Jy6Meh2)PKBedm%$UKY<2k>-iQ9b6DwAd{#AB+o#;FzO#!OSYsN;9( zT&y`wy_xz~o36rX?PUyHI3028rsJQ~Yv<ub}9 zm2P4!Idax2+3_9j#EF5WduKWys2_?I`}!|R(%)&qa+a{O9O2DeeUn!O+PZ#wu*~jm zQ;BY2;XqkALCTKuQ6i_bPT}8v3gGv-69wdr;R!++&1WsI;GobDV}qNhR)e`F?rl95 zdaQyYr)y5+CpvS|M;PN=%eD4^M`4BpPjh^))622HduHkpzPvK}H&o>iCPi!Cs!1qC z^8Uth(lyvFf&k9Z@iR9&i{cN*Ud+r*G0O(OQPE~6Sv$58&E(ZamLj{+Qux5aVU@wP3V1lBoe7Vw${*TjA~j2@83H4VnyHkPE>u0PwL&`q;t z&WHht+d?p%-YgKuRK>XGCJC1@*ygD_k4E$HgBLF0&YCwt_PAc@ zzjVAOx@Gl*7Vn$rN{AUWn)u$0RZwUSb(}}IXtY{*mD=DR(bkaTFu(Wj_F-uom7-=| z2bHQs-xbp($h1gu0TrIR_LM~C<|4LQRB$qn(PK0- zu~+@8n)aWk?CP|rkgG%7X�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

ye(Ax^l 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

V$t{dlA^NnnG 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 ?w_|YD4|14sbq98x5Nu3~nyq$kq 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
  • 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 B+@Syf diff --git a/dao/etc/dao.ucls b/dao/etc/dao.ucls index bf11f18b..0706837f 100644 --- a/dao/etc/dao.ucls +++ b/dao/etc/dao.ucls @@ -1,45 +1,71 @@ - - + + - - + + - - + + + + + + + + + - - + + + + + + + + + - - - - - - - - + + + + - + + + + + + + + + + + + + diff --git a/dao/pom.xml b/dao/pom.xml index 05ab2b22..44c215f2 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -47,6 +47,7 @@ com.h2database h2 + compile de.bechte.junit diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index 146fddcb..334c2b9b 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -20,31 +20,39 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; + +import javax.sql.DataSource; import org.apache.log4j.Logger; +import org.h2.jdbcx.JdbcDataSource; /** - * * Data Access Object (DAO) is an object that provides an abstract interface to some type of * database or other persistence mechanism. By mapping application calls to the persistence layer, * DAO provide some specific data operations without exposing details of the database. This * isolation supports the Single responsibility principle. It separates what data accesses the * application needs, in terms of domain-specific objects and data types (the public interface of * the DAO), from how these needs can be satisfied with a specific DBMS. - *

    - * With the DAO pattern, we can use various method calls to retrieve/add/delete/update data without - * directly interacting with the data. The below example demonstrates basic CRUD operations: select, - * add, update, and delete. + * + *

    With the DAO pattern, we can use various method calls to retrieve/add/delete/update data + * without directly interacting with the data source. The below example demonstrates basic CRUD + * operations: select, add, update, and delete. + * * */ public class App { - + private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; private static Logger log = Logger.getLogger(App.class); - + /** * Program entry point. * @@ -52,17 +60,54 @@ public class App { * @throws Exception if any error occurs. */ public static void main(final String[] args) throws Exception { - final CustomerDao customerDao = new InMemoryCustomerDao(); + final CustomerDao inMemoryDao = new InMemoryCustomerDao(); + performOperationsUsing(inMemoryDao); + + final DataSource dataSource = createDataSource(); + createSchema(dataSource); + final CustomerDao dbDao = new DbCustomerDao(dataSource); + performOperationsUsing(dbDao); + deleteSchema(dataSource); + } + + private static void deleteSchema(DataSource dataSource) throws SQLException { + try (Connection connection = dataSource.getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("DROP TABLE CUSTOMERS"); + } + } + + private static void createSchema(DataSource dataSource) throws SQLException { + try (Connection connection = dataSource.getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), " + + "LNAME VARCHAR(100))"); + } + } + + private static DataSource createDataSource() { + JdbcDataSource dataSource = new JdbcDataSource(); + dataSource.setURL(DB_URL); + return dataSource; + } + + private static void performOperationsUsing(final CustomerDao customerDao) throws Exception { addCustomers(customerDao); - log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); - log.info("customerDao.getCusterById(2): " + customerDao.getById(2)); + log.info("customerDao.getAllCustomers(): "); + try (Stream customerStream = customerDao.getAll()) { + customerStream.forEach((customer) -> log.info(customer)); + } + log.info("customerDao.getCustomerById(2): " + customerDao.getById(2)); final Customer customer = new Customer(4, "Dan", "Danson"); customerDao.add(customer); log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); customer.setFirstName("Daniel"); customer.setLastName("Danielson"); customerDao.update(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); + log.info("customerDao.getAllCustomers(): "); + try (Stream customerStream = customerDao.getAll()) { + customerStream.forEach((cust) -> log.info(cust)); + } customerDao.delete(customer); log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); } diff --git a/dao/src/main/java/com/iluwatar/dao/Customer.java b/dao/src/main/java/com/iluwatar/dao/Customer.java index 6d10fb14..d6b512dd 100644 --- a/dao/src/main/java/com/iluwatar/dao/Customer.java +++ b/dao/src/main/java/com/iluwatar/dao/Customer.java @@ -20,11 +20,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; /** - * - * Customer + * A customer POJO that represents the data that will be read from the data source. * */ public class Customer { @@ -34,7 +34,7 @@ public class Customer { private String lastName; /** - * Constructor + * Creates an instance of customer. */ public Customer(final int id, final String firstName, final String lastName) { this.id = id; @@ -73,12 +73,12 @@ public String toString() { } @Override - public boolean equals(final Object o) { + public boolean equals(final Object that) { boolean isEqual = false; - if (this == o) { + if (this == that) { isEqual = true; - } else if (o != null && getClass() == o.getClass()) { - final Customer customer = (Customer) o; + } else if (that != null && getClass() == that.getClass()) { + final Customer customer = (Customer) that; if (getId() == customer.getId()) { isEqual = true; } diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 545e46a5..5d6aa38f 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -20,12 +20,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import java.util.stream.Stream; /** - * * In an application the Data Access Object (DAO) is a part of Data access layer. It is an object * that provides an interface to some type of persistence mechanism. By mapping application calls * to the persistence layer, DAO provides some specific data operations without exposing details @@ -33,25 +33,25 @@ * data accesses the application needs, in terms of domain-specific objects and data types * (the public interface of the DAO), from how these needs can be satisfied with a specific DBMS, * database schema, etc. - *

    - * Any change in the way data is stored and retrieved will not change the client code as the client - * will be using interface and need not worry about exact source. + * + *

    Any change in the way data is stored and retrieved will not change the client code as the + * client will be using interface and need not worry about exact source. * * @see InMemoryCustomerDao - * @see DBCustomerDao + * @see DbCustomerDao */ public interface CustomerDao { /** - * @return all the customers as a stream. The stream may be lazily or eagerly evaluated based on the - * implementation. The stream must be closed after use. + * @return all the customers as a stream. The stream may be lazily or eagerly evaluated based + * on the implementation. The stream must be closed after use. * @throws Exception if any error occurs. */ Stream getAll() throws Exception; /** * @param id unique identifier of the customer. - * @return customer with unique identifier id is found, null otherwise. + * @return customer with unique identifier id if found, null otherwise. * @throws Exception if any error occurs. */ Customer getById(int id) throws Exception; diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java similarity index 71% rename from dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java rename to dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java index 950ecb1b..91279b99 100644 --- a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import java.sql.Connection; @@ -35,27 +36,39 @@ import javax.sql.DataSource; /** - * + * An implementation of {@link CustomerDao} that persists customers in RDBMS. * */ -public class DBCustomerDao implements CustomerDao { +public class DbCustomerDao implements CustomerDao { private final DataSource dataSource; - public DBCustomerDao(DataSource dataSource) { + /** + * Creates an instance of {@link DbCustomerDao} which uses provided dataSource + * to store and retrieve customer information. + * + * @param dataSource a non-null dataSource. + */ + public DbCustomerDao(DataSource dataSource) { this.dataSource = dataSource; } + /** + * @return a lazily populated stream of customers. Note the stream returned must be closed to + * free all the acquired resources. The stream keeps an open connection to the database till + * it is complete or is closed manually. + */ @Override public Stream getAll() throws Exception { - + Connection connection; try { connection = getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS"); ResultSet resultSet = statement.executeQuery(); - return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) { - + return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE, + Spliterator.ORDERED) { + @Override public boolean tryAdvance(Consumer action) { try { @@ -65,15 +78,15 @@ public boolean tryAdvance(Consumer action) { action.accept(createCustomer(resultSet)); return true; } catch (SQLException e) { - e.printStackTrace(); - return false; + throw new RuntimeException(e); } - }}, false).onClose(() -> mutedClose(connection)); + } + }, false).onClose(() -> mutedClose(connection)); } catch (SQLException e) { throw new Exception(e.getMessage(), e); } } - + private Connection getConnection() throws SQLException { return dataSource.getConnection(); } @@ -91,31 +104,40 @@ private Customer createCustomer(ResultSet resultSet) throws SQLException { resultSet.getString("FNAME"), resultSet.getString("LNAME")); } - + + /** + * {@inheritDoc} + */ @Override public Customer getById(int id) throws Exception { try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { - statement.setInt(1, id); - ResultSet resultSet = statement.executeQuery(); - if (resultSet.next()) { - return createCustomer(resultSet); - } else { - return null; - } + PreparedStatement statement = + connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { + + statement.setInt(1, id); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return createCustomer(resultSet); + } else { + return null; + } } catch (SQLException ex) { throw new Exception(ex.getMessage(), ex); } } + /** + * {@inheritDoc} + */ @Override public boolean add(Customer customer) throws Exception { if (getById(customer.getId()) != null) { return false; } - + try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("INSERT INTO CUSTOMERS VALUES (?,?,?)")) { + PreparedStatement statement = + connection.prepareStatement("INSERT INTO CUSTOMERS VALUES (?,?,?)")) { statement.setInt(1, customer.getId()); statement.setString(2, customer.getFirstName()); statement.setString(3, customer.getLastName()); @@ -126,10 +148,14 @@ public boolean add(Customer customer) throws Exception { } } + /** + * {@inheritDoc} + */ @Override public boolean update(Customer customer) throws Exception { try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { + PreparedStatement statement = + connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { statement.setString(1, customer.getFirstName()); statement.setString(2, customer.getLastName()); statement.setInt(3, customer.getId()); @@ -139,10 +165,14 @@ public boolean update(Customer customer) throws Exception { } } + /** + * {@inheritDoc} + */ @Override public boolean delete(Customer customer) throws Exception { try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { + PreparedStatement statement = + connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { statement.setInt(1, customer.getId()); return statement.executeUpdate() > 0; } catch (SQLException ex) { diff --git a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 62276d5c..63576b99 100644 --- a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import java.util.HashMap; diff --git a/dao/src/test/java/com/iluwatar/dao/AppTest.java b/dao/src/test/java/com/iluwatar/dao/AppTest.java index 08babc62..169fc046 100644 --- a/dao/src/test/java/com/iluwatar/dao/AppTest.java +++ b/dao/src/test/java/com/iluwatar/dao/AppTest.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import org.junit.Test; diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java index 600b5ba3..6a02fd6b 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java +++ b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import static org.junit.Assert.assertEquals; diff --git a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java similarity index 84% rename from dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java rename to dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java index 243d9b3a..470b3355 100644 --- a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java @@ -28,33 +28,51 @@ import de.bechte.junit.runners.context.HierarchicalContextRunner; +/** + * Tests {@link DbCustomerDao}. + */ @RunWith(HierarchicalContextRunner.class) -public class DBCustomerDaoTest { +public class DbCustomerDaoTest { private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; - private DBCustomerDao dao; + private DbCustomerDao dao; private Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + /** + * Creates customers schema. + * @throws SQLException if there is any error while creating schema. + */ @Before public void createSchema() throws SQLException { try (Connection connection = DriverManager.getConnection(DB_URL); Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), LNAME VARCHAR(100))"); + statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100)," + + " LNAME VARCHAR(100))"); } } + /** + * Represents the scenario where DB connectivity is present. + */ public class ConnectionSuccess { + /** + * Setup for connection success scenario. + * @throws Exception if any error occurs. + */ @Before public void setUp() throws Exception { JdbcDataSource dataSource = new JdbcDataSource(); dataSource.setURL(DB_URL); - dao = new DBCustomerDao(dataSource); + dao = new DbCustomerDao(dataSource); boolean result = dao.add(existingCustomer); assertTrue(result); } - public class NonExistantCustomer { + /** + * Represents the scenario when DAO operations are being performed on a non existing customer. + */ + public class NonExistingCustomer { @Test public void addingShouldResultInSuccess() throws Exception { @@ -97,6 +115,11 @@ public void retrieveShouldReturnNull() throws Exception { } } + /** + * Represents a scenario where DAO operations are being performed on an already existing + * customer. + * + */ public class ExistingCustomer { @Test @@ -135,14 +158,23 @@ public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdate } } - public class DBConnectivityIssue { + /** + * Represents a scenario where DB connectivity is not present due to network issue, or + * DB service unavailable. + * + */ + public class ConnectivityIssue { private static final String EXCEPTION_CAUSE = "Connection not available"; @Rule public ExpectedException exception = ExpectedException.none(); + /** + * setup a connection failure scenario. + * @throws SQLException if any error occurs. + */ @Before public void setUp() throws SQLException { - dao = new DBCustomerDao(mockedDatasource()); + dao = new DbCustomerDao(mockedDatasource()); exception.expect(Exception.class); exception.expectMessage(EXCEPTION_CAUSE); } @@ -186,6 +218,10 @@ public void retrievingAllCustomersReturnsAnEmptyStream() throws Exception { } + /** + * Delete customer schema for fresh setup per test. + * @throws SQLException if any error occurs. + */ @After public void deleteSchema() throws SQLException { try (Connection connection = DriverManager.getConnection(DB_URL); diff --git a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java index ca5180e9..49272728 100644 --- a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import static org.junit.Assert.assertEquals; @@ -36,6 +37,9 @@ import de.bechte.junit.runners.context.HierarchicalContextRunner; +/** + * Tests {@link InMemoryCustomerDao}. + */ @RunWith(HierarchicalContextRunner.class) public class InMemoryCustomerDaoTest { @@ -47,8 +51,12 @@ public void setUp() { dao = new InMemoryCustomerDao(); dao.add(CUSTOMER); } - - public class NonExistantCustomer { + + /** + * Represents the scenario when the DAO operations are being performed on a non existent + * customer. + */ + public class NonExistingCustomer { @Test public void addingShouldResultInSuccess() throws Exception { @@ -91,6 +99,10 @@ public void retrieveShouldReturnNull() throws Exception { } } + /** + * Represents the scenario when the DAO operations are being performed on an already existing + * customer. + */ public class ExistingCustomer { @Test From ddbc61b1401a1eb225204fc5a203108c4e1b4a0e Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Mon, 28 Mar 2016 11:55:22 +0530 Subject: [PATCH 5/6] Incorporated review changes - 1) Created sql file for central schema 2) Changed getById return type to Optional --- dao/src/main/java/com/iluwatar/dao/App.java | 5 ++-- .../java/com/iluwatar/dao/CustomerDao.java | 6 +++-- .../com/iluwatar/dao/CustomerSchemaSql.java | 9 +++++++ .../java/com/iluwatar/dao/DbCustomerDao.java | 9 ++++--- .../com/iluwatar/dao/InMemoryCustomerDao.java | 7 +++--- .../com/iluwatar/dao/DbCustomerDaoTest.java | 23 ++++++++--------- .../iluwatar/dao/InMemoryCustomerDaoTest.java | 25 +++++++++++++------ 7 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index 334c2b9b..a63289ae 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -73,15 +73,14 @@ public static void main(final String[] args) throws Exception { private static void deleteSchema(DataSource dataSource) throws SQLException { try (Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement()) { - statement.execute("DROP TABLE CUSTOMERS"); + statement.execute(CustomerSchemaSql.DELETE_SCHEMA_SQL); } } private static void createSchema(DataSource dataSource) throws SQLException { try (Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), " - + "LNAME VARCHAR(100))"); + statement.execute(CustomerSchemaSql.CREATE_SCHEMA_SQL); } } diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 5d6aa38f..059a9e9f 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -23,6 +23,7 @@ package com.iluwatar.dao; +import java.util.Optional; import java.util.stream.Stream; /** @@ -51,10 +52,11 @@ public interface CustomerDao { /** * @param id unique identifier of the customer. - * @return customer with unique identifier id if found, null otherwise. + * @return an optional with customer if a customer with unique identifier id + * exists, empty optional otherwise. * @throws Exception if any error occurs. */ - Customer getById(int id) throws Exception; + Optional getById(int id) throws Exception; /** * @param customer the customer to be added. diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java b/dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java new file mode 100644 index 00000000..05707fa0 --- /dev/null +++ b/dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java @@ -0,0 +1,9 @@ +package com.iluwatar.dao; + +public interface CustomerSchemaSql { + + String CREATE_SCHEMA_SQL = "CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), " + + "LNAME VARCHAR(100))"; + + String DELETE_SCHEMA_SQL = "DROP TABLE CUSTOMERS"; +} diff --git a/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java index 91279b99..622b5b1f 100644 --- a/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java @@ -27,6 +27,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Optional; import java.util.Spliterator; import java.util.Spliterators; import java.util.function.Consumer; @@ -109,7 +110,7 @@ private Customer createCustomer(ResultSet resultSet) throws SQLException { * {@inheritDoc} */ @Override - public Customer getById(int id) throws Exception { + public Optional getById(int id) throws Exception { try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { @@ -117,9 +118,9 @@ public Customer getById(int id) throws Exception { statement.setInt(1, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { - return createCustomer(resultSet); + return Optional.of(createCustomer(resultSet)); } else { - return null; + return Optional.empty(); } } catch (SQLException ex) { throw new Exception(ex.getMessage(), ex); @@ -131,7 +132,7 @@ public Customer getById(int id) throws Exception { */ @Override public boolean add(Customer customer) throws Exception { - if (getById(customer.getId()) != null) { + if (getById(customer.getId()).isPresent()) { return false; } diff --git a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 63576b99..15c63d1d 100644 --- a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.stream.Stream; /** @@ -46,13 +47,13 @@ public Stream getAll() { } @Override - public Customer getById(final int id) { - return idToCustomer.get(id); + public Optional getById(final int id) { + return Optional.ofNullable(idToCustomer.get(id)); } @Override public boolean add(final Customer customer) { - if (getById(customer.getId()) != null) { + if (getById(customer.getId()).isPresent()) { return false; } diff --git a/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java index 470b3355..08e61ebe 100644 --- a/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java @@ -46,8 +46,7 @@ public class DbCustomerDaoTest { public void createSchema() throws SQLException { try (Connection connection = DriverManager.getConnection(DB_URL); Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100)," - + " LNAME VARCHAR(100))"); + statement.execute(CustomerSchemaSql.CREATE_SCHEMA_SQL); } } @@ -85,7 +84,7 @@ public void addingShouldResultInSuccess() throws Exception { assertTrue(result); assertCustomerCountIs(2); - assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId()).get()); } @Test @@ -106,12 +105,12 @@ public void updationShouldBeFailureAndNotAffectExistingCustomers() throws Except boolean result = dao.update(customer); assertFalse(result); - assertNull(dao.getById(nonExistingId)); + assertFalse(dao.getById(nonExistingId).isPresent()); } @Test - public void retrieveShouldReturnNull() throws Exception { - assertNull(dao.getById(getNonExistingCustomerId())); + public void retrieveShouldReturnNoCustomer() throws Exception { + assertFalse(dao.getById(getNonExistingCustomerId()).isPresent()); } } @@ -130,7 +129,7 @@ public void addingShouldResultInFailureAndNotAffectExistingCustomers() throws Ex assertFalse(result); assertCustomerCountIs(1); - assertEquals(existingCustomer, dao.getById(existingCustomer.getId())); + assertEquals(existingCustomer, dao.getById(existingCustomer.getId()).get()); } @Test @@ -139,7 +138,7 @@ public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() throws Exc assertTrue(result); assertCustomerCountIs(0); - assertNull(dao.getById(existingCustomer.getId())); + assertFalse(dao.getById(existingCustomer.getId()).isPresent()); } @Test @@ -151,7 +150,7 @@ public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdate assertTrue(result); - final Customer cust = dao.getById(existingCustomer.getId()); + final Customer cust = dao.getById(existingCustomer.getId()).get(); assertEquals(newFirstname, cust.getFirstName()); assertEquals(newLastname, cust.getLastName()); } @@ -207,12 +206,12 @@ public void updatingACustomerFailsWithFeedbackToTheClient() throws Exception { } @Test - public void retrievingACustomerByIdReturnsNull() throws Exception { + public void retrievingACustomerByIdFailsWithExceptionAsFeedbackToClient() throws Exception { dao.getById(existingCustomer.getId()); } @Test - public void retrievingAllCustomersReturnsAnEmptyStream() throws Exception { + public void retrievingAllCustomersFailsWithExceptionAsFeedbackToClient() throws Exception { dao.getAll(); } @@ -226,7 +225,7 @@ public void retrievingAllCustomersReturnsAnEmptyStream() throws Exception { public void deleteSchema() throws SQLException { try (Connection connection = DriverManager.getConnection(DB_URL); Statement statement = connection.createStatement()) { - statement.execute("DROP TABLE CUSTOMERS"); + statement.execute(CustomerSchemaSql.DELETE_SCHEMA_SQL); } } diff --git a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java index 49272728..65a087b9 100644 --- a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java @@ -29,6 +29,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; +import java.util.Optional; import java.util.stream.Stream; import org.junit.Before; @@ -49,7 +50,7 @@ public class InMemoryCustomerDaoTest { @Before public void setUp() { dao = new InMemoryCustomerDao(); - dao.add(CUSTOMER); + assertTrue(dao.add(CUSTOMER)); } /** @@ -69,7 +70,7 @@ public void addingShouldResultInSuccess() throws Exception { assertTrue(result); assertCustomerCountIs(2); - assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId()).get()); } @Test @@ -90,12 +91,12 @@ public void updationShouldBeFailureAndNotAffectExistingCustomers() throws Except boolean result = dao.update(customer); assertFalse(result); - assertNull(dao.getById(nonExistingId)); + assertFalse(dao.getById(nonExistingId).isPresent()); } @Test - public void retrieveShouldReturnNull() throws Exception { - assertNull(dao.getById(getNonExistingCustomerId())); + public void retrieveShouldReturnNoCustomer() throws Exception { + assertFalse(dao.getById(getNonExistingCustomerId()).isPresent()); } } @@ -111,7 +112,7 @@ public void addingShouldResultInFailureAndNotAffectExistingCustomers() throws Ex assertFalse(result); assertCustomerCountIs(1); - assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId())); + assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId()).get()); } @Test @@ -120,7 +121,7 @@ public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() throws Exc assertTrue(result); assertCustomerCountIs(0); - assertNull(dao.getById(CUSTOMER.getId())); + assertFalse(dao.getById(CUSTOMER.getId()).isPresent()); } @Test @@ -132,10 +133,18 @@ public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdate assertTrue(result); - final Customer cust = dao.getById(CUSTOMER.getId()); + final Customer cust = dao.getById(CUSTOMER.getId()).get(); assertEquals(newFirstname, cust.getFirstName()); assertEquals(newLastname, cust.getLastName()); } + + @Test + public void retriveShouldReturnTheCustomer() { + Optional optionalCustomer = dao.getById(CUSTOMER.getId()); + + assertTrue(optionalCustomer.isPresent()); + assertEquals(CUSTOMER, optionalCustomer.get()); + } } /** From 464ae1690b3ae6c59480727b4bbd3f182e624080 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Mon, 28 Mar 2016 11:59:29 +0530 Subject: [PATCH 6/6] Updated pom --- dao/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dao/pom.xml b/dao/pom.xml index 44c215f2..05ab2b22 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -47,7 +47,6 @@ com.h2database h2 - compile de.bechte.junit