ࡱ> ?D<=> jbjbjVV | <<9bh* * mm8 \e|X(   ":#\C$0XXXXXXX$%[]6Xs$"""s$s$6Xmm  pKXa+a+a+s$pm8  Xa+s$Xa+a+JM &Y@$pK"WaX0XK_S%_DMM_|Rs$s$a+s$s$s$s$s$6X6X9((s$s$s$Xs$s$s$s$_s$s$s$s$s$s$s$s$s$* 3:   Author(s)Rahul Jain  HYPERLINK "http://rahuldausa.wordpress.com" http://rahuldausa.wordpress.com  HYPERLINK "http://rahuldausa.blogspot.com" http://rahuldausa.blogspot.com Contents  TOC \o "1-3" \h \z \u  HYPERLINK \l "_Toc298233614" 1. Introduction  PAGEREF _Toc298233614 \h 3  HYPERLINK \l "_Toc298233615" 2. Hibernate Architecture  PAGEREF _Toc298233615 \h 4  HYPERLINK \l "_Toc298233616" 3. Building a Simple Application Using Hibernate  PAGEREF _Toc298233616 \h 6  HYPERLINK \l "_Toc298233617" 4. Application Configuration hibernate.cfg.xml  PAGEREF _Toc298233617 \h 8  HYPERLINK \l "_Toc298233618" 5. Creating the POJO(Plain Old Java Objects)  PAGEREF _Toc298233618 \h 11  HYPERLINK \l "_Toc298233619" 6. Creating the DAO (Data Access Objects)  PAGEREF _Toc298233619 \h 12  HYPERLINK \l "_Toc298233620" 7. Testing the DAO functionality using JUnit Test  PAGEREF _Toc298233620 \h 14  HYPERLINK \l "_Toc298233621" 8. Conclusion  PAGEREF _Toc298233621 \h 16  HYPERLINK \l "_Toc298233622" 9. References  PAGEREF _Toc298233622 \h 16  HYPERLINK \l "_Toc298233623" 10. Glosssary  PAGEREF _Toc298233623 \h 16  Introduction Hibernate is an open source java based library used to work with relational databases. Hibernate is an Object/Relational Mapping (ORM) tool for Java environments. The term Object/Relational Mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema. It is a very powerful ORM solution built on top of JDBC (Java Database Connectivity) API. Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities. It can also significantly reduce development time otherwise spent with manual data handling in SQL and JDBC. Hibernate can be also configured to use a database connection pooling mechanism to improve the performance for database operation. In this connections are checked out from database and maintained in a pool and after every database operation is returned back to pool. These connections can be returned back to database after a certain period if idleness so other applications, if any would not go out of database connections. By default, hibernate uses an inbuilt connection poll, but for production based environment it is not suggested. Hibernate can be configured for Apache DBCP or C3P0, a more famous and reliable connection pooling APIs. Hibernate makes use of persistent objects called POJOs (Plain Old Java Objects) along with XML mapping documents for persisting objects into database. POJOs are a simple Java Object has getter and setter methods for an attribute. These objects works as a data carrier called as Data Transfer Object (DTO).They are used to carry data between different layers. The data is binded to method of these classes. Hibernate Architecture  Hibernate High level architecture (2.1) Below are some definitions of the objects depicted in the 2.1 diagram: SessionFactory (org.hibernate.SessionFactory) Session factory is a threadsafe, immutable cache of compiled mappings for a single database. A factory for Session and a client of ConnectionProvider, SessionFactory can hold an optional (second-level) cache of data that is reusable between transactions at a process, or cluster, level. Only single instance of session factory is required for an application, so it is based on a singleton pattern. SessionFactory object is loaded at the start of the application. Session (org.hibernate.Session) Session is a single-threaded, short-lived object representing a conversation between the application and the persistent store (database, xml). It wraps a JDBC connection and is a factory for Transaction. Session holds a mandatory first-level cache of persistent objects that are used when navigating the object graph or looking up objects by identifier. Persistent Objects and Collections These are short-lived, single threaded objects containing persistent state and business function. These can be ordinary JavaBeans/POJOs. They are associated with exactly one Session. Once the Session is closed, they will be detached and free to be used in any application layer (for example, directly as data transfer objects to and from presentation). Transient and Detached Objects and Collections Instances of persistent classes those are not currently associated with a Session. They may have been instantiated by the application and not yet persisted, or they may have been instantiated by a closed Session. Transaction (org.hibernate.Transaction) (Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. It abstracts the application from the underlying JDBC, JTA or CORBA transaction. A Session might span several Transactions in some cases. However, transaction demarcation, either using the underlying API or Transaction, is never optional. ConnectionProvider (org.hibernate.connection.ConnectionProvider) (Optional) It is a factory for, and a pool of, JDBC connections. It abstracts the application from underlying Datasource or DriverManager. It is not exposed to application, but it can be extended and/or implemented by the developer. TransactionFactory (org.hibernate.TransactionFactory) (Optional) It is a factory for Transaction instances. It is not exposed to the application, but it can be extended and/or implemented by the developer. Extension Interfaces Hibernate offers a range of optional extension interfaces you can implement to customize the behavior of your persistence layer. These can be check in the API documentation for further details. Instance States : An instance of persistent class can be in three different states; these states are defined in relation to a persistence context. The Hibernate Session object is the persistence context. The three different states are as follows: Transient The instance is not associated with any persistence context. It has no persistent identity or primary key value. Persistent The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and can have a corresponding row in the database. For a particular persistence context, Hibernate guarantees that persistent identity is equivalent to Java identity in relation to the in-memory location of the object. Detached The instance was once associated with persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and can have a corresponding row in the database. For detached instances, Hibernate does not guarantee the relationship between persistent identity and Java identity. Transaction Management : Transaction Management service provides the ability to the user to execute more than one database statement at a time. To start a new transaction session.beginTransaction() method should be invoked on a session object. If transaction is successfully executed it should be committed to persist the data in database by invoking transaction.commit() method. In case of any exception or failure, the transaction must be rolled back using transaction.rollback() to synchronize the database state, otherwise database will throw an exception as current transaction is aborted. Building a Simple Application Using Hibernate To build a simple application using hibernate, first we need to create a java project in eclipse or IDE in which you feel comfortable. After creation of a java project, add these below libraries to the projects build path. You can download the latest version of hibernate from  HYPERLINK "http://www.hibernate.org" www.hibernate.org, if you have not already got one. The version used in this tutorial is 3.0. You may find it easier to download the package containing all the dependencies so that you know that all the necessary jar files are present. Some of these libraries are used by hibernate at run time.  Now we need to create a User Details table in database to store users detail and a database dialect in hibernate configuration file to tell hibernate to use database queries as per the database. In this tutorial we are using PostgreSQL8.3 so org.hibernate.dialect.PostgreSQLDialect is used as database dialect in hibernate configuration file. If you are using database other than PostgreSQL you can refer the below table to find the appropriate dialects. In hibernate 3.3 only these below databases are supported by hibernate. RDBMSDialectDB2org.hibernate.dialect.DB2DialectDB2 AS/400org.hibernate.dialect.DB2400DialectDB2 OS390org.hibernate.dialect.DB2390DialectPostgreSQLorg.hibernate.dialect.PostgreSQLDialectMySQLorg.hibernate.dialect.MySQLDialectMySQL with InnoDBorg.hibernate.dialect.MySQLInnoDBDialectMySQL with MyISAMorg.hibernate.dialect.MySQLMyISAMDialectOracle (any version)org.hibernate.dialect.OracleDialectOracle 9iorg.hibernate.dialect.Oracle9iDialectOracle 10gorg.hibernate.dialect.Oracle10gDialectSybaseorg.hibernate.dialect.SybaseDialectSybase Anywhereorg.hibernate.dialect.SybaseAnywhereDialectMicrosoft SQL Serverorg.hibernate.dialect.SQLServerDialectSAP DBorg.hibernate.dialect.SAPDBDialectInformixorg.hibernate.dialect.InformixDialectHypersonicSQLorg.hibernate.dialect.HSQLDialectIngresorg.hibernate.dialect.IngresDialectProgressorg.hibernate.dialect.ProgressDialectMckoi SQLorg.hibernate.dialect.MckoiDialectInterbaseorg.hibernate.dialect.InterbaseDialectPointbaseorg.hibernate.dialect.PointbaseDialectFrontBaseorg.hibernate.dialect.FrontbaseDialectFirebirdorg.hibernate.dialect.FirebirdDialectCourtesy :  HYPERLINK "http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html" \l "configuration-optional-dialects" http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-optional-dialects Below is the SQL script for creating a User Details table in database. This below SQL script is according to PostGresSQL8.3.1, so if you are using a database other than PostgreSQL you need to write a similar one as per your database. User_Details.sql : We will use the below SQL query to create the table in the database. CREATE TABLE user_details ( user_id integer NOT NULL, user_name character varying(20), user_password character varying(20), CONSTRAINT "USER_pkey" PRIMARY KEY (user_id) )  HYPERLINK "http://developinjava.com/images/articles/spring1/image3.png"  Application Configuration hibernate.cfg.xml The hibernate.cfg.xml is a configuration file that is used for defining the database parameters such as database username, password, connection URL, database driver class, connection provider, and connection pool size. This also includes hibernate mapping files (hbm), a xml based hibernate mapping file that have mapping of database column to java attributes. Below is a sample hibernate configuration file. hibernate.cfg.xml jdbc:postgresql://127.0.0.1:5432/qc postgres postgres 10 org.postgresql.Driver org.hibernate.dialect.PostgreSQLDialect thread org.hibernate.transaction.JDBCTransactionFactory true These configurations are used by hibernate to build session factory i.e. creation of database connections. hibernate.connection.url : This is the database Connection URL signifies the database URL e.g. jdbc:postgresql://127.0.0.1:5432/qc hibernate.connection.username : database username e.g. postgres hibernate.connection.password : database password e.g. postgres hibernate.connection.pool_size : database connection pool size. It signifies that this number of connections will be checked out by application at the time of creation of session factory. hibernate.connection.driver_class : Database Driver class e.g. for PostgreSQL it is org.postgresql.Driver hibernate.dialect : Dialect to tell hibernate to do syntax conversion for database queries based on the database. e.g. org.hibernate.dialect.PostgreSQLDialect current_session_context_class : context in which current session need to be maintained. e.g. thread transaction.factory_class : transaction factory e.g. org.hibernate.transaction.JDBCTransactionFactory> show_sql : Should Hibernate show SQL for every database operation. Very good for debugging purpose. In production environment it should be tuned off. e.g. true/false mapping resource="com/hibernatetest/demo/User.hbm.xml" : Mapping of hbm files. User.hbm.xml Below is the description for above xml file. Class : name of the class (pojo) with package. Table : name of the database table Schema : name of the database schema. Optimistic-lock : It is a kind of locking mechanism but in real it does not lock any row or column in database. It signifies a kind of database row state checker, that tell if the row that is getting modified by current transaction is already updated by another transaction after its read from database. Lets we take an example to get it understand in more detail. Let say a user want to book an air ticket. On booking portal he found that only one ticket is available. He starts booking the ticket. In this duration an another user also came on the same web portal and he also start booking the ticket for same flight, in this case only one user would be able to book the ticket for booking as for one it would fail. Actually this issue started as when the first user is booking the ticket, but still system is allowing to book ticket for another user when only one ticket is left. This is called the dirty read. To overcome this kind of situation, hibernate use a versioning check so it can know that this record is already updated when other users is also trying to updating the same record at the same time. For this a field named as version is maintained in table. When user updates a record, it checks the version value in database with the getting updated record is same or not. If it is same, then it will allow updating the database and increment the version counter otherwise it will throw a stale record exception. As if in the duration of this process, some other user also read and try to update the same record, the version counter would be different than the database one. Generator : This is used to update the primary key. This tells hibernate to use which strategy to update the primary key. Mainly these below strategies are used to update the primary key. assigned : It signifies a user itself provide the value for primary key. This is not suggested to use in a cluster based application. increment : hibernate will increment the primary key automatically. sequence : A sequence defined in db can be used to auto increment the primary key. Property : attribute of pojo class, this is mapped to database column name. HibernateUtil.java : It is a java class that returns a session factory object that is used for getting the session(connection) object. package com.hibernatetest.demo; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /** * @author rjain6 */ public class HibernateUtil { private static SessionFactory sessionfactory = null; public static SessionFactory getSessionFactory() { Configuration cfg = new Configuration(); sessionfactory = cfg.configure("com/hibernatetest/demo/hibernate.cfg.xml").buildSessionFactory(); return sessionfactory; } } Creating the POJO(Plain Old Java Objects) Now for persisting data to the database, hibernate requires a Java bean (POJO) object to be passed. For this we are writing a Users pojo object having all getter and setter methods of attributes. These attributes will be work as carrier of data that will be stored in database. As these POJO Objects will travel across the network, these objects should implement the Serializable interface. package com.hibernatetest.demo; import java.io.Serializable; /** * This class is a POJO that works as a carrier of the * data and will be stored in database by hibernate. * @author rjain6 */ public class User implements Serializable { private int userId; private String userName; private String userPassword; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public String getUserPassword() { return userPassword; } public void setUserName(String userName) { this.userName = userName; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }  HYPERLINK "http://developinjava.com/images/articles/spring1/image6.png"  Creating the DAO (Data Access Objects) Since this is a very simple application, here only one DAO (Data Access object) is involved. This Dao class has methods to perform all the basic CRUD (Create, Read, Update, and Delete) functionalities. package com.hibernatetest.demo; import java.io.Serializable; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; /** * This is DAO class for performing database related functionalities. * @author rjain6 */ public class UserDAO { /** * Creating a user in the database */ public int createRecord(User user) { Transaction tx = null; Session session = HibernateUtil.getSessionFactory().openSession(); tx = session.beginTransaction(); Serializable s = session.save(user); tx.commit(); return ((Integer)s).intValue(); } /** * Updating a users details in the database */ public boolean updateRecord(User user) { boolean isSuccess = false; Transaction tx = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { tx = session.beginTransaction(); session.update(user); tx.commit(); isSuccess = true; } catch (HibernateException e) { isSuccess = false; } return isSuccess; } /** * Deleting the user from the database */ public boolean deleteRecord(User user) { boolean isSuccess = false; Transaction tx = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { tx = session.beginTransaction(); session.delete(user); tx.commit(); isSuccess = true; } catch (HibernateException e) { isSuccess = false; } return isSuccess; } /** * Retrieving All users details from the database */ public List retrieveAllRecord() { Transaction tx = null; Session session = HibernateUtil.getSessionFactory().openSession(); List ls = null; tx = session.beginTransaction(); Query q = session.createQuery("from User"); ls = q.list(); return ls; } /** * Retrieving All users names from the database */ public List retrieveAllUserName() { Transaction tx = null; Session session = HibernateUtil.getSessionFactory().openSession(); List ls = null; tx = session.beginTransaction(); //Native Query Query q = session.createSQLQuery("select user_name from User_Details"); ls = q.list(); return ls; } }  HYPERLINK "http://developinjava.com/images/articles/spring1/image7.png"  Testing the DAO functionality using JUnit Test The final stage in this simple tutorial is to create Junit test class to check the Session factory object and functionality of the data layer. The contents of the class are shown below. HibernateUtilTest.java : It is Test class for testing the working of session factory object. If Session factory object is not null, that means hibernate is able to get the database connection from DB. package com.hibernatetest.demo; import org.junit.Test; /** * This is a test class for chcecking is sessionfactory(database connection) is loaded by hibernate properly. * @author rjain6 */ public class HibernateUtilTest { /** * Test method for {@link com.hibernatetest.demo.HibernateUtil#getSessionFactory()}. */ @Test public void testGetSessionFactory() { System.out.println("session factory:" + HibernateUtil.getSessionFactory()); } } UserDAOTest.java : package com.hibernatetest.demo; import java.util.Collection; import java.util.List; import org.junit.Test; /** * This is test class having test methods to check the functionality of UserDAO class . * @author rjain6 */ public class UserDAOTest { @Test public void createRecordTest() { UserDAO userDAO = new UserDAO(); User user = new User(); user.setUserName("demo"); user.setUserPassword("demo"); int recordId = userDAO.createRecord(user); System.out.println("recordId:" + recordId); } @Test public void updateRecordTest() { UserDAO userDAO = new UserDAO(); User user = new User(); user.setUserId(2); user.setUserName("demo123"); user.setUserPassword("demo123"); boolean status = userDAO.updateRecord(user); System.out.println("status:" + status); } @Test public void deleteRecordTest() { UserDAO userDAO = new UserDAO(); User user = new User(); user.setUserId(3); boolean status = userDAO.deleteRecord(user); System.out.println("status:" + status); } @Test public void retrieveRecordTest() { UserDAO userDAO = new UserDAO(); List list = userDAO.retrieveAllRecord(); if (isNullSafe(list)) { for (int i = 0;i < list.size();i++) { System.out.println("UserName:" +((User)list.get(i)).getUserName()); System.out.println("UserPassord:" + ((User)list.get(i)).getUserPassword()); } } } @Test public void retrieveAllUserNameTest() { UserDAO userDAO = new UserDAO(); List ls = userDAO.retrieveAllUserName(); if (isNullSafe(ls)) { for (int i = 0;i < ls.size();i++) { System.out.println("UserName:" + ls.get(i)); } } } /** * @param ls * @return */ private boolean isNullSafe(Collection col) { if (col != null && col.size() > 0) return true; else return false; } }. Conclusion Hibernate is an ORM tool that is used to map the database structures to java objects at run time. Using a persistence framework like Hibernate allows developers to focus on writing business logic code instead of writing an accurate and good persistence layer which include writing the SQL Queries, JDBC Code , connection management etc. References https://www.hibernate.org/ http://docs.jboss.org/hibernate/core/3.3/reference/en/html/architecture.html Glosssary ORM : Obejct Relational Mapping SQL : Structural Query Language HQL : Hibernate Query Language POJO : Plain Old Java Objects JDBC : Java Database Connectivity API HBM : Hibernate Mapping  HYPERLINK "http://developinjava.com/images/articles/spring1/image11.png"      Hibernate Tutorial for Beginners Page  PAGE 2 of  NUMPAGES 16 Hibernate For Beginners  '(ؿ؅oW?/h ghMK6CJKHOJQJ^JaJmH sH /h ghlP86CJKHOJQJ^JaJmH sH *h ghMK56CJKHOJQJ^JaJ&h ghMK56CJOJQJ^JaJ$hW[56CJOJQJaJmH sH $ha56CJOJQJaJmH sH 0jh!F56CJOJQJUaJmHnHuh!F5CJaJmH sH hTZ5CJaJmH sH hr5CJaJmH sH      (y$o&`#$/Ifgd!F$$o&`#$/Ifa$gd!F\$gdTZ $\$a$gd(X\$gd\()VWX`wxyzͯw`L<%L-jh*kCJOJQJUaJmH sH h*kCJOJQJaJmH sH 'jh*kCJOJQJUaJmH sH ,hw56CJKHOJQJ^JaJmH sH 6h*khw0J56CJKHOJQJ^JaJmH sH 6h*kh*k0J56CJKHOJQJ^JaJmH sH ;jh*k56CJKHOJQJU^JaJmH sH ,h*k56CJKHOJQJ^JaJmH sH 5jh*k56CJKHOJQJU^JaJmH sH     ¯~~k]T]>k.hPph7O0JmHnHsH u*j1hPph7O0JUmHnHuh7OmHnHuhPph7O0JmHnHu$jhPph7O0JUmHnHujhd!Uhd!hr5CJaJmH sH .h PhMK56CJKHOJQJ^JmH sH $h*khwCJOJQJaJmH sH 'jh*kCJOJQJUaJmH sH (h*khw0JCJOJQJaJmH sH (h*kh*k0JCJOJQJaJmH sH @  _ xpppngggggg V' \$gd\kd$$Ifl0,"LL t 6`o0644 layt!F     : ; < = > ? @ A B ^ _ ` a c d z { | ;ͬ;虋l;Z;虋#jh7OUmHnHu*j+hPph7O0JUmHnHuh7OmHnHuhPph7O0JmHnHu$jhPph7O0JUmHnHu#jh7OUmHnHujh7OUmHnHuh7OmHnHuhPph7O0JmHnHsH u-h7O56CJOJQJ\]aJmHnHu!     - . / 0 2 3 ` a b | ǰǥװvmvWǰǥ*jhPph7O0JUmHnHuh7OmHnHuhPph7O0JmHnHu#jh7OUmHnHujh7OUmHnHuh7OmHnHu-h7O56CJOJQJ\]aJmHnHuhPph7O0JmHnHsH u$jhPph7O0JUmHnHu*j%hPph7O0JUmHnHu| } ~    |llZ#jh7OUmHnHuhPph7O0JmHnHsH u*jhPph7O0JUmHnHuh7OmHnHuhPph7O0JmHnHu-h7O56CJOJQJ\]aJmHnHu$jhPph7O0JUmHnHuh7OmHnHujh7OUmHnHu#jh7OUmHnHu     < = > X Y Z \ ] ^ _ ` a } ~  ǰǥװvmvWǰǥ*j hPph7O0JUmHnHuh7OmHnHuhPph7O0JmHnHu#jh7OUmHnHujh7OUmHnHuh7OmHnHu-h7O56CJOJQJ\]aJmHnHuhPph7O0JmHnHsH u$jhPph7O0JUmHnHu*jhPph7O0JUmHnHu      " # $ % & ' C D |llZ#j h7OUmHnHuhPph7O0JmHnHsH u*j hPph7O0JUmHnHuh7OmHnHuhPph7O0JmHnHu-h7O56CJOJQJ\]aJmHnHu$jhPph7O0JUmHnHuh7OmHnHujh7OUmHnHu#jh7OUmHnHu_ % v ^gdOdgdOd & Fgds\$gd=\$gdZR\$gdTZ V'  V' D E F H I S T U o p q s t u v w x ǰǥװvmvWǰǥ*j hPph7O0JUmHnHuh7OmHnHuhPph7O0JmHnHu#j~ h7OUmHnHujh7OUmHnHuh7OmHnHu-h7O56CJOJQJ\]aJmHnHuhPph7O0JmHnHsH u$jhPph7O0JUmHnHu*j hPph7O0JUmHnHu z|3789:Mxpe^Z^VRNRJRC^N hTdhhD*?h=hhOdh96p hTdhOdhTdhOdmH sH hZzmH sH h\hZzmH sH h5CJaJmH sH hE r5CJaJmH sH hd!jhd!U-h7O56CJOJQJ\]aJmHnHu$jhPph7O0JUmHnHuh7OmHnHujh7OUmHnHu#jx h7OUmHnHu9:YVv^`e & FgdTZ  u!^gd1 & Fgd1 & FgdZD & Fgd K$a$gd MgdTZ & Fgds^gdOdh^hgdOdMbcoq  Pjk   3VYi̺xtxhh%hD0J!5>*hf}? h%hz"hUoh4mHnHuh0D<mHnHuhUomHnHuh MhUo5mHnHuh MhZz5mHnHu#j h Mhz"5UmHnHuh9th9tmH sH hz"mH sH hr hi[h= hTdhOdhz1h= hTdh= i ,UV_tuv5@BI]^_`novƳƳƳƯƫƳƳޢޢԞƳƳƞƞƚކzh%h=0J!5>*h=0J!5>* h%h/Ih1hDhVghZD0J!5>*hTZh%$h%hD0J"CJOJQJ^JaJ h%hD h%h%h%hD5>*h%hD0J!5>**h%hD0J"5>*CJOJQJ^JaJ0vwy[berJQep&'(3:<LN&FGHSUZgrwڼڼڼڼڼڢڞڼڼښڼڊh%hD0J#5>*hM whRh h**h%hD0J"5>*CJOJQJ^JaJ$h%hD0J"CJOJQJ^JaJh!{ h%h{ h%hDh%hD5>*h/I0J!5>*h%hD0J!5>*4e(H/ : !!""" & F gdm & F gdD & F gd`T & F gdm & F gd`Tgd`TgdD^gdD & Fgd K & Fgd Kw 8K[b. / 9 : !!!!!!!"""""""~z~slse hD5>* hm5>* hOT5>*h{ h%h{hmhm0J!h%hD5h%hD0J!5 h%hmhmhD5hmhD0J!5 h%h`ThD$h%hD0J"CJOJQJ^JaJh%hD0J#hn h%h=h%hD5>* h%hDhw~$""""""##f$g$@%A%o%''())) $Ifgd7:`gd7:`gd2M & FgdRgdgdD""v#~########F$Z$b$c$e$f$n$o$u$$$$$$$$$$$$$%>%ӿ{wso]oYUh0>h #h h(5CJOJQJ^JaJh(h#h+hhy hh[&hi[h=5>*CJOJQJ^JaJh=5CJOJQJ^JaJ#hi[h=5CJOJQJ^JaJ&hxh=5>*CJOJQJ^JaJh=hMv#hk2h?*g5CJOJQJ^JaJh?*ghc+h[ h[5>*!>%?%@%L%M%S%T%_%`%e%f%n%o%%%%%%%%%!&O&v&&&&&&&&&&&&&&&&' ' '''ǿǷǯǧǓLjǓ{ǧǧǧshomH sH hVYhUW0JmH sH h@PhUWmH sH jhUWUmH sH h@PmH sH hZzmH sH hk*mH sH hR(mH sH h"~mH sH hUWmH sH hp?OmH sH hT@NhZzmH sH hIYmH sH hDhDmH sH h[h0>h+'''''( ( (((((1))))))*****M*N*O*Y*|*}*~**Լ|eLe|eLe|eLe|e0h7:h7:CJOJQJ^JaJmH @nH @sH @tH @,h7:h7:CJOJQJaJmH @nH @sH @tH @$h7:h7:CJaJmH @nH @sH @tH @;h7:h7:5B*CJOJQJ\aJmH @nH @phsH @tH @hIh=CJOJQJaJh=mH sH hmH sH h4RmH sH h7:mH sH h@PmH sH j%h@PUmH sH hZzmH sH h|mH sH )))*^UU $Ifgd7:kd$$If40 %&BB  tJ]uJ]u0&62H2 x4BapJ]uJ]uyt7:****N*zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:N*O*Y*}*zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:}*~***zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:*********+++*+R+S+T+i+++++++++++++,,,.,Y,Z,[,p,,,,,,,,,,,,-"-#-$-+-N-O-P-Y-~------------....B.C.нннннннннннннннннн$h7:h7:CJaJmH @nH @sH @tH @,h7:h7:CJOJQJaJmH @nH @sH @tH @0h7:h7:CJOJQJ^JaJmH @nH @sH @tH @J****zqq $Ifgd7:kdM$$If0 %&BB t0&62$2 x4Bayt7:***+zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:++*+S+zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:S+T+i++zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:++++zqq $Ifgd7:kda$$If0 %&BB t0&62$2 x4Bayt7:++++zqq $Ifgd7:kd&$$If0 %&BB t0&62$2 x4Bayt7:+++,zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:,,.,Z,zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:Z,[,p,,zqq $Ifgd7:kdu$$If0 %&BB t0&62$2 x4Bayt7:,,,,zqq $Ifgd7:kd:$$If0 %&BB t0&62$2 x4Bayt7:,,,,zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:,,-#-zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:#-$-+-O-zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:O-P-Y--zqq $Ifgd7:kdN$$If0 %&BB t0&62$2 x4Bayt7:----zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:----zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:---.zqq $Ifgd7:kd$$If0 %&BB t0&62$2 x4Bayt7:...C.zqq $Ifgd7:kdb$$If0 %&BB t0&62$2 x4Bayt7:C.D.M.s.zqq $Ifgd7:kd'$$If0 %&BB t0&62$2 x4Bayt7:C.D.M.r.s.t.|.}.~... / ///////////ֽxk\OHDH@H9 hi=h=hi=h= hi=hoho5CJOJQJaJh,Vh7:CJaJmH sH h,Vh,V0JCJaJh,Vh,VCJaJjh,Vh,VCJUaJh,VCJaJmH sH h,Vh,VCJaJmH sH h,Vh,V5CJaJmH sH 0h7:h7:CJOJQJ^JaJmH @nH @sH @tH @,h7:h7:CJOJQJaJmH @nH @sH @tH @$h7:h7:CJaJmH @nH @sH @tH @s.t.//l0m00000!1H1w1zqllllllllllgdD`gd7:kd$$If0 %&BB t0&62$2 x4Bayt7: //+050U0j0k0l0m0s0~000000000000y1z11111Ե|p|d\d\Qh4h4mH sH hZzmH sH jhZzUmH sH hoCJOJQJaJhDhDCJOJQJaJhchDCJOJQJaJhoCJOJQJaJhchoCJOJQJaJhLhoCJOJQJaJhDho5CJOJQJaJho5CJOJQJaJhD5CJOJQJaJ hi=ho hi=h=h=w1y111]33333$4j444475|556j667B7777 $IfgdI $IfgdD & FgdRgdZzgdD11"2H2I2S2T2[2d2222222\3]3333[7h777777788սznzf[S[S[ShmH sH hhmH sH hDCJaJhaCJOJQJaJhIhDCJOJQJaJhh45>*mH sH hhNL_5>*mH sH h/S"mH sH h4mH sH h=mH sH hf*mH sH homH sH hmH sH hfmH sH hv&mH sH h1mH sH hImH sH h)hZzmH sH 7788899D::H;;U<<~yqqqqqqqqqq & F gdgdZzkd$$If>'Z)  0Z)634` aMbp yt 828y8888888888899999;9]9999::.:C:D:U::::;<;@;A;H;a;x;|;};;;;;<E<J<ȸȬ㬝ȸ㬝ȸȸ㑝ȸȸㅝyyԸyyyhwCJOJQJaJh ACJOJQJaJh!CJOJQJaJhhCJOJQJaJhBCJOJQJaJhh5CJOJQJaJhCJOJQJaJhIhCJOJQJaJh=CJOJQJaJhh=5CJOJQJaJ/J<N<T<U<x<<<<<<<<<<<<ʾ٣xfXF4#hLB*CJOJQJ^JaJph#hLB* CJOJQJ^JaJphhLCJOJQJ^JaJ#hLB*CJOJQJ^JaJph?#hLB* CJOJQJ^JaJphhL5>*mH sH hh5>*mH sH hh mCJOJQJaJh/BCJOJQJaJhq3CJOJQJaJhhCJOJQJaJhCJOJQJaJho CJOJQJaJhIhCJOJQJaJ<<<<)=g={==>4>W>_>>>>>!?/?9?N?|??aAC & F gdW & F gd=gdT7kgdL 7$8$H$gdLgdZz^gd m<<<<<<<<<<<<<<<(=)=e=f=g=h=y=z={=|=}===========ʸܦܦ܂ܦpܦܸʸ[ʸ)ha6B*CJOJQJ]^JaJph*#hLB*CJOJQJ^JaJph?_#hLB*CJOJQJ^JaJph#hLB*CJOJQJ^JaJph?#hLB* CJOJQJ^JaJph#hLB*CJOJQJ^JaJph#hLB* CJOJQJ^JaJphhLCJOJQJ^JaJ)hL6B*CJOJQJ]^JaJph*#======================>>>>>>>#>$>->.>0>3>4>7>8>A>B>G>H>S>T>V>W>Y>[>]>^>_>a>b>j>k>o>p>z>{>ʸʸܸʸʸܸʸܦܸʸܦܸܸʸ#hLB*CJOJQJ^JaJph?#hLB* CJOJQJ^JaJph#hLB*CJOJQJ^JaJph#hLB* CJOJQJ^JaJphhLCJOJQJ^JaJ)hL6B*CJOJQJ]^JaJph*:{>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>???????? ?!?#?%?-?.?/?0?2?ƴ۴ƦƦ۴۴Ʀƴ۴ƦƦ۴۴#hLB*CJOJQJ^JaJph?hLCJOJQJ^JaJ#hLB* CJOJQJ^JaJph)hL6B*CJOJQJ]^JaJph*#hLB*CJOJQJ^JaJph#hLB* CJOJQJ^JaJph:2?7?8?9?;?L?M?N?z?{?|????????????????@ @@@b@d@2A3AWAۻwohdhdh]Y]h h; hT7kh= h; h=h'h=5h{CCJOJQJ^JaJ hWhT7kCJOJQJ^JaJ hWhT7k hT7kh=h'hT7k5h,hT7k hT7khT7k#h -B* CJOJQJ^JaJphhLCJOJQJ^JaJ#hLB* CJOJQJ^JaJph#hLB*CJOJQJ^JaJph?"WA`AaA~AAAABBNB^B|BBBBBBBBBBB CCCCDD!D9DKDDDDDDEE$ESEsEtEEEEEEEEEEE&FüüühEhSh'h),hfh5Mhh6hu[= h; h= h; hb{hJhOhO+hwh]3hP; h; hs6hg}hhbhH h; hT7k h; hW3CLD(FFFkGGHPHHHHHHIGIHIIIMI_IcI~IIII 7$8$H$gd -gdb{gdXR & FgdIzgdIz & F gd% & F gdb{&F'F(F1F]FuFFFiGjGkGvGwGGGGGGHH HOHPHbHeHùòáÓx`K)h -5B* CJOJQJ\^JaJphU/h -h ->*B* CJOJQJ\^JaJphUhAhXR\hAhA\hAhA5>*\hXRhIz5B* \phUhXRh5\ hXRhS hXRhhXRhIz5\ hXRhh= hXRh= hXRhIzhAhIz5>*hb{5B* \phUhJhb{5B* \phUeHHHHHHHIII%IFIMINIOIPIWIXI_I`IcIiIjIoIpI~IIIIIIIIIIIIIIIII°¢¢¢{¢¢¢¢i¢¢#h -B* CJOJQJ^JaJph)h -5B*CJOJQJ\^JaJph#h -B*CJOJQJ^JaJph?_h -CJOJQJ^JaJ#haB*CJOJQJ^JaJph#h -B*CJOJQJ^JaJph)h -5B* CJOJQJ\^JaJphU,hth -B*CJOJQJ\^JaJph)IIII(JJJJJJJlLLLLLLLLL M2M6M`MbMcM 7$8$H$gd+, $`a$gdF & FgdR 7$8$H$gd -IIIIIIIJJ'J(J0J>JOJTJaJyJJJJJJJJJJJJJJJJJ K K Kʉ~vnf^fh mH sH hazmH sH h,MmH sH hZzmH sH hhZzmH sH he2zhe2zmH sH #haB*CJOJQJ^JaJph*#h -B*CJOJQJ^JaJph*#h -B* CJOJQJ^JaJphh -CJOJQJ^JaJ)h -5B* CJOJQJ\^JaJphU#h -B*CJOJQJ^JaJph# KKKK"K-K1K2KKKK1L>LTL`LaLkLlLsLxLLLLLLLLMƾඡ}oo]K#hBJB*CJOJQJ^JaJph?_#h+,B*CJOJQJ^JaJph?_h+,CJOJQJ^JaJ#haB*CJOJQJ^JaJph#h+,B*CJOJQJ^JaJph)h+,5B* CJOJQJ\^JaJphUhZzmH sH hmH sH #hB*CJOJQJ^JaJphh-MmH sH h;;mH sH hurmH sH hazmH sH hmH sH M M!M"M#M*M+M1M2M3M5M6M*B*CJOJQJ^JaJph)h+,5B* CJOJQJ\^JaJphUh+,CJOJQJ^JaJ)h+,5B*CJOJQJ\^JaJph#h+,B*CJOJQJ^JaJph?_#h+,B*CJOJQJ^JaJphhBJCJOJQJ^JaJ,cM{MMMMMMMMMN%NCNINJNjNpNNNNNNNNN OO3O9O 7$8$H$gd+,MMMMMMMMMMMMMMMMNNNNNNN$N%N-N1N2N8NBNCNHNJNNNTNiNjNoNpNxN~NNNNNNNNNNNNNNNNNNNNNNNNN O OOOOOO&O#h+,B* CJOJQJ^JaJphh+,CJOJQJ^JaJ)h+,5B* CJOJQJ\^JaJphU#h+,B*CJOJQJ^JaJphH&O2O3O8O:O>ODOEOIOnOoOtOuO}OOOOOOOOOOOOOOPPPPxPPPPPP~vnfnhGuZmH sH h8V1mH sH h.'mH sH hhZzmH sH h=mH sH h4h=mH sH hZzmH sH jhZzUmH sH h+,mH sH #h+,B* CJOJQJ^JaJph)h+,5B* CJOJQJ\^JaJphUh+,CJOJQJ^JaJ#h+,B*CJOJQJ^JaJph$9O:OoOuOOOOPPPQQ Q&Q=Q>QgQQQQQQQR R$Rgd+,`gd% & FgdRgd+, 7$8$H$gd+,PPPPPPPPPPPQQQQQ RR*B*CJOJQJ^JaJph??&hG6/>*B*CJOJQJ^JaJph??#h tB*CJOJQJ^JaJph??#hG6/B*CJOJQJ^JaJph??#hG6/B*CJOJQJ^JaJph#hG6/B*CJOJQJ^JaJph?_^^G^M^{^^^^^^^^^_%_&_=_>_?_C_______gdv4gdO gdavgdO 7$8$H$gdO 7$8$H$gdG6/\^_^h^z^{^^^^^^^^^^^C____Zdydddwfɻۻۻ۪s^L^>>h1CJOJQJ^JaJ"hv4CJOJQJ^JaJmH sH (hlxhO CJOJQJ^JaJmH sH haCJOJQJ^JaJ hlxhavCJOJQJ^JaJhavmH sH hO hav5CJaJmH sH hO havCJOJQJ^JaJhG6/CJOJQJ^JaJ#hG6/B*CJOJQJ^JaJph*#hG6/B*CJOJQJ^JaJph#hG6/B* CJOJQJ^JaJph___`*`J`l`````a a-a3a\a|aaaabJbPbQb[b~bbbbbgdavbcMcScTc^cccccd d;dIddeee%e&e0eZe`eeeeeffYfgdavYfgfqfwfxfffffffg!g.gHgNgQg\ghhh!i"i,i^gdVl% & FgdVl & FgdVlgd^  & FgdRgdGgdavwfxfOgPgQg\ggHhLh}hhhhhhh!i+i,iKiLiiiiiiii6j8j9j:jŽxpeYYQjhWUjhZzUmH sH hvShvSmH sH hlxmH sH h:k=mH sH h2mH sH hFmH sH hZzmH sH hW?hVlhVlmH sH hF h^ h^ h^ h^ mH sH hvSmH sH hlxhZzCJOJQJ^JaJ(hlxhZzCJOJQJ^JaJmH sH hlxhavCJOJQJ^JaJhav,iLiliiiiiii9j;jj?jAjBjDjEjgjhjijjjjp`pgda gdHgdHgdvSgdvS & FgdVl:j*CJOJQJaJh&>*CJOJQJaJht;ht;>*CJOJQJaJht;ha>*CJOJQJaJhahaCJOJQJaJjhWUhW jjjjjjjjhZzmH sH hWh!F*h!Fh!F56CJOJQJaJmH sH *h(Xh!F56CJOJQJaJmH sH $h!F56CJOJQJaJmH sH jjjjjgdvS $\$a$gd!Fz+p,p-p.p1h/R!4567:p:%/ =!8"8#$% DyK yK Zhttp://rahuldausa.wordpress.com/yX;H,]ą'cDyK yK Xhttp://rahuldausa.blogspot.com/yX;H,]ą'c$$If!vh5L5L#vL:V l t 6`o065Lyt!F}DyK _Toc298233614}DyK _Toc298233614}DyK _Toc298233615}DyK _Toc298233615}DyK _Toc298233616}DyK _Toc298233616}DyK _Toc298233617}DyK _Toc298233617}DyK _Toc298233618}DyK _Toc298233618}DyK _Toc298233619}DyK _Toc298233619}DyK _Toc298233620}DyK _Toc298233620}DyK _Toc298233621}DyK _Toc298233621}DyK _Toc298233622}DyK _Toc298233622}DyK _Toc298233623}DyK _Toc298233623(DdI  dA ?litePicture 1http://www.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/4.2.0.cp03/html-single/Hibernate_Reference_Guide/images/lite.gifbL`T_%l㷆(9 Y n `T_%l㷆PNG  IHDR'<PLTEsss999׏Ⱥyyy+++VVVHHHddd̿nnnkkkҬ%tRNS?BObKGD$ cmPPJCmp0712HsIDATx^흉8}1˰6}{1q~ɐB_YLP?$% @ ?c@0 $$D'DcHiaOۆ0)j  &y:&sک"hTk“Q=H*2Fj EɌڂ6-'L-3bGfAIqtyCUrŏ*yk c+6oN;' ,1Mz.x-SW`yKTT鍎sEg+ش@`sű.ԌѕԿY8t"b+5V?Yǹs[4k%qi״"SLEQg71nu}vdsh9QcZG >l xA,^ĸb޾txC{C$8gZpykB_xr0-\Ox0>V=֔Gs7k `sP?9ƇcԳC~spW06>7p?6P0B <\`.zW~wI DQQ sh]966$a.m+1s? b/oQ0^h(ڴƟʼn>plT鹐vGzWg~Hc4bOq|F0|PY$ɓtrF0Ƒa(ˌvcGT*x,ǣNFc4X0am/}oڮÃ0㌲WeGEstv;D>_`6,L}1#F5y?Q%KJ{{4cӰva!Ic7ZU%Y vC:G0An"ƞa7alI36pa h#&N¨6E Cz eEFSnj&j819`q[3$ Eцcc1,DcpƗ F4Ĩnx/kcFB`ev"Ε$J >0 Ѫ{_Vɺ1C Z5EƠ;nDKBˆGx+>By oeb!֧hc Wݜ S #< w8!.)ɴ)WB(Ո]*O)0~{˱3;40B(6d^xg q#xNn?IK7L))&8 𺨍{N?ھƘ`=Gڈo(PU nN`|tnA$UÁk86 n!t)Eȅm)` ⅂0xލs 7p"_oi`G[0 `Y1Y.`x-8>㣢y#>Lѷ~q%m㿗cjqx pُGoeW U_d k72xDO:cփk+t|hh3G3RGQY\#(xo6>#g66>3ndn|Fj66#27>#g66>3ndn|Fj6ڈpא_gqwq&pӸ[F3tߖ$#},_.-}r<1Y0+CdU^U:XQsWi662~DCJOQ1xi6,0Vʏ~]C5uh#- m6kJW-{)$iaSntH+NU aRjYp8oǼ-em{AiA܏F3U$vK@m,L7V-bpZ%dwl^2.YdK AVǎvAF ooӧ fGEk(/TLqq`㹱T }F.|qhIkTXVG2d7_fCz)\eL}JH:F@o4+l2 ڮҫYiX &3)sv-~jT hcbeg,ȸ͟z>+޻uYb4yc+)艫z˨frq>d<T^x/ hFRZ3n88[Nِ301Ɏ=ѴIZUݭUpn+Nb :Sּcš|1uܛ {nazgZR`X,F\B䊙.%Sh\_R`yh,/89]pnnLE^΍S) $%nOs2 [qywW˅qOuC t Zٓe_dT[**ݘ̠ \J|(1qu5dpicFNOSzufP|UOuFmm`$K3d{!̭Rhct L.* k]O+U 5kӟgӗN^tUwhEƚt 8N+fLV Gg1#[+ӄ9H #֍Yî(ѕ딱#\ cqXó18+Y?3%  6`=A(`ϱp3:CC g0Fi _ҙNgpcrlG'8Q2|lJ2p@h` E @0b"c|Z 1~1>-AB_` @ c!/B0g1!3@h` E @0b"c|Z 1~1>-AB_` @ c!/B0g1!3@h` E `#E%YcNp$,.cH1 $ Fh`LBItBQ0&!$:!(@mIH N6 $$D'DcH PwIENDB`Ddv.i>  C AbR^J{\XHRrW.a%Y n&^J{\XHRrWPNG  IHDRsRGB pHYsjIDATx^_G[h z?a/l ^15-|`k O3/h̬Fya=i vl/Qiк`Ae؅A\ a/̨̪oQ*eGƟ_|"2󛿈|ї-|@@@@ps_:^<-RRx-åʃ@A쐖? Bt1 ԉ7*iZ4Zu;PRjxEBϸ,D,%CAgRYٖPY|5WPYd;SGR?k4~[ڭS:v+l^-ٟ׽jZ#7mJ6MCzVşBޓCggKqX뢟Բ6y 1b!D/8\2Veg嚕w5+K꒞&5?\D;||,=7|=2PZ;΢4coQRtƣK*K`z@2"񩇷o"d&JDU|)V:*Er)h[)M˥HmumDr#F:DrzAQIw-ҊQ,tyHGDގNI.M)=$|f#)/>Ef2֚E1aS91,k"n]6✕_n]#*% egK%N )?-RV%Fߨtǟ}SKmo):)!nɂE'8N\JQ=="zqbL9"'pFm.6M{Kg,6oG|!qqG  gc3&(qIZw&I\]̲c3-+.1Aw,d8&ۭ/~}_ xsB~\Gq1q,OT?He%GhdeSsB|f⌥& x;:'A\n|IR}1>ogގϥɹ1.Y:>֖c$CzNHΜqY'K#T|%A>*sF]"8rGYӘ3X&Xc!kRb"3)ϥr(ElO|{|NvrfۑTC[,/_0R(ׅت9nk*}3mGǭlG&) )>7&Geb$E}`}nl\#fS\H.wc:CtNr'|pCe\2>MJ$ϟ?3Y+xL߬32==\S2.H ݩJ÷,6+e#u4xDKOU9! aT܎\ND(ZSW*Q RR.-}yܫ'V{FOw]":TP"VimmHqT 5-="GJi6@.Ff|`}wX_+"GCE|ut 3 a &M>ɐs>U/T[ʌW=Eya;wأZ;RX+W(3VZܞ8MLxJt϶%{mMĐ ֌/\>'a_)yjN &^%>`xLK K?{X.boPHZd7TEyVHGxj/66'~I.in 0_#oǂzO ''jal~:Od8=a>nohDU2 Ӗya:jTV>ޣoފ0(t?D%u.㾚dXsvLNHǃ}iOiY|LzB9#Zʬd"y[d`J_/d2C{<04>"͋V"x# 1v-9:z:p0milgӀ+Sw:PnhCCWT{2+>ԊC;+bRQ`2RFީ{G¿|F4<7xp<wt@7 r2_:2B}~gMqۭD*:`*d92O{mKQD-$q eH(Xe&}Gy/:$ƧqOM]:?`elxh/ 3i'ΘOɤ䲗\eT*^cQq$̶ӄ48TdT= :OexDG'\崨̍R'o(qIȢ(elU|\ȯ Oo%ީDNPHDX*%^e'% ۱p1?8E|d'eX7_nS ɣ>'dTD'yo7^ήrgd^T?c_V2w m+GD"C 9b(yOK$T:' 8$.7}oҢϤ&e.z|.?l+R|ĥ>oϤ#gDO{>ǗU^}<4yo";.u䞓5?7R-|'wG[\C03B$8I+ou}9\E.Ł"D%9 ZRBjQc.R|Tǣ UsDؾ2ETw?# ܓtd|xo|L:I(ڠ$ħ$86}D"ޣp y2x)NrjM:lX0*]Qƒ)FqM_$$Q£vחB\fROFꑊ[Or&w}❒13ʟKI4/H8J.5<.!'Q;>Q"2x4'/)R}YXH)S'gC|,wQ/ Kc˜,}3܅,jAK.q;,*=Rot)Ə'(HQNJ.%'?zF''ǷӦV|H '#/jKޅx{~/l>N),ʓZPSIFTPƭ$vM;{eA!H~)Y.!Y"_c&G-eG%`WBJX"1ӣC_"sTܛ#%{z,q!)ގ 7QJ=Rw*]_^Q~.a[\%E╥xzbߴgQe:o %rr¨6_9 b7)|#\[?z;w?ŭsOa7wxʏ=m|)X]$y?ѓmA&w6do䈊EbtAq&xj"e"Q594d"#iH`KqB`8BTTtX^_*;NR쯢$D|k3w"i0E;o<ȓJX_j| aXPpzC7w*Ka}KsBrMDb}'vIT|̣'O90^"ē}<_LOvy^U<_[4e*Ze*R[rgna$< /_;;o̗Jy0_j<$>mN|Wb1/W͗J/=m##{e{wto]MrG#/޿guz,b;$(q ų3qY<4։g*G EF\mUI6_*qw3u"TtWGl\go9!R$.eY}J[sKe{~g^9:?`ՄJ;HXIK'n/i'j<WVMKMhLMewk$?zՐe>'ST0휐>. x+z `|Bo&o5Clm,(L_12dG9kX'+tTTJRn@%Kx~S17C$/J>usy1>J庠@grc)vHfRϸΨ9A'}0|JYAY|13߇aF$#H6+rIV?x~_'!q5b:#TZ/OLNRZ4ϰku!svk/GƝ}Z QRci℆glx(m^죲݉'q|tuSsLEFtj˽nGX9'ل<{wÔQݘgVublg>gO- 1nM]v}|y-Slw/랗HBг³=PݰWgwڝw`e1'g ޣDh'Ny2Rw᪳]c3ǧޅOezW2>>_J!`hVGP~zeCy\i|۟QS;Yx2_ooHȬREmƧ8[Cƈ=eWƘu/xl>BywhDy(^SJmo$R);5) ) a=hr.>wS+BӺO/87_51_> >ԅMSCY@@fNT1A@@@&j0@@@l0@@@&j0@@@l0@@@&j0@@@DIM#,Ѵ`T54RtTe6i/- uP Re?BKտ`!b( Qsų`5ZEu@@L׹u`@39> ns5a%xG,K,mz-PPV4bȃUQ/M I%dC3+bumE@|9_O  +g-UT7 +TeZ *QYԁ׽r9әĻ̑;-D5+vSIZn:rpZu oã/w;jrA\>UL/eUF  0:jhyM̙k*d`ʎWDJ3V#f 't"T@>YLg±Y͓53kfqvԡ@(o㣃7 }KvHpԹWo3tG,$wF16=U3ZXX!K9ꦅ;E㗰XU2Z(8 &Yf*A@`"!뭃Qi;:ܺͿ,2'ΤA?\ɕ3E9Rňc)WY3,DϺ ZE<$A"?BEL]KgդG s|49UZHQVRr^S*CHQ&hdxvSVsS$b~)uֶd|Mr7Cx%d<ZHeՏiVTT0I1g< aM?q!99SqCO!s2T9Rj&Ŵ'2D"``|(?,8SK)*@@"9y_THOsXY'ȭwww.BnB@@?CW?sVٗX`~*a&xJtjB45H@@jEWKh3wRso  P0_&3@@@IZA@@jBZ& 3@@@IZA@@jBZ& 3@@@IZA@@jBZ& 3@@@IZA@@jB  3jBߚ3@@@`0X|DRP@@wAKn@@`LAof79Sjz.GaT"0S-eTUW 1Tc6+3gh!1Lݚ$q-ť˶1eۚ^Z|krt0"&_x e?kL@d!^yH$PEZ7 gZhOR -`MBjƅ]^VCu@jB e&Ev\^K,#'@9-hχ*5]k.*nnnFKH YsOZ"K'+-誀jCM FfLTd4"fTхձ<*.8Y!&q55yi]櫛tXNM !i(>4j<>?Zs)fJVkl[G_F͈W= ZL3+ZOϝH6+Swoý>o8|CYU4ѳpelG~l?zKq(SNh*ٵOϯ7j~.h>{prÿݠ$ThCs(WnEV;U!&í1HKB _jIKjFҢ}#+yn_P7WKΧ :w䥐o(~~kR7Lq{Og^MK >u8:\Ed"FK/UV5$xl%^M4N|xo=̗@Uv4xPՀɅ|qLHW%!#}wE]Ѭ*37CkWȈE _ ی3 k^r|oKt׻/xB~e֎/]5#@͙QǰO5R[?~//W}' Y   Ku Woި 췞RO;5 *T6HN yڠ?#!3?tڠ?s"d1!TMlE3iG*\C@ҝA|Xa_JܬK$k"1{JqHnʙg#('˲ft<_wo3=4,nK{EKEl!KxnFGod}i/ Zk'{*6S;8j }nߠ/mDB6mR}8nKV/Ը~ISE)_""+!u/+ZnfV#VϜw;zϢgZu )Y]fr1_]yww難g߉~@y_e5y v^ WZ }މ*dxTfG5{] IT5d튚E@ > h)fE+jD`ITZX[4T-E_uMٸXZ*ry*wp8 2ƹFdUsPZέ fC Cri  -JKqkY(6CKY,0Z ~'0Z*_\;g5) #$FKdL0f ش @@@`h)O$Ο,͔: e @#sTӽׇ吕^88 vE$  @-2U0ʒZʌ2VCLê yckʳꒀ*H"p_ A`q cyȨ,0ZgBaCe@J5)jD  0   h)   aTiT5K$f}@@@La_JVԜR:    `%fMO$t͐ܬI-@5!R!`SzaĊdFVsbV͡-1Q(%@Xs9=, r]DjZʧYZ*KQj٪f%c>]8P~vaktʿK] U] - 9_gME˜~7ulK)jד o|n[~vUOa@ R_oQFַ hcyg!a[DQV_>8Gv>:v>{;NkJXlas|dGZnڔv"Ԋ.ͷqCf;LsIrY؅0G^Eʐ RBFd*]}UD[#6K͸8q\<xý+[7>Fk/oG믝ioNak11U-T_rk`l5m"V ڐ%}j#UVQM.d!"" qBGU9Y&%dJ,eju Z.2UV17H<[l?՛v;`"kMu1=+Y!j\SB;"#̥| 59qq@$8ȣ\?i_cRK(J B@* sݍB$eIIE!=effq*UB )J&&U qTSg {,@ JUc>^֥IaR#U#`tV絷⣏-uS9KDqi_= ֬*W55Tg!SUtjI@`MV*X^h#,_8#=k/wl~~iD6h9F0k"fMTftMR-,1w=jK0y@Sp^;Gڬ,B&o50Z_5܊4D1ag:|Ƒ=JuØi)%G] 8;:SE69Ki\}}>ikLK^68 uޢ5Ch?]|)QFXTFYH,xq+_H9F 1P<ǎI'ZO:^m|ܧ@-s;rBP\O嘇eJ,>!T[qqi 1ܑr4*,ON~巔.6#Eh bYҔfHJ@jUCQy5ڣ,H ̽gplZT @@@`h)sE5h5rFK9IqS-͈? >N.gz|;Hk!O`aRu*!`e)*kEA߹۝o|n[~vߦ]Ӱ ys|)5!sڦw`O f|ؘ>j=5 "&"gPq<={kWs +zʉg(`MIZdOs,¿ KsZuƝs7VeڇhY`8q':GVBL(D.\T(D yj)ae=<8c3ik)ǝ\֐/u'[wɴKLKcHNEo=ÍcGi>(*"u`eXT̑OBΗCa d~)z^;%:_vQR 5Af%m>Xh~)3+Z1+PYz&@Bj;*\q6RyY?_Y]M&H4#Η:hmPfV6ȁu ^v9Z!Lr -!wET@-BBDK`tt#:ld^"_;w˙/ќ?U-˙Lm9˳"ElB?8JYlEyj1X}WҪf-X,Q?UAi6A`yRK-OC.XMU^N̨̕ѬVkg߽zMӦs0g˞8Jf! cB)a$12sf#IhVeyDp \]PifI,L5.0A`Msf0\ܜE|~z{g)EZۃ7Nn/|t[\SEZ%D ef͓O{6KZ5[yjqYƭ{{URY)TkmMUK2k9VG7TDtTDy0ßSxb'PC-uovyNRW.nmZ8<#S!ei,R/M 3IVü\-{Rq*L5}SH @sy?2(,-EAAf%Cf8_N%ܛIsdg׃׻o/M?琳}ѯϪyg-E~aͶj&Rdͬ{g+ "̌@-3_J;񟞧8sf]B$"@:pu^Xm}dM0|2;f/`??i5ìĬk=fYYՑ4/Kl9%C^BcUS+-oD|J]B䫦| ҮX|zsz=@&h)OU=ߨ@6Uow׌/7IU<|WmGVrgo15%FԤ7 ~EfZ~巔.BHխYM{OR,՟٪&9T42%Ȫ;Yh̸ s7`h)s5D=AK 9>=OVSpsil   8NJ N+_kKgI,]Q1Z-r˚`MĜ$!)\YE[ruSZW_>8Gv>:v>{;N[   g)ecHJTSvSr)+gh)k&#D1Qi!jr붙:34kOb!l*.5ؙUz&\L5ʱ+ևӏ6|Ǜ~CڵP5p0X e ]dfIR׼T{fhniH[j>ޅ7V'QwZ'.(xnnqM0K,,)aPGlEUEGY52T8lj]R>~6+9QU˺\#~9:DQV;?iEb;Ԁ[%u.>1nDjWM$PHxVPFɍYQ#Ӫ,7uW9{ D#y?_Y]E=hύc0%pBJ.D ;>2TA*2&F P7,8fjD .\9IwZ|+(:ߌsdKuִQ K9Բ+4rgڧM_Ծw s|[l_uz7{/gة K' ?'Fj{ժe=v8#cڬ!Zj]jZcW3tZ-Ljeg3>XPܒysKkWY]K5`9҆Ua h͏"!Wo8$QZU57Xriޔr*#<X-t4ςf],,n*չPUR/U $>,s=9SG%F*vD[9]ȆIAU2:8иs!(jH@d0)|)s\t7[4u0ѽko/?G -Aldgz׬%jVN68)ݳ@@(0Z/d 6ZmO0MӱB{7Fhsoo_amѫJ-)G>Y>3[JE>ά !2Oa_*;1wUgSnV4-S;/y2?> iF~E}꫎ǩ!J.ʚF[#c"$5B:|Ƒ=ɸuaLjb  P'-oĢG}3+͌bfɑ#2KSuwYct+}92-hOVGs~nE MF7yz'99 άTK#RA-*eZzz 5PE# j /R [!k^o2qf b<2#0Z*Ԩ0/?g|P ]}-2"Ү"@@@-,= {c'CwV-mGK}۝o|n[~vߦ]s1, 󥲐mpc9f瞓I4SbcoRk. "Rji;_*r-5W{2qg鍵hY!Z5nܹΑyB  O kMU?ǗZj:ܴcT֐-p'[wɴKL$Ʊ#_ΧgYYHGROYZjٮ}lrO5RA%'@:tBSџ"x"u3kܜKVsm=2Q<3Ԋ,=: !f^K}jK_JOwѣB/9T/ՊS֍O_~sӬ,RnOwJ>"j,!Ͷ\?D*U,_ =m<щ>뼲uOk/oG믝ioNV%5xM2j Y_G^\uY .Qߔ'is_o2.ZF>Z-yV4]0c|գְ:+qOSOv>mWos*8D3Z8;Wܛ"\uoWžU C-PqJQ+:M*HH<-G(>AcY .䐛-ǔ̫9M/pHt lC> PgݖGfĩ3RdGžy-\ sKD7f]{`nK#zAKqooDVakD3lAZֳGQ@ȹNFA `%X*i)vDoT9]\YYgR3OxNNq0)`7OF'0>(o?(<5>,!晿mjVA>(0b5 1AdX6[~TJqВs/."+| *œ|jGR%@`G[๾4G,y*t:+#ʠO"XӪcB̴dL"rc45˲G3X-QY$ [a"jz*%?P}u%>$3D(8Lgެ8f*RhZJuۨI++,nU'4\><jkF.FX CiMK ;{} ]E+6 r,࠘eAY 0%'6ǜRumU-%n>o%[s- @孞s 9?Jji绗Rt!EM|R\nik+Y\$q7m'dG"_jZURUL˾x:|5h>"Tx,oBGfte=<ظh)̛EX0M"F i֑DZuxBKf=< xQn?[eE]!,Fp3Q_8R*Ԙ3k3ns\ff\ۊy*R~_꓄vV>j=ڵ=X -e-ih0c|c1>|2]\9vsƛ7z=|Qo7:jzfY^">#dBkdj2AISYS:!˼Y]J-n!UbB:r>T'C*HEс'3`]jN{ڗ>vovp+Nov^=7f^ru늝 Zl].Z5U8pc#TBZ.&-UǨUViZnjPHHOEjm>Qc&,ֻ׻vu,(wZz-5ΦUg6E7h)'AF.%n鼲z絷n_?X -n8?WV*5իYsKi)My{rV-uzZ fJ/sS^+nE?㾿I y6Zt{8RAٗJ|hjO:iQ4ZnoG)f)6U}J%?CyZ3Yc EBe|@ /UiT9>%R> 1+J#yvV=rA/?G 硻>j_r_>,DExҤ(P; bjVA>ֳ), [YMO @Tz*OrWOjvqZZ\ R#I.OB{7fM?琳}QfM@6hs3v-wxZ4ׇUV8*gJGl#!3z^i,9ʽ"TSJV[<} 4Gً"8?:rwESsw ٫-ᣲ&>geU%mVղ+ZABn1ͰޘyBF4"PUKY>TϦr?Š s\g4Y. Sցc2Y9<w6V} ]!x9I4PݶiJiԢ!iJri%fb 3+eDk,IkQM'DX6+:s6" w.k5Zfie+\i=WA+ߺ,љq?h}վ 4r,CŲLg4nl*fYk"O<5Ur-]Zz!RW" e3XwOOSr}X!1#Ĭ#MpwPr&jHIiJ/    PIK#l;G:E[>sVT':½w <W ~م///dg r܈Ґ9Gj.2:x:K A@Mc|C?? عfN~ѩ|/|ίӮ%LjL@1>TGM_k}9hǛo=L7oHj ;E6C|۰x1h)DNhA.z8¯?)vQF97͞eYG HV?Z,0^ja`ࢲ}c?Y_׎~BSџ"dYj&pw-Zi<ꙕ,HΞjy^ @}֒0Z ~6p `ke|ƱEPb\i!E6(δ\AÑݠPUnx0M_͹<xý+[7>Fk/oG믝io厕1z[F8:(иj'Xq|zZV/+VS8 '33Uq&н77G(Jk1JS&yOMB€ Hyo('*zg߽znGCa{TM ?O41DgɊq8 %~/UfkQG k)jݢZ|;@M2WcJW {@ip0)^y_avBUzT%af⨦HU{U@` jঊk>JZJ-7fsY#n@Y[};Du0rqGBi3+Y3|VsنQO [U%& mqȠǒ&Z UaTN3c*\*k*ׂ܎TB{7Fhsoo{rw>CxVDcKl墙#>`)=7CT\@Ss[|dqĐuˋSy:z<V[<} 4Gً"8?Xv:ќ:Z9Crđ=;[NYF1Yn {@4c wp57}]fAk,0-r}|ib5g'N"r X'q`Ja~k2S WǹVBڠT{ O%cMⓏY.2A6h{E^n! Кa3+ k(_W–Fsݲ/uw.}4xE)vQYԷp ό 9kۚ 6c|ԏ6wQO|l=Kf9 떑Z~巔.f )0;+YW,9hd@KT!PIKb1ڹ T=Q%҂,!Zļ%*W!9GEEߙ#Sҽv{(Kɟ"2R޻FRozy2W"eGxfY^"#L@-5ο5ٳOWVW R4M 2Κ8֡Ajc]a5&W'LRm e"A@ a_jk(\*}|%I*<xý+[7>Fk/o_믝ioeRnEuҒ;Mɍ٦I1vx^Ֆ 5ЬâeiY:*5R5++$OsxO&yuO^9[[ۘӞ{ 7 ~z{gHH?yk'Cv>r-rTm3rHZyL )23"rWS:6LL ӬVĬOaM'&B뵄<՘/77PGnUysdnYYw5FKI[lRj"q+pP^Y;LL.E[-+fEz\[i\0:| B^MWӥ:iC ᫚> M "f&|\eէRvVrq\PGBy>jt!ŸT9=;|!;},M6D|PxVh  /ų,+9b8+\(^ԅyI^{`nKisoo0h"@B>pD-5{,OE@9_}>w>qTޝvO^Ϲ;:V[<} 4Gً"djHQ\FK.9tvwf5JrUQ%SGk-"@ias|V2G(Ng?xvsxsx@5XtV)vQ,WֈX̚V:Rfc?kr,KTE&|1jZ~  u FK/U߼u:[\o,RTf<5ɗ:G;>I_GwH(B*6ܯs7m  IZL3'YV'|y{n\Zo^}A rYeqnYw̸՛RF纐Z~巔.RY]H8U,8Հ +d#@uTsh 0Z7*ɝG_7jƙR>~W -~ ߝ__$_ڵ(P%zL'Sۉgaߛ0@i1^MoRK ~۝o|n[~vߦ]Ӱ y ~&6 4RK"hT#[mPi>f|u}0Z0W/v{FS;{;_佝__]%A@`6~),wQ1>Pl6ʕFKYTI_k}9hǛo=y?]IX$.@vb$CrڟValO-?b42Y`օ:90߾wI~ I"4X# p/FZ+γ9˲j̒@EڨhzN#aX^\.r-?(g%R-rsd%~^;=jǿ'i]\KѴgիJ}s-(EM{k"$q0CTJ^UdܦNOͦ =?ptZZ>'k[-dV<7C[`#ysf?a|avu;U/Un, щ>뼲uOk/okn}|پձ彐~:38SZV[},2]u \۲rz`y'fh|q|JUS(@ w (h TRK;>匙u鲞˘O)PZ7T?v^IΩȒ!!rf cU7Qg%+=ԉcypi;e-YoNZP2,L5.0Xӭ. aT)FNYN*Vv?w*t*M d SU+x2.3*[q2H+C _5=T%,.V_E0X}{Yz1K .T%f TR>UHs׃׻o/M<琳}QuMOKj갊Y!yᯞUzУR4$"ҫG *=Wy+LjgDU$<Ǘeg#/?x>Z>-磽?YBfh?]|(_@O@Ŭ*&/3 ^ZfV'RkFY֪.\ص^ڕ[B9ե;qҙor)A 9ujDg:UH9nBx:cszr6k],&3FKU4z[#*ZJH[7KORs*8s:K-5%-rTչ hfӸ#lz~9:7G:(z5.>w~|i|kA@@-[l]X};w7ߺMZ@@@@%аRh|)|D+KE1k/uvm`ZaQ:yj4y KRYj)'wvϝX[EheZƝNY 1A@,-EAȝ`YabKZ:=h>\C;$jY, {{^X=DПH(=pDGhEH 0Ua|)>Jy@Fk/oG믝ioe dHH"h3*6e^0!FKyrJ}(߶N{K)<}jKZ^t5 MD hRUKx߭w]v;y3}ZYY͡u 5UWUĄGPaҥYj6Q`mXG24C–>qr rG!0ZʼiW;.U rAt\TNhnO͂:4Hf4̪]-)9N;"|TKkLc}8TDrvIFqA8 EdAiik-tMkVӧR2K0ZʼYvry(ZUrgUe0-C\Mk1#Gŭko/?G [>͡X2w7>L=O>q 1.ɭdW/ 9| LYX j)$ge9r*]d:r%_V[H|OEJ Lq+ќ GSO9޹O:^m|ܧ@EBiDl"mB:PGXB2s[kEi{ *' tlA5:w/^~KR`@!e:<`ηβeiճ9tiƅEL2ˍSw|47+cCVk!BIjI-ͫB iA@@`FhN-" r4W11&j5H̴ZYfYTpz=9*~:k(W ʡk\*nkK2ȯۻ뮾zمpn dÿK]kg  t>4Ow`SlvkcR[T_NBj[7߼}Vv}rEc5@i+=}hi̗;0wjn}tj磳;oK;k  V2n"0ZP ȥMBiW+ǮZvN?x[oƣi״D  L ?&$s RZֶOA.ɁY|տ}o(iE,ȭݟҥ*Cra@r  /ctJu0qu:j;GVCv.GZ_M\.{jU%m&"_rkg,^ KK`vʶDXS܄$tixU%A8mV-< gwѣB/9T} zo4\T7>\vҵX;8nwSvkNk*<|ws.EdeQRP4,nrr JzgĦtH8  |䯥J;*!UJgUYgrIj s|[l_uz7{/g"Y:%8ΒYfiPf/2sV%y pE[XT|dr#ǣyc6vg59aF}Xԅc!,'PnM0ZYrάGR*&\/ns1ph)ۿs6ZJ Lѻ?8yeko\;ſѕly4Ͻ1S+fEZߡ-WyH6R潐SwM̹bG%J/I(=,ܥBΗYSzN9 @@ʧDr$ ܭc>᫝g\@ZLMn/3= UkVAY:L٬yBQ U*1郫\'D* ˹";TE*TYR ~!>HH<ɕ@ZvwdhP Gf̀Vq55љkI̐y9 @Yh))q8v91ML䂧E3 r-ih JYo&YZOB{7fM<琳}ZOF+z@{ƫYi5RDܘv1p'AL)|Rmn֭Qh=Y7" 妖CT˵8YNu)GE:/y2?> iF~E}Yejn2Yf 'wΪ%:R.^QE1rJr\ mUZ# j3.Jn]\LtVgG;;]AgeiE5%Uinf%!3sMċmd;L2o=zCjzlRj@SR>~DWҹYOAr$벚pi#x+ZzG?{^qiWւ% hUջVVF j_ w/^~KR`@!Vq`ӻU(ݸ4bY?Is•07d xh)OC@@@@-?Xrܨ~!p!2\RͥPhobT@@-ktVFUa`K, YT:}V9@0ZZ>քZrօ:9([ýZlT4saZWMEIB@fLG_t^sMF:+e8/#iYTE p[sq_w{w]Y})+??2^j﷟j|MPkF[VkyV_S**nҒGJ^o-'=SiTOs$@CtWz:NJS]κf9vR `UBZR7K]gmOK4Yj)di.r~yuup}Һ*T}|Ⱥ!)jO3uq@`= C& 3/Y;2 4QI 9<9"Z fZ;{ 03:ځ,1'ZP˖^fY9w< Un A@-|YEgPTmHU/T뽧3/1yn*~Fr-zN@][]RG:܍+E*G-1a 뀝\ KQ`aTyZK%s7h& CU!Vׇ/nFQQ)M h"&˙U~VsuD07U].sDr'&9,>wE7m`?ܸzz5̧I7r[3 cz$Zd S"FK]sCrO  l4:r|#K{ioZ;0xkJLͭ/[I_h  PM.pyRR>~aV$`]b*+p8zauDrJu9VGUj̭{RW2/Wr#@@ԯ3- ʊ=KludHg}R Sn7DgdYe[46neb˾܊<5]'VY.BPOűΜr82;@-BZsF컿T?k,ԧ)s)U?Y a-4-%_vA@bҚ55?ԚhF/9<`+Za1AfL*=R@aTy3(@@jK@D$qg׶v6,_j_-g s!ŀFKM/۱X>~6d  N^J嵔uS (Q`lXE󪛁@Eǫy @M@K$R *KeՉSYۍ&c|y-E[]*UҌ#sZM.G)*ήoS ;A@`.d:\ d%rJKA۞Kf\h%-%4ƒYKpZW"fd* jAfpo@Z @(˙h$?7Z|kM 1"3˚!%Fs}.A@`T<(Jʚ3]]L/禎f@e8s B˕OG_2u؏;/=g[ |0@f@;nVQ@QMJ`<}{:8K4̷G;gg=` zw< %<]^۔ZdVSV8]lTѣ #&jm5&Ʌh8ZMǴZР$ܾ֕pZH2kG{zw{w]jQѯf_OW_*}|\9@5U6i" A@it>4Ow;˥tH8%tavu;UIKeUI0RB1Oݴԃn+Vn *kPZJ2_^Q_!h.pRsk̖ZK՟lg)>gZgzqsҮ(yAo{:9?5-UK@qZq:hE"P1Eb4@֚M˒|j>Ǘ;w[}.Շ v  P[YZgVj ˝U)YҺtS̪ H   D`vWfUt$!FK^_J$493S̊>QϢ#Z4۱www%H  u @CtG!x*S0]m&kcWU-9{HVUWRh)k|hB}bdh@`XԅKRh)o!U9/5-5m@YZYUn~0sME-Y l+obBKM ,)pT+Ufra7dp}894s1>-ϢHZR!5̜k2U)G jGuq,3+-)Z{fPsZD# ̙)wXdM6JDݫ=(T'N&E+xfIAβyfIe@y;C$\^%&p؉/w:t||jԵ:ZmPP;R璉ܳ%Uѻ3w!?,qQ):`-ڂUu<a@T{>:={uAR`Z(M֍4s7o/K'.|@@@@`R_g*I rjz  5$0*h)۹w_yo_ɍ[{!.v/  P+gm7R h_dcWG^X?w8E(Z@C,-$M{GWC@hݯH3W/]z,mmnK@њخ@@jE@Jj2Qk8*+\ﯱG^XO~h4߻N(\BA@@`I4WH9i!7q;fh)ͬ7wv>Q0gִD<#RH?4_~쟜!?5ہ   E XOͤV5m⸚ˤ2Zj:{Pky"@4, R͕SӰ|.R'1V}~9VW"P4    z(nOjX!nq)+DQ1N->|s^$Z6ȈWO6})vQV8$`2%@TQ5 Mci!jj4?I-EYw:/7?wWO ]D(XN;n !!`9@!CxNrK_ڠ?1W@@@*iFƃ@ut}z^@@=SW޾hR Q) -LmaV-ڑBKͶ4&0%"g\K]xi̾8f%,%jrT@@@ 8hH!ZFUA@@ ,h%jlT@@@ 8hH!ZFUA@@ ,h%jlT@@@ 8hH!ZFUA@@ ,f%1    л|u3Pn@@@kIhuIENDB`$$If!vh5 5 #v #v :V 4  tJ]uJ]u0&6,5/ 2H2 x4BpJ]uJ]uyt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If!vh5 5 #v #v :V  t0&6,5/ 2$2 x4Byt7:$$If>!vh5Z)#vZ):V   0Z)6,5Z)/ 34 ` aMp yt^+ xxx0H02 0@P`p2( 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8XV~_HmH nH sH tH @`@ NormalCJ_HaJmH sH tH ^@^ A Heading 1$<@&"5CJ KH OJPJQJ\^JaJ N"N Zz Heading 2dd@&[$\$5CJ$\aJ$R R MK Heading 9 <@&CJOJPJQJ^JaJDA`D Default Paragraph FontRi@R  Table Normal4 l4a (k (No List B^@B Zz Normal (Web)dd[$\$4U@4 Zz0 Hyperlink >*ph$$ Zzbullet*W!* ZzStrong5\010 Zz comment-name"A" Zzsmall8@R8 HHeader,h  H$6a6 H Header CharCJaJ4 @r4 HFooter  H$6O6 H Footer CharCJaJD@D MKp TOC 1,toc1x56\]aJLL  MKHeading 9 CharCJOJPJQJ^JaJVV AHeading 1 Char"5CJ KH OJPJQJ\^JaJ \ A\ Ap TOC Heading$d@& B*CJKHaJph6_.. ApTOC 2 ^PP pTOC 3dd^CJOJPJQJ^JaJHH   Balloon TextCJOJQJ^JaJNN Balloon Text CharCJOJQJ^JaJ O z"termBb@!B z"0 HTML CodeCJOJPJQJ^JaJ.X@1. z"@Emphasis6]"A" DklinkD@RD F List Paragraph %^m$B'aB  Comment ReferenceCJaJ<r< ( Comment Text'CJaJ:: ' Comment Text Char@jqr@ * Comment Subject)5\FF ) Comment Subject Char5\PK![Content_Types].xmlj0Eжr(΢Iw},-j4 wP-t#bΙ{UTU^hd}㨫)*1P' ^W0)T9<l#$yi};~@(Hu* Dנz/0ǰ $ X3aZ,D0j~3߶b~i>3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!Ptheme/theme/theme1.xmlYOo6w toc'vuر-MniP@I}úama[إ4:lЯGRX^6؊>$ !)O^rC$y@/yH*񄴽)޵߻UDb`}"qۋJחX^)I`nEp)liV[]1M<OP6r=zgbIguSebORD۫qu gZo~ٺlAplxpT0+[}`jzAV2Fi@qv֬5\|ʜ̭NleXdsjcs7f W+Ն7`g ȘJj|h(KD- dXiJ؇(x$( :;˹! I_TS 1?E??ZBΪmU/?~xY'y5g&΋/ɋ>GMGeD3Vq%'#q$8K)fw9:ĵ x}rxwr:\TZaG*y8IjbRc|XŻǿI u3KGnD1NIBs RuK>V.EL+M2#'fi ~V vl{u8zH *:(W☕ ~JTe\O*tHGHY}KNP*ݾ˦TѼ9/#A7qZ$*c?qUnwN%Oi4 =3ڗP 1Pm \\9Mؓ2aD];Yt\[x]}Wr|]g- eW )6-rCSj id DЇAΜIqbJ#x꺃 6k#ASh&ʌt(Q%p%m&]caSl=X\P1Mh9MVdDAaVB[݈fJíP|8 քAV^f Hn- "d>znNJ ة>b&2vKyϼD:,AGm\nziÙ.uχYC6OMf3or$5NHT[XF64T,ќM0E)`#5XY`פ;%1U٥m;R>QD DcpU'&LE/pm%]8firS4d 7y\`JnίI R3U~7+׸#m qBiDi*L69mY&iHE=(K&N!V.KeLDĕ{D vEꦚdeNƟe(MN9ߜR6&3(a/DUz<{ˊYȳV)9Z[4^n5!J?Q3eBoCM m<.vpIYfZY_p[=al-Y}Nc͙ŋ4vfavl'SA8|*u{-ߟ0%M07%<ҍPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!Ptheme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] bb  00gggj( |  D Mivw">%'*C./18J<<={>2?WA&FeHI KMM&OPZ\]\^wf:jjj689;<=>?ABDEFHJKLQegiklnopqrtuwxy{|~_ e")*N*}***+S++++,Z,,,,#-O----.C.s.w17<CIcM9O$RTWZ^_bYf,ijj7:@CGIMNOPRSTUVWXYZ[\]^_`abcdfhjmsvz}(Wwy;=>@`{   /a}=Y\]_"#%ETpstv& ''y)))GGGRSSa6b7bbXX X%TX%TX%TX%TX%TX%TX%TX%TX%TX%T̕XXXXXXHOQVadj!  ?2$LJ?C1J mmTL2$& R$SZ 1_뒼!@B (  "  # ld1$?`1,k? B S  ?H0(  b h> tj _Toc298233614 _Toc298233615 _Toc213768634 _Toc298233616 _Toc298233617 _Toc298233618 _Toc298233619 _Toc298233620 _Toc298233621 _Toc298233622 _Toc298233623 Y A)BGSQ_`"ab  An)BH@S[_`+ab'X`9b;bb?bAbBbDbEbbbb'Xx9b;bb?bAbBbDbEbbbb (xyz | 3 7 :   k nv e 1!'''k(y))*\+0y00011]1`1i1122<3@3x3|3334E4777d8<<=$=]>>v??@O@GGGHHxHHHHRSa8b9b9b>v??@O@GGGHHHHHRSa8b9b9bH,q @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @X         @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @          @ @ @ @ @ @ @ @                                    Q2n3[3iD E4`T'fo*M)]F'fpNf r(ms, "]:s gwIB l~ o*|e 4`q 4`]C1bld[gwl#V@}4`s4`$!'f li!E49!4`Ag!'f)$4`t%4`$(%3[b*'fcUQ,4`C)f/M)]b/4`&0"]#Zq2pEN74'fy\7'f,7'f74`hB:'f ;4`TKs=#Zq2+5+>4`]A4`TN+H4`L ;>M'fJ&S'f#T'f^&U4`pIGU4`2)Wr(m.% X'fAY4`W?KZ'fYa<['f3[o",sd[*z\'f"]3[M)]3i@1^C)f/4`#Zq23`'fC1b'fTNfM)]'f3[=ag'fh'f'p=j#Zq2r(m#Zq2 6m#VDVn4`%Rp'fT(p4`o",sIB #Szs4`V`z'fs\z4`hJ|%Rpwg 6mZY\x M j -[/; dN ; wO O ^ 4y0ab,0>Efw-R\@+x[~!wB`T%6Dw:%p-Vgd!l!I"/S"z#qC#w#m%o%<}())M*),6-5/G6/8V1k2v4V567Z7)8lP8+9P;t;<0D<R =t=u[=i=:k=W?D*?f}? @/N@AAIUA/BD+CZDX'D!FHI/IY _Toc298233623?8Y _Toc298233622?2Y _Toc298233621?,Y _Toc298233620?&Y _Toc298233619? Y _Toc298233618?Y _Toc298233617?Y _Toc298233616?Y _Toc298233615?Y _Toc298233614=` http://rahuldausa.blogspot.com/Y !http://rahuldausa.wordpress.com/Y MVC$http://rahuldausa.wordpress.com/ Spring MVCprattin  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+-./012356789:;@ABCqGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuRoot Entry FE&Y@E Data 1Table_WordDocument| SummaryInformation(,DocumentSummaryInformation84MsoDataStore }&Y@&Y@0OU2DEHC4JR4FQ==2}&Y@p&Y@Item  PropertiesS0Z1SDIAAGQA==2 }&Y@P&Y@Item  FmTPropertiesX2RWRUCZ45OMJWS==2}&Y@ &Y@Item PropertiesOF2ZAQXEFRYZ2A==2}&Y@&Y@Item #Properties'UCompObj-y  !"$%&()*+,. This value indicates the number of saves or revisions. The application is responsible for updating this value after each revision. DocumentLibraryFormDocumentLibraryFormDocumentLibraryForm   F'Microsoft Office Word 97-2003 Document MSWordDocWord.Document.89q